Skip to content

Commit 25025bd

Browse files
committed
FDS Source : Add HYPRE PG+AMG to UGLMAT.
1 parent 8882aca commit 25025bd

File tree

7 files changed

+234
-48
lines changed

7 files changed

+234
-48
lines changed

Source/cons.f90

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,8 +517,10 @@ MODULE GLOBAL_CONSTANTS
517517
INTEGER, PARAMETER :: UGLMAT_FLAG=2 !< Integer pressure solver parameter UGLMAT
518518
INTEGER, PARAMETER :: ULMAT_FLAG=3 !< Integer pressure solver parameter ULMAT
519519
INTEGER, PARAMETER :: MKL_PARDISO_FLAG=1 !< Integer matrix solver library flag for MKL PARDISO
520+
INTEGER, PARAMETER :: MKL_CPARDISO_FLAG=1 !< Integer matrix solver library flag for MKL CLUSTER PARDISO
520521
INTEGER, PARAMETER :: HYPRE_FLAG=2 !< Integer matrix solver library flag for HYPRE
521522
INTEGER :: ULMAT_SOLVER_LIBRARY=MKL_PARDISO_FLAG !< Integer ULMAT library flag (defaults to MKL PARDISO)
523+
INTEGER :: UGLMAT_SOLVER_LIBRARY=MKL_CPARDISO_FLAG !< Integer UGLMAT library flag (defaults to MKL CPARDISO)
522524
INTEGER :: PRES_FLAG = FFT_FLAG !< Pressure solver
523525
LOGICAL :: TUNNEL_PRECONDITIONER=.FALSE. !< Use special pressure preconditioner for tunnels
524526
INTEGER :: TUNNEL_NXP !< Number of x points in the entire tunnel

Source/imkl.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ MODULE HYPRE_INTERFACE
203203
INTEGER :: HYPRE_IERR = 0
204204
INTEGER, PARAMETER :: HYPRE_SOLVER_ID = 1 ! Preconditioned Conjugate Gradient (PCG) solver
205205
INTEGER, PARAMETER :: HYPRE_PRECOND_ID = 2 ! Algebraic Multi-Grid (AMG) preconditioner
206-
INTEGER, PARAMETER :: HYPRE_SOLVER_MAXIT = 1000 ! Max iteratations of PCG solver
206+
INTEGER, PARAMETER :: HYPRE_SOLVER_MAXIT = 1000 ! Max iterations of PCG solver
207207
REAL(KIND=8), PARAMETER :: HYPRE_SOLVER_TOL = 1.D-12 ! Solver tolerance
208208
INTEGER, PARAMETER :: HYPRE_SOLVER_SETTWONORM = 1 ! 0=use L_Infty norm (max error) for convergence, 1=use L2 norm
209209
INTEGER, PARAMETER :: HYPRE_SOLVER_SETPRINTLEVEL = 0 ! 0=no output, 1=minimal, 2=verbose

Source/pres.f90

Lines changed: 151 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3051,6 +3051,9 @@ SUBROUTINE GLMAT_SOLVER(T,DT)
30513051
USE COMP_FUNCTIONS, ONLY: CURRENT_TIME
30523052
USE CC_SCALARS, ONLY : GET_CUTCELL_HP,GET_PRES_CFACE_BCS,GET_FH_FROM_PRHS_AND_BCS
30533053
USE MPI_F08
3054+
#ifdef WITH_HYPRE
3055+
USE HYPRE_INTERFACE
3056+
#endif
30543057

30553058
REAL(EB), INTENT(IN) :: T,DT
30563059

@@ -3150,6 +3153,8 @@ SUBROUTINE GLMAT_SOLVER(T,DT)
31503153
ENDIF
31513154
! WRITE(LU_ERR,*) 'SUM_FH=',SUM(F_H),H_MATRIX_INDEFINITE
31523155

3156+
LIBRARY_SELECT: SELECT CASE(UGLMAT_SOLVER_LIBRARY)
3157+
CASE(MKL_CPARDISO_FLAG) LIBRARY_SELECT
31533158
#ifdef WITH_MKL
31543159
! Dump local low an high rows assembled by this process in IPARM:
31553160
IPARM(41) = ZSL%LOWER_ROW
@@ -3169,6 +3174,22 @@ SUBROUTINE GLMAT_SOLVER(T,DT)
31693174
IF (ERROR /= 0 .AND. MY_RANK==0) WRITE(LU_ERR,*) 'GLMAT_SOLVER: The following ERROR was detected: ', ERROR
31703175
#endif
31713176

