Skip to content

Commit 8d9a219

Browse files
authored
Merge pull request #14939 from drjfloyd/master
FDS Source: change wall node and layer removal logic (Issue #14902)
2 parents 6f9ceb0 + 1f6e046 commit 8d9a219

File tree

5 files changed

+235
-184
lines changed

5 files changed

+235
-184
lines changed

Source/func.f90

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1840,7 +1840,7 @@ REAL(EB) FUNCTION GET_PARTICLE_ENTHALPY(I_LPC,TMP_S)
18401840
USE MATH_FUNCTIONS, ONLY: INTERPOLATE1D_UNIFORM
18411841
REAL(EB), INTENT(IN) :: TMP_S
18421842
REAL(EB) :: RHO,RHO_H,VOL,DTMP,H_S,THICKNESS
1843-
INTEGER :: I,N,ITMP,I_GRAD
1843+
INTEGER :: I,N,ITMP
18441844
INTEGER, INTENT(IN) :: I_LPC
18451845
TYPE(LAGRANGIAN_PARTICLE_CLASS_TYPE), POINTER :: LPC
18461846
TYPE(SURFACE_TYPE), POINTER :: SF
@@ -1852,21 +1852,16 @@ REAL(EB) FUNCTION GET_PARTICLE_ENTHALPY(I_LPC,TMP_S)
18521852
CALL INTERPOLATE1D_UNIFORM(LBOUND(SPECIES(LPC%Y_INDEX)%H_L,1),SPECIES(LPC%Y_INDEX)%H_L,TMP_S,GET_PARTICLE_ENTHALPY)
18531853
ELSE
18541854
SF=>SURFACE(LPC%SURF_INDEX)
1855-
SELECT CASE(SF%GEOMETRY)
1856-
CASE(SURF_CARTESIAN) ; I_GRAD = 1
1857-
CASE(SURF_CYLINDRICAL,SURF_INNER_CYLINDRICAL) ; I_GRAD = 2
1858-
CASE(SURF_SPHERICAL) ; I_GRAD = 3
1859-
END SELECT
18601855
RHO_H = 0._EB
18611856
RHO = 0._EB
18621857
ITMP = MIN(I_MAX_TEMP-1,INT(TMP_S))
18631858
DTMP = TMP_S-REAL(ITMP,EB)
18641859
THICKNESS = SUM(SF%LAYER_THICKNESS)
18651860
DO I=1,SUM(SF%N_LAYER_CELLS)
18661861
IF (SF%GEOMETRY==SURF_INNER_CYLINDRICAL) THEN
1867-
VOL = (SF%INNER_RADIUS+SF%X_S(I))**I_GRAD - (SF%INNER_RADIUS+SF%X_S(I-1))**I_GRAD
1862+
VOL = (SF%INNER_RADIUS+SF%X_S(I))**SF%I_GRAD - (SF%INNER_RADIUS+SF%X_S(I-1))**SF%I_GRAD
18681863
ELSE
1869-
VOL = (THICKNESS+SF%INNER_RADIUS-SF%X_S(I-1))**I_GRAD - (THICKNESS+SF%INNER_RADIUS-SF%X_S(I))**I_GRAD
1864+
VOL = (THICKNESS+SF%INNER_RADIUS-SF%X_S(I-1))**SF%I_GRAD - (THICKNESS+SF%INNER_RADIUS-SF%X_S(I))**SF%I_GRAD
18701865
ENDIF
18711866
MATL_REMESH: DO N=1,SF%N_MATL
18721867
IF (SF%RHO_0(I,N)<=TWO_EPSILON_EB) CYCLE MATL_REMESH
@@ -2112,7 +2107,7 @@ REAL(EB) FUNCTION SURFACE_DENSITY(MODE,SF,ONE_D,MATL_INDEX)
21122107

21132108
INTEGER, INTENT(IN) :: MODE
21142109
INTEGER, INTENT(IN), OPTIONAL :: MATL_INDEX
2115-
INTEGER :: I_GRAD,NWP,II2,N,ITMP
2110+
INTEGER :: NWP,II2,N,ITMP
21162111
REAL(EB) :: WGT,R_S(0:NWP_MAX),EPUM,DTMP
21172112
TYPE(BOUNDARY_ONE_D_TYPE), INTENT(IN), POINTER :: ONE_D
21182113
TYPE(SURFACE_TYPE), INTENT(IN), POINTER :: SF
@@ -2124,12 +2119,6 @@ REAL(EB) FUNCTION SURFACE_DENSITY(MODE,SF,ONE_D,MATL_INDEX)
21242119

21252120
ELSE THERMALLY_THICK_IF
21262121

2127-
SELECT CASE(SF%GEOMETRY)
2128-
CASE(SURF_CARTESIAN) ; I_GRAD = 1
2129-
CASE(SURF_CYLINDRICAL,SURF_INNER_CYLINDRICAL) ; I_GRAD = 2
2130-
CASE(SURF_SPHERICAL) ; I_GRAD = 3
2131-
END SELECT
2132-
21332122
NWP = SUM(ONE_D%N_LAYER_CELLS)
21342123
IF (SF%GEOMETRY==SURF_INNER_CYLINDRICAL) THEN
21352124
R_S(0:NWP) = SF%INNER_RADIUS + ONE_D%X(0:NWP)
@@ -2140,8 +2129,9 @@ REAL(EB) FUNCTION SURFACE_DENSITY(MODE,SF,ONE_D,MATL_INDEX)
21402129
SURFACE_DENSITY = 0._EB
21412130
NUMBER_WALL_POINTS_LOOP: DO II2=1,NWP
21422131
AREA_VOLUME_SELECT: SELECT CASE(MODE)
2143-
CASE(0,2); WGT = ABS(R_S(II2-1)**I_GRAD-R_S(II2)**I_GRAD)/(REAL(I_GRAD,EB)*(SF%INNER_RADIUS+SF%THICKNESS)**(I_GRAD-1))
2144-
CASE(1,3); WGT = ABS(R_S(II2-1)**I_GRAD-R_S(II2)**I_GRAD)/(SF%INNER_RADIUS+SF%THICKNESS)**I_GRAD
2132+
CASE(0,2); WGT = ABS(R_S(II2-1)**SF%I_GRAD-R_S(II2)**SF%I_GRAD)/ &
2133+
(REAL(SF%I_GRAD,EB)*(SF%INNER_RADIUS+SF%THICKNESS)**(SF%I_GRAD-1))
2134+
CASE(1,3); WGT = ABS(R_S(II2-1)**SF%I_GRAD-R_S(II2)**SF%I_GRAD)/(SF%INNER_RADIUS+SF%THICKNESS)**SF%I_GRAD
21452135
END SELECT AREA_VOLUME_SELECT
21462136

21472137
EPUM = 1._EB ! energy per unit mass
@@ -4063,6 +4053,7 @@ SUBROUTINE PACK_BOUNDARY_ONE_D(NM,IC,RC,LC,OS,OD_INDEX,UNPACK_IT,COUNT_ONLY,CHEC
40634053
I1=RC+1 ; RC=I1+ONE_D%N_LAYERS-1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(I1:RC),ONE_D%LAYER_THICKNESS(1:RC-I1+1) , UNPACK_IT)
40644054
I1=RC+1 ; RC=I1+ONE_D%N_LAYERS-1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(I1:RC),ONE_D%LAYER_THICKNESS_OLD(1:RC-I1+1), UNPACK_IT)
40654055
I1=RC+1 ; RC=I1+ONE_D%N_LAYERS-1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(I1:RC),ONE_D%MIN_LAYER_THICKNESS(1:RC-I1+1), UNPACK_IT)
4056+
I1=RC+1 ; RC=I1+ONE_D%N_LAYERS-1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(I1:RC),ONE_D%MIN_LAYER_MASS(1:RC-I1+1), UNPACK_IT)
40664057
I1=RC+1 ; RC=I1+ONE_D%N_LAYERS-1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(I1:RC),ONE_D%MIN_DIFFUSIVITY(1:RC-I1+1) , UNPACK_IT)
40674058
I1=RC+1 ; RC=I1+ONE_D%N_LAYERS-1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(I1:RC),ONE_D%DDSUM(1:RC-I1+1) , UNPACK_IT)
40684059
I1=RC+1 ; RC=I1+ONE_D%N_LAYERS-1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(I1:RC),ONE_D%SMALLEST_CELL_SIZE(1:RC-I1+1) , UNPACK_IT)
@@ -4106,6 +4097,7 @@ SUBROUTINE REALLOCATE_BOUNDARY_ONE_D(ONE_D)
41064097
ALLOCATE(ONE_D%LAYER_THICKNESS_OLD(ONE_D%N_LAYERS))
41074098
IF (ALLOCATED(ONE_D%MIN_LAYER_THICKNESS)) DEALLOCATE(ONE_D%MIN_LAYER_THICKNESS)
41084099
ALLOCATE(ONE_D%MIN_LAYER_THICKNESS(ONE_D%N_LAYERS))
4100+
IF (ALLOCATED(ONE_D%MIN_LAYER_MASS)) DEALLOCATE(ONE_D%MIN_LAYER_MASS) ; ALLOCATE(ONE_D%MIN_LAYER_MASS(ONE_D%N_LAYERS))
41094101
IF (ALLOCATED(ONE_D%HT3D_LAYER)) DEALLOCATE(ONE_D%HT3D_LAYER) ; ALLOCATE(ONE_D%HT3D_LAYER(ONE_D%N_LAYERS))
41104102
IF (ALLOCATED(ONE_D%MIN_DIFFUSIVITY)) DEALLOCATE(ONE_D%MIN_DIFFUSIVITY) ; ALLOCATE(ONE_D%MIN_DIFFUSIVITY(ONE_D%N_LAYERS))
41114103
IF (ALLOCATED(ONE_D%RHO_C_S)) DEALLOCATE(ONE_D%RHO_C_S) ; ALLOCATE(ONE_D%RHO_C_S(ONE_D%N_CELLS_MAX))
@@ -4132,12 +4124,12 @@ END SUBROUTINE REALLOCATE_BOUNDARY_ONE_D
41324124

