Initialize a bspline_2d 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_2d), | 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(:,:) | :: | 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(out) | :: | iflag |
status flag:
|
||
| logical, | intent(in), | optional | :: | extrap |
if true, then extrapolation is allowed (default is false) |
pure subroutine initialize_from_coefficients_2d(me,tx,ty,bcoef,kx,ky,iflag,extrap) implicit none class(bspline_2d),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) :: bcoef !! `(nx,ny)` 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(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(2) :: 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) then me%nx = n(1) me%ny = n(2) me%kx = kx me%ky = ky allocate(me%bcoef(n(1),n(2),1_ip)) ! (assigned below: no temporary array) me%bcoef(:,:,1) = bcoef me%nf = 1_ip me%tx = tx me%ty = ty allocate(me%work_val_1(ky)) allocate(me%work_val_2(3_ip*max(kx,ky))) call me%set_extrap_flag(extrap) end if me%initialized = iflag==0_ip me%iflag = iflag end subroutine initialize_from_coefficients_2d