Skip to content

Commit a37bd78

Browse files
committed
Merge remote-tracking branch 'firemodels/master'
2 parents 123fbb7 + b4f061d commit a37bd78

File tree

128 files changed

+2915
-815
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+2915
-815
lines changed

.github/workflows/linux.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ jobs:
3434
- uses: rscohn2/setup-oneapi@v0
3535
with:
3636
components: |
37-
ifx
38-
impi
39-
mkl
37+
ifx@2025.2.0
38+
impi@2021.16.0
39+
mkl@2025.2.0
4040
prune: false
4141

4242
- uses: actions/checkout@v5
@@ -98,7 +98,7 @@ jobs:
9898
steps:
9999
- uses: actions/checkout@v5
100100

101-
- uses: actions/setup-python@v5
101+
- uses: actions/setup-python@v6
102102
with:
103103
python-version: '3.9'
104104
cache: 'pip' # caching pip dependencies

.github/workflows/windows.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ permissions:
2626
env:
2727
# update urls for oneapi packages according to
2828
# https://github.com/oneapi-src/oneapi-ci/blob/master/.github/workflows/build_all.yml
29-
WINDOWS_BASEKIT_URL: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/09a8acaf-265f-4460-866c-a3375ed5b4ff/intel-oneapi-base-toolkit-2025.2.0.591_offline.exe
29+
WINDOWS_BASEKIT_URL: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/f5881e61-dcdc-40f1-9bd9-717081ac623c/intel-oneapi-base-toolkit-2025.2.1.46_offline.exe
3030
WINDOWS_BASEKIT_COMPONENTS: intel.oneapi.win.mkl.devel
31-
WINDOWS_HPCKIT_URL: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/3bbdaf75-6728-492e-a18c-be654dae9ee2/intel-oneapi-hpc-toolkit-2025.2.0.576_offline.exe
31+
WINDOWS_HPCKIT_URL: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/e63ac2b4-8a9a-4768-979a-399a8b6299de/intel-oneapi-hpc-toolkit-2025.2.1.46_offline.exe
3232
WINDOWS_HPCKIT_COMPONENTS: intel.oneapi.win.ifort-compiler:intel.oneapi.win.mpi.devel
3333

3434

Build/Scripts/set_compilers.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ set_compiler_from_env_var COMP_CXX FIREMODELS_CXX set_COMP_CXX
5454
set_compiler_from_env_var COMP_FC FIREMODELS_FC set_COMP_FC
5555

5656
# Determine compiler list based on build target
57-
if [[ "$FDS_BUILD_TARGET" == *"osx"* ]]; then
57+
if [[ "$FDS_BUILD_TARGET" == "ompi_intel"* ]]; then
58+
select_compiler_from_system COMP_CC mpicc icx
59+
select_compiler_from_system COMP_CXX mpicxx icpx
60+
select_compiler_from_system COMP_FC mpifort
61+
elif [[ "$FDS_BUILD_TARGET" == *"osx"* ]]; then
5862
select_compiler_from_system COMP_CC mpicc clang gcc
5963
select_compiler_from_system COMP_CXX mpicxx clang++ g++
6064
select_compiler_from_system COMP_FC mpifort

Build/makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ ompi_gnu_linux : obj = fds_ompi_gnu_linux
355355
ompi_gnu_linux : setup $(obj_mpi)
356356
$(FCOMPL) $(FFLAGS) $(FOPENMPFLAGS) -o $(obj) $(obj_mpi) $(LFLAGSMKL)
357357

358-
ompi_gnu_linux_db : FFLAGS = -O0 -std=f2018 -ggdb -Wall -Werror -Wunused-parameter -Wcharacter-truncation -Wno-target-lifetime -fcheck=all -fbacktrace -ffpe-trap=invalid,zero,overflow -frecursive -ffpe-summary=none -fall-intrinsics -fbounds-check $(GITINFOGNU) $(FFLAGSMKL) $(GFORTRAN_OPTIONS) $(FFLAGS_HYPRE) $(FFLAGS_SUNDIALS)
358+
ompi_gnu_linux_db : FFLAGS = -O0 -std=f2018 -ggdb -finit-real=snan -finit-integer=-999999 -Wall -Werror -Wunused-parameter -Wcharacter-truncation -Wno-target-lifetime -fcheck=all -fbacktrace -ffpe-trap=invalid,zero,overflow -frecursive -ffpe-summary=none -fall-intrinsics -fbounds-check $(GITINFOGNU) $(FFLAGSMKL) $(GFORTRAN_OPTIONS) $(FFLAGS_HYPRE) $(FFLAGS_SUNDIALS)
359359
ompi_gnu_linux_db : LFLAGSMKL = $(LFLAGSMKL_GNU_OPENMP) $(LFLAGS_HYPRE) $(LFLAGS_SUNDIALS)
360360
ompi_gnu_linux_db : FCOMPL = $(COMP_FC)
361361
ompi_gnu_linux_db : FOPENMPFLAGS = -fopenmp

Source/pres.f90

