Initialize a bspline_3d type directly from its knots and b-spline
coefficients (for example, those saved from another object with
get_knots and get_coefficients), without interpolating any data.
The number of coefficients in each direction is taken from the
shape of bcoef.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(bspline_3d), | intent(inout) | :: | me |
the spline |
||
| real(kind=wp), | intent(in), | dimension(:) | :: | tx |
The |
|
| real(kind=wp), | intent(in), | dimension(:) | :: | ty |
The |
|
| real(kind=wp), | intent(in), | dimension(:) | :: | tz |
The |
|
| real(kind=wp), | intent(in), | dimension(:,:,:) | :: | bcoef |
|
|
| integer(kind=ip), | intent(in) | :: | kx |
The order of spline pieces in ( ) (order = polynomial degree + 1) |
||
| integer(kind=ip), | intent(in) | :: | ky |
The order of spline pieces in ( ) (order = polynomial degree + 1) |
||
| integer(kind=ip), | intent(in) | :: | kz |
The order of spline pieces in ( ) (order = polynomial degree + 1) |
||
| integer(kind=ip), | intent(out) | :: | iflag |
status flag:
|
||
| logical, | intent(in), | optional | :: | extrap |
if true, then extrapolation is allowed (default is false) |
pure subroutine initialize_from_coefficients_3d(me,tx,ty,tz,bcoef,kx,ky,kz,iflag,extrap) implicit none class(bspline_3d),intent(inout) :: me !! the spline real(wp),dimension(:),intent(in) :: tx !! The `(nx+kx)` knots in the \(x\) direction. !! Must be non-decreasing. real(wp),dimension(:),intent(in) :: ty !! The `(ny+ky)` knots in the \(y\) direction. !! Must be non-decreasing. real(wp),dimension(:),intent(in) :: tz !! The `(nz+kz)` knots in the \(z\) direction. !! Must be non-decreasing. real(wp),dimension(:,:,:),intent(in) :: bcoef !! `(nx,ny,nz)` array of b-spline coefficients integer(ip),intent(in) :: kx !! The order of spline pieces in \(x\) !! ( \( 1 \le k_x \le n_x \) ) !! (order = polynomial degree + 1) integer(ip),intent(in) :: ky !! The order of spline pieces in \(y\) !! ( \( 1 \le k_y \le n_y \) ) !! (order = polynomial degree + 1) integer(ip),intent(in) :: kz !! The order of spline pieces in \(z\) !! ( \( 1 \le k_z \le n_z \) ) !! (order = polynomial degree + 1) integer(ip),intent(out) :: iflag !! status flag: !! !! * 0: no errors !! * 5001-5005: invalid knots or coefficients !! (see [[get_status_message]]) logical,intent(in),optional :: extrap !! if true, then extrapolation is allowed !! (default is false) integer(ip),dimension(3) :: n !! number of coefficients in each direction call me%destroy() n = shape(bcoef,kind=ip) call check_coefficients(n(1),kx,tx,iflag) if (iflag==0_ip) call check_coefficients(n(2),ky,ty,iflag) if (iflag==0_ip) call check_coefficients(n(3),kz,tz,iflag) if (iflag == 0_ip) then me%nx = n(1) me%ny = n(2) me%nz = n(3) me%kx = kx me%ky = ky me%kz = kz allocate(me%bcoef(n(1),n(2),n(3),1_ip)) ! (assigned below: no temporary array) me%bcoef(:,:,:,1) = bcoef me%nf = 1_ip me%tx = tx me%ty = ty me%tz = tz allocate(me%work_val_1(ky,kz)) allocate(me%work_val_2(kz)) allocate(me%work_val_3(3_ip*max(kx,ky,kz))) call me%set_extrap_flag(extrap) end if me%initialized = iflag==0_ip me%iflag = iflag end subroutine initialize_from_coefficients_3d