Skip to content

Commit b79c357

Browse files
authored
Merge pull request #13894 from mcgratta/master
FDS Source: Simplify MPI exchange of MPI quantities
2 parents 3918773 + b1c023c commit b79c357

File tree

3 files changed

+100
-165
lines changed

3 files changed

+100
-165
lines changed

Source/cons.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,8 +376,7 @@ MODULE GLOBAL_CONSTANTS
376376
TYPE (MPI_COMM), ALLOCATABLE, DIMENSION(:) :: MPI_COMM_CLOSE_NEIGHBORS !< MPI communicator for the a given mesh and its neighbors
377377
INTEGER, ALLOCATABLE, DIMENSION(:) :: MPI_COMM_NEIGHBORS_ROOT !< The rank of the given mesh within the MPI communicator
378378
INTEGER, ALLOCATABLE, DIMENSION(:) :: MPI_COMM_CLOSE_NEIGHBORS_ROOT !< The rank of the given mesh within the MPI communicator
379-
INTEGER, ALLOCATABLE, DIMENSION(:) :: COUNTS,DISPLS,COUNTS_MASS,DISPLS_MASS,COUNTS_HVAC,DISPLS_HVAC,&
380-
COUNTS_QM,DISPLS_QM,COUNTS_10,DISPLS_10,COUNTS_20,DISPLS_20
379+
INTEGER, ALLOCATABLE, DIMENSION(:) :: COUNTS,DISPLS,COUNTS_10,DISPLS_10,COUNTS_20,DISPLS_20
381380

382381
! Time parameters
383382

Source/hvac.f90

Lines changed: 87 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -44,22 +44,25 @@ MODULE HVAC_ROUTINES
4444
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:):: NODE_TMP_EX
4545
!< Contains sum of area weighted temperature over all MESHES for all VENTs assigned to each NODE
4646
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:):: DUCT_MF !<Contains mass flow for each duct. Exchanged during MPI exchanges
47-
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_AREA !<Area of each NODE per MESH
48-
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_H !<Area weighted enthalpy of each NODE per MESH
49-
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_P !<Area weighed pressure of each NODE per MESH
50-
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_RHO !<Area weighted desnity of each NODE per MESH
51-
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_X !<Area weighted x position of each NODE per MESH
52-
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_Y !<Area weighted y position of each NODE per MESH
53-
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_Z !<Area weighted z position of each NODE per MESH
54-
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_TMP !<Area weighted temperature of each NODE per MESH
47+
48+
REAL(EB), PUBLIC, TARGET, ALLOCATABLE, DIMENSION(:,:) :: NODE_PROPERTIES !< Holding array that is used to do MPI exchanges
49+
REAL(EB), POINTER, DIMENSION(:) :: NODE_AREA !< Area of each NODE per MESH
50+
REAL(EB), POINTER, DIMENSION(:) :: NODE_H !< Area-weighted enthalpy of each NODE
51+
REAL(EB), POINTER, DIMENSION(:) :: NODE_P !< Area-weighed pressure of each NODE
52+
REAL(EB), POINTER, DIMENSION(:) :: NODE_RHO !< Area-weighted desnity of each NODE
53+
REAL(EB), POINTER, DIMENSION(:) :: NODE_X !< Area-weighted x position of each NODE
54+
REAL(EB), POINTER, DIMENSION(:) :: NODE_Y !< Area-weighted y position of each NODE
55+
REAL(EB), POINTER, DIMENSION(:) :: NODE_Z !< Area-weighted z position of each NODE
56+
REAL(EB), POINTER, DIMENSION(:) :: NODE_TMP !< Area-weighted temperature of each NODE
57+
REAL(EB), POINTER, DIMENSION(:,:) :: NODE_ZZ !< Area-weighted tracked species mass fractions of each NODE
58+
59+
REAL(EB), PUBLIC, ALLOCATABLE, DIMENSION(:) :: NODE_ZONE !< Array of NODEs belonging to each ZONE
60+
5561
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_ZZ_EX !<Area weighted tracked species mass fractions of each NODE per MESH
5662
!< Contains sum of area weighted tracked species mass fractions over all MPI processes for all VENTs assigned to each NODE
57-
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:,:):: NODE_ZZ
58-
!< Contains sum of area weighted tracked species mass fractions over all MPI processes for all VENTs assigned to each NODE
5963
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:):: PSUM_TOT !< Contains sum of PSUM for merged pressure zones
6064
INTEGER, PUBLIC :: N_DUCT_QUANTITY=0 !< Number of DUCT output QUANTITY
6165
INTEGER, PUBLIC :: N_NODE_QUANTITY=0 !< Number of NODE output QUANTITY
62-
INTEGER, PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: NODE_ZONE !< Array of NODEs belonging to each ZONE
6366

