Skip to content

Commit cdd4a4f

Browse files
committed
FDS Source: Issue #14223. Check bounds of arrays on restart
1 parent 61537e3 commit cdd4a4f

File tree

6 files changed

+49
-41
lines changed

6 files changed

+49
-41
lines changed

Source/cons.f90

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,6 @@ MODULE GLOBAL_CONSTANTS
267267
LOGICAL :: NO_PRESSURE_ZONES=.FALSE. !< Flag to suppress pressure zones
268268
LOGICAL :: CTRL_DIRECT_FORCE=.FALSE. !< Allow adjustable direct force via CTRL logic
269269
LOGICAL :: REACTING_THIN_OBSTRUCTIONS=.FALSE. !< Thin obstructions that off-gas are present
270-
LOGICAL :: CHECK_BOUNDARY_ONE_D_ARRAYS=.FALSE. !< Flag that indicates that ONE_D array dimensions need to be checked
271270
LOGICAL :: TENSOR_DIFFUSIVITY=.FALSE. !< If true, use experimental tensor diffusivity model for spec and tmp
272271
LOGICAL :: OXPYRO_MODEL=.FALSE. !< Flag to use oxidative pyrolysis mass transfer model
273272
LOGICAL :: OUTPUT_WALL_QUANTITIES=.FALSE. !< Flag to force call to WALL_MODEL

Source/dump.f90

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3579,7 +3579,7 @@ SUBROUTINE DUMP_RESTART(T,DT,NM)
35793579
DO IW=1,N_WALL_CELLS
35803580
WC => WALL(IW)
35813581
RC=0 ; IC=0 ; LC=0
3582-
CALL PACK_WALL(NM,OS,WC,WC%SURF_INDEX,RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.)
3582+
CALL PACK_WALL(NM,OS,WC,WC%SURF_INDEX,RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.FALSE.)
35833583
WRITE(LU_CORE(NM)) WC%SURF_INDEX
35843584
WRITE(LU_CORE(NM)) OS%REALS,OS%INTEGERS,OS%LOGICALS
35853585
ENDDO
@@ -3589,7 +3589,7 @@ SUBROUTINE DUMP_RESTART(T,DT,NM)
35893589
DO ITW=1,N_THIN_WALL_CELLS
35903590
TW => THIN_WALL(ITW)
35913591
RC=0 ; IC=0 ; LC=0
3592-
CALL PACK_THIN_WALL(NM,OS,TW,TW%SURF_INDEX,RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.)
3592+
CALL PACK_THIN_WALL(NM,OS,TW,TW%SURF_INDEX,RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.FALSE.)
35933593
WRITE(LU_CORE(NM)) TW%SURF_INDEX
35943594
WRITE(LU_CORE(NM)) OS%REALS,OS%INTEGERS,OS%LOGICALS
35953595
ENDDO
@@ -3599,7 +3599,7 @@ SUBROUTINE DUMP_RESTART(T,DT,NM)
35993599
DO ICF=1,N_CFACE_CELLS_DIM
36003600
CFA => CFACE(ICF)
36013601
RC=0 ; IC=0 ; LC=0
3602-
CALL PACK_CFACE(NM,OS,CFA,CFA%SURF_INDEX,RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.)
3602+
CALL PACK_CFACE(NM,OS,CFA,CFA%SURF_INDEX,RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.FALSE.)
36033603
WRITE(LU_CORE(NM)) CFA%SURF_INDEX
36043604
WRITE(LU_CORE(NM)) OS%REALS,OS%INTEGERS,OS%LOGICALS
36053605
ENDDO
@@ -3610,7 +3610,7 @@ SUBROUTINE DUMP_RESTART(T,DT,NM)
36103610
LPC => LAGRANGIAN_PARTICLE_CLASS(LP%CLASS_INDEX)
36113611
OS => LPC%PARTICLE_STORAGE
36123612
RC=0 ; IC=0 ; LC=0
3613-
CALL PACK_PARTICLE(NM,OS,LP,LP%CLASS_INDEX,RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.)
3613+
CALL PACK_PARTICLE(NM,OS,LP,LP%CLASS_INDEX,RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.FALSE.)
36143614
WRITE(LU_CORE(NM)) LP%CLASS_INDEX
36153615
WRITE(LU_CORE(NM)) OS%REALS,OS%INTEGERS,OS%LOGICALS
36163616
ENDDO
@@ -3797,7 +3797,7 @@ SUBROUTINE READ_RESTART(T,DT,NM)
37973797
RC=0 ; IC=0 ; LC=0
37983798
CALL ALLOCATE_STORAGE(NM,SURF_INDEX=SURF_INDEX,WALL_INDEX=IW)
37993799
WC => MESHES(NM)%WALL(IW)
3800-
CALL PACK_WALL(NM,OS,WC,SURF_INDEX,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.)
3800+
CALL PACK_WALL(NM,OS,WC,SURF_INDEX,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.TRUE.)
38013801
ENDDO
38023802

