Skip to content

Commit ba05789

Browse files
committed
FDS Source: BI-DIRECTIONAL PROBE edits and Type-K props
1 parent f063ad4 commit ba05789

File tree

3 files changed

+70
-36
lines changed

3 files changed

+70
-36
lines changed

Source/devc.f90

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ MODULE DEVICE_VARIABLES
1010
!> \brief Derived type storing inputs for the PROP namelist group
1111

1212
TYPE PROPERTY_TYPE
13-
REAL(EB) :: DENSITY,DIAMETER,EMISSIVITY,HEAT_TRANSFER_COEFFICIENT,SPECIFIC_HEAT,RTI,TIME_CONSTANT, &
13+
REAL(EB) :: DENSITY,DIAMETER,EMISSIVITY,HEAT_TRANSFER_COEFFICIENT,RTI,TIME_CONSTANT, &
1414
ACTIVATION_TEMPERATURE,ACTIVATION_OBSCURATION, CALIBRATION_CONSTANT,&
1515
ALPHA_E,ALPHA_C,BETA_E,BETA_C,CHARACTERISTIC_VELOCITY,PARTICLE_VELOCITY,MASS_FLOW_RATE,FLOW_RATE,FLOW_TAU, &
1616
GAUGE_EMISSIVITY,GAUGE_TEMPERATURE,INITIAL_TEMPERATURE,K_FACTOR,C_FACTOR,OPERATING_PRESSURE,OFFSET,&
@@ -19,8 +19,9 @@ MODULE DEVICE_VARIABLES
1919
LOGICAL :: PDPA_INTEGRATE=.TRUE.,PDPA_NORMALIZE=.TRUE.,HISTOGRAM_NORMALIZE=.TRUE.,HISTOGRAM=.FALSE., &
2020
HISTOGRAM_CUMULATIVE=.FALSE.,SPARK=.FALSE.,TC=.TRUE.,IGNITION_ZONE=.FALSE.
2121
REAL(EB) :: PDPA_START=0._EB,PDPA_END=1.E6_EB,PDPA_RADIUS=0.1_EB
22-
REAL(EB), ALLOCATABLE, DIMENSION(:) :: TABLE_ROW, V_FACTOR
23-
INTEGER :: PART_INDEX=-1,FLOW_RAMP_INDEX,SPRAY_PATTERN_INDEX,Z_INDEX=-999,Y_INDEX=-999,PRESSURE_RAMP_INDEX
22+
REAL(EB), ALLOCATABLE, DIMENSION(:) :: TABLE_ROW, V_FACTOR,SPECIFIC_HEAT
23+
INTEGER :: PART_INDEX=-1,FLOW_RAMP_INDEX,SPRAY_PATTERN_INDEX,Z_INDEX=-999,Y_INDEX=-999,PRESSURE_RAMP_INDEX,&
24+
SPECIFIC_HEAT_RAMP_INDEX=-1
2425
CHARACTER(LABEL_LENGTH) :: SMOKEVIEW_ID(SMOKEVIEW_OBJECTS_DIMENSION),PART_ID,ID,QUANTITY,TABLE_ID,SPEC_ID='null', &
2526
SMOKEVIEW_PARAMETERS(SMOKEVIEW_OBJECTS_DIMENSION)='null'
2627
REAL(EB), ALLOCATABLE, DIMENSION(:) :: SPRAY_LON_CDF,SPRAY_LON,SPRAY_LAT

