Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions Source/cons.f90
Original file line number Diff line number Diff line change
Expand Up @@ -376,8 +376,7 @@ MODULE GLOBAL_CONSTANTS
TYPE (MPI_COMM), ALLOCATABLE, DIMENSION(:) :: MPI_COMM_CLOSE_NEIGHBORS !< MPI communicator for the a given mesh and its neighbors
INTEGER, ALLOCATABLE, DIMENSION(:) :: MPI_COMM_NEIGHBORS_ROOT !< The rank of the given mesh within the MPI communicator
INTEGER, ALLOCATABLE, DIMENSION(:) :: MPI_COMM_CLOSE_NEIGHBORS_ROOT !< The rank of the given mesh within the MPI communicator
INTEGER, ALLOCATABLE, DIMENSION(:) :: COUNTS,DISPLS,COUNTS_MASS,DISPLS_MASS,COUNTS_HVAC,DISPLS_HVAC,&
COUNTS_QM,DISPLS_QM,COUNTS_10,DISPLS_10,COUNTS_20,DISPLS_20
INTEGER, ALLOCATABLE, DIMENSION(:) :: COUNTS,DISPLS,COUNTS_10,DISPLS_10,COUNTS_20,DISPLS_20

! Time parameters

Expand Down
200 changes: 87 additions & 113 deletions Source/hvac.f90
Original file line number Diff line number Diff line change
Expand Up @@ -44,22 +44,25 @@ MODULE HVAC_ROUTINES
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:):: NODE_TMP_EX
!< Contains sum of area weighted temperature over all MESHES for all VENTs assigned to each NODE
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:):: DUCT_MF !<Contains mass flow for each duct. Exchanged during MPI exchanges
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_AREA !<Area of each NODE per MESH
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_H !<Area weighted enthalpy of each NODE per MESH
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_P !<Area weighed pressure of each NODE per MESH
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_RHO !<Area weighted desnity of each NODE per MESH
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_X !<Area weighted x position of each NODE per MESH
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_Y !<Area weighted y position of each NODE per MESH
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_Z !<Area weighted z position of each NODE per MESH
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_TMP !<Area weighted temperature of each NODE per MESH

REAL(EB), PUBLIC, TARGET, ALLOCATABLE, DIMENSION(:,:) :: NODE_PROPERTIES !< Holding array that is used to do MPI exchanges
REAL(EB), POINTER, DIMENSION(:) :: NODE_AREA !< Area of each NODE per MESH
REAL(EB), POINTER, DIMENSION(:) :: NODE_H !< Area-weighted enthalpy of each NODE
REAL(EB), POINTER, DIMENSION(:) :: NODE_P !< Area-weighed pressure of each NODE
REAL(EB), POINTER, DIMENSION(:) :: NODE_RHO !< Area-weighted desnity of each NODE
REAL(EB), POINTER, DIMENSION(:) :: NODE_X !< Area-weighted x position of each NODE
REAL(EB), POINTER, DIMENSION(:) :: NODE_Y !< Area-weighted y position of each NODE
REAL(EB), POINTER, DIMENSION(:) :: NODE_Z !< Area-weighted z position of each NODE
REAL(EB), POINTER, DIMENSION(:) :: NODE_TMP !< Area-weighted temperature of each NODE
REAL(EB), POINTER, DIMENSION(:,:) :: NODE_ZZ !< Area-weighted tracked species mass fractions of each NODE

REAL(EB), PUBLIC, ALLOCATABLE, DIMENSION(:) :: NODE_ZONE !< Array of NODEs belonging to each ZONE

REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:):: NODE_ZZ_EX !<Area weighted tracked species mass fractions of each NODE per MESH
!< Contains sum of area weighted tracked species mass fractions over all MPI processes for all VENTs assigned to each NODE
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:,:,:):: NODE_ZZ
!< Contains sum of area weighted tracked species mass fractions over all MPI processes for all VENTs assigned to each NODE
REAL(EB),PUBLIC, ALLOCATABLE, DIMENSION(:):: PSUM_TOT !< Contains sum of PSUM for merged pressure zones
INTEGER, PUBLIC :: N_DUCT_QUANTITY=0 !< Number of DUCT output QUANTITY
INTEGER, PUBLIC :: N_NODE_QUANTITY=0 !< Number of NODE output QUANTITY
INTEGER, PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: NODE_ZONE !< Array of NODEs belonging to each ZONE

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

ALLOCATE(NODE_P(1:N_DUCTNODES,1:NMESHES))
ALLOCATE(NODE_TMP(1:N_DUCTNODES,1:NMESHES))
ALLOCATE(NODE_TMP_EX(1:N_DUCTNODES))
NODE_TMP_EX=0._EB
ALLOCATE(NODE_RHO(1:N_DUCTNODES,1:NMESHES))
ALLOCATE(NODE_H(1:N_DUCTNODES,1:NMESHES))
ALLOCATE(NODE_X(1:N_DUCTNODES,1:NMESHES))
ALLOCATE(NODE_Y(1:N_DUCTNODES,1:NMESHES))
ALLOCATE(NODE_Z(1:N_DUCTNODES,1:NMESHES))
ALLOCATE(NODE_ZONE(1:N_DUCTNODES,1:NMESHES))
ALLOCATE(NODE_AREA(1:N_DUCTNODES,1:NMESHES))
ALLOCATE(NODE_AREA_EX(1:N_DUCTNODES))
ALLOCATE(NODE_ZZ(1:N_DUCTNODES,1:N_TRACKED_SPECIES,1:NMESHES))
ALLOCATE(NODE_ZZ_EX(1:N_DUCTNODES,1:N_TRACKED_SPECIES))

NODE_X = 0._EB
NODE_Y = 0._EB
NODE_Z = 0._EB
NODE_ZONE = 0
NODE_H = 0._EB
NODE_P = 0._EB
NODE_TMP= 0._EB
NODE_RHO = 0._EB
NODE_AREA = 0._EB
NODE_AREA_EX = 0._EB
NODE_ZZ = 0._EB
NODE_ZZ_EX = 0._EB
ALLOCATE(NODE_PROPERTIES(N_DUCTNODES,8+N_TRACKED_SPECIES)) ; NODE_PROPERTIES = 0._EB
NODE_P => NODE_PROPERTIES(1:N_DUCTNODES,1)
NODE_TMP => NODE_PROPERTIES(1:N_DUCTNODES,2)
NODE_RHO => NODE_PROPERTIES(1:N_DUCTNODES,3)
NODE_H => NODE_PROPERTIES(1:N_DUCTNODES,4)
NODE_X => NODE_PROPERTIES(1:N_DUCTNODES,5)
NODE_Y => NODE_PROPERTIES(1:N_DUCTNODES,6)
NODE_Z => NODE_PROPERTIES(1:N_DUCTNODES,7)
NODE_AREA => NODE_PROPERTIES(1:N_DUCTNODES,8)
NODE_ZZ => NODE_PROPERTIES(1:N_DUCTNODES,9:8+N_TRACKED_SPECIES)

ALLOCATE(NODE_ZONE(1:N_DUCTNODES)) ; NODE_ZONE = 0

ALLOCATE(NODE_TMP_EX(1:N_DUCTNODES)) ; NODE_TMP_EX=0._EB
ALLOCATE(NODE_AREA_EX(1:N_DUCTNODES)) ; NODE_AREA_EX = 0._EB
ALLOCATE(NODE_ZZ_EX(1:N_DUCTNODES,1:N_TRACKED_SPECIES)) ; NODE_ZZ_EX = 0._EB

CALL EXAMINE_LOSSES
CALL DETERMINE_FIXED_ELEMENTS(0._EB,DUMMY)
Expand Down Expand Up @@ -2196,16 +2188,6 @@ SUBROUTINE HVAC_BC_IN(NM)

