Skip to content

Commit 8bb0765

Browse files
committed
FDS Source: firemodels/smv#2085. Add flags to indicate OBST face hidden
1 parent 88b344a commit 8bb0765

File tree

4 files changed

+50
-43
lines changed

4 files changed

+50
-43
lines changed

Source/dump.f90

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2223,12 +2223,13 @@ SUBROUTINE WRITE_SMOKEVIEW_FILE
22232223
DO N=1,M%N_OBST
22242224
OB => M%OBSTRUCTION(N)
22252225
IF (OB%COLOR_INDICATOR/=-3) THEN
2226-
WRITE(MYSTR,'(8I5,A,L1)') OB%I1,OB%I2,OB%J1,OB%J2,OB%K1,OB%K2,OB%COLOR_INDICATOR,OB%TYPE_INDICATOR, &
2227-
' ! ',OB%REMOVABLE; CALL ADDSTR
2226+
WRITE(MYSTR,'(8I5,A,L1,1X,6I2)') OB%I1,OB%I2,OB%J1,OB%J2,OB%K1,OB%K2,OB%COLOR_INDICATOR,OB%TYPE_INDICATOR, &
2227+
' ! ',OB%REMOVABLE,OB%EXPOSED_FACE_INDEX(1:6)
22282228
ELSE
2229-
WRITE(MYSTR,'(8I5,4F13.5,A,L1)') OB%I1,OB%I2,OB%J1,OB%J2,OB%K1,OB%K2,OB%COLOR_INDICATOR,OB%TYPE_INDICATOR, &
2230-
REAL(OB%RGB,FB)/255._FB, OB%TRANSPARENCY,' ! ',OB%REMOVABLE; CALL ADDSTR
2229+
WRITE(MYSTR,'(8I5,4F13.5,A,L1,1X,6I2)') OB%I1,OB%I2,OB%J1,OB%J2,OB%K1,OB%K2,OB%COLOR_INDICATOR,OB%TYPE_INDICATOR, &
2230+
REAL(OB%RGB,FB)/255._FB, OB%TRANSPARENCY,' ! ',OB%REMOVABLE,OB%EXPOSED_FACE_INDEX(1:6)
22312231
ENDIF
2232+
CALL ADDSTR
22322233
ENDDO
22332234

22342235
! Count circular vents

