SOLVE Function

public function SOLVE(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(RHS,1))


Calls

proc~~solve~~CallsGraph proc~solve SOLVE dgetrf dgetrf proc~solve->dgetrf dgetrs dgetrs proc~solve->dgetrs

Called by

proc~~solve~~CalledByGraph proc~solve SOLVE proc~lambda_setup_and_solve Lambda_setup_and_solve proc~lambda_setup_and_solve->proc~solve proc~sbase_applybctodof_lgm t_sBase%sBase_applyBCtoDOF_LGM proc~sbase_applybctodof_lgm->proc~solve proc~addboundaryperturbation AddBoundaryPerturbation proc~addboundaryperturbation->proc~sbase_applybctodof_lgm proc~applybc_fstrong ApplyBC_Fstrong proc~applybc_fstrong->proc~sbase_applybctodof_lgm proc~get_boozer_sinterp t_sfl_boozer%Get_Boozer_sinterp proc~get_boozer_sinterp->proc~lambda_setup_and_solve proc~get_field Get_Field proc~get_field->proc~sbase_applybctodof_lgm proc~init_la_from_solution Init_LA_from_Solution proc~init_la_from_solution->proc~sbase_applybctodof_lgm proc~lambda_solve Lambda_solve proc~init_la_from_solution->proc~lambda_solve proc~initsolution InitSolution proc~initsolution->proc~sbase_applybctodof_lgm proc~lambda_solve->proc~lambda_setup_and_solve proc~sbase_test sBase_test proc~sbase_test->proc~sbase_applybctodof_lgm proc~sbase_new sBase_new proc~sbase_test->proc~sbase_new proc~to_spline_with_bc to_spline_with_BC proc~to_spline_with_bc->proc~sbase_applybctodof_lgm proc~buildtransform_sfl t_transform_sfl%BuildTransform_SFL proc~buildtransform_sfl->proc~get_boozer_sinterp proc~buildtransform_sfl->proc~to_spline_with_bc proc~transform_angles_3d Transform_Angles_3d proc~buildtransform_sfl->proc~transform_angles_3d proc~transform_angles_sinterp Transform_Angles_sinterp proc~buildtransform_sfl->proc~transform_angles_sinterp proc~evalforce EvalForce proc~evalforce->proc~applybc_fstrong proc~get_boozer get_boozer proc~get_boozer->proc~get_boozer_sinterp proc~gvec_to_jorek_prepare gvec_to_jorek_prepare proc~gvec_to_jorek_prepare->proc~get_field proc~initsolutionmhd3d t_functional_mhd3d%InitSolutionMHD3D proc~initsolutionmhd3d->proc~addboundaryperturbation proc~initsolutionmhd3d->proc~init_la_from_solution proc~initsolutionmhd3d->proc~initsolution proc~initsolutionmhd3d->proc~evalforce proc~sbase_init t_sBase%sBase_init proc~sbase_init->proc~sbase_test proc~transform_angles_3d->proc~to_spline_with_bc proc~transform_angles_sinterp->proc~to_spline_with_bc proc~initsolution~2 InitSolution proc~initsolution~2->proc~initsolutionmhd3d proc~minimizemhd3d_descent t_minimizer_mhd3d%MinimizeMHD3D_descent proc~minimizemhd3d_descent->proc~evalforce proc~minimizemhd3d_resetdescent t_minimizer_mhd3d%MinimizeMHD3d_ResetDescent proc~minimizemhd3d_descent->proc~minimizemhd3d_resetdescent proc~minimizemhd3d_resetdescent->proc~evalforce proc~rungvec rungvec proc~rungvec->proc~initsolutionmhd3d proc~minimizemhd3d t_functional_mhd3d%MinimizeMHD3D proc~rungvec->proc~minimizemhd3d proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~rungvec->proc~initmhd3d proc~sbase_copy t_sBase%sBase_copy proc~sbase_copy->proc~sbase_init proc~sbase_new->proc~sbase_init program~gvec_post GVEC_POST program~gvec_post->proc~evalforce program~gvec_post->proc~initmhd3d 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~minimizemhd3d->proc~minimizemhd3d_descent proc~readstatefilefromascii ReadStateFileFromASCII proc~readstatefilefromascii->proc~sbase_new proc~readstatefilefromascii->proc~base_new proc~start_rungvec start_rungvec proc~start_rungvec->proc~rungvec program~gvec GVEC program~gvec->proc~rungvec interface~readstate ReadState interface~readstate->proc~readstatefilefromascii proc~init_base Init_Base proc~init_base->proc~base_new proc~initmhd3d->proc~base_new proc~minimize minimize proc~minimize->proc~minimizemhd3d proc~transform_sfl_init t_transform_sfl%transform_SFL_init proc~transform_sfl_init->proc~base_new proc~init Init proc~init->proc~initmhd3d 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 SOLVE(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(RHS,1))    !! 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,1)/SIZE(A,1)

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 SOLVE