CALL POINT_TO_MESH(NM)
ERROR_FLAG = .FALSE.
NODE_X(:,NM) = 0._EB
NODE_Y(:,NM) = 0._EB
NODE_Z(:,NM) = 0._EB
NODE_ZONE(:,NM) = 0
NODE_H(:,NM) = 0._EB
NODE_P(:,NM) = 0._EB
NODE_TMP(:,NM)= 0._EB
NODE_RHO(:,NM) = 0._EB
NODE_AREA(:,NM) = 0._EB
NODE_ZZ(:,:,NM) = 0._EB
ZZ_GET = 0._EB

IF (PREDICTOR) THEN
Expand Down Expand Up @@ -2285,50 +2267,49 @@ SUBROUTINE INITIALIZE_HVAC
JJ = BC%JJG
KK = BC%KKG
AREA = B1%AREA
IF (B1%PRESSURE_ZONE /= NODE_ZONE(NODE_INDEX,NM)) THEN
IF (NODE_ZONE(NODE_INDEX,NM) == 0) THEN
NODE_ZONE(NODE_INDEX,NM) = B1%PRESSURE_ZONE
IF (B1%PRESSURE_ZONE /= NODE_ZONE(NODE_INDEX)) THEN
IF (NODE_ZONE(NODE_INDEX) == 0) THEN
NODE_ZONE(NODE_INDEX) = B1%PRESSURE_ZONE
ELSE
ERROR_FLAG = .TRUE.
WRITE(MESSAGE,'(A,A)') 'ERROR(552): Ductnode must lie with a single pressure zone. Node: ',TRIM(DUCTNODE(NODE_INDEX)%ID)
CALL SHUTDOWN(MESSAGE,PROCESS_0_ONLY=.FALSE.); RETURN
ENDIF
ENDIF

NODE_AREA(NODE_INDEX,NM) = NODE_AREA(NODE_INDEX,NM) + AREA
NODE_RHO(NODE_INDEX,NM) = NODE_RHO(NODE_INDEX,NM) + AREA/RHOP(II,JJ,KK)
NODE_AREA(NODE_INDEX) = NODE_AREA(NODE_INDEX) + AREA
NODE_RHO(NODE_INDEX) = NODE_RHO(NODE_INDEX) + AREA/RHOP(II,JJ,KK)
ZZ_GET(1:N_TRACKED_SPECIES) = ZZ(II,JJ,KK,1:N_TRACKED_SPECIES)
NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES,NM) = NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES,NM) + &
ZZ_GET(1:N_TRACKED_SPECIES)*AREA
NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES) = NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES) + ZZ_GET(1:N_TRACKED_SPECIES)*AREA
CALL GET_ENTHALPY(ZZ_GET,HGAS,TMP(II,JJ,KK))
NODE_TMP(NODE_INDEX,NM) = NODE_TMP(NODE_INDEX,NM) + TMP(II,JJ,KK)*AREA
NODE_H(NODE_INDEX,NM) = NODE_H(NODE_INDEX,NM) + HGAS * AREA
NODE_TMP(NODE_INDEX) = NODE_TMP(NODE_INDEX) + TMP(II,JJ,KK)*AREA
NODE_H(NODE_INDEX) = NODE_H(NODE_INDEX) + HGAS * AREA

