handle_gesdd_info Subroutine

public elemental subroutine handle_gesdd_info(this, err, info, m, n)

Arguments

Type IntentOptional 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


Source Code

   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