3177+
CASE(HYPRE_FLAG) LIBRARY_SELECT
3178+
#ifdef WITH_HYPRE
3179+
! Solve the system using HYPRE:
3180+
CALL HYPRE_IJVECTORSETVALUES(ZSL%HYPRE_ZSL%F_H, ZSL%NUNKH_LOCAL, ZSL%HYPRE_ZSL%INDICES, ZSL%F_H, HYPRE_IERR)
3181+
CALL HYPRE_IJVECTORASSEMBLE(ZSL%HYPRE_ZSL%F_H, HYPRE_IERR)
3182+
CALL HYPRE_PARCSRPCGSOLVE(ZSL%HYPRE_ZSL%SOLVER, ZSL%HYPRE_ZSL%PARCSR_A_H, ZSL%HYPRE_ZSL%PAR_F_H, &
3183+
ZSL%HYPRE_ZSL%PAR_X_H, HYPRE_IERR)
3184+
IF (CHECK_POISSON .AND. HYPRE_SOLVER_SETPRINTLEVEL>0) THEN
3185+
CALL HYPRE_PARCSRPCGGETNUMITERATIONS(ZSL%HYPRE_ZSL%SOLVER, ZSL%HYPRE_ZSL%NUM_ITERATIONS, HYPRE_IERR)
3186+
CALL HYPRE_PARCSRPCGGETFINALRELATIVE(ZSL%HYPRE_ZSL%SOLVER, ZSL%HYPRE_ZSL%FINAL_RES_NORM, HYPRE_IERR)
3187+
ENDIF
3188+
CALL HYPRE_IJVECTORGETVALUES(ZSL%HYPRE_ZSL%X_H, ZSL%NUNKH_LOCAL, ZSL%HYPRE_ZSL%INDICES, ZSL%X_H, HYPRE_IERR)
3189+
#endif
3190+
3191+
END SELECT LIBRARY_SELECT
3192+
31723193
IF (ZSL%MTYPE==-2) THEN
31733194
SUM_XH = 0._EB; MEAN_XH = 0._EB
31743195
WHOLE_DOM_IF2 : IF(.NOT.PRES_ON_WHOLE_DOMAIN) THEN
@@ -3321,6 +3342,18 @@ SUBROUTINE GLMAT_SOLVER_SETUP(STAGE_FLAG)
33213342
IF (FREEZE_VELOCITY) RETURN ! Fixed velocity soln. i.e. PERIODIC_TEST=102 => FREEZE_VELOCITY=.TRUE.
33223343
IF (SOLID_PHASE_ONLY) RETURN
33233344
TNOW=CURRENT_TIME()
3345+
3346+
! If either MKL or HYPRE library not present stop.
3347+
#ifndef WITH_MKL
3348+
#ifndef WITH_HYPRE
3349+
IF (MY_RANK==0) WRITE(LU_ERR,'(A)') &
3350+
'Error: MKL or HYPRE Library compile flag not defined for UGLMAT pressure solver.'
3351+
! Some error - stop flag for CALL STOP_CHECK(1).
3352+
STOP_STATUS = SETUP_STOP
3353+
RETURN
3354+
#endif
3355+
#endif
3356+
33243357
SELECT CASE(STAGE_FLAG)
33253358
CASE(1)
33263359

@@ -3849,9 +3882,13 @@ END SUBROUTINE COPY_CCVAR_IN_HS
38493882
! ------------------------------- GET_H_MATRIX_LUDCMP -------------------------------
38503883

38513884
SUBROUTINE GET_H_MATRIX_LUDCMP
3852-
#ifdef WITH_MKL
3885+
#if defined WITH_MKL || defined WITH_HYPRE
38533886
USE MPI_F08
38543887
#endif
3888+
#ifdef WITH_HYPRE
3889+
USE HYPRE_INTERFACE
3890+
#endif
3891+
38553892
! Local Variables:
38563893
INTEGER :: INNZ, IROW, JCOL
38573894
#ifdef WITH_MKL
@@ -3864,6 +3901,10 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
38643901
INTEGER, ALLOCATABLE, DIMENSION(:,:) :: MB_FACTOR
38653902
INTEGER :: IERR
38663903
#endif
3904+
#ifdef WITH_HYPRE
3905+
INTEGER :: ONEV(1)
3906+
REAL(EB) :: ZEROV(1)
3907+
#endif
38673908