41334125
SUBROUTINE INITIALIZE_BOUNDARY_ONE_D(NM,OD_INDEX,SURF_INDEX)
41344126

4135-
USE GLOBAL_CONSTANTS, ONLY: RADIATION
4127+
USE GLOBAL_CONSTANTS, ONLY: RADIATION,NWP_MAX
41364128
INTEGER, INTENT(IN) :: NM,OD_INDEX,SURF_INDEX
41374129
TYPE(BOUNDARY_ONE_D_TYPE), POINTER :: ONE_D
41384130
TYPE(SURFACE_TYPE), POINTER :: SF
41394131
INTEGER :: NN,I,II
4140-
REAL(EB) :: RAMP_POSITION,TF,TB
4132+
REAL(EB) :: RAMP_POSITION,TF,TB,R(0:NWP_MAX)
41414133

41424134
ONE_D => MESHES(NM)%BOUNDARY_ONE_D(OD_INDEX)
41434135
SF => SURFACE(SURF_INDEX)
@@ -4153,6 +4145,12 @@ SUBROUTINE INITIALIZE_BOUNDARY_ONE_D(NM,OD_INDEX,SURF_INDEX)
41534145
DO I=1,MIN(ONE_D%N_CELLS_MAX,ONE_D%N_CELLS_INI)
41544146
ONE_D%DX_OLD(I) = ONE_D%X(I)-ONE_D%X(I-1)
41554147
ENDDO
4148+
R(0:ONE_D%N_CELLS_INI) = SF%THICKNESS + SF%INNER_RADIUS - ONE_D%X(0:ONE_D%N_CELLS_INI)
4149+
I = 0
4150+
DO NN = 1,ONE_D%N_LAYERS
4151+
ONE_D%MIN_LAYER_MASS(NN) = SF%MIN_LAYER_MASS(NN)*(R(I)**SF%I_GRAD - R(I+ONE_D%N_LAYER_CELLS(NN))**SF%I_GRAD)
4152+
I = I + ONE_D%N_LAYER_CELLS(NN)
4153+
ENDDO
41564154
IF (ALLOCATED(ONE_D%LAYER_THICKNESS_OLD)) ONE_D%LAYER_THICKNESS_OLD(1:ONE_D%N_LAYERS) = SF%LAYER_THICKNESS(1:SF%N_LAYERS)
41574155
IF (SF%RAMP_T_I_INDEX > 0) THEN
41584156
!NOTE: Replicating EVALUATE_RAMP since MODULE MATH_FUNCTIONS uses the MODULE which contains this routine
@@ -4310,6 +4308,7 @@ SUBROUTINE PACK_BOUNDARY_PROP1(NM,IC,RC,LC,OS,B1_INDEX,UNPACK_IT,COUNT_ONLY,SURF
43104308
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B1%RHO_G,UNPACK_IT)
43114309
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B1%RDN,UNPACK_IT)
43124310
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B1%K_G,UNPACK_IT)
4311+
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B1%M_DOT_LAYER_PP,UNPACK_IT)
43134312
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B1%Q_DOT_G_PP,UNPACK_IT)
43144313
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B1%Q_DOT_O2_PP,UNPACK_IT)
43154314
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B1%Q_CONDENSE,UNPACK_IT)
@@ -5254,24 +5253,14 @@ END SUBROUTINE GET_WALL_NODE_WEIGHTS
52545253
!> \param X_S_NEW Array of interior cell edge positions after shrinkage or swelling (m)
52555254
!> \param INT_WGT Array of weighting factors for new arrangement of interior cells
52565255

