!#include "w3macros.h" #include PROJECT_HEADER #include GLOBAL_DEFS !/ ------------------------------------------------------------------- / !/NOPA PROGRAM W3SHEL !/PALM SUBROUTINE W3SHEL() !/COAWST SUBROUTINE WW3_init (MyCOMM) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | !/ | Last update : 11-May-2015 | !/ +-----------------------------------+ !/ !/ 19-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) !/ 19-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 ) !/ 08-Mar-2000 : Fix time managament bug. ( version 2.04 ) !/ 09-Jan-2001 : Fix FOUT allocation bug. ( version 2.05 ) !/ 24-Jan-2001 : Flat grid version. ( version 2.06 ) !/ 25-Jan-2002 : Data assimilation set up. ( version 2.17 ) !/ 08-May-2002 : Clean up for timers. ( version 2.21 ) !/ 26-Aug-2002 : Generalizing timer. ( version 2.22 ) !/ 26-Dec-2002 : Continuously moving grid. ( version 3.02 ) !/ 01-Aug-2003 : Continuously moving grid, input. ( version 3.03 ) !/ 07-Oct-2003 : Fixed NHMAX test. ( version 3.05 ) !/ 05-Jan-2005 : Multiple grid version. ( version 3.06 ) !/ 04-May-2005 : Change to MPI_COMM[_WAVE. ( version 3.07 ) !/ 26-Jun-2006 : Add wiring for output type 6. ( version 3.07 ) !/ 28-Jun-2006 : Adding file name preamble. ( version 3.09 ) !/ 28-Oct-2006 : Adding partitioning options. ( version 3.10 ) !/ 21-Jun-2007 : Dedicated output processes. ( version 3.11 ) !/ 29-May-2009 : Preparing distribution version. ( version 3.14 ) !/ 30-Oct-2009 : Fix format statement 2945. ( version 3.14 ) !/ (T. J. Campbell, NRL) !/ 30-Oct-2009 : Implement run-time grid selection. ( version 3.14 ) !/ (W. E. Rogers & T. J. Campbell, NRL) !/ 13-Sep-2009 : Add coupling option ( version 3.14_SHOM ) !/ 30-Oct-2009 : Implement curvilinear grid type. ( version 3.14 ) !/ (W. E. Rogers & T. J. Campbell, NRL) !/ 29-Oct-2010 : Implement unstructured grids ( version 3.14.4 ) !/ (A. Roland and F. Ardhuin) !/ 23-Nov-2011 : Comments clean up ( version 4.04 ) !/ 06-Mar-2012 : Repairing test output. ( version 4.07 ) !/ 03-Sep-2012 : Output initialization time. ( version 4.10 ) !/ 27-Sep-2012 : Implement use of tidal constituents ( version 4.08 ) !/ 04-Feb-2014 : Switched clock to DATE_AND_TIME ( version 4.18 ) !/ (A. Chawla and Mark Szyszka) !/ 23-Apr-2015 : Adding NCEP Coupler ( version 5.06 ) !/ (A. Chawla and Dmitry Sheinin) !/ 24-Apr-2015 : Adding OASIS coupling calls ( version 5.07 ) !/ (M. Accensi & F. Ardhuin, IFREMER) !/ 11-May-2015 : Checks dates for output types ( version 5.08 ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights !/ reserved. WAVEWATCH III is a trademark of the NWS. !/ No unauthorized use without permission. !/ ! 1. Purpose : ! ! A generic shell for WAVEWATCH III, using preformatted ! input fields. ! ! 2. Method : ! ! Driver for the actual wave model (W3WAVE). ! ! Files : ww3_shel.inp Input commands for shell. ! level.ww3 Water level fields (optional). ! current.ww3 Current fields (optional). ! wind.ww3 Wind fields (optional). ! muddens.ww3 Mud parameter (optional) ! mudthk.ww3 Mud parameter (optional) ! mudvisc.ww3 Mud parameter (optional) ! ice(n).ww3 Ice parameters (n=1 to 5) (optional) ! ice.ww3 ice concentration fields (optional). ! data0.ww3 Files with assimilation data (optional). ! data1.ww3 ! data2.ww3 ! ! The file names of the input files are set in W3FLDO ! ! 3. Parameters : ! ! Local parameters. ! ---------------------------------------------------------------- ! NHMAX I.P. Maximum number of homogeneous fields. ! ! NDSI Int. General input unit number (shell only). ! NDSS Int. Scratch file. ! NDSO Int. General output unit number (shell only). ! NDSE Int. Error output unit number (shell only). ! NDST Int. Test output unit number (shell only). ! NDSF I.A. Field files unit numbers (shell only). ! FLH L.A. Flags for homogeneous fields. ! NH I.A. Number of times for homogeneous fields. ! THO I.A. Times of homogeneous fields. ! TIME0 I.A. Starting time. ! TIMEN I.A. Ending time. ! ---------------------------------------------------------------- ! ! NDS, NTRACE, ..., see W3WAVE ! ! 4. Subroutines used : ! ! Name Type Module Description ! ---------------------------------------------------------------- ! W3NMOD Subr. W3GDATMD Set nummber of data structures ! W3SETG Subr. Id. Point to data structure. ! W3NDAT Subr. W3WDATMD Set nummber of data structures ! W3SETW Subr. Id. Point to data structure. ! W3NMOD Subr. W3ADATMD Set nummber of data structures ! W3NAUX Subr. Id. Point to data structure. ! W3NOUT Subr. W3ODATMD Set nummber of data structures ! W3SETO Subr. Id. Point to data structure. ! W3NINP Subr. W3IDATMD Set nummber of data structures ! W3SETI Subr. Id. Point to data structure. ! ! NEXTLN Subr. W3SERVMD Skip to next input line. ! STME21 Subr. W3TIMEMD Print date and time readable. ! DSEC21 Func. Id. Difference between times. ! TICK21 Subr. Id. Increment time. ! ! W3FLDO Subr. W3FLDSMD Opens and checks input files. ! W3FLDG Subr. Id. Reads from input files. ! W3FLDD Subr. Id. Reads from data files. ! W3FLDH Subr. Id. Udates homogeneous fields. ! ! W3INIT Subr. W3INITMD Wave model initialization. ! W3READFLGRD Subr. W3IOGOMD Reading output fields flags. ! W3WAVE Subr. W3WAVEMD Wave model. ! W3WDAS Subr. W3WDASMD Data assimilation interface. ! ! MPI_INIT, MPI_COMM_SIZE, MPI_COMM_RANK, MPI_BARRIER, ! MPI_FINALIZE ! Subr. Standard MPI routines. ! ---------------------------------------------------------------- ! ! 5. Called by : ! ! None, stand-alone program. ! ! 6. Error messages : ! ! - Checks on I-O. ! - Check on time interval. ! ! 7. Remarks : ! ! - A rigourous input check is made in W3INIT. ! - See W3WDAS for documentation on the set-up of the data ! assimilation. ! - in "7.a.2 Check if update is needed" ! Field is updated when compute time is past old input time, and ! (in case of homogeneous input field), grabs field value at next ! input time, which may in fact be far in the future from current ! compute time. Example: user says ! field=1 on 19680101 000000 and ! field=100 on 20160101 000000 ! then on if 7.a.2 is reached on 19680101 010000, WW3 will set ! field to 100. ! ! 8. Structure : ! ! ---------------------------------------------------------------- ! 0. Set up data structures. ( W3NMOD, etc. ) ! 1. I-O setup. ! a For shell. ! b For WAVEWATCH III. ! c Local parameters. ! 2. Define input fields ! 3. Set time frame. ! 4. Define output ! a Loop over types, do ! +--------------------------------------------------------+ ! | b Process standard line | ! | c If type 1: fields of mean wave parameters | ! | d If type 2: point output | ! | e If type 3: track output | ! | f If type 4: restart files | ! | g If type 5: boundary output | ! | h If type 6: separated wave fields | ! | i If type 7: coupling fields | ! +--------------------------------------------------------+ ! 5. Initialzations ! a Wave model. ( W3INIT ) ! b Read homogeneous field data. ! c Prepare input files. ( W3FLDO ) ! d Set field times. ! 6. If no input fields required, run model in a single ! sweep and exit. ( W3WAVE ) ! 7. Run model with input ! Do until end time is reached ! +--------------------------------------------------------+ ! | a Determine next time interval and input fields. | ! | 1 Preparation | ! | Loop over input fields | ! | +------------------------------------------------------| ! | | 2 Check if update is needed | ! | | 3 Update time and fields ( W3FLDG ) | ! | | ( W3FLDH ) | ! | | 4 Update next ending time | ! | +------------------------------------------------------| ! | b Run wave model. ( W3WAVE ) | ! | c If requested, data assimilation. ( W3WDAS ) | ! | d Final output if needed. ( W3WAVE ) | ! | e Check time | ! +--------------------------------------------------------+ ! ---------------------------------------------------------------- ! ! 9. Switches : ! ! !/SHRD Switch for shared / distributed memory architecture. ! !/DIST Id. ! !/MPI Id. ! ! !/MGW Moving grid wind correction. ! !/MGP Moving grid propagation correction. ! ! !/T Enable test output. ! !/O7 Echo input homogeneous fields. ! ! !/NCO NCEP NCO modifications for operational implementation. ! ! !/F90 Timer function included for F90. ! ! !/NCC Ncep Coupler ! ! 10. Source code : ! !/ ------------------------------------------------------------------- / USE W3GDATMD USE W3WDATMD, ONLY: TIME, W3NDAT, W3DIMW, W3SETW !/OASIS USE W3WDATMD, ONLY: TIME00, TIMEEND !/COAWST USE W3WDATMD, ONLY: TIMEEND USE W3ADATMD, ONLY: W3NAUX, W3DIMA, W3SETA USE W3IDATMD !/OASIS USE W3ODATMD, ONLY: DTOUT USE W3ODATMD, ONLY: W3NOUT, W3SETO USE W3ODATMD, ONLY: NAPROC, IAPROC, NAPOUT, NAPERR, NOGRP, & NGRPP, IDOUT, FNMPRE, IOSTYP, NOTYPE, NOGE !/ USE W3FLDSMD USE W3INITMD USE W3WAVEMD USE W3WDASMD !/ USE W3IOGRMD, ONLY: W3IOGR USE W3IOGOMD, ONLY: W3READFLGRD, FLDOUT USE W3IOPOMD USE W3SERVMD, ONLY : NEXTLN, EXTCDE USE W3TIMEMD !/NCC USE WW_cc, ONLY: MPI_COMM_WW !/OASIS USE W3OACPMD, ONLY: CPL_OASIS_INIT, CPL_OASIS_GRID, & !/OASIS CPL_OASIS_DEFINE, CPL_OASIS_FINALIZE, & !/OASIS ID_OASIS_TIME !/COAWST USE CWSTWVCP !/COAWST USE MCTWW3PA !/TIDE USE W3TIDEMD ! IMPLICIT NONE ! !/MPI INCLUDE "mpif.h" !/PALM INCLUDE "palmlib.h" !/ !/ ------------------------------------------------------------------- / !/ Local PARAMETER statements !/ INTEGER, PARAMETER :: NHMAX = 200 !/ !/ ------------------------------------------------------------------- / !/ Local parameters !/ !/OASIS INTEGER :: OASISED !/PALM INTEGER :: PALMED !/COAWST INTEGER :: COAWSTED, ccount INTEGER :: NDSI, NDSI2, NDSS, NDSO, NDSE, NDST, & NDSF(-7:7), NDSEN, NDS(13), NTRACE(2), & TIME0(2), TIMEN(2), TTIME(2), TTT(2), & IERR, J, I, ODAT(35), ILOOP, NPTS, & NH(-7:4), THO(2,-7:4,NHMAX), RCLD(5:7), & NDT(5:7), NDTNEW, MPI_COMM = -99, JJ, & IPRT(6) = 0, IFI, IFJ !/COU INTEGER :: OFL !/F90 INTEGER :: CLKDT1(8), CLKDT2(8), CLKDT3(8) !/MPI INTEGER :: IERR_MPI INTEGER :: NODATA(5:7), FLAGTIDE INTEGER :: COUPL_COMM !/COAWST INTEGER :: MyCOMM REAL :: FACTOR, DTTST, XX, YY, & HA(NHMAX,-7:4), HD(NHMAX,-7:4), & HS(NHMAX,-7:4) !/F90 REAL :: CLKFIN, CLKFEL REAL, ALLOCATABLE :: X(:), Y(:), XXX(:,:), DATA0(:,:), & DATA1(:,:), DATA2(:,:) LOGICAL :: FLLSTL, FLLSTI, FLH(-7:8), FLFLG, FLHOM, & TFLAGI, FLGDAS(3), FLGRD(NOGRP,NGRPP), & FLT, FLGD(NOGRP) LOGICAL :: FLGR2(NOGRP,NGRPP), FLG2(NOGRP) LOGICAL :: FLAGSTIDE(4) LOGICAL :: PRTFRM LOGICAL :: FLLST_ALL(-7:8) LOGICAL :: DEBUG_NCC = .FALSE. !/NCC LOGICAL :: CFLAG(10) !/OASIS LOGICAL :: L_MASTER CHARACTER(LEN=1) :: COMSTR,FLAGTFC CHARACTER(LEN=3) :: IDSTR(-7:8), IDTST CHARACTER(LEN=6) :: YESXNO CHARACTER(LEN=10) :: PN CHARACTER(LEN=10), & ALLOCATABLE :: PNAMES(:) CHARACTER(LEN=13) :: IDFLDS(-7:8) CHARACTER(LEN=20) :: STRNG CHARACTER(LEN=23) :: DTME21 CHARACTER(LEN=30) :: IDOTYP(7) CHARACTER(LEN=80) :: LINE CHARACTER(LEN=1024) :: FLDIN !/COU CHARACTER(LEN=30) :: OFILE !/ !/ ------------------------------------------------------------------- / !/ DATA IDFLDS / 'ice param. 1 ' , 'ice param. 2 ' , & 'ice param. 3 ' , 'ice param. 4 ' , & 'ice param. 5 ' , & 'mud density ' , 'mud thkness ' , & 'mud viscos. ' , & 'water levels ' , 'currents ' , & 'winds ' , 'ice fields ' , & 'mean param. ' , '1D spectra ' , & '2D spectra ' , 'moving grid ' / DATA IDOTYP / 'Fields of mean wave parameters' , & 'Point output ' , & 'Track point output ' , & 'Restart files ' , & 'Nesting data ' , & 'Partitioned wave field data ' , & 'Fields for coupling ' / DATA IDSTR / 'IC1', 'IC2', 'IC3', 'IC4', 'IC5', 'MDN', 'MTH', & 'MVS', 'LEV', 'CUR', 'WND', 'ICE', 'DT0', 'DT1', & 'DT2', 'MOV' / ! ! IF (FLAGLL) THEN ! FACTOR = 1. ! ELSE ! FACTOR = 1.E-3 ! END IF ! FLAGSTIDE(:) = .FALSE. FLH(:) = .FALSE. ! !/T PRTFRM = .TRUE. !/T DEBUG_NCC = .TRUE. ! !/F90 CALL DATE_AND_TIME ( VALUES=CLKDT1 ) ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 0. Set up data structures ! !/PALM PALMED=1 !/OASIS OASISED=1 !/COAWST COAWSTED=1 ! CALL W3NMOD ( 1, 6, 6 ) CALL W3NDAT ( 6, 6 ) CALL W3NAUX ( 6, 6 ) CALL W3NOUT ( 6, 6 ) CALL W3NINP ( 6, 6 ) ! CALL W3SETG ( 1, 6, 6 ) CALL W3SETW ( 1, 6, 6 ) CALL W3SETA ( 1, 6, 6 ) CALL W3SETO ( 1, 6, 6 ) CALL W3SETI ( 1, 6, 6 ) ! !/SHRD NAPROC = 1 !/SHRD IAPROC = 1 ! !/OASIS IF (OASISED.EQ.1) THEN !/OASIS CALL CPL_OASIS_INIT(MPI_COMM) !/OASIS ELSE !/PALM IF (PALMED.EQ.0) THEN !/COAWST IF (COAWSTED.EQ.0) THEN !/MPI CALL MPI_INIT ( IERR_MPI ) !/MPI MPI_COMM = MPI_COMM_WORLD !/PALM ELSE !/PALM ! what if PALM but not MPI ??? !/PALM MPI_COMM = PL_COMM_EXEC !/COAWST END IF !/PALM ENDIF !/OASIS END IF !/COAWST MPI_COMM = MyCOMM !/COAWST WAV_COMM_WORLD = MyCOMM ! !/NCC CALL WW_CMP_START !/NCC MPI_COMM = MPI_COMM_WW ! !/MPI CALL MPI_COMM_SIZE ( MPI_COMM, NAPROC, IERR_MPI ) !/MPI CALL MPI_COMM_RANK ( MPI_COMM, IAPROC, IERR_MPI ) !/MPI IAPROC = IAPROC + 1 ! !/NCO/! IF ( IAPROC .EQ. 1 ) CALL W3TAGB & !/NCO/! ('WAVEFCST',1998,0007,0050,'NP21 ') ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 1. IO set-up ! 1.a For shell ! NDSI = 10 NDSS = 90 NDSO = 6 NDSE = 6 NDST = 6 !/COU NDSO = 333 !/COU NDSE = 333 !/COU NDST = 333 NDSF(-7) = 1008 NDSF(-6) = 1009 NDSF(-5) = 1010 NDSF(-4) = 1011 NDSF(-3) = 1012 NDSF(-2) = 1013 NDSF(-1) = 1014 NDSF(0) = 1015 NDSF(1) = 11 NDSF(2) = 12 NDSF(3) = 13 NDSF(4) = 14 NDSF(5) = 15 NDSF(6) = 16 NDSF(7) = 17 ! !/NCO/! !/NCO/! Redo according to NCO !/NCO/! !/NCO NDSI = 11 !/NCO NDSS = 90 !/NCO NDSO = 6 !/NCO NDSE = NDSO !/NCO NDST = NDSO !/NCO NDSF(1) = 12 !/NCO NDSF(2) = 13 !/NCO NDSF(3) = 14 !/NCO NDSF(4) = 15 !/NCO NDSF(5) = 16 !/NCO NDSF(6) = 17 !/NCO NDSF(7) = 18 ! NAPOUT = 1 NAPERR = 1 ! !/COU OFILE = 'output.ww3' !/COU OFL = LEN_TRIM(OFILE) !/COU J = LEN_TRIM(FNMPRE) !/COU IF ( IAPROC .EQ. NAPOUT ) & !/COU OPEN (333,FILE=FNMPRE(:J)//OFILE(:OFL),ERR=2008,IOSTAT=IERR) IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,900) ! IF ( IAPROC .EQ. NAPERR ) THEN NDSEN = NDSE ELSE NDSEN = -1 END IF ! !jcw FNMPRE='WW3/work/' JJ = LEN_TRIM(FNMPRE) OPEN (NDSI,FILE=FNMPRE(:JJ)//'ww3_shel.inp',STATUS='OLD', & ERR=2000,IOSTAT=IERR) REWIND (NDSI) READ (NDSI,'(A)',END=2001,ERR=2002) COMSTR IF (COMSTR.EQ.' ') COMSTR = '$' ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,901) COMSTR ! ! 1.b For WAVEWATCH III (See W3INIT) ! NDS( 1) = 20 NDS( 2) = 6 ! NDS( 3) = 6 NDS( 3) = 21 NDS( 4) = 6 NDS( 5) = 30 NDS( 6) = 30 NDS( 7) = 31 NDS( 8) = 32 NDS( 9) = 33 NDS(10) = 35 NDS(11) = 22 NDS(12) = 23 NDS(13) = 34 ! NTRACE(1) = NDS(3) NTRACE(2) = 10 ! !/NCO/! !/NCO/! Redo according to NCO !/NCO/! !/NCO NDS( 1) = 51 !/NCO NDS( 2) = NDSO !/NCO NDS( 3) = NDSO !/NCO NDS( 4) = NDSO !/NCO NDS( 5) = 20 !/NCO NDS( 6) = 21 !/NCO NDS( 7) = 52 !/NCO NDS( 8) = 53 !/NCO NDS( 9) = 22 !/NCO NDS(10) = 71 !/NCO NDS(11) = 23 !/NCO NDS(12) = 54 !/NCO NDS(13) = 55 !/NCO NTRACE(1) = NDSO ! !/T WRITE (NDST,9000) (NDS(I),I=1,12) !/T WRITE (NDST,9001) (NTRACE(I),I=1,2) ! ! 1.c Local parameters ! ! inferred from context: these flags (FL) are to indicate that the last (LST) ! field has been read from a file. FLLSTL = .FALSE. ! This is associated with J.EQ.1 (wlev) FLLSTI = .FALSE. ! This is associated with J.EQ.4 (ice) FLLST_ALL = .FALSE. ! For all ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 2. Define input fields ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,920) ! ! If using experimental mud or ice physics, additional lines will ! be read in from ww3_shel.inp and applied, so JFIRST is changed from ! its initialization setting "JFIRST=1" to some lower value. !/IC1 JFIRST=-7 !/IC2 JFIRST=-7 !/IS2 JFIRST=-7 !/IC3 JFIRST=-7 !/BT8 JFIRST=-7 !/BT9 JFIRST=-7 !/IC4 JFIRST=-7 DO J=JFIRST, 7 CALL NEXTLN ( COMSTR , NDSI , NDSEN ) IF ( J .LT. 4 ) THEN READ (NDSI,*,END=2001,ERR=2002) FLAGTFC, FLH(J) IF (FLAGTFC.EQ.'T') THEN INFLAGS1(J)=.TRUE. FLAGSC(J)=.FALSE. END IF IF (FLAGTFC.EQ.'F') THEN INFLAGS1(J)=.FALSE. FLAGSC(J)=.FALSE. END IF IF (FLAGTFC.EQ.'C') THEN INFLAGS1(J)=.TRUE. FLAGSC(J)=.TRUE. END IF FLH(J) = FLH(J) .AND. INFLAGS1(J) ELSE READ (NDSI,*,END=2001,ERR=2002) INFLAGS1(J) FLH(J) = .FALSE. END IF IF ( INFLAGS1(J) ) THEN YESXNO = 'YES/--' ELSE YESXNO = '---/NO' END IF IF ( FLH(J) ) THEN STRNG = '(homogeneous field) ' ELSE IF ( FLAGSC(J) ) THEN STRNG = '(coupling field) ' ELSE STRNG = ' ' END IF IF ( IAPROC .EQ. NAPOUT ) & WRITE (NDSO,921) IDFLDS(J), YESXNO, STRNG END DO ! INFLAGS1(8) = .FALSE. FLH(8) = .FALSE. !/MGW INFLAGS1(8) = .TRUE. !/MGP INFLAGS1(8) = .TRUE. IF ( INFLAGS1(8) .AND. IAPROC.EQ.NAPOUT ) & WRITE (NDSO,921) IDFLDS(8), 'YES/--', ' ' ! FLFLG = INFLAGS1(-7) .OR. INFLAGS1(-6) .OR. INFLAGS1(-5) .OR. INFLAGS1(-4) & .OR. INFLAGS1(-3) .OR. INFLAGS1(-2) .OR. INFLAGS1(-1) & .OR. INFLAGS1(0) .OR. INFLAGS1(1) .OR. INFLAGS1(2) & .OR. INFLAGS1(3) .OR. INFLAGS1(4) .OR. INFLAGS1(5) & .OR. INFLAGS1(6) .OR. INFLAGS1(7) FLHOM = FLH(-7) .OR. FLH(-6) .OR. FLH(-5) .OR. INFLAGS1(-4) & .OR. FLH(-3) .OR. FLH(-2) .OR. FLH(-1) .OR. INFLAGS1(0) & .OR. FLH(1) .OR. FLH(2) .OR. FLH(3) .OR. INFLAGS1(8) ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,922) ! ! INFLAGS2 is just "initial value of INFLAGS1", i.e. does *not* get ! changed when model reads last record of ice.ww3 INFLAGS2=INFLAGS1 !/T WRITE (NDST,9020) FLFLG, INFLAGS1, FLHOM, FLH ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 3. Set time frame ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,930) ! CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) TIME0 CALL STME21 ( TIME0 , DTME21 ) IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,931) DTME21 TIME = TIME0 !/OASIS TIME00 = TIME0 ! CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) TIMEN !/OASIS TIMEEND = TIMEN !/COAWST TIMEEND = TIMEN CALL STME21 ( TIMEN , DTME21 ) IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,932) DTME21 ! DTTST = DSEC21 ( TIME0 , TIMEN ) IF ( DTTST .LE. 0. ) GOTO 2003 ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 4. Define output ! CALL W3IOGR ( 'GRID', NDSF(5) ) IF ( FLAGLL ) THEN FACTOR = 1. ELSE FACTOR = 1.E-3 END IF ! CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) IOSTYP IOSTYP = MAX ( 0 , MIN ( 3 , IOSTYP ) ) ! IF ( IAPROC .EQ. NAPOUT ) THEN IF ( IOSTYP .EQ. 0 ) THEN WRITE (NDSO,940) 'No dedicated output process, ' // & 'parallel file system required.' ELSE IF ( IOSTYP .EQ. 1 ) THEN WRITE (NDSO,940) 'No dedicated output process, ' // & 'any file system.' ELSE IF ( IOSTYP .EQ. 2 ) THEN WRITE (NDSO,940) 'Single dedicated output process.' ELSE IF ( IOSTYP .EQ. 3 ) THEN WRITE (NDSO,940) 'Multiple dedicated output processes.' ELSE WRITE (NDSO,940) 'IOSTYP NOT RECOGNIZED' END IF END IF ! ! 4.a Loop over types ! NPTS = 0 ! NOTYPE = 6 !/COU NOTYPE = 7 DO J = 1, NOTYPE ! ! 4.b Process standard line ! CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) (ODAT(I),I=5*(J-1)+1,5*J) ODAT(5*(J-1)+3) = MAX ( 0 , ODAT(5*(J-1)+3) ) ! IF ( ODAT(5*(J-1)+3) .NE. 0 ) THEN IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,941) J, IDOTYP(J) TTIME(1) = ODAT(5*(J-1)+1) TTIME(2) = ODAT(5*(J-1)+2) CALL STME21 ( TTIME , DTME21 ) IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,942) DTME21 TTIME(1) = ODAT(5*(J-1)+4) TTIME(2) = ODAT(5*(J-1)+5) CALL STME21 ( TTIME , DTME21 ) IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,943) DTME21 TTIME(1) = 0 TTIME(2) = 0 DTTST = REAL ( ODAT(5*(J-1)+3) ) ! !jcw if J=1, then DTTST above is the output time step for mean wave field params. #if defined WAVES_OCEAN !/COAWST IF (J.EQ.1) THEN !/COAWST DTTST=MIN(DTTST,REAL(TI_OCN2WAV)) !/COAWST END IF #endif #if defined AIR_WAVES !/COAWST IF (J.EQ.1) THEN !/COAWST DTTST=MIN(DTTST,REAL(TI_ATM2WAV)) !/COAWST END IF #endif ! CALL TICK21 ( TTIME , DTTST ) CALL STME21 ( TTIME , DTME21 ) IF ( ( ODAT(5*(J-1)+1) .NE. ODAT(5*(J-1)+4) .OR. & ODAT(5*(J-1)+2) .NE. ODAT(5*(J-1)+5) ) .AND. & IAPROC .EQ. NAPOUT ) THEN IF ( DTME21(9:9) .NE. '0' ) THEN WRITE (NDSO,1944) DTME21( 9:19) ELSE IF ( DTME21(10:10) .NE. '0' ) THEN WRITE (NDSO,2944) DTME21(10:19) ELSE WRITE (NDSO,3944) DTME21(12:19) END IF END IF ! IF ( J .EQ. 1 ) THEN ! ! 4.c Type 1: fields of mean wave parameters ! CALL W3READFLGRD ( NDSI, NDSO, 9, NDSEN, COMSTR, FLGD, & FLGRD, IAPROC, NAPOUT, IERR ) IF ( IERR .NE. 0 ) GOTO 2222 ! ELSE IF ( J .EQ. 2 ) THEN ! ! 4.d Type 2: point output ! DO ILOOP=1, 2 JJ = LEN_TRIM(FNMPRE) IF ( ILOOP .EQ. 1 ) THEN NDSI2 = NDSI IF ( IAPROC .EQ. 1 ) OPEN & (NDSS,FILE=FNMPRE(:JJ)//'ww3_shel.scratch') ELSE NDSI2 = NDSS !/MPI CALL MPI_BARRIER (MPI_COMM,IERR_MPI) OPEN (NDSS,FILE=FNMPRE(:JJ)//'ww3_shel.scratch') REWIND (NDSS) ! IF (NPTS.GT.0) THEN ALLOCATE ( X(NPTS), Y(NPTS), PNAMES(NPTS) ) ELSE GOTO 2004 END IF END IF ! NPTS = 0 DO CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI2,*,END=2001,ERR=2002) XX, YY, PN IF ( ILOOP.EQ.1 .AND. IAPROC.EQ.1 ) THEN BACKSPACE (NDSI) READ (NDSI,'(A)') LINE WRITE (NDSS,'(A)') LINE END IF IF ( PN .EQ. 'STOPSTRING' ) EXIT NPTS = NPTS + 1 IF ( ILOOP .EQ. 1 ) CYCLE X(NPTS) = XX Y(NPTS) = YY PNAMES(NPTS) = PN IF ( IAPROC .EQ. NAPOUT ) THEN IF ( FLAGLL ) THEN IF ( NPTS .EQ. 1 ) THEN WRITE (NDSO,2945) & FACTOR*XX, FACTOR*YY, PN ELSE WRITE (NDSO,2946) NPTS, & FACTOR*XX, FACTOR*YY, PN END IF ELSE IF ( NPTS .EQ. 1 ) THEN WRITE (NDSO,2955) & FACTOR*XX, FACTOR*YY, PN ELSE WRITE (NDSO,2956) NPTS, & FACTOR*XX, FACTOR*YY, PN END IF END IF END IF END DO ! IF ( IAPROC.EQ.1 .AND. ILOOP.EQ.1 ) CLOSE (NDSS) END DO ! IF ( NPTS.EQ.0 .AND. IAPROC.EQ.NAPOUT ) & WRITE (NDSO,2947) IF ( IAPROC .EQ. 1 ) THEN !/MPI CALL MPI_BARRIER ( MPI_COMM, IERR_MPI ) CLOSE (NDSS,STATUS='DELETE') ELSE CLOSE (NDSS) !/MPI CALL MPI_BARRIER ( MPI_COMM, IERR_MPI ) END IF ! ELSE IF ( J .EQ. 3 ) THEN ! ! 4.e Type 3: track output ! CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) TFLAGI ! IF ( .NOT. TFLAGI ) NDS(11) = -NDS(11) IF ( IAPROC .EQ. NAPOUT ) THEN IF ( .NOT. TFLAGI ) THEN WRITE (NDSO,3945) 'input', 'UNFORMATTED' ELSE WRITE (NDSO,3945) 'input', 'FORMATTED' END IF END IF ! ELSE IF ( J .EQ. 4 ) THEN ! ! 4.f Type 4: restart files (no additional data) ! ELSE IF ( J .EQ. 5 ) THEN ! ! 4.g Type 5: nesting data (no additional data) ! ELSE IF ( J .EQ. 6 ) THEN ! ! 4.h Type 6: partitioning ! ! IPRT: IX0, IXN, IXS, IY0, IYN, IYS ! CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) IPRT, PRTFRM ! IF ( IAPROC .EQ. NAPOUT ) THEN IF ( PRTFRM ) THEN YESXNO = 'YES/--' ELSE YESXNO = '---/NO' END IF WRITE (NDSO,6945) IPRT, YESXNO END IF ! !/COU ELSE IF ( J .EQ. 7 ) THEN !/COU ! !/COU ! 4.i Type 7: coupling !/COU ! !/COU CALL W3READFLGRD ( NDSI, NDSO, 9, NDSEN, COMSTR, FLG2, & !/COU FLGR2, IAPROC, NAPOUT, IERR ) !/COU IF ( IERR .NE. 0 ) GOTO 2222 !/COU CALL NEXTLN ( COMSTR , NDSI , NDSEN ) !/COU READ (NDSI,'(A)',END=2001,ERR=2003,IOSTAT=IERR) FLDIN ! END IF ! END IF ! END DO ! IF ( NPTS.EQ.0 ) ALLOCATE ( X(1), Y(1), PNAMES(1) ) ! !/T WRITE (NDST,9040) ODAT !/T WRITE (NDST,9041) FLGRD !/T WRITE (NDST,9042) IPRT, PRTFRM ! ! ... End loop over output types ! ! For outputs with non-zero time step, check dates : ! If output ends before run start OR output starts after run end, ! deactivate output cleanly with output time step = 0 ! This is usefull for IOSTYP=3 (Multiple dedicated output processes) ! to avoid the definition of dedicated proc. for unused output. ! DO J = 1, NOTYPE DTTST = DSEC21 ( TIME0 , ODAT(5*(J-1)+4:5*(J-1)+5) ) IF ( DTTST .LT. 0 ) THEN ODAT(5*(J-1)+3) = 0 IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,8945) trim(IDOTYP(J)) CONTINUE ENDIF DTTST = DSEC21 ( ODAT(5*(J-1)+1:5*(J-1)+2), TIMEN ) IF ( DTTST .LT. 0 ) THEN ODAT(5*(J-1)+3) = 0 IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,8945) trim(IDOTYP(J)) CONTINUE ENDIF ENDDO ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 5. Initializations ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,950) ! ! 5.a Opening field and data files ! IF ( FLFLG ) THEN IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,951) & 'Preparing input files ...' ! DO J=JFIRST, 4 IF ( INFLAGS1(J) .AND. .NOT. FLAGSC(J)) THEN IF ( FLH(J) ) THEN IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,954) IDFLDS(J) ELSE JJ = LEN_TRIM(FNMPRE) FLAGTIDE = 0 CALL W3FLDO ('READ', IDSTR(J), NDSF(J), NDST, & NDSEN, NX, NY, GTYPE, & IERR, FPRE=FNMPRE(:JJ), TIDEFLAGIN=FLAGTIDE ) IF ( IERR .NE. 0 ) GOTO 2222 !/TIDE IF (FLAGTIDE.GT.0.AND.J.EQ.1) FLAGSTIDE(1)=.TRUE. !/TIDE IF (FLAGTIDE.GT.0.AND.J.EQ.2) FLAGSTIDE(2)=.TRUE. IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,955) IDFLDS(J) END IF ELSE IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,954) IDFLDS(J) END IF END DO ! DO J=5, 7 IF ( INFLAGS1(J) .AND. .NOT. FLAGSC(J)) THEN CALL W3FLDO ('READ', IDSTR(J), NDSF(J), NDST, NDSEN, & RCLD(J), NY, NODATA(J), & IERR, FPRE=FNMPRE(:JJ) ) IF ( IERR .NE. 0 ) GOTO 2222 IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,956) IDFLDS(J),& RCLD(J), NODATA(J) ELSE IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,954) IDFLDS(J) END IF END DO ! END IF ! ! 5.b Wave model ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,951) 'Wave model ...' ! !/TIDE IF (FLAGSTIDE(1).OR.FLAGSTIDE(2)) THEN !/TIDE CALL VUF_SET_PARAMETERS !/TIDE IF (FLAGSTIDE(1)) CALL W3FLDTIDE1 ( 'READ', NDSF(1), NDST, NDSEN, NX, NY, IDSTR(1), IERR ) !/TIDE IF (FLAGSTIDE(2)) CALL W3FLDTIDE1 ( 'READ', NDSF(2), NDST, NDSEN, NX, NY, IDSTR(2), IERR ) !/TIDE END IF ! CALL W3INIT ( 1, 'ww3', NDS, NTRACE, ODAT, FLGRD, FLGR2, FLGD, & FLG2, NPTS, X, Y, PNAMES, IPRT, PRTFRM, MPI_COMM, & FLAGSTIDEIN=FLAGSTIDE ) ! !/TIDE IF (FLAGSTIDE(1)) CALL W3FLDTIDE2 ( 'READ', NDSF(1), NDST, NDSEN, NX, NY, IDSTR(1), 1, IERR ) !/TIDE IF (FLAGSTIDE(2)) CALL W3FLDTIDE2 ( 'READ', NDSF(2), NDST, NDSEN, NX, NY, IDSTR(2), 1, IERR ) !/TIDE ALLOCATE(V_ARG(170,1),F_ARG(170,1),U_ARG(170,1)) ! to be removed later ... ! ALLOCATE ( XXX(NX,NY) ) ! ! 5.c Homogeneous field data ! IF ( FLHOM ) THEN IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,951) & 'Homogeneous field data (and moving grid) ...' NH = 0 ! ! ... Start of loop. ! DO CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) IDTST IF ( IDTST.NE.IDSTR(-7) .AND. IDTST.NE.IDSTR(-6) .AND. & IDTST.NE.IDSTR(-5) .AND. IDTST.NE.IDSTR(-4) .AND. & IDTST.NE.IDSTR(-3) .AND. IDTST.NE.IDSTR(-2) .AND. & IDTST.NE.IDSTR(-1) .AND. IDTST.NE.IDSTR(0) .AND. & IDTST.NE.IDSTR(1) .AND. IDTST.NE.IDSTR(2) .AND. & IDTST.NE.IDSTR(3) .AND. IDTST.NE.IDSTR(8) .AND. & IDTST.NE.'STP' ) GOTO 2005 ! ! ... Stop conditions ! IF ( IDTST .EQ. 'STP' ) THEN EXIT ELSE BACKSPACE ( NDSI ) END IF ! ! ... Store data ! DO J=LBOUND(IDSTR,1), 4 I = J IF ( J .EQ. 4 ) I = 8 IF ( IDTST .EQ. IDSTR(I) ) THEN NH(J) = NH(J) + 1 IF ( NH(J) .GT. NHMAX ) GOTO 2006 IF ( J .LE. 1 ) THEN ! water levels, etc. : get HS READ (NDSI,*,END=2001,ERR=2002) IDTST, & THO(1,J,NH(J)), THO(2,J,NH(J)), & HS(NH(J),J) ELSE IF ( J .EQ. 2 ) THEN ! currents: get HA and HD READ (NDSI,*,END=2001,ERR=2002) IDTST, & THO(1,J,NH(J)), THO(2,J,NH(J)), & HA(NH(J),J), HD(NH(J),J) ELSE IF ( J .EQ. 3 ) THEN ! wind: get HA HD and HS READ (NDSI,*,END=2001,ERR=2002) IDTST, & THO(1,J,NH(J)), THO(2,J,NH(J)), & HA(NH(J),J), HD(NH(J),J), HS(NH(J),J) ELSE IF ( J .EQ. 4 ) THEN ! ice: HA and HD READ (NDSI,*,END=2001,ERR=2002) IDTST, & THO(1,J,NH(J)), THO(2,J,NH(J)), & HA(NH(J),J), HD(NH(J),J) END IF END IF END DO ! END DO ! ! ... End of loop, output ! !/O7 DO J=JFIRST, 3 !/O7 IF ( FLH(J) .AND. IAPROC.EQ.NAPOUT ) THEN !/O7 WRITE (NDSO,952) NH(J), IDFLDS(J) !/O7 DO I=1, NH(J) !/O7 IF ( J .LE. 1 ) THEN !/O7 WRITE (NDSO,953) I, THO(1,J,I), THO(2,J,I), & !/O7 HS(I,J) !/O7 ELSE IF ( J .EQ. 2 ) THEN !/O7 WRITE (NDSO,953) I, THO(1,J,I), THO(2,J,I), & !/O7 HA(I,J), HD(I,J) !/O7 ELSE IF ( J .EQ. 3 ) THEN !/O7 WRITE (NDSO,953) I, THO(1,J,I), THO(2,J,I), & !/O7 HA(I,J), HD(I,J), HS(I,J) !/O7 END IF !/O7 END DO !/O7 END IF !/O7 END DO ! !/O7 IF ( INFLAGS1(8) .AND. IAPROC.EQ.NAPOUT ) THEN !/O7 WRITE (NDSO,952) NH(4), IDFLDS(8) !/O7 DO I=1, NH(J) !/O7 WRITE (NDSO,953) I, THO(1,4,I), THO(2,4,I), & !/O7 HA(I,4), HD(I,4) !/O7 END DO !/O7 END IF ! IF ( ( FLH(-7) .AND. (NH(-7).EQ.0) ) .OR. & ( FLH(-6) .AND. (NH(-6).EQ.0) ) .OR. & ( FLH(-5) .AND. (NH(-5).EQ.0) ) .OR. & ( FLH(-4) .AND. (NH(-4).EQ.0) ) .OR. & ( FLH(-3) .AND. (NH(-3).EQ.0) ) .OR. & ( FLH(-2) .AND. (NH(-2).EQ.0) ) .OR. & ( FLH(-1) .AND. (NH(-1).EQ.0) ) .OR. & ( FLH(0) .AND. (NH(0).EQ.0) ) .OR. & ( FLH(1) .AND. (NH(1).EQ.0) ) .OR. & ( FLH(2) .AND. (NH(2).EQ.0) ) .OR. & ( FLH(3) .AND. (NH(3).EQ.0) ) .OR. & ( INFLAGS1(8) .AND. (NH(4).EQ.0) ) ) GOTO 2007 ! END IF ! !/MPI CALL MPI_BARRIER ( MPI_COMM, IERR_MPI ) ! IF ( IAPROC .EQ. NAPOUT ) THEN !/F90 CALL DATE_AND_TIME ( VALUES=CLKDT2 ) END IF !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! !/OASIS ! Initialize L_MASTER, COUPL_COMM !/OASIS IF ( IAPROC .EQ. 1) THEN !/OASIS L_MASTER = .TRUE. !/OASIS ELSE !/OASIS L_MASTER = .FALSE. !/OASIS ENDIF !/OASIS CALL CPL_OASIS_GRID(L_MASTER,MPI_COMM) !/OASIS ! Estimate the weights for the spatial interpolation !/OASIS CALL CPL_OASIS_DEFINE(NDSO, FLDIN, FLDOUT) !jcw #if defined COAWST_COUPLING !/COAWST CALL INIT_WVCP (1) !/COAWST CALL INITIALIZE_WAV_ROUTERS !/COAWST ccount=0 !/COAWST CALL COAWST_CPL (ccount) #endif !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 6. Model without input ! IF ( .NOT. FLFLG ) THEN ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,960) CALL W3WAVE ( 1, TIMEN & !/OASIS ,.TRUE., .FALSE., MPI_COMM & ) ! GOTO 2222 ! END IF !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 7. Model with input ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,970) ! !/NCC CFLAG = .FALSE. !/NCC CALL WW_INIT(1,GRIDS(1)%NX,GRIDS(1)%NY, & !/NCC GRIDS(1)%X0,GRIDS(1)%Y0,GRIDS(1)%SX,GRIDS(1)%SY) !/NCC CALL WW_RECVDTC !/NCC CALL WW_SENDGRIDS !/NCC CALL WW_SENDSLM(GRIDS(1)%MAPSTA) !/NCC IF ( IAPROC .EQ. NAPOUT .AND. DEBUG_NCC ) THEN !/NCC OPEN(9751,FILE='debug_writeout_wind', & !/NCC FORM='UNFORMATTED',STATUS='UNKNOWN') !/NCC OPEN(9752,FILE='debug_writeout_ice', & !/NCC FORM='UNFORMATTED',STATUS='UNKNOWN') !/NCC OPEN(9753,FILE='data_forDC', & !/NCC FORM='UNFORMATTED',STATUS='UNKNOWN') !/NCC WRITE(9753) GRIDS(1)%NX,GRIDS(1)%NY, & !/NCC GRIDS(1)%X0,GRIDS(1)%Y0,GRIDS(1)%SX,GRIDS(1)%SY !/NCC WRITE(9753) GRIDS(1)%MAPSTA !/NCC END IF !jcw this 700 is the big time loop 700 CONTINUE ! !/NCC IF ( IAPROC .EQ. NAPOUT .AND. DEBUG_NCC ) WRITE(9753) TIME0 !/NCC CALL WW_TSTEP_INIT(TIME0) !/NCC CALL WW_RECV_SBC !/NCC CALL WW_RECV_PSEUDOICE ! ! 7.a Determine next time interval and input fields ! 7.a.1 Preparation ! TTIME = TIMEN ! CALL STME21 ( TIME0 , DTME21 ) IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,971) DTME21 ! !/T WRITE (NDST,9070) '0-N', TIME0, TTIME, & !/T IDSTR(-7), INFLAGS1(-7), TI1, & !/T IDSTR(-6), INFLAGS1(-6), TI2, & !/T IDSTR(-5), INFLAGS1(-5), TI3, & !/T IDSTR(-4), INFLAGS1(-4), TI4, & !/T IDSTR(-3), INFLAGS1(-3), TI5, & !/T IDSTR(-2), INFLAGS1(-2), TZN, & !/T IDSTR(-1), INFLAGS1(-1), TTN, & !/T IDSTR(0), INFLAGS1(0), TVN, & !/T IDSTR(1), INFLAGS1(1), TLN, & !/T IDSTR(2), INFLAGS1(2), TC0, TCN, & !/T IDSTR(3), INFLAGS1(3), TW0, TWN, & !/T IDSTR(4), INFLAGS1(4), TIN, & !/T IDSTR(5), INFLAGS1(5), T0N, & !/T IDSTR(6), INFLAGS1(6), T1N, & !/T IDSTR(7), INFLAGS1(7), T2N, & !/T IDSTR(8), INFLAGS1(8), TG0, TGN ! DO J=JFIRST,8 ! IF ( INFLAGS1(J) ) THEN ! ! 7.a.2 Check if update is needed IF (.NOT.FLAGSC(J)) THEN TTT(1) = TFN(1,J) TTT(2) = TFN(2,J) IF ( TTT(1) .EQ. -1 ) THEN DTTST = 0. ELSE DTTST = DSEC21 ( TIME0 , TTT ) END IF ELSE !/OASIS ID_OASIS_TIME = DSEC21 ( TIME00 , TIME ) !/OASIS IF ( (MOD(ID_OASIS_TIME/DTOUT(7),1.0) .LT. 1.E-7 ) .AND. & !/OASIS (DSEC21 (TIME, TIMEEND) .GT. 0.0)) DTTST=0. !/COAWST IF (DSEC21 (TIME, TIMEEND) .GT. 0.0) DTTST=0. END IF ! !/T WRITE (NDST,9071) IDSTR(J), DTTST ! ! 7.a.3 Update time and fields / data ! IF ( DTTST .LE. 0. ) THEN !/TIDE IF ((FLLEVTIDE .AND.(J.EQ.1)).OR.(FLCURTIDE.AND.(J.EQ.2))) THEN !/TIDE IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,974) IDFLDS(J) !/TIDE ELSE IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,972) IDFLDS(J) !/TIDE END IF ! ! IC1 : (in context of IC3, this is ice thickness) IF ( J .EQ. -7 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TTT, XXX, XXX, XXX, TI1, XXX, XXX, ICEP1, IERR) ELSE CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TI1, XXX, XXX, ICEP1, IERR) END IF IF ( IERR .LT. 0 )FLLST_ALL(J) = .TRUE. ! IC2 : (in context of IC3, this is ice viscosity) ELSE IF ( J .EQ. -6 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TTT, XXX, XXX, XXX, TI2, XXX, XXX, ICEP2, IERR) ELSE CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TI2, XXX, XXX, ICEP2, IERR) END IF IF ( IERR .LT. 0 )FLLST_ALL(J) = .TRUE. ! IC3 : (in context of IC3, this is ice density) ELSE IF ( J .EQ. -5 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TTT, XXX, XXX, XXX, TI3, XXX, XXX, ICEP3, IERR) ELSE CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TI3, XXX, XXX, ICEP3, IERR) END IF IF ( IERR .LT. 0 )FLLST_ALL(J) = .TRUE. ! IC4 : (in context of IC3, this is ice modulus) ELSE IF ( J .EQ. -4 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TTT, XXX, XXX, XXX, TI4, XXX, XXX, ICEP4, IERR) ELSE CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TI4, XXX, XXX, ICEP4, IERR) END IF IF ( IERR .LT. 0 )FLLST_ALL(J) = .TRUE. ! IC5 : ice flow diam. ELSE IF ( J .EQ. -3 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TTT, XXX, XXX, XXX, TI5, XXX, XXX, ICEP5, IERR) ELSE CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TI5, XXX, XXX, ICEP5, IERR) END IF IF ( IERR .LT. 0 )FLLST_ALL(J) = .TRUE. ! MUD1 : mud density ELSE IF ( J .EQ. -2 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TTT, XXX, XXX, XXX, TZN, XXX, XXX, MUDD, IERR) ELSE CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TZN, XXX, XXX, MUDD, IERR) END IF IF ( IERR .LT. 0 )FLLST_ALL(J) = .TRUE. ! MUD2 : mud thickness ELSE IF ( J .EQ. -1 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TTT, XXX, XXX, XXX, TTN, XXX, XXX, MUDT, IERR) ELSE CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TTN, XXX, XXX, MUDT, IERR) END IF IF ( IERR .LT. 0 )FLLST_ALL(J) = .TRUE. ! MUD3 : mud viscosity ELSE IF ( J .EQ. 0 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TTT, XXX, XXX, XXX, TVN, XXX, XXX, MUDV, IERR) ELSE CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TVN, XXX, XXX, MUDV, IERR) END IF IF ( IERR .LT. 0 )FLLST_ALL(J) = .TRUE. ! LEV : water levels ELSE IF ( J .EQ. 1 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TTT, XXX, XXX, XXX, TLN, XXX, XXX, WLEV, IERR) ELSE !/TIDE IF ( FLLEVTIDE ) THEN !/TIDE IERR=0 !/TIDE IF ( TLN(1) .EQ. -1 ) THEN !/TIDE TLN = TIME !/TIDE ELSE !/TIDE CALL TICK21 ( TLN, TIDE_DT ) !/TIDE END IF !/TIDE ELSE !/OASIS COUPL_COMM = MPI_COMM !/OASOCM IF (.NOT.FLAGSC(J)) ID_OASIS_TIME = -1 #if defined WAVES_OCEAN !/COAWST TFN(1,J)=TIME0(1) !/COAWST TFN(2,J)=TIME0(2) !/COAWST CALL TICK21(TFN(:,J),REAL(TI_OCN2WAV)) #else CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TLN, XXX, XXX, WLEV, & IERR & !/OASOCM , COUPL_COMM & ) #endif !/TIDE END IF END IF IF ( IERR .LT. 0 ) FLLSTL = .TRUE. !could use this: IF ( IERR .LT. 0 ) FLLST_ALL(J) = .TRUE. ! CUR : currents ELSE IF ( J .EQ. 2 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TC0, CX0, CY0, XXX, TCN, CXN, CYN, XXX, IERR) ELSE !/TIDE IF ( FLCURTIDE ) THEN !/TIDE IERR=0 !/TIDE IF ( TCN(1) .EQ. -1 ) THEN !/TIDE TCN = TIME !/TIDE END IF !/TIDE TC0(:) = TCN(:) !/TIDE CALL TICK21 ( TCN, TIDE_DT ) !/TIDE ELSE !/OASIS COUPL_COMM = MPI_COMM !/OASOCM IF (.NOT.FLAGSC(J)) ID_OASIS_TIME = -1 #if defined WAVES_OCEAN !/COAWST TFN(1,J)=TIME0(1) !/COAWST TFN(2,J)=TIME0(2) !/COAWST CALL TICK21(TFN(:,J),REAL(TI_OCN2WAV)) #else CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TC0, CX0, CY0, XXX, TCN, CXN, CYN, XXX, & IERR & !/OASOCM , COUPL_COMM & ) #endif !/TIDE END IF END IF ! WND : winds ELSE IF ( J .EQ. 3 ) THEN IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& TW0, WX0, WY0, DT0, TWN, WXN, WYN, DTN, IERR) ELSE !/OASIS COUPL_COMM = MPI_COMM !/OASACM IF (.NOT.FLAGSC(J)) ID_OASIS_TIME = -1 !/NCC IF (.NOT.CFLAG(J)) THEN #if defined AIR_WAVES !/COAWST TFN(1,J)=TIME0(1) !/COAWST TFN(2,J)=TIME0(2) !/COAWST CALL TICK21(TFN(:,J),REAL(TI_ATM2WAV)) #else CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TW0, WX0, WY0, DT0, TWN, WXN, WYN, DTN, & IERR & !/OASACM , COUPL_COMM & ) !/NCC END IF !/NCC CALL WW_CDETECT(CFLAG(J)) !/NCC IF ( IAPROC .EQ. NAPOUT .AND. DEBUG_NCC ) & !/NCC WRITE(9753) TW0, TWN !/NCC CALL WW_UPDATE_WIND(TW0,TWN,WX0,WY0,WXN,WYN) !/NCC IF ( IAPROC .EQ. NAPOUT .AND. DEBUG_NCC ) & !/NCC WRITE(9751) TW0, TWN, WX0, WY0, WXN, WYN #endif END IF ! ICE : ice conc. ELSE IF ( J .EQ. 4 ) THEN !/NCC IF (.NOT.CFLAG(J)) THEN CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & TTT, XXX, XXX, XXX, TIN, XXX, BERGI, ICEI, IERR) IF ( IERR .LT. 0 ) FLLSTI = .TRUE. !could use this: IF ( IERR .LT. 0 ) FLLST_ALL(J) = .TRUE. !/NCC END IF !/NCC CALL WW_CDETECT(CFLAG(J)) !/NCC IF ( IAPROC .EQ. NAPOUT .AND. DEBUG_NCC ) & !/NCC WRITE(9753) TIN !/NCC CALL WW_UPDATE_PSEUDOICE(TIN,ICEI) !/NCC IF ( IAPROC .EQ. NAPOUT .AND. DEBUG_NCC ) & !/NCC WRITE(9752) TIN, ICEI ! Assim data ELSE IF ( J .EQ. 5 ) THEN CALL W3FLDD ('SIZE', IDSTR(J), NDSF(J), NDST, & NDSEN, TIME0, T0N, RCLD(J), NDT(J), & NDTNEW, DATA0, IERR ) IF ( IERR .LT. 0 ) THEN INFLAGS1(J) = .FALSE. IF ( ALLOCATED(DATA0) ) DEALLOCATE(DATA0) ELSE NDT(J) = NDTNEW IF ( ALLOCATED(DATA0) ) DEALLOCATE(DATA0) ALLOCATE ( DATA0(RCLD(J),NDT(J)) ) CALL W3FLDD ('READ', IDSTR(J), NDSF(J), NDST, & NDSEN, TIME0, T0N, RCLD(J), NDT(J), & NDTNEW, DATA0, IERR ) END IF ! Assim data ELSE IF ( J .EQ. 6 ) THEN CALL W3FLDD ('SIZE', IDSTR(J), NDSF(J), NDST, & NDSEN, TIME0, T1N, RCLD(J), NDT(J), & NDTNEW, DATA1, IERR ) IF ( IERR .LT. 0 ) THEN INFLAGS1(J) = .FALSE. IF ( ALLOCATED(DATA1) ) DEALLOCATE(DATA1) ELSE NDT(J) = NDTNEW IF ( ALLOCATED(DATA1) ) DEALLOCATE(DATA1) ALLOCATE ( DATA1(RCLD(J),NDT(J)) ) CALL W3FLDD ('READ', IDSTR(J), NDSF(J), NDST, & NDSEN, TIME0, T1N, RCLD(J), NDT(J), & NDTNEW, DATA1, IERR ) END IF ! Assim data ELSE IF ( J .EQ. 7 ) THEN CALL W3FLDD ('SIZE', IDSTR(J), NDSF(J), NDST, & NDSEN, TIME0, T2N, RCLD(J), NDT(J), & NDTNEW, DATA2, IERR ) IF ( IERR .LT. 0 ) THEN INFLAGS1(J) = .FALSE. IF ( ALLOCATED(DATA2) ) DEALLOCATE(DATA2) ELSE NDT(J) = NDTNEW IF ( ALLOCATED(DATA2) ) DEALLOCATE(DATA2) ALLOCATE ( DATA2(RCLD(J),NDT(J)) ) CALL W3FLDD ('READ', IDSTR(J), NDSF(J), NDST, & NDSEN, TIME0, T2N, RCLD(J), NDT(J), & NDTNEW, DATA2, IERR ) END IF ! Track ELSE IF ( J .EQ. 8 ) THEN CALL W3FLDM (4, NDST, NDSEN, TIME0, TIMEN, NH(4), & NHMAX, THO, HA, HD, TG0, GA0, GD0, & TGN, GAN, GDN, IERR) END IF ! IF ( IERR.GT.0 ) GOTO 2222 IF ( IERR.LT.0 .AND. IAPROC.EQ.NAPOUT ) & WRITE (NDSO,973) IDFLDS(J) ! END IF ! ! 7.a.4 Update next ending time ! IF ( INFLAGS1(J) ) THEN TTT = TFN(:,J) DTTST = DSEC21 ( TTT , TTIME ) IF ( DTTST.GT.0. .AND. .NOT. & ( (FLLSTL .AND. J.EQ.1) .OR. & (FLLST_ALL(J) .AND. J.EQ.-7) .OR. & (FLLST_ALL(J) .AND. J.EQ.-6) .OR. & (FLLST_ALL(J) .AND. J.EQ.-5) .OR. & (FLLST_ALL(J) .AND. J.EQ.-4) .OR. & (FLLST_ALL(J) .AND. J.EQ.-3) .OR. & (FLLST_ALL(J) .AND. J.EQ.-2) .OR. & (FLLST_ALL(J) .AND. J.EQ.-1) .OR. & (FLLST_ALL(J) .AND. J.EQ.0 ) .OR. & (FLLSTI .AND. J.EQ.4) ) ) THEN TTIME = TTT ! notes: if model has run out beyond field input, then this line should not ! be reached. END IF END IF ! END IF ! END DO ! J=JFIRST,8 ! ! update the next assimilation data time TDN = TTIME CALL TICK21 ( TDN, 1. ) DO J=5, 7 IF ( INFLAGS1(J) ) THEN TTT = TFN(:,J) DTTST = DSEC21 ( TTT , TDN ) IF ( DTTST.GT.0. ) TDN = TTT END IF END DO ! !/T WRITE (NDST,9072) '0-N', TIME0, TTIME, & !/T IDSTR(-7), INFLAGS1(-7), TI1, & !/T IDSTR(-6), INFLAGS1(-6), TI2, & !/T IDSTR(-5), INFLAGS1(-5), TI3, & !/T IDSTR(-4), INFLAGS1(-4), TI4, & !/T IDSTR(-3), INFLAGS1(-3), TI5, & !/T IDSTR(-2), INFLAGS1(-2), TZN, & !/T IDSTR(-1), INFLAGS1(-1), TTN, & !/T IDSTR(0), INFLAGS1(0), TVN, & !/T IDSTR(1), INFLAGS1(1), TLN, & !/T IDSTR(2), INFLAGS1(2), TC0, TCN, & !/T IDSTR(3), INFLAGS1(3), TW0, TWN, & !/T IDSTR(4), INFLAGS1(4), TIN, & !/T IDSTR(5), INFLAGS1(5), T0N, & !/T IDSTR(6), INFLAGS1(6), T1N, & !/T IDSTR(7), INFLAGS1(7), T2N, TDN, & !/T IDSTR(8), INFLAGS1(8), TG0, TGN ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,*) ' ' ! ! 7.b Run the wave model for the given interval ! TIME0 = TTIME ! CALL W3WAVE ( 1, TIME0 & !/OASIS ,.TRUE., .FALSE., MPI_COMM & ) ! ! The following lines prevents us from trying to read past the end ! of the files. This feature existed in v3.14. ! "1" is for water levels ! "4" is for ice concentration: IF ( FLLSTL ) INFLAGS1(1) = .FALSE. IF ( FLLSTI ) INFLAGS1(4) = .FALSE. ! We include something like this for mud and ice parameters also: DO J=-7,0 IF (FLLST_ALL(J))THEN INFLAGS1(J)=.FALSE. END IF END DO ! ! 7.c Run data assimilation at ending time ! DTTST = DSEC21 ( TIME , TDN ) IF ( DTTST .EQ. 0 ) THEN CALL STME21 ( TIME0 , DTME21 ) IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,975) DTME21 ! FLGDAS(1) = DSEC21(TIME,T0N) .EQ. 0. FLGDAS(2) = DSEC21(TIME,T1N) .EQ. 0. FLGDAS(3) = DSEC21(TIME,T2N) .EQ. 0. ! CALL W3WDAS ( FLGDAS, RCLD, NDT, DATA0, DATA1, DATA2 ) ! ! 7.d Call wave model again after data assimilation for output only ! DTTST = DSEC21 ( TIME , TIMEN ) IF ( DTTST .EQ. 0. ) THEN IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,*) ' ' CALL W3WAVE ( 1, TIME0 & !/OASIS , .TRUE., .FALSE., MPI_COMM & ) END IF END IF ! ! 7.e Check times ! DTTST = DSEC21 ( TIME0 , TIMEN ) IF ( DTTST .GT. 0. ) GOTO 700 ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! End of shell ! GOTO 2222 ! ! Error escape locations ! 2000 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1000) IERR GOTO 2222 ! 2001 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1001) GOTO 2222 ! 2002 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1002) IERR GOTO 2222 ! 2003 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1003) GOTO 2222 ! 2004 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1004) GOTO 2222 ! 2005 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1005) IDTST GOTO 2222 ! 2006 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1006) IDTST, NH(J) GOTO 2222 ! 2007 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1007) GOTO 2222 ! 2008 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1008) IERR GOTO 2222 ! 2222 CONTINUE ! !/MPI CALL MPI_BARRIER ( MPI_COMM, IERR_MPI ) ! IF ( IAPROC .EQ. NAPOUT ) THEN !/F90 CALL DATE_AND_TIME ( VALUES=CLKDT3 ) !/F90 CLKFIN = TDIFF ( CLKDT1,CLKDT2 ) !/F90 CLKFEL = TDIFF ( CLKDT1,CLKDT3 ) !/F90 WRITE (NDSO,997) CLKFIN !/F90 WRITE (NDSO,998) CLKFEL !/F90 IF ( NDSO .NE. NDS(1) ) THEN !/F90 WRITE (NDS(1),997) CLKFIN !/F90 WRITE (NDS(1),998) CLKFEL !/F90 END IF WRITE (NDSO,999) END IF ! !/NCO/! IF ( IAPROC .EQ. 1 ) CALL W3TAGE('WAVEFCST') !/OASIS IF (OASISED.EQ.1) THEN !/OASIS CALL CPL_OASIS_FINALIZE !/OASIS ELSE !/PALM IF (PALMED.EQ.0) THEN !/COAWST IF (COAWSTED.EQ.0) THEN !/MPI CALL MPI_FINALIZE ( IERR_MPI ) !/COAWST END IF !/PALM ENDIF !/OASIS END IF #if defined COAWST_COUPLING !/COAWST CALL FINALIZE_WAV_COUPLING(1) #endif ! ! ! Formats ! 900 FORMAT (/15X,' *** WAVEWATCH III Program shell *** '/ & 15X,'==============================================='/) 901 FORMAT ( ' Comment character is ''',A,''''/) ! 920 FORMAT (/' Input fields : '/ & ' --------------------------------------------------') 921 FORMAT ( ' ',A,2X,A,2X,A) 922 FORMAT ( ' ' ) ! 930 FORMAT (/' Time interval : '/ & ' --------------------------------------------------') 931 FORMAT ( ' Starting time : ',A) 932 FORMAT ( ' Ending time : ',A/) ! 940 FORMAT (/' Output requests : '/ & ' --------------------------------------------------'/ & ' ',A) 941 FORMAT (/' Type',I2,' : ',A/ & ' -----------------------------------------') 942 FORMAT ( ' From : ',A) 943 FORMAT ( ' To : ',A) 1944 FORMAT ( ' Interval : ', 8X,A11/) 2944 FORMAT ( ' Interval : ', 9X,A10/) 3944 FORMAT ( ' Interval : ',11X,A8/) 1945 FORMAT ( ' Fields : ',A) 2945 FORMAT ( ' Point 1 : ',2F8.2,2X,A) 2955 FORMAT ( ' Point 1 : ',2(F8.1,'E3'),2X,A) 2946 FORMAT ( ' ',I6,' : ',2F8.2,2X,A) 2956 FORMAT ( ' ',I6,' : ',2(F8.1,'E3'),2X,A) 2947 FORMAT ( ' No points defined') 3945 FORMAT ( ' The file with ',A,' data is ',A,'.') 6945 FORMAT ( ' IX first,last,inc :',3I5/ & ' IY first,last,inc :',3I5/ & ' Formatted file : ',A) 8945 FORMAT ( ' Dates out of run dates : output ', A, & ' deactivated') ! 950 FORMAT (/' Initializations :'/ & ' --------------------------------------------------') 951 FORMAT ( ' ',A) !/O7 952 FORMAT ( ' ',I6,2X,A) !/O7 953 FORMAT ( ' ',I6,I11.8,I7.6,3E12.4) 954 FORMAT ( ' ',A,': file not needed') 955 FORMAT ( ' ',A,': file OK') 956 FORMAT ( ' ',A,': file OK, recl =',I3, & ' undef = ',E10.3) ! 960 FORMAT (/' Running model without input fields'/ & ' --------------------------------------------------'/) ! 970 FORMAT (/' Running model with input fields'/ & ' --------------------------------------------------') 971 FORMAT (/' Updating input at ',A) 972 FORMAT ( ' Updating ',A) 973 FORMAT ( ' Past last ',A) !/TIDE 974 FORMAT ( ' Updating ',A,'using tidal constituents') 975 FORMAT (/' Data assimmilation at ',A) ! !/F90 997 FORMAT (/' Initialization time :',F10.2,' s') !/F90 998 FORMAT ( ' Elapsed time :',F10.2,' s') ! 999 FORMAT(//' End of program '/ & ' ===================================='/ & ' WAVEWATCH III Program shell '/) ! 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : '/ & ' ERROR IN OPENING INPUT FILE'/ & ' IOSTAT =',I5/) ! 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : '/ & ' PREMATURE END OF INPUT FILE'/) ! 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : '/ & ' ERROR IN READING FROM INPUT FILE'/ & ' IOSTAT =',I5/) ! 1003 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : '/ & ' ILLEGAL TIME INTERVAL'/) ! 1004 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : '/ & ' POINT OUTPUT ACTIVATED, BUT NO POINTS DEFINED'/) ! 1005 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : '/ & ' ILLEGAL ID STRING HOMOGENEOUS FIELD : ',A/) ! 1006 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : '/ & ' TOO MANY HOMOGENEOUS FIELDS : ',A,1X,I4/) ! 1007 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : '/ & ' INSUFFICIENT DATA FOR HOMOGENEOUS FIELDS'/) ! 1008 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : '/ & ' ERROR IN OPENING OUTPUT FILE'/ & ' IOSTAT =',I5/) ! !/T 9000 FORMAT ( ' TEST W3SHEL : UNIT NUMBERS :',12I4) !/T 9001 FORMAT ( ' TEST W3SHEL : SUBR. TRACING :',2I4) ! !/T 9020 FORMAT ( ' TEST W3SHEL : FLAGS DEF / HOM : ',9L2,2X,9L2) ! !/T 9040 FORMAT ( ' TEST W3SHEL : ODAT : ',I9.8,I7.6,I7,I9.8,I7.6, & !/T 4(/24X,I9.8,I7.6,I7,I9.8,I7.6) ) !/T 9041 FORMAT ( ' TEST W3SHEL : FLGRD : ',20L2) !/T 9042 FORMAT ( ' TEST W3SHEL : IPR, PRFRM : ',6I6,1X,L1) ! !/T 9070 FORMAT ( ' TEST W3SHEL : ',A,3X,2(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,2(I10.8,I7.6)/ & !/T ' ',A,L3,2(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,2(I10.8,I7.6)) !/T 9071 FORMAT ( ' TEST W3SHEL : ',A,', DTTST = ',E10.3) !/T 9072 FORMAT ( ' TEST W3SHEL : ',A,3X,2(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,2(I10.8,I7.6)/ & !/T ' ',A,L3,2(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,(I10.8,I7.6)/ & !/T ' ',A,L3,17X,2(I10.8,I7.6)/ & !/T ' ',A,L3,2(I10.8,I7.6)) !/ !/ End of W3SHEL ----------------------------------------------------- / !/ !/NOPA END PROGRAM W3SHEL !/PALM END SUBROUTINE W3SHEL !/COAWST END SUBROUTINE WW3_init