38683909
! Define parameters:
38693910
NRHS = 1
@@ -3875,9 +3916,21 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
38753916

38763917
ERROR = 0 ! initialize error flag
38773918

3919+
SELECT CASE(UGLMAT_SOLVER_LIBRARY)
3920+
CASE(MKL_CPARDISO_FLAG)
38783921
#ifdef WITH_MKL
3879-
CALL SET_CLUSTER_SOLVER_IPARM
3922+
CALL SET_CLUSTER_SOLVER_IPARM
38803923
#endif
3924+
CASE(HYPRE_FLAG)
3925+
#ifdef WITH_HYPRE
3926+
IERR=0; CALL HYPRE_INITIALIZE(IERR)
3927+
IF (IERR==1) THEN
3928+
IF(MY_RANK==0) WRITE(LU_ERR,'(A)') 'Error: HYPRE pressure solver initialization error.'
3929+
STOP_STATUS = SETUP_STOP
3930+
RETURN
3931+
ENDIF
3932+
#endif
3933+
END SELECT
38813934

38823935
IPZ_LOOP : DO IPZ=0,N_ZONE
38833936

@@ -3891,16 +3944,25 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
38913944
! Allocate F_H ans H_H for this Process and IPZ:
38923945
ALLOCATE( ZSL%X_H(MAX(ZSL%NUNKH_LOCAL,1)) , ZSL%F_H(MAX(ZSL%NUNKH_LOCAL,1)) ); ZSL%F_H=0._EB; ZSL%X_H=0._EB
38933946

3947+
! Here each process defines de beginning and end rows in global numeration, for the equations
3948+
! it has assembled:
3949+
IF(ZSL%NUNKH_LOCAL>0) THEN
3950+
ZSL%LOWER_ROW = ZSL%UNKH_IND(NM_START) + 1
3951+
ZSL%UPPER_ROW = ZSL%UNKH_IND(NM_START) + ZSL%NUNKH_LOCAL
3952+
ELSE
3953+
ZSL%LOWER_ROW = MAX(1,ZSL%UNKH_IND(NM_START))
3954+
ZSL%UPPER_ROW = MAX(1,ZSL%UNKH_IND(NM_START))
3955+
ENDIF
3956+
3957+
LIBRARY_SELECT: SELECT CASE(UGLMAT_SOLVER_LIBRARY)
3958+
3959+
CASE(MKL_CPARDISO_FLAG) LIBRARY_SELECT
3960+
#ifdef WITH_MKL
38943961
!--- This matrix definitoin used with MKL cluster solver -----
38953962
! Allocate A_H IA_H and JA_H matrices, considering all matrix coefficients:
38963963
ALLOCATE ( ZSL%A_H(ZSL%TOT_NNZ_H) , ZSL%IA_H(MAX(ZSL%NUNKH_LOCAL,1)+1) , ZSL%JA_H(ZSL%TOT_NNZ_H) )
38973964
! Store upper triangular part of symmetric D_MAT_H in CSR format:
38983965
IF(ZSL%NUNKH_LOCAL>0) THEN
3899-
! Here each process defines de beginning and end rows in global numeration, for the equations
3900-
! it has assembled:
3901-
ZSL%LOWER_ROW = ZSL%UNKH_IND(NM_START) + 1
3902-
ZSL%UPPER_ROW = ZSL%UNKH_IND(NM_START) + ZSL%NUNKH_LOCAL
3903-
39043966
INNZ = 0
39053967
DO IROW=1,ZSL%NUNKH_LOCAL
39063968
ZSL%IA_H(IROW) = INNZ + 1
@@ -3913,8 +3975,6 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
39133975
ENDDO
39143976
ZSL%IA_H(ZSL%NUNKH_LOCAL+1) = INNZ + 1
39153977
ELSE
3916-
ZSL%LOWER_ROW = MAX(1,ZSL%UNKH_IND(NM_START))
3917-
ZSL%UPPER_ROW = MAX(1,ZSL%UNKH_IND(NM_START))
39183978
ZSL%A_H = 0._EB ! Add a zero coefficient in A(ZSL%UNKH_IND(NM_START),ZSL%UNKH_IND(NM_START)).
39193979
ZSL%IA_H(1:2) = (/1,2/)
39203980
ZSL%JA_H(1) = MAX(1,ZSL%UNKH_IND(NM_START))
@@ -3928,7 +3988,6 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
39283988
ALLOCATE( ZSL%A_H_FB(ZSL%TOT_NNZ_H) ); ZSL%A_H_FB(1:ZSL%TOT_NNZ_H) = REAL(ZSL%A_H(1:ZSL%TOT_NNZ_H),FB)
39293989
#endif
39303990