6467
TYPE(HVAC_QUANTITY_TYPE), PUBLIC, TARGET, ALLOCATABLE, DIMENSION(:) :: DUCT_QUANTITY_ARRAY !< DUCT outputs for .hvac file
6568
TYPE(HVAC_QUANTITY_TYPE), PUBLIC, TARGET, ALLOCATABLE, DIMENSION(:) :: NODE_QUANTITY_ARRAY !< NODE outputs for .hvac file
@@ -1097,33 +1100,22 @@ SUBROUTINE PROC_HVAC
10971100
IF (ALLOCATED(NODE_FILTER_A)) DEALLOCATE(NODE_FILTER_A)
10981101
IF (ALLOCATED(DUCT_FAN_A)) DEALLOCATE(DUCT_FAN_A)
10991102

1100-
ALLOCATE(NODE_P(1:N_DUCTNODES,1:NMESHES))
1101-
ALLOCATE(NODE_TMP(1:N_DUCTNODES,1:NMESHES))
1102-
ALLOCATE(NODE_TMP_EX(1:N_DUCTNODES))
1103-
NODE_TMP_EX=0._EB
1104-
ALLOCATE(NODE_RHO(1:N_DUCTNODES,1:NMESHES))
1105-
ALLOCATE(NODE_H(1:N_DUCTNODES,1:NMESHES))
1106-
ALLOCATE(NODE_X(1:N_DUCTNODES,1:NMESHES))
1107-
ALLOCATE(NODE_Y(1:N_DUCTNODES,1:NMESHES))
1108-
ALLOCATE(NODE_Z(1:N_DUCTNODES,1:NMESHES))
1109-
ALLOCATE(NODE_ZONE(1:N_DUCTNODES,1:NMESHES))
1110-
ALLOCATE(NODE_AREA(1:N_DUCTNODES,1:NMESHES))
1111-
ALLOCATE(NODE_AREA_EX(1:N_DUCTNODES))
1112-
ALLOCATE(NODE_ZZ(1:N_DUCTNODES,1:N_TRACKED_SPECIES,1:NMESHES))
1113-
ALLOCATE(NODE_ZZ_EX(1:N_DUCTNODES,1:N_TRACKED_SPECIES))
1114-
1115-
NODE_X = 0._EB
1116-
NODE_Y = 0._EB
1117-
NODE_Z = 0._EB
1118-
NODE_ZONE = 0
1119-
NODE_H = 0._EB
1120-
NODE_P = 0._EB
1121-
NODE_TMP= 0._EB
1122-
NODE_RHO = 0._EB
1123-
NODE_AREA = 0._EB
1124-
NODE_AREA_EX = 0._EB
1125-
NODE_ZZ = 0._EB
1126-
NODE_ZZ_EX = 0._EB
1103+
ALLOCATE(NODE_PROPERTIES(N_DUCTNODES,8+N_TRACKED_SPECIES)) ; NODE_PROPERTIES = 0._EB
1104+
NODE_P => NODE_PROPERTIES(1:N_DUCTNODES,1)
1105+
NODE_TMP => NODE_PROPERTIES(1:N_DUCTNODES,2)
1106+
NODE_RHO => NODE_PROPERTIES(1:N_DUCTNODES,3)
1107+
NODE_H => NODE_PROPERTIES(1:N_DUCTNODES,4)
1108+
NODE_X => NODE_PROPERTIES(1:N_DUCTNODES,5)
1109+
NODE_Y => NODE_PROPERTIES(1:N_DUCTNODES,6)
1110+
NODE_Z => NODE_PROPERTIES(1:N_DUCTNODES,7)
1111+
NODE_AREA => NODE_PROPERTIES(1:N_DUCTNODES,8)
1112+
NODE_ZZ => NODE_PROPERTIES(1:N_DUCTNODES,9:8+N_TRACKED_SPECIES)
1113+
1114+
ALLOCATE(NODE_ZONE(1:N_DUCTNODES)) ; NODE_ZONE = 0
1115+
1116+
ALLOCATE(NODE_TMP_EX(1:N_DUCTNODES)) ; NODE_TMP_EX=0._EB
1117+
ALLOCATE(NODE_AREA_EX(1:N_DUCTNODES)) ; NODE_AREA_EX = 0._EB
1118+
ALLOCATE(NODE_ZZ_EX(1:N_DUCTNODES,1:N_TRACKED_SPECIES)) ; NODE_ZZ_EX = 0._EB
11271119