38033803
READ(LU_RESTART(NM)) N_THIN_WALL_CELLS,N_THIN_WALL_CELLS_DIM
@@ -3809,7 +3809,7 @@ SUBROUTINE READ_RESTART(T,DT,NM)
38093809
RC=0 ; IC=0 ; LC=0
38103810
CALL ALLOCATE_STORAGE(NM,SURF_INDEX=SURF_INDEX,THIN_WALL_INDEX=ITW)
38113811
TW => MESHES(NM)%THIN_WALL(ITW)
3812-
CALL PACK_THIN_WALL(NM,OS,TW,SURF_INDEX,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.)
3812+
CALL PACK_THIN_WALL(NM,OS,TW,SURF_INDEX,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.TRUE.)
38133813
ENDDO
38143814

38153815
READ(LU_RESTART(NM)) N_CFACE_CELLS_DIM
@@ -3821,7 +3821,7 @@ SUBROUTINE READ_RESTART(T,DT,NM)
38213821
RC=0 ; IC=0 ; LC=0
38223822
CALL ALLOCATE_STORAGE(NM,SURF_INDEX=SURF_INDEX,CFACE_INDEX=ICF)
38233823
CFA => MESHES(NM)%CFACE(ICF)
3824-
CALL PACK_CFACE(NM,OS,CFA,SURF_INDEX,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.)
3824+
CALL PACK_CFACE(NM,OS,CFA,SURF_INDEX,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.TRUE.)
38253825
ENDDO
38263826

38273827
READ(LU_RESTART(NM)) NLP,NLPDIM,PARTICLE_TAG
@@ -3836,7 +3836,7 @@ SUBROUTINE READ_RESTART(T,DT,NM)
38363836
RC=0 ; IC=0 ; LC=0
38373837
CALL ALLOCATE_STORAGE(NM,LP_INDEX=IP,LPC_INDEX=CLASS_INDEX,SURF_INDEX=LPC%SURF_INDEX)
38383838
LP => MESHES(NM)%LAGRANGIAN_PARTICLE(IP)
3839-
CALL PACK_PARTICLE(NM,OS,LP,CLASS_INDEX,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.)
3839+
CALL PACK_PARTICLE(NM,OS,LP,CLASS_INDEX,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.FALSE.)
38403840
ENDDO
38413841
ENDIF
38423842

