From be51347fce6c51f0fb29834ec8e47e65bfe2bc62 Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Mon, 10 Feb 2025 14:10:14 -0600 Subject: [PATCH 01/13] user-defined path feature --- model/src/w3iogomd.F90 | 36 ++++-- model/src/w3iopomd.F90 | 59 ++++++--- model/src/w3iorsmd.F90 | 23 +++- model/src/w3nmlshelmd.F90 | 171 ++++++++++++++++++++----- model/src/w3odatmd.F90 | 7 + model/src/ww3_outf.F90 | 2 +- model/src/ww3_shel.F90 | 16 ++- regtests/ww3_tp1.1/grd_out/out_grd.ww3 | Bin 0 -> 164906 bytes regtests/ww3_tp1.1/input/ww3_shel.nml | 11 ++ regtests/ww3_tp1.1/pnt_out/out_pnt.ww3 | Bin 0 -> 62902 bytes regtests/ww3_tp2.1/input/ww3_shel.nml | 9 ++ 11 files changed, 266 insertions(+), 68 deletions(-) create mode 100644 regtests/ww3_tp1.1/grd_out/out_grd.ww3 create mode 100644 regtests/ww3_tp1.1/pnt_out/out_pnt.ww3 diff --git a/model/src/w3iogomd.F90 b/model/src/w3iogomd.F90 index de660ded4..55046b807 100644 --- a/model/src/w3iogomd.F90 +++ b/model/src/w3iogomd.F90 @@ -2533,7 +2533,7 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & !/ USE W3ODATMD, ONLY: NOGRP, NGRPP, IDOUT, UNDEF, NDST, NDSE, & FLOGRD, IPASS => IPASS1, WRITE => WRITE1, & - FNMPRE, NOSWLL, NOEXTR + FNMPRE, FNMGRD, NOSWLL, NOEXTR !/ USE W3SERVMD, ONLY: EXTCDE USE W3ODATMD, only : IAPROC @@ -2576,6 +2576,10 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & #endif CHARACTER(LEN=30) :: IDTST, TNAME CHARACTER(LEN=10) :: VERTST + + ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE + CHARACTER(LEN=80) :: FNMPRE_LOCAL + !/ !/ ------------------------------------------------------------------- / !/ @@ -2624,22 +2628,32 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & ! open file ---------------------------------------------------------- * ! ( IPASS = 1 ) ! + IF (FNMGRD .EQ. 'UNSET' .OR. LEN_TRIM(FNMGRD) .EQ. 0) THEN + ! WRITE THE ERROR MESSAGE + WRITE (NDSE,*) ' *** WAVEWATCH III ERROR IN W3IOGO : ' + WRITE (NDSE,*) ' ERROR IN FILE PATH' + WRITE (NDSE, '(A, A)') ' PATH = ', TRIM(FNMGRD) + CALL EXTCDE(42) + END IF + + FNMPRE_LOCAL = FNMGRD + IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN I = LEN_TRIM(FILEXT) - J = LEN_TRIM(FNMPRE) + J = LEN_TRIM(FNMPRE_LOCAL) ! #ifdef W3_T - WRITE (NDST,9001) FNMPRE(:J)//'out_grd.'//FILEXT(:I) + WRITE (NDST,9001) FNMPRE_LOCAL(:J)//'out_grd.'//FILEXT(:I) #endif IF ( WRITE ) THEN - OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FILEXT(:I), & + OPEN (NDSOG,FILE=FNMPRE_LOCAL(:J)//'out_grd.'//FILEXT(:I), & form ='UNFORMATTED', convert=file_endian,ERR=800,IOSTAT=IERR) #ifdef W3_ASCII - OPEN (NDSOA,FILE=FNMPRE(:J)//'out_grd.'//FILEXT(:I)//'.txt', & + OPEN (NDSOA,FILE=FNMPRE_LOCAL(:J)//'out_grd.'//FILEXT(:I)//'.txt', & form ='FORMATTED',ERR=800,IOSTAT=IERR) #endif ELSE - OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FILEXT(:I), & + OPEN (NDSOG,FILE=FNMPRE_LOCAL(:J)//'out_grd.'//FILEXT(:I), & form='UNFORMATTED', convert=file_endian,ERR=800,IOSTAT=IERR,STATUS='OLD') END IF ! @@ -2709,22 +2723,22 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & ! IF ( IPASS.GE.1 .AND. OFILES(1) .EQ. 1) THEN I = LEN_TRIM(FILEXT) - J = LEN_TRIM(FNMPRE) + J = LEN_TRIM(FNMPRE_LOCAL) ! ! Create TIMETAG for file name using YYYYMMDD.HHMMS prefix WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) #ifdef W3_T - WRITE (NDST,9001) FNMPRE(:J)//TIMETAG//'.out_grd.'//FILEXT(:I) + WRITE (NDST,9001) FNMPRE_LOCAL(:J)//TIMETAG//'.out_grd.'//FILEXT(:I) #endif IF ( WRITE ) THEN - OPEN (NDSOG,FILE=FNMPRE(:J)//TIMETAG//'.out_grd.' & + OPEN (NDSOG,FILE=FNMPRE_LOCAL(:J)//TIMETAG//'.out_grd.' & //FILEXT(:I),form='UNFORMATTED', convert=file_endian,ERR=800,IOSTAT=IERR) #ifdef W3_ASCII - OPEN (NDSOA,FILE=FNMPRE(:J)//TIMETAG//'.out_grd.' & + OPEN (NDSOA,FILE=FNMPRE_LOCAL(:J)//TIMETAG//'.out_grd.' & //FILEXT(:I)//'.txt',form='FORMATTED',ERR=800,IOSTAT=IERR) #endif ELSE - OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FILEXT(:I), & + OPEN (NDSOG,FILE=FNMPRE_LOCAL(:J)//'out_grd.'//FILEXT(:I), & form='UNFORMATTED', convert=file_endian,ERR=800,IOSTAT=IERR,STATUS='OLD') END IF ! diff --git a/model/src/w3iopomd.F90 b/model/src/w3iopomd.F90 index bbdfda34c..88d967ce8 100644 --- a/model/src/w3iopomd.F90 +++ b/model/src/w3iopomd.F90 @@ -1155,7 +1155,7 @@ SUBROUTINE W3IOPON_READ(IOTST, IMOD_IN, filename, ncerr) USE W3GDATMD, ONLY: NTH, NK, NSPEC, FILEXT USE W3ODATMD, ONLY: NDST, NDSE, IPASS => IPASS2, NOPTS, IPTINT, & IL, IW, II, PTLOC, PTIFAC, DPO, WAO, WDO, & - ASO, CAO, CDO, SPCO, PTNME, O2INIT, FNMPRE, & + ASO, CAO, CDO, SPCO, PTNME, O2INIT, FNMPRE, FNMPNT, & GRDID, ICEO, ICEHO, ICEFO, W3DMO2 USE W3SERVMD, ONLY: EXTCDE #ifdef W3_FLX5 @@ -1429,7 +1429,7 @@ SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr) USE W3WDATMD, ONLY: TIME USE W3ODATMD, ONLY: NDST, NDSE, IPASS => IPASS2, NOPTS, IPTINT, & PTLOC, PTIFAC, DPO, WAO, WDO, & - ASO, CAO, CDO, SPCO, PTNME, O2INIT, FNMPRE, & + ASO, CAO, CDO, SPCO, PTNME, O2INIT, FNMPRE, FNMPNT, & GRDID, ICEO, ICEHO, ICEFO USE W3TIMEMD, ONLY: CALTYPE, T2D, U2D, TSUB #ifdef W3_FLX5 @@ -1749,7 +1749,7 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) USE W3ODATMD, ONLY: W3SETO USE W3GDATMD, ONLY: FILEXT USE W3WDATMD, ONLY: TIME - USE W3ODATMD, ONLY: NDST, NDSE, IPASS => IPASS2, FNMPRE + USE W3ODATMD, ONLY: NDST, NDSE, IPASS => IPASS2, FNMPRE, FNMPNT USE W3ODATMD, ONLY: OFILES USE W3SERVMD, ONLY: EXTCDE #ifdef W3_S @@ -1768,6 +1768,9 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) character(len = 124) :: filename integer :: ncerr + ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE + CHARACTER(LEN=80) :: FNMPRE_LOCAL + #ifdef W3_S CALL STRACE (IENT, 'W3IOPON') #endif @@ -1796,12 +1799,23 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) END IF ! Determine filename. + IF (FNMPNT .EQ. 'UNSET' .OR. LEN_TRIM(FNMPNT) .EQ. 0) THEN + ! WRITE THE ERROR MESSAGE + WRITE (NDSE,*) ' *** WAVEWATCH III ERROR IN W3IOPON : ' + WRITE (NDSE,*) ' ERROR IN FILE PATH' + WRITE (NDSE, '(A, A)') ' PATH = ', TRIM(FNMPNT) + CALL EXTCDE(42) + END IF + + FNMPRE_LOCAL = FNMPNT + ! + IF ( OFILES(2) .EQ. 1 ) THEN ! Create TIMETAG for file name using YYYYMMDD.HHMMS prefix WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) - filename = FNMPRE(:LEN_TRIM(FNMPRE))//TIMETAG//'.out_pnt.'//FILEXT(:LEN_TRIM(FILEXT))//'.nc' + filename = FNMPRE_LOCAL(:LEN_TRIM(FNMPRE_LOCAL))//TIMETAG//'.out_pnt.'//FILEXT(:LEN_TRIM(FILEXT))//'.nc' ELSE - filename = FNMPRE(:LEN_TRIM(FNMPRE))//'out_pnt.'//FILEXT(:LEN_TRIM(FILEXT))//'.nc' + filename = FNMPRE_LOCAL(:LEN_TRIM(FNMPRE_LOCAL))//'out_pnt.'//FILEXT(:LEN_TRIM(FILEXT))//'.nc' END IF ! Do a read or a write of the point file. @@ -1989,7 +2003,7 @@ SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD & USE W3WDATMD, ONLY: TIME USE W3ODATMD, ONLY: NDST, NDSE, IPASS => IPASS2, NOPTS, IPTINT, & IL, IW, II, PTLOC, PTIFAC, DPO, WAO, WDO, & - ASO, CAO, CDO, SPCO, PTNME, O2INIT, FNMPRE, & + ASO, CAO, CDO, SPCO, PTNME, O2INIT, FNMPRE, FNMPNT, & GRDID, ICEO, ICEHO, ICEFO #ifdef W3_FLX5 USE W3ODATMD, ONLY: TAUAO, TAUDO, DAIRO @@ -2032,6 +2046,10 @@ SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD & CHARACTER(LEN=10) :: VERTST !/ CHARACTER(LEN=15) :: TIMETAG + + ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE + CHARACTER(LEN=80) :: FNMPRE_LOCAL + !/ !/ ------------------------------------------------------------------- / !/ @@ -2070,23 +2088,34 @@ SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD & ! ! open file ---------------------------------------------------------- * ! + IF (FNMPNT .EQ. 'UNSET' .OR. LEN_TRIM(FNMPNT) .EQ. 0) THEN + ! WRITE THE ERROR MESSAGE + WRITE (NDSE,*) ' *** WAVEWATCH III ERROR IN W3IOPO : ' + WRITE (NDSE,*) ' ERROR IN FILE PATH' + WRITE (NDSE, '(A, A)') ' PATH = ', TRIM(FNMPNT) + CALL EXTCDE(42) + END IF + + FNMPRE_LOCAL = FNMPNT + ! + IF ( IPASS.EQ.1 .AND. OFILES(2) .EQ. 0 ) THEN I = LEN_TRIM(FILEXT) - J = LEN_TRIM(FNMPRE) + J = LEN_TRIM(FNMPRE_LOCAL) #ifdef W3_T - WRITE (NDST,9001) FNMPRE(:J)//'out_pnt.'//FILEXT(:I) + WRITE (NDST,9001) FNMPRE_LOCAL(:J)//'out_pnt.'//FILEXT(:I) #endif IF ( WRITE ) THEN - OPEN (NDSOP,FILE=FNMPRE(:J)//'out_pnt.'//FILEXT(:I), & + OPEN (NDSOP,FILE=FNMPRE_LOCAL(:J)//'out_pnt.'//FILEXT(:I), & form='UNFORMATTED', convert=file_endian,ERR=800,IOSTAT=IERR) #ifdef W3_ASCII - OPEN (NDSOA,FILE=FNMPRE(:J)//'out_pnt.'//FILEXT(:I)//'.txt', & + OPEN (NDSOA,FILE=FNMPRE_LOCAL(:J)//'out_pnt.'//FILEXT(:I)//'.txt', & form='FORMATTED', ERR=800,IOSTAT=IERR) #endif ELSE - OPEN (NDSOP,FILE=FNMPRE(:J)//'out_pnt.'//FILEXT(:I), & + OPEN (NDSOP,FILE=FNMPRE_LOCAL(:J)//'out_pnt.'//FILEXT(:I), & form='UNFORMATTED', convert=file_endian,ERR=800,IOSTAT=IERR,STATUS='OLD') END IF ! @@ -2167,20 +2196,20 @@ SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD & IF ( IPASS.GE.1 .AND. OFILES(2) .EQ. 1) THEN ! I = LEN_TRIM(FILEXT) - J = LEN_TRIM(FNMPRE) + J = LEN_TRIM(FNMPRE_LOCAL) ! Create TIMETAG for file name using YYYYMMDD.HHMMS prefix WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) ! #ifdef W3_T - WRITE (NDST,9001) FNMPRE(:J)//TIMETAG//'.out_pnt.'// & + WRITE (NDST,9001) FNMPRE_LOCAL(:J)//TIMETAG//'.out_pnt.'// & FILEXT(:I) #endif IF ( WRITE ) THEN - OPEN (NDSOP,FILE=FNMPRE(:J)//TIMETAG//'.out_pnt.' & + OPEN (NDSOP,FILE=FNMPRE_LOCAL(:J)//TIMETAG//'.out_pnt.' & //FILEXT(:I),form='UNFORMATTED', convert=file_endian,ERR=800,IOSTAT=IERR) #ifdef W3_ASCII - OPEN (NDSOA,FILE=FNMPRE(:J)//TIMETAG//'.out_pnt.' & + OPEN (NDSOA,FILE=FNMPRE_LOCAL(:J)//TIMETAG//'.out_pnt.' & //FILEXT(:I)//'.txt',form='FORMATTED', ERR=800,IOSTAT=IERR) #endif END IF diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 5253a66ab..b27207d10 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -308,7 +308,7 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) USE W3IDATMD, ONLY: WXNwrst, WYNwrst #endif USE W3ODATMD, ONLY: NDSE, NDST, IAPROC, NAPROC, NAPERR, NAPRST, & - IFILE => IFILE4, FNMPRE, NTPROC, IOSTYP, & + IFILE => IFILE4, FNMPRE, FNMRST, NTPROC, IOSTYP, & FLOGRR, NOGRP, NGRPP, SCREEN #ifdef W3_MPI USE W3ODATMD, ONLY: NRQRS, NBLKRS, RSBLKS, IRQRS, IRQRSS, & @@ -380,6 +380,10 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) CHARACTER(LEN=26) :: IDTST CHARACTER(LEN=30) :: TNAME CHARACTER(LEN=15) :: TIMETAG + + ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE + CHARACTER(LEN=80) :: FNMPRE_LOCAL + !/ !/ ------------------------------------------------------------------- / !/ @@ -457,8 +461,19 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) ! ! open file ---------------------------------------------------------- * ! + IF (FNMRST .EQ. 'UNSET' .OR. LEN_TRIM(FNMRST) .EQ. 0) THEN + ! WRITE THE ERROR MESSAGE + WRITE (NDSE,*) ' *** WAVEWATCH III ERROR IN W3IORS : ' + WRITE (NDSE,*) ' ERROR IN FILE PATH' + WRITE (NDSE, '(A, A)') ' PATH = ', TRIM(FNMRST) + CALL EXTCDE(42) + END IF + + FNMPRE_LOCAL = FNMRST + ! + I = LEN_TRIM(FILEXT) - J = LEN_TRIM(FNMPRE) + J = LEN_TRIM(FNMPRE_LOCAL) ! !CHECKPOINT RESTART FILE ITMP=0 @@ -495,10 +510,10 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) IF ( WRITE ) THEN IF ( .NOT.IOSFLG .OR. IAPROC.EQ.NAPRST ) & - OPEN (NDSR,FILE=FNMPRE(:J)//FNAME,form='UNFORMATTED', convert=file_endian, & + OPEN (NDSR,FILE=FNMPRE_LOCAL(:J)//FNAME,form='UNFORMATTED', convert=file_endian, & ACCESS='STREAM',ERR=800,IOSTAT=IERR) ELSE - OPEN (NDSR,FILE=FNMPRE(:J)//FNAME,form='UNFORMATTED', convert=file_endian, & + OPEN (NDSR,FILE=FNMPRE_LOCAL(:J)//FNAME,form='UNFORMATTED', convert=file_endian, & ACCESS='STREAM',ERR=800,IOSTAT=IERR, & STATUS='OLD',ACTION='READ') END IF diff --git a/model/src/w3nmlshelmd.F90 b/model/src/w3nmlshelmd.F90 index ac53104b2..8ecf9e6cf 100644 --- a/model/src/w3nmlshelmd.F90 +++ b/model/src/w3nmlshelmd.F90 @@ -129,6 +129,12 @@ MODULE W3NMLSHELMD TYPE(NML_OUTPUT_TIME_T) :: COUPLING END TYPE NML_OUTPUT_DATE_T + ! NEW TYPE FOR USER DEFINED PATH + TYPE NML_OUTPUT_PATH_T + CHARACTER(LEN=80) :: GRD_OUT + CHARACTER(LEN=80) :: PNT_OUT + CHARACTER(LEN=80) :: RST_OUT + END TYPE NML_OUTPUT_PATH_T ! homogeneous input structure TYPE NML_HOMOG_COUNT_T @@ -169,7 +175,7 @@ MODULE W3NMLSHELMD !/ ------------------------------------------------------------------- / SUBROUTINE W3NMLSHEL (MPI_COMM, NDSI, INFILE, NML_DOMAIN, & - NML_INPUT, NML_OUTPUT_TYPE, NML_OUTPUT_DATE, & + NML_INPUT, NML_OUTPUT_TYPE, NML_OUTPUT_DATE, NML_OUTPUT_PATH, & NML_HOMOG_COUNT, NML_HOMOG_INPUT, IERR) !/ !/ +-----------------------------------+ @@ -263,6 +269,7 @@ SUBROUTINE W3NMLSHEL (MPI_COMM, NDSI, INFILE, NML_DOMAIN, & TYPE(NML_INPUT_T), INTENT(INOUT) :: NML_INPUT TYPE(NML_OUTPUT_TYPE_T), INTENT(INOUT) :: NML_OUTPUT_TYPE TYPE(NML_OUTPUT_DATE_T), INTENT(INOUT) :: NML_OUTPUT_DATE + TYPE(NML_OUTPUT_PATH_T), INTENT(INOUT) :: NML_OUTPUT_PATH ! USER DEFINED PATH TYPE(NML_HOMOG_COUNT_T), INTENT(INOUT) :: NML_HOMOG_COUNT TYPE(NML_HOMOG_INPUT_T), ALLOCATABLE, INTENT(INOUT) :: NML_HOMOG_INPUT(:) INTEGER, INTENT(OUT) :: IERR @@ -318,7 +325,11 @@ SUBROUTINE W3NMLSHEL (MPI_COMM, NDSI, INFILE, NML_DOMAIN, & ! read output date namelist CALL READ_OUTPUT_DATE_NML (NDSI, NML_OUTPUT_DATE) IF ( IMPROC .EQ. NMPLOG ) CALL REPORT_OUTPUT_DATE_NML (NML_OUTPUT_DATE) - + + ! READ OUTPUT USER DEFINED PATH NAMELIST + CALL READ_OUTPUT_PATH_NML (NDSI, NML_OUTPUT_PATH) + IF ( IMPROC .EQ. NMPLOG ) CALL REPORT_OUTPUT_PATH_NML (NML_OUTPUT_PATH) + ! read homogeneous namelist CALL READ_HOMOGENEOUS_NML (NDSI, NML_HOMOG_COUNT, NML_HOMOG_INPUT) IF ( IMPROC .EQ. NMPLOG ) CALL REPORT_HOMOGENEOUS_NML (NML_HOMOG_COUNT, NML_HOMOG_INPUT) @@ -838,6 +849,61 @@ END SUBROUTINE READ_OUTPUT_DATE_NML + !/ ------------------------------------------------------------------- / + + SUBROUTINE READ_OUTPUT_PATH_NML (NDSI, NML_OUTPUT_PATH) + ! + USE WMMDATMD, ONLY: MDSE + USE W3SERVMD, ONLY: EXTCDE +#ifdef W3_S + USE W3SERVMD, ONLY: STRACE +#endif + + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NDSI + TYPE(NML_OUTPUT_PATH_T), INTENT(INOUT) :: NML_OUTPUT_PATH + + ! LOCALS + INTEGER :: IERR + TYPE(NML_OUTPUT_PATH_T) :: PATH + NAMELIST /OUTPUT_PATH_NML/ PATH +#ifdef W3_S + INTEGER, SAVE :: IENT = 0 +#endif + + IERR = 0 +#ifdef W3_S + CALL STRACE (IENT, 'READ_OUTPUT_PATH_NML') +#endif + + ! SET DEFAULT VALUES FOR OUTPUT USER DEFINED PATH + PATH%GRD_OUT = './' + PATH%PNT_OUT = './' + PATH%RST_OUT = './' + + ! READ OUTPUT USER DEFINED PATH NAMELIST + REWIND (NDSI) + READ (NDSI, nml=OUTPUT_PATH_NML, iostat=IERR, iomsg=MSG) + IF (IERR.GT.0) THEN + WRITE (MDSE,'(A,/A)') & + 'ERROR: READ_OUTPUT_PATH_NML: namelist read error', & + 'ERROR: '//TRIM(MSG) + CALL EXTCDE (8) + END IF + + ! SAVE NAMELIST + NML_OUTPUT_PATH = PATH + + END SUBROUTINE READ_OUTPUT_PATH_NML + + !/ ------------------------------------------------------------------- / + + + + + + !/ ------------------------------------------------------------------- / SUBROUTINE READ_HOMOGENEOUS_NML (NDSI, NML_HOMOG_COUNT, NML_HOMOG_INPUT) @@ -1184,9 +1250,9 @@ SUBROUTINE REPORT_INPUT_NML (NML_INPUT) WRITE (NDSN,10) TRIM(MSG),'FORCING % MUD_DENSITY = ', NML_INPUT%FORCING%MUD_DENSITY WRITE (NDSN,10) TRIM(MSG),'FORCING % MUD_THICKNESS = ', NML_INPUT%FORCING%MUD_THICKNESS WRITE (NDSN,10) TRIM(MSG),'FORCING % MUD_VISCOSITY = ', NML_INPUT%FORCING%MUD_VISCOSITY - WRITE (NDSN,10) TRIM(MSG),'ASSIM % MEAN = ', NML_INPUT%ASSIM%MEAN - WRITE (NDSN,10) TRIM(MSG),'ASSIM % SPEC1D = ', NML_INPUT%ASSIM%SPEC1D - WRITE (NDSN,10) TRIM(MSG),'ASSIM % SPEC2D = ', NML_INPUT%ASSIM%SPEC2D + WRITE (NDSN,10) TRIM(MSG),'ASSIM % MEAN = ', NML_INPUT%ASSIM%MEAN + WRITE (NDSN,10) TRIM(MSG),'ASSIM % SPEC1D = ', NML_INPUT%ASSIM%SPEC1D + WRITE (NDSN,10) TRIM(MSG),'ASSIM % SPEC2D = ', NML_INPUT%ASSIM%SPEC2D 10 FORMAT (A,2X,A,A) @@ -1279,9 +1345,9 @@ SUBROUTINE REPORT_OUTPUT_TYPE_NML (NML_OUTPUT_TYPE) WRITE (MSG,'(A)') 'OUTPUT TYPE % ' WRITE (NDSN,'(A)') - WRITE (NDSN,10) TRIM(MSG),'FIELD % LIST = ', TRIM(NML_OUTPUT_TYPE%FIELD%LIST) - WRITE (NDSN,10) TRIM(MSG),'POINT % FILE = ', TRIM(NML_OUTPUT_TYPE%POINT%FILE) - WRITE (NDSN,13) TRIM(MSG),'TRACK % FORMAT = ', NML_OUTPUT_TYPE%TRACK%FORMAT + WRITE (NDSN,10) TRIM(MSG),'FIELD % LIST = ', TRIM(NML_OUTPUT_TYPE%FIELD%LIST) + WRITE (NDSN,10) TRIM(MSG),'POINT % FILE = ', TRIM(NML_OUTPUT_TYPE%POINT%FILE) + WRITE (NDSN,13) TRIM(MSG),'TRACK % FORMAT = ', NML_OUTPUT_TYPE%TRACK%FORMAT WRITE (NDSN,11) TRIM(MSG),'PARTITION % X0 = ', NML_OUTPUT_TYPE%PARTITION%X0 WRITE (NDSN,11) TRIM(MSG),'PARTITION % XN = ', NML_OUTPUT_TYPE%PARTITION%XN WRITE (NDSN,11) TRIM(MSG),'PARTITION % NX = ', NML_OUTPUT_TYPE%PARTITION%NX @@ -1290,11 +1356,11 @@ SUBROUTINE REPORT_OUTPUT_TYPE_NML (NML_OUTPUT_TYPE) WRITE (NDSN,11) TRIM(MSG),'PARTITION % NY = ', NML_OUTPUT_TYPE%PARTITION%NY WRITE (NDSN,13) TRIM(MSG),'PARTITION % FORMAT = ', NML_OUTPUT_TYPE%PARTITION%FORMAT #ifdef W3_COU - WRITE (NDSN,10) TRIM(MSG),'COUPLING % SENT = ', TRIM(NML_OUTPUT_TYPE%COUPLING%SENT) - WRITE (NDSN,10) TRIM(MSG),'COUPLING % RECEIVED = ', TRIM(NML_OUTPUT_TYPE%COUPLING%RECEIVED) - WRITE (NDSN,13) TRIM(MSG),'COUPLING % COUPLET0 = ', NML_OUTPUT_TYPE%COUPLING%COUPLET0 + WRITE (NDSN,10) TRIM(MSG),'COUPLING % SENT = ', TRIM(NML_OUTPUT_TYPE%COUPLING%SENT) + WRITE (NDSN,10) TRIM(MSG),'COUPLING % RECEIVED = ', TRIM(NML_OUTPUT_TYPE%COUPLING%RECEIVED) + WRITE (NDSN,13) TRIM(MSG),'COUPLING % COUPLET0 = ', NML_OUTPUT_TYPE%COUPLING%COUPLET0 #endif - WRITE (NDSN,10) TRIM(MSG),'RESTART % EXTRA = ', TRIM(NML_OUTPUT_TYPE%RESTART%EXTRA) + WRITE (NDSN,10) TRIM(MSG),'RESTART % EXTRA = ', TRIM(NML_OUTPUT_TYPE%RESTART%EXTRA) 10 FORMAT (A,2X,A,A) 11 FORMAT (A,2X,A,I8) @@ -1387,31 +1453,31 @@ SUBROUTINE REPORT_OUTPUT_DATE_NML (NML_OUTPUT_DATE) WRITE (MSG,'(A)') 'OUTPUT DATE MODEL GRID % ' WRITE (NDSN,'(A)') - WRITE (NDSN,10) TRIM(MSG),'FIELD % START = ', TRIM(NML_OUTPUT_DATE%FIELD%START) - WRITE (NDSN,10) TRIM(MSG),'FIELD % STRIDE = ', TRIM(NML_OUTPUT_DATE%FIELD%STRIDE) - WRITE (NDSN,10) TRIM(MSG),'FIELD % STOP = ', TRIM(NML_OUTPUT_DATE%FIELD%STOP) - WRITE (NDSN,10) TRIM(MSG),'POINT % START = ', TRIM(NML_OUTPUT_DATE%POINT%START) - WRITE (NDSN,10) TRIM(MSG),'POINT % STRIDE = ', TRIM(NML_OUTPUT_DATE%POINT%STRIDE) - WRITE (NDSN,10) TRIM(MSG),'POINT % STOP = ', TRIM(NML_OUTPUT_DATE%POINT%STOP) - WRITE (NDSN,10) TRIM(MSG),'TRACK % START = ', TRIM(NML_OUTPUT_DATE%TRACK%START) - WRITE (NDSN,10) TRIM(MSG),'TRACK % STRIDE = ', TRIM(NML_OUTPUT_DATE%TRACK%STRIDE) - WRITE (NDSN,10) TRIM(MSG),'TRACK % STOP = ', TRIM(NML_OUTPUT_DATE%TRACK%STOP) - WRITE (NDSN,10) TRIM(MSG),'RESTART % START = ', TRIM(NML_OUTPUT_DATE%RESTART%START) - WRITE (NDSN,10) TRIM(MSG),'RESTART % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART%STRIDE) - WRITE (NDSN,10) TRIM(MSG),'RESTART % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART%STOP) - WRITE (NDSN,10) TRIM(MSG),'RESTART2 % START = ', TRIM(NML_OUTPUT_DATE%RESTART2%START) - WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART2%STRIDE) - WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART2%STOP) - WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % START = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%START) - WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STRIDE = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STRIDE) - WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STOP = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STOP) + WRITE (NDSN,10) TRIM(MSG),'FIELD % START = ', TRIM(NML_OUTPUT_DATE%FIELD%START) + WRITE (NDSN,10) TRIM(MSG),'FIELD % STRIDE = ', TRIM(NML_OUTPUT_DATE%FIELD%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'FIELD % STOP = ', TRIM(NML_OUTPUT_DATE%FIELD%STOP) + WRITE (NDSN,10) TRIM(MSG),'POINT % START = ', TRIM(NML_OUTPUT_DATE%POINT%START) + WRITE (NDSN,10) TRIM(MSG),'POINT % STRIDE = ', TRIM(NML_OUTPUT_DATE%POINT%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'POINT % STOP = ', TRIM(NML_OUTPUT_DATE%POINT%STOP) + WRITE (NDSN,10) TRIM(MSG),'TRACK % START = ', TRIM(NML_OUTPUT_DATE%TRACK%START) + WRITE (NDSN,10) TRIM(MSG),'TRACK % STRIDE = ', TRIM(NML_OUTPUT_DATE%TRACK%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'TRACK % STOP = ', TRIM(NML_OUTPUT_DATE%TRACK%STOP) + WRITE (NDSN,10) TRIM(MSG),'RESTART % START = ', TRIM(NML_OUTPUT_DATE%RESTART%START) + WRITE (NDSN,10) TRIM(MSG),'RESTART % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'RESTART % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART%STOP) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % START = ', TRIM(NML_OUTPUT_DATE%RESTART2%START) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART2%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART2%STOP) + WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % START = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%START) + WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STRIDE = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STOP = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STOP) WRITE (NDSN,10) TRIM(MSG),'PARTITION % START = ', TRIM(NML_OUTPUT_DATE%PARTITION%START) WRITE (NDSN,10) TRIM(MSG),'PARTITION % STRIDE = ', TRIM(NML_OUTPUT_DATE%PARTITION%STRIDE) WRITE (NDSN,10) TRIM(MSG),'PARTITION % STOP = ', TRIM(NML_OUTPUT_DATE%PARTITION%STOP) #ifdef W3_COU - WRITE (NDSN,10) TRIM(MSG),'COUPLING % START = ', TRIM(NML_OUTPUT_DATE%COUPLING%START) - WRITE (NDSN,10) TRIM(MSG),'COUPLING % STRIDE = ', TRIM(NML_OUTPUT_DATE%COUPLING%STRIDE) - WRITE (NDSN,10) TRIM(MSG),'COUPLING % STOP = ', TRIM(NML_OUTPUT_DATE%COUPLING%STOP) + WRITE (NDSN,10) TRIM(MSG),'COUPLING % START = ', TRIM(NML_OUTPUT_DATE%COUPLING%START) + WRITE (NDSN,10) TRIM(MSG),'COUPLING % STRIDE = ', TRIM(NML_OUTPUT_DATE%COUPLING%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'COUPLING % STOP = ', TRIM(NML_OUTPUT_DATE%COUPLING%STOP) #endif @@ -1426,6 +1492,45 @@ END SUBROUTINE REPORT_OUTPUT_DATE_NML + !/ ------------------------------------------------------------------- / + + SUBROUTINE REPORT_OUTPUT_PATH_NML (NML_OUTPUT_PATH) + ! + +#ifdef W3_S + USE W3SERVMD, ONLY: STRACE +#endif + + IMPLICIT NONE + + TYPE(NML_OUTPUT_PATH_T), INTENT(IN) :: NML_OUTPUT_PATH + + ! LOCALS +#ifdef W3_S + INTEGER, SAVE :: IENT = 0 +#endif + +#ifdef W3_S + CALL STRACE (IENT, 'REPORT_OUTPUT_PATH_NML') +#endif + + WRITE (MSG,'(A)') 'OUTPUT PATH % ' + WRITE (NDSN,'(A)') + WRITE (NDSN,10) TRIM(MSG),'GRD_OUT = ', TRIM(NML_OUTPUT_PATH%GRD_OUT) + WRITE (NDSN,10) TRIM(MSG),'PNT_OUT = ', TRIM(NML_OUTPUT_PATH%PNT_OUT) + WRITE (NDSN,10) TRIM(MSG),'RST_OUT = ', TRIM(NML_OUTPUT_PATH%RST_OUT) + +10 FORMAT (A,2X,A,A) + + END SUBROUTINE REPORT_OUTPUT_PATH_NML + + !/ ------------------------------------------------------------------- / + + + + + + !/ ------------------------------------------------------------------- / SUBROUTINE REPORT_HOMOGENEOUS_NML (NML_HOMOG_COUNT, NML_HOMOG_INPUT) diff --git a/model/src/w3odatmd.F90 b/model/src/w3odatmd.F90 index 3a667ebbf..8d4c3c774 100644 --- a/model/src/w3odatmd.F90 +++ b/model/src/w3odatmd.F90 @@ -328,6 +328,13 @@ MODULE W3ODATMD INTEGER, PARAMETER :: NOEXTR= 2 CHARACTER(LEN=20) :: IDOUT(NOGRP,NGRPP) CHARACTER(LEN=80) :: FNMPRE = './' + + ! SET GLOBAL PATH FOR USER DEFINED OUTPUT + CHARACTER(LEN=80) :: FNMGRD = 'UNSET' + CHARACTER(LEN=80) :: FNMPNT = 'UNSET' + CHARACTER(LEN=80) :: FNMRST = 'UNSET' + !CHARACTER(LEN=80) :: FNMRST = './' + !Moved UNDEF to constants and included above !REAL :: UNDEF = -999.9 LOGICAL :: UNIPTS = .FALSE., UPPROC = .FALSE. diff --git a/model/src/ww3_outf.F90 b/model/src/ww3_outf.F90 index 590518037..02f5efa85 100644 --- a/model/src/ww3_outf.F90 +++ b/model/src/ww3_outf.F90 @@ -170,7 +170,7 @@ PROGRAM W3OUTF HCMAXE, HMAXD, HCMAXD, MSSD, MSCD, WBT, & WNMEAN, TAUA, TAUADIR USE W3ODATMD, ONLY: NDSO, NDSE, NDST, NOGRP, NGRPP, IDOUT, & - UNDEF, FLOGRD, FNMPRE, NOSWLL, NOGE + UNDEF, FLOGRD, FNMPRE, FNMGRD, FNMPNT, FNMRST, NOSWLL, NOGE ! IMPLICIT NONE !/ diff --git a/model/src/ww3_shel.F90 b/model/src/ww3_shel.F90 index 4bb888b48..fcba340ab 100644 --- a/model/src/ww3_shel.F90 +++ b/model/src/ww3_shel.F90 @@ -269,7 +269,7 @@ PROGRAM W3SHEL #endif USE W3ODATMD, ONLY: W3NOUT, W3SETO USE W3ODATMD, ONLY: NAPROC, IAPROC, NAPOUT, NAPERR, NOGRP, & - NGRPP, IDOUT, FNMPRE, IOSTYP, NOTYPE + NGRPP, IDOUT, FNMPRE, FNMGRD, FNMPNT, FNMRST, IOSTYP, NOTYPE USE W3ODATMD, ONLY: FLOGRR, FLOGR, OFILES !/ USE W3FLDSMD @@ -326,6 +326,7 @@ PROGRAM W3SHEL TYPE(NML_INPUT_T) :: NML_INPUT TYPE(NML_OUTPUT_TYPE_T) :: NML_OUTPUT_TYPE TYPE(NML_OUTPUT_DATE_T) :: NML_OUTPUT_DATE + TYPE(NML_OUTPUT_PATH_T) :: NML_OUTPUT_PATH TYPE(NML_HOMOG_COUNT_T) :: NML_HOMOG_COUNT TYPE(NML_HOMOG_INPUT_T), ALLOCATABLE :: NML_HOMOG_INPUT(:) ! @@ -398,6 +399,9 @@ PROGRAM W3SHEL #endif character(len=10) :: jchar integer :: memunit + + LOGICAL :: DIR_EXISTS + INTEGER :: DIR_STATUS ! !/ !/ ------------------------------------------------------------------- / @@ -695,8 +699,8 @@ PROGRAM W3SHEL IF (FLGNML) THEN ! Read namelist CALL W3NMLSHEL (MPI_COMM, NDSI, TRIM(FNMPRE)//'ww3_shel.nml', & - NML_DOMAIN, NML_INPUT, NML_OUTPUT_TYPE, & - NML_OUTPUT_DATE, NML_HOMOG_COUNT, & + NML_DOMAIN, NML_INPUT, NML_OUTPUT_TYPE, & + NML_OUTPUT_DATE, NML_OUTPUT_PATH, NML_HOMOG_COUNT, & NML_HOMOG_INPUT, IERR) ! 2.1 forcing flags @@ -1192,6 +1196,10 @@ PROGRAM W3SHEL ! END IF ! FLHOM + ! USER DEFINED OUTPUT PATH FROM NAMELIST + FNMGRD = NML_OUTPUT_PATH%GRD_OUT + FNMPNT = NML_OUTPUT_PATH%PNT_OUT + FNMRST = NML_OUTPUT_PATH%RST_OUT END IF ! FLGNML @@ -1986,7 +1994,7 @@ PROGRAM W3SHEL #ifdef W3_OASIS , .TRUE., .FALSE., MPI_COMM, TIMEN & #endif - ) + ) ! GOTO 2222 ! diff --git a/regtests/ww3_tp1.1/grd_out/out_grd.ww3 b/regtests/ww3_tp1.1/grd_out/out_grd.ww3 new file mode 100644 index 0000000000000000000000000000000000000000..79f5e85a8638782c4ebb05087591a625f7766f6e GIT binary patch literal 164906 zcmeI%OKx376ouhqMUfB+G9-e%7`taoHt#@{3XJ@+ymuL5P=hs&k*H^o@ z&)z+K{pk43!{ejFqc@HZ@9!=y&o53MoLrrqzrQ>E;QHk1{Brl~vu)dp?fc5M9Xx*a z-R}JT$G=b7@9wtm&9>dSckt?aAGM#Ke*SBp`q_y90waMt_qOfjf7)+e@Wp@w9N<8t z0|#v`z8G+T102Y6!2axi2o7+71Cb8gW*m3_eC@B79{FOx0S<5=&w<;&(a-yvkGJO^ z{Y{Z@A}|xs-!vk2ZVWiUfn*0{wt1PYnV1O&IB@Gg^1H*`%!dOUSl9vmjl4Q9uQn4i z;Xrp_=x;u$q*{MdB%BD$1oStJ$ijQAXE%Qi?12MvVmUDfIKY8S2kemcXby0I1Cb8s zZ{);1C&mH`4&*s7^f#YYQmwx!5>5nW0{WXq#LkTY2RM-IfZR4Sw>1}Y;Q$Ac-yQB| zx8VQ>7Ir{?Bd^ZOtIfnrIM5v!`kT)xsn*{V2`2(G0sT!QvhZH(+0CB=d*FbKSVqhN z4samT0Xw8Ungbl*K%@iu8#!^$iLt%!C8o zfuX)Fkp1AE|rj95m@0S<5= z(*ZlAJ(>d?;6S7U`WrcM&xx_Xf&+OD4E@d5l~n6*ii8t^nSlPL5wUY)zyS^)!T}B>zdPK`Zo>f%EbM^( zMqZtlSDT5MaG*Od^f%vEQmwx!5>5nW0{WXqWZ}KmvztE$_P_xdv5c4l9N<8v19nJz zGzU1qfk+4RH*(^h6Jvn|2l5;k`kNmrsn*{V2`2(G0sT!QV&}$y0~|sb zJ#auqEFfQ@AkqQ-jhwjW#8_a#fjkF>{^qAjs`WQT!im64K!4MS z*ts#_00)vCklSYFw&r3k9N<9myTje=HXPuGAkTrJ zzxkz-YW+=-a3U}h(BCv7c5Vzfz=323If$qT2-~3uhwf?3^I1!i$=x-X4h4)&|ZvGtD0|#WpGGY#JfCHHh*dguF9N+*4 zA|24*$ccMSj0F}P$a7%mZ+@$!T7Od{oCwSW^f!%&of`uVa3I+Mxou`{YcA%(0S+X; zJKW7~!vPK~?1278UY(a$n~9llpgS=1H@{a>t-mP}P6TEG`kO{%;l0+gn?DEkzyTSt mjFU>ZP?58tF_V6=*VzsY`8RGj2Upx^bwcXTqL))^pp)ub#^gx?QJumBdSr5v|>zm;Z<)*efp{<0*RP_B+YYP0T9sbM)Wo z_Yr-2Y8U;uY8Q2%+C{$(wTpheY8UM;Y8UN(Y8UO!Y8MR;7fl0uE~18xoxOH5M3xzH z?JGU@P3?5Kb^7Do?+>jLcQEOmm);w*zP|rE_`CfnF&g~*bH#rAb*6PbwYF<()o;o9 zi9cW7x?{N@7d5z-j${ZK#3Atj+AE%5lwmwIgOEc2wOc9Lh z0QchF1DVCqk?2Ttq#eM}w%v$CK)BrU=4NwErr~uif z0wi}8Ad*pg0jL3LfEu6%r~zt#8lVQKxm@DZ+ODnTE2H)jPy^HeH9!qe1JnRDKn+mK zC#WUGacs}wRf_F7*q(#!IoO_~g)GeC#1-5U&Vpd>@=OW3_*gyCaVkrnODai#ns)@C z2B-mQfSRfzJF*5x0BV35peAIP2^|WkEvqB}YTglm8lVQK0cxs>fLd?_pa!S`YMFxC z3ZQnRv! Date: Tue, 11 Feb 2025 10:27:04 -0600 Subject: [PATCH 02/13] user-defined path feature development --- model/nml/ww3_shel.nml | 21 +++++++++++++++++++++ model/src/w3iogomd.F90 | 12 ++++-------- model/src/w3iopomd.F90 | 24 ++++++++---------------- model/src/w3iorsmd.F90 | 12 ++++-------- model/src/w3odatmd.F90 | 9 ++++----- 5 files changed, 41 insertions(+), 37 deletions(-) diff --git a/model/nml/ww3_shel.nml b/model/nml/ww3_shel.nml index b6ae8cfef..b91fff57a 100644 --- a/model/nml/ww3_shel.nml +++ b/model/nml/ww3_shel.nml @@ -316,6 +316,27 @@ +! -------------------------------------------------------------------- ! +! Define user-defined output paths via OUTPUT_PATH_NML namelist +! +! * user-defined paths include: raw output out_grd, out_pnt, and restart +! * default path for these are set as './' +! * NOTE: using user-defined path may cause post-processing fail +! user-defined directroy must exist before execution +! +! * namelist must be terminated with / +! * definitions & defaults: +! PATH%GRD_OUT = './' +! PATH%PNT_OUT = './' +! PATH%RST_OUT = './' +! -------------------------------------------------------------------- ! +&OUTPUT_PATH_NML + PATH%GRD_OUT = './' +/ + + + + ! -------------------------------------------------------------------- ! ! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist ! diff --git a/model/src/w3iogomd.F90 b/model/src/w3iogomd.F90 index ded9bf16f..86772cf75 100644 --- a/model/src/w3iogomd.F90 +++ b/model/src/w3iogomd.F90 @@ -2628,16 +2628,12 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & ! open file ---------------------------------------------------------- * ! ( IPASS = 1 ) ! - IF (FNMGRD .EQ. 'UNSET' .OR. LEN_TRIM(FNMGRD) .EQ. 0) THEN - ! WRITE THE ERROR MESSAGE - WRITE (NDSE,*) ' *** WAVEWATCH III ERROR IN W3IOGO : ' - WRITE (NDSE,*) ' ERROR IN FILE PATH' - WRITE (NDSE, '(A, A)') ' PATH = ', TRIM(FNMGRD) - CALL EXTCDE(42) + IF (LEN_TRIM(FNMPNT) .EQ. 0) THEN + FNMPRE_LOCAL = FNMPRE + ELSE + FNMPRE_LOCAL = FNMPNT END IF - FNMPRE_LOCAL = FNMGRD - IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE_LOCAL) diff --git a/model/src/w3iopomd.F90 b/model/src/w3iopomd.F90 index 2d097efe9..859a64d70 100644 --- a/model/src/w3iopomd.F90 +++ b/model/src/w3iopomd.F90 @@ -1968,15 +1968,11 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) END IF ! Determine filename. - IF (FNMPNT .EQ. 'UNSET' .OR. LEN_TRIM(FNMPNT) .EQ. 0) THEN - ! WRITE THE ERROR MESSAGE - WRITE (NDSE,*) ' *** WAVEWATCH III ERROR IN W3IOPON : ' - WRITE (NDSE,*) ' ERROR IN FILE PATH' - WRITE (NDSE, '(A, A)') ' PATH = ', TRIM(FNMPNT) - CALL EXTCDE(42) + IF (LEN_TRIM(FNMPNT) .EQ. 0) THEN + FNMPRE_LOCAL = FNMPRE + ELSE + FNMPRE_LOCAL = FNMPNT END IF - - FNMPRE_LOCAL = FNMPNT ! IF ( OFILES(2) .EQ. 1 ) THEN @@ -2257,15 +2253,11 @@ SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD & ! ! open file ---------------------------------------------------------- * ! - IF (FNMPNT .EQ. 'UNSET' .OR. LEN_TRIM(FNMPNT) .EQ. 0) THEN - ! WRITE THE ERROR MESSAGE - WRITE (NDSE,*) ' *** WAVEWATCH III ERROR IN W3IOPO : ' - WRITE (NDSE,*) ' ERROR IN FILE PATH' - WRITE (NDSE, '(A, A)') ' PATH = ', TRIM(FNMPNT) - CALL EXTCDE(42) + IF (LEN_TRIM(FNMPNT) .EQ. 0) THEN + FNMPRE_LOCAL = FNMPRE + ELSE + FNMPRE_LOCAL = FNMPNT END IF - - FNMPRE_LOCAL = FNMPNT ! IF ( IPASS.EQ.1 .AND. OFILES(2) .EQ. 0 ) THEN diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index b27207d10..6b6e650b3 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -461,15 +461,11 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) ! ! open file ---------------------------------------------------------- * ! - IF (FNMRST .EQ. 'UNSET' .OR. LEN_TRIM(FNMRST) .EQ. 0) THEN - ! WRITE THE ERROR MESSAGE - WRITE (NDSE,*) ' *** WAVEWATCH III ERROR IN W3IORS : ' - WRITE (NDSE,*) ' ERROR IN FILE PATH' - WRITE (NDSE, '(A, A)') ' PATH = ', TRIM(FNMRST) - CALL EXTCDE(42) + IF (LEN_TRIM(FNMPNT) .EQ. 0) THEN + FNMPRE_LOCAL = FNMPRE + ELSE + FNMPRE_LOCAL = FNMPNT END IF - - FNMPRE_LOCAL = FNMRST ! I = LEN_TRIM(FILEXT) diff --git a/model/src/w3odatmd.F90 b/model/src/w3odatmd.F90 index c3252bf7a..1a1ac5a05 100644 --- a/model/src/w3odatmd.F90 +++ b/model/src/w3odatmd.F90 @@ -329,11 +329,10 @@ MODULE W3ODATMD CHARACTER(LEN=20) :: IDOUT(NOGRP,NGRPP) CHARACTER(LEN=80) :: FNMPRE = './' - ! SET GLOBAL PATH FOR USER DEFINED OUTPUT - CHARACTER(LEN=80) :: FNMGRD = 'UNSET' - CHARACTER(LEN=80) :: FNMPNT = 'UNSET' - CHARACTER(LEN=80) :: FNMRST = 'UNSET' - !CHARACTER(LEN=80) :: FNMRST = './' + ! SET GLOBAL PATH FOR USER DEFINED OUTPUT, DEFAULT CURRENT PATH + CHARACTER(LEN=80) :: FNMGRD = './' + CHARACTER(LEN=80) :: FNMPNT = './' + CHARACTER(LEN=80) :: FNMRST = './' !Moved UNDEF to constants and included above !REAL :: UNDEF = -999.9 From 837894ce6d1194702055005f6ae8a5e15146d3ca Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Tue, 11 Feb 2025 11:51:22 -0600 Subject: [PATCH 03/13] user-defined path feature development --- model/src/w3iogomd.F90 | 4 ++-- model/src/w3iorsmd.F90 | 4 ++-- regtests/ww3_tp1.1/grd_out/out_grd.ww3 | Bin 164906 -> 164906 bytes regtests/ww3_tp1.1/input/ww3_shel.nml | 2 -- regtests/ww3_tp1.1/pnt_out/out_pnt.ww3 | Bin 62902 -> 62902 bytes 5 files changed, 4 insertions(+), 6 deletions(-) diff --git a/model/src/w3iogomd.F90 b/model/src/w3iogomd.F90 index 86772cf75..1914f888a 100644 --- a/model/src/w3iogomd.F90 +++ b/model/src/w3iogomd.F90 @@ -2628,10 +2628,10 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & ! open file ---------------------------------------------------------- * ! ( IPASS = 1 ) ! - IF (LEN_TRIM(FNMPNT) .EQ. 0) THEN + IF (LEN_TRIM(FNMGRD) .EQ. 0) THEN FNMPRE_LOCAL = FNMPRE ELSE - FNMPRE_LOCAL = FNMPNT + FNMPRE_LOCAL = FNMGRD END IF IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 6b6e650b3..0bafba283 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -461,10 +461,10 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) ! ! open file ---------------------------------------------------------- * ! - IF (LEN_TRIM(FNMPNT) .EQ. 0) THEN + IF (LEN_TRIM(FNMRST) .EQ. 0) THEN FNMPRE_LOCAL = FNMPRE ELSE - FNMPRE_LOCAL = FNMPNT + FNMPRE_LOCAL = FNMRST END IF ! diff --git a/regtests/ww3_tp1.1/grd_out/out_grd.ww3 b/regtests/ww3_tp1.1/grd_out/out_grd.ww3 index 79f5e85a8638782c4ebb05087591a625f7766f6e..7342113e3f0151253b8d8fc46081b21e70c9fb26 100644 GIT binary patch delta 21528 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 Date: Tue, 11 Feb 2025 13:10:22 -0600 Subject: [PATCH 04/13] restore regtests to origin --- regtests/ww3_tp1.1/grd_out/out_grd.ww3 | Bin 164906 -> 0 bytes regtests/ww3_tp1.1/input/ww3_shel.nml | 9 --------- regtests/ww3_tp1.1/pnt_out/out_pnt.ww3 | Bin 62902 -> 0 bytes regtests/ww3_tp2.1/input/ww3_shel.nml | 9 --------- 4 files changed, 18 deletions(-) delete mode 100644 regtests/ww3_tp1.1/grd_out/out_grd.ww3 delete mode 100644 regtests/ww3_tp1.1/pnt_out/out_pnt.ww3 diff --git a/regtests/ww3_tp1.1/grd_out/out_grd.ww3 b/regtests/ww3_tp1.1/grd_out/out_grd.ww3 deleted file mode 100644 index 7342113e3f0151253b8d8fc46081b21e70c9fb26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164906 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 Z48bYJ(DL$~k(LuRG%WsK?*xt5|36m0aPa^D diff --git a/regtests/ww3_tp1.1/input/ww3_shel.nml b/regtests/ww3_tp1.1/input/ww3_shel.nml index f2ab3675c..412723da0 100644 --- a/regtests/ww3_tp1.1/input/ww3_shel.nml +++ b/regtests/ww3_tp1.1/input/ww3_shel.nml @@ -33,15 +33,6 @@ DATE%POINT = '19680600 000000' '86400' '19680625 000000' / -! -------------------------------------------------------------------- ! -! Define output user path via OUTPUT_PATH_NML namelist -! -------------------------------------------------------------------- ! -&OUTPUT_PATH_NML - PATH%GRD_OUT = '/work2/noaa/marine/ming.chen/user_def_path/regtests/ww3_tp1.1/grd_out/' - PATH%PNT_OUT = '/work2/noaa/marine/ming.chen/user_def_path/regtests/ww3_tp1.1/pnt_out/' -/ - - ! -------------------------------------------------------------------- ! ! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp1.1/pnt_out/out_pnt.ww3 b/regtests/ww3_tp1.1/pnt_out/out_pnt.ww3 deleted file mode 100644 index eb572acff7cf6d0960e44c9a0dba01d3ab1ac5aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62902 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 Date: Thu, 13 Feb 2025 09:57:21 -0600 Subject: [PATCH 05/13] Character lengths for paths changed to 256 --- model/src/w3iogomd.F90 | 2 +- model/src/w3iopomd.F90 | 4 ++-- model/src/w3iorsmd.F90 | 2 +- model/src/w3nmlshelmd.F90 | 6 +++--- model/src/w3odatmd.F90 | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/model/src/w3iogomd.F90 b/model/src/w3iogomd.F90 index 1914f888a..72412bbd3 100644 --- a/model/src/w3iogomd.F90 +++ b/model/src/w3iogomd.F90 @@ -2578,7 +2578,7 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & CHARACTER(LEN=10) :: VERTST ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE - CHARACTER(LEN=80) :: FNMPRE_LOCAL + CHARACTER(LEN=256) :: FNMPRE_LOCAL !/ !/ ------------------------------------------------------------------- / diff --git a/model/src/w3iopomd.F90 b/model/src/w3iopomd.F90 index 859a64d70..277d8dbd9 100644 --- a/model/src/w3iopomd.F90 +++ b/model/src/w3iopomd.F90 @@ -1938,7 +1938,7 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) integer :: ncerr ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE - CHARACTER(LEN=80) :: FNMPRE_LOCAL + CHARACTER(LEN=256) :: FNMPRE_LOCAL #ifdef W3_S CALL STRACE (IENT, 'W3IOPON') @@ -2213,7 +2213,7 @@ SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD & CHARACTER(LEN=15) :: TIMETAG ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE - CHARACTER(LEN=80) :: FNMPRE_LOCAL + CHARACTER(LEN=256) :: FNMPRE_LOCAL !/ !/ ------------------------------------------------------------------- / diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 0bafba283..11d49a2c1 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -382,7 +382,7 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) CHARACTER(LEN=15) :: TIMETAG ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE - CHARACTER(LEN=80) :: FNMPRE_LOCAL + CHARACTER(LEN=256) :: FNMPRE_LOCAL !/ !/ ------------------------------------------------------------------- / diff --git a/model/src/w3nmlshelmd.F90 b/model/src/w3nmlshelmd.F90 index 8ecf9e6cf..d3c5d7ca8 100644 --- a/model/src/w3nmlshelmd.F90 +++ b/model/src/w3nmlshelmd.F90 @@ -131,9 +131,9 @@ MODULE W3NMLSHELMD ! NEW TYPE FOR USER DEFINED PATH TYPE NML_OUTPUT_PATH_T - CHARACTER(LEN=80) :: GRD_OUT - CHARACTER(LEN=80) :: PNT_OUT - CHARACTER(LEN=80) :: RST_OUT + CHARACTER(LEN=256) :: GRD_OUT + CHARACTER(LEN=256) :: PNT_OUT + CHARACTER(LEN=256) :: RST_OUT END TYPE NML_OUTPUT_PATH_T ! homogeneous input structure diff --git a/model/src/w3odatmd.F90 b/model/src/w3odatmd.F90 index 1a1ac5a05..9c9b43e8d 100644 --- a/model/src/w3odatmd.F90 +++ b/model/src/w3odatmd.F90 @@ -330,9 +330,9 @@ MODULE W3ODATMD CHARACTER(LEN=80) :: FNMPRE = './' ! SET GLOBAL PATH FOR USER DEFINED OUTPUT, DEFAULT CURRENT PATH - CHARACTER(LEN=80) :: FNMGRD = './' - CHARACTER(LEN=80) :: FNMPNT = './' - CHARACTER(LEN=80) :: FNMRST = './' + CHARACTER(LEN=256) :: FNMGRD = './' + CHARACTER(LEN=256) :: FNMPNT = './' + CHARACTER(LEN=256) :: FNMRST = './' !Moved UNDEF to constants and included above !REAL :: UNDEF = -999.9 From 4722fce707911eddd09dd995c35680a360d6c78d Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Thu, 13 Feb 2025 10:24:51 -0600 Subject: [PATCH 06/13] add header to subroutines READ_OUTPUT_PATH_NML and REPORT_OUTPUT_PATH_NML --- model/src/w3nmlshelmd.F90 | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/model/src/w3nmlshelmd.F90 b/model/src/w3nmlshelmd.F90 index d3c5d7ca8..26cefe134 100644 --- a/model/src/w3nmlshelmd.F90 +++ b/model/src/w3nmlshelmd.F90 @@ -852,7 +852,63 @@ END SUBROUTINE READ_OUTPUT_DATE_NML !/ ------------------------------------------------------------------- / SUBROUTINE READ_OUTPUT_PATH_NML (NDSI, NML_OUTPUT_PATH) + !/ + !/ +-----------------------------------+ + !/ | WAVEWATCH III NOAA/NCEP | + !/ | M. Chen | + !/ | | + !/ | FORTRAN 90 | + !/ | Last update : 13-Jan-2025 | + !/ +-----------------------------------+ + !/ + !/ + ! 1. Purpose : + ! + ! + ! 2. Method : + ! + ! See source term routines. + ! + ! 3. Parameters : + ! + ! Parameter list + ! ---------------------------------------------------------------- + ! NDSI Int. + ! NML_OUTPUT_PATH Type. + ! ---------------------------------------------------------------- + ! + ! 4. Subroutines used : + ! + ! Name Type Module Description + ! ---------------------------------------------------------------- + ! STRACE Subr. W3SERVMD SUBROUTINE tracing. + ! ---------------------------------------------------------------- + ! + ! 5. Called by : + ! + ! Name Type Module Description + ! ---------------------------------------------------------------- + ! W3NMLSHEL Subr. N/A Namelist configuration routine. + ! ---------------------------------------------------------------- + ! + ! 6. Error messages : + ! + ! None. ! + ! 7. Remarks : + ! + ! 8. Structure : + ! + ! See source code. + ! + ! 9. Switches : + ! + ! !/MPI Uses MPI communications + ! + ! 10. Source code : + ! + !/ ------------------------------------------------------------------- / + USE WMMDATMD, ONLY: MDSE USE W3SERVMD, ONLY: EXTCDE #ifdef W3_S @@ -1495,7 +1551,61 @@ END SUBROUTINE REPORT_OUTPUT_DATE_NML !/ ------------------------------------------------------------------- / SUBROUTINE REPORT_OUTPUT_PATH_NML (NML_OUTPUT_PATH) + !/ + !/ +-----------------------------------+ + !/ | WAVEWATCH III NOAA/NCEP | + !/ | M. Chen | + !/ | | + !/ | FORTRAN 90 | + !/ | Last update : 13-Jan-2025 | + !/ +-----------------------------------+ + !/ + !/ + ! 1. Purpose : + ! + ! + ! 2. Method : + ! + ! See source term routines. + ! + ! 3. Parameters : + ! + ! Parameter list + ! ---------------------------------------------------------------- + ! NML_OUTPUT_PATH Type. + ! ---------------------------------------------------------------- + ! + ! 4. Subroutines used : + ! + ! Name Type Module Description + ! ---------------------------------------------------------------- + ! STRACE Subr. W3SERVMD SUBROUTINE tracing. + ! ---------------------------------------------------------------- + ! + ! 5. Called by : + ! + ! Name Type Module Description + ! ---------------------------------------------------------------- + ! W3NMLSHEL Subr. N/A Namelist configuration routine. + ! ---------------------------------------------------------------- + ! + ! 6. Error messages : + ! + ! None. ! + ! 7. Remarks : + ! + ! 8. Structure : + ! + ! See source code. + ! + ! 9. Switches : + ! + ! !/MPI Uses MPI communications + ! + ! 10. Source code : + ! + !/ ------------------------------------------------------------------- / #ifdef W3_S USE W3SERVMD, ONLY: STRACE From 0b17cd46a47afcd532c2d55008ce491fec036a9f Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Fri, 14 Feb 2025 00:07:23 -0600 Subject: [PATCH 07/13] write log files to indicate files have been fully written --- model/src/w3iopomd.F90 | 16 ++++++++++++++++ model/src/w3iorsmd.F90 | 13 +++++++++++++ 2 files changed, 29 insertions(+) diff --git a/model/src/w3iopomd.F90 b/model/src/w3iopomd.F90 index 277d8dbd9..1f87393a4 100644 --- a/model/src/w3iopomd.F90 +++ b/model/src/w3iopomd.F90 @@ -1627,6 +1627,10 @@ SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr) integer :: curdate(8), refdate(8),ierr double precision :: outjulday + + ! INDICATOR LOG + INTEGER :: FHLOG + !If first pass, or if you are writting a file for every time-step: IF ( IPASS.EQ.1 .OR. timestep_only.EQ.1 ) THEN ! Create the netCDF file. @@ -1887,6 +1891,17 @@ SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr) ncerr = nf90_close(fh) if (nf90_err(ncerr) .ne. 0) return + ! WRITE INDICATOR LOG AT THE END OF NETCDF OUTPUT + ! RE-USE FH FOR FHLOG + IF (timestep_only .EQ. 1) THEN + FHLOG = fh + OPEN(FHLOG,FILE=TRIM(filename)//'.log.txt', & + form ='FORMATTED') + WRITE (FHLOG,*) 'The '//TRIM(filename)//' file has been successfully written!' + CALL FLUSH (FHLOG) + CLOSE (FHLOG) + ENDIF + END SUBROUTINE W3IOPON_WRITE !> Read or write the netCDF point output file, @@ -2002,6 +2017,7 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) 900 FORMAT (/' *** WAVEWATCH III ERROR IN W3IOPO :'/ & ' ILEGAL INXOUT VALUE: ',A/) + END SUBROUTINE W3IOPON #endif !/ ------------------------------------------------------------------- / diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 11d49a2c1..094f357f6 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -384,6 +384,9 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE CHARACTER(LEN=256) :: FNMPRE_LOCAL + ! LOG INDICATOR + INTEGER :: NDSRLOG + !/ !/ ------------------------------------------------------------------- / !/ @@ -1379,6 +1382,16 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) IF (ALLOCATED(TMP)) DEALLOCATE(TMP) IF (ALLOCATED(TMP2)) DEALLOCATE(TMP2) ! + ! LOG FOR FINISHED + IF (WRITE) THEN + NDSRLOG = NDSR + OPEN (NDSRLOG,FILE=FNMPRE_LOCAL(:J)//'log.'//TRIM(FNAME)//'.txt', & + form ='FORMATTED',ERR=800,IOSTAT=IERR) + WRITE (NDSRLOG,*) 'The '//TRIM(FNAME)//' file has been successfully written!' + CALL FLUSH (NDSRLOG) + CLOSE (NDSRLOG) + ENDIF + ! RETURN ! ! Escape locations read errors : From 24202e2025a14129349e513848a017f3b6aadeb3 Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Fri, 14 Feb 2025 14:36:44 -0600 Subject: [PATCH 08/13] add indicator log for gridded output --- model/src/w3iogomd.F90 | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/model/src/w3iogomd.F90 b/model/src/w3iogomd.F90 index 72412bbd3..251b9a1f8 100644 --- a/model/src/w3iogomd.F90 +++ b/model/src/w3iogomd.F90 @@ -2579,7 +2579,8 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE CHARACTER(LEN=256) :: FNMPRE_LOCAL - + ! + INTEGER :: NDSOGLOG !/ !/ ------------------------------------------------------------------- / !/ @@ -4066,6 +4067,17 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & CALL W3SETA ( IGRD, NDSE, NDST ) #endif ! + ! ADD INDICATOR LOG AFTER THE GRIDDED OUTPUT HAS BEEN FULLY WRITTEN + IF ( WRITE .AND. (OFILES(1).EQ.1) ) THEN + NDSOGLOG = NDSOG + OPEN (NDSOGLOG,FILE=FNMPRE_LOCAL(:J)//TIMETAG//'.out_grd.'//FILEXT(:I)//'.log.txt', & + form ='FORMATTED',ERR=800,IOSTAT=IERR) + WRITE (NDSOGLOG,*) 'The '//TRIM(TIMETAG)//'.out_grd.'//TRIM(FILEXT(:I))// & + ' file has been successfully written!' + CALL FLUSH (NDSOGLOG) + CLOSE (NDSOGLOG) + ENDIF + RETURN ! ! Escape locations read errors From 4e66a4b704cd92dc3ce27bade8a74fdfaf2912e3 Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Fri, 14 Feb 2025 14:39:35 -0600 Subject: [PATCH 09/13] re-use NDSOP for the log --- model/src/w3iopomd.F90 | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/model/src/w3iopomd.F90 b/model/src/w3iopomd.F90 index 1f87393a4..e86322c6e 100644 --- a/model/src/w3iopomd.F90 +++ b/model/src/w3iopomd.F90 @@ -1592,7 +1592,7 @@ END SUBROUTINE W3IOPON_READ !> !> @author Edward Hartnett @date 1-Nov-2023 !> - SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr) + SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr, NDSOP) USE NETCDF USE W3GDATMD, ONLY: NTH, NK, NSPEC USE W3WDATMD, ONLY: TIME @@ -1612,6 +1612,9 @@ SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr) integer, intent(in) :: timestep_only ! 1 if only timestep should be written. character(*), intent(in) :: filename integer, intent(inout) :: ncerr + ! + INTEGER, INTENT(IN), OPTIONAL :: NDSOP + ! integer :: ndim, nvar, fmt, itime, fh integer :: d_nopts, d_nspec, d_vsize, d_namelen, d_grdidlen, d_time integer :: v_idtst, v_vertst, v_nk, v_nth, v_ptloc, v_ptnme, v_time, v_ww3time @@ -1629,7 +1632,7 @@ SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr) ! INDICATOR LOG - INTEGER :: FHLOG + INTEGER :: NDSOPLOG !If first pass, or if you are writting a file for every time-step: IF ( IPASS.EQ.1 .OR. timestep_only.EQ.1 ) THEN @@ -1892,14 +1895,14 @@ SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr) if (nf90_err(ncerr) .ne. 0) return ! WRITE INDICATOR LOG AT THE END OF NETCDF OUTPUT - ! RE-USE FH FOR FHLOG + ! RE-USE NDSOP FOR NDSOPLOG IF (timestep_only .EQ. 1) THEN - FHLOG = fh - OPEN(FHLOG,FILE=TRIM(filename)//'.log.txt', & + NDSOPLOG = NDSOP + OPEN(NDSOPLOG,FILE=TRIM(filename)//'.log.txt', & form ='FORMATTED') - WRITE (FHLOG,*) 'The '//TRIM(filename)//' file has been successfully written!' - CALL FLUSH (FHLOG) - CLOSE (FHLOG) + WRITE (NDSOPLOG,*) 'The '//TRIM(filename)//' file has been successfully written!' + CALL FLUSH (NDSOPLOG) + CLOSE (NDSOPLOG) ENDIF END SUBROUTINE W3IOPON_WRITE @@ -2002,7 +2005,7 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) IF (INXOUT .EQ. 'READ') THEN CALL W3IOPON_READ(IOTST, IMOD, filename, ncerr) ELSE - CALL W3IOPON_WRITE(OFILES(2), filename, ncerr) + CALL W3IOPON_WRITE(OFILES(2), filename, ncerr, NDSOP=NDSOP) ENDIF if (nf90_err(ncerr) .ne. 0) then WRITE(NDSE,*) ' *** WAVEWATCH III ERROR IN W3IOPO :' From d5fb52561c0f652f81f478e0bb07a13cfeaf74bf Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Fri, 14 Feb 2025 14:41:50 -0600 Subject: [PATCH 10/13] change the log file name to be consistent with the output logs --- model/src/w3iorsmd.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 094f357f6..2d2acabbb 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -1385,7 +1385,7 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) ! LOG FOR FINISHED IF (WRITE) THEN NDSRLOG = NDSR - OPEN (NDSRLOG,FILE=FNMPRE_LOCAL(:J)//'log.'//TRIM(FNAME)//'.txt', & + OPEN (NDSRLOG,FILE=FNMPRE_LOCAL(:J)//TRIM(FNAME)//'.log.txt', & form ='FORMATTED',ERR=800,IOSTAT=IERR) WRITE (NDSRLOG,*) 'The '//TRIM(FNAME)//' file has been successfully written!' CALL FLUSH (NDSRLOG) From b4fe72ed7e5e4fe682a770388add681299c5cf7d Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Thu, 20 Feb 2025 13:46:26 -0600 Subject: [PATCH 11/13] Restore w3iorsmd.f90 --- model/src/w3iorsmd.F90 | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 2d2acabbb..11d49a2c1 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -384,9 +384,6 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE CHARACTER(LEN=256) :: FNMPRE_LOCAL - ! LOG INDICATOR - INTEGER :: NDSRLOG - !/ !/ ------------------------------------------------------------------- / !/ @@ -1382,16 +1379,6 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) IF (ALLOCATED(TMP)) DEALLOCATE(TMP) IF (ALLOCATED(TMP2)) DEALLOCATE(TMP2) ! - ! LOG FOR FINISHED - IF (WRITE) THEN - NDSRLOG = NDSR - OPEN (NDSRLOG,FILE=FNMPRE_LOCAL(:J)//TRIM(FNAME)//'.log.txt', & - form ='FORMATTED',ERR=800,IOSTAT=IERR) - WRITE (NDSRLOG,*) 'The '//TRIM(FNAME)//' file has been successfully written!' - CALL FLUSH (NDSRLOG) - CLOSE (NDSRLOG) - ENDIF - ! RETURN ! ! Escape locations read errors : From 5373c0ec58bc3f797a3e02ddfdb75219cb99463e Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Fri, 21 Feb 2025 14:29:27 -0600 Subject: [PATCH 12/13] clean tab and unnecessary space --- model/src/w3iogomd.F90 | 6 +++--- model/src/w3iopomd.F90 | 1 - model/src/w3iorsmd.F90 | 4 ++-- model/src/w3nmlshelmd.F90 | 8 ++++---- model/src/ww3_shel.F90 | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/model/src/w3iogomd.F90 b/model/src/w3iogomd.F90 index 251b9a1f8..bbdefe655 100644 --- a/model/src/w3iogomd.F90 +++ b/model/src/w3iogomd.F90 @@ -2631,8 +2631,8 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & ! IF (LEN_TRIM(FNMGRD) .EQ. 0) THEN FNMPRE_LOCAL = FNMPRE - ELSE - FNMPRE_LOCAL = FNMGRD + ELSE + FNMPRE_LOCAL = FNMGRD END IF IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN @@ -4073,7 +4073,7 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & OPEN (NDSOGLOG,FILE=FNMPRE_LOCAL(:J)//TIMETAG//'.out_grd.'//FILEXT(:I)//'.log.txt', & form ='FORMATTED',ERR=800,IOSTAT=IERR) WRITE (NDSOGLOG,*) 'The '//TRIM(TIMETAG)//'.out_grd.'//TRIM(FILEXT(:I))// & - ' file has been successfully written!' + ' file has been successfully written!' CALL FLUSH (NDSOGLOG) CLOSE (NDSOGLOG) ENDIF diff --git a/model/src/w3iopomd.F90 b/model/src/w3iopomd.F90 index e86322c6e..26aac27f8 100644 --- a/model/src/w3iopomd.F90 +++ b/model/src/w3iopomd.F90 @@ -2020,7 +2020,6 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) 900 FORMAT (/' *** WAVEWATCH III ERROR IN W3IOPO :'/ & ' ILEGAL INXOUT VALUE: ',A/) - END SUBROUTINE W3IOPON #endif !/ ------------------------------------------------------------------- / diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 11d49a2c1..b04e28534 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -463,8 +463,8 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) ! IF (LEN_TRIM(FNMRST) .EQ. 0) THEN FNMPRE_LOCAL = FNMPRE - ELSE - FNMPRE_LOCAL = FNMRST + ELSE + FNMPRE_LOCAL = FNMRST END IF ! diff --git a/model/src/w3nmlshelmd.F90 b/model/src/w3nmlshelmd.F90 index 26cefe134..7715a2bd2 100644 --- a/model/src/w3nmlshelmd.F90 +++ b/model/src/w3nmlshelmd.F90 @@ -326,10 +326,10 @@ SUBROUTINE W3NMLSHEL (MPI_COMM, NDSI, INFILE, NML_DOMAIN, & CALL READ_OUTPUT_DATE_NML (NDSI, NML_OUTPUT_DATE) IF ( IMPROC .EQ. NMPLOG ) CALL REPORT_OUTPUT_DATE_NML (NML_OUTPUT_DATE) - ! READ OUTPUT USER DEFINED PATH NAMELIST + ! READ OUTPUT USER DEFINED PATH NAMELIST CALL READ_OUTPUT_PATH_NML (NDSI, NML_OUTPUT_PATH) IF ( IMPROC .EQ. NMPLOG ) CALL REPORT_OUTPUT_PATH_NML (NML_OUTPUT_PATH) - + ! read homogeneous namelist CALL READ_HOMOGENEOUS_NML (NDSI, NML_HOMOG_COUNT, NML_HOMOG_INPUT) IF ( IMPROC .EQ. NMPLOG ) CALL REPORT_HOMOGENEOUS_NML (NML_HOMOG_COUNT, NML_HOMOG_INPUT) @@ -946,7 +946,7 @@ SUBROUTINE READ_OUTPUT_PATH_NML (NDSI, NML_OUTPUT_PATH) 'ERROR: READ_OUTPUT_PATH_NML: namelist read error', & 'ERROR: '//TRIM(MSG) CALL EXTCDE (8) - END IF + END IF ! SAVE NAMELIST NML_OUTPUT_PATH = PATH @@ -1632,7 +1632,7 @@ SUBROUTINE REPORT_OUTPUT_PATH_NML (NML_OUTPUT_PATH) 10 FORMAT (A,2X,A,A) - END SUBROUTINE REPORT_OUTPUT_PATH_NML + END SUBROUTINE REPORT_OUTPUT_PATH_NML !/ ------------------------------------------------------------------- / diff --git a/model/src/ww3_shel.F90 b/model/src/ww3_shel.F90 index fcba340ab..298863fc7 100644 --- a/model/src/ww3_shel.F90 +++ b/model/src/ww3_shel.F90 @@ -401,7 +401,7 @@ PROGRAM W3SHEL integer :: memunit LOGICAL :: DIR_EXISTS - INTEGER :: DIR_STATUS + INTEGER :: DIR_STATUS ! !/ !/ ------------------------------------------------------------------- / From ced2017ffc8eede53e83dd93f759a8de4fd939b1 Mon Sep 17 00:00:00 2001 From: mingchen-NOAA Date: Fri, 21 Feb 2025 15:58:25 -0600 Subject: [PATCH 13/13] rename the log files --- model/src/w3iogomd.F90 | 2 +- model/src/w3iopomd.F90 | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/model/src/w3iogomd.F90 b/model/src/w3iogomd.F90 index bbdefe655..cceafe4fa 100644 --- a/model/src/w3iogomd.F90 +++ b/model/src/w3iogomd.F90 @@ -4070,7 +4070,7 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD & ! ADD INDICATOR LOG AFTER THE GRIDDED OUTPUT HAS BEEN FULLY WRITTEN IF ( WRITE .AND. (OFILES(1).EQ.1) ) THEN NDSOGLOG = NDSOG - OPEN (NDSOGLOG,FILE=FNMPRE_LOCAL(:J)//TIMETAG//'.out_grd.'//FILEXT(:I)//'.log.txt', & + OPEN (NDSOGLOG,FILE=FNMPRE_LOCAL(:J)//'log.'//TIMETAG//'.out_grd.'//FILEXT(:I)//'.txt', & form ='FORMATTED',ERR=800,IOSTAT=IERR) WRITE (NDSOGLOG,*) 'The '//TRIM(TIMETAG)//'.out_grd.'//TRIM(FILEXT(:I))// & ' file has been successfully written!' diff --git a/model/src/w3iopomd.F90 b/model/src/w3iopomd.F90 index 26aac27f8..0e1f3c39c 100644 --- a/model/src/w3iopomd.F90 +++ b/model/src/w3iopomd.F90 @@ -1592,7 +1592,7 @@ END SUBROUTINE W3IOPON_READ !> !> @author Edward Hartnett @date 1-Nov-2023 !> - SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr, NDSOP) + SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr, NDSOP, fname, path) USE NETCDF USE W3GDATMD, ONLY: NTH, NK, NSPEC USE W3WDATMD, ONLY: TIME @@ -1614,6 +1614,8 @@ SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr, NDSOP) integer, intent(inout) :: ncerr ! INTEGER, INTENT(IN), OPTIONAL :: NDSOP + CHARACTER(LEN=124), INTENT(IN), OPTIONAL :: fname + CHARACTER(LEN=256), INTENT(IN), OPTIONAL :: path ! integer :: ndim, nvar, fmt, itime, fh integer :: d_nopts, d_nspec, d_vsize, d_namelen, d_grdidlen, d_time @@ -1898,9 +1900,9 @@ SUBROUTINE W3IOPON_WRITE(timestep_only,filename, ncerr, NDSOP) ! RE-USE NDSOP FOR NDSOPLOG IF (timestep_only .EQ. 1) THEN NDSOPLOG = NDSOP - OPEN(NDSOPLOG,FILE=TRIM(filename)//'.log.txt', & + OPEN(NDSOPLOG,FILE=path(:LEN_TRIM(path))//'log.'//TRIM(fname)//'.txt', & form ='FORMATTED') - WRITE (NDSOPLOG,*) 'The '//TRIM(filename)//' file has been successfully written!' + WRITE (NDSOPLOG,*) 'The '//TRIM(fname)//' file has been successfully written!' CALL FLUSH (NDSOPLOG) CLOSE (NDSOPLOG) ENDIF @@ -1952,12 +1954,12 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) CHARACTER(LEN=15) :: TIMETAG INTEGER :: IGRD - character(len = 124) :: filename + character(len = 256) :: filename integer :: ncerr ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE CHARACTER(LEN=256) :: FNMPRE_LOCAL - + CHARACTER(LEN=124) :: FNAME #ifdef W3_S CALL STRACE (IENT, 'W3IOPON') #endif @@ -1988,8 +1990,8 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) ! Determine filename. IF (LEN_TRIM(FNMPNT) .EQ. 0) THEN FNMPRE_LOCAL = FNMPRE - ELSE - FNMPRE_LOCAL = FNMPNT + ELSE + FNMPRE_LOCAL = FNMPNT END IF ! @@ -1997,6 +1999,7 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) ! Create TIMETAG for file name using YYYYMMDD.HHMMS prefix WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) filename = FNMPRE_LOCAL(:LEN_TRIM(FNMPRE_LOCAL))//TIMETAG//'.out_pnt.'//FILEXT(:LEN_TRIM(FILEXT))//'.nc' + FNAME = TIMETAG//'.out_pnt.'//FILEXT(:LEN_TRIM(FILEXT)) ELSE filename = FNMPRE_LOCAL(:LEN_TRIM(FNMPRE_LOCAL))//'out_pnt.'//FILEXT(:LEN_TRIM(FILEXT))//'.nc' END IF @@ -2005,7 +2008,7 @@ SUBROUTINE W3IOPON ( INXOUT, NDSOP, IOTST, IMOD) IF (INXOUT .EQ. 'READ') THEN CALL W3IOPON_READ(IOTST, IMOD, filename, ncerr) ELSE - CALL W3IOPON_WRITE(OFILES(2), filename, ncerr, NDSOP=NDSOP) + CALL W3IOPON_WRITE(OFILES(2), filename, ncerr, NDSOP=NDSOP, fname=FNAME, path=FNMPRE_LOCAL) ENDIF if (nf90_err(ncerr) .ne. 0) then WRITE(NDSE,*) ' *** WAVEWATCH III ERROR IN W3IOPO :' @@ -2232,7 +2235,7 @@ SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD & ! DEFINED A LOCAL FNMPRE TO AVOID CHANGE THE GLOBAL VALUE CHARACTER(LEN=256) :: FNMPRE_LOCAL - + !/ !/ ------------------------------------------------------------------- / !/