5257-
SUBROUTINE GET_INTERPOLATION_WEIGHTS(GEOMETRY,NWP,NWP_NEW,INNER_RADIUS,X_S,X_S_NEW,INT_WGT)
5256+
SUBROUTINE GET_INTERPOLATION_WEIGHTS(GEOMETRY,I_GRAD,NWP,NWP_NEW,INNER_RADIUS,X_S,X_S_NEW,INT_WGT)
52585257

5259-
INTEGER, INTENT(IN) :: GEOMETRY,NWP,NWP_NEW
5258+
INTEGER, INTENT(IN) :: GEOMETRY,I_GRAD,NWP,NWP_NEW
52605259
REAL(EB), INTENT(IN) :: X_S(0:NWP), X_S_NEW(0:NWP_NEW), INNER_RADIUS
52615260
REAL(EB), INTENT(OUT) :: INT_WGT(NWP_NEW,NWP)
52625261

52635262
REAL(EB) XUP,XLOW,XUP_NEW,XLOW_NEW,VOL_NEW,VOL,THICKNESS
5264-
INTEGER I_NEW, I_OLD, I_GRAD
5265-
5266-
5267-
SELECT CASE(GEOMETRY)
5268-
CASE(SURF_CARTESIAN)
5269-
I_GRAD = 1
5270-
CASE(SURF_CYLINDRICAL,SURF_INNER_CYLINDRICAL)
5271-
I_GRAD = 2
5272-
CASE(SURF_SPHERICAL)
5273-
I_GRAD = 3
5274-
END SELECT
5263+
INTEGER I_NEW, I_OLD
52755264