Source/init.f90

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -771,7 +771,7 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
771771
DO J=OB%J1+1,OB%J2
772772
I = OB%I1+1
773773
! Don't assign wall cell index to obstruction face pointing out of the computational domain
774-
IF (I==1) CYCLE
774+
IF (I==1) THEN ; OB%EXPOSED_FACE_INDEX(1)=1 ; CYCLE ; ENDIF
775775
IC = M%CELL_INDEX(I-1,J,K)
776776
IF (M%CELL(IC)%SOLID .AND. .NOT.M%OBSTRUCTION(M%CELL(IC)%OBST_INDEX)%REMOVABLE) CYCLE ! Permanently covered face
777777
IOR = -1
@@ -794,7 +794,7 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
794794
DO J=OB%J1+1,OB%J2
795795
I = OB%I2
796796
! Don't assign wall cell index to obstruction face pointing out of the computational domain
797-
IF (I==M%IBAR) CYCLE
797+
IF (I==M%IBAR) THEN ; OB%EXPOSED_FACE_INDEX(2)=1 ; CYCLE ; ENDIF
798798
IC = M%CELL_INDEX(I+1,J,K)
799799
! Permanently covered face
800800
IF (M%CELL(IC)%SOLID .AND. .NOT.M%OBSTRUCTION(M%CELL(IC)%OBST_INDEX)%REMOVABLE) CYCLE
@@ -818,7 +818,7 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
818818
DO I=OB%I1+1,OB%I2
819819
J = OB%J1+1
820820
! Don't assign wall cell index to obstruction face pointing out of the computational domain
821-
IF (J==1) CYCLE
821+
IF (J==1) THEN ; OB%EXPOSED_FACE_INDEX(3)=1 ; CYCLE ; ENDIF
822822
IC = M%CELL_INDEX(I,J-1,K)
823823
! Permanently covered face
824824
IF (M%CELL(IC)%SOLID .AND. .NOT.M%OBSTRUCTION(M%CELL(IC)%OBST_INDEX)%REMOVABLE) CYCLE
@@ -842,7 +842,7 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
842842
DO I=OB%I1+1,OB%I2
843843
J = OB%J2
844844
! Don't assign wall cell index to obstruction face pointing out of the computational domain
845-
IF (J==M%JBAR) CYCLE
845+
IF (J==M%JBAR) THEN ; OB%EXPOSED_FACE_INDEX(4)=1 ; CYCLE ; ENDIF
846846
IC = M%CELL_INDEX(I,J+1,K)
847847
! Permanently covered face
848848
IF (M%CELL(IC)%SOLID .AND. .NOT.M%OBSTRUCTION(M%CELL(IC)%OBST_INDEX)%REMOVABLE) CYCLE
@@ -866,7 +866,7 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
866866
DO I=OB%I1+1,OB%I2
867867
K = OB%K1+1
868868
! Don't assign wall cell index to obstruction face pointing out of the computational domain
869-
IF (K==1) CYCLE
869+
IF (K==1) THEN ; OB%EXPOSED_FACE_INDEX(5)=1 ; CYCLE ; ENDIF
870870
IC = M%CELL_INDEX(I,J,K-1)
871871
! Permanently covered face
872872
IF (M%CELL(IC)%SOLID .AND. .NOT.M%OBSTRUCTION(M%CELL(IC)%OBST_INDEX)%REMOVABLE) CYCLE
@@ -890,7 +890,7 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
890890
DO I=OB%I1+1,OB%I2
891891
K = OB%K2
892892
! Don't assign wall cell index to obstruction face pointing out of the computational domain
893-
IF (K==M%KBAR) CYCLE
893+
IF (K==M%KBAR) THEN ; OB%EXPOSED_FACE_INDEX(6)=1 ; CYCLE ; ENDIF
894894
IC = M%CELL_INDEX(I,J,K+1)
895895
! Permanently covered face
896896
IF (M%CELL(IC)%SOLID .AND. .NOT.M%OBSTRUCTION(M%CELL(IC)%OBST_INDEX)%REMOVABLE) CYCLE
@@ -2891,7 +2891,7 @@ SUBROUTINE INIT_WALL_CELL(NM,I,J,K,OBST_INDEX,IW,IOR,SURF_INDEX,IERR,TT)
28912891
REAL(EB), INTENT(IN) :: TT
28922892
REAL(EB) :: PX,PY,PZ,T_ACTIVATE,XIN,YIN,ZIN,DIST,XW,YW,ZW,RDN,AW,TSI,&
28932893
ZZ_GET(1:N_TRACKED_SPECIES),RSUM_F,R1,RR,DELTA
2894-
INTEGER :: N,SURF_INDEX_NEW,IIG,JJG,KKG,IIO,JJO,KKO,IC,ICG,ICO,NOM_CHECK(0:1),BOUNDARY_TYPE
2894+
INTEGER :: N,SURF_INDEX_NEW,IIG,JJG,KKG,IIO,JJO,KKO,IC,ICG,ICO,NOM_CHECK(0:1),BOUNDARY_TYPE,FI
28952895
LOGICAL :: VENT_FOUND,ALIGNED
28962896
TYPE (MESH_TYPE), POINTER :: M,MM
28972897
TYPE (OBSTRUCTION_TYPE), POINTER :: OBX
@@ -3195,6 +3195,17 @@ SUBROUTINE INIT_WALL_CELL(NM,I,J,K,OBST_INDEX,IW,IOR,SURF_INDEX,IERR,TT)
31953195

31963196
ENDIF CHECK_MESHES
31973197