3931-
#ifdef WITH_MKL
39323991
! Lower and uppper rows handled by this process:
39333992
IPARM(41) = ZSL%LOWER_ROW
39343993
IPARM(42) = ZSL%UPPER_ROW
@@ -4004,17 +4063,81 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
40044063
STOP_STATUS = SETUP_STOP
40054064
RETURN
40064065
ENDIF
4066+
#endif
40074067

4008-
#else
4068+
CASE(HYPRE_FLAG) LIBRARY_SELECT
4069+
#ifdef WITH_HYPRE
40094070

4010-
IF (MY_RANK==0) WRITE(LU_ERR,'(A)') &
4011-
'Error: MKL Library compile flag was not defined for GLMAT as pressure solver.'
4012-
! Some error - stop flag for CALL STOP_CHECK(1).
4013-
STOP_STATUS = SETUP_STOP
4014-
RETURN
4071+
IF (ALLOCATED(ZSL%HYPRE_ZSL%INDICES)) DEALLOCATE(ZSL%HYPRE_ZSL%INDICES)
4072+
ALLOCATE( ZSL%HYPRE_ZSL%INDICES(MAX(1,ZSL%NUNKH_LOCAL)) )
4073+
4074+
CALL HYPRE_IJMATRIXCREATE(MPI_COMM_WORLD,ZSL%LOWER_ROW-1,ZSL%UPPER_ROW-1,&
4075+
ZSL%LOWER_ROW-1,ZSL%UPPER_ROW-1,ZSL%HYPRE_ZSL%A_H,HYPRE_IERR)
4076+
CALL HYPRE_IJMATRIXSETOBJECTTYPE(ZSL%HYPRE_ZSL%A_H,HYPRE_PARCSR,HYPRE_IERR)
4077+
CALL HYPRE_IJMATRIXINITIALIZE(ZSL%HYPRE_ZSL%A_H,HYPRE_IERR)
4078+
IF(ZSL%NUNKH_LOCAL > 0) THEN
4079+
ZSL%JD_MAT_H = ZSL%JD_MAT_H - 1
4080+
DO IROW=1,ZSL%NUNKH_LOCAL
4081+
ZSL%HYPRE_ZSL%INDICES(IROW)=ZSL%LOWER_ROW+IROW-2
4082+
CALL HYPRE_IJMATRIXSETVALUES(ZSL%HYPRE_ZSL%A_H, 1, ZSL%NNZ_D_MAT_H(IROW), ZSL%HYPRE_ZSL%INDICES(IROW), &
4083+
ZSL%JD_MAT_H(1:ZSL%NNZ_D_MAT_H(IROW),IROW), ZSL%D_MAT_H(1:ZSL%NNZ_D_MAT_H(IROW),IROW), HYPRE_IERR)
4084+
ENDDO
4085+
ELSE
4086+
ZSL%HYPRE_ZSL%INDICES(1)=ZSL%LOWER_ROW-1
4087+
ONEV(1) = 1; ZEROV(1) = 0._EB
4088+
! Define a zero coefficient in A(ZSL%LOWER_ROW-1,ZSL%LOWER_ROW-1):
4089+
CALL HYPRE_IJMATRIXSETVALUES(ZSL%HYPRE_ZSL%A_H, 1, ONEV(1), ZSL%HYPRE_ZSL%INDICES(1), &
4090+
ZSL%HYPRE_ZSL%INDICES(1), ZEROV(1), HYPRE_IERR)
4091+
ENDIF
4092+
CALL HYPRE_IJMATRIXASSEMBLE(ZSL%HYPRE_ZSL%A_H, HYPRE_IERR)
4093+
CALL HYPRE_IJMATRIXGETOBJECT(ZSL%HYPRE_ZSL%A_H, ZSL%HYPRE_ZSL%PARCSR_A_H, HYPRE_IERR)
4094+
! Create right hand side vector
4095+
CALL HYPRE_IJVECTORCREATE(MPI_COMM_WORLD, ZSL%LOWER_ROW-1, ZSL%UPPER_ROW-1, ZSL%HYPRE_ZSL%F_H, HYPRE_IERR)
4096+
CALL HYPRE_IJVECTORSETOBJECTTYPE(ZSL%HYPRE_ZSL%F_H, HYPRE_PARCSR, HYPRE_IERR)
4097+
CALL HYPRE_IJVECTORINITIALIZE(ZSL%HYPRE_ZSL%F_H, HYPRE_IERR)
4098+
! Create solution vector
4099+
CALL HYPRE_IJVECTORCREATE(MPI_COMM_WORLD, ZSL%LOWER_ROW-1, ZSL%UPPER_ROW-1, ZSL%HYPRE_ZSL%X_H, HYPRE_IERR)
4100+
CALL HYPRE_IJVECTORSETOBJECTTYPE(ZSL%HYPRE_ZSL%X_H, HYPRE_PARCSR, HYPRE_IERR)
4101+
CALL HYPRE_IJVECTORINITIALIZE(ZSL%HYPRE_ZSL%X_H, HYPRE_IERR)
4102+
! Set values
4103+
CALL HYPRE_IJVECTORSETVALUES(ZSL%HYPRE_ZSL%F_H, ZSL%NUNKH_LOCAL, ZSL%HYPRE_ZSL%INDICES, ZSL%F_H, HYPRE_IERR)
4104+
CALL HYPRE_IJVECTORSETVALUES(ZSL%HYPRE_ZSL%X_H, ZSL%NUNKH_LOCAL, ZSL%HYPRE_ZSL%INDICES, ZSL%X_H, HYPRE_IERR)
4105+
! Assemble vectors
4106+
CALL HYPRE_IJVECTORASSEMBLE(ZSL%HYPRE_ZSL%F_H, HYPRE_IERR)
4107+
CALL HYPRE_IJVECTORASSEMBLE(ZSL%HYPRE_ZSL%X_H, HYPRE_IERR)
4108+
! Get rhs and soln objects
4109+
CALL HYPRE_IJVECTORGETOBJECT(ZSL%HYPRE_ZSL%F_H, ZSL%HYPRE_ZSL%PAR_F_H, HYPRE_IERR)
4110+
CALL HYPRE_IJVECTORGETOBJECT(ZSL%HYPRE_ZSL%X_H, ZSL%HYPRE_ZSL%PAR_X_H, HYPRE_IERR)
4111+
4112+
! Create solver (Parallel Compressed Sparse Row Preconditioned Conjugate Gradient)
4113+
CALL HYPRE_PARCSRPCGCREATE(MPI_COMM_WORLD, ZSL%HYPRE_ZSL%SOLVER, HYPRE_IERR)
4114+
CALL HYPRE_PARCSRPCGSETMAXITER(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_MAXIT, HYPRE_IERR)
4115+
CALL HYPRE_PARCSRPCGSETTOL(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_TOL, HYPRE_IERR)
4116+
CALL HYPRE_PARCSRPCGSETTWONORM(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_SETTWONORM, HYPRE_IERR)
4117+
CALL HYPRE_PARCSRPCGSETPRINTLEVEL(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_SETPRINTLEVEL, HYPRE_IERR)
4118+
CALL HYPRE_PARCSRPCGSETLOGGING(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_SETLOGGING, HYPRE_IERR)
40154119