Lines changed: 104 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -3059,6 +3059,14 @@ MODULE GLOBMAT_SOLVER
30593059
! Handle for ZONE_SOLVER array entries:
30603060
TYPE(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:
30633071
INTEGER, PARAMETER :: SYMM_INDEFINITE =-2
30643072
INTEGER, 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
39313941
INTEGER, 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
39363945
CHARACTER(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
39673977
END 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
53775390
IF (UGLMAT_SOLVER_LIBRARY==HYPRE_FLAG) THEN
53785391
#ifdef WITH_HYPRE
53795392
CALL HYPRE_FINALIZE(HYPRE_IERR)
5393+
DEALLOCATE(ZSL_COMM)
53805394
#endif
53815395
ENDIF
53825396

Source/wall.f90

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,7 @@ SUBROUTINE WALL_BC(T,DT,NM)
162162
IF (B1%NODE_INDEX/=0) CALL CALC_HVAC_BC(BC,B1,SF)
163163
ENDIF
164164

165-
IF (WC%BOUNDARY_TYPE/=OPEN_BOUNDARY .AND. WC%BOUNDARY_TYPE/=INTERPOLATED_BOUNDARY) THEN
166-
CALL CALCULATE_ZZ_F(T,DT,WALL_INDEX=IW)
167-
ENDIF
165+
IF (WC%BOUNDARY_TYPE/=OPEN_BOUNDARY .AND. WC%BOUNDARY_TYPE/=INTERPOLATED_BOUNDARY) CALL CALCULATE_ZZ_F(T,DT,WALL_INDEX=IW)
168166

169167
IF (WC%BOUNDARY_TYPE/=INTERPOLATED_BOUNDARY) CALL CALCULATE_RHO_F(BC,B1,WALL_INDEX=IW)
170168

@@ -220,7 +218,6 @@ SUBROUTINE WALL_BC(T,DT,NM)
220218
ENDIF
221219

222220
CALL CALCULATE_ZZ_F(T,DT,CFACE_INDEX=ICF)
223-
224221
CALL CALCULATE_RHO_F(BC,B1,CFACE_INDEX=ICF)
225222

226223
ENDDO CFACE_LOOP
@@ -1328,9 +1325,9 @@ SUBROUTINE CALCULATE_ZZ_F(T,DT,WALL_INDEX,CFACE_INDEX,PARTICLE_INDEX)
13281325
! Only set species mass fraction in the ghost cell if it is not solid
13291326

13301327
IF (PRESENT(WALL_INDEX)) THEN
1331-
IF (WALL_INDEX<=N_EXTERNAL_WALL_CELLS .AND. .NOT.CELL(IC)%SOLID .AND. .NOT.CELL(ICG)%SOLID) THEN
1332-
ZZP(BC%II,BC%JJ,BC%KK,1:N_TRACKED_SPECIES) = 2._EB*B1%ZZ_F(1:N_TRACKED_SPECIES) - B1%ZZ_G(1:N_TRACKED_SPECIES)
1333-
ZZP(BC%II2,BC%JJ2,BC%KK2,1:N_TRACKED_SPECIES) = 2._EB*B1%ZZ_F(1:N_TRACKED_SPECIES) - B1%ZZ_G(1:N_TRACKED_SPECIES)
1328+
IF (WALL_INDEX<=N_EXTERNAL_WALL_CELLS) THEN
1329+
ZZP(BC%II,BC%JJ,BC%KK,1:N_TRACKED_SPECIES) = B1%ZZ_F(1:N_TRACKED_SPECIES)
1330+
ZZP(BC%II2,BC%JJ2,BC%KK2,1:N_TRACKED_SPECIES) = B1%ZZ_F(1:N_TRACKED_SPECIES)
13341331
ENDIF
13351332
ENDIF
13361333

@@ -1496,10 +1493,14 @@ SUBROUTINE CALCULATE_RHO_F(BC,B1,WALL_INDEX,CFACE_INDEX)
14961493
ENDIF
14971494
ENDIF
14981495

1499-
IF (PRESENT(WALL_INDEX)) THEN
1500-
IF (WALL_INDEX<=N_EXTERNAL_WALL_CELLS .AND. BOUNDARY_TYPE/=OPEN_BOUNDARY) THEN
1501-
RHOP(BC%II ,BC%JJ, BC%KK ) = 2._EB*B1%RHO_F - B1%RHO_G
1502-
RHOP(BC%II2,BC%JJ2,BC%KK2) = 2._EB*B1%RHO_F - B1%RHO_G
1496+
! Fill exterior ghost cells with surface density and temperature
1497+
1498+
IF (PRESENT(WALL_INDEX) .AND. BOUNDARY_TYPE/=OPEN_BOUNDARY) THEN
1499+
IF (WALL_INDEX<=N_EXTERNAL_WALL_CELLS) THEN
1500+
RHOP(BC%II ,BC%JJ, BC%KK ) = B1%RHO_F
1501+
RHOP(BC%II2,BC%JJ2,BC%KK2) = B1%RHO_F
1502+
TMP(BC%II ,BC%JJ, BC%KK ) = B1%TMP_F
1503+
TMP(BC%II2,BC%JJ2,BC%KK2) = B1%TMP_F
15031504
ENDIF
15041505
ENDIF
15051506

0 commit comments

Comments
 (0)