Skip to content

Commit aa2ac49

Browse files
authored
Merge pull request #14831 from mcgratta/master
FDS Source: Fix a few bugs in HT3D
2 parents d14e975 + 1cc47c2 commit aa2ac49

File tree

3 files changed

+25
-27
lines changed

3 files changed

+25
-27
lines changed

Source/init.f90

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,9 +1587,8 @@ SUBROUTINE REALLOCATE_ONE_D_ARRAYS(NM,WALL_CELL,THIN_WALL_CELL)
15871587
INTEGER, ALLOCATABLE, DIMENSION(:) :: LAYER_INDEX
15881588
INTEGER, ALLOCATABLE, DIMENSION(:) :: N_LAYER_CELLS_OLD
15891589
REAL(EB) :: MIN_DENSITY
1590-
REAL(EB), DIMENSION(MAX_LAYERS) :: LAYER_DENSITY
15911590
TYPE(MATERIAL_TYPE), POINTER :: ML
1592-
REAL(EB), ALLOCATABLE, DIMENSION(:) :: X_S_OLD
1591+
REAL(EB), ALLOCATABLE, DIMENSION(:) :: X_S_OLD,LAYER_DENSITY
15931592
LOGICAL, ALLOCATABLE, DIMENSION(:) :: REMESH_LAYER
15941593
TYPE(WALL_TYPE), POINTER :: WC
15951594
TYPE(THIN_WALL_TYPE), POINTER :: TW
@@ -1648,7 +1647,7 @@ SUBROUTINE REALLOCATE_ONE_D_ARRAYS(NM,WALL_CELL,THIN_WALL_CELL)
16481647

16491648
ONE_D%N_CELLS_INI = 0
16501649
ONE_D%N_CELLS_MAX = 0
1651-
LAYER_DENSITY = 0._EB
1650+
ALLOCATE(LAYER_DENSITY(ONE_D%N_LAYERS)) ; LAYER_DENSITY = 0._EB
16521651

16531652
LAYER_LOOP: DO NL=1,ONE_D%N_LAYERS
16541653

@@ -1754,6 +1753,7 @@ SUBROUTINE REALLOCATE_ONE_D_ARRAYS(NM,WALL_CELL,THIN_WALL_CELL)
17541753
ENDDO MATERIAL_LOOP3
17551754
ENDDO POINT_LOOP3
17561755

1756+
DEALLOCATE(LAYER_DENSITY)
17571757
DEALLOCATE(LAYER_INDEX)
17581758

17591759
! Reset emissivity at the surface
@@ -3828,13 +3828,13 @@ SUBROUTINE FIND_WALL_BACK_INDEX(NM,IW)
38283828
INTEGER :: II,JJ,KK,IC,ICG,IOR,NOM,ITER,OBST_INDEX,OBST_INDEX_PREVIOUS,NN,NNN,NL,N_LAYERS_OBST,&
38293829
N_MATL_OBST,N_LAYERS,N_MATLS,IIF,JJF,KKF
38303830
INTEGER, DIMENSION(MAX_MATERIALS) :: MATL_INDEX_OBST,MATL_INDEX
3831-
REAL(EB), DIMENSION(MAX_LAYERS,MAX_MATERIALS) :: MATL_MASS_FRACTION_OBST,MATL_MASS_FRACTION
3832-
REAL(EB), DIMENSION(0:MAX_LAYERS) :: LAYER_THICKNESS,MIN_LAYER_THICKNESS
3833-
REAL(EB), DIMENSION(MAX_LAYERS) :: LAYER_THICKNESS_OBST,HEAT_SOURCE,HEAT_SOURCE_OBST,&
3831+
REAL(EB), DIMENSION(MAX_LAYERS_HT3D,MAX_MATERIALS) :: MATL_MASS_FRACTION_OBST,MATL_MASS_FRACTION
3832+
REAL(EB), DIMENSION(MAX_LAYERS_HT3D) :: LAYER_THICKNESS,MIN_LAYER_THICKNESS,&
3833+
LAYER_THICKNESS_OBST,HEAT_SOURCE,HEAT_SOURCE_OBST,&
38343834
STRETCH_FACTOR,STRETCH_FACTOR_OBST,CELL_SIZE,CELL_SIZE_OBST,&
38353835
CELL_SIZE_FACTOR,CELL_SIZE_FACTOR_OBST
3836-
INTEGER, DIMENSION(MAX_LAYERS) :: N_LAYER_CELLS_MAX,N_LAYER_CELLS_MAX_OBST,RAMP_IHS_INDEX,RAMP_IHS_INDEX_OBST
3837-
LOGICAL, DIMENSION(MAX_LAYERS) :: HT3D_LAYER
3836+
INTEGER, DIMENSION(MAX_LAYERS_HT3D) :: N_LAYER_CELLS_MAX,N_LAYER_CELLS_MAX_OBST,RAMP_IHS_INDEX,RAMP_IHS_INDEX_OBST
3837+
LOGICAL, DIMENSION(MAX_LAYERS_HT3D) :: HT3D_LAYER
38383838
REAL(EB) :: XXC,YYC,ZZC,THICKNESS,OLD_THICKNESS,FRONT_LINING_THICKNESS,BACK_LINING_THICKNESS,LAYER_THICKNESS_OBST_TOTAL
38393839
CHARACTER(MESSAGE_LENGTH) :: MESSAGE
38403840
LOGICAL :: THIN_OBSTRUCTION
@@ -3994,10 +3994,7 @@ SUBROUTINE FIND_WALL_BACK_INDEX(NM,IW)
39943994

