SOLVEMAT Function

public function SOLVEMAT(A, RHS) result(X)

Solve linear system of dimension dims and multiple RHS

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: A(:,:)

matrix

real(kind=wp), intent(in) :: RHS(:,:)

RHS, sorting: (dimA,nRHS), two dimensions can be used in input

Return Value real(kind=wp), (SIZE(A,1),SIZE(RHS,2))


Calls

proc~~solvemat~~CallsGraph proc~solvemat SOLVEMAT dgetrf dgetrf proc~solvemat->dgetrf dgetrs dgetrs proc~solvemat->dgetrs

Called by

proc~~solvemat~~CalledByGraph proc~solvemat SOLVEMAT proc~sbase_init t_sBase%sBase_init proc~sbase_init->proc~solvemat proc~sbase_test sBase_test proc~sbase_init->proc~sbase_test proc~sbase_copy t_sBase%sBase_copy proc~sbase_copy->proc~sbase_init proc~sbase_new sBase_new proc~sbase_new->proc~sbase_init proc~base_copy t_base%base_copy proc~base_copy->proc~sbase_copy proc~base_new Base_new proc~base_new->proc~sbase_new proc~readstatefilefromascii ReadStateFileFromASCII proc~readstatefilefromascii->proc~sbase_new proc~readstatefilefromascii->proc~base_new proc~sbase_test->proc~sbase_new interface~readstate ReadState interface~readstate->proc~readstatefilefromascii proc~init_base Init_Base proc~init_base->proc~base_new proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~initmhd3d->proc~base_new proc~transform_sfl_init t_transform_sfl%transform_SFL_init proc~transform_sfl_init->proc~base_new proc~init_gvec_to_jorek init_gvec_to_jorek proc~init_gvec_to_jorek->interface~readstate proc~init_gvec_to_jorek->proc~init_base proc~restartfromstate RestartFromState proc~restartfromstate->interface~readstate proc~transform_sfl_new transform_sfl_new proc~transform_sfl_new->proc~transform_sfl_init

Source Code

FUNCTION SOLVEMAT(A,RHS) RESULT(X)
! MODULES
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
REAL(wp),INTENT(IN) :: A(:,:) !! matrix
REAL(wp),INTENT(IN) :: RHS(:,:) !! RHS, sorting: (dimA,nRHS), two dimensions can be used in input
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
REAL(wp)           :: X(SIZE(A,1),SIZE(RHS,2))    !! result: solution of A X=RHS
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
! External procedures defined in LAPACK
EXTERNAL DGETRF
EXTERNAL DGETRS
! LOCAL VARIABLES
REAL(wp)    :: Atmp(SIZE(A,1), SIZE(A,1))
INTEGER     :: ipiv(SIZE(A,1))  ! pivot indices
INTEGER     :: nRHS,n,info
!===================================================================================================================================
Atmp=A
X = RHS
n = SIZE(A,1)
nRHS=SIZE(RHS,2)

CALL DGETRF(n, n, Atmp, n, ipiv, info)

IF(info.NE.0)THEN
   CALL abort(__STAMP__,&
              'Matrix is numerically singular!')
END IF

CALL DGETRS('N',n, nRHS,Atmp, n, ipiv,X,n, info)
IF(info.NE.0)THEN
   CALL abort(__STAMP__,&
             'Matrix solve does not work!')
END IF
END FUNCTION SOLVEMAT