11281120
CALL EXAMINE_LOSSES
11291121
CALL DETERMINE_FIXED_ELEMENTS(0._EB,DUMMY)
@@ -2196,16 +2188,6 @@ SUBROUTINE HVAC_BC_IN(NM)
21962188

21972189
CALL POINT_TO_MESH(NM)
21982190
ERROR_FLAG = .FALSE.
2199-
NODE_X(:,NM) = 0._EB
2200-
NODE_Y(:,NM) = 0._EB
2201-
NODE_Z(:,NM) = 0._EB
2202-
NODE_ZONE(:,NM) = 0
2203-
NODE_H(:,NM) = 0._EB
2204-
NODE_P(:,NM) = 0._EB
2205-
NODE_TMP(:,NM)= 0._EB
2206-
NODE_RHO(:,NM) = 0._EB
2207-
NODE_AREA(:,NM) = 0._EB
2208-
NODE_ZZ(:,:,NM) = 0._EB
22092191
ZZ_GET = 0._EB
22102192

22112193
IF (PREDICTOR) THEN
@@ -2285,50 +2267,49 @@ SUBROUTINE INITIALIZE_HVAC
22852267
JJ = BC%JJG
22862268
KK = BC%KKG
22872269
AREA = B1%AREA
2288-
IF (B1%PRESSURE_ZONE /= NODE_ZONE(NODE_INDEX,NM)) THEN
2289-
IF (NODE_ZONE(NODE_INDEX,NM) == 0) THEN
2290-
NODE_ZONE(NODE_INDEX,NM) = B1%PRESSURE_ZONE
2270+
IF (B1%PRESSURE_ZONE /= NODE_ZONE(NODE_INDEX)) THEN
2271+
IF (NODE_ZONE(NODE_INDEX) == 0) THEN
2272+
NODE_ZONE(NODE_INDEX) = B1%PRESSURE_ZONE
22912273
ELSE
22922274
ERROR_FLAG = .TRUE.
22932275
WRITE(MESSAGE,'(A,A)') 'ERROR(552): Ductnode must lie with a single pressure zone. Node: ',TRIM(DUCTNODE(NODE_INDEX)%ID)
22942276
CALL SHUTDOWN(MESSAGE,PROCESS_0_ONLY=.FALSE.); RETURN
22952277
ENDIF
22962278
ENDIF
22972279