Source/func.f90

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3322,7 +3322,8 @@ SUBROUTINE ALLOCATE_STORAGE(NM,LP_INDEX,LPC_INDEX,SURF_INDEX,WALL_INDEX,CFACE_IN
33223322
WC%N_REALS = 0
33233323
WC%N_INTEGERS = 0
33243324
WC%N_LOGICALS = 0
3325-
CALL PACK_WALL(NM,OS_DUMMY,WC,SURF_INDEX,WC%N_REALS,WC%N_INTEGERS,WC%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.)
3325+
CALL PACK_WALL(NM,OS_DUMMY,WC,SURF_INDEX,WC%N_REALS,WC%N_INTEGERS,WC%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.,&
3326+
CHECK_BOUNDS=.FALSE.)
33263327

33273328
ELSEIF (PRESENT(THIN_WALL_INDEX)) THEN
33283329

@@ -3351,7 +3352,8 @@ SUBROUTINE ALLOCATE_STORAGE(NM,LP_INDEX,LPC_INDEX,SURF_INDEX,WALL_INDEX,CFACE_IN
33513352
TW%TD_INDEX = TD_INDEX
33523353
TW%B1_INDEX = B1_INDEX
33533354

3354-
CALL PACK_THIN_WALL(NM,OS_DUMMY,TW,SURF_INDEX,TW%N_REALS,TW%N_INTEGERS,TW%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.)
3355+
CALL PACK_THIN_WALL(NM,OS_DUMMY,TW,SURF_INDEX,TW%N_REALS,TW%N_INTEGERS,TW%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.,&
3356+
CHECK_BOUNDS=.FALSE.)
33553357

33563358
ELSEIF (PRESENT(CFACE_INDEX)) THEN
33573359

@@ -3384,7 +3386,8 @@ SUBROUTINE ALLOCATE_STORAGE(NM,LP_INDEX,LPC_INDEX,SURF_INDEX,WALL_INDEX,CFACE_IN
33843386
CFA%B2_INDEX = B2_INDEX
33853387
CFA%BR_INDEX = BR_INDEX
33863388

3387-
CALL PACK_CFACE(NM,OS_DUMMY,CFA,SURF_INDEX,CFA%N_REALS,CFA%N_INTEGERS,CFA%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.)
3389+
CALL PACK_CFACE(NM,OS_DUMMY,CFA,SURF_INDEX,CFA%N_REALS,CFA%N_INTEGERS,CFA%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.,&
3390+
CHECK_BOUNDS=.FALSE.)
33883391

33893392
ENDIF
33903393

@@ -3678,12 +3681,13 @@ END SUBROUTINE ALLOCATE_STORAGE
36783681
!> \param LC Counter of logical variables
36793682
!> \param UNPACK_IT Logical indicating whether the data is to be packed or unpacked
36803683
!> \param COUNT_ONLY Logical indicating whether the aim is simply to count variables
3684+
!> \param CHECK_BOUNDS Logical indicating whether to check the array bounds of the items being unpacked
36813685

3682-
SUBROUTINE PACK_PARTICLE(NM,OS,LP,LPC_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY)
3686+
SUBROUTINE PACK_PARTICLE(NM,OS,LP,LPC_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS)
36833687

36843688
USE COMP_OPERATORS, ONLY: EQUATE
36853689
INTEGER, INTENT(IN) :: NM,LPC_INDEX
3686-
LOGICAL, INTENT(IN) :: UNPACK_IT,COUNT_ONLY
3690+
LOGICAL, INTENT(IN) :: UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS
36873691
INTEGER, INTENT(INOUT) :: IC,RC,LC
36883692
INTEGER :: BC_INDEX,OD_INDEX,B1_INDEX,B2_INDEX,BR_INDEX
36893693
TYPE(LAGRANGIAN_PARTICLE_TYPE), POINTER :: LP
@@ -3742,7 +3746,7 @@ SUBROUTINE PACK_PARTICLE(NM,OS,LP,LPC_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY)
37423746
! Boundary Coordinates
37433747

37443748
IF (LPC%INCLUDE_BOUNDARY_COORD_TYPE) CALL PACK_BOUNDARY_COORD(NM,IC,RC,OS,BC_INDEX,UNPACK_IT,COUNT_ONLY)
3745-
IF (LPC%INCLUDE_BOUNDARY_ONE_D_TYPE) CALL PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY)
3749+
IF (LPC%INCLUDE_BOUNDARY_ONE_D_TYPE) CALL PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS)
37463750
IF (LPC%INCLUDE_BOUNDARY_PROP1_TYPE) CALL PACK_BOUNDARY_PROP1(NM,IC,RC,LC,OS,B1_INDEX,UNPACK_IT,COUNT_ONLY,LPC%SURF_INDEX)
37473751
IF (LPC%INCLUDE_BOUNDARY_PROP2_TYPE) CALL PACK_BOUNDARY_PROP2(NM,IC,RC,OS,B2_INDEX,UNPACK_IT,COUNT_ONLY)
37483752
IF (LPC%INCLUDE_BOUNDARY_RADIA_TYPE) CALL PACK_BOUNDARY_RADIA(NM,RC,OS,BR_INDEX,UNPACK_IT,COUNT_ONLY)
@@ -3760,15 +3764,15 @@ END SUBROUTINE PACK_PARTICLE
37603764
!> \param LC Counter of logical variables
37613765
!> \param UNPACK_IT Logical indicating whether the data is to be packed or unpacked
37623766
!> \param COUNT_ONLY Logical indicating whether the aim is simply to count variables
3767+
!> \param CHECK_BOUNDS Logical indicating whether to check the array bounds of the items being unpacked
37633768

3764-
SUBROUTINE PACK_WALL(NM,OS,WC,SURF_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY)
3769+
SUBROUTINE PACK_WALL(NM,OS,WC,SURF_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS)
37653770

37663771
USE COMP_OPERATORS, ONLY: EQUATE
37673772
INTEGER, INTENT(IN) :: NM,SURF_INDEX
3768-
LOGICAL, INTENT(IN) :: UNPACK_IT
3773+
LOGICAL, INTENT(IN) :: UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS
37693774
INTEGER, INTENT(INOUT) :: IC,RC,LC
37703775
INTEGER :: BC_INDEX,OD_INDEX,B1_INDEX,B2_INDEX,BR_INDEX
3771-
LOGICAL, INTENT(IN) :: COUNT_ONLY
37723776
TYPE(WALL_TYPE), POINTER :: WC
37733777
TYPE(STORAGE_TYPE), POINTER :: OS
37743778
TYPE(SURFACE_TYPE), POINTER :: SF
@@ -3803,7 +3807,7 @@ SUBROUTINE PACK_WALL(NM,OS,WC,SURF_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY)
38033807
! Pack or unpack the appropriate derived type variables tied to this wall cell
38043808

38053809
IF (SF%INCLUDE_BOUNDARY_COORD_TYPE) CALL PACK_BOUNDARY_COORD(NM,IC,RC,OS,BC_INDEX,UNPACK_IT,COUNT_ONLY)
3806-
IF (SF%INCLUDE_BOUNDARY_ONE_D_TYPE) CALL PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY)
3810+
IF (SF%INCLUDE_BOUNDARY_ONE_D_TYPE) CALL PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS)
38073811
IF (SF%INCLUDE_BOUNDARY_PROP1_TYPE) CALL PACK_BOUNDARY_PROP1(NM,IC,RC,LC,OS,B1_INDEX,UNPACK_IT,COUNT_ONLY,SURF_INDEX)
38083812
IF (SF%INCLUDE_BOUNDARY_PROP2_TYPE) CALL PACK_BOUNDARY_PROP2(NM,IC,RC,OS,B2_INDEX,UNPACK_IT,COUNT_ONLY)
38093813
IF (SF%INCLUDE_BOUNDARY_RADIA_TYPE) CALL PACK_BOUNDARY_RADIA(NM,RC,OS,BR_INDEX,UNPACK_IT,COUNT_ONLY)
@@ -3821,15 +3825,15 @@ END SUBROUTINE PACK_WALL
38213825
!> \param LC Counter of logical variables
38223826
!> \param UNPACK_IT Logical indicating whether the data is to be packed or unpacked
38233827
!> \param COUNT_ONLY Logical indicating whether the aim is simply to count variables
3828+
!> \param CHECK_BOUNDS Logical indicating whether to check the array bounds of the items being unpacked
38243829

