| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(sll_t_spline_interpolator_1d), | intent(in) | :: | self | |||
| integer, | intent(out) | :: | kl | |||
| integer, | intent(out) | :: | ku |
subroutine s_compute_num_diags_non_uniform( self, kl, ku ) class(sll_t_spline_interpolator_1d), intent(in ) :: self integer , intent( out) :: kl integer , intent( out) :: ku integer :: i,j,s,d,icell real(wp) :: x ku = 0 kl = 0 associate( nbasis => self % bspl % nbasis, & degree => self % bspl % degree, & nbc_xmin => self % nbc_xmin , & nbc_xmax => self % nbc_xmax ) if (self%bc_xmin == sll_p_periodic) then do i = 1, nbasis x = self % tau(i) icell = self % bspl % find_cell( x ) do s = 1, degree+1 j = modulo(icell-self%bspl%offset-2+s,nbasis)+1 d = j-i if (d > nbasis/2) then; d = d-nbasis; else & if (d < -nbasis/2) then; d = d+nbasis; end if ku = max( ku, d ) kl = max( kl, -d ) end do end do else do i = nbc_xmin+1, nbasis-nbc_xmax x = self % tau(i-nbc_xmin) icell = self % bspl % find_cell( x ) do s = 1, degree+1 j = icell-1+s d = j-i ku = max( ku, d ) kl = max( kl, -d ) end do end do ! FIXME: In Hermite case ku and kl computed in general case where ! derivatives of B-splines do not vanish at boundary ku = ku + nbc_xmin kl = kl + nbc_xmax end if end associate end subroutine s_compute_num_diags_non_uniform