SELECT CASE (IOR)
CASE (1)
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + X(II-1)*AREA
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + YC(JJ)*AREA
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + X(II-1)*AREA
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + YC(JJ)*AREA
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
CASE(-1)
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + X(II)*AREA
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + YC(JJ)*AREA
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + X(II)*AREA
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + YC(JJ)*AREA
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
CASE (2)
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + XC(II)*AREA
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + Y(JJ-1)*AREA
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + XC(II)*AREA
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + Y(JJ-1)*AREA
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
CASE(-2)
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + XC(II)*AREA
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + Y(JJ)*AREA
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + XC(II)*AREA
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + Y(JJ)*AREA
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
CASE (3)
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + XC(II)*AREA
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + YC(JJ)*AREA
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + Z(KK-1)*AREA
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + XC(II)*AREA
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + YC(JJ)*AREA
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + Z(KK-1)*AREA
CASE (-3)
NODE_X(NODE_INDEX,NM) = NODE_X(NODE_INDEX,NM) + XC(II)*AREA
NODE_Y(NODE_INDEX,NM) = NODE_Y(NODE_INDEX,NM) + YC(JJ)*AREA
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + Z(KK)*AREA
NODE_X(NODE_INDEX) = NODE_X(NODE_INDEX) + XC(II)*AREA
NODE_Y(NODE_INDEX) = NODE_Y(NODE_INDEX) + YC(JJ)*AREA
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + Z(KK)*AREA
END SELECT
IF (HVAC_LOCAL_PRESSURE) THEN
SELECT CASE (IOR)
Expand All @@ -2339,36 +2320,36 @@ SUBROUTINE INITIALIZE_HVAC
CASE (-3)
P_AVE = 0.5_EB*(PBARP(KK,B1%PRESSURE_ZONE)+PBARP(KK+1,B1%PRESSURE_ZONE))
END SELECT
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
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + (P_AVE+RHO(II,JJ,KK)*(HP(II,JJ,KK)-KRES(II,JJ,KK)))*AREA
ELSE
SELECT CASE (IOR)
CASE (1)
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
(PBARP(KK,B1%PRESSURE_ZONE)-RHO(II,JJ,KK) * &
0.5_EB*(UP(II-1,JJ,KK)+B1%U_NORMAL)**2 * &
SIGN(1._EB,UP(II-1,JJ,KK)+B1%U_NORMAL))* AREA
CASE(-1)
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
(PBARP(KK,B1%PRESSURE_ZONE)+RHO(II,JJ,KK) * &
0.5_EB*(UP(II,JJ,KK)-B1%U_NORMAL)**2 * &
SIGN(1._EB,UP(II,JJ,KK)-B1%U_NORMAL))*AREA
CASE (2)
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
(PBARP(KK,B1%PRESSURE_ZONE)-RHO(II,JJ,KK) * &
0.5_EB*(VP(II,JJ-1,KK)+B1%U_NORMAL)**2 * &
SIGN(1._EB,VP(II,JJ-1,KK)+B1%U_NORMAL))*AREA
CASE(-2)
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
(PBARP(KK,B1%PRESSURE_ZONE)+RHO(II,JJ,KK) * &
0.5_EB*(VP(II,JJ,KK)-B1%U_NORMAL)**2 * &
SIGN(1._EB,VP(II,JJ,KK)-B1%U_NORMAL))*AREA
CASE (3)
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
(PBARP(KK,B1%PRESSURE_ZONE)-RHO(II,JJ,KK) * &
0.5_EB*(WP(II,JJ,KK-1)+B1%U_NORMAL)**2 * &
SIGN(1._EB,WP(II,JJ,KK-1)+B1%U_NORMAL))*AREA
CASE (-3)
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + &
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + &
(PBARP(KK,B1%PRESSURE_ZONE)+RHO(II,JJ,KK) * &
0.5_EB*(WP(II,JJ,KK)-B1%U_NORMAL)**2 * &
SIGN(1._EB,WP(II,JJ,KK)-B1%U_NORMAL))*AREA
Expand All @@ -2387,35 +2368,34 @@ SUBROUTINE INITIALIZE_HVAC
IZ2 = SF%LEAK_PATH(1)
NODE_INDEX = DUCT(LEAK_PATH(MIN(IZ1,IZ2),MAX(IZ1,IZ2)))%NODE_INDEX(2)
ENDIF
IF (NODE_ZONE(NODE_INDEX,NM) == 0) NODE_ZONE(NODE_INDEX,NM) = B1%PRESSURE_ZONE
IF (NODE_ZONE(NODE_INDEX) == 0) NODE_ZONE(NODE_INDEX) = B1%PRESSURE_ZONE
IOR = BC%IOR
II = BC%IIG
JJ = BC%JJG
KK = BC%KKG
AREA = B1%AREA