4120+
! Set up the Algebraic Multi-Grid (AMG) preconditioner and specify any parameters
4121+
CALL HYPRE_BOOMERAMGCREATE(ZSL%HYPRE_ZSL%PRECOND, HYPRE_IERR)
4122+
CALL HYPRE_BOOMERAMGSETPRINTLEVEL(ZSL%HYPRE_ZSL%PRECOND, HYPRE_PRECOND_SETPRINTLEVEL, HYPRE_IERR)
4123+
CALL HYPRE_BOOMERAMGSETCOARSENTYPE(ZSL%HYPRE_ZSL%PRECOND, HYPRE_PRECOND_COARSENINGTYPE, HYPRE_IERR)
4124+
CALL HYPRE_BOOMERAMGSETRELAXTYPE(ZSL%HYPRE_ZSL%PRECOND, HYPRE_PRECOND_SETRELAXTYPE, HYPRE_IERR)
4125+
CALL HYPRE_BOOMERAMGSETNUMSWEEPS(ZSL%HYPRE_ZSL%PRECOND, HYPRE_PRECOND_NUMSWEEPS, HYPRE_IERR)
4126+
CALL HYPRE_BOOMERAMGSETTOL(ZSL%HYPRE_ZSL%PRECOND, HYPRE_PRECOND_TOL, HYPRE_IERR)
4127+
CALL HYPRE_BOOMERAMGSETMAXITER(ZSL%HYPRE_ZSL%PRECOND, HYPRE_PRECOND_MAXITER, HYPRE_IERR)
4128+
CALL HYPRE_PARCSRPCGSETPRECOND(ZSL%HYPRE_ZSL%SOLVER, HYPRE_PRECOND_ID, ZSL%HYPRE_ZSL%PRECOND, HYPRE_IERR)
4129+
! Solver setup
4130+
CALL HYPRE_PARCSRPCGSETUP(ZSL%HYPRE_ZSL%SOLVER, ZSL%HYPRE_ZSL%PARCSR_A_H,&
4131+
ZSL%HYPRE_ZSL%PAR_F_H, ZSL%HYPRE_ZSL%PAR_X_H, HYPRE_IERR)
40164132
#endif
40174133