52765265
I_OLD = 1
52775266
INT_WGT = 0._EB

Source/init.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4188,6 +4188,7 @@ SUBROUTINE FIND_WALL_BACK_INDEX(NM,IW)
41884188
DEALLOCATE(ONE_D%MATL_INDEX) ; ALLOCATE(ONE_D%MATL_INDEX(ONE_D%N_MATL))
41894189
DEALLOCATE(ONE_D%LAYER_THICKNESS) ; ALLOCATE(ONE_D%LAYER_THICKNESS(ONE_D%N_LAYERS))
41904190
DEALLOCATE(ONE_D%MIN_LAYER_THICKNESS) ; ALLOCATE(ONE_D%MIN_LAYER_THICKNESS(ONE_D%N_LAYERS))
4191+
DEALLOCATE(ONE_D%MIN_LAYER_MASS) ; ALLOCATE(ONE_D%MIN_LAYER_MASS(ONE_D%N_LAYERS))
41914192
DEALLOCATE(ONE_D%HT3D_LAYER) ; ALLOCATE(ONE_D%HT3D_LAYER(ONE_D%N_LAYERS))
41924193
ONE_D%LAYER_THICKNESS(1:ONE_D%N_LAYERS) = LAYER_THICKNESS(1:ONE_D%N_LAYERS)
41934194
ONE_D%MIN_LAYER_THICKNESS(1:ONE_D%N_LAYERS) = MIN_LAYER_THICKNESS(1:ONE_D%N_LAYERS)

Source/read.f90

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7430,7 +7430,7 @@ SUBROUTINE PROC_MATL
74307430