3198+
! If this wall cell is attached to an OBST, check if the OBST face is exposed
3199+
3200+
IF (OBST_INDEX>0) THEN
3201+
IF (.NOT.M%CELL(ICG)%SOLID .OR. M%OBSTRUCTION(M%CELL(ICG)%OBST_INDEX)%REMOVABLE) THEN
3202+
FI = ABS(IOR)*2 ; IF (IOR<0) FI = FI-1
3203+
M%OBSTRUCTION(OBST_INDEX)%EXPOSED_FACE_INDEX(FI) = 1
3204+
ENDIF
3205+
ENDIF
3206+
3207+
! Ensure that the WALL_INDEX and SURF_INDEX can be identified from the abutting gas phase cell, ICG
3208+
31983209
M%CELL(ICG)%WALL_INDEX(-IOR) = IW
31993210
M%CELL(ICG)%SURF_INDEX(-IOR) = SURF_INDEX_NEW
32003211

Source/main.f90

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -78,23 +78,24 @@ PROGRAM FDS
7878

7979
CALL OPENMP_INIT
8080

81-
! output version info if fds is invoked without any arguments
82-
! (this must be done before MPI is initialized)
81+
! Output version info if fds is invoked without any arguments. This must be done before MPI is initialized.
8382

8483
CALL VERSION_INFO
8584

86-
! Initialize MPI (First executable lines of code)
85+
! Initialize MPI
8786

8887
CALL MPI_INIT_THREAD(REQUIRED,PROVIDED,IERR)
8988
CALL MPI_COMM_RANK(MPI_COMM_WORLD, MY_RANK, IERR)
9089
CALL MPI_COMM_SIZE(MPI_COMM_WORLD, N_MPI_PROCESSES, IERR)
9190
CALL MPI_GET_PROCESSOR_NAME(PNAME, PNAMELEN, IERR)
9291

92+
! Write out MPI process info to standard error (LU_ERR=0)
93+
9394
IF (MY_RANK==0) WRITE(LU_ERR,'(/A/)') ' Starting FDS ...'
94-
CALL MPI_BARRIER(MPI_COMM_WORLD, IERR)
9595

96+
CALL MPI_BARRIER(MPI_COMM_WORLD,IERR)
9697
WRITE(LU_ERR,'(A,I6,A,A)') ' MPI Process ',MY_RANK,' started on ',PNAME(1:PNAMELEN)
97-
CALL MPI_BARRIER(MPI_COMM_WORLD, IERR)
98+
CALL MPI_BARRIER(MPI_COMM_WORLD,IERR)
9899

99100
! Check that MPI processes and OpenMP threads are working properly
100101

@@ -107,14 +108,13 @@ PROGRAM FDS
107108
CPU_TIME_START = CPUTIME
108109
ALLOCATE(T_USED(N_TIMERS)) ; T_USED = 0._EB ; T_USED(1) = CURRENT_TIME()
109110

110-
! Assign a compilation date (All Nodes)
111+
! Assign a compilation date
111112

112-
CALL GET_INFO (REVISION,REVISION_DATE,COMPILE_DATE)
113+
CALL GET_INFO(REVISION,REVISION_DATE,COMPILE_DATE)
113114

114115
! Read input from CHID.fds file and stop the code if any errors are found
115116

116-
CALL READ_DATA(DT)
117-
CALL STOP_CHECK(1)
117+
CALL READ_DATA(DT) ; CALL STOP_CHECK(1)
118118

119119
IF (MY_RANK==0) THEN
120120
CALL WRITE_SUMMARY_INFO(LU_ERR,.TRUE.)
@@ -137,27 +137,10 @@ PROGRAM FDS
137137
COUNTS,DISPLS,MPI_DOUBLE_PRECISION,MPI_COMM_WORLD,IERR)
138138
IF (MAXVAL(MAX_CELL_ASPECT_RATIO)>3.99_EB .AND. .NOT.CFL_VELOCITY_NORM_USER_SPECIFIED) CFL_VELOCITY_NORM=1
139139