39953995
IF (OBST_INDEX/=OBST_INDEX_PREVIOUS .AND. OBST_INDEX_PREVIOUS>0 .AND. OBST_INDEX>0) THEN
39963996
OB_PREV => OM_PREV%OBSTRUCTION(OBST_INDEX_PREVIOUS)
3997-
IF ( (ANY(OB%MATL_MASS_FRACTION(:)/=OB_PREV%MATL_MASS_FRACTION(:),DIM=1)) .OR. &
3998-
(ANY(OB%MATL_INDEX(:) /=OB_PREV%MATL_INDEX(:) ,DIM=1)) .OR. &
3999-
(OB%HEAT_SOURCE/=OB_PREV%HEAT_SOURCE) .OR. &
4000-
(OB%RAMP_IHS_INDEX/=OB_PREV%RAMP_IHS_INDEX) ) THEN
3997+
IF (OB%ORDINAL/=OB_PREV%ORDINAL) THEN
40013998
N_LAYERS_OBST = N_LAYERS_OBST + 1
40023999
LAYER_THICKNESS_OBST(N_LAYERS_OBST) = 0._EB
40034000
HEAT_SOURCE_OBST(N_LAYERS_OBST) = OB%HEAT_SOURCE
@@ -4238,7 +4235,7 @@ SUBROUTINE FIND_THIN_WALL_BACK_INDEX(NM,ITW)
42384235
INTEGER, INTENT(IN) :: NM,ITW
42394236
INTEGER :: II,JJ,KK,IC,IOR,IEC,ITW2,NOM,NN,NNN,NL,N_MATLS,IIGM,IIGP,JJGM,JJGP,KKGM,KKGP,ICM,ICP
42404237
INTEGER, DIMENSION(MAX_MATERIALS) :: MATL_INDEX
4241-
REAL(EB), DIMENSION(MAX_LAYERS,MAX_MATERIALS) :: MATL_MASS_FRACTION
4238+
REAL(EB), DIMENSION(MAX_LAYERS_HT3D,MAX_MATERIALS) :: MATL_MASS_FRACTION
42424239
REAL(EB) :: XXC,YYC,ZZC
42434240
TYPE (MESH_TYPE), POINTER :: M
42444241
TYPE (THIN_WALL_TYPE), POINTER :: TW