3825-
SUBROUTINE PACK_THIN_WALL(NM,OS,TW,SURF_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY)
3830+
SUBROUTINE PACK_THIN_WALL(NM,OS,TW,SURF_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS)
38263831

38273832
USE COMP_OPERATORS, ONLY: EQUATE
38283833
INTEGER, INTENT(IN) :: NM,SURF_INDEX
3829-
LOGICAL, INTENT(IN) :: UNPACK_IT
3834+
LOGICAL, INTENT(IN) :: UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS
38303835
INTEGER :: BC_INDEX,OD_INDEX
38313836
INTEGER, INTENT(INOUT) :: RC,IC,LC
3832-
LOGICAL, INTENT(IN) :: COUNT_ONLY
38333837
TYPE(THIN_WALL_TYPE), POINTER :: TW
38343838
TYPE(STORAGE_TYPE), POINTER :: OS
38353839
TYPE(SURFACE_TYPE), POINTER :: SF
@@ -3858,7 +3862,7 @@ SUBROUTINE PACK_THIN_WALL(NM,OS,TW,SURF_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY)
38583862
! Pack or unpack the appropriate derived type variables tied to this wall cell
38593863

38603864
IF (SF%INCLUDE_BOUNDARY_COORD_TYPE) CALL PACK_BOUNDARY_COORD(NM,IC,RC,OS,BC_INDEX,UNPACK_IT,COUNT_ONLY)
3861-
IF (SF%INCLUDE_BOUNDARY_ONE_D_TYPE) CALL PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY)
3865+
IF (SF%INCLUDE_BOUNDARY_ONE_D_TYPE) CALL PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS)
38623866