74317431
USE MATH_FUNCTIONS, ONLY: EVALUATE_RAMP,INTERPOLATE1D_UNIFORM,LINEAR_SYSTEM_SOLVE
74327432
USE PHYSICAL_FUNCTIONS, ONLY: GET_TMP_REF
7433-
INTEGER :: I,N,NN,NL,NLPC,NS,NS2,NR,NR2,Z_INDEX(N_TRACKED_SPECIES,MAX_REACTIONS),IERR,ITMP,I_GRAD,&
7433+
INTEGER :: I,N,NN,NL,NLPC,NS,NS2,NR,NR2,Z_INDEX(N_TRACKED_SPECIES,MAX_REACTIONS),IERR,ITMP,&
74347434
MATL_MATRIX_SIZE,REAC_COUNTER,TEMP_COUNTER,TEMP_MATL(N_MATL,MAX_REACTIONS)
74357435
REAL(EB) :: ANS,H_ADJUST,NU_INERT,H_R_CALC(0:I_MAX_TEMP),SUM_NU(N_MATL,MAX_REACTIONS),DTMP,THICKNESS,VOL,X1
74367436
INTEGER, ALLOCATABLE, DIMENSION(:) :: MATL_MATRIX_POINTER
@@ -7648,11 +7648,6 @@ SUBROUTINE PROC_MATL
76487648
MATL_COEF_VECTOR(REAC_COUNTER) = MATL_COEF_VECTOR(REAC_COUNTER) + ML%NU_LPC(NLPC,NR)*ANS*ML%TMP_REF(NR)
76497649
ELSE LIQUID_IF
76507650
SF=>SURFACE(LPC%SURF_INDEX)
7651-
SELECT CASE(SF%GEOMETRY)
7652-
CASE(SURF_CARTESIAN) ; I_GRAD = 1
7653-
CASE(SURF_CYLINDRICAL,SURF_INNER_CYLINDRICAL) ; I_GRAD = 2
7654-
CASE(SURF_SPHERICAL) ; I_GRAD = 3
7655-
END SELECT
76567651
ALLOCATE(RHO_H(SF%N_MATL))
76577652
RHO_H = 0._EB
76587653
ALLOCATE(RHO(SF%N_MATL))
@@ -7662,7 +7657,7 @@ SUBROUTINE PROC_MATL
76627657
THICKNESS = SUM(SF%LAYER_THICKNESS)
76637658
X1 = THICKNESS+SF%INNER_RADIUS
76647659
DO I=1,SF%N_LAYERS
7665-
VOL = X1**I_GRAD-(X1 - SF%LAYER_THICKNESS(I))**I_GRAD
7660+
VOL = X1**SF%I_GRAD-(X1 - SF%LAYER_THICKNESS(I))**SF%I_GRAD
76667661
X1 = X1 - SF%LAYER_THICKNESS(I)
76677662
MATL_RHO: DO NN=1,SF%N_MATL
76687663
IF (SF%MATL_MASS_FRACTION(I,NN)<=TWO_EPSILON_EB) CYCLE MATL_RHO
@@ -7815,7 +7810,7 @@ SUBROUTINE READ_SURF(QUICK_READ)
78157810
REFERENCE_HEAT_FLUX(MAX_QDOTPP_REF),REFERENCE_HEAT_FLUX_TIME_INTERVAL,MINIMUM_SCALING_HEAT_FLUX,&
78167811
MAXIMUM_SCALING_HEAT_FLUX,REFERENCE_THICKNESS(MAX_QDOTPP_REF),&
78177812
AREA_MULTIPLIER,Z_0,PARTICLE_EXTRACTION_VELOCITY,NEAR_WALL_EDDY_VISCOSITY,&
7818-
DELAMINATION_TMP(MAX_LAYERS),DELAMINATION_DENSITY(MAX_LAYERS)
7813+
DELAMINATION_TMP(MAX_LAYERS),DELAMINATION_DENSITY(MAX_LAYERS),MINIMUM_LAYER_MASS_FRACTION(MAX_LAYERS)
78197814
INTEGER :: NPPC,N,IOS,NL,NN,NNN,NNNN,N_LIST,LEAK_PATH(2),DUCT_PATH(2),RGB(3),NR,IL
78207815
INTEGER :: N_LAYER_CELLS_MAX(MAX_LAYERS),VEG_LSET_FUEL_INDEX,INDEX_LIST(MAX_MATERIALS**2)
78217816
INTEGER :: CHILD_LAYER(MAX_LAYERS,N_MATL),CHILD_SURF(N_MATL)
@@ -7843,7 +7838,7 @@ SUBROUTINE READ_SURF(QUICK_READ)
78437838
LEAK_PATH,LEAK_PATH_ID,LENGTH,MASS_FLUX,MASS_FLUX_TOTAL,MASS_FLUX_VAR,MASS_FRACTION,&
78447839
MASS_TRANSFER_COEFFICIENT, &
78457840
MATL_ID,MATL_MASS_FRACTION,MASS_PER_VOLUME,MCC_CONVERSION_FACTOR,MINIMUM_BURNOUT_TIME,&
7846-
MINIMUM_LAYER_THICKNESS,MLRPUA,MOISTURE_CONTENT,MOISTURE_FRACTION,&
7841+
MINIMUM_LAYER_MASS_FRACTION,MINIMUM_LAYER_THICKNESS,MLRPUA,MOISTURE_CONTENT,MOISTURE_FRACTION,&
78477842
N_LAYER_CELLS_MAX,NEAR_WALL_EDDY_VISCOSITY,NEAR_WALL_TURBULENCE_MODEL,NET_HEAT_FLUX,&
78487843
NO_SLIP,NODE_ID,NPPC,NUSSELT_C0,NUSSELT_C1,NUSSELT_C2,NUSSELT_M,&
78497844
PARTICLE_EXTRACTION_VELOCITY,PARTICLE_MASS_FLUX,PARTICLE_SURFACE_DENSITY,PART_ID,&
@@ -8387,19 +8382,23 @@ SUBROUTINE READ_SURF(QUICK_READ)
83878382
SELECT CASE(GEOMETRY)
83888383
CASE('CARTESIAN')
83898384
SF%GEOMETRY = SURF_CARTESIAN
8385+
SF%I_GRAD = 1
83908386
IF (SF%WIDTH>0._EB) SF%BACKING = INSULATED
83918387
CASE('CYLINDRICAL')
83928388
SF%GEOMETRY = SURF_CYLINDRICAL
83938389
IF (SF%INNER_RADIUS<TWO_EPSILON_EB) SF%BACKING = INSULATED
8390+
SF%I_GRAD = 2
83948391
CASE('INNER CYLINDRICAL')
83958392
SF%GEOMETRY = SURF_INNER_CYLINDRICAL
83968393
IF (SF%INNER_RADIUS<TWO_EPSILON_EB) THEN
83978394
WRITE(MESSAGE,'(A,A,A)') 'ERROR(312): SURF ',TRIM(SF%ID),' needs an INNER_RADIUS.'
83988395
CALL SHUTDOWN(MESSAGE) ; RETURN
83998396
ENDIF
8397+
SF%I_GRAD = 2
84008398
CASE('SPHERICAL')
84018399
SF%GEOMETRY = SURF_SPHERICAL
84028400
IF (SF%INNER_RADIUS<TWO_EPSILON_EB) SF%BACKING = INSULATED
8401+
SF%I_GRAD = 3
84038402
CASE DEFAULT
84048403
WRITE(MESSAGE,'(A,A,A)') 'ERROR(312): SURF ',TRIM(SF%ID),' GEOMETRY not recognized.'
84058404
CALL SHUTDOWN(MESSAGE) ; RETURN
@@ -8684,6 +8683,7 @@ SUBROUTINE READ_SURF(QUICK_READ)
86848683
ALLOCATE(SF%HEAT_SOURCE(MAX_LAYERS)) ; SF%HEAT_SOURCE = 0._EB
86858684
ALLOCATE(SF%RAMP_IHS_INDEX(MAX_LAYERS)) ; SF%RAMP_IHS_INDEX = 0
86868685
ALLOCATE(SF%MIN_LAYER_THICKNESS(MAX_LAYERS)) ; SF%MIN_LAYER_THICKNESS = 0._EB
8686+
ALLOCATE(SF%MIN_LAYER_MASS(MAX_LAYERS)) ; SF%MIN_LAYER_MASS = 1._EB
86878687
ALLOCATE(SF%SWELL_RATIO(MAX_LAYERS)) ; SF%SWELL_RATIO = 1._EB
86888688