2298-
NODE_AREA(NODE_INDEX,NM) = NODE_AREA(NODE_INDEX,NM) + AREA
2299-
NODE_RHO(NODE_INDEX,NM) = NODE_RHO(NODE_INDEX,NM) + AREA/RHOP(II,JJ,KK)
2280+
NODE_AREA(NODE_INDEX) = NODE_AREA(NODE_INDEX) + AREA
2281+
NODE_RHO(NODE_INDEX) = NODE_RHO(NODE_INDEX) + AREA/RHOP(II,JJ,KK)
23002282
ZZ_GET(1:N_TRACKED_SPECIES) = ZZ(II,JJ,KK,1:N_TRACKED_SPECIES)
2301-
NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES,NM) = NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES,NM) + &
2302-
ZZ_GET(1:N_TRACKED_SPECIES)*AREA
2283+
NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES) = NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES) + ZZ_GET(1:N_TRACKED_SPECIES)*AREA
23032284
CALL GET_ENTHALPY(ZZ_GET,HGAS,TMP(II,JJ,KK))
2304-
NODE_TMP(NODE_INDEX,NM) = NODE_TMP(NODE_INDEX,NM) + TMP(II,JJ,KK)*AREA
2305-
NODE_H(NODE_INDEX,NM) = NODE_H(NODE_INDEX,NM) + HGAS * AREA
2285+
NODE_TMP(NODE_INDEX) = NODE_TMP(NODE_INDEX) + TMP(II,JJ,KK)*AREA
2286+
NODE_H(NODE_INDEX) = NODE_H(NODE_INDEX) + HGAS * AREA
23062287

