Skip to content

Commit 6fcf6bc

Browse files
Merge pull request #13826 from marcosvanella/master
FDS Source : Add HYPRE PG+AMG to UGLMAT.
2 parents 8882aca + 3991b5e commit 6fcf6bc

File tree

7 files changed

+235
-48
lines changed

7 files changed

+235
-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: 152 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,8 +3901,13 @@ 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:
3910+
INNZ = 0; IROW = 0; JCOL=0
38693911
NRHS = 1
38703912
MAXFCT = 1
38713913
MNUM = 1
@@ -3875,9 +3917,21 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
38753917

38763918
ERROR = 0 ! initialize error flag
38773919

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

38823936
IPZ_LOOP : DO IPZ=0,N_ZONE
38833937

@@ -3891,16 +3945,25 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
38913945
! Allocate F_H ans H_H for this Process and IPZ:
38923946
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
38933947

3948+
! Here each process defines de beginning and end rows in global numeration, for the equations
3949+
! it has assembled:
3950+
IF(ZSL%NUNKH_LOCAL>0) THEN
3951+
ZSL%LOWER_ROW = ZSL%UNKH_IND(NM_START) + 1
3952+
ZSL%UPPER_ROW = ZSL%UNKH_IND(NM_START) + ZSL%NUNKH_LOCAL
3953+
ELSE
3954+
ZSL%LOWER_ROW = MAX(1,ZSL%UNKH_IND(NM_START))
3955+
ZSL%UPPER_ROW = MAX(1,ZSL%UNKH_IND(NM_START))
3956+
ENDIF
3957+
3958+
LIBRARY_SELECT: SELECT CASE(UGLMAT_SOLVER_LIBRARY)
3959+
3960+
CASE(MKL_CPARDISO_FLAG) LIBRARY_SELECT
3961+
#ifdef WITH_MKL
38943962
!--- This matrix definitoin used with MKL cluster solver -----
38953963
! Allocate A_H IA_H and JA_H matrices, considering all matrix coefficients:
38963964
ALLOCATE ( ZSL%A_H(ZSL%TOT_NNZ_H) , ZSL%IA_H(MAX(ZSL%NUNKH_LOCAL,1)+1) , ZSL%JA_H(ZSL%TOT_NNZ_H) )
38973965
! Store upper triangular part of symmetric D_MAT_H in CSR format:
38983966
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-
39043967
INNZ = 0
39053968
DO IROW=1,ZSL%NUNKH_LOCAL
39063969
ZSL%IA_H(IROW) = INNZ + 1
@@ -3913,8 +3976,6 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
39133976
ENDDO
39143977
ZSL%IA_H(ZSL%NUNKH_LOCAL+1) = INNZ + 1
39153978
ELSE
3916-
ZSL%LOWER_ROW = MAX(1,ZSL%UNKH_IND(NM_START))
3917-
ZSL%UPPER_ROW = MAX(1,ZSL%UNKH_IND(NM_START))
39183979
ZSL%A_H = 0._EB ! Add a zero coefficient in A(ZSL%UNKH_IND(NM_START),ZSL%UNKH_IND(NM_START)).
39193980
ZSL%IA_H(1:2) = (/1,2/)
39203981
ZSL%JA_H(1) = MAX(1,ZSL%UNKH_IND(NM_START))
@@ -3928,7 +3989,6 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
39283989
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)
39293990
#endif
39303991

3931-
#ifdef WITH_MKL
39323992
! Lower and uppper rows handled by this process:
39333993
IPARM(41) = ZSL%LOWER_ROW
39343994
IPARM(42) = ZSL%UPPER_ROW
@@ -4004,17 +4064,81 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
40044064
STOP_STATUS = SETUP_STOP
40054065
RETURN
40064066
ENDIF
4067+
#endif
40074068

