From 360e2af2fd96296d2f164ced5029f46aca56a900 Mon Sep 17 00:00:00 2001 From: Erin Thomas Date: Tue, 24 Mar 2026 09:35:03 -0700 Subject: [PATCH] MPI fix to UOST file read - speed up --- model/src/w3uostmd.F90 | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/model/src/w3uostmd.F90 b/model/src/w3uostmd.F90 index 97bbf9efc0..dbf820503c 100644 --- a/model/src/w3uostmd.F90 +++ b/model/src/w3uostmd.F90 @@ -39,6 +39,9 @@ MODULE W3UOSTMD USE W3GDATMD, ONLY: GRID, SGRD, GRIDS, SGRDS USE W3ODATMD, ONLY: NDSO, NDSE, IAPROC, NAPOUT USE W3SERVMD, ONLY: EXTCDE +#ifdef W3_MPI + USE W3ADATMD, ONLY: MPI_COMM_WAVE +#endif #ifdef W3_S USE W3SERVMD, ONLY: STRACE #endif @@ -430,6 +433,10 @@ SUBROUTINE LOAD_ALPHABETA_FROMFILE(FILEUNIT, FILENAME, NX, NY, NK, NTH,& LOGICAL :: HEADER, FILESTART, READINGCELLSIZE, READINGALPHA INTEGER :: IX, IY, SPGRDS_SIZE, IK REAL, ALLOCATABLE :: TRANS(:) +#ifdef W3_MPI + INCLUDE "mpif.h" + INTEGER :: IERR_MPI +#endif #ifdef W3_S INTEGER, SAVE :: IENT = 0 #endif @@ -437,7 +444,17 @@ SUBROUTINE LOAD_ALPHABETA_FROMFILE(FILEUNIT, FILENAME, NX, NY, NK, NTH,& #ifdef W3_S CALL STRACE (IENT, 'LOAD_ALPHABETA_FROMFILE') #endif - + + ! ------------------------------------------------------------------ + ! parse the ASCII obstruction file. + ! With MPI: only NAPOUT reads the file; result is broadcast to all + ! other ranks to avoid saturating the filesystem with N simultaneous + ! text-format reads. + ! ------------------------------------------------------------------ +#ifdef W3_MPI + IF (IAPROC .EQ. NAPOUT) THEN +#endif + ! INITIALIZING LOGICALS REPRESENTING THE DIFFERENT PHASES OF THE LOAD FILESTART = .TRUE. HEADER = .TRUE.; @@ -502,6 +519,15 @@ SUBROUTINE LOAD_ALPHABETA_FROMFILE(FILEUNIT, FILENAME, NX, NY, NK, NTH,& CLOSE(FILEUNIT) DEALLOCATE(TRANS) + +#ifdef W3_MPI + ENDIF ! IAPROC .EQ. NAPOUT + ! Distribute the arrays read by NAPOUT to every other rank. + CALL MPI_BCAST(ALPHAMTX, NX*NY*NK*NTH, MPI_BYTE, NAPOUT-1, MPI_COMM_WAVE, IERR_MPI) + CALL MPI_BCAST(BETAMTX, NX*NY*NK*NTH, MPI_BYTE, NAPOUT-1, MPI_COMM_WAVE, IERR_MPI) + CALL MPI_BCAST(CELLSIZE, NX*NY*NTH, MPI_REAL, NAPOUT-1, MPI_COMM_WAVE, IERR_MPI) + CALL MPI_BCAST(ISOBSTRUCTED, NX*NY, MPI_LOGICAL, NAPOUT-1, MPI_COMM_WAVE, IERR_MPI) +#endif END SUBROUTINE LOAD_ALPHABETA_FROMFILE