Source/prec.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ MODULE PRECISION_PARAMETERS
1010
INTEGER, PARAMETER :: MAX_LPC=20 !< Maximum number of declared particle classes
1111
INTEGER, PARAMETER :: MAX_SPECIES=20 !< Maximum number of declared species
1212
INTEGER, PARAMETER :: MAX_LAYERS=20 !< Maximum number of solid material layers
13+
INTEGER, PARAMETER :: MAX_LAYERS_HT3D=500 !< Maximum number of solid material layers for an HT3D solid
1314
INTEGER, PARAMETER :: MAX_MATERIALS=20 !< Maximum number of solid material components
1415
INTEGER, PARAMETER :: MAX_MATERIALS_TOTAL=400 !< Dimension of material work array
1516
INTEGER, PARAMETER :: MAX_CONE_CURVES=10 !< Maximum number of cone calorimeter curves

Source/wall.f90

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1593,7 +1593,7 @@ SUBROUTINE DEPOSIT_PARTICLE_MASS(LP,LPC)
15931593

15941594
IF (SF%PYROLYSIS_MODEL==PYROLYSIS_PREDICTED) THEN
15951595
ONE_D => BOUNDARY_ONE_D(LP%OD_INDEX)
1596-
LP%RADIUS = SUM(ONE_D%LAYER_THICKNESS(1:SF%N_LAYERS))
1596+
LP%RADIUS = SUM(ONE_D%LAYER_THICKNESS(1:ONE_D%N_LAYERS))
15971597
ENDIF
15981598

15991599
END SUBROUTINE DEPOSIT_PARTICLE_MASS
@@ -1838,18 +1838,18 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
18381838
REAL(EB), DIMENSION(MAX_LPC) :: Q_DOT_PART_S,M_DOT_PART_S
18391839
REAL(EB), DIMENSION(NWP_MAX) :: TMP_S,RHO_H_S
18401840
REAL(EB), ALLOCATABLE, DIMENSION(:,:) :: RHO_DOT,INT_WGT
1841-
REAL(EB), DIMENSION(MAX_LAYERS) :: DX_MIN
1842-
REAL(EB), DIMENSION(MAX_LAYERS,MAX_MATERIALS) :: RHO_ADJUSTED
1841+
REAL(EB), DIMENSION(MAX_LAYERS_HT3D) :: DX_MIN
1842+
REAL(EB), DIMENSION(MAX_LAYERS_HT3D,MAX_MATERIALS) :: RHO_ADJUSTED
18431843
REAL(EB), DIMENSION(NWP_MAX) :: AAS,BBS,CCS,DDS,DDT,Q_S,Q_IR,Q_ADD,TWO_DX_KAPPA_S,DX_S,MF_FRAC,REGRID_FACTOR
18441844
REAL(EB), DIMENSION(0:NWP_MAX+1) :: RHO_S,DELTA_TMP,RDX_S
18451845
REAL(EB), DIMENSION(0:NWP_MAX) :: X_S_NEW,RDXN_S,R_S,R_S_NEW,DX_WGT_S
18461846
INTEGER, DIMENSION(0:NWP_MAX+1) :: LAYER_INDEX
1847-
INTEGER, DIMENSION(MAX_LAYERS) :: N_LAYER_CELLS_NEW
1847+
INTEGER, DIMENSION(MAX_LAYERS_HT3D) :: N_LAYER_CELLS_NEW
18481848
INTEGER :: NWP_NEW,I_GRAD,IZERO,SURF_INDEX,BACKING,NWP,I,NL,N,OBST_INDEX,&
18491849
N_CELLS,ITMP,ITER,BACK_MESH,BACK_INDEX,BACK_WALL_INDEX
18501850
CHARACTER(MESSAGE_LENGTH) :: MESSAGE
1851-
LOGICAL :: ISOLATED_THIN_WALL,ISOLATED_THIN_WALL_BACK,REMESH_LAYER(MAX_LAYERS),REMESH_CHECK,DIRICHLET_BACK,&
1852-
CELL_ZERO(MAX_LAYERS),TMP_CHECK(MAX_LAYERS)
1851+
LOGICAL :: ISOLATED_THIN_WALL,ISOLATED_THIN_WALL_BACK,REMESH_LAYER(MAX_LAYERS_HT3D),REMESH_CHECK,DIRICHLET_BACK,&
1852+
CELL_ZERO(MAX_LAYERS_HT3D),TMP_CHECK(MAX_LAYERS_HT3D)
18531853
TYPE(WALL_TYPE), POINTER :: WC,WC_BACK
18541854
TYPE(THIN_WALL_TYPE), POINTER :: TW,TW_BACK
18551855
TYPE(CFACE_TYPE), POINTER :: CFA,CFA_BACK
@@ -2014,7 +2014,7 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
20142014