4008-
#else
4069+
CASE(HYPRE_FLAG) LIBRARY_SELECT
4070+
#ifdef WITH_HYPRE
40094071

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
4072+
IF (ALLOCATED(ZSL%HYPRE_ZSL%INDICES)) DEALLOCATE(ZSL%HYPRE_ZSL%INDICES)
4073+
ALLOCATE( ZSL%HYPRE_ZSL%INDICES(MAX(1,ZSL%NUNKH_LOCAL)) )
4074+
4075+
CALL HYPRE_IJMATRIXCREATE(MPI_COMM_WORLD,ZSL%LOWER_ROW-1,ZSL%UPPER_ROW-1,&
4076+
ZSL%LOWER_ROW-1,ZSL%UPPER_ROW-1,ZSL%HYPRE_ZSL%A_H,HYPRE_IERR)
4077+
CALL HYPRE_IJMATRIXSETOBJECTTYPE(ZSL%HYPRE_ZSL%A_H,HYPRE_PARCSR,HYPRE_IERR)
4078+
CALL HYPRE_IJMATRIXINITIALIZE(ZSL%HYPRE_ZSL%A_H,HYPRE_IERR)
4079+
IF(ZSL%NUNKH_LOCAL > 0) THEN
4080+
ZSL%JD_MAT_H = ZSL%JD_MAT_H - 1
4081+
DO IROW=1,ZSL%NUNKH_LOCAL
4082+
ZSL%HYPRE_ZSL%INDICES(IROW)=ZSL%LOWER_ROW+IROW-2
4083+
CALL HYPRE_IJMATRIXSETVALUES(ZSL%HYPRE_ZSL%A_H, 1, ZSL%NNZ_D_MAT_H(IROW), ZSL%HYPRE_ZSL%INDICES(IROW), &
4084+
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)
4085+
ENDDO
4086+
ELSE
4087+
ZSL%HYPRE_ZSL%INDICES(1)=ZSL%LOWER_ROW-1
4088+
ONEV(1) = 1; ZEROV(1) = 0._EB
4089+
! Define a zero coefficient in A(ZSL%LOWER_ROW-1,ZSL%LOWER_ROW-1):
4090+
CALL HYPRE_IJMATRIXSETVALUES(ZSL%HYPRE_ZSL%A_H, 1, ONEV(1), ZSL%HYPRE_ZSL%INDICES(1), &
4091+
ZSL%HYPRE_ZSL%INDICES(1), ZEROV(1), HYPRE_IERR)
4092+
ENDIF
4093+
CALL HYPRE_IJMATRIXASSEMBLE(ZSL%HYPRE_ZSL%A_H, HYPRE_IERR)
4094+
CALL HYPRE_IJMATRIXGETOBJECT(ZSL%HYPRE_ZSL%A_H, ZSL%HYPRE_ZSL%PARCSR_A_H, HYPRE_IERR)
4095+
! Create right hand side vector
4096+
CALL HYPRE_IJVECTORCREATE(MPI_COMM_WORLD, ZSL%LOWER_ROW-1, ZSL%UPPER_ROW-1, ZSL%HYPRE_ZSL%F_H, HYPRE_IERR)
4097+
CALL HYPRE_IJVECTORSETOBJECTTYPE(ZSL%HYPRE_ZSL%F_H, HYPRE_PARCSR, HYPRE_IERR)
4098+
CALL HYPRE_IJVECTORINITIALIZE(ZSL%HYPRE_ZSL%F_H, HYPRE_IERR)
4099+
! Create solution vector
4100+
CALL HYPRE_IJVECTORCREATE(MPI_COMM_WORLD, ZSL%LOWER_ROW-1, ZSL%UPPER_ROW-1, ZSL%HYPRE_ZSL%X_H, HYPRE_IERR)
4101+
CALL HYPRE_IJVECTORSETOBJECTTYPE(ZSL%HYPRE_ZSL%X_H, HYPRE_PARCSR, HYPRE_IERR)
4102+
CALL HYPRE_IJVECTORINITIALIZE(ZSL%HYPRE_ZSL%X_H, HYPRE_IERR)
4103+
! Set values
4104+
CALL HYPRE_IJVECTORSETVALUES(ZSL%HYPRE_ZSL%F_H, ZSL%NUNKH_LOCAL, ZSL%HYPRE_ZSL%INDICES, ZSL%F_H, HYPRE_IERR)
4105+
CALL HYPRE_IJVECTORSETVALUES(ZSL%HYPRE_ZSL%X_H, ZSL%NUNKH_LOCAL, ZSL%HYPRE_ZSL%INDICES, ZSL%X_H, HYPRE_IERR)
4106+
! Assemble vectors
4107+
CALL HYPRE_IJVECTORASSEMBLE(ZSL%HYPRE_ZSL%F_H, HYPRE_IERR)
4108+
CALL HYPRE_IJVECTORASSEMBLE(ZSL%HYPRE_ZSL%X_H, HYPRE_IERR)
4109+
! Get rhs and soln objects
4110+
CALL HYPRE_IJVECTORGETOBJECT(ZSL%HYPRE_ZSL%F_H, ZSL%HYPRE_ZSL%PAR_F_H, HYPRE_IERR)
4111+
CALL HYPRE_IJVECTORGETOBJECT(ZSL%HYPRE_ZSL%X_H, ZSL%HYPRE_ZSL%PAR_X_H, HYPRE_IERR)
4112+
4113+
! Create solver (Parallel Compressed Sparse Row Preconditioned Conjugate Gradient)
4114+
CALL HYPRE_PARCSRPCGCREATE(MPI_COMM_WORLD, ZSL%HYPRE_ZSL%SOLVER, HYPRE_IERR)
4115+
CALL HYPRE_PARCSRPCGSETMAXITER(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_MAXIT, HYPRE_IERR)
4116+
CALL HYPRE_PARCSRPCGSETTOL(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_TOL, HYPRE_IERR)
4117+
CALL HYPRE_PARCSRPCGSETTWONORM(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_SETTWONORM, HYPRE_IERR)
4118+
CALL HYPRE_PARCSRPCGSETPRINTLEVEL(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_SETPRINTLEVEL, HYPRE_IERR)
4119+
CALL HYPRE_PARCSRPCGSETLOGGING(ZSL%HYPRE_ZSL%SOLVER, HYPRE_SOLVER_SETLOGGING, HYPRE_IERR)
40154120

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

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