Source/dump.f90

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7334,7 +7334,7 @@ REAL(EB) RECURSIVE FUNCTION GAS_PHASE_OUTPUT(T,DT,NM,II,JJ,KK,IND,IND2,Y_INDEX,Z
73347334
EXPON,Y_SPECIES,MEC,Y_SPECIES2,Y_H2O,R_Y_H2O,R_DN,SGN,Y_ALL(N_SPECIES),H_S,D_Z_N(0:I_MAX_TEMP),&
73357335
DISSIPATION_RATE,S11,S22,S33,S12,S13,S23,DUDX,DUDY,DUDZ,DVDX,DVDY,DVDZ,DWDX,DWDY,DWDZ,ONTHDIV,SS,ETA,DELTA,R_DX2,&
73367336
UVW,UODX,VODY,WODZ,XHAT,ZHAT,BBF,GAMMA_LOC,VC,VOL,PHI,GAS_PHASE_OUTPUT_CC,&
7337-
GAS_PHASE_OUTPUT_CFA,CFACE_AREA,VELOCITY_COMPONENT(1:3),ATOTV(1:3),TMP_F,R_D,MW,RHO_AIR,PROBE_TMP
7337+
GAS_PHASE_OUTPUT_CFA,CFACE_AREA,VELOCITY_COMPONENT(1:3),ATOTV(1:3),TMP_F,R_D,MW,PROBE_TMP
73387338
INTEGER :: N,I,J,K,NN,IL,III,JJJ,KKK,IP,JP,KP,FED_ACTIVITY,IP1,JP1,KP1,IM1,JM1,KM1,IIM1,JJM1,KKM1,NR,NS,RAM,&
73397339
ICC,JCC,NCELL,AXIS,ICF,NFACE,JCF,JCC_LO,JCC_HI,PDPA_FORMULA,IC
73407340
REAL(FB) :: RN
@@ -7843,24 +7843,27 @@ REAL(EB) RECURSIVE FUNCTION GAS_PHASE_OUTPUT(T,DT,NM,II,JJ,KK,IND,IND2,Y_INDEX,Z
78437843
GAS_PHASE_OUTPUT_RES = FED(ZZ_GET,RSUM(II,JJ,KK),FED_ACTIVITY)
78447844

78457845
CASE(110) ! THERMOCOUPLE
7846-
TMP_G = TMP(II,JJ,KK)
7847-
IF (PY%HEAT_TRANSFER_COEFFICIENT<0._EB) THEN
7848-
UU = U(II,JJ,KK)
7849-
VV = V(II,JJ,KK)
7850-
WW = W(II,JJ,KK)
7851-
VEL2 = UU**2+VV**2+WW**2
7852-
ZZ_GET(1:N_TRACKED_SPECIES) = ZZ(II,JJ,KK,1:N_TRACKED_SPECIES)
7853-
CALL GET_VISCOSITY(ZZ_GET,MU_G,TMP(II,JJ,KK))
7854-
CALL GET_CONDUCTIVITY(ZZ_GET,K_G,TMP(II,JJ,KK))
7855-
RE_D = RHO(II,JJ,KK)*SQRT(VEL2)*PY%DIAMETER/MU_G
7856-
CALL FORCED_CONVECTION_MODEL(NUSSELT,RE_D,PR_ONTH,SURF_SPHERICAL)
7857-
H_TC = NUSSELT*K_G/PY%DIAMETER
7858-
ELSE
7859-
H_TC = PY%HEAT_TRANSFER_COEFFICIENT
7846+
IF (T > T_BEGIN) THEN
7847+
TMP_G = TMP(II,JJ,KK)
7848+
IF (PY%HEAT_TRANSFER_COEFFICIENT<0._EB) THEN
7849+
UU = U(II,JJ,KK)
7850+
VV = V(II,JJ,KK)
7851+
WW = W(II,JJ,KK)
7852+
VEL2 = UU**2+VV**2+WW**2
7853+
ZZ_GET(1:N_TRACKED_SPECIES) = ZZ(II,JJ,KK,1:N_TRACKED_SPECIES)
7854+
CALL GET_VISCOSITY(ZZ_GET,MU_G,TMP(II,JJ,KK))
7855+
CALL GET_CONDUCTIVITY(ZZ_GET,K_G,TMP(II,JJ,KK))
7856+
RE_D = RHO(II,JJ,KK)*SQRT(VEL2)*PY%DIAMETER/MU_G
7857+
CALL FORCED_CONVECTION_MODEL(NUSSELT,RE_D,PR_ONTH,SURF_SPHERICAL)
7858+
H_TC = NUSSELT*K_G/PY%DIAMETER
7859+
ELSE
7860+
H_TC = PY%HEAT_TRANSFER_COEFFICIENT
7861+
ENDIF
7862+
FAC = 6._EB/(PY%DENSITY*PY%SPECIFIC_HEAT(NINT(DV%TMP_L))*PY%DIAMETER)*DT
7863+
DV%TMP_L = (DV%TMP_L + FAC*(H_TC*(TMP_G-0.5_EB*DV%TMP_L) + &
7864+
PY%EMISSIVITY*(0.25_EB*UII(II,JJ,KK)+SIGMA*DV%TMP_L**4))) / &
7865+
(1._EB + FAC*(0.5_EB*H_TC+2._EB*PY%EMISSIVITY*SIGMA*DV%TMP_L**3))
78607866
ENDIF
7861-
RHS = (6._EB/(PY%DENSITY*PY%SPECIFIC_HEAT*PY%DIAMETER))* &
7862-
( H_TC*(TMP_G-DV%TMP_L) + PY%EMISSIVITY*(0.25_EB*UII(II,JJ,KK)-SIGMA*DV%TMP_L**4) )
7863-
IF (T>T_BEGIN) DV%TMP_L = DV%TMP_L + DT*RHS
78647867
GAS_PHASE_OUTPUT_RES = DV%TMP_L - TMPM
78657868

78667869
CASE(111:113) ! ENTHALPY FLUX
@@ -7893,17 +7896,17 @@ REAL(EB) RECURSIVE FUNCTION GAS_PHASE_OUTPUT(T,DT,NM,II,JJ,KK,IND,IND2,Y_INDEX,Z
78937896
VV = V(II,JJ,KK)
78947897
WW = W(II,JJ,KK)
78957898
VEL2 = UU**2+VV**2+WW**2
7899+
VEL = SQRT(VEL2)
78967900
DP = 0.5_EB*VEL2*RHO(II,JJ,KK)
78977901
COSTHETA = (UU*ORIENTATION_VECTOR(1,DV%ORIENTATION_INDEX)+VV*ORIENTATION_VECTOR(2,DV%ORIENTATION_INDEX)+&
7898-
WW*ORIENTATION_VECTOR(3,DV%ORIENTATION_INDEX))/SQRT(VEL2)
7899-
FAC = -2.308_EB*ABS(COSTHETA)**3 + 2.533_EB*ABS(COSTHETA)**2 + 0.7847_EB*ABS(COSTHETA)
7900-
VEL = FAC*SQRT(VEL2)
7902+
WW*ORIENTATION_VECTOR(3,DV%ORIENTATION_INDEX))/VEL
79017903
ZZ_GET(1:N_TRACKED_SPECIES) = ZZ(II,JJ,KK,1:N_TRACKED_SPECIES)
79027904
CALL GET_VISCOSITY(ZZ_GET,MU_G,TMP(II,JJ,KK))
79037905
RE_D = MIN(3800._EB,MAX(40._EB,RHO(II,JJ,KK)*VEL*PY%PROBE_DIAMETER/MU_G))
7906+
FAC = MAX(0._EB,-2.308_EB*ABS(COSTHETA)**3 + 2.533_EB*ABS(COSTHETA)**2 + 0.7847_EB*ABS(COSTHETA) - 0.0097_EB)
7907+
VEL = FAC*VEL
79047908
FAC = 1.533_EB-0.001366_EB*RE_D+0.000001688_EB*RE_D**2-0.0000000009706_EB*RE_D**3+&
79057909
0.0000000000002555_EB*RE_D**4-2.484E-17_EB*RE_D**5
7906-
RHO_AIR = 350.9736_EB/PROBE_TMP !350 is 0.0288 101325/ 8.314472
79077910
GAS_PHASE_OUTPUT_RES = SIGN(1._EB,COSTHETA)*VEL*PY%CALIBRATION_CONSTANT*FAC
79087911

79097912
CASE(130) ! EXTINCTION

Source/read.f90

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6540,7 +6540,7 @@ SUBROUTINE READ_PROP
65406540
CHARACTER(LABEL_LENGTH) :: SMOKEVIEW_ID(SMOKEVIEW_OBJECTS_DIMENSION),QUANTITY='null',PART_ID='null',FLOW_RAMP='null', &
65416541
SPRAY_PATTERN_TABLE='null',SPEC_ID='null',&
65426542
PRESSURE_RAMP='null',SMOKEVIEW_PARAMETERS(SMOKEVIEW_OBJECTS_DIMENSION), &
6543-
SPRAY_PATTERN_SHAPE='GAUSSIAN'
6543+
SPRAY_PATTERN_SHAPE='GAUSSIAN',SPECIFIC_HEAT_RAMP
65446544
TYPE (PROPERTY_TYPE), POINTER :: PY
65456545

65466546
NAMELIST /PROP/ ACTIVATION_OBSCURATION,ACTIVATION_TEMPERATURE,ALPHA_C,ALPHA_E,BETA_C,BETA_E,CALIBRATION_CONSTANT,&
@@ -6551,7 +6551,7 @@ SUBROUTINE READ_PROP
65516551
PARTICLES_PER_SECOND,PARTICLE_VELOCITY,PART_ID,PDPA_END,&
65526552
PDPA_INTEGRATE,PDPA_M,PDPA_N,PDPA_NORMALIZE,PDPA_RADIUS,&
65536553
PDPA_START,PRESSURE_RAMP,PROBE_DIAMETER,PX,PXX,QUANTITY,RTI,SMOKEVIEW_ID,SMOKEVIEW_PARAMETERS,SPARK,&
6554-
SPEC_ID,SPECIFIC_HEAT,SPRAY_ANGLE,&
6554+
SPEC_ID,SPECIFIC_HEAT,SPECIFIC_HEAT_RAMP,SPRAY_ANGLE,&
65556555
SPRAY_PATTERN_BETA,SPRAY_PATTERN_MU,SPRAY_PATTERN_SHAPE,SPRAY_PATTERN_TABLE,TC,TIME_CONSTANT,VELOCITY_COMPONENT,&
65566556
VIEW_ANGLE
65576557

@@ -6600,7 +6600,16 @@ SUBROUTINE READ_PROP
66006600
PY%DIAMETER = DIAMETER
66016601
PY%EMISSIVITY = EMISSIVITY
66026602
PY%HEAT_TRANSFER_COEFFICIENT= HEAT_TRANSFER_COEFFICIENT
6603-
PY%SPECIFIC_HEAT = SPECIFIC_HEAT*1000._EB/TIME_SHRINK_FACTOR
6603+
ALLOCATE(PY%SPECIFIC_HEAT(0:I_MAX_TEMP))
6604+
IF(SPECIFIC_HEAT > 0._EB) THEN
6605+
PY%SPECIFIC_HEAT = SPECIFIC_HEAT*1000._EB/TIME_SHRINK_FACTOR
6606+
ELSE
6607+
! Type-K CP(20 C)=0.4515, CP(1200 C)=0.6010
6608+
DO J = 0,I_MAX_TEMP
6609+
PY%SPECIFIC_HEAT(J) = 0.4515_EB+0.001_EB*(REAL(MAX(20,MIN(1200,J)),EB)-20._EB)*(0.6010_EB-0.4515_EB)
6610+
ENDDO
6611+
ENDIF
6612+
IF (SPECIFIC_HEAT_RAMP /= 'null') CALL GET_RAMP_INDEX(SPECIFIC_HEAT_RAMP,'TEMPERATURE',PY%SPECIFIC_HEAT_RAMP_INDEX)
66046613
PY%C_FACTOR = C_FACTOR
66056614
PY%CHARACTERISTIC_VELOCITY = CHARACTERISTIC_VELOCITY
66066615
PY%GAUGE_EMISSIVITY = GAUGE_EMISSIVITY
@@ -6842,11 +6851,12 @@ SUBROUTINE SET_PROP_DEFAULTS
68426851
BETA_C = -1.0_EB
68436852
BETA_E = -1.0_EB
68446853
CALIBRATION_CONSTANT = 0.93_EB
6845-
DENSITY = 8908._EB ! kg/m3 (Nickel)
6854+
DENSITY = 8700._EB ! kg/m3 (Type-K)
68466855
DIAMETER = 0.001 ! m
68476856
EMISSIVITY = 0.85_EB
68486857
HEAT_TRANSFER_COEFFICIENT= -1._EB ! W/m2/K
6849-
SPECIFIC_HEAT = 0.44_EB ! kJ/kg/K (Nickel)
6858+
SPECIFIC_HEAT = -1._EB ! kJ/kg/K
6859+
SPECIFIC_HEAT_RAMP = 'null'
68506860
C_FACTOR = 0.0_EB
68516861
CHARACTERISTIC_VELOCITY = 1.0_EB ! m/s
68526862
PARTICLE_VELOCITY = 0._EB ! m/s
@@ -6913,6 +6923,7 @@ END SUBROUTINE READ_PROP
69136923
SUBROUTINE PROC_PROP
69146924

69156925
USE DEVICE_VARIABLES
6926+
USE MATH_FUNCTIONS, ONLY: EVALUATE_RAMP
69166927
REAL(EB) :: TOTAL_FLOWRATE, SUBTOTAL_FLOWRATE
69176928
INTEGER :: N,NN,N_V_FACTORS,ILPC
69186929
LOGICAL :: TABLE_NORMED(1:N_TABLE)
@@ -7011,7 +7022,21 @@ SUBROUTINE PROC_PROP
70117022
PY%V_FACTOR = PY%PARTICLE_VELOCITY/SQRT(PY%OPERATING_PRESSURE)
70127023
ENDIF
70137024
ENDIF
7025+
7026+
! Check units of specific heat
70147027

7028+
IF (PY%SPECIFIC_HEAT_RAMP_INDEX > 0) THEN
7029+
IF (.NOT.RAMPS(PY%SPECIFIC_HEAT_RAMP_INDEX)%DEP_VAR_UNITS_CONVERTED) THEN
7030+
RAMPS(PY%SPECIFIC_HEAT_RAMP_INDEX)%INTERPOLATED_DATA(:) = &
7031+
RAMPS(PY%SPECIFIC_HEAT_RAMP_INDEX)%INTERPOLATED_DATA(:)*1000._EB/TIME_SHRINK_FACTOR
7032+
RAMPS(PY%SPECIFIC_HEAT_RAMP_INDEX)%DEP_VAR_UNITS_CONVERTED = .TRUE.
7033+
ENDIF
7034+
IF (RAMPS(PY%SPECIFIC_HEAT_RAMP_INDEX)%DEPENDENT_DATA(1) > 10._EB .AND. MY_RANK==0) &
7035+
WRITE(LU_ERR,'(A,A)') 'WARNING: SPECIFIC_HEAT units are kJ/kg/K check PROP ',TRIM(PY%ID)
7036+
DO I=0,I_MAX_TEMP
7037+
PY%SPECIFIC_HEAT(I)=EVALUATE_RAMP(REAL(I,EB),PY%SPECIFIC_HEAT_RAMP_INDEX)
7038+
ENDDO
7039+
ENDIF
70157040
ENDDO PROP_LOOP
70167041

70177042
END SUBROUTINE PROC_PROP
@@ -14161,8 +14186,7 @@ SUBROUTINE READ_DEVC
1416114186
DV%QUANTITY(1)=='GAUGE HEAT FLUX GAS' .OR. &
1416214187
DV%QUANTITY(1)=='RADIANCE' .OR. &
1416314188
DV%QUANTITY(1)=='ADIABATIC SURFACE TEMPERATURE GAS' .OR. &
14164-
DV%QUANTITY(1)=='RADIOMETER GAS' .OR. &
14165-
DV%QUANTITY(1)=='BI-DIRECTIONAL PROBE') THEN
14189+
DV%QUANTITY(1)=='RADIOMETER GAS') THEN
1416614190
IF (DV%ORIENTATION_INDEX==0) THEN
1416714191
WRITE(MESSAGE,'(3A)') 'ERROR(887): DEVC ',TRIM(ID),' must have an ORIENTATION.'
1416814192
CALL SHUTDOWN(MESSAGE) ; RETURN
@@ -14175,6 +14199,12 @@ SUBROUTINE READ_DEVC
1417514199
INIT_RESERVED(N_INIT_RESERVED)%DEVC_INDEX = N_DEVC
1417614200
INIT_RESERVED(N_INIT_RESERVED)%N_PARTICLES = POINTS
1417714201
ENDIF
14202+
ENDIF
14203+
14204+
! Special case for QUANTITY='BI-DIRECTIONAL PROBE'
14205+
IF (DV%QUANTITY(1)=='BI-DIRECTIONAL PROBE' .AND. DV%ORIENTATION_INDEX==0) THEN
14206+
WRITE(MESSAGE,'(3A)') 'ERROR(887): DEVC ',TRIM(ID),' must have an ORIENTATION.'
14207+
CALL SHUTDOWN(MESSAGE) ; RETURN
1417814208
ENDIF
1417914209