86898689
COUNT_LAYERS: DO NL=1,MAX_LAYERS
@@ -8719,7 +8719,7 @@ SUBROUTINE READ_SURF(QUICK_READ)
87198719
IF (SF%LAYER_DENSITY(NL) > 0._EB) SF%LAYER_DENSITY(NL) = 1./SF%LAYER_DENSITY(NL)
87208720
SF%THICKNESS = SF%THICKNESS + SF%LAYER_THICKNESS(NL)
87218721
ENDDO COUNT_LAYERS
8722-
8722+
SF%MIN_LAYER_MASS = SF%LAYER_DENSITY*MINIMUM_LAYER_MASS_FRACTION
87238723
! Define mass flux division point if the user does not specify. For all but
87248724
! surfaces with exposed backing, all pyrolyzed mass migrates to the front surface.
87258725

@@ -9014,6 +9014,7 @@ SUBROUTINE SET_SURF_DEFAULTS
90149014
MINIMUM_SCALING_HEAT_FLUX = 0._EB
90159015
MAXIMUM_SCALING_HEAT_FLUX = 1.E9_EB
90169016
MINIMUM_BURNOUT_TIME = 1.E6_EB
9017+
MINIMUM_LAYER_MASS_FRACTION = 1.E-12_EB
90179018
MINIMUM_LAYER_THICKNESS = -1.E-6_EB ! The absolute value is the default, m
90189019
MLRPUA = 0._EB
90199020
MOISTURE_CONTENT = 0._EB
@@ -9210,6 +9211,7 @@ SUBROUTINE PROC_SURF_1
92109211
CALL SHUTDOWN(MESSAGE) ; RETURN
92119212
ENDIF
92129213
ENDIF
9214+
CASE(SURF_SPHERICAL)
92139215
END SELECT
92149216
ENDIF
92159217
ENDDO
@@ -9251,7 +9253,7 @@ SUBROUTINE PROC_SURF_2
92519253
LOGICAL :: INDEX_LIST(MAX_LPC)
92529254
REAL(EB) :: R_L(0:MAX_LAYERS), FUEL_MF,HRRPUA,E,MF_SUM,HR_SUM
92539255
REAL(EB), ALLOCATABLE, DIMENSION(:) :: Q_REF_INT
9254-
INTEGER :: I_GRAD,I_CONE_RAMP,E_PTR
9256+
INTEGER :: I_CONE_RAMP,E_PTR
92559257
INTEGER :: PROCESSED(N_RAMP)
92569258
LOGICAL :: BURNING,BLOWING,SUCKING
92579259
TYPE(RAMPS_TYPE),POINTER :: RP,RP_E2T,RP_INT,RP_QREF
@@ -9265,12 +9267,6 @@ SUBROUTINE PROC_SURF_2
92659267
SF => SURFACE(N)
92669268
IF (SF%THERMAL_BC_INDEX==THERMALLY_THICK) SF%INCLUDE_BOUNDARY_ONE_D_TYPE = .TRUE.
92679269