38633867
END SUBROUTINE PACK_THIN_WALL
38643868

@@ -3873,12 +3877,13 @@ END SUBROUTINE PACK_THIN_WALL
38733877
!> \param LC Counter of logical variables
38743878
!> \param UNPACK_IT Logical indicating whether the data is to be packed or unpacked
38753879
!> \param COUNT_ONLY Logical indicating whether the aim is simply to count variables
3880+
!> \param CHECK_BOUNDS Logical indicating whether to check the array bounds of the items being unpacked
38763881

3877-
SUBROUTINE PACK_CFACE(NM,OS,CFA,SURF_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY)
3882+
SUBROUTINE PACK_CFACE(NM,OS,CFA,SURF_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS)
38783883

38793884
USE COMP_OPERATORS, ONLY: EQUATE
38803885
INTEGER, INTENT(IN) :: NM,SURF_INDEX
3881-
LOGICAL, INTENT(IN) :: UNPACK_IT,COUNT_ONLY
3886+
LOGICAL, INTENT(IN) :: UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS
38823887
INTEGER, INTENT(INOUT) :: RC,IC,LC
38833888
INTEGER :: BC_INDEX,OD_INDEX,B1_INDEX,B2_INDEX,BR_INDEX
38843889
TYPE(CFACE_TYPE), POINTER :: CFA
@@ -3915,7 +3920,7 @@ SUBROUTINE PACK_CFACE(NM,OS,CFA,SURF_INDEX,RC,IC,LC,UNPACK_IT,COUNT_ONLY)
39153920
! Assign and initialize logicals
39163921

39173922
IF (SF%INCLUDE_BOUNDARY_COORD_TYPE) CALL PACK_BOUNDARY_COORD(NM,IC,RC,OS,BC_INDEX,UNPACK_IT,COUNT_ONLY)
3918-
IF (SF%INCLUDE_BOUNDARY_ONE_D_TYPE) CALL PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY)
3923+
IF (SF%INCLUDE_BOUNDARY_ONE_D_TYPE) CALL PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS)
39193924
IF (SF%INCLUDE_BOUNDARY_PROP1_TYPE) CALL PACK_BOUNDARY_PROP1(NM,IC,RC,LC,OS,B1_INDEX,UNPACK_IT,COUNT_ONLY,SURF_INDEX)
39203925
IF (SF%INCLUDE_BOUNDARY_PROP2_TYPE) CALL PACK_BOUNDARY_PROP2(NM,IC,RC,OS,B2_INDEX,UNPACK_IT,COUNT_ONLY)
39213926
IF (SF%INCLUDE_BOUNDARY_RADIA_TYPE) CALL PACK_BOUNDARY_RADIA(NM,RC,OS,BR_INDEX,UNPACK_IT,COUNT_ONLY)
@@ -3976,14 +3981,14 @@ END SUBROUTINE PACK_BOUNDARY_COORD
39763981
!> \param OD_INDEX Index of the BOUNDARY_ONE_D array
39773982
!> \param UNPACK_IT Flag indicating whether the data is to be packed into the 1-D array or unpacked from it
39783983
!> \param COUNT_ONLY Flag signifying that only a variable count is to be done; no packing
3984+
!> \param CHECK_BOUNDS Logical indicating whether to check the array bounds of the items being unpacked
39793985

3980-
SUBROUTINE PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY)
3986+
SUBROUTINE PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS)
39813987

3982-
USE GLOBAL_CONSTANTS, ONLY: CHECK_BOUNDARY_ONE_D_ARRAYS
39833988
USE COMP_OPERATORS, ONLY: EQUATE
39843989
INTEGER, INTENT(IN) :: NM,OD_INDEX
39853990
INTEGER, INTENT(INOUT) :: IC,RC,LC
3986-
LOGICAL, INTENT(IN) :: UNPACK_IT,COUNT_ONLY
3991+
LOGICAL, INTENT(IN) :: UNPACK_IT,COUNT_ONLY,CHECK_BOUNDS
39873992
INTEGER :: I1,NN,NL
39883993
TYPE(BOUNDARY_ONE_D_TYPE), POINTER :: ONE_D
39893994
TYPE(STORAGE_TYPE), POINTER :: OS
@@ -4006,7 +4011,7 @@ SUBROUTINE PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY)
40064011

