Skip to content

Commit 67b3756

Browse files
committed
FDS Source: Issue #14401. Streamline exchange of vent areas
1 parent 5152226 commit 67b3756

File tree

3 files changed

+12
-22
lines changed

3 files changed

+12
-22
lines changed

Source/cons.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ MODULE GLOBAL_CONSTANTS
759759
LOGICAL, ALLOCATABLE, DIMENSION(:) :: EXTERNAL_CTRL
760760

761761
! VENT array
762-
REAL(EB), ALLOCATABLE, DIMENSION(:,:) :: VENT_TOTAL_AREA
762+
REAL(EB), ALLOCATABLE, DIMENSION(:) :: VENT_TOTAL_AREA !< Array holding grid-snapped areas for all vents
763763

764764
END MODULE GLOBAL_CONSTANTS
765765

Source/main.f90

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ PROGRAM FDS
7272
CHARACTER(MPI_MAX_PROCESSOR_NAME) :: PNAME
7373
LOGICAL, ALLOCATABLE, DIMENSION(:) :: LOGICAL_BUFFER_EXTERNAL
7474
REAL(EB), ALLOCATABLE, DIMENSION(:) :: REAL_BUFFER_DUCT,REAL_BUFFER_EXTERNAL
75-
REAL(EB), ALLOCATABLE, DIMENSION(:,:) :: REAL_BUFFER_10,REAL_BUFFER_20,REAL_BUFFER_VENT
75+
REAL(EB), ALLOCATABLE, DIMENSION(:,:) :: REAL_BUFFER_10,REAL_BUFFER_20
7676

7777
! Initialize OpenMP
7878

@@ -1053,7 +1053,6 @@ SUBROUTINE MPI_INITIALIZATION_CHORES(TASK_NUMBER)
10531053
ALLOCATE(REAL_BUFFER_DUCT((2+N_TRACKED_SPECIES)*N_DUCTNODES+N_DUCTS))
10541054
ALLOCATE(REAL_BUFFER_10(10,NMESHES))
10551055
ALLOCATE(REAL_BUFFER_20(20,NMESHES))
1056-
ALLOCATE(REAL_BUFFER_VENT(N_VENT_TOTAL,NMESHES))
10571056

10581057
IF (READ_EXTERNAL) THEN
10591058
ALLOCATE(REAL_BUFFER_EXTERNAL(N_RAMP))
@@ -1064,13 +1063,11 @@ SUBROUTINE MPI_INITIALIZATION_CHORES(TASK_NUMBER)
10641063
ALLOCATE(COUNTS_10(0:N_MPI_PROCESSES-1))
10651064
ALLOCATE(COUNTS_20(0:N_MPI_PROCESSES-1))
10661065
ALLOCATE(COUNTS_TP(0:N_MPI_PROCESSES-1))
1067-
ALLOCATE(COUNTS_VENT(0:N_MPI_PROCESSES-1))
10681066

10691067
ALLOCATE(DISPLS(0:N_MPI_PROCESSES-1))
10701068
ALLOCATE(DISPLS_10(0:N_MPI_PROCESSES-1))
10711069
ALLOCATE(DISPLS_20(0:N_MPI_PROCESSES-1))
10721070
ALLOCATE(DISPLS_TP(0:N_MPI_PROCESSES-1))
1073-
ALLOCATE(DISPLS_VENT(0:N_MPI_PROCESSES-1))
10741071
ALLOCATE(I_OFFSET(NMESHES))
10751072

10761073
COUNTS = 0
@@ -1095,8 +1092,6 @@ SUBROUTINE MPI_INITIALIZATION_CHORES(TASK_NUMBER)
10951092
DISPLS(N) = COUNTS(N-1) + DISPLS(N-1)
10961093
DISPLS_TP(N) = COUNTS_TP(N-1) + DISPLS_TP(N-1)
10971094
ENDDO
1098-
COUNTS_VENT = COUNTS*N_VENT_TOTAL
1099-
DISPLS_VENT = DISPLS*N_VENT_TOTAL
11001095
COUNTS_10 = COUNTS*10
11011096
DISPLS_10 = DISPLS*10
11021097
COUNTS_20 = COUNTS*20
@@ -4275,22 +4270,17 @@ SUBROUTINE CHECK_FREEZE_VELOCITY_STATUS
42754270
END SUBROUTINE CHECK_FREEZE_VELOCITY_STATUS
42764271

42774272

