s_spline_matrix_banded__factorize Subroutine

private subroutine s_spline_matrix_banded__factorize(self)

Type Bound

sll_t_spline_matrix_banded

Arguments

Type IntentOptional Attributes Name
class(sll_t_spline_matrix_banded), intent(inout) :: self

Calls

proc~~s_spline_matrix_banded__factorize~~CallsGraph proc~s_spline_matrix_banded__factorize sll_t_spline_matrix_banded%s_spline_matrix_banded__factorize dgbtrf dgbtrf proc~s_spline_matrix_banded__factorize->dgbtrf proc~sll_s_error_handler sll_s_error_handler proc~s_spline_matrix_banded__factorize->proc~sll_s_error_handler interface~c_abort~2 c_abort proc~sll_s_error_handler->interface~c_abort~2 proc~errout errout proc~sll_s_error_handler->proc~errout

Source Code

  subroutine s_spline_matrix_banded__factorize( self )
    class(sll_t_spline_matrix_banded), intent(inout) :: self

    integer :: info

    character(len=*), parameter :: &
         this_sub_name = "sll_t_spline_matrix_banded % factorize"
    character(len=256) :: err_msg

    SLL_ASSERT( .not.self%factorized   )
    ! Perform LU decomposition of matrix q with Lapack
    call dgbtrf( self%n, self%n, self%kl, self%ku, self%q, 2*self%kl+self%ku+1, &
                 self%ipiv, info )

    if ( info < 0 ) then
      write( err_msg, '(i0,a)' ) abs(info), "-th argument had an illegal value"
      SLL_ERROR(this_sub_name,err_msg)
    else if ( info > 0 ) then
      write( err_msg, "('U(',i0,',',i0,')',a)" ) info, info, &
           " is exactly zero. The factorization has been completed, but the factor" &
           //" U is exactly singular, and division by zero will occur if it is used to" &
           //" solve a system of equations."
      SLL_ERROR(this_sub_name,err_msg)
    end if
    self%factorized=.TRUE.

  end subroutine s_spline_matrix_banded__factorize