9268-
SELECT CASE(SF%GEOMETRY)
9269-
CASE(SURF_CARTESIAN) ; I_GRAD = 1
9270-
CASE(SURF_CYLINDRICAL,SURF_INNER_CYLINDRICAL) ; I_GRAD = 2
9271-
CASE(SURF_SPHERICAL) ; I_GRAD = 3
9272-
END SELECT
9273-
92749270
! Particle Information
92759271

92769272
SF%PART_INDEX = 0
@@ -9560,7 +9556,7 @@ SUBROUTINE PROC_SURF_2
95609556
DO NL=1,SF%N_LAYERS
95619557
R_L(NL) = R_L(NL-1)-SF%LAYER_THICKNESS(NL)
95629558
SF%SURFACE_DENSITY = SF%SURFACE_DENSITY + SF%LAYER_DENSITY(NL) * &
9563-
(R_L(NL-1)**I_GRAD-R_L(NL)**I_GRAD)/(REAL(I_GRAD,EB)*SF%THICKNESS**(I_GRAD-1))
9559+
(R_L(NL-1)**SF%I_GRAD-R_L(NL)**SF%I_GRAD)/(REAL(SF%I_GRAD,EB)*SF%THICKNESS**(SF%I_GRAD-1))
95649560
ENDDO
95659561