23072288
SELECT CASE (IOR)
23082289
CASE (1)
2309-
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + X(II-1)*AREA
2310-
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + YC(JJ)*AREA
2311-
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
2290+
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + X(II-1)*AREA
2291+
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + YC(JJ)*AREA
2292+
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
23122293
CASE(-1)
2313-
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + X(II)*AREA
2314-
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + YC(JJ)*AREA
2315-
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
2294+
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + X(II)*AREA
2295+
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + YC(JJ)*AREA
2296+
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
23162297
CASE (2)
2317-
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + XC(II)*AREA
2318-
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + Y(JJ-1)*AREA
2319-
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
2298+
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + XC(II)*AREA
2299+
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + Y(JJ-1)*AREA
2300+
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
23202301
CASE(-2)
2321-
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + XC(II)*AREA
2322-
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + Y(JJ)*AREA
2323-
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
2302+
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + XC(II)*AREA
2303+
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + Y(JJ)*AREA
2304+
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
23242305
CASE (3)
2325-
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + XC(II)*AREA
2326-
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + YC(JJ)*AREA
2327-
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + Z(KK-1)*AREA
2306+
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + XC(II)*AREA
2307+
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + YC(JJ)*AREA
2308+
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + Z(KK-1)*AREA
23282309
CASE (-3)
2329-
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + XC(II)*AREA
2330-
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + YC(JJ)*AREA
2331-
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + Z(KK)*AREA
2310+
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + XC(II)*AREA
2311+
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + YC(JJ)*AREA
2312+
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + Z(KK)*AREA
23322313
END SELECT
23332314
IF (HVAC_LOCAL_PRESSURE) THEN
23342315
SELECT CASE (IOR)
@@ -2339,36 +2320,36 @@ SUBROUTINE INITIALIZE_HVAC
23392320
CASE (-3)
23402321
P_AVE = 0.5_EB*(PBARP(KK,B1%PRESSURE_ZONE)+PBARP(KK+1,B1%PRESSURE_ZONE))
23412322
END SELECT
2342-
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + (P_AVE+RHO(II,JJ,KK)*(HP(II,JJ,KK)-KRES(II,JJ,KK)))*AREA
2323+
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + (P_AVE+RHO(II,JJ,KK)*(HP(II,JJ,KK)-KRES(II,JJ,KK)))*AREA
23432324
ELSE
23442325
SELECT CASE (IOR)
23452326
CASE (1)
2346-
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
2327+
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
23472328
(PBARP(KK,B1%PRESSURE_ZONE)-RHO(II,JJ,KK) * &
23482329
0.5_EB*(UP(II-1,JJ,KK)+B1%U_NORMAL)**2 * &
23492330
SIGN(1._EB,UP(II-1,JJ,KK)+B1%U_NORMAL))* AREA
23502331
CASE(-1)
2351-
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
2332+
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
23522333
(PBARP(KK,B1%PRESSURE_ZONE)+RHO(II,JJ,KK) * &
23532334
0.5_EB*(UP(II,JJ,KK)-B1%U_NORMAL)**2 * &
23542335
SIGN(1._EB,UP(II,JJ,KK)-B1%U_NORMAL))*AREA
23552336
CASE (2)
2356-
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
2337+
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
23572338
(PBARP(KK,B1%PRESSURE_ZONE)-RHO(II,JJ,KK) * &
23582339
0.5_EB*(VP(II,JJ-1,KK)+B1%U_NORMAL)**2 * &
23592340
SIGN(1._EB,VP(II,JJ-1,KK)+B1%U_NORMAL))*AREA
23602341
CASE(-2)
2361-
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
2342+
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
23622343
(PBARP(KK,B1%PRESSURE_ZONE)+RHO(II,JJ,KK) * &
23632344
0.5_EB*(VP(II,JJ,KK)-B1%U_NORMAL)**2 * &
23642345
SIGN(1._EB,VP(II,JJ,KK)-B1%U_NORMAL))*AREA
23652346
CASE (3)
2366-
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
2347+
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
23672348
(PBARP(KK,B1%PRESSURE_ZONE)-RHO(II,JJ,KK) * &
23682349
0.5_EB*(WP(II,JJ,KK-1)+B1%U_NORMAL)**2 * &
23692350
SIGN(1._EB,WP(II,JJ,KK-1)+B1%U_NORMAL))*AREA
23702351
CASE (-3)
2371-
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
2352+
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
23722353
(PBARP(KK,B1%PRESSURE_ZONE)+RHO(II,JJ,KK) * &
23732354
0.5_EB*(WP(II,JJ,KK)-B1%U_NORMAL)**2 * &
23742355
SIGN(1._EB,WP(II,JJ,KK)-B1%U_NORMAL))*AREA
@@ -2387,35 +2368,34 @@ SUBROUTINE INITIALIZE_HVAC
23872368
IZ2 = SF%LEAK_PATH(1)
23882369
NODE_INDEX = DUCT(LEAK_PATH(MIN(IZ1,IZ2),MAX(IZ1,IZ2)))%NODE_INDEX(2)
23892370
ENDIF
2390-
IF (NODE_ZONE(NODE_INDEX,NM) == 0) NODE_ZONE(NODE_INDEX,NM) = B1%PRESSURE_ZONE
2371+
IF (NODE_ZONE(NODE_INDEX) == 0) NODE_ZONE(NODE_INDEX) = B1%PRESSURE_ZONE
23912372
IOR = BC%IOR
23922373
II = BC%IIG
23932374
JJ = BC%JJG
23942375
KK = BC%KKG
23952376
AREA = B1%AREA
23962377

2397-
NODE_AREA(NODE_INDEX,NM) = NODE_AREA(NODE_INDEX,NM) + AREA
2398-
NODE_RHO(NODE_INDEX,NM) = NODE_RHO(NODE_INDEX,NM) + AREA/RHOP(II,JJ,KK)
2378+
NODE_AREA(NODE_INDEX) = NODE_AREA(NODE_INDEX) + AREA
2379+
NODE_RHO(NODE_INDEX) = NODE_RHO(NODE_INDEX) + AREA/RHOP(II,JJ,KK)
23992380

