Skip to content

Commit 5b0fce8

Browse files
authored
Merge pull request #14159 from mcgratta/master
FDS Source: Issue firemodels/smv#2085. Add GRID neighbors
2 parents 41f8707 + 86169e7 commit 5b0fce8

File tree

2 files changed

+87
-48
lines changed

2 files changed

+87
-48
lines changed

Source/dump.f90

Lines changed: 87 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,7 +1533,7 @@ SUBROUTINE WRITE_SMOKEVIEW_FILE
15331533
CHARACTER(MESSAGE_LENGTH) :: MESSAGE
15341534
TYPE(GEOMETRY_TYPE), POINTER :: G=>NULL()
15351535
INTEGER :: IG,IS_TERRAIN_INT
1536-
INTEGER :: II,JJ,IIO,JJO,KKO,NOM
1536+
INTEGER :: II,JJ,IIO,JJO,KKO,NOM,IW,IW1,IW2,MESH_NEIGHBOR(6)
15371537
INTEGER :: N_NODE_OUT, N_DUCT_OUT
15381538
CHARACTER(LABEL_LENGTH) :: DEV_QUAN, HVAC_LABEL, OBST_LABEL
15391539
TYPE (MPI_STATUS) :: STATUS
@@ -2166,23 +2166,55 @@ SUBROUTINE WRITE_SMOKEVIEW_FILE
21662166
ENDDO
21672167
ENDIF
21682168

2169-
! Write grid info for each block
2169+
! Write MESH-specific information
21702170

21712171
MESH_LOOP: DO NM=1,NMESHES
21722172

21732173
IF (PROCESS(NM)/=MY_RANK) CYCLE
21742174

21752175
M => MESHES(NM)
21762176
T => TRANS(NM)
2177+
2178+
! Mesh offset (not used)
2179+
21772180
CALL EOL
21782181
WRITE(MYSTR,'(A)') 'OFFSET'; CALL ADDSTR
21792182
WRITE(MYSTR,'(3F13.5)') 0.,0.,0.; CALL ADDSTR
2183+
2184+
! Mesh grid dimensions and neighbor information.
2185+
! Determine if the six mesh faces abut a single mesh (MESH_NEIGHBOR>0), nothing (MESH_NEIGHBOR=0),
2186+
! or a combination of nothing and/or multiple meshes (MESH_NEIGHBOR=-1). Write six values to GRID line.
2187+
2188+
DO I=1,6
2189+
SELECT CASE(I)
2190+
CASE(1) ; IW1=1 ; IW2=IW1+M%JBAR*M%KBAR-1
2191+
CASE(2) ; IW1= M%JBAR*M%KBAR+1 ; IW2=IW1+M%JBAR*M%KBAR-1
2192+
CASE(3) ; IW1=2*M%JBAR*M%KBAR+1 ; IW2=IW1+M%IBAR*M%KBAR-1
2193+
CASE(4) ; IW1=2*M%JBAR*M%KBAR+ M%IBAR*M%KBAR+1 ; IW2=IW1+M%IBAR*M%KBAR-1
2194+
CASE(5) ; IW1=2*M%JBAR*M%KBAR+2*M%IBAR*M%KBAR+1 ; IW2=IW1+M%IBAR*M%JBAR-1
2195+
CASE(6) ; IW1=2*M%JBAR*M%KBAR+2*M%IBAR*M%KBAR+ M%IBAR*M%JBAR+1 ; IW2=IW1+M%IBAR*M%JBAR-1
2196+
END SELECT
2197+
MESH_NEIGHBOR(I) = M%EXTERNAL_WALL(IW1)%NOM
2198+
DO IW=IW1,IW2
2199+
IF (M%EXTERNAL_WALL(IW)%NOM/=MESH_NEIGHBOR(I)) THEN
2200+
MESH_NEIGHBOR(I) = -1
2201+
EXIT
2202+
ENDIF
2203+
ENDDO
2204+
ENDDO
2205+
21802206
CALL EOL
21812207
WRITE(MYSTR,'(A,3X,A)') 'GRID',TRIM(MESH_NAME(NM)); CALL ADDSTR
2182-
WRITE(MYSTR,'(4I5)') M%IBAR,M%JBAR,M%KBAR,0; CALL ADDSTR
2208+
WRITE(MYSTR,'(9I6)') M%IBAR,M%JBAR,M%KBAR,MESH_NEIGHBOR(1:6) ; CALL ADDSTR
2209+
2210+
! Mesh dimensions and color indices
2211+
21832212
CALL EOL
21842213
WRITE(MYSTR,'(A)') 'PDIM'; CALL ADDSTR
21852214
WRITE(MYSTR,'(9F14.5)') M%XS,M%XF,M%YS,M%YF,M%ZS,M%ZF,(REAL(M%RGB(I),FB)/255._FB,I = 1,3); CALL ADDSTR
2215+
2216+
! Mesh grid stretching information
2217+
21862218
CALL EOL
21872219
WRITE(MYSTR,'(A)') 'TRNX'; CALL ADDSTR
21882220
WRITE(MYSTR,'(I5)') T%NOC(1); CALL ADDSTR
@@ -2211,7 +2243,8 @@ SUBROUTINE WRITE_SMOKEVIEW_FILE
22112243
WRITE(MYSTR,'(I5,F14.5)') K,M%Z(K); CALL ADDSTR
22122244
ENDDO
22132245