95669562
IF ((ABS(SF%SURFACE_DENSITY) <= TWO_EPSILON_EB) .AND. SF%BURN_AWAY) THEN

Source/type.f90

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ MODULE TYPES
241241
REAL(EB), ALLOCATABLE, DIMENSION(:) :: LAYER_THICKNESS !< (1:N_LAYERS) Thickness of layer (m)
242242
REAL(EB), ALLOCATABLE, DIMENSION(:) :: LAYER_THICKNESS_OLD !< (1:N_LAYERS) Thickness of layer (m) at last remesh
243243
REAL(EB), ALLOCATABLE, DIMENSION(:) :: MIN_LAYER_THICKNESS !< (1:N_LAYERS) Minimum thickness of layer (m)
244+
REAL(EB), ALLOCATABLE, DIMENSION(:) :: MIN_LAYER_MASS !< (1:N_LAYERS) Layer mass for removal (m)
244245
REAL(EB), ALLOCATABLE, DIMENSION(:) :: MIN_DIFFUSIVITY !< (1:N_LAYERS) Min diffusivity of all matls in layer (m2/s)
245246
REAL(EB), ALLOCATABLE, DIMENSION(:) :: DDSUM !< Scaling factor to get minimum cell size
246247
REAL(EB), ALLOCATABLE, DIMENSION(:) :: SMALLEST_CELL_SIZE !< Minimum cell size (m)
@@ -321,6 +322,7 @@ MODULE TYPES
321322
REAL(EB) :: RHO_G !< Gas density in near wall cell (kg/m3)
322323
REAL(EB) :: RDN=1._EB !< \f$ 1/ \delta n \f$ at the surface (1/m)
323324
REAL(EB) :: K_G=0.025_EB !< Thermal conductivity of gas in adjacent gas phase cell near wall
325+
REAL(EB) :: M_DOT_LAYER_PP=0._EB !< Mass of a layer removed in kg used to update OB%MASS
324326
REAL(EB) :: Q_DOT_G_PP=0._EB !< Heat release rate per unit area (W/m2)
325327
REAL(EB) :: Q_DOT_O2_PP=0._EB !< Heat release rate per unit area (W/m2) due to oxygen consumption
326328
REAL(EB) :: Q_CONDENSE=0._EB !< Heat release rate per unit area (W/m2) due to gas condensation
@@ -922,6 +924,7 @@ MODULE TYPES
922924
REAL(EB), ALLOCATABLE, DIMENSION(:) :: MASS_FRACTION,MASS_FLUX,DDSUM,SMALLEST_CELL_SIZE,SWELL_RATIO
923925
REAL(EB), ALLOCATABLE, DIMENSION(:) :: REFERENCE_HEAT_FLUX !< Reference flux for the flux scaling pyrolysis model (kW/m2)
924926
REAL(EB), ALLOCATABLE, DIMENSION(:) :: SPYRO_TH_FACTOR !< Thickness scaling factor for the flux scaling pyrolysis model
927+
REAL(EB), ALLOCATABLE, DIMENSION(:) :: MIN_LAYER_MASS !< Initial mass in each layer
925928

926929
TYPE(RAMP_ID_TYPE), ALLOCATABLE, DIMENSION(:) :: RAMP
927930
INTEGER, DIMENSION(3) :: RGB
@@ -938,6 +941,7 @@ MODULE TYPES
938941
INTEGER :: N_CONE_CURVES=0 !< Total number of time vs. heat release rate curves specified for the S-pyro model
939942
INTEGER :: N_MATL !< Total number of unique materials over all layers
940943
INTEGER :: NODE_INDEX=0 !< Ductnode index
944+
INTEGER :: I_GRAD = 1 !< Geometry factor for volume
941945
INTEGER, DIMENSION(30) :: ONE_D_REALS_ARRAY_SIZE=0,ONE_D_INTEGERS_ARRAY_SIZE=0,ONE_D_LOGICALS_ARRAY_SIZE=0
942946
INTEGER, ALLOCATABLE, DIMENSION(:) :: N_LAYER_CELLS !< Number of wall cells per material layer
943947
INTEGER, ALLOCATABLE, DIMENSION(:) :: LAYER_INDEX !< The layer each wall cell belongs to

0 commit comments

Comments
 (0)