24002381
ZZ_GET(1:N_TRACKED_SPECIES) = ZZ(II,JJ,KK,1:N_TRACKED_SPECIES)
2401-
NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES,NM) = NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES,NM) + &
2402-
ZZ_GET(1:N_TRACKED_SPECIES)*AREA
2382+
NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES) = NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES) + ZZ_GET(1:N_TRACKED_SPECIES)*AREA
24032383
CALL GET_ENTHALPY(ZZ_GET,HGAS,TMP(II,JJ,KK))
2404-
NODE_TMP(NODE_INDEX,NM) = NODE_TMP(NODE_INDEX,NM) + TMP(II,JJ,KK)*AREA
2405-
NODE_H(NODE_INDEX,NM) = NODE_H(NODE_INDEX,NM) + HGAS * AREA
2384+
NODE_TMP(NODE_INDEX) = NODE_TMP(NODE_INDEX) + TMP(II,JJ,KK)*AREA
2385+
NODE_H(NODE_INDEX) = NODE_H(NODE_INDEX) + HGAS * AREA
24062386

24072387
SELECT CASE (IOR)
24082388
CASE (3)
24092389
P_AVE = 0.5_EB*(PBARP(KK-1,B1%PRESSURE_ZONE)+PBARP(KK,B1%PRESSURE_ZONE))
2410-
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + Z(KK-1)*AREA
2390+
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + Z(KK-1)*AREA
24112391
CASE (-3)
24122392
P_AVE = 0.5_EB*(PBARP(KK,B1%PRESSURE_ZONE)+PBARP(KK+1,B1%PRESSURE_ZONE))
2413-
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + Z(KK)*AREA
2393+
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + Z(KK)*AREA
24142394
CASE DEFAULT
24152395
P_AVE = PBARP(KK,B1%PRESSURE_ZONE)
2416-
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
2396+
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
24172397
END SELECT
2418-
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + P_AVE*AREA
2398+
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + P_AVE*AREA
24192399

24202400
ENDIF ZONE_LEAK_IF
24212401

@@ -3033,7 +3013,7 @@ SUBROUTINE COLLAPSE_HVAC_BC(T)
30333013
USE MATH_FUNCTIONS, ONLY : EVALUATE_RAMP
30343014
REAL(EB), INTENT(IN) :: T
30353015
REAL(EB) :: TNOW !< Current CPU time (s) used in computing length of time spent in HVAC routines.
3036-
INTEGER:: NN,NS,ZONE_TEST(NMESHES)
3016+
INTEGER:: NN,NS
30373017
REAL(EB) :: AREA,RHO_SUM,ZZ_GET(1:N_TRACKED_SPECIES),HGAS
30383018
TYPE(DUCTNODE_TYPE), POINTER :: DN=>NULL(),DN2=>NULL()
30393019

@@ -3042,20 +3022,14 @@ SUBROUTINE COLLAPSE_HVAC_BC(T)
30423022
VENT_CUSTOM_AMBIENT: DO NN=1,N_DUCTNODES
30433023
DN => DUCTNODE(NN)
30443024
IF (.NOT. DN%LEAKAGE) THEN
3045-
DN%ZONE_INDEX = MAXVAL(NODE_ZONE(NN,:))
3046-
ZONE_TEST = 0
3047-
WHERE (NODE_ZONE(NN,:) /=0) ZONE_TEST = NODE_ZONE(NN,:) - DN%ZONE_INDEX
3048-
IF (ANY(ZONE_TEST /=0)) THEN
3049-
WRITE(MESSAGE,'(A,A)') 'ERROR(552): Ductnode must lie with a single pressure zone. Node: ',TRIM(DUCTNODE(NN)%ID)
3050-
CALL SHUTDOWN(MESSAGE); RETURN
3051-
ENDIF
3025+
DN%ZONE_INDEX = NODE_ZONE(NN)
30523026
IF (CONNECTED_ZONES(0,DN%ZONE_INDEX)>0) DN%ZONE_INDEX = 0
30533027
ENDIF
30543028

