Subroutine to factorize the system
note the directives:
DOFACT
0
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(SULU_ENV), | intent(inout) | :: | sulu | |||
logical(kind=I4), | intent(in) | :: | verbose |
subroutine fact_superlu(sulu, verbose)
implicit none
type(SULU_ENV), intent(inout) :: sulu
logical(kind=I4), intent(in) :: verbose
sulu%lwork = 0
call StatInit(sulu%stat)
sulu%options%Fact = DOFACT
sulu%SMB%ncol = 0
call dgssvx( options = sulu%options, & ! superlu_options_t *options
A = sulu%SMA, & ! SuperMatrix *A
perm_c = sulu%perm_c, & ! int *perm_c
perm_r = sulu%perm_r, & ! int *perm_r
etree = sulu%etree , & ! int *etree
equed = sulu%equed, & ! char *equed
R = sulu%RR, & ! double *R
C = sulu%CC, & ! double *C
L = sulu%SML, & ! SuperMatrix *L
U = sulu%SMU, & ! SuperMatrix *U
work = sulu%work, & ! void *work
lwork = sulu%lwork, & ! int lwork
B = sulu%SMB, & ! SuperMatrix *B
X = sulu%SMX, & ! SuperMatrix *X
recip_pivot_growth = sulu%rpg, & ! double *recip_pivot_growth
rcond = sulu%rcond, & ! double *rcond
ferr = sulu%ferr, & ! double *ferr
berr = sulu%berr, & ! double *berr
Glu = sulu%Glu, & ! GlobalLU_t *Glu
mem_usage = sulu%mem_usage, & ! mem_usage_t *mem_usage
stat = sulu%stat, & ! SuperLUStat_t *stat
info = sulu%info & ! int *info
)
if (verbose) call StatPrint(sulu%stat)
call StatFree(sulu%stat)
return
endsubroutine fact_superlu