cubnmx Subroutine

private subroutine cubnmx(nx, x, mx, xx, ix, dxm, dx, dxp, dxpp)

Arguments

Type IntentOptional 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(*)

Called by

proc~~cubnmx~~CalledByGraph proc~cubnmx regridpack_module::cubnmx proc~rgrd1 regridpack_module::rgrd1 proc~rgrd1->proc~cubnmx proc~rgrd2 regridpack_module::rgrd2 proc~rgrd2->proc~cubnmx proc~rgrd3 regridpack_module::rgrd3 proc~rgrd3->proc~cubnmx proc~rgrd4 regridpack_module::rgrd4 proc~rgrd4->proc~cubnmx interface~regrid regridpack_module::regrid interface~regrid->proc~rgrd1 interface~regrid->proc~rgrd2 interface~regrid->proc~rgrd3 interface~regrid->proc~rgrd4 proc~rgrd1_wrapper regridpack_module::rgrd1_wrapper interface~regrid->proc~rgrd1_wrapper proc~rgrd2_wrapper regridpack_module::rgrd2_wrapper interface~regrid->proc~rgrd2_wrapper proc~rgrd3_wrapper regridpack_module::rgrd3_wrapper interface~regrid->proc~rgrd3_wrapper proc~rgrd4_wrapper regridpack_module::rgrd4_wrapper interface~regrid->proc~rgrd4_wrapper proc~rgrd1_wrapper->proc~rgrd1 proc~rgrd2_wrapper->proc~rgrd2 proc~rgrd3_wrapper->proc~rgrd3 proc~rgrd4_wrapper->proc~rgrd4

Source Code

    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