30553029
INTERNAL_NODE_IF: IF (((DN%VENT .OR. DN%LEAKAGE) .AND. .NOT. DN%AMBIENT) .OR. &
3056-
(DN%AMBIENT .AND. SUM(NODE_AREA(NN,:)) > 0._EB)) THEN
3030+
(DN%AMBIENT .AND. NODE_AREA(NN) > 0._EB)) THEN
30573031
ZZ_GET = 0._EB
3058-
AREA = SUM(NODE_AREA(NN,:))
3032+
AREA = NODE_AREA(NN)
30593033
IF (AREA<=TWO_EPSILON_EB) THEN
30603034
DUCT(DN%DUCT_INDEX(1))%AREA = 0._EB
30613035
DUCT(DN%DUCT_INDEX(1))%VEL = 0._EB
@@ -3064,13 +3038,13 @@ SUBROUTINE COLLAPSE_HVAC_BC(T)
30643038
DUCT(DN%DUCT_INDEX(1))%AREA = DUCT(DN%DUCT_INDEX(1))%AREA_INITIAL
30653039
ENDIF
30663040
NODE_AREA_EX(NN) = AREA
3067-
DN%XYZ(1) = SUM(NODE_X(NN,:))/AREA
3068-
DN%XYZ(2) = SUM(NODE_Y(NN,:))/AREA
3069-
DN%XYZ(3) = SUM(NODE_Z(NN,:))/AREA
3070-
RHO_SUM = SUM(NODE_RHO(NN,:))
3041+
DN%XYZ(1) = NODE_X(NN)/AREA
3042+
DN%XYZ(2) = NODE_Y(NN)/AREA
3043+
DN%XYZ(3) = NODE_Z(NN)/AREA
3044+
RHO_SUM = NODE_RHO(NN)
30713045

30723046
DO NS=1,N_TRACKED_SPECIES
3073-
DN%ZZ_V(NS) = SUM(NODE_ZZ(NN,NS,:))/AREA
3047+
DN%ZZ_V(NS) = NODE_ZZ(NN,NS)/AREA
30743048
ENDDO
30753049

30763050

@@ -3095,12 +3069,12 @@ SUBROUTINE COLLAPSE_HVAC_BC(T)
30953069
ENDIF
30963070

30973071
IF (DN%LEAKAGE) THEN
3098-
IF(ABS(T-T_BEGIN) < TWO_EPSILON_EB) DN%P_OLD = SUM(NODE_P(NN,:))/AREA
3072+
IF(ABS(T-T_BEGIN) < TWO_EPSILON_EB) DN%P_OLD = NODE_P(NN)/AREA
30993073
ENDIF
31003074

3101-
DN%P = HVAC_PRES_RELAX*(SUM(NODE_P(NN,:))/AREA)+(1._EB-HVAC_PRES_RELAX)*DN%P_OLD
3102-
DN%TMP_V = SUM(NODE_TMP(NN,:))/AREA
3103-
HGAS = SUM(NODE_H(NN,:))/AREA
3075+
DN%P = HVAC_PRES_RELAX*(NODE_P(NN)/AREA)+(1._EB-HVAC_PRES_RELAX)*DN%P_OLD
3076+
DN%TMP_V = NODE_TMP(NN)/AREA
3077+
HGAS = NODE_H(NN)/AREA
31043078
CALL GET_TEMPERATURE(DN%TMP_V,HGAS,ZZ_GET)
31053079
CALL GET_ENTHALPY(ZZ_GET,HGAS,DN%TMP_V)
31063080
DN%CP_V = HGAS/DN%TMP_V
@@ -3109,7 +3083,7 @@ SUBROUTINE COLLAPSE_HVAC_BC(T)
31093083

31103084
AMBIENT_LEAK: DO NN=1,N_DUCTNODES
31113085
DN => DUCTNODE(NN)
3112-
IF (DN%AMBIENT .AND. SUM(NODE_AREA(NN,:))<=TWO_EPSILON_EB) THEN
3086+
IF (DN%AMBIENT .AND. NODE_AREA(NN)<=TWO_EPSILON_EB) THEN
31133087
!Initialize ambient nodes outside domain
31143088
IF (DUCT(DN%DUCT_INDEX(1))%NODE_INDEX(1)==NN) THEN
31153089
DN2 => DUCTNODE(DUCT(DN%DUCT_INDEX(1))%NODE_INDEX(2))

0 commit comments

Comments
 (0)