Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | this | |||
type(linalg_state_type), | intent(inout) | :: | err |
Error handler |
||
integer(kind=ilp), | intent(in) | :: | info |
GESDD return flag |
||
integer(kind=ilp), | intent(in) | :: | m |
Input matrix size |
||
integer(kind=ilp), | intent(in) | :: | n |
Input matrix size |
elemental subroutine handle_gesdd_info(this,err,info,m,n) character(len=*), intent(in) :: this !> Error handler type(linalg_state_type), intent(inout) :: err !> GESDD return flag integer(ilp), intent(in) :: info !> Input matrix size integer(ilp), intent(in) :: m,n select case (info) case (0) ! Success! err%state = LINALG_SUCCESS case (-1) err = linalg_state_type(this,LINALG_INTERNAL_ERROR,'Invalid task ID on input to GESDD.') case (-5,-3:-2) err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size: a=',[m,n]) case (-8) err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix U size, with a=',[m,n]) case (-10) err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix V size, with a=',[m,n]) case (-4) err = linalg_state_type(this,LINALG_VALUE_ERROR,'A contains invalid/NaN values.') case (1:) err = linalg_state_type(this,LINALG_ERROR,'SVD computation did not converge.') case default err = linalg_state_type(this,LINALG_INTERNAL_ERROR,'Unknown error returned by GESDD.') end select end subroutine handle_gesdd_info