20152015
DO NL=1,ONE_D%N_LAYERS
20162016
DO N=1,ONE_D%N_MATL
2017-
RHO_ADJUSTED(NL,N) = MATERIAL(ONE_D%MATL_INDEX(N))%RHO_S*SF%DENSITY_ADJUST_FACTOR(NL,N)
2017+
RHO_ADJUSTED(NL,N) = MATERIAL(ONE_D%MATL_INDEX(N))%RHO_S*SF%DENSITY_ADJUST_FACTOR(MIN(MAX_LAYERS,NL),N)
20182018
ENDDO
20192019
ENDDO
20202020

@@ -2071,7 +2071,7 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
20712071
ONE_D%K_S(I) = ONE_D%K_S(I) + ONE_D%MATL_COMP(N)%RHO(I)*ML%K_S(ITMP)/RHO_ADJUSTED(LAYER_INDEX(I),N)
20722072
ONE_D%RHO_C_S(I) = ONE_D%RHO_C_S(I) + ONE_D%MATL_COMP(N)%RHO(I)*ML%C_S(ITMP)
20732073
ENDDO MATERIAL_LOOP0
2074-
IF (SF%PACKING_RATIO(LAYER_INDEX(I))>0._EB) ONE_D%K_S(I) = ONE_D%K_S(I)*SF%PACKING_RATIO(LAYER_INDEX(I))
2074+
IF (SF%BOUNDARY_FUEL_MODEL) ONE_D%K_S(I) = ONE_D%K_S(I)*SF%PACKING_RATIO(LAYER_INDEX(I))
20752075

20762076
IF (VOLSUM > 0._EB) THEN
20772077
ONE_D%K_S(I) = ONE_D%K_S(I)/VOLSUM
@@ -2121,7 +2121,7 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
21212121
ELSEIF (PRESENT(CFACE_INDEX)) THEN
21222122
HTCF = B1%HEAT_TRANS_COEF
21232123
ELSEIF (PRESENT(PARTICLE_INDEX)) THEN
2124-
RADIUS = SF%INNER_RADIUS + SUM(ONE_D%LAYER_THICKNESS(1:SF%N_LAYERS))
2124+
RADIUS = SF%INNER_RADIUS + SUM(ONE_D%LAYER_THICKNESS(1:ONE_D%N_LAYERS))
21252125
SELECT CASE(SF%GEOMETRY)
21262126
CASE (SURF_CARTESIAN) ; HTC_LIMIT = 0.5_EB*RADIUS*ONE_D%RHO_C_S(1)/( DT_BC_SUB)
21272127
CASE (SURF_CYLINDRICAL,SURF_INNER_CYLINDRICAL) ; HTC_LIMIT = 0.5_EB*RADIUS*ONE_D%RHO_C_S(1)/(2._EB*DT_BC_SUB)
@@ -2158,7 +2158,7 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
21582158
Q_CON_B = HTCB*DTMP
21592159
Q_RAD_IN_B = EMISSIVITY_BACK*SIGMA*TMP_GAS_BACK**4
21602160
Q_LIQUID_B = 0._EB
2161-
LAYER_DIVIDE = REAL(SF%N_LAYERS+1)
2161+
LAYER_DIVIDE = REAL(ONE_D%N_LAYERS+1)
21622162
MF_FRAC = 1._EB
21632163

