Skip to content

Commit dd962bd

Browse files
committed
FDS Source: Use ONE_D for determining INSIDE WALL
1 parent 3803f9e commit dd962bd

File tree

1 file changed

+48
-19
lines changed

1 file changed

+48
-19
lines changed

Source/init.f90

Lines changed: 48 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2528,11 +2528,12 @@ SUBROUTINE INITIALIZE_DEVICES(NM)
25282528

25292529
USE COMPLEX_GEOMETRY, ONLY : GET_CFACE_INDEX
25302530
INTEGER, INTENT(IN) :: NM
2531-
INTEGER :: III,N,II,JJ,KK,IOR,IW,SURF_INDEX,IIG,JJG,KKG,ICF
2532-
REAL(EB) :: DEPTH
2531+
INTEGER :: III,N,II,JJ,KK,IW,SURF_INDEX,ICF,N_CELLS_INI
2532+
REAL(EB) :: DEPTH,THICKNESS
25332533
TYPE (DEVICE_TYPE), POINTER :: DV
25342534
TYPE (MESH_TYPE), POINTER :: M
2535-
LOGICAL :: DO_CFACE
2535+
TYPE (BOUNDARY_ONE_D_TYPE), POINTER :: ONE_D
2536+
LOGICAL :: DO_CFACE,USE_SURF
25362537

25372538
M => MESHES(NM)
25382539

@@ -2548,26 +2549,22 @@ SUBROUTINE INITIALIZE_DEVICES(NM)
25482549
II = INT(GINV(DV%X-M%XS,1,NM)*M%RDXI + 1._EB)
25492550
JJ = INT(GINV(DV%Y-M%YS,2,NM)*M%RDETA + 1._EB)
25502551
KK = INT(GINV(DV%Z-M%ZS,3,NM)*M%RDZETA + 1._EB)
2551-
IIG = II
2552-
JJG = JJ
2553-
KKG = KK
2554-
IOR = DV%IOR
25552552
IW = 0
25562553
ICF = 0
25572554

2558-
IF (IOR/=0) CALL GET_WALL_INDEX(NM,IIG,JJG,KKG,IOR,IW)
2555+
IF (DV%IOR/=0) CALL GET_WALL_INDEX(NM,II,JJ,KK,DV%IOR,IW)
25592556

25602557
IF (CC_IBM) THEN
25612558
DO_CFACE=.FALSE.
2562-
IF(IW==0) DO_CFACE=.TRUE.
2563-
IF(.NOT.DO_CFACE .AND. IW>0) THEN
2564-
IF(M%WALL(IW)%BOUNDARY_TYPE/=SOLID_BOUNDARY) THEN
2559+
IF (IW==0) DO_CFACE=.TRUE.
2560+
IF (.NOT.DO_CFACE .AND. IW>0) THEN
2561+
IF (M%WALL(IW)%BOUNDARY_TYPE/=SOLID_BOUNDARY) THEN
25652562
DO_CFACE=.TRUE.
25662563
IW=0
25672564
ENDIF
25682565
ENDIF
25692566
! Search for CFACE index if no SOLID wall cell is associated to device:
2570-
IF(DO_CFACE) CALL GET_CFACE_INDEX(NM,IIG,JJG,KKG,DV%X,DV%Y,DV%Z,ICF)
2567+
IF (DO_CFACE) CALL GET_CFACE_INDEX(NM,II,JJ,KK,DV%X,DV%Y,DV%Z,ICF)
25712568
ENDIF
25722569

25732570
IF (IW==0 .AND. ICF==0 .AND. DV%SPATIAL_STATISTIC=='null') THEN
@@ -2591,24 +2588,56 @@ SUBROUTINE INITIALIZE_DEVICES(NM)
25912588

25922589
ENDIF
25932590

2594-
! Make sure that thermally-thick output is appropriate
2591+
! For output quantities that are inside the solid, determine the appropriate interior cell node, I_DEPTH
2592+
2593+
IF_INSIDE_LOOP: IF (OUTPUT_QUANTITY(DV%QUANTITY_INDEX(1))%INSIDE_SOLID) THEN
25952594

2596-
IF (OUTPUT_QUANTITY(DV%QUANTITY_INDEX(1))%INSIDE_SOLID) THEN
25972595
IF (SURFACE(SURF_INDEX)%THERMAL_BC_INDEX /= THERMALLY_THICK) THEN
25982596
WRITE(LU_ERR,'(A,A,A)') 'ERROR(428): DEVC ',TRIM(DV%ID),' must be associated with a heat-conducting surface.'
25992597
STOP_STATUS = SETUP_STOP
26002598
RETURN
26012599
ENDIF
2600+
2601+
IF (IW>0) THEN
2602+
ONE_D => M%BOUNDARY_ONE_D(M%WALL(IW)%OD_INDEX)
2603+
N_CELLS_INI = ONE_D%N_CELLS_INI
2604+
THICKNESS = SUM(ONE_D%LAYER_THICKNESS)
2605+
USE_SURF = .FALSE.
2606+
ELSEIF (ICF>0) THEN
2607+
ONE_D => M%BOUNDARY_ONE_D(M%CFACE(ICF)%OD_INDEX)
2608+
N_CELLS_INI = ONE_D%N_CELLS_INI
2609+
THICKNESS = SUM(ONE_D%LAYER_THICKNESS)
2610+
USE_SURF = .FALSE.
2611+
ELSEIF (DV%PART_CLASS_INDEX>0) THEN
2612+
N_CELLS_INI = SURFACE(SURF_INDEX)%N_CELLS_INI
2613+
THICKNESS = SUM(SURFACE(SURF_INDEX)%LAYER_THICKNESS)
2614+
USE_SURF = .TRUE.
2615+
ELSE
2616+
N_CELLS_INI = SURFACE(SURF_INDEX)%N_CELLS_INI
2617+
THICKNESS = SUM(SURFACE(SURF_INDEX)%LAYER_THICKNESS)
2618+
USE_SURF = .TRUE.
2619+
ENDIF
2620+
2621+
! The given DV%DEPTH is taken as the distance from front surface if it is positive; from the back surface if negative.
2622+
26022623
IF (DV%DEPTH>TWO_EPSILON_EB) THEN
26032624
DEPTH = DV%DEPTH
26042625
ELSE
2605-
DEPTH = MAX(0._EB,SUM(SURFACE(SURF_INDEX)%LAYER_THICKNESS)+DV%DEPTH)
2626+
DEPTH = MAX(0._EB,THICKNESS+DV%DEPTH)
26062627
ENDIF
2607-
DV%I_DEPTH = SURFACE(SURF_INDEX)%N_CELLS_INI
2608-
DO III=SURFACE(SURF_INDEX)%N_CELLS_INI,1,-1
2609-
IF (DEPTH<=SURFACE(SURF_INDEX)%X_S(III)) DV%I_DEPTH = III
2628+
2629+
! Determine the index of the interior node, I_DEPTH
2630+
2631+
DV%I_DEPTH = N_CELLS_INI
2632+
DO III=N_CELLS_INI,1,-1
2633+
IF (USE_SURF) THEN
2634+
IF (DEPTH<=SURFACE(SURF_INDEX)%X_S(III)) DV%I_DEPTH = III
2635+
ELSE
2636+
IF (DEPTH<=ONE_D%X(III)) DV%I_DEPTH = III
2637+
ENDIF
26102638
ENDDO
2611-
ENDIF
2639+
2640+
ENDIF IF_INSIDE_LOOP
26122641

26132642
ENDDO DEVICE_LOOP
26142643

0 commit comments

Comments
 (0)