1418014210
! Miscellaneous actions taken based on specific device attributes
@@ -15161,7 +15191,7 @@ SUBROUTINE PROC_DEVC
1516115191
PY => PROPERTY(DV%PROP_INDEX)
1516215192
IF (PY%TIME_CONSTANT>0._EB) THEN ! Convert a specified TIME_CONSTANT into an equivalent bead DIAMETER
1516315193
IF (PY%HEAT_TRANSFER_COEFFICIENT>0._EB) THEN ! Calculate effective diameter directly
15164-
PY%DIAMETER = 6._EB*PY%HEAT_TRANSFER_COEFFICIENT*PY%TIME_CONSTANT/(PY%DENSITY*PY%SPECIFIC_HEAT)
15194+
PY%DIAMETER = 6._EB*PY%HEAT_TRANSFER_COEFFICIENT*PY%TIME_CONSTANT/(PY%DENSITY*PY%SPECIFIC_HEAT(293))
1516515195
ELSE ! Calculate effective diameter implicitly
1516615196
ZZ_G = 0._EB
1516715197
ZZ_G(1) = 1._EB
@@ -15171,13 +15201,13 @@ SUBROUTINE PROC_DEVC
1517115201
TOL = 1._EB
1517215202
RE = RHOA*UU*PY%DIAMETER/MU_G ! Make initial estimate of Re and Nu based on default bead diameter
1517315203
NU = 2._EB + 0.6_EB*SQRT(RE)*PR_AIR**ONTH
15174-
PY%DIAMETER = SQRT(6._EB*K_G*NU*PY%TIME_CONSTANT/(PY%DENSITY*PY%SPECIFIC_HEAT))
15204+
PY%DIAMETER = SQRT(6._EB*K_G*NU*PY%TIME_CONSTANT/(PY%DENSITY*PY%SPECIFIC_HEAT(293)))
1517515205
DO WHILE(TOL>1.E-5_EB)
1517615206
RE = RHOA*UU*PY%DIAMETER/MU_G
1517715207
NU = 2._EB + 0.6_EB*SQRT(RE)*PR_AIR**ONTH
15178-
F = 6._EB*K_G*NU*PY%TIME_CONSTANT - PY%DENSITY*PY%SPECIFIC_HEAT*PY%DIAMETER**2
15208+
F = 6._EB*K_G*NU*PY%TIME_CONSTANT - PY%DENSITY*PY%SPECIFIC_HEAT(293)*PY%DIAMETER**2
1517915209
DFDD = 1.8_EB*K_G*PY%TIME_CONSTANT*PR_AIR**ONTH*RE**(-0.5)*RHOA*UU/MU_G - &
15180-
2._EB*PY%DENSITY*PY%SPECIFIC_HEAT*PY%DIAMETER
15210+
2._EB*PY%DENSITY*PY%SPECIFIC_HEAT(293)*PY%DIAMETER
1518115211
PY%DIAMETER = PY%DIAMETER - F/DFDD
1518215212
TOL = ABS(F/DFDD)
1518315213
ENDDO

0 commit comments

Comments
 (0)