2214-
! Write obstacle info to .smv file
2246+
! Obstruction information
2247+
22152248
CALL EOL
22162249
WRITE(MYSTR,'(A)') 'OBST'; CALL ADDSTR
22172250
WRITE(MYSTR,*) M%N_OBST; CALL ADDSTR
@@ -2457,64 +2490,71 @@ SUBROUTINE WRITE_SMOKEVIEW_FILE
24572490

24582491
! Write the .smv file
24592492

2460-
SMV_PARALLEL_WRITE_IF : IF( SMV_PARALLEL_WRITE ) THEN
2493+
SMV_PARALLEL_WRITE_IF: IF (SMV_PARALLEL_WRITE) THEN
24612494

2462-
! Write using MPI-IO:
2463-
CALL MPI_FILE_DELETE(FN_SMV, MPI_INFO_NULL, IERR)
2464-
CALL MPI_EXSCAN(SMVSTR_USE_LEN,OFFSET,1,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,IERR)
2465-
CALL MPI_FILE_OPEN(MPI_COMM_WORLD,FN_SMV,MPI_MODE_WRONLY+MPI_MODE_CREATE,MPI_INFO_NULL,SMVFILE_HANDLE,IERR)
2466-
CALL MPI_FILE_WRITE_AT_ALL(SMVFILE_HANDLE,INT(OFFSET,MPI_OFFSET_KIND),SMVSTR,SMVSTR_USE_LEN,MPI_CHARACTER,STATUS,IERR)
2467-
CALL MPI_FILE_SYNC(SMVFILE_HANDLE,IERR)
2468-
CALL MPI_FILE_CLOSE(SMVFILE_HANDLE,IERR)
2495+
! Write using MPI-IO:
2496+
2497+
CALL MPI_FILE_DELETE(FN_SMV, MPI_INFO_NULL, IERR)
2498+
CALL MPI_EXSCAN(SMVSTR_USE_LEN,OFFSET,1,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,IERR)
2499+
CALL MPI_FILE_OPEN(MPI_COMM_WORLD,FN_SMV,MPI_MODE_WRONLY+MPI_MODE_CREATE,MPI_INFO_NULL,SMVFILE_HANDLE,IERR)
2500+
CALL MPI_FILE_WRITE_AT_ALL(SMVFILE_HANDLE,INT(OFFSET,MPI_OFFSET_KIND),SMVSTR,SMVSTR_USE_LEN,MPI_CHARACTER,STATUS,IERR)
2501+
CALL MPI_FILE_SYNC(SMVFILE_HANDLE,IERR)
2502+
CALL MPI_FILE_CLOSE(SMVFILE_HANDLE,IERR)
24692503

