Multiple-output version of db3ink: interpolates nf functions
on the same grid, with the same knots. The last dimension of fcn
and bcoef is the output index. Evaluate them with db3val
(multiple-output version).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in), | dimension(:) | :: | x |
|
|
| integer(kind=ip), | intent(in) | :: | nx |
Number of abcissae |
||
| real(kind=wp), | intent(in), | dimension(:) | :: | y |
|
|
| integer(kind=ip), | intent(in) | :: | ny |
Number of abcissae |
||
| real(kind=wp), | intent(in), | dimension(:) | :: | z |
|
|
| integer(kind=ip), | intent(in) | :: | nz |
Number of abcissae |
||
| real(kind=wp), | intent(in), | dimension(:,:,:,:) | :: | fcn |
|
|
| integer(kind=ip), | intent(in) | :: | kx |
The order of spline pieces in |
||
| integer(kind=ip), | intent(in) | :: | ky |
The order of spline pieces in |
||
| integer(kind=ip), | intent(in) | :: | kz |
The order of spline pieces in |
||
| integer(kind=ip), | intent(in) | :: | iknot |
knot sequence flag (see db3ink_default) |
||
| real(kind=wp), | intent(inout), | dimension(:) | :: | tx |
The |
|
| real(kind=wp), | intent(inout), | dimension(:) | :: | ty |
The |
|
| real(kind=wp), | intent(inout), | dimension(:) | :: | tz |
The |
|
| real(kind=wp), | intent(out), | dimension(:,:,:,:) | :: | bcoef |
|
|
| integer(kind=ip), | intent(out) | :: | iflag |
status flag (see db3ink_default),
or 6001 if |
pure subroutine db3ink_multi(x,nx,y,ny,z,nz,fcn,kx,ky,kz,iknot,tx,ty,tz,bcoef,iflag) implicit none integer(ip),intent(in) :: nx !! Number of \(x\) abcissae integer(ip),intent(in) :: ny !! Number of \(y\) abcissae integer(ip),intent(in) :: nz !! Number of \(z\) abcissae integer(ip),intent(in) :: kx !! The order of spline pieces in \(x\) integer(ip),intent(in) :: ky !! The order of spline pieces in \(y\) integer(ip),intent(in) :: kz !! The order of spline pieces in \(z\) real(wp),dimension(:),intent(in) :: x !! `(nx)` array of \(x\) abcissae. Must be strictly increasing. real(wp),dimension(:),intent(in) :: y !! `(ny)` array of \(y\) abcissae. Must be strictly increasing. real(wp),dimension(:),intent(in) :: z !! `(nz)` array of \(z\) abcissae. Must be strictly increasing. real(wp),dimension(:,:,:,:),intent(in) :: fcn !! `(nx,ny,nz,nf)` array of function values to interpolate: !! `fcn(i1,i2,i3,j)` is output `j` at grid point !! (`x(i1)`,`y(i2)`,`z(i3)`) integer(ip),intent(in) :: iknot !! knot sequence flag (see [[db3ink_default]]) real(wp),dimension(:),intent(inout) :: tx !! The `(nx+kx)` knots in the \(x\) direction real(wp),dimension(:),intent(inout) :: ty !! The `(ny+ky)` knots in the \(y\) direction real(wp),dimension(:),intent(inout) :: tz !! The `(nz+kz)` knots in the \(z\) direction real(wp),dimension(:,:,:,:),intent(out) :: bcoef !! `(nx,ny,nz,nf)` array of b-spline coefficients integer(ip),intent(out) :: iflag !! status flag (see [[db3ink_default]]), !! or 6001 if `fcn` and `bcoef` do not have the !! same number of outputs (or it is zero) integer(ip) :: nf !! number of outputs integer(ip) :: j !! output index nf = size(fcn,4,kind=ip) if (nf<1_ip .or. size(bcoef,4,kind=ip)/=nf) then iflag = 6001_ip return end if ! the knots are computed (if iknot=0) for the first output, and then reused do j = 1_ip, nf call db3ink_default(x,nx,y,ny,z,nz,fcn(:,:,:,j),kx,ky,kz,merge(iknot,1_ip,j==1_ip),& tx,ty,tz,bcoef(:,:,:,j),iflag) if (iflag/=0_ip) return end do end subroutine db3ink_multi