40204144
! Set level MSG to 0 for solution:
@@ -5159,6 +5283,9 @@ END FUNCTION GRADIENT_WEIGHT
51595283
SUBROUTINE FINISH_GLMAT_SOLVER
51605284

51615285
USE MPI_F08
5286+
#ifdef WITH_HYPRE
5287+
USE HYPRE_INTERFACE
5288+
#endif
51625289

51635290
! Local variables:
51645291
INTEGER :: MAXFCT, MNUM, PHASE, NRHS, ERROR, MSGLVL
@@ -5180,13 +5307,21 @@ SUBROUTINE FINISH_GLMAT_SOLVER
51805307

51815308
DO IPZ=0,N_ZONE
51825309
ZSL => ZONE_SOLVE(IPZ); IF(ZSL%NUNKH_TOTAL==0) CYCLE
5183-
5310+
! Finalize Cluster Sparse Solver:
5311+
IF (UGLMAT_SOLVER_LIBRARY==MKL_CPARDISO_FLAG) THEN
51845312
#ifdef WITH_MKL
51855313
CALL CLUSTER_SPARSE_SOLVER(ZSL%PT_H, MAXFCT, MNUM, ZSL%MTYPE, PHASE, ZSL%NUNKH_TOTAL, &
51865314
ZSL%A_H, ZSL%IA_H, ZSL%JA_H, PERM, NRHS, IPARM, MSGLVL, ZSL%F_H, ZSL%X_H, MPI_COMM_WORLD, ERROR)
51875315
#endif /* WITH_MKL */
5316+
ENDIF
51885317
ENDDO
51895318

5319+
IF (UGLMAT_SOLVER_LIBRARY==HYPRE_FLAG) THEN
5320+
#ifdef WITH_HYPRE
5321+
CALL HYPRE_FINALIZE(HYPRE_IERR)
5322+
#endif
5323+
ENDIF
5324+
51905325
DEALLOCATE(ZONE_SOLVE)
51915326

51925327
RETURN

0 commit comments

Comments
 (0)