set cubic interpolation terms
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer | :: | nx | ||||
integer | :: | mx | ||||
integer | :: | ix(mx) | ||||
real(kind=wp) | :: | dxm(mx) | ||||
real(kind=wp) | :: | dx(mx) | ||||
real(kind=wp) | :: | dxp(mx) | ||||
real(kind=wp) | :: | dxpp(mx) |
subroutine cubnmxu(nx,mx,ix,dxm,dx,dxp,dxpp) implicit none integer :: nx,mx,ix(mx),i,ii real(wp) :: dxm(mx),dx(mx),dxp(mx),dxpp(mx),dnx,dmx,odnx3 real(wp) :: xx,xim,xi,xip,xipp ! set "virtual" uniform increments dnx = 1.0_wp/(nx-1) dmx = 1.0_wp/(mx-1) odnx3 = 1.0_wp/(6.0_wp*dnx*dnx*dnx) ! set i=ix(ii) in [2,nx-2] such that ! i-1,i,i+1,i+2 can be used to interpolate at ii do ii=1,mx xx = (ii-1)*dmx ix(ii) = min(max(int(xx/dnx)+1,2),nx-2) i = ix(ii) ! set scale terms for cubic xi = (i-1)*dnx xim = xi-dnx xip = xi+dnx xipp = xip+dnx dxm(ii) = -(xx-xi)*(xx-xip)*(xx-xipp)*odnx3 dx(ii) = 3.0_wp*(xx-xim)*(xx-xip)*(xx-xipp)*odnx3 dxp(ii) = -3.0_wp*(xx-xim)*(xx-xi)*(xx-xipp)*odnx3 dxpp(ii) = (xx-xim)*(xx-xi)*(xx-xip)*odnx3 end do end subroutine cubnmxu