4278-
!> \brief Exchange FDS VENT areas so each process knows the total FDS area
4273+
!> \brief Sum up local grid-snapped or "FDS" VENT areas so that each process knows the total vent area spanning multiple meshes
42794274

42804275
SUBROUTINE EXCHANGE_VENT_AREA
4281-
INTEGER:: NM,NV
4276+
INTEGER :: NM,NV
42824277

4283-
IF (N_MPI_PROCESSES>1) THEN
4284-
REAL_BUFFER_VENT = VENT_TOTAL_AREA
4285-
CALL MPI_ALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,REAL_BUFFER_VENT,&
4286-
COUNTS_VENT,DISPLS_VENT,MPI_DOUBLE_PRECISION,MPI_COMM_WORLD,IERR)
4287-
VENT_TOTAL_AREA = REAL_BUFFER_VENT
4288-
ENDIF
4278+
CALL MPI_ALLREDUCE(MPI_IN_PLACE,VENT_TOTAL_AREA,N_VENT_TOTAL,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,IERR)
42894279

4290-
DO NM=1,NMESHES
4291-
IF (PROCESS(NM)/=MY_RANK) CYCLE
4292-
DO NV=1,MESHES(NM)%N_VENT
4293-
MESHES(NM)%VENTS(NV)%TOTAL_FDS_AREA=SUM(VENT_TOTAL_AREA(MESHES(NM)%VENTS(NV)%TOTAL_INDEX,:))
4280+
DO NM=LOWER_MESH_INDEX,UPPER_MESH_INDEX
4281+
M => MESHES(NM)
4282+
DO NV=1,M%N_VENT
4283+
M%VENTS(NV)%TOTAL_FDS_AREA = VENT_TOTAL_AREA(M%VENTS(NV)%TOTAL_INDEX)
42944284
ENDDO
42954285
ENDDO
42964286

Source/read.f90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11777,7 +11777,7 @@ SUBROUTINE READ_VENT
1177711777

1177811778
IF (I_MODE==2) THEN
1177911779
ALLOCATE(MESHES(NM)%VENTS(N_VENT),STAT=IZERO) ; CALL ChkMemErr('READ','VENTS',IZERO) ; VENTS=>MESHES(NM)%VENTS
11780-
IF (.NOT. ALLOCATED(VENT_TOTAL_AREA)) ALLOCATE(VENT_TOTAL_AREA(N_VENT_TOTAL,NMESHES),STAT=IZERO) ! Only once per MPI process
11780+
IF (.NOT. ALLOCATED(VENT_TOTAL_AREA)) ALLOCATE(VENT_TOTAL_AREA(N_VENT_TOTAL),STAT=IZERO) ! Only once per MPI process
1178111781
CALL ChkMemErr('READ','VENT_TOTAL_AREA',IZERO); VENT_TOTAL_AREA = 0._EB
1178211782
IF (MY_RANK==0 .AND. .NOT.ALLOCATED(ORIGINAL_VENTS)) ALLOCATE(ORIGINAL_VENTS(N_ORIGINAL_VENTS))
1178311783
ENDIF
@@ -11787,7 +11787,7 @@ SUBROUTINE READ_VENT
1178711787
N_VENT = 0 ! Number of VENTs stored by each mesh
1178811788
N_TOTAL = 0 ! Counter of all VENTs, both explicit and implicit
1178911789
N_EXPLICIT = 0 ! Counter of explicitly declared VENTs
11790-
N_VENT_TOTAL = 0 ! Purely for Smokeview drawing of VENTs
11790+
N_VENT_TOTAL = 0 ! Total number of all vents throughout the whole domain
1179111791
N_ORIGINAL_VENTS = 0 ! Number of specified vents for use with Smokeview and HVAC drawing
1179211792

1179311793
REWIND(LU_INPUT) ; INPUT_FILE_LINE_NUMBER = 0
@@ -12443,7 +12443,7 @@ SUBROUTINE READ_VENT
1244312443
ENDDO
1244412444
ENDDO
1244512445
END SELECT
12446-
VENT_TOTAL_AREA(VT%TOTAL_INDEX,NM) = VT%FDS_AREA
12446+
VENT_TOTAL_AREA(VT%TOTAL_INDEX) = VENT_TOTAL_AREA(VT%TOTAL_INDEX) + VT%FDS_AREA
1244712447
ENDDO VENT_LOOP_3
1244812448

1244912449
ENDDO MESH_LOOP_2

0 commit comments

Comments
 (0)