@@ -3059,6 +3059,14 @@ MODULE GLOBMAT_SOLVER
30593059! Handle for ZONE_SOLVER array entries:
30603060TYPE (ZONE_SOLVE_TYPE), POINTER :: ZSL
30613061
3062+ ! Communicator for each zone:
3063+ #ifdef WITH_HYPRE
3064+ TYPE ZSL_COMM_TYPE
3065+ TYPE (MPI_COMM) :: COMM
3066+ END TYPE ZSL_COMM_TYPE
3067+ TYPE (ZSL_COMM_TYPE), ALLOCATABLE , DIMENSION (:) :: ZSL_COMM
3068+ #endif
3069+
30623070! Matrix types:
30633071INTEGER , PARAMETER :: SYMM_INDEFINITE =- 2
30643072INTEGER , PARAMETER :: SYMM_POSITIVE_DEFINITE= 2
@@ -3209,15 +3217,17 @@ SUBROUTINE GLMAT_SOLVER(T,DT)
32093217#ifdef WITH_HYPRE
32103218 IF (ZSL% MTYPE== SYMM_INDEFINITE .AND. ZSL% UPPER_ROW== ZSL% NUNKH_TOTAL) ZSL% F_H(MAX (ZSL% NUNKH_LOCAL,1 )) = 0._EB
32113219 ! Solve the system using HYPRE:
3212- CALL HYPRE_IJVECTORSETVALUES(ZSL% HYPRE_ZSL% F_H, ZSL% NUNKH_LOCAL, ZSL% HYPRE_ZSL% INDICES, ZSL% F_H, HYPRE_IERR)
3213- CALL HYPRE_IJVECTORASSEMBLE(ZSL% HYPRE_ZSL% F_H, HYPRE_IERR)
3214- CALL HYPRE_PARCSRPCGSOLVE(ZSL% HYPRE_ZSL% SOLVER, ZSL% HYPRE_ZSL% PARCSR_A_H, ZSL% HYPRE_ZSL% PAR_F_H, &
3215- ZSL% HYPRE_ZSL% PAR_X_H, HYPRE_IERR)
3216- IF (CHECK_POISSON .AND. HYPRE_SOLVER_SETPRINTLEVEL> 0 ) THEN
3217- CALL HYPRE_PARCSRPCGGETNUMITERATIONS(ZSL% HYPRE_ZSL% SOLVER, ZSL% HYPRE_ZSL% NUM_ITERATIONS, HYPRE_IERR)
3218- CALL HYPRE_PARCSRPCGGETFINALRELATIVE(ZSL% HYPRE_ZSL% SOLVER, ZSL% HYPRE_ZSL% FINAL_RES_NORM, HYPRE_IERR)
3220+ IF (ZSL% NUNKH_LOCAL > 0 ) THEN
3221+ CALL HYPRE_IJVECTORSETVALUES(ZSL% HYPRE_ZSL% F_H, ZSL% NUNKH_LOCAL, ZSL% HYPRE_ZSL% INDICES, ZSL% F_H, HYPRE_IERR)
3222+ CALL HYPRE_IJVECTORASSEMBLE(ZSL% HYPRE_ZSL% F_H, HYPRE_IERR)
3223+ CALL HYPRE_PARCSRPCGSOLVE(ZSL% HYPRE_ZSL% SOLVER, ZSL% HYPRE_ZSL% PARCSR_A_H, ZSL% HYPRE_ZSL% PAR_F_H, &
3224+ ZSL% HYPRE_ZSL% PAR_X_H, HYPRE_IERR)
3225+ IF (CHECK_POISSON .AND. HYPRE_SOLVER_SETPRINTLEVEL> 0 ) THEN
3226+ CALL HYPRE_PARCSRPCGGETNUMITERATIONS(ZSL% HYPRE_ZSL% SOLVER, ZSL% HYPRE_ZSL% NUM_ITERATIONS, HYPRE_IERR)
3227+ CALL HYPRE_PARCSRPCGGETFINALRELATIVE(ZSL% HYPRE_ZSL% SOLVER, ZSL% HYPRE_ZSL% FINAL_RES_NORM, HYPRE_IERR)
3228+ ENDIF
3229+ CALL HYPRE_IJVECTORGETVALUES(ZSL% HYPRE_ZSL% X_H, ZSL% NUNKH_LOCAL, ZSL% HYPRE_ZSL% INDICES, ZSL% X_H, HYPRE_IERR)
32193230 ENDIF
3220- CALL HYPRE_IJVECTORGETVALUES(ZSL% HYPRE_ZSL% X_H, ZSL% NUNKH_LOCAL, ZSL% HYPRE_ZSL% INDICES, ZSL% X_H, HYPRE_IERR)
32213231#endif
32223232
32233233 END SELECT LIBRARY_SELECT
@@ -3931,8 +3941,7 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
39313941INTEGER , ALLOCATABLE , DIMENSION (:,:) :: MB_FACTOR
39323942#endif
39333943#ifdef WITH_HYPRE
3934- INTEGER :: ONEV(1 ), END_ROW
3935- REAL (EB) :: ZEROV(1 )
3944+ INTEGER :: END_ROW, COLOR
39363945CHARACTER (FN_LENGTH) :: FN_PARCSRPCG_MATRIX
39373946#endif
39383947! .. All other variables
@@ -3963,6 +3972,7 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
39633972 STOP_STATUS = SETUP_STOP
39643973 RETURN
39653974 ENDIF
3975+ ALLOCATE (ZSL_COMM(0 :N_ZONE_GLOBMAT))
39663976#endif
39673977END SELECT
39683978
@@ -4104,97 +4114,100 @@ SUBROUTINE GET_H_MATRIX_LUDCMP
41044114 IF (ALLOCATED (ZSL% HYPRE_ZSL% INDICES)) DEALLOCATE (ZSL% HYPRE_ZSL% INDICES)
41054115 ALLOCATE ( ZSL% HYPRE_ZSL% INDICES(MAX (1 ,ZSL% NUNKH_LOCAL)) )
41064116
4107- CALL HYPRE_IJMATRIXCREATE(MPI_COMM_WORLD, ZSL% LOWER_ROW -1 ,ZSL % UPPER_ROW -1 ,&
4108- ZSL % LOWER_ROW -1 ,ZSL % UPPER_ROW -1 ,ZSL % HYPRE_ZSL % A_H ,HYPRE_IERR)
4109- CALL HYPRE_IJMATRIXSETOBJECTTYPE(ZSL % HYPRE_ZSL % A_H,HYPRE_PARCSR,HYPRE_IERR)
4110- CALL HYPRE_IJMATRIXINITIALIZE (ZSL% HYPRE_ZSL % A_H,HYPRE_IERR)
4111- IF ( ZSL% MTYPE == SYMM_INDEFINITE) THEN
4112- IF (ZSL % NUNKH_TOTAL == 1 ) THEN ! Single unknown, zero coefficient matrix (1,1). Set coefficient to 1.
4113- IF (ZSL % NUNKH_LOCAL == 1 ) THEN
4114- ZSL% NNZ_D_MAT_H( 1 ) = 1
4115- DEALLOCATE (ZSL% JD_MAT_H); ALLOCATE (ZSL % JD_MAT_H( 1 , 1 )); ZSL % JD_MAT_H( 1 , 1 ) = 1
4116- DEALLOCATE (ZSL % D_MAT_H ); ALLOCATE (ZSL % D_MAT_H( 1 , 1 ) ); ZSL % D_MAT_H( 1 , 1 ) = 1._EB
4117- ENDIF
4118- ELSE ! More than one unknown
4119- IF (ZSL% UPPER_ROW == ZSL % NUNKH_TOTAL ) THEN
4120- END_ROW = ZSL% NUNKH_LOCAL - 1
4121- ELSE
4122- END_ROW = ZSL% NUNKH_LOCAL
4123- ENDIF
4124- ! Rows 1 to ZM%NUNKH-1, last column, set all to zero:
4125- DO IROW = 1 ,END_ROW
4126- DO JCOL = 1 , ZSL% NNZ_D_MAT_H(IROW)
4127- IF ( ZSL % JD_MAT_H(JCOL,IROW) /= ZSL % NUNKH_TOTAL ) CYCLE ! Make zero matrix entries in last column.
4128- ZSL % D_MAT_H(JCOL,IROW) = 0._EB
4129- ENDDO
4130- ENDDO
4131- ! Last row, all zeros except the diagonal that keeps diagonal number:
4132- IF (ZSL % UPPER_ROW == ZSL% NUNKH_TOTAL) THEN
4133- IROW = ZSL% NUNKH_LOCAL
4134- DO JCOL = 1 , ZSL% NNZ_D_MAT_H( IROW)
4135- IF ( ZSL % JD_MAT_H(JCOL,IROW) /= ZSL % NUNKH_TOTAL ) ZSL % D_MAT_H(JCOL,IROW) = 0._EB
4117+ COLOR = MPI_UNDEFINED; IF ( ZSL% NUNKH_LOCAL > 0 ) COLOR = 1
4118+ CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,COLOR, 0 ,ZSL_COMM(IPZ) % COMM ,HYPRE_IERR)
4119+
4120+ IF (ZSL% NUNKH_LOCAL > 0 ) THEN
4121+ CALL HYPRE_IJMATRIXCREATE(ZSL_COMM(IPZ) % COMM, ZSL% LOWER_ROW -1 ,ZSL % UPPER_ROW -1 ,&
4122+ ZSL % LOWER_ROW -1 ,ZSL % UPPER_ROW -1 ,ZSL % HYPRE_ZSL % A_H,HYPRE_IERR)
4123+
4124+ CALL HYPRE_IJMATRIXSETOBJECTTYPE( ZSL% HYPRE_ZSL % A_H,HYPRE_PARCSR,HYPRE_IERR)
4125+ CALL HYPRE_IJMATRIXINITIALIZE (ZSL% HYPRE_ZSL % A_H,HYPRE_IERR)
4126+
4127+ IF (ZSL % MTYPE == SYMM_INDEFINITE) THEN
4128+ IF (ZSL % NUNKH_TOTAL == 1 ) THEN ! Single unknown, zero coefficient matrix (1,1). Set coefficient to 1.
4129+ IF (ZSL% NUNKH_LOCAL == 1 ) THEN
4130+ ZSL% NNZ_D_MAT_H( 1 ) = 1
4131+ DEALLOCATE (ZSL % JD_MAT_H); ALLOCATE (ZSL % JD_MAT_H( 1 , 1 )); ZSL % JD_MAT_H( 1 , 1 ) = 1
4132+ DEALLOCATE ( ZSL% D_MAT_H ); ALLOCATE (ZSL % D_MAT_H( 1 , 1 ) ); ZSL % D_MAT_H( 1 , 1 ) = 1._EB
4133+ ENDIF
4134+ ELSE ! More than one unknown
4135+ IF (ZSL % UPPER_ROW == ZSL % NUNKH_TOTAL) THEN
4136+ END_ROW = ZSL% NUNKH_LOCAL -1
4137+ ELSE
4138+ END_ROW = ZSL % NUNKH_LOCAL
4139+ ENDIF
4140+ ! Rows 1 to ZM%NUNKH-1, last column, set all to zero:
4141+ DO IROW = 1 ,END_ROW
4142+ DO JCOL = 1 , ZSL% NNZ_D_MAT_H(IROW)
4143+ IF ( ZSL % JD_MAT_H(JCOL, IROW) / = ZSL% NUNKH_TOTAL ) CYCLE ! Make zero matrix entries in last column.
4144+ ZSL% D_MAT_H(JCOL, IROW) = 0._EB
4145+ ENDDO
41364146 ENDDO
4147+ ! Last row, all zeros except the diagonal that keeps diagonal number:
4148+ IF (ZSL% UPPER_ROW== ZSL% NUNKH_TOTAL) THEN
4149+ IROW = ZSL% NUNKH_LOCAL
4150+ DO JCOL= 1 ,ZSL% NNZ_D_MAT_H(IROW)
4151+ IF ( ZSL% JD_MAT_H(JCOL,IROW) /= ZSL% NUNKH_TOTAL ) ZSL% D_MAT_H(JCOL,IROW) = 0._EB
4152+ ENDDO
4153+ ENDIF
41374154 ENDIF
41384155 ENDIF
4139- ENDIF
4140- IF (ZSL% NUNKH_LOCAL > 0 ) THEN
4156+
41414157 ZSL% JD_MAT_H = ZSL% JD_MAT_H - 1
41424158 DO IROW= 1 ,ZSL% NUNKH_LOCAL
41434159 ZSL% HYPRE_ZSL% INDICES(IROW)= ZSL% LOWER_ROW+ IROW-2
41444160 CALL HYPRE_IJMATRIXSETVALUES(ZSL% HYPRE_ZSL% A_H, 1 , ZSL% NNZ_D_MAT_H(IROW), ZSL% HYPRE_ZSL% INDICES(IROW), &
41454161 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)
41464162 ENDDO
4147- ELSE
4148- ZSL% HYPRE_ZSL% INDICES(1 )= ZSL% LOWER_ROW-1
4149- ONEV(1 ) = 1 ; ZEROV(1 ) = 0._EB
4150- ! Define a zero coefficient in A(ZSL%LOWER_ROW-1,ZSL%LOWER_ROW-1):
4151- CALL HYPRE_IJMATRIXSETVALUES(ZSL% HYPRE_ZSL% A_H, 1 , ONEV(1 ), ZSL% HYPRE_ZSL% INDICES(1 ), &
4152- ZSL% HYPRE_ZSL% INDICES(1 ), ZEROV(1 ), HYPRE_IERR)
4153- ENDIF
4154- CALL HYPRE_IJMATRIXASSEMBLE(ZSL% HYPRE_ZSL% A_H, HYPRE_IERR)
4155- CALL HYPRE_IJMATRIXGETOBJECT(ZSL% HYPRE_ZSL% A_H, ZSL% HYPRE_ZSL% PARCSR_A_H, HYPRE_IERR)
4156- ! Create right hand side vector
4157- CALL HYPRE_IJVECTORCREATE(MPI_COMM_WORLD, ZSL% LOWER_ROW-1 , ZSL% UPPER_ROW-1 , ZSL% HYPRE_ZSL% F_H, HYPRE_IERR)
4158- CALL HYPRE_IJVECTORSETOBJECTTYPE(ZSL% HYPRE_ZSL% F_H, HYPRE_PARCSR, HYPRE_IERR)
4159- CALL HYPRE_IJVECTORINITIALIZE(ZSL% HYPRE_ZSL% F_H, HYPRE_IERR)
4160- ! Create solution vector
4161- CALL HYPRE_IJVECTORCREATE(MPI_COMM_WORLD, ZSL% LOWER_ROW-1 , ZSL% UPPER_ROW-1 , ZSL% HYPRE_ZSL% X_H, HYPRE_IERR)
4162- CALL HYPRE_IJVECTORSETOBJECTTYPE(ZSL% HYPRE_ZSL% X_H, HYPRE_PARCSR, HYPRE_IERR)
4163- CALL HYPRE_IJVECTORINITIALIZE(ZSL% HYPRE_ZSL% X_H, HYPRE_IERR)
4164- ! Set values
4165- CALL HYPRE_IJVECTORSETVALUES(ZSL% HYPRE_ZSL% F_H, ZSL% NUNKH_LOCAL, ZSL% HYPRE_ZSL% INDICES, ZSL% F_H, HYPRE_IERR)
4166- CALL HYPRE_IJVECTORSETVALUES(ZSL% HYPRE_ZSL% X_H, ZSL% NUNKH_LOCAL, ZSL% HYPRE_ZSL% INDICES, ZSL% X_H, HYPRE_IERR)
4167- ! Assemble vectors
4168- CALL HYPRE_IJVECTORASSEMBLE(ZSL% HYPRE_ZSL% F_H, HYPRE_IERR)
4169- CALL HYPRE_IJVECTORASSEMBLE(ZSL% HYPRE_ZSL% X_H, HYPRE_IERR)
4170- ! Get rhs and soln objects
4171- CALL HYPRE_IJVECTORGETOBJECT(ZSL% HYPRE_ZSL% F_H, ZSL% HYPRE_ZSL% PAR_F_H, HYPRE_IERR)
4172- CALL HYPRE_IJVECTORGETOBJECT(ZSL% HYPRE_ZSL% X_H, ZSL% HYPRE_ZSL% PAR_X_H, HYPRE_IERR)
41734163
4174- ! Create solver (Parallel Compressed Sparse Row Preconditioned Conjugate Gradient)
4175- CALL HYPRE_PARCSRPCGCREATE(MPI_COMM_WORLD, ZSL% HYPRE_ZSL% SOLVER, HYPRE_IERR)
4176- CALL HYPRE_PARCSRPCGSETMAXITER(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_MAXIT, HYPRE_IERR)
4177- CALL HYPRE_PARCSRPCGSETTOL(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_TOL, HYPRE_IERR)
4178- CALL HYPRE_PARCSRPCGSETTWONORM(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_SETTWONORM, HYPRE_IERR)
4179- CALL HYPRE_PARCSRPCGSETPRINTLEVEL(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_SETPRINTLEVEL, HYPRE_IERR)
4180- CALL HYPRE_PARCSRPCGSETLOGGING(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_SETLOGGING, HYPRE_IERR)
4181-
4182- ! Set up the Algebraic Multi-Grid (AMG) preconditioner and specify any parameters
4183- CALL HYPRE_BOOMERAMGCREATE(ZSL% HYPRE_ZSL% PRECOND, HYPRE_IERR)
4184- CALL HYPRE_BOOMERAMGSETPRINTLEVEL(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_SETPRINTLEVEL, HYPRE_IERR)
4185- CALL HYPRE_BOOMERAMGSETCOARSENTYPE(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_COARSENINGTYPE, HYPRE_IERR)
4186- CALL HYPRE_BOOMERAMGSETRELAXTYPE(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_SETRELAXTYPE, HYPRE_IERR)
4187- CALL HYPRE_BOOMERAMGSETNUMSWEEPS(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_NUMSWEEPS, HYPRE_IERR)
4188- CALL HYPRE_BOOMERAMGSETTOL(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_TOL, HYPRE_IERR)
4189- CALL HYPRE_BOOMERAMGSETMAXITER(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_MAXITER, HYPRE_IERR)
4190- CALL HYPRE_PARCSRPCGSETPRECOND(ZSL% HYPRE_ZSL% SOLVER, HYPRE_PRECOND_ID, ZSL% HYPRE_ZSL% PRECOND, HYPRE_IERR)
4191- ! Solver setup
4192- IF (WRITE_PARCSRPCG_MATRIX) THEN
4193- WRITE (FN_PARCSRPCG_MATRIX,' (A,A)' ) TRIM (CHID),' _hypre_matrix.txt'
4194- CALL HYPRE_PARCSRMATRIXPRINT(ZSL% HYPRE_ZSL% PARCSR_A_H, TRIM (FN_PARCSRPCG_MATRIX), LEN (TRIM (FN_PARCSRPCG_MATRIX)), HYPRE_IERR)
4164+ CALL HYPRE_IJMATRIXASSEMBLE(ZSL% HYPRE_ZSL% A_H, HYPRE_IERR)
4165+ CALL HYPRE_IJMATRIXGETOBJECT(ZSL% HYPRE_ZSL% A_H, ZSL% HYPRE_ZSL% PARCSR_A_H, HYPRE_IERR)
4166+
4167+ ! Create right hand side vector
4168+ CALL HYPRE_IJVECTORCREATE(ZSL_COMM(IPZ)% COMM, ZSL% LOWER_ROW-1 , ZSL% UPPER_ROW-1 , ZSL% HYPRE_ZSL% F_H, HYPRE_IERR)
4169+ CALL HYPRE_IJVECTORSETOBJECTTYPE(ZSL% HYPRE_ZSL% F_H, HYPRE_PARCSR, HYPRE_IERR)
4170+ CALL HYPRE_IJVECTORINITIALIZE(ZSL% HYPRE_ZSL% F_H, HYPRE_IERR)
4171+ ! Create solution vector
4172+ CALL HYPRE_IJVECTORCREATE(ZSL_COMM(IPZ)% COMM, ZSL% LOWER_ROW-1 , ZSL% UPPER_ROW-1 , ZSL% HYPRE_ZSL% X_H, HYPRE_IERR)
4173+ CALL HYPRE_IJVECTORSETOBJECTTYPE(ZSL% HYPRE_ZSL% X_H, HYPRE_PARCSR, HYPRE_IERR)
4174+ CALL HYPRE_IJVECTORINITIALIZE(ZSL% HYPRE_ZSL% X_H, HYPRE_IERR)
4175+ ! Set values
4176+ CALL HYPRE_IJVECTORSETVALUES(ZSL% HYPRE_ZSL% F_H, ZSL% NUNKH_LOCAL, ZSL% HYPRE_ZSL% INDICES, ZSL% F_H, HYPRE_IERR)
4177+ CALL HYPRE_IJVECTORSETVALUES(ZSL% HYPRE_ZSL% X_H, ZSL% NUNKH_LOCAL, ZSL% HYPRE_ZSL% INDICES, ZSL% X_H, HYPRE_IERR)
4178+ ! Assemble vectors
4179+ CALL HYPRE_IJVECTORASSEMBLE(ZSL% HYPRE_ZSL% F_H, HYPRE_IERR)
4180+ CALL HYPRE_IJVECTORASSEMBLE(ZSL% HYPRE_ZSL% X_H, HYPRE_IERR)
4181+ ! Get rhs and soln objects
4182+ CALL HYPRE_IJVECTORGETOBJECT(ZSL% HYPRE_ZSL% F_H, ZSL% HYPRE_ZSL% PAR_F_H, HYPRE_IERR)
4183+ CALL HYPRE_IJVECTORGETOBJECT(ZSL% HYPRE_ZSL% X_H, ZSL% HYPRE_ZSL% PAR_X_H, HYPRE_IERR)
4184+
4185+ ! Create solver (Parallel Compressed Sparse Row Preconditioned Conjugate Gradient)
4186+ CALL HYPRE_PARCSRPCGCREATE(ZSL_COMM(IPZ)% COMM, ZSL% HYPRE_ZSL% SOLVER, HYPRE_IERR)
4187+ CALL HYPRE_PARCSRPCGSETMAXITER(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_MAXIT, HYPRE_IERR)
4188+ CALL HYPRE_PARCSRPCGSETTOL(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_TOL, HYPRE_IERR)
4189+ CALL HYPRE_PARCSRPCGSETTWONORM(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_SETTWONORM, HYPRE_IERR)
4190+ CALL HYPRE_PARCSRPCGSETPRINTLEVEL(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_SETPRINTLEVEL, HYPRE_IERR)
4191+ CALL HYPRE_PARCSRPCGSETLOGGING(ZSL% HYPRE_ZSL% SOLVER, HYPRE_SOLVER_SETLOGGING, HYPRE_IERR)
4192+
4193+ ! Set up the Algebraic Multi-Grid (AMG) preconditioner and specify any parameters
4194+ CALL HYPRE_BOOMERAMGCREATE(ZSL% HYPRE_ZSL% PRECOND, HYPRE_IERR)
4195+ CALL HYPRE_BOOMERAMGSETPRINTLEVEL(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_SETPRINTLEVEL, HYPRE_IERR)
4196+ CALL HYPRE_BOOMERAMGSETCOARSENTYPE(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_COARSENINGTYPE, HYPRE_IERR)
4197+ CALL HYPRE_BOOMERAMGSETRELAXTYPE(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_SETRELAXTYPE, HYPRE_IERR)
4198+ CALL HYPRE_BOOMERAMGSETNUMSWEEPS(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_NUMSWEEPS, HYPRE_IERR)
4199+ CALL HYPRE_BOOMERAMGSETTOL(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_TOL, HYPRE_IERR)
4200+ CALL HYPRE_BOOMERAMGSETMAXITER(ZSL% HYPRE_ZSL% PRECOND, HYPRE_PRECOND_MAXITER, HYPRE_IERR)
4201+ CALL HYPRE_PARCSRPCGSETPRECOND(ZSL% HYPRE_ZSL% SOLVER, HYPRE_PRECOND_ID, ZSL% HYPRE_ZSL% PRECOND, HYPRE_IERR)
4202+ ! Solver setup
4203+ IF (WRITE_PARCSRPCG_MATRIX) THEN
4204+ WRITE (FN_PARCSRPCG_MATRIX,' (A,A)' ) TRIM (CHID),' _hypre_matrix.txt'
4205+ CALL HYPRE_PARCSRMATRIXPRINT(ZSL% HYPRE_ZSL% PARCSR_A_H, TRIM (FN_PARCSRPCG_MATRIX), &
4206+ LEN (TRIM (FN_PARCSRPCG_MATRIX)), HYPRE_IERR)
4207+ ENDIF
4208+ CALL HYPRE_PARCSRPCGSETUP(ZSL% HYPRE_ZSL% SOLVER, ZSL% HYPRE_ZSL% PARCSR_A_H,&
4209+ ZSL% HYPRE_ZSL% PAR_F_H, ZSL% HYPRE_ZSL% PAR_X_H, HYPRE_IERR)
41954210 ENDIF
4196- CALL HYPRE_PARCSRPCGSETUP(ZSL% HYPRE_ZSL% SOLVER, ZSL% HYPRE_ZSL% PARCSR_A_H,&
4197- ZSL% HYPRE_ZSL% PAR_F_H, ZSL% HYPRE_ZSL% PAR_X_H, HYPRE_IERR)
41984211#endif
41994212
42004213 END SELECT LIBRARY_SELECT
@@ -5377,6 +5390,7 @@ SUBROUTINE FINISH_GLMAT_SOLVER
53775390IF (UGLMAT_SOLVER_LIBRARY== HYPRE_FLAG) THEN
53785391#ifdef WITH_HYPRE
53795392 CALL HYPRE_FINALIZE(HYPRE_IERR)
5393+ DEALLOCATE (ZSL_COMM)
53805394#endif
53815395ENDIF
53825396
0 commit comments