diff --git a/Source/cons.f90 b/Source/cons.f90 index 178c412acb2..a57a166052c 100644 --- a/Source/cons.f90 +++ b/Source/cons.f90 @@ -633,8 +633,7 @@ MODULE GLOBAL_CONSTANTS ! Number of initial value, pressure zone, and multiplier derived types INTEGER :: N_INIT,N_ZONE,N_MULT,N_MOVE -LOGICAL, ALLOCATABLE, DIMENSION(:,:) :: CONNECTED_ZONES -INTEGER, ALLOCATABLE, DIMENSION(:,:) :: CONNECTED_ZONES_LOC +INTEGER, ALLOCATABLE, DIMENSION(:,:) :: CONNECTED_ZONES REAL(EB) :: MINIMUM_ZONE_VOLUME=0._EB REAL(EB) :: PRESSURE_RELAX_TIME=1._EB diff --git a/Source/divg.f90 b/Source/divg.f90 index c2ed9e4d16e..be1160bc814 100644 --- a/Source/divg.f90 +++ b/Source/divg.f90 @@ -1114,15 +1114,15 @@ SUBROUTINE MERGE_PRESSURE_ZONES IPZ = PRESSURE_ZONE(BC%IIG,BC%JJG,BC%KKG) IOPZ = PRESSURE_ZONE(BC%II,BC%JJ,BC%KK) IF (IW>N_EXTERNAL_WALL_CELLS .AND. IPZ/=IOPZ) THEN - CONNECTED_ZONES(IOPZ,IPZ) = .TRUE. - CONNECTED_ZONES(IPZ,IOPZ) = .TRUE. + CONNECTED_ZONES(IOPZ,IPZ) = 1 + CONNECTED_ZONES(IPZ,IOPZ) = 1 ENDIF IF (WC%BOUNDARY_TYPE==OPEN_BOUNDARY) THEN - CONNECTED_ZONES(0,IPZ) = .TRUE. - CONNECTED_ZONES(IPZ,0) = .TRUE. + CONNECTED_ZONES(0,IPZ) = 1 + CONNECTED_ZONES(IPZ,0) = 1 ELSEIF (WC%BOUNDARY_TYPE==INTERPOLATED_BOUNDARY) THEN - CONNECTED_ZONES(IOPZ,IPZ) = .TRUE. - CONNECTED_ZONES(IPZ,IOPZ) = .TRUE. + CONNECTED_ZONES(IOPZ,IPZ) = 1 + CONNECTED_ZONES(IPZ,IOPZ) = 1 ENDIF ENDDO @@ -1294,7 +1294,7 @@ SUBROUTINE DIVERGENCE_PART_2(DT,NM) SUM_PSUM = PSUM(IPZ) DO IOPZ=N_ZONE,0,-1 IF (IOPZ==IPZ) CYCLE - IF (CONNECTED_ZONES(IPZ,IOPZ)) THEN + IF (CONNECTED_ZONES(IPZ,IOPZ)>0) THEN IF (IOPZ==0) THEN OPEN_ZONE = .TRUE. ELSE diff --git a/Source/hvac.f90 b/Source/hvac.f90 index 83d476e9bfa..3cb6ea6b799 100644 --- a/Source/hvac.f90 +++ b/Source/hvac.f90 @@ -1873,7 +1873,7 @@ SUBROUTINE DPSTARCALC PSUM_TOT(IPZ) = PSUM(IPZ) DO IOPZ = 1,N_ZONE IF (IPZ==IOPZ) CYCLE - IF (CONNECTED_ZONES(IPZ,IOPZ)) PSUM_TOT(IPZ) = PSUM_TOT(IPZ) + PSUM(IOPZ) + IF (CONNECTED_ZONES(IPZ,IOPZ)>0) PSUM_TOT(IPZ) = PSUM_TOT(IPZ) + PSUM(IOPZ) ENDDO ENDDO @@ -1888,7 +1888,7 @@ SUBROUTINE DPSTARCALC DO IOPZ = 1, N_ZONE IF (IPZ==IOPZ) CYCLE IF (P_ZONE(IOPZ)%N_DUCTNODES==0) CYCLE - IF (CONNECTED_ZONES(IPZ,IOPZ)) THEN + IF (CONNECTED_ZONES(IPZ,IOPZ)>0) THEN IF (P_ZONE(IOPZ)%N_DUCTNODES==0) CYCLE DPSTAR(IOPZ) = DPSTAR(IOPZ) - DN%DIR(1) * DU%AREA * DU%VEL(OLD) * DT_HV/PSUM_TOT(IPZ) IF (DU%FIXED) DPSTAR(IOPZ) = DPSTAR(IOPZ) + DN%DIR(1) * DU%AREA * DU%VEL(NEW) * DT_HV/PSUM_TOT(IPZ) @@ -3049,7 +3049,7 @@ SUBROUTINE COLLAPSE_HVAC_BC(T) WRITE(MESSAGE,'(A,A)') 'ERROR(552): Ductnode must lie with a single pressure zone. Node: ',TRIM(DUCTNODE(NN)%ID) CALL SHUTDOWN(MESSAGE); RETURN ENDIF - IF (CONNECTED_ZONES(0,DN%ZONE_INDEX)) DN%ZONE_INDEX = 0 + 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. & diff --git a/Source/main.f90 b/Source/main.f90 index 875609ba431..efbdfd624be 100644 --- a/Source/main.f90 +++ b/Source/main.f90 @@ -1361,13 +1361,7 @@ SUBROUTINE MPI_INITIALIZATION_CHORES(TASK_NUMBER) ! Allocate a few arrays needed to exchange divergence and pressure info among meshes - ALLOCATE(CONNECTED_ZONES(0:N_ZONE,0:N_ZONE),STAT=IZERO) - CALL ChkMemErr('INIT','CONNECTED_ZONES',IZERO) - CONNECTED_ZONES = .FALSE. - - ALLOCATE(CONNECTED_ZONES_LOC(0:N_ZONE,0:N_ZONE),STAT=IZERO) - CALL ChkMemErr('INIT','CONNECTED_ZONES_LOC',IZERO) - CONNECTED_ZONES_LOC = 0 + ALLOCATE(CONNECTED_ZONES(0:N_ZONE,0:N_ZONE),STAT=IZERO) ; CALL ChkMemErr('INIT','CONNECTED_ZONES',IZERO) ; CONNECTED_ZONES=0 ALLOCATE(DSUM(N_ZONE),STAT=IZERO) ; CALL ChkMemErr('MAIN','DSUM',IZERO) ; DSUM = 0._EB ALLOCATE(PSUM(N_ZONE),STAT=IZERO) ; CALL ChkMemErr('MAIN','PSUM',IZERO) ; PSUM = 0._EB @@ -1792,9 +1786,9 @@ SUBROUTINE INITIALIZE_DIVERGENCE_INTEGRALS DSUM = 0._EB IF (OBST_CREATED_OR_REMOVED) THEN - CONNECTED_ZONES = .FALSE. + CONNECTED_ZONES = 0 DO IPZ=0,N_ZONE - CONNECTED_ZONES(IPZ,IPZ) = .TRUE. + CONNECTED_ZONES(IPZ,IPZ) = 1 ENDDO ENDIF @@ -1817,15 +1811,16 @@ SUBROUTINE EXCHANGE_DIVERGENCE_INFO CALL MPI_ALLREDUCE(MPI_IN_PLACE,DSUM,N_ZONE,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,IERR) CALL MPI_ALLREDUCE(MPI_IN_PLACE,PSUM,N_ZONE,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,IERR) CALL MPI_ALLREDUCE(MPI_IN_PLACE,USUM,N_ZONE,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,IERR) - CALL MPI_ALLREDUCE(MPI_IN_PLACE,CONNECTED_ZONES,(N_ZONE+1)**2,MPI_LOGICAL,MPI_LOR,MPI_COMM_WORLD,IERR) ENDIF ! Connect zones to others which are not directly connected IF (OBST_CREATED_OR_REMOVED) THEN + IF (N_MPI_PROCESSES>1) CALL MPI_ALLREDUCE(MPI_IN_PLACE,CONNECTED_ZONES,(N_ZONE+1)**2,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,IERR) DO IPZ=1,N_ZONE CONNECTED_ZONES = MATMUL(CONNECTED_ZONES,CONNECTED_ZONES) ENDDO + CONNECTED_ZONES = MIN(1,CONNECTED_ZONES) ENDIF T_USED(11)=T_USED(11) + CURRENT_TIME() - TNOW diff --git a/Source/pres.f90 b/Source/pres.f90 index 56c673748c4..6d25c49278a 100644 --- a/Source/pres.f90 +++ b/Source/pres.f90 @@ -1180,26 +1180,11 @@ SUBROUTINE ULMAT_SOLVER_SETUP(NM) CALL ChkMemErr('INIT','ZONE_MESH',IZERO) ENDIF -! Identify connected ZONEs +! Select the parent zone as the first in the row -! translate logical array to local and fill diagonal -CONNECTED_ZONES_LOC = 0 -DO IOPZ=0,N_ZONE - DO IPZ=0,N_ZONE - IF (IPZ==IOPZ .OR. CONNECTED_ZONES(IPZ,IOPZ)) CONNECTED_ZONES_LOC(IPZ,IOPZ) = 1 - ENDDO -ENDDO - -! establish sets of connected zones -DO IPZ=1,N_ZONE - CONNECTED_ZONES_LOC = MATMUL(CONNECTED_ZONES_LOC,CONNECTED_ZONES_LOC) -ENDDO -CONNECTED_ZONES_LOC = MIN(1,CONNECTED_ZONES_LOC) - -! select the parent zone as the first in the row DO IPZ=0,N_ZONE ZM=>MESHES(NM)%ZONE_MESH(IPZ) - ZM%CONNECTED_ZONE_PARENT = MINLOC(CONNECTED_ZONES_LOC(IPZ,:), DIM=1, MASK = CONNECTED_ZONES_LOC(IPZ,:)/=0) - 1 + ZM%CONNECTED_ZONE_PARENT = MINLOC(CONNECTED_ZONES(IPZ,:), DIM=1, MASK=CONNECTED_ZONES(IPZ,:)/=0) - 1 ENDDO ! Test if FFT solver can be used for this MESH @@ -1212,7 +1197,7 @@ SUBROUTINE ULMAT_SOLVER_SETUP(NM) IF (ZM%CONNECTED_ZONE_PARENT/=IPZ) CYCLE ZONE_MESH_LOOP ! Test for multiple zones in MESH - NZIM=SUM(CONNECTED_ZONES_LOC(IPZ,:)) + NZIM=SUM(CONNECTED_ZONES(IPZ,:)) IF (NZIM>1) ZM%USE_FFT=.FALSE. IPZIM=IPZ @@ -4827,24 +4812,11 @@ SUBROUTINE GET_MATRIX_INDEXES_H DO NM=LOWER_MESH_INDEX,UPPER_MESH_INDEX ! Initialize unknown numbers for H: MESHES(NM)%CCVAR(:,:,:,UNKH) = IS_UNDEFINED - ! Identify connected ZONEs - ! translate logical array to local and fill diagonal - CONNECTED_ZONES_LOC = 0 - DO IOPZ=0,N_ZONE - DO IPZ=0,N_ZONE - IF (IPZ==IOPZ .OR. CONNECTED_ZONES(IPZ,IOPZ)) CONNECTED_ZONES_LOC(IPZ,IOPZ) = 1 - ENDDO - ENDDO - ! establish sets of connected zones - DO IPZ=1,N_ZONE - CONNECTED_ZONES_LOC = MATMUL(CONNECTED_ZONES_LOC,CONNECTED_ZONES_LOC) - ENDDO - CONNECTED_ZONES_LOC = MIN(1,CONNECTED_ZONES_LOC) - ! select the parent zone as the first in the row + ! Select the parent zone as the first in the row DO IPZ=0,N_ZONE ZSL => ZONE_SOLVE(IPZ) IF(.NOT.PRES_ON_WHOLE_DOMAIN) & - ZSL%CONNECTED_ZONE_PARENT = MINLOC(CONNECTED_ZONES_LOC(IPZ,:), DIM=1, MASK = CONNECTED_ZONES_LOC(IPZ,:)/=0) - 1 + ZSL%CONNECTED_ZONE_PARENT = MINLOC(CONNECTED_ZONES(IPZ,:), DIM=1, MASK=CONNECTED_ZONES(IPZ,:)/=0) - 1 ENDDO ENDDO