NODE_AREA(NODE_INDEX,NM) = NODE_AREA(NODE_INDEX,NM) + AREA
NODE_RHO(NODE_INDEX,NM) = NODE_RHO(NODE_INDEX,NM) + AREA/RHOP(II,JJ,KK)
NODE_AREA(NODE_INDEX) = NODE_AREA(NODE_INDEX) + AREA
NODE_RHO(NODE_INDEX) = NODE_RHO(NODE_INDEX) + AREA/RHOP(II,JJ,KK)

ZZ_GET(1:N_TRACKED_SPECIES) = ZZ(II,JJ,KK,1:N_TRACKED_SPECIES)
NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES,NM) = NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES,NM) + &
ZZ_GET(1:N_TRACKED_SPECIES)*AREA
NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES) = NODE_ZZ(NODE_INDEX,1:N_TRACKED_SPECIES) + ZZ_GET(1:N_TRACKED_SPECIES)*AREA
CALL GET_ENTHALPY(ZZ_GET,HGAS,TMP(II,JJ,KK))
NODE_TMP(NODE_INDEX,NM) = NODE_TMP(NODE_INDEX,NM) + TMP(II,JJ,KK)*AREA
NODE_H(NODE_INDEX,NM) = NODE_H(NODE_INDEX,NM) + HGAS * AREA
NODE_TMP(NODE_INDEX) = NODE_TMP(NODE_INDEX) + TMP(II,JJ,KK)*AREA
NODE_H(NODE_INDEX) = NODE_H(NODE_INDEX) + HGAS * AREA

SELECT CASE (IOR)
CASE (3)
P_AVE = 0.5_EB*(PBARP(KK-1,B1%PRESSURE_ZONE)+PBARP(KK,B1%PRESSURE_ZONE))
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + Z(KK-1)*AREA
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + Z(KK-1)*AREA
CASE (-3)
P_AVE = 0.5_EB*(PBARP(KK,B1%PRESSURE_ZONE)+PBARP(KK+1,B1%PRESSURE_ZONE))
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + Z(KK)*AREA
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + Z(KK)*AREA
CASE DEFAULT
P_AVE = PBARP(KK,B1%PRESSURE_ZONE)
NODE_Z(NODE_INDEX,NM) = NODE_Z(NODE_INDEX,NM) + ZC(KK)*AREA
NODE_Z(NODE_INDEX) = NODE_Z(NODE_INDEX) + ZC(KK)*AREA
END SELECT
NODE_P(NODE_INDEX,NM) = NODE_P(NODE_INDEX,NM) + P_AVE*AREA
NODE_P(NODE_INDEX) = NODE_P(NODE_INDEX) + P_AVE*AREA

ENDIF ZONE_LEAK_IF

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

Expand All @@ -3042,20 +3022,14 @@ SUBROUTINE COLLAPSE_HVAC_BC(T)
VENT_CUSTOM_AMBIENT: DO NN=1,N_DUCTNODES
DN => DUCTNODE(NN)
IF (.NOT. DN%LEAKAGE) THEN
DN%ZONE_INDEX = MAXVAL(NODE_ZONE(NN,:))
ZONE_TEST = 0
WHERE (NODE_ZONE(NN,:) /=0) ZONE_TEST = NODE_ZONE(NN,:) - DN%ZONE_INDEX
IF (ANY(ZONE_TEST /=0)) THEN
WRITE(MESSAGE,'(A,A)') 'ERROR(552): Ductnode must lie with a single pressure zone. Node: ',TRIM(DUCTNODE(NN)%ID)
CALL SHUTDOWN(MESSAGE); RETURN
ENDIF
DN%ZONE_INDEX = NODE_ZONE(NN)
IF (CONNECTED_ZONES(0,DN%ZONE_INDEX)>0) DN%ZONE_INDEX = 0
ENDIF

