Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer | :: | nx | ||||
real(kind=wp) | :: | x(*) | ||||
integer | :: | mx | ||||
real(kind=wp) | :: | xx(*) | ||||
integer | :: | ix(*) | ||||
real(kind=wp) | :: | dxm(*) | ||||
real(kind=wp) | :: | dx(*) | ||||
real(kind=wp) | :: | dxp(*) | ||||
real(kind=wp) | :: | dxpp(*) |
subroutine cubnmx(nx,x,mx,xx,ix,dxm,dx,dxp,dxpp) implicit none real(wp) :: x(*),xx(*),dxm(*),dx(*),dxp(*),dxpp(*) integer :: ix(*),mx,nx,i,ii,isrt isrt = 1 do ii=1,mx ! set i in [2,nx-2] closest s.t. ! x(i-1),x(i),x(i+1),x(i+2) can interpolate xx(ii) do i=isrt,nx-1 if (x(i+1) >= xx(ii)) then ix(ii) = min(nx-2,max(2,i)) isrt = ix(ii) exit end if end do end do ! set cubic scale terms do ii=1,mx i = ix(ii) dxm(ii) = (xx(ii)-x(i))*(xx(ii)-x(i+1))*(xx(ii)-x(i+2)) /((x(i-1)-x(i))*(x(i-1)-x(i+1))*(x(i-1)-x(i+2))) dx(ii) = (xx(ii)-x(i-1))*(xx(ii)-x(i+1))*(xx(ii)-x(i+2))/((x(i)-x(i-1))*(x(i)-x(i+1))*(x(i)-x(i+2))) dxp(ii) = (xx(ii)-x(i-1))*(xx(ii)-x(i))*(xx(ii)-x(i+2)) /((x(i+1)-x(i-1))*(x(i+1)-x(i))*(x(i+1)-x(i+2))) dxpp(ii) = (xx(ii)-x(i-1))*(xx(ii)-x(i))*(xx(ii)-x(i+1))/((x(i+2)-x(i-1))*(x(i+2)-x(i))*(x(i+2)-x(i+1))) end do end subroutine cubnmx