24702504
ELSE SMV_PARALLEL_WRITE_IF
24712505

2472-
! Gather strings in rank 0, which does a POSIX write:
2473-
IF(N_MPI_PROCESSES>1) THEN
2474-
ALLOCATE(RECV_USE_LEN(0:N_MPI_PROCESSES-1),RECV_USE_OFF(0:N_MPI_PROCESSES-1),RECV_COUNTS(0:N_MPI_PROCESSES-1))
2475-
RECV_USE_LEN=0; RECV_USE_LEN(MY_RANK)=SMVSTR_USE_LEN; RECV_USE_OFF=0
2476-
RECV_COUNTS=1; DO I=0,N_MPI_PROCESSES-1; RECV_USE_OFF(I)=I; ENDDO
2477-
IF(MY_RANK==0) THEN
2478-
! Gather string sizes from all Processes in rank 0:
2479-
CALL MPI_GATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL, &
2506+
! Gather strings in rank 0, which does a POSIX write:
2507+
2508+
MPI_IF: IF (N_MPI_PROCESSES>1) THEN
2509+
2510+
ALLOCATE(RECV_USE_LEN(0:N_MPI_PROCESSES-1),RECV_USE_OFF(0:N_MPI_PROCESSES-1),RECV_COUNTS(0:N_MPI_PROCESSES-1))
2511+
RECV_USE_LEN=0; RECV_USE_LEN(MY_RANK)=SMVSTR_USE_LEN; RECV_USE_OFF=0
2512+
RECV_COUNTS=1; DO I=0,N_MPI_PROCESSES-1; RECV_USE_OFF(I)=I; ENDDO
2513+
2514+
IF (MY_RANK==0) THEN
2515+
! Gather string sizes from all Processes in rank 0:
2516+
CALL MPI_GATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL, &
24802517
RECV_USE_LEN(0),RECV_COUNTS(0:N_MPI_PROCESSES-1),RECV_USE_OFF(0:N_MPI_PROCESSES-1), &
24812518
MPI_INTEGER,0,MPI_COMM_WORLD,IERR)
2482-
! Recompute offset for gather string:
2483-
RECV_USE_OFF=0
2484-
DO I=1,N_MPI_PROCESSES-1
2519+
! Recompute offset for gather string:
2520+
RECV_USE_OFF=0
2521+
DO I=1,N_MPI_PROCESSES-1
24852522
RECV_USE_OFF(I) = RECV_USE_OFF(I-1) + RECV_USE_LEN(I-1)
2486-
ENDDO
2487-
! Gather strings from all Processes in rank 0:
2488-
STR_GATHER_LEN = SUM(RECV_USE_LEN(0:N_MPI_PROCESSES-1))
2489-
ALLOCATE(CHARACTER(LEN=STR_GATHER_LEN)::STR_GATHER); STR_GATHER(1:SMVSTR_USE_LEN)=SMVSTR(1:SMVSTR_USE_LEN)
2490-
CALL MPI_GATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL, &
2523+
ENDDO
2524+
! Gather strings from all Processes in rank 0:
2525+
STR_GATHER_LEN = SUM(RECV_USE_LEN(0:N_MPI_PROCESSES-1))
2526+
ALLOCATE(CHARACTER(LEN=STR_GATHER_LEN)::STR_GATHER); STR_GATHER(1:SMVSTR_USE_LEN)=SMVSTR(1:SMVSTR_USE_LEN)
2527+
CALL MPI_GATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL, &
24912528
STR_GATHER,RECV_USE_LEN(0:N_MPI_PROCESSES-1),RECV_USE_OFF(0:N_MPI_PROCESSES-1), &
24922529
MPI_CHARACTER,0,MPI_COMM_WORLD,IERR)
2493-
! Process 0 writes SMV file:
2494-
OPEN(UNIT=LU_SMV,FILE=FN_SMV,FORM='formatted')
2495-
WRITE(LU_SMV,'(A)') STR_GATHER(1:STR_GATHER_LEN)
2496-
CLOSE(LU_SMV)
2497-
ELSE
2498-
! Gather string sizes from all Processes in rank 0:
2499-
CALL MPI_GATHERV(SMVSTR_USE_LEN,1,MPI_INTEGER, &
2530+
! Process 0 writes SMV file:
2531+
OPEN(UNIT=LU_SMV,FILE=FN_SMV,FORM='formatted')
2532+
WRITE(LU_SMV,'(A)') STR_GATHER(1:STR_GATHER_LEN)
2533+
CLOSE(LU_SMV)
2534+
ELSE
2535+
! Gather string sizes from all Processes in rank 0:
2536+
CALL MPI_GATHERV(SMVSTR_USE_LEN,1,MPI_INTEGER, &
25002537
RECV_USE_LEN(0),RECV_COUNTS(0:N_MPI_PROCESSES-1),RECV_USE_OFF(0:N_MPI_PROCESSES-1), &
25012538
MPI_INTEGER,0,MPI_COMM_WORLD,IERR)
2502-
! Gather strings from all Processes in rank 0:
2503-
ALLOCATE(CHARACTER(LEN=1)::STR_GATHER); ! Dummy allocation.
2504-
CALL MPI_GATHERV(SMVSTR,SMVSTR_USE_LEN,MPI_CHARACTER, &
2539+
! Gather strings from all Processes in rank 0:
2540+
ALLOCATE(CHARACTER(LEN=1)::STR_GATHER); ! Dummy allocation.
2541+
CALL MPI_GATHERV(SMVSTR,SMVSTR_USE_LEN,MPI_CHARACTER, &
25052542
STR_GATHER,RECV_USE_LEN(0:N_MPI_PROCESSES-1),RECV_USE_OFF(0:N_MPI_PROCESSES-1), &
25062543
MPI_CHARACTER,0,MPI_COMM_WORLD,IERR)
2507-
ENDIF
2508-
DEALLOCATE(RECV_USE_LEN,RECV_USE_OFF,RECV_COUNTS,STR_GATHER)
2509-
ELSE
2510-
! Signle MPI process job : Process 0 writes SMV file.
2511-
OPEN(UNIT=LU_SMV,FILE=FN_SMV,FORM='formatted')
2512-
WRITE(LU_SMV,'(A)') SMVSTR(1:SMVSTR_USE_LEN)
2513-
CLOSE(LU_SMV)
2514-
ENDIF
2544+
ENDIF
25152545

2516-
ENDIF SMV_PARALLEL_WRITE_IF
2546+
DEALLOCATE(RECV_USE_LEN,RECV_USE_OFF,RECV_COUNTS,STR_GATHER)
2547+
2548+
ELSE MPI_IF
2549+
2550+
! Signle MPI process job : Process 0 writes SMV file.
2551+
OPEN(UNIT=LU_SMV,FILE=FN_SMV,FORM='formatted')
2552+
WRITE(LU_SMV,'(A)') SMVSTR(1:SMVSTR_USE_LEN)
2553+
CLOSE(LU_SMV)
25172554

2555+
ENDIF MPI_IF
2556+
2557+
ENDIF SMV_PARALLEL_WRITE_IF
25182558

25192559
DEALLOCATE(SMVSTR)
25202560

Source/init.f90

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1054,7 +1054,6 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_2(NM)
10541054

10551055
USE MEMORY_FUNCTIONS, ONLY: REALLOCATE_EDGE,REALLOCATE_REAL_ARRAY
10561056
USE PHYSICAL_FUNCTIONS, ONLY: GET_SPECIFIC_HEAT
1057-
USE GEOMETRY_FUNCTIONS, ONLY: SEARCH_OTHER_MESHES
10581057
USE CONTROL_VARIABLES
10591058
INTEGER :: N,I,J,K,IPTS,JPTS,KPTS,N_EDGES_DIM,IW,IC,IERR,IPZ,IZERO,ICF,NSLICE
10601059
INTEGER, INTENT(IN) :: NM

0 commit comments

Comments
 (0)