21642164
CASE(INSULATED) ! No heat transfer out the back
@@ -2774,7 +2774,7 @@ SUBROUTINE SOLID_HEAT_TRANSFER(NM,T,DT_BC,PARTICLE_INDEX,WALL_INDEX,CFACE_INDEX,
27742774
ONE_D%RHO_C_S(I) = ONE_D%RHO_C_S(I) + ONE_D%MATL_COMP(N)%RHO(I)*ML%C_S(ITMP)
27752775
RHO_S(I) = RHO_S(I) + ONE_D%MATL_COMP(N)%RHO(I)
27762776
ENDDO MATERIAL_LOOP3
2777-
IF (SF%PACKING_RATIO(LAYER_INDEX(I))>0._EB) ONE_D%K_S(I) = ONE_D%K_S(I)*SF%PACKING_RATIO(LAYER_INDEX(I))
2777+
IF (SF%BOUNDARY_FUEL_MODEL) ONE_D%K_S(I) = ONE_D%K_S(I)*SF%PACKING_RATIO(LAYER_INDEX(I))
27782778
IF (VOLSUM > 0._EB) ONE_D%K_S(I) = ONE_D%K_S(I)/VOLSUM
27792779
IF (ONE_D%K_S(I)<=TWO_EPSILON_EB) ONE_D%K_S(I) = 10000._EB
27802780
IF (ONE_D%RHO_C_S(I)<=TWO_EPSILON_EB) ONE_D%RHO_C_S(I) = 0.001_EB
@@ -3387,7 +3387,7 @@ SUBROUTINE PYROLYSIS(N_MATS,MATL_INDEX,SURF_INDEX,IIG,JJG,KKG,TMP_S,TMP_F,Y_O2_F
33873387
MFLUX = MIN(MFLUX_MAX,MFLUX + RHO_DOT_EXTRA*DX_S(SOLID_CELL_INDEX))
33883388
RHO_DOT_REAC(J) =MFLUX/DX_S(SOLID_CELL_INDEX) ! kg/m3/s
33893389
CASE(SURF_SPHERICAL)
3390-
NWP = SUM(ONE_D%N_LAYER_CELLS(1:SF%N_LAYERS))
3390+
NWP = SUM(ONE_D%N_LAYER_CELLS(1:ONE_D%N_LAYERS))
33913391
R_S_0 = SF%INNER_RADIUS + ONE_D%X(NWP) - ONE_D%X(0)
33923392
R_S_1 = SF%INNER_RADIUS + ONE_D%X(NWP) - ONE_D%X(1)
33933393
DR = (R_S_0**3-R_S_1**3)/(3._EB*R_S_0**2)
@@ -3445,7 +3445,7 @@ SUBROUTINE PYROLYSIS(N_MATS,MATL_INDEX,SURF_INDEX,IIG,JJG,KKG,TMP_S,TMP_F,Y_O2_F
34453445
IF (SF%BOUNDARY_FUEL_MODEL) THEN
34463446
LENGTH_SCALE = 1._EB/(SF%SURFACE_VOLUME_RATIO(LAYER_INDEX)*SF%PACKING_RATIO(LAYER_INDEX))
34473447
ELSE
3448-
LENGTH_SCALE = SF%INNER_RADIUS + SUM(ONE_D%LAYER_THICKNESS(1:SF%N_LAYERS))
3448+
LENGTH_SCALE = SF%INNER_RADIUS + SUM(ONE_D%LAYER_THICKNESS(1:ONE_D%N_LAYERS))
34493449
SELECT CASE(SF%GEOMETRY)
34503450
CASE(SURF_SPHERICAL)
34513451
LENGTH_SCALE = LENGTH_SCALE/3._EB
@@ -3808,7 +3808,7 @@ SUBROUTINE HT3D_TEMPERATURE_EXCHANGE(NM)
38083808
BC => M%BOUNDARY_COORD(TW%BC_INDEX)
38093809
IF (ABS(BC%IOR)==M%HT_3D_SWEEP_DIRECTION) CYCLE THIN_WALL_LOOP
38103810
ONE_D => M%BOUNDARY_ONE_D(TW%OD_INDEX)
3811-
NWP = SUM(ONE_D%N_LAYER_CELLS(1:SF%N_LAYERS))
3811+
NWP = SUM(ONE_D%N_LAYER_CELLS(1:ONE_D%N_LAYERS))
38123812
THR_D => M%BOUNDARY_THR_D(TW%TD_INDEX)
38133813
IF (.NOT.ALLOCATED(THR_D%NODE)) CYCLE THIN_WALL_LOOP
38143814

0 commit comments

Comments
 (0)