INTERNAL_NODE_IF: IF (((DN%VENT .OR. DN%LEAKAGE) .AND. .NOT. DN%AMBIENT) .OR. &
(DN%AMBIENT .AND. SUM(NODE_AREA(NN,:)) > 0._EB)) THEN
(DN%AMBIENT .AND. NODE_AREA(NN) > 0._EB)) THEN
ZZ_GET = 0._EB
AREA = SUM(NODE_AREA(NN,:))
AREA = NODE_AREA(NN)
IF (AREA<=TWO_EPSILON_EB) THEN
DUCT(DN%DUCT_INDEX(1))%AREA = 0._EB
DUCT(DN%DUCT_INDEX(1))%VEL = 0._EB
Expand All @@ -3064,13 +3038,13 @@ SUBROUTINE COLLAPSE_HVAC_BC(T)
DUCT(DN%DUCT_INDEX(1))%AREA = DUCT(DN%DUCT_INDEX(1))%AREA_INITIAL
ENDIF
NODE_AREA_EX(NN) = AREA
DN%XYZ(1) = SUM(NODE_X(NN,:))/AREA
DN%XYZ(2) = SUM(NODE_Y(NN,:))/AREA
DN%XYZ(3) = SUM(NODE_Z(NN,:))/AREA
RHO_SUM = SUM(NODE_RHO(NN,:))
DN%XYZ(1) = NODE_X(NN)/AREA
DN%XYZ(2) = NODE_Y(NN)/AREA
DN%XYZ(3) = NODE_Z(NN)/AREA
RHO_SUM = NODE_RHO(NN)

DO NS=1,N_TRACKED_SPECIES
DN%ZZ_V(NS) = SUM(NODE_ZZ(NN,NS,:))/AREA
DN%ZZ_V(NS) = NODE_ZZ(NN,NS)/AREA
ENDDO


Expand All @@ -3095,12 +3069,12 @@ SUBROUTINE COLLAPSE_HVAC_BC(T)
ENDIF

IF (DN%LEAKAGE) THEN
IF(ABS(T-T_BEGIN) < TWO_EPSILON_EB) DN%P_OLD = SUM(NODE_P(NN,:))/AREA
IF(ABS(T-T_BEGIN) < TWO_EPSILON_EB) DN%P_OLD = NODE_P(NN)/AREA
ENDIF

DN%P = HVAC_PRES_RELAX*(SUM(NODE_P(NN,:))/AREA)+(1._EB-HVAC_PRES_RELAX)*DN%P_OLD
DN%TMP_V = SUM(NODE_TMP(NN,:))/AREA
HGAS = SUM(NODE_H(NN,:))/AREA
DN%P = HVAC_PRES_RELAX*(NODE_P(NN)/AREA)+(1._EB-HVAC_PRES_RELAX)*DN%P_OLD
DN%TMP_V = NODE_TMP(NN)/AREA
HGAS = NODE_H(NN)/AREA
CALL GET_TEMPERATURE(DN%TMP_V,HGAS,ZZ_GET)
CALL GET_ENTHALPY(ZZ_GET,HGAS,DN%TMP_V)
DN%CP_V = HGAS/DN%TMP_V
Expand All @@ -3109,7 +3083,7 @@ SUBROUTINE COLLAPSE_HVAC_BC(T)

AMBIENT_LEAK: DO NN=1,N_DUCTNODES
DN => DUCTNODE(NN)
IF (DN%AMBIENT .AND. SUM(NODE_AREA(NN,:))<=TWO_EPSILON_EB) THEN
IF (DN%AMBIENT .AND. NODE_AREA(NN)<=TWO_EPSILON_EB) THEN
!Initialize ambient nodes outside domain
IF (DUCT(DN%DUCT_INDEX(1))%NODE_INDEX(1)==NN) THEN
DN2 => DUCTNODE(DUCT(DN%DUCT_INDEX(1))%NODE_INDEX(2))
Expand Down
Loading
Loading