@@ -2528,11 +2528,12 @@ SUBROUTINE INITIALIZE_DEVICES(NM)
25282528
25292529USE COMPLEX_GEOMETRY, ONLY : GET_CFACE_INDEX
25302530INTEGER , 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
25332533TYPE (DEVICE_TYPE), POINTER :: DV
25342534TYPE (MESH_TYPE), POINTER :: M
2535- LOGICAL :: DO_CFACE
2535+ TYPE (BOUNDARY_ONE_D_TYPE), POINTER :: ONE_D
2536+ LOGICAL :: DO_CFACE,USE_SURF
25362537
25372538M = > 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
26132642ENDDO DEVICE_LOOP
26142643
0 commit comments