40074012
! Check if the array bounds are appropriate
40084013

4009-
IF (UNPACK_IT .AND. CHECK_BOUNDARY_ONE_D_ARRAYS) CALL REALLOCATE_BOUNDARY_ONE_D(ONE_D)
4014+
IF (UNPACK_IT .AND. CHECK_BOUNDS) CALL REALLOCATE_BOUNDARY_ONE_D(ONE_D)
40104015

40114016
DO NL=1,ONE_D%N_LAYERS
40124017
IC=IC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%INTEGERS(IC) , ONE_D%N_LAYER_CELLS(NL) , UNPACK_IT)

Source/init.f90

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1847,10 +1847,12 @@ SUBROUTINE REALLOCATE_ONE_D_ARRAYS(NM,WALL_CELL,THIN_WALL_CELL)
18471847

18481848
IF (PRESENT(WALL_CELL)) THEN
18491849
WC%N_REALS=0 ; WC%N_INTEGERS=0 ; WC%N_LOGICALS=0
1850-
CALL PACK_WALL(NM,OS_DUMMY,WC,WC%SURF_INDEX,WC%N_REALS,WC%N_INTEGERS,WC%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.)
1850+
CALL PACK_WALL(NM,OS_DUMMY,WC,WC%SURF_INDEX,WC%N_REALS,WC%N_INTEGERS,WC%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.,&
1851+
CHECK_BOUNDS=.FALSE.)
18511852
ELSEIF (PRESENT(THIN_WALL_CELL)) THEN
18521853
TW%N_INTEGERS=0 ; TW%N_REALS=0
1853-
CALL PACK_THIN_WALL(NM,OS_DUMMY,TW,TW%SURF_INDEX,TW%N_REALS,TW%N_INTEGERS,TW%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.)
1854+
CALL PACK_THIN_WALL(NM,OS_DUMMY,TW,TW%SURF_INDEX,TW%N_REALS,TW%N_INTEGERS,TW%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.,&
1855+
CHECK_BOUNDS=.FALSE.)
18541856
ENDIF
18551857

18561858
END SUBROUTINE REALLOCATE_ONE_D_ARRAYS

Source/main.f90

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2019,7 +2019,8 @@ SUBROUTINE INITIALIZE_MESH_EXCHANGE_1(NM)
20192019
LP => M%LAGRANGIAN_PARTICLE(1)
20202020
OS => LPC%PARTICLE_STORAGE
20212021
LPC%N_REALS=0 ; LPC%N_INTEGERS=0 ; LPC%N_LOGICALS=0
2022-
CALL PACK_PARTICLE(NM,OS,LP,ILC,LPC%N_REALS,LPC%N_INTEGERS,LPC%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.)
2022+
CALL PACK_PARTICLE(NM,OS,LP,ILC,LPC%N_REALS,LPC%N_INTEGERS,LPC%N_LOGICALS,&
2023+
UNPACK_IT=.FALSE.,COUNT_ONLY=.TRUE.,CHECK_BOUNDS=.FALSE.)
20232024
IF (.NOT.ALLOCATED(LPC%PARTICLE_STORAGE%REALS)) ALLOCATE(LPC%PARTICLE_STORAGE%REALS(LPC%N_REALS))
20242025
IF (.NOT.ALLOCATED(LPC%PARTICLE_STORAGE%INTEGERS)) ALLOCATE(LPC%PARTICLE_STORAGE%INTEGERS(LPC%N_INTEGERS))
20252026
IF (.NOT.ALLOCATED(LPC%PARTICLE_STORAGE%LOGICALS)) ALLOCATE(LPC%PARTICLE_STORAGE%LOGICALS(LPC%N_LOGICALS))
@@ -2257,9 +2258,7 @@ SUBROUTINE INITIALIZE_BACK_WALL_EXCHANGE
22572258

22582259
! Exchange WALL and THIN_WALL cells
22592260

2260-
CHECK_BOUNDARY_ONE_D_ARRAYS = .TRUE.
22612261
CALL MESH_EXCHANGE(6)
2262-
CHECK_BOUNDARY_ONE_D_ARRAYS = .FALSE.
22632262

22642263
! Initialize 3-D solid interpolation arrays
22652264