4134+
END SELECT LIBRARY_SELECT
4135+
4136+
! Deallocate MAT_H arrays:
4137+
IF (ALLOCATED(ZSL%NNZ_D_MAT_H)) DEALLOCATE(ZSL%NNZ_D_MAT_H)
4138+
IF (ALLOCATED(ZSL%D_MAT_H)) DEALLOCATE(ZSL%D_MAT_H)
4139+
IF (ALLOCATED(ZSL%JD_MAT_H)) DEALLOCATE(ZSL%JD_MAT_H)
4140+
40184141
ENDDO IPZ_LOOP
40194142

40204143
! Set level MSG to 0 for solution:
@@ -5159,6 +5282,9 @@ END FUNCTION GRADIENT_WEIGHT
51595282
SUBROUTINE FINISH_GLMAT_SOLVER
51605283

51615284
USE MPI_F08
5285+
#ifdef WITH_HYPRE
5286+
USE HYPRE_INTERFACE
5287+
#endif
51625288

51635289
! Local variables:
51645290
INTEGER :: MAXFCT, MNUM, PHASE, NRHS, ERROR, MSGLVL
@@ -5180,13 +5306,21 @@ SUBROUTINE FINISH_GLMAT_SOLVER
51805306

51815307
DO IPZ=0,N_ZONE
51825308
ZSL => ZONE_SOLVE(IPZ); IF(ZSL%NUNKH_TOTAL==0) CYCLE
5183-
5309+
! Finalize Cluster Sparse Solver:
5310+
IF (UGLMAT_SOLVER_LIBRARY==MKL_CPARDISO_FLAG) THEN
51845311
#ifdef WITH_MKL
51855312
CALL CLUSTER_SPARSE_SOLVER(ZSL%PT_H, MAXFCT, MNUM, ZSL%MTYPE, PHASE, ZSL%NUNKH_TOTAL, &
51865313
ZSL%A_H, ZSL%IA_H, ZSL%JA_H, PERM, NRHS, IPARM, MSGLVL, ZSL%F_H, ZSL%X_H, MPI_COMM_WORLD, ERROR)
51875314
#endif /* WITH_MKL */
5315+
ENDIF
51885316
ENDDO
51895317

5318+
IF (UGLMAT_SOLVER_LIBRARY==HYPRE_FLAG) THEN
5319+
#ifdef WITH_HYPRE
5320+
CALL HYPRE_FINALIZE(HYPRE_IERR)
5321+
#endif
5322+
ENDIF
5323+
51905324
DEALLOCATE(ZONE_SOLVE)
51915325

51925326
RETURN

0 commit comments

Comments
 (0)