140-
! Open and write to Smokeview and status files
140+
! Create output file names
141141

142142
CALL ASSIGN_FILE_NAMES
143143

144-
CALL WRITE_SMOKEVIEW_FILE
145-
146-
! Shut down the run if it is only for checking the set up
147-
148-
IF (SETUP_ONLY .AND. .NOT.CHECK_MESH_ALIGNMENT) STOP_STATUS = SETUP_ONLY_STOP
149-
150-
! Check for errors and shutdown if found
151-
152-
CALL STOP_CHECK(1)
153-
154-
! MPI process 0 reopens the Smokeview file for additional output
155-
156-
IF (MY_RANK==0) THEN
157-
OPEN(LU_SMV,FILE=FN_SMV,FORM='FORMATTED', STATUS='OLD',POSITION='APPEND')
158-
CALL WRITE_STATUS_FILES
159-
ENDIF
160-
161144
! Start the clock
162145

163146
T = T_BEGIN
@@ -200,14 +183,25 @@ PROGRAM FDS
200183

201184
IF (MY_RANK==0 .AND. VERBOSE) CALL VERBOSE_PRINTOUT('Completed INITIALIZE_MESH_VARIABLES_1')
202185

186+
! Write the Smokeview (.smv) file using parallel MPI writes
187+
188+
CALL WRITE_SMOKEVIEW_FILE
189+
203190
! Stop all the processes if this is just a set-up run
204191

205-
IF (CHECK_MESH_ALIGNMENT) THEN
192+
IF (SETUP_ONLY .OR. CHECK_MESH_ALIGNMENT) THEN
206193
IF (MY_RANK==0) CALL INITIALIZE_DIAGNOSTIC_FILE(DT)
207194
STOP_STATUS = SETUP_ONLY_STOP
208195
IF (MY_RANK==0) WRITE(LU_ERR,'(A)') ' Checking mesh alignment. This could take a few tens of seconds...'
196+
CALL STOP_CHECK(1)
197+
ENDIF
198+
199+
! MPI process 0 reopens the Smokeview file for additional output
200+
201+
IF (MY_RANK==0) THEN
202+
OPEN(LU_SMV,FILE=FN_SMV,FORM='FORMATTED', STATUS='OLD',POSITION='APPEND')
203+
CALL WRITE_STATUS_FILES
209204
ENDIF
210-
CALL STOP_CHECK(1)
211205

212206
! Allocate and initialize OMESH arrays to hold "other mesh" data for a given mesh
213207

Source/type.f90

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,9 +1051,10 @@ MODULE TYPES
10511051
CHARACTER(LABEL_LENGTH) :: CTRL_ID='null' !< Name of controller
10521052
CHARACTER(LABEL_LENGTH) :: ID='null' !< Name of obstruction
10531053

1054-
INTEGER, DIMENSION(-3:3) :: SURF_INDEX=0 !< SURFace properties for each face
1055-
INTEGER :: SURF_INDEX_INTERIOR=0 !< SURFace properties for a newly exposed interior cell
1056-
INTEGER, DIMENSION(3) :: RGB=(/0,0,0/) !< Color indices for Smokeview
1054+
INTEGER, DIMENSION(-3:3) :: SURF_INDEX=0 !< SURFace properties for each face
1055+
INTEGER, DIMENSION(1:6) :: EXPOSED_FACE_INDEX=0 !< OBST face exposed (1) or blocked (0)
1056+
INTEGER :: SURF_INDEX_INTERIOR=0 !< SURFace properties for a newly exposed interior cell
1057+
INTEGER, DIMENSION(3) :: RGB=(/0,0,0/) !< Color indices for Smokeview
10571058

10581059
REAL(EB) :: TRANSPARENCY=1._EB !< Transparency index for Smokeview, 0=invisible, 1=solid
10591060
REAL(EB) :: VOLUME_ADJUST=1._EB !< Effective volume divided by user specified volume

0 commit comments

Comments
 (0)