@@ -3125,7 +3124,7 @@ SUBROUTINE MESH_EXCHANGE(CODE)
31253124
DO I=1,OS%N_ITEMS
31263125
IW = OS%ITEM_INDEX(I)
31273126
WC => M%WALL(IW)
3128-
CALL PACK_WALL(NM,OS,WC,OS%SURF_INDEX(I),RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.)
3127+
CALL PACK_WALL(NM,OS,WC,OS%SURF_INDEX(I),RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.FALSE.)
31293128
ENDDO
31303129
ENDIF
31313130

@@ -3135,7 +3134,7 @@ SUBROUTINE MESH_EXCHANGE(CODE)
31353134
DO I=1,OS%N_ITEMS
31363135
IW = OS%ITEM_INDEX(I)
31373136
TW => M%THIN_WALL(IW)
3138-
CALL PACK_THIN_WALL(NM,OS,TW,OS%SURF_INDEX(I),RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.)
3137+
CALL PACK_THIN_WALL(NM,OS,TW,OS%SURF_INDEX(I),RC,IC,LC,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.FALSE.)
31393138
ENDDO
31403139
ENDIF
31413140

@@ -3444,7 +3443,8 @@ SUBROUTINE MESH_EXCHANGE(CODE)
34443443
DO I=1,OS%N_ITEMS
34453444
IW = OS%ITEM_INDEX(I)
34463445
WC => MESHES(NOM)%WALL(IW)
3447-
CALL PACK_WALL(NOM,OS,WC,OS%SURF_INDEX(I),RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.)
3446+
CALL PACK_WALL(NOM,OS,WC,OS%SURF_INDEX(I),RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.,&
3447+
CHECK_BOUNDS=INITIALIZATION_PHASE)
34483448
ENDDO
34493449
ENDIF RECEIVE_BACK_WALL
34503450

@@ -3454,7 +3454,8 @@ SUBROUTINE MESH_EXCHANGE(CODE)
34543454
DO I=1,OS%N_ITEMS
34553455
IW = OS%ITEM_INDEX(I)
34563456
TW => MESHES(NOM)%THIN_WALL(IW)
3457-
CALL PACK_THIN_WALL(NOM,OS,TW,OS%SURF_INDEX(I),RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.)
3457+
CALL PACK_THIN_WALL(NOM,OS,TW,OS%SURF_INDEX(I),RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.,&
3458+
CHECK_BOUNDS=INITIALIZATION_PHASE)
34583459
ENDDO
34593460
ENDIF RECEIVE_BACK_THIN_WALL
34603461

@@ -3483,7 +3484,7 @@ SUBROUTINE MESH_EXCHANGE(CODE)
34833484
IPC = OS%INTEGERS(IC+2)
34843485
CALL ALLOCATE_STORAGE(NM,LP_INDEX=IP,LPC_INDEX=IPC,SURF_INDEX=LAGRANGIAN_PARTICLE_CLASS(IPC)%SURF_INDEX)
34853486
LP => M%LAGRANGIAN_PARTICLE(IP)
3486-
CALL PACK_PARTICLE(NM,OS,LP,IPC,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.)
3487+
CALL PACK_PARTICLE(NM,OS,LP,IPC,RC,IC,LC,UNPACK_IT=.TRUE.,COUNT_ONLY=.FALSE.,CHECK_BOUNDS=.FALSE.)
34873488
LP%WALL_INDEX = 0 ! If the droplet was stuck to a wall, unstick it when it arrives in the new mesh
34883489
IF(LP%CFACE_INDEX/=EXTERNAL_CFACE) LP%CFACE_INDEX = 0
34893490
BC=>M%BOUNDARY_COORD(LP%BC_INDEX)

Source/part.f90

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4746,7 +4746,8 @@ SUBROUTINE ADD_TO_PARTICLE_SEND_BUFFER
47464746

47474747
OS%N_ITEMS = OS%N_ITEMS + 1
47484748

4749-
CALL PACK_PARTICLE(NM,OS,LP,LP%CLASS_INDEX,OS%N_REALS,OS%N_INTEGERS,OS%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.)
4749+
CALL PACK_PARTICLE(NM,OS,LP,LP%CLASS_INDEX,OS%N_REALS,OS%N_INTEGERS,OS%N_LOGICALS,UNPACK_IT=.FALSE.,COUNT_ONLY=.FALSE.,&
4750+
CHECK_BOUNDS=.FALSE.)
47504751

47514752
ENDIF
47524753

0 commit comments

Comments
 (0)