#include "w3macros.h" !/ ------------------------------------------------------------------- / MODULE W3INITMD !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | !/ | Last update : 05-Jun-2018 | !/ +-----------------------------------+ !/ !/ 28-Dec-2004 : Origination (out of W3WAVEMD). ( version 3.06 ) !/ Multiple grid version. !/ 03-Jan-2005 : Add US2x to MPI communication. ( version 3.06 ) !/ 04-Jan-2005 : Add grid output flags to W3INIT. ( version 3.06 ) !/ 07-Feb-2005 : Combined vs. separate test output. ( version 3.07 ) !/ 04-May-2005 : Change to MPI_COMM_WAVE. ( version 3.07 ) !/ 21-Jul-2005 : Add output fields. ( version 3.07 ) !/ 09-Nov-2005 : Drying out of points added. ( version 3.08 ) !/ 13-Jun-2006 : Splitting STORE in G/SSTORE. ( version 3.09 ) !/ 26-Jun-2006 : adding wiring for output type 6. ( version 3.09 ) !/ 27-Jun-2006 : Adding file name preamble. ( version 3.09 ) !/ 04-Jul-2006 : Consolidate stress arrays. ( version 3.09 ) !/ 02-Aug-2006 : Adding W3MPIP. ( version 3.10 ) !/ 02-Nov-2006 : Adding partitioning options. ( version 3.10 ) !/ 11-Jan-2007 : Updating IAPPRO computation. ( version 3.10 ) !/ 02-Apr-2007 : Add partitioned field data. ( version 3.11 ) !/ Add user-defined field data. !/ 01-May-2007 : Move O7a output to W3IOPP. ( version 3.11 ) !/ 08-May-2007 : Starting from calm as an option. ( version 3.11 ) !/ 17-May-2007 : Adding NTPROC/NAPROC separation. ( version 3.11 ) !/ 21-Jun-2007 : Dedicated output processes. ( version 3.11 ) !/ 29-Feb-2008 : Add NEC compiler directives. ( version 3.13 ) !/ 29-May-2009 : Preparing distribution version. ( version 3.14 ) !/ 23-Jul-2009 : Implement unstructured grids ( version 3.14 ) !/ 30-Oct-2009 : Implement run-time grid selection. ( version 3.14 ) !/ (W. E. Rogers & T. J. Campbell, NRL) !/ 30-Oct-2009 : Implement curvilinear grid type. ( version 3.14 ) !/ (W. E. Rogers & T. J. Campbell, NRL) !/ 06-Dec-2010 : Change from GLOBAL (logical) to ICLOSE (integer) to !/ specify index closure for a grid. ( version 3.14 ) !/ (T. J. Campbell, NRL) !/ 02-Sep.2012 : Set up for > 999 test files. ( version 4.10 ) !/ Reset UST initialization. !/ 03-Sep-2012 : Switch test file on/off (TSTOUT) ( version 4.10 ) !/ 03-Sep-2012 : Clean up of UG grids ( version 4.08 ) !/ 30-Sep-2012 : Implemetation of tidal constituents ( version 4.09 ) !/ 07-Dec-2012 : Initialize UST non-zero. ( version 4.11 ) !/ 12-Dec-2012 : Changes for SMC grid. JG_Li ( version 4.11 ) !/ 26-Dec-2012 : Modify field output MPI for new ( version 4.11 ) !/ structure and smaller memory footprint. !/ 02-Jul-2013 : Bug fix MPI_FLOAT -> MPI_REAL. ( version 4.11 ) !/ 10-Oct-2013 : CG and WN values at DMIN for ISEA=0 ( version 4.12 ) !/ 14-Nov-2013 : Remove UST(DIR) initialization. ( version 4.13 ) !/ 15-Dec-2013 : Adds fluxes to ice ( version 5.01 ) !/ 01-May-2017 : Adds directional MSS parameters ( version 6.04 ) !/ 05-Jun-2018 : Adds PDLIB/MEMCHECK/DEBUG ( version 6.04 ) !/ 21-Aug-2018 : Add WBT parameter ( version 6.06 ) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ !/ Copyright 2009-2013 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. !/ !/ Note: Changes in version numbers not logged above. !/ ! 1. Purpose : ! ! 2. Variables and types : ! ! Name Type Scope Description ! ---------------------------------------------------------------- ! CRITOS R.P. Public Critical percentage of resources used ! for output to trigger warning. ! WWVER C*10 Public Model version number. ! SWITCHES C*256 Public switches taken from bin/switch ! ---------------------------------------------------------------- ! ! 3. Subroutines and functions : ! ! Name Type Scope Description ! ---------------------------------------------------------------- ! W3INIT Subr. Public Wave model initialization. ! W3MPII Subr. Public Initialize MPI data transpose. ! W3MPIO Subr. Public Initialize MPI output gathering. ! W3MPIP Subr. Public Initialize MPI point output gathering. ! ---------------------------------------------------------------- ! ! 4. Subroutines and functions used : ! ! See subroutine documentation. ! ! 5. Remarks : ! ! 6. Switches : ! ! !/SHRD Switch for shared / distributed memory architecture. ! !/DIST Id. ! !/MPI Id. ! ! !/S Enable subroutine tracing. ! !/Tn Enable test output. ! !/MPIT Enable test output (MPI). ! ! 7. Source code : ! !/ ------------------------------------------------------------------- / PUBLIC !/ REAL, PARAMETER :: CRITOS = 15. CHARACTER(LEN=10), PARAMETER :: WWVER = '7.00 ' CHARACTER(LEN=512), PARAMETER :: SWITCHES = & 'PUT_SW1' // & 'PUT_SW2' // & 'PUT_SW3' !/ CONTAINS !/ ------------------------------------------------------------------- / SUBROUTINE W3INIT ( IMOD, IsMulti, FEXT, MDS, MTRACE, ODAT & , FLGRD, & FLGR2, FLGD, FLG2, NPT, XPT, YPT, PNAMES, & IPRT, PRTFRM, MPI_COMM, FLAGSTIDEIN) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | !/ | Last update : 03-Sep-2012 | !/ +-----------------------------------+ !/ !/ 17-Mar-1999 : Distributed FORTRAN 77 version. ( version 1.18 ) !/ 13-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 ) !/ Major changes to logistics. !/ 14-Feb-2000 : Exact-NL added. ( version 2.01 ) !/ 24-Jan-2001 : Flat grid version. ( version 2.06 ) !/ 24-Jan-2002 : Zero time step for data ass. ( version 2.17 ) !/ 18-Feb-2002 : Point output diagnostics added. ( version 2.18 ) !/ 13-Nov-2002 : Add stress vector. ( version 3.00 ) !/ 20-Aug-2003 : Output server options added. ( version 3.04 ) !/ 28-Dec-2004 : Multiple grid version. ( version 3.06 ) !/ Taken out of W3WAVE. !/ 04-Jan-2005 : Add grid output flags to par list. ( version 3.06 ) !/ 07-Feb-2005 : Combined vs. separate test output. ( version 3.07 ) !/ 04-May-2005 : Change to MPI_COMM_WAVE. ( version 3.07 ) !/ 09-Nov-2005 : Drying out of points added. ( version 3.08 ) !/ 26-Jun-2006 : adding wiring for output type 6. ( version 3.09 ) !/ 27-Jun-2006 : Adding file name preamble. ( version 3.09 ) !/ 02-Aug-2006 : Adding W3MPIP. ( version 3.10 ) !/ 02-Nov-2006 : Adding partitioning options. ( version 3.10 ) !/ 11-Jan-2007 : Updating IAPPRO computation. ( version 3.10 ) !/ 01-May-2007 : Move O7a output to W3IOPP. ( version 3.11 ) !/ 08-May-2007 : Starting from calm as an option. ( version 3.11 ) !/ 17-May-2007 : Adding NTPROC/NAPROC separation. ( version 3.11 ) !/ 21-Jun-2007 : Dedicated output processes. ( version 3.11 !/ 13-Sep-2009 : Add coupling option ( version 3.14 ) !/ 30-Oct-2009 : Implement run-time grid selection. ( version 3.14 ) !/ (W. E. Rogers & T. J. Campbell, NRL) !/ 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.1 ) !/ (A. Roland and F. Ardhuin) !/ 06-Dec-2010 : Change from GLOBAL (logical) to ICLOSE (integer) to !/ specify index closure for a grid. ( version 3.14 ) !/ (T. J. Campbell, NRL) !/ 02-Sep.2012 : Set up for > 999 test files. ( version 4.10 ) !/ 03-Sep-2012 : Switch test file on/off (TSTOUT) ( version 4.10 ) !/ 03-Sep-2012 : Clean up of UG grids ( version 4.08 ) !/ ! 1. Purpose : ! ! Initialize WAVEWATCH III. ! ! 2. Method : ! ! Initialize data structure and wave fields from data files. ! Initialize grid from local and instantaneous data. ! ! 3. Parameters : ! ! Parameter list ! ---------------------------------------------------------------- ! IMOD Int. I Model number. ! FEXT Char I Extension of data files. ! MDS I.A. I Array with dataset numbers (see below), ! saved as NDS in W3ODATMD. ! 1: General output unit number ("log file"). ! 2: Error output unit number. ! 3: Test output unit number. ! 4: "screen", i.e., direct output location, ! can be the screen or the output file of ! the shell. ! 5: Model definition file unit number. ! 6: Restart file unit number. ! 7: Grid output file unit number. ! 8: Point output file unit number. ! 9: Input boundary data file unit number. ! 10: Output boundary data file unit number ! (first). ! 11: Track information file unit number. ! 12: Track output file unit number. ! MTRACE I.A. I Array with subroutine tracing information. ! 1: Output unit number for trace. ! 2: Maximum number of trace prints. ! ODAT I.A. I Output data, five parameters per output type ! 1-5 Data for OTYPE = 1; gridded fields. ! 1 YYYMMDD for first output. ! 2 HHMMSS for first output. ! 3 Output interval in seconds. ! 4 YYYMMDD for last output. ! 5 HHMMSS for last output. ! 6-10 Id. for OTYPE = 2; point output. ! 11-15 Id. for OTYPE = 3; track point output. ! 16-20 Id. for OTYPE = 4; restart files. ! 21-25 Id. for OTYPE = 5; boundary data. ! 31-35 Id. for OTYPE = 7; coupling data. ! 36-40 Id. for OTYPE = 8; second restart file ! FLGRD L.A. I Flags for gridded output. ! FLGR2 L.A. I Flags for coupling output. ! NPT Int. I Number of output points ! X/YPT R.A. I Coordinates of output points. ! PNAMES C.A. I Output point names. ! IPRT I.A. I Partitioning grid info. ! PRTFRM I.A. I Partitioning format flag. ! MPI_COMM Int. I MPI communicator to be used for model. ! ---------------------------------------------------------------- ! ! 4. Subroutines used : ! ! Name Type Module Description ! ---------------------------------------------------------------- ! W3SETG Subr. W3GDATMD Point to data structure. ! W3SETW Subr. W3WDATMD Point to data structure. ! W3DIMW Subr. Id. Set array sizes in data structure. ! W3SETA Subr. W3ADATMD Point to data structure. ! W3DIMA Subr. Id. Set array sizes in data structure. ! W3SETI Subr. W3IDATMD Point to data structure. ! W3DIMI Subr. Id. Set array sizes in data structure. ! W3SETO Subr. W3ODATMD Point to data structure. ! W3DMO5 Subr. Id. Set array sizes in data structure. ! ITRACE Subr. W3SERVMD Subroutine tracing initialization. ! STRACE Subr. Id. Subroutine tracing. ! EXTCDE Subr. Id. Program abort. ! WWDATE Subr. Id. System date. ! WWTIME Subr. Id. System time. ! DSEC21 Func. W3TIMEMD Compute time difference. ! TICK21 Func. Id. Advance the clock. ! STME21 Func. Id. Print the time readable. ! PRTBLK Func. W3ARRYMD Print plot of array. ! W3IOGR Subr. W3IOGRMD Read/write model definition file. ! W3IORS Subr. W3IORSMD Read/write restart file. ! W3IOPP Subr. W3IOPOMD Preprocess point output. ! CALL MPI_COMM_SIZE, CALL MPI_COMM_RANK ! Subr. mpif.h Standard MPI routines. ! ---------------------------------------------------------------- ! ! 5. Called by : ! ! Any program shell or integrated model which uses WAVEWATCH III. ! ! 6. Error messages : ! ! On opening of log file only. Other error messages are generated ! by W3IOGR and W3IORS. ! ! 7. Remarks : ! ! - The log file is called 'log.FEXT', where FEXT is passed to ! the routine. ! - The test output file is called 'test.FEXT' in shared memory ! version or testNNN.FEXT in distributed memory version. ! - A water level and ice coverage are transferred with the ! restart file. To assure consistency within the model, the ! water level and ice coverage are re-evaluated at the 0th ! time step in the actual wave model routine. ! - When running regtests in cases where disk is non-local ! (i.e. NFS used), there can be a huge improvment in compute ! time by using /var/tmp/ for log files. ! See commented line at "OPEN (MDS(1),FILE=..." ! ! 8. Structure : ! ! ---------------------------------------------------- ! 1. Set-up of idata structures and I/O. ! a Point to proper data structures. ! b Number of processors and processor number. ! c Open files. ! d Dataset unit numbers ! e Subroutine tracing ! f Initial and test outputs ! 2. Model definition. ! a Read model definition file ( W3IOGR ) ! b Save MAPSTA. ! c MPP preparation ! 3. Model initialization. ! a Read restart file. ( W3IORS ) ! b Compare grid and restart MAPSTA. ! c Initialize with winds if requested (set flag). ! d Initialize calm conditions if requested. ! e Preparations for prop. scheme. ! 4. Set-up output times. ! a Unpack ODAT. ! b Check if output available. ! c Get first time per output and overall. ! d Prepare point output ( W3IOPP ) ! 5. Define wavenumber grid. ! a Calculate depth. ! b Fill wavenumber and group velocity arrays. ! 6. Initialize arrays. ! 7. Write info to log file. ! 8. Final MPI set up ( W3MPII , W3MPIO , W3MPIP ) ! ---------------------------------------------------- ! ! 9. Switches : ! ! !/SHRD Switch for shared / distributed memory architecture. ! !/DIST Id. ! !/MPI Id. ! ! !/S Enable subroutine tracing. ! !/Tn Enable test output. ! ! 10. Source code : ! !/ ------------------------------------------------------------------- / USE CONSTANTS !/MEMCHECK USE MallocInfo_m !/ USE W3GDATMD, ONLY: W3SETG, P2MSF, E3DF, US3DF, USSPF, RSTYPE USE W3WDATMD, ONLY: W3SETW, W3DIMW USE W3ADATMD, ONLY: W3SETA, W3DIMA, P2SMS, HS, EF, US3D, USSP !/MEMCHECK USE W3ADATMD, ONLY: MALLINFOS USE W3IDATMD, ONLY: W3SETI, W3DIMI USE W3ODATMD, ONLY: W3SETO, W3DMO5 USE W3IOGOMD, ONLY: W3FLGRDUPDT USE W3IOGRMD, ONLY: W3IOGR USE W3IORSMD, ONLY: W3IORS USE W3IOPOMD, ONLY: W3IOPP USE W3SERVMD, ONLY: ITRACE, EXTCDE, WWDATE, WWTIME !/S USE W3SERVMD, ONLY: STRACE USE W3TIMEMD, ONLY: DSEC21, TICK21, STME21 USE W3ARRYMD, ONLY: PRTBLK !/ USE W3GDATMD, ONLY: NX, NY, NSEA, NSEAL, MAPSTA, MAPST2, MAPFS, & MAPSF, FLAGLL, & ICLOSE, ZB, TRNX, TRNY, DMIN, DTCFL, DTMAX, & FLCK, NK, NTH, NSPEC, SIG, GNAME !/PDLIB USE W3GDATMD, ONLY : FLCTH USE W3WDATMD, ONLY: TIME, TLEV, TICE, WLV, UST, USTDIR, VA USE W3ODATMD, ONLY: NDSO, NDSE, NDST, SCREEN, NDS, NTPROC, & NAPROC, IAPROC, NAPLOG, NAPOUT, NAPERR, & NAPFLD, NAPPNT, NAPTRK, NAPRST, NAPBPT, & NAPPRT, TOFRST, DTOUT, TONEXT, TOLAST, & FLOUT, FLOGRD, FLBPO, NOPTS, PTNME, & PTLOC, IPTINT, PTIFAC, UNDEF, IDOUT, FLBPI, & OUTPTS, FNMPRE, IX0, IXN, IXS, IY0, IYN, & IYS, FLFORM, IOSTYP, UNIPTS, UPPROC, NOTYPE,& FLOGR2, NOGRP, NGRPP, FLOGD, FLOG2 USE W3ADATMD, ONLY: NSEALM, IAPPRO, FLCOLD, FLIWND, DW, CG, WN, & UA, UD, U10, U10D, AS !/MPI USE W3ADATMD, ONLY: MPI_COMM_WAVE, MPI_COMM_WCMP USE W3IDATMD, ONLY: FLLEV, FLCUR, FLWIND, FLICE, FLMDN, FLMTH, & FLMVS, FLIC1, FLIC2, FLIC3, FLIC4, FLIC5 USE W3DISPMD, ONLY: WAVNU1, WAVNU3 USE W3PARALL, ONLY : AC_tot USE W3PARALL, ONLY: SET_UP_NSEAL_NSEALM !/PDLIB USE W3PARALL, ONLY: SYNCHRONIZE_IPGL_ETC_ARRAY, ISEA_TO_JSEA !/PDLIB use yowNodepool, only: npa !/PDLIB use yowRankModule, only : rank USE W3GDATMD, ONLY: GTYPE, UNGTYPE !/PDLIB USE PDLIB_W3PROFSMD, ONLY : PDLIB_MAPSTA_INIT, VA_SETUP_IOBPD !/PDLIB USE PDLIB_W3PROFSMD, ONLY : BLOCK_SOLVER_INIT, PDLIB_STYLE_INIT !/PDLIB use yowDatapool, only: istatus !/SETUP USE W3WAVSET, ONLY : PREPARATION_FD_SCHEME !/SETUP USE W3WDATMD, ONLY: ZETA_SETUP !/SETUP USE W3GDATMD, ONLY : DO_CHANGE_WLV USE W3GDATMD, ONLY: FSN,FSPSI,FSFCT,FSNIMP, FSTOTALIMP, FSTOTALEXP USE W3GDATMD, ONLY: FSREFRACTION, FSFREQSHIFT USE W3PARALL, ONLY: INIT_GET_JSEA_ISPROC, INIT_GET_ISEA !/TIMINGS USE W3PARALL, ONLY: PRINT_MY_TIME !/PDLIB!/DEBUGCOH USE PDLIB_W3PROFSMD, ONLY: ALL_VA_INTEGRAL_PRINT, TEST_MPI_STATUS !/PDLIB!/DEBUGINIT USE PDLIB_W3PROFSMD, ONLY: PRINT_WN_STATISTIC !/UOST USE W3UOSTMD, ONLY: UOST_SETGRID !/ IMPLICIT NONE ! !/MPI INCLUDE "mpif.h" !/ !/ ------------------------------------------------------------------- / !/ Parameter list !/ INTEGER, INTENT(IN) :: IMOD, MDS(13), MTRACE(2), & ODAT(40),NPT, IPRT(6),& MPI_COMM LOGICAL, INTENT(IN) :: IsMulti REAL, INTENT(INOUT) :: XPT(NPT), YPT(NPT) LOGICAL, INTENT(INOUT) :: FLGRD(NOGRP,NGRPP), FLGD(NOGRP),& FLGR2(NOGRP,NGRPP), FLG2(NOGRP),& PRTFRM CHARACTER, INTENT(IN) :: FEXT*(*) CHARACTER(LEN=10), INTENT(IN) :: PNAMES(NPT) LOGICAL, INTENT(IN), OPTIONAL :: FLAGSTIDEIN(4) INTEGER :: NSEALout, NSEALMout !/ !/ ------------------------------------------------------------------- / !/ Local parameters !/ integer :: IRANK, I, ISTAT INTEGER :: IE, IFL, IFT, IERR, NTTOT, NTLOC, & NTTARG, IK, IP, ITH, IX, IY, & J, J0, TOUT(2), TLST(2), ISEA, IS, & K, I1, I2, JSEA, NTTMAX !/DIST INTEGER :: ISTEP, ISP, IW !/MPI INTEGER :: IERR_MPI, BGROUP, LGROUP !/S INTEGER, SAVE :: IENT = 0 !/T INTEGER :: NX0, NXN !/T INTEGER, ALLOCATABLE :: MAPOUT(:,:) !/MPI INTEGER, ALLOCATABLE :: TMPRNK(:) INTEGER, ALLOCATABLE :: NT(:), MAPTST(:,:) !/T INTEGER, SAVE :: NXS = 49 REAL :: DTTST, DEPTH, FRACOS REAL :: FACTOR REAL :: WLVeff !/T REAL, ALLOCATABLE :: XOUT(:,:) LOGICAL :: OPENED CHARACTER(LEN=8) :: STTIME CHARACTER(LEN=10) :: STDATE INTEGER :: ISPROC !/DIST CHARACTER(LEN=12) :: FORMAT CHARACTER(LEN=23) :: DTME21 CHARACTER(LEN=30) :: LFILE, TFILE !/PDLIB INTEGER :: IScal(1), IPROC !/ !/ ------------------------------------------------------------------- / ! ! 1. Set-up of data structures and I/O ----------------------------- / ! 1.a Point to proper data structures. ! !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 1") CALL W3SETO ( IMOD, MDS(2), MDS(3) ) CALL W3SETG ( IMOD, MDS(2), MDS(3) ) CALL W3SETW ( IMOD, MDS(2), MDS(3) ) CALL W3SETA ( IMOD, MDS(2), MDS(3) ) CALL W3SETI ( IMOD, MDS(2), MDS(3) ) !/UOST CALL UOST_SETGRID(IMOD) !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 2") !/DEBUGINIT WRITE(740+IAPROC,*) 'Beginning of W3INIT' !/DEBUGINIT WRITE(740+IAPROC,*) ' FLGR2(10,1)=', FLGR2(10,1) !/DEBUGINIT WRITE(740+IAPROC,*) ' FLGR2(10,2)=', FLGR2(10,2) !/DEBUGINIT FLUSH(740+IAPROC) !/TIMINGS CALL PRINT_MY_TIME("Case 2") !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 1' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! ! ! 1.b Number of processors and processor number. ! Overwrite some initializations from W3ODATMD. ! ! ******************************************************* ! *** NOTE : OUTPUT PROCESSOR ASSIGNMENT NEEDS TO BE *** ! *** CONSISTENT WITH ASSIGNMENT IN WMINIT. *** ! ******************************************************* ! !/SHRD NTPROC = 1 !/SHRD NAPROC = 1 !/SHRD IAPROC = 1 !/SHRD IOSTYP = 1 ! !/MPI MPI_COMM_WAVE = MPI_COMM !/MPI CALL MPI_COMM_SIZE ( MPI_COMM_WAVE, NTPROC, IERR_MPI ) !/MPI NAPROC = NTPROC !/MPI CALL MPI_COMM_RANK ( MPI_COMM_WAVE, IAPROC, IERR_MPI ) !/MPI IAPROC = IAPROC + 1 ! !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 3") IF ( IOSTYP .LE. 1 ) THEN ! NAPFLD = MAX(1,NAPROC-1) NAPPNT = MAX(1,NAPROC-2) NAPTRK = MAX(1,NAPROC-5) NAPRST = NAPROC NAPBPT = MAX(1,NAPROC-3) NAPPRT = MAX(1,NAPROC-4) ! ELSE ! NAPPNT = NAPROC IF ( UNIPTS .AND. UPPROC ) NAPROC = MAX(1,NTPROC - 1) NAPFLD = NAPROC NAPRST = NAPROC NAPBPT = NAPROC NAPTRK = NAPROC NAPPRT = NAPROC ! IF ( IOSTYP .EQ. 2 ) THEN NAPROC = MAX(1,NAPROC-1) ELSE IF ( IOSTYP .EQ. 3 ) THEN ! ! For field or coupling output ! IF ( ODAT( 3).GT.0 .OR. ODAT(33).GT.0 ) THEN NAPFLD = NAPROC NAPROC = MAX(1,NAPROC-1) END IF IF ( ODAT(13).GT.0 ) THEN NAPTRK = NAPROC NAPROC = MAX(1,NAPROC-1) END IF IF ( ODAT(28).GT.0 ) THEN NAPPRT = NAPROC NAPROC = MAX(1,NAPROC-1) END IF IF ( ODAT( 8).GT.0 ) NAPPNT = NAPROC IF ( ODAT(18).GT.0 ) NAPRST = NAPROC IF ( ODAT(23).GT.0 ) NAPBPT = NAPROC IF ( ( ODAT( 8).GT.0 .OR. ODAT(18).GT.0 .OR. & ODAT(23).GT.0 ) ) NAPROC = MAX(1,NAPROC-1) END IF END IF ! !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 4") FRACOS = 100. * REAL(NTPROC-NAPROC) / REAL(NTPROC) IF ( FRACOS.GT.CRITOS .AND. IAPROC.EQ.NAPERR ) & WRITE (NDSE,8002) FRACOS ! !/MPI IF ( NAPROC .EQ. NTPROC ) THEN !/MPI MPI_COMM_WCMP = MPI_COMM_WAVE !/MPI ELSE !/MPI CALL MPI_COMM_GROUP ( MPI_COMM_WAVE, BGROUP, IERR_MPI ) !/MPI ALLOCATE ( TMPRNK(NAPROC) ) !/MPI DO J=1, NAPROC !/MPI TMPRNK(J) = J - 1 !/MPI END DO !/MPI CALL MPI_GROUP_INCL ( BGROUP, NAPROC, TMPRNK, LGROUP, & !/MPI IERR_MPI ) !/MPI CALL MPI_COMM_CREATE ( MPI_COMM_WAVE, LGROUP, & !/MPI MPI_COMM_WCMP, IERR_MPI ) !/MPI CALL MPI_GROUP_FREE ( LGROUP, IERR_MPI ) !/MPI CALL MPI_GROUP_FREE ( BGROUP, IERR_MPI ) !/MPI DEALLOCATE ( TMPRNK ) !/MPI END IF !!!/PDLIB CALL W3SETG(IMOD, NDSE, NDST) ! LPDLIB = .FALSE. !/PDLIB LPDLIB = .TRUE. IF (FSTOTALIMP .and. .NOT. LPDLIB) THEN WRITE(NDSE,*) 'IMPTOTAL is selected' WRITE(NDSE,*) 'But PDLIB is not' STOP 'Stop, case 1' ELSE IF (FSTOTALEXP .and. .NOT. LPDLIB) THEN WRITE(NDSE,*) 'EXPTOTAL is selected' WRITE(NDSE,*) 'But PDLIB is not' STOP 'Stop, case 1' END IF ! ! 1.c Open files without unpacking MDS ,,, ! IE = LEN_TRIM(FEXT) LFILE = 'log.' // FEXT(:IE) IFL = LEN_TRIM(LFILE) !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 5") !/SHRD TFILE = 'test.' // FEXT(:IE) !/DIST IW = 1 + INT ( LOG10 ( REAL(NAPROC) + 0.5 ) ) !/DIST IW = MAX ( 3 , MIN ( 9 , IW ) ) !/DIST WRITE (FORMAT,'(A5,I1.1,A1,I1.1,A4)') & !/DIST '(A4,I', IW, '.', IW, ',2A)' !/DIST WRITE (TFILE,FORMAT) 'test', & !/DIST OUTPTS(IMOD)%IAPROC, '.', FEXT(:IE) IFT = LEN_TRIM(TFILE) J = LEN_TRIM(FNMPRE) ! IF ( OUTPTS(IMOD)%IAPROC .EQ. OUTPTS(IMOD)%NAPLOG ) & !/DEBUGINIT WRITE(*,*) '1: w3initmd f=', TRIM(FNMPRE(:J)//LFILE(:IFL)) OPEN (MDS(1),FILE=FNMPRE(:J)//LFILE(:IFL),ERR=888,IOSTAT=IERR) ! IF ( MDS(3).NE.MDS(1) .AND. MDS(3).NE.MDS(4) .AND. TSTOUT ) THEN INQUIRE (MDS(3),OPENED=OPENED) !/DEBUGINIT WRITE(*,*) '2: w3initmd f=', TRIM(FNMPRE(:J)//TFILE(:IFT)) IF ( .NOT. OPENED ) OPEN & (MDS(3),FILE=FNMPRE(:J)//TFILE(:IFT),ERR=889,IOSTAT=IERR) END IF ! ! 1.d Dataset unit numbers ! !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 6") NDS = MDS NDSO = NDS(1) NDSE = NDS(2) NDST = NDS(3) SCREEN = NDS(4) ! ! 1.e Subroutine tracing ! CALL ITRACE ( MTRACE(1), MTRACE(2) ) ! ! 1.f Initial and test outputs ! !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 2' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 7") IF ( IAPROC .EQ. NAPLOG ) THEN CALL WWDATE ( STDATE ) CALL WWTIME ( STTIME ) WRITE (NDSO,900) WWVER, STDATE, STTIME END IF !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 2a' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! !/S CALL STRACE (IENT, 'W3INIT') !/T WRITE(NDST,9000) IMOD, FEXT(:IE) !/T WRITE (NDST,9001) NTPROC, NAPROC, IAPROC, NAPLOG, NAPOUT, & !/T NAPERR, NAPFLD, NAPPNT, NAPTRK, NAPRST, NAPBPT, NAPPRT !/T WRITE (NDST,9002) NDSO, NDSE, NDST, SCREEN !/T WRITE (NDST,9003) LFILE(:IFL), TFILE(:IFT) ! ! 2. Model defintition ---------------------------------------------- / ! 2.a Read model defintition file ! !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 8") CALL W3IOGR ( 'READ', NDS(5), IMOD, FEXT ) !/PDLIB IF (GTYPE .ne. UNGTYPE) THEN !/SETUP CALL PREPARATION_FD_SCHEME(IMOD) !/PDLIB ELSE !/PDLIB!/DEBUGINIT WRITE(*,*) 'Before PDLIB_STYLE_INIT, IMOD=', IMOD !/PDLIB CALL PDLIB_STYLE_INIT(IMOD) !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'After set up of NSEAL, NSEALM=', NSEALM !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'After PDLIB_STYLE_INIT' !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'allocated(ISEA_TO_JSEA)=', allocated(ISEA_TO_JSEA) !/PDLIB!/DEBUGINIT FLUSH(740+IAPROC) !/TIMINGS CALL PRINT_MY_TIME("After PDLIB_STYLE_INIT") !/PDLIB!/DEBUGINIT WRITE(*,*) 'After PDLIB_STYLE_INIT, IMOD=', IMOD !/PDLIB CALL SYNCHRONIZE_IPGL_ETC_ARRAY(IMOD, IsMulti) !/PDLIB END IF ! Update of output parameter flags based on mod_def parameters (for 3D arrays) !/DEBUGINIT WRITE(740+IAPROC,*) 'Before W3FLGRDUPDT' !/DEBUGINIT FLUSH(740+IAPROC) CALL W3FLGRDUPDT ( NDSO, NDSE, FLGRD, FLGR2, FLGD, FLG2 ) !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 9") !/TIMINGS CALL PRINT_MY_TIME("After W3FLGRDUPDT") IF ( FLAGLL ) THEN FACTOR = 1. ELSE FACTOR = 1.E-3 END IF IF ( IAPROC .EQ. NAPLOG ) WRITE (NDSO,920) ! ! 2.b Save MAPSTA ! ALLOCATE ( MAPTST(NY,NX) ) MAPTST = MAPSTA !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 2b' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! ! ! 2.c MPP preparation ! 2.c.1 Set simple counters and variables ! !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 10") CALL SET_UP_NSEAL_NSEALM(NSEALout, NSEALMout) NSEAL=NSEALout NSEALM=NSEALMout !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 2c' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! !/DEBUGINIT WRITE(740+IAPROC,*) 'After set up of NSEAL, NSEAL=', NSEAL !/DEBUGINIT WRITE(740+IAPROC,*) 'After set up of NSEAL, NSEALM=', NSEALM !/DEBUGINIT WRITE(740+IAPROC,*) 'NSEA=', NSEA, ' NSPEC=', NSPEC !/DEBUGINIT FLUSH(740+IAPROC) !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 11") !/DIST IF ( NSEA .LT. NAPROC ) GOTO 820 !/DIST IF ((LPDLIB .eqv. .FALSE.).or.(GTYPE .NE. UNGTYPE)) THEN !/DIST IF ( NSPEC .LT. NAPROC ) GOTO 821 !/DIST END IF !/DEBUGINIT WRITE(740+IAPROC,*) 'Before PDLIB related allocations' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB IF ((IAPROC .LE. NAPROC).and.(GTYPE .eq. UNGTYPE)) THEN !/DEBUGINIT WRITE(740+IAPROC,*) 'After test 1' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB IF (FSNIMP .or. FSTOTALIMP) THEN !/DEBUGINIT WRITE(740+IAPROC,*) 'Before BLOCK_SOLVER_INIT' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB CALL BLOCK_SOLVER_INIT() !/DEBUGINIT WRITE(740+IAPROC,*) 'After BLOCK_SOLVER_INIT' !/DEBUGINIT FLUSH(740+IAPROC) !/TIMINGS CALL PRINT_MY_TIME("After BLOCK_SOLVER_INIT") !/PDLIB ELSE IF (FSTOTALEXP) THEN !/DEBUGINIT WRITE(740+IAPROC,*) 'Before AC_tot allocation' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB allocate(AC_tot(NSPEC, npa), stat=istat) !/DEBUGINIT WRITE(740+IAPROC,*) 'After AC_tot allocation' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB ENDIF !/PDLIB END IF !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 2d' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 12") ! ! ! 2.c.2 Allocate arrays ! IF ( IAPROC .LE. NAPROC ) THEN !/DEBUGINIT WRITE(740+IAPROC,*) 'Calling W3DIMW at W3INIT, case 1' !/DEBUGINIT FLUSH(740+IAPROC) CALL W3DIMW ( IMOD, NDSE, NDST ) ELSE !/DEBUGINIT WRITE(740+IAPROC,*) 'Calling W3DIMW at W3INIT, case 2' !/DEBUGINIT FLUSH(740+IAPROC) CALL W3DIMW ( IMOD, NDSE, NDST, .FALSE. ) END IF !/DEBUGINIT WRITE(740+IAPROC,*) ' 1: NSEAL=', NSEAL !/DEBUGINIT WRITE(740+IAPROC,*) ' maxval(UST)=', maxval(UST) !/DEBUGINIT FLUSH(740+IAPROC) !/TIMINGS CALL PRINT_MY_TIME("After W3DIMW") CALL W3DIMA ( IMOD, NDSE, NDST ) CALL W3DIMI ( IMOD, NDSE, NDST , FLAGSTIDEIN ) !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 13") !/TIMINGS CALL PRINT_MY_TIME("After W3DIMI") !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 3' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! ! 2.c.3 Calculated expected number of prop. calls per processor ! NTTOT = 0 DO IK=1, NK NTLOC = 1 + INT(DTMAX/(DTCFL*SIG(IK)/SIG(1))-0.001) NTTOT = NTTOT + NTLOC*NTH END DO NTTARG = 1 + (NTTOT-1)/NAPROC NTTARG = NTTARG + INT(DTMAX/(DTCFL*SIG(NK)/SIG(1))-0.001) NTTMAX = NTTARG + 5 ! ! 2.c.4 Initialize IAPPRO ! IAPPRO = 1 ALLOCATE ( NT(NSPEC) ) NT = NTTOT !/DIST IF ((LPDLIB .eqv. .FALSE.).or.(GTYPE .NE. UNGTYPE)) THEN ! !/DIST DO ! ! 2.c.5 First sweep filling IAPPRO ! !/DIST DO IP=1, NAPROC !/DIST ISTEP = IP !/DIST ISP = 0 !/DIST NT(IP) = 0 !/DIST DO J=1, 1+NSPEC/NAPROC !/DIST ISP = ISP + ISTEP !/DIST IF ( MOD(J,2) .EQ. 1 ) THEN !/DIST ISTEP = 2*(NAPROC-IP) + 1 !/DIST ELSE !/DIST ISTEP = 2*IP - 1 !/DIST END IF !/DIST IF ( ISP .LE. NSPEC ) THEN !/DIST IK = 1 + (ISP-1)/NTH !/DIST NTLOC = 1 + INT(DTMAX/(DTCFL*SIG(IK)/SIG(1))-0.001) !/DIST IF ( NT(IP)+NTLOC .LE. NTTARG ) THEN !/DIST IAPPRO(ISP) = IP !/DIST NT(IP) = NT(IP) + NTLOC !/DIST ELSE !/DIST IAPPRO(ISP) = -1 !/DIST END IF !/DIST END IF !/DIST END DO !/DIST END DO ! ! 2.c.6 Second sweep filling IAPPRO ! !/DIST DO IP=1, NAPROC !/DIST IF ( NT(IP) .LT. NTTARG ) THEN !/DIST DO ISP=1, NSPEC !/DIST IF ( IAPPRO(ISP) .EQ. -1 ) THEN !/DIST IK = 1 + (ISP-1)/NTH !/DIST NTLOC = 1 + INT(DTMAX/(DTCFL*SIG(IK)/SIG(1))-0.001) !/DIST IF ( NT(IP)+NTLOC .LE. NTTARG ) THEN !/DIST IAPPRO(ISP) = IP !/DIST NT(IP) = NT(IP) + NTLOC !/DIST END IF !/DIST END IF !/DIST END DO !/DIST END IF !/DIST END DO ! ! 2.c.7 Check if all served ! !/DIST IF ( MINVAL(IAPPRO(1:NSPEC)) .GT. 0 ) THEN !/DIST EXIT !/DIST ELSE !/DIST NTTARG = NTTARG + 1 !/DIST IF ( NTTARG .GE. NTTMAX ) EXIT !/DIST IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,8028) !/DIST END IF ! !/DIST END DO !/DIST END IF ! !!/DEBUGMPI CALL TEST_MPI_STATUS("Case 14") !/TIMINGS CALL PRINT_MY_TIME("After Case 14") ! 2.c.8 Test output ! !/T WRITE (NDST,9020) !/T DO IP=1, NAPROC !/T WRITE (NDST,9021) IP, NT(IP), NTTARG !/T END DO ! !/T WRITE (NDST,9025) !/T DO IK=NK, 1, -1 !/T WRITE (NDST,9026) IK, (IAPPRO(ITH+(IK-1)*NTH),ITH=1,MIN(24,NTH)) !/T IF ( NTH .GT. 24 ) WRITE (NDST,9027) & !/T (IAPPRO(ITH+(IK-1)*NTH),ITH=25,NTH) !/T END DO ! ! 2.c.9 Test if any spectral points are left out ! !/DIST IF ((LPDLIB .eqv. .FALSE.).or.(GTYPE .NE. UNGTYPE)) THEN !/DIST DO ISP=1, NSPEC !/DIST IF ( IAPPRO(ISP) .EQ. -1. ) GOTO 829 !/DIST END DO !/DIST END IF ! !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 4' !/DEBUGINIT FLUSH(740+IAPROC) DEALLOCATE ( NT ) ! ! 3. Model initialization ------------------------------------------- / ! 3.a Read restart file ! VA(:,:) = 0. !/DEBUGMPI CALL TEST_MPI_STATUS("Case 15") !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 4.0' !/DEBUGINIT WRITE(740+IAPROC,*) ' 1: min/max/sum(VA)=', minval(VA), maxval(VA), sum(VA) !/DEBUGINIT WRITE(740+IAPROC,*) ' 1: NSEAL=', NSEAL !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "Before W3IORS call") !/DEBUGINIT WRITE(740+IAPROC,*) ' After ALL_VA_INTEGRAL_PRINT' !/DEBUGINIT FLUSH(740+IAPROC) !/TIMINGS CALL PRINT_MY_TIME("Before W3IORS") CALL W3IORS ( 'READ', NDS(6), SIG(NK), IMOD) !/TIMINGS CALL PRINT_MY_TIME("After W3IORS") !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 3a' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) !/DEBUGINIT WRITE(740+IAPROC,*) ' 2: min/max/sum(VA)=', minval(VA), maxval(VA), sum(VA) !/DEBUGINIT WRITE(740+IAPROC,*) ' 2: NSEAL=', NSEAL !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "After W3IORS call") !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 4.1' !/DEBUGINIT WRITE(740+IAPROC,*) ' sum(VA)=', sum(VA) !/DEBUGINIT FLUSH(740+IAPROC) FLCOLD = RSTYPE.LE.1 .OR. RSTYPE.EQ.4 IF ( IAPROC .EQ. NAPLOG ) THEN IF (RSTYPE.EQ.0) THEN WRITE (NDSO,930) 'cold start (idealized).' ELSE IF ( RSTYPE .EQ. 1 ) THEN WRITE (NDSO,930) 'cold start (wind).' ELSE IF ( RSTYPE .EQ. 4 ) THEN WRITE (NDSO,930) 'cold start (calm).' ELSE WRITE (NDSO,930) 'full restart.' END IF END IF !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 4.2' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3INIT, step 4.2") !/TIMINGS CALL PRINT_MY_TIME("After restart inits") ! ! 3.b Compare MAPSTA from grid and restart ! DO IX=1, NX DO IY=1, NY IF ( ABS(MAPSTA(IY,IX)).EQ.2 .OR. & ABS(MAPTST(IY,IX)).EQ.2 ) THEN MAPSTA(IY,IX) = SIGN ( MAPTST(IY,IX) , MAPSTA(IY,IX) ) END IF END DO END DO !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 3b' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 4.3' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3INIT, step 4.3") ! ! 3.b2 Set MAPSTA associated to PDLIB ! !/PDLIB IF (GTYPE .eq. UNGTYPE) THEN !/PDLIB CALL PDLIB_MAPSTA_INIT(IMOD) !/PDLIB END IF ! ! 3.c Initialization from wind fields ! FLIWND = RSTYPE.EQ.1 !/T IF ( FLIWND ) WRITE (NDST,9030) ! ! 3.d Initialization with calm conditions ! !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 5' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3INIT, step 5") IF ( RSTYPE .EQ. 4 ) THEN VA(:,:) = 0. !/T WRITE (NDST,9031) END IF !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 4' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! ! 3.e Prepare propagation scheme ! IF ( .NOT. FLCUR ) FLCK = .FALSE. !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT definition of FSREFR and FRFREQ' !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'FSTOTALIMP=', FSTOTALIMP !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'FSREFRACTION=', FSREFRACTION !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'FSFREQSHIFT=', FSFREQSHIFT !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'Before FLCTH=', FLCTH, 'FLCK=', FLCK !/PDLIB IF (FSTOTALIMP .and. FSREFRACTION) THEN !/PDLIB FLCTH = .FALSE. !/PDLIB END IF !/PDLIB IF (FSTOTALIMP .and. FSFREQSHIFT) THEN !/PDLIB FLCK = .FALSE. !/PDLIB END IF !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) ' After FLCTH=', FLCTH, 'FLCK=', FLCK ! ! 4. Set-up output times -------------------------------------------- * ! 4.a Unpack ODAT ! DO J=1, NOTYPE J0 = (J-1)*5 TONEXT(1,J) = ODAT(J0+1) TONEXT(2,J) = ODAT(J0+2) DTOUT ( J) = REAL ( ODAT(J0+3) ) TOLAST(1,J) = ODAT(J0+4) TOLAST(2,J) = ODAT(J0+5) END DO ! ! J=8, second stream of restart files J=8 J0 = (J-1)*5 IF(ODAT(J0+1) .NE. 0) THEN TONEXT(1,J) = ODAT(J0+1) TONEXT(2,J) = ODAT(J0+2) DTOUT ( J) = REAL ( ODAT(J0+3) ) TOLAST(1,J) = ODAT(J0+4) TOLAST(2,J) = ODAT(J0+5) FLOUT(8) = .TRUE. ELSE FLOUT(8) = .FALSE. END IF ! ! 4.b Check if output available ! FLOUT(1) = .FALSE. FLOGRD = FLGRD FLOGD = FLGD DO J=1, NOGRP DO K=1, NGRPP FLOUT(1) = FLOUT(1) .OR. FLOGRD(J,K) END DO END DO !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 6' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3INIT, step 6") ! FLOUT(7) = .FALSE. FLOGR2 = FLGR2 FLOG2 = FLG2 DO J=1, NOGRP DO K=1, NGRPP FLOUT(7) = FLOUT(7) .OR. FLOGR2(J,K) END DO END DO ! FLOUT(2) = NPT .GT. 0 ! FLOUT(3) = .TRUE. ! FLOUT(4) = .TRUE. ! FLOUT(5) = FLBPO IF ( FLBPO ) THEN CALL W3DMO5 ( IMOD, NDSE, NDST, 4 ) ELSE DTOUT(5) = 0. END IF ! IX0 = MAX ( 1, IPRT(1) ) IXN = MIN ( NX, IPRT(2) ) IXS = MAX ( 1, IPRT(3) ) IY0 = MAX ( 1, IPRT(4) ) IYN = MIN ( NY, IPRT(5) ) IYS = MAX ( 1, IPRT(6) ) FLFORM = PRTFRM FLOUT(6) = IX0.LE.IXN .AND. IY0.LE.IYN ! ! 4.c Get first time per output and overall. ! TOFRST(1) = -1 TOFRST(2) = 0 ! ! WRITE(*,*) 'We set NOTYPE=0 just for DEBUGGING' ! NOTYPE=0 ! ONLY FOR DEBUGGING PURPOSE !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 7' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3INIT, step 7") !/DEBUGINIT WRITE(*,*) 'Starting the NOTYPE loop, takes time' !/TIMINGS CALL PRINT_MY_TIME("Before NOTYPE loop") DO J=1, NOTYPE ! ! ... check time step ! DTOUT(J) = MAX ( 0. , DTOUT(J) ) FLOUT(J) = FLOUT(J) .AND. ( DTOUT(J) .GT. 0.5 ) ! ! ... get first time ! IF ( FLOUT(J) ) THEN TOUT = TONEXT(:,J) TLST = TOLAST(:,J) ! DO DTTST = DSEC21 ( TIME , TOUT ) IF ( ( J.NE.4 .AND. DTTST.LT.0. ) .OR. & ( J.EQ.4 .AND. DTTST.LE.0. ) ) THEN CALL TICK21 ( TOUT, DTOUT(J) ) ELSE EXIT END IF END DO ! ! ... reset first time ! TONEXT(:,J) = TOUT ! ! ... check last time ! DTTST = DSEC21 ( TOUT , TLST ) IF ( DTTST.LT.0.) FLOUT(J) = .FALSE. ! ! ... check overall first time ! IF ( FLOUT(J) ) THEN IF ( TOFRST(1).EQ.-1 ) THEN TOFRST = TOUT ELSE DTTST = DSEC21 ( TOUT , TOFRST ) IF ( DTTST.GT.0.) THEN TOFRST = TOUT END IF END IF END IF ! END IF ! END DO ! ! J=8, second stream of restart files ! J=8 ! ! ... check time step ! DTOUT(J) = MAX ( 0. , DTOUT(J) ) FLOUT(J) = FLOUT(J) .AND. ( DTOUT(J) .GT. 0.5 ) ! ! ... get first time ! IF ( FLOUT(J) ) THEN TOUT = TONEXT(:,J) TLST = TOLAST(:,J) ! DO DTTST = DSEC21 ( TIME , TOUT ) IF ( ( J.NE.4 .AND. DTTST.LT.0. ) .OR. & ( J.EQ.4 .AND. DTTST.LE.0. ) ) THEN CALL TICK21 ( TOUT, DTOUT(J) ) ELSE EXIT END IF END DO ! ! ... reset first time ! TONEXT(:,J) = TOUT ! ! ... check last time ! DTTST = DSEC21 ( TOUT , TLST ) IF ( DTTST.LT.0.) FLOUT(J) = .FALSE. ! ! ... check overall first time ! IF ( FLOUT(J) ) THEN IF ( TOFRST(1).EQ.-1 ) THEN TOFRST = TOUT ELSE DTTST = DSEC21 ( TOUT , TOFRST ) IF ( DTTST.GT.0.) THEN TOFRST = TOUT END IF END IF END IF ! END IF ! END J=8 ! ! !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 5' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) !/DEBUGINIT WRITE(*,*) 'Ending the NOTYPE loop, takes time' !/TIMINGS CALL PRINT_MY_TIME("After NOTYPE loop") !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 8' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3INIT, step 8.1") ! ! 4.d Preprocessing for point output. ! IF ( FLOUT(2) ) CALL W3IOPP ( NPT, XPT, YPT, PNAMES, IMOD ) ! !/T WRITE (NDST,9040) !/T DO J=1, 5 !/T WRITE (NDST,9041) TONEXT(1,J),TONEXT(2,J),DTOUT(J),FLOUT(J) !/T END DO !/T WRITE (NDST,9042) !/T WRITE (NDST,9043) TOFRST ! ! 5. Define wavenumber grid ----------------------------------------- * ! 5.a Calculate depth ! !/T ALLOCATE ( MAPOUT(NX,NY), XOUT(NX,NY) ) !/T XOUT = -1. ! MAPTST = MOD(MAPST2/2,2) MAPST2 = MAPST2 - 2*MAPTST !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'Before INIT_GET_JSEA_ISPROC call' !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'allocated(ISEA_TO_JSEA)=', allocated(ISEA_TO_JSEA) !/PDLIB!/DEBUGINIT WRITE(740+IAPROC,*) 'NAPROC=', NAPROC !/PDLIB!/DEBUGINIT FLUSH(740+IAPROC) ! !Li For multi-resolution SMC grid, these 1-NX and 1-NY nested loops !Li may miss the refined cells as they are not 1-1 corresponding to !Li the (Nx,NY) regular grid. The loop is now modified to run over !Li full NSEA points. JGLi24Jan2012 !Li DO IY=1, NY !Li DO IX=1, NX !Li ISEA = MAPFS(IY,IX) !/DEBUGSTP WRITE(740+IAPROC,*) 'Debugging the SETUP / WLV' DO ISEA=1, NSEA !/DEBUGSTP WRITE(740+IAPROC,*) 'ISEA/WLV/ZB=', ISEA, WLV(ISEA), ZB(ISEA) IX = MAPSF(ISEA,1) IY = MAPSF(ISEA,2) !/T MAPOUT(IX,IY) = MAPSTA(IY,IX) !Li IF ( ISEA .NE. 0) THEN WLVeff=WLV(ISEA) !/SETUP IF (DO_CHANGE_WLV) THEN !/SETUP WLVeff=WLVeff + ZETA_SETUP(ISEA) !/SETUP END IF DW(ISEA) = MAX ( 0. , WLVeff-ZB(ISEA) ) !/T XOUT(IX,IY) = DW(ISEA) IF ( WLVeff-ZB(ISEA) .LE.0. ) THEN MAPTST(IY,IX) = 1 MAPSTA(IY,IX) = -ABS(MAPSTA(IY,IX)) !!/DEBUGINIT WRITE(740+IAPROC,*) 'ISEA=', ISEA, ' JSEA=', JSEA !!/DEBUGINIT WRITE(740+IAPROC,*) 'NSEA=', NSEA, ' NSEAL=', NSEAL !!/DEBUGINIT WRITE(740+IAPROC,*) 'IAPROC=', IAPROC, ' ISPROC=', ISPROC !!/DEBUGINIT FLUSH(740+IAPROC) END IF !Li END IF END DO !Li END DO DO JSEA=1, NSEAL CALL INIT_GET_ISEA(ISEA, JSEA) WLVeff=WLV(ISEA) !/SETUP IF (DO_CHANGE_WLV) THEN !/SETUP WLVeff=WLVeff + ZETA_SETUP(ISEA) !/SETUP END IF DW(ISEA) = MAX ( 0. , WLVeff-ZB(ISEA) ) IF ( WLVeff-ZB(ISEA) .LE.0. ) THEN !!/DEBUGINIT WRITE(740+IAPROC,*) 'ISEA=', ISEA, ' JSEA=', JSEA !!/DEBUGINIT WRITE(740+IAPROC,*) 'NSEA=', NSEA, ' NSEAL=', NSEAL !!/DEBUGINIT WRITE(740+IAPROC,*) 'IAPROC=', IAPROC, ' ISPROC=', ISPROC !!/DEBUGINIT FLUSH(740+IAPROC) VA(:,JSEA) = 0. END IF END DO !/DEBUGSTP FLUSH(740+IAPROC) !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9' !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3INIT, step 8.2") ! !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.1' !/DEBUGINIT WRITE(740+IAPROC,*) ' allocated(MAPTST)=', allocated(MAPTST) !/DEBUGINIT WRITE(740+IAPROC,*) 'NY=', NY, ' NX=', NX !/DEBUGINIT FLUSH(740+IAPROC) MAPST2 = MAPST2 + 2*MAPTST !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.2' !/DEBUGINIT FLUSH(740+IAPROC) ! DEALLOCATE ( MAPTST ) !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.3' !/DEBUGINIT FLUSH(740+IAPROC) !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 6' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.4' !/DEBUGINIT FLUSH(740+IAPROC) !/T WRITE (NDST,9050) !/T NX0 = 1 !/T DO !/T NXN = MIN ( NX0+NXS-1 , NX ) !/T CALL PRTBLK (NDST, NX, NY, NX, XOUT, MAPOUT, 0, 0., & !/T NX0, NXN, 1, 1, NY, 1, 'Depth', 'm') !/T IF ( NXN .NE. NX ) THEN !/T NX0 = NX0 + NXS !/T ELSE !/T EXIT !/T END IF !/T END DO !/T DEALLOCATE ( MAPOUT, XOUT ) !/TIMINGS CALL PRINT_MY_TIME("Before section 5.b") ! ! 5.b Fill wavenumber and group velocity arrays. ! !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.5' !/DEBUGINIT FLUSH(740+IAPROC) !/NEC/!CDIR LOOPCNT=100000 DO IS=0, NSEA !/DEBUGINIT WRITE(740+IAPROC,*) 'IS=', IS !/DEBUGINIT FLUSH(740+IAPROC) IF (IS.GT.0) THEN DEPTH = MAX ( DMIN , DW(IS) ) ELSE DEPTH = DMIN END IF ! !/T1 WRITE (NDST,9051) IS, DEPTH ! !/NEC/!CDIR LOOPCNT=100000 DO IK=0, NK+1 ! ! Calculate wavenumbers and group velocities. CALL WAVNU1(SIG(IK),DEPTH,WN(IK,IS),CG(IK,IS)) ! !/T1 WRITE (NDST,9052) IK, TPI/SIG(IK), WN(IK,IS), CG(IK,IS) ! END DO END DO !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.6' !/DEBUGINIT FLUSH(740+IAPROC) ! ! Commented by FA with version 4.12 ! DO IK=1, NK ! CG(IK,0) = CG(IK,1) ! WN(IK,0) = WN(IK,1) ! END DO ! ! 6. Initialize arrays ---------------------------------------------- / ! Some initialized in W3IORS ! UA = 0. UD = 0. U10 = 0. U10D = 0. ! AS = UNDEF ! AS (0) = 0. DW (0) = 0. !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.7' !/DEBUGINIT FLUSH(740+IAPROC) ! ! 7. Write info to log file ----------------------------------------- / ! IF ( IAPROC .EQ. NAPLOG ) THEN ! WRITE (NDSO,970) GNAME IF ( FLLEV ) WRITE (NDSO,971) 'Prescribed' IF (.NOT. FLLEV ) WRITE (NDSO,971) 'No' IF ( FLCUR ) WRITE (NDSO,972) 'Prescribed' IF (.NOT. FLCUR ) WRITE (NDSO,972) 'No' IF ( FLWIND ) WRITE (NDSO,973) 'Prescribed' IF (.NOT. FLWIND) WRITE (NDSO,973) 'No' IF ( FLICE ) WRITE (NDSO,974) 'Prescribed' IF (.NOT. FLICE ) WRITE (NDSO,974) 'No' ! IF ( FLMDN ) WRITE (NDSO,9972) 'Prescribed' IF (.NOT. FLMDN ) WRITE (NDSO,9972) 'No' IF ( FLMTH ) WRITE (NDSO,9971) 'Prescribed' IF (.NOT. FLMTH ) WRITE (NDSO,9971) 'No' IF ( FLMVS ) WRITE (NDSO,9970) 'Prescribed' IF (.NOT. FLMVS ) WRITE (NDSO,9970) 'No' IF ( FLIC1 ) WRITE (NDSO,9973) 'Prescribed' IF (.NOT. FLIC1 ) WRITE (NDSO,9973) 'No' IF ( FLIC2 ) WRITE (NDSO,9974) 'Prescribed' IF (.NOT. FLIC2 ) WRITE (NDSO,9974) 'No' IF ( FLIC3 ) WRITE (NDSO,9975) 'Prescribed' IF (.NOT. FLIC3 ) WRITE (NDSO,9975) 'No' IF ( FLIC4 ) WRITE (NDSO,9976) 'Prescribed' IF (.NOT. FLIC4 ) WRITE (NDSO,9976) 'No' IF ( FLIC5 ) WRITE (NDSO,9977) 'Prescribed' IF (.NOT. FLIC5 ) WRITE (NDSO,9977) 'No' IF ( FLOUT(1) ) THEN WRITE (NDSO,975) DO J=1,NOGRP DO K=1,NGRPP IF ( FLOGRD(J,K) ) WRITE (NDSO,976) IDOUT(J,K) END DO END DO END IF ! IF ( FLOUT(7) ) THEN WRITE (NDSO,987) DO J=1,NOGRP DO K=1,NGRPP IF ( FLOGR2(J,K) ) WRITE (NDSO,976) IDOUT(J,K) END DO END DO END IF ! IF ( FLOUT(2) ) THEN WRITE (NDSO,977) NOPTS IF ( NOPTS .EQ. 0 ) THEN WRITE (NDSO,978) ELSE IF ( FLAGLL ) THEN WRITE (NDSO,979) ELSE WRITE (NDSO,985) END IF DO IP=1, NOPTS IF ( FLAGLL ) THEN WRITE (NDSO,980) IP, FACTOR*PTLOC(1,IP), & FACTOR*PTLOC(2,IP), PTNME(IP) ELSE WRITE (NDSO,986) IP, FACTOR*PTLOC(1,IP), & FACTOR*PTLOC(2,IP), PTNME(IP) END IF END DO END IF END IF ! CALL STME21 ( TIME , DTME21 ) WRITE (NDSO,981) DTME21 IF (FLLEV) THEN CALL STME21 ( TLEV , DTME21 ) WRITE (NDSO,982) DTME21 END IF IF (FLICE) THEN CALL STME21 ( TICE , DTME21 ) WRITE (NDSO,983) DTME21 END IF ! WRITE (NDSO,984) ! END IF !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.8' !/DEBUGINIT FLUSH(740+IAPROC) ! IF ( NOPTS .EQ. 0 ) FLOUT(2) = .FALSE. !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 7' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.9' !/DEBUGINIT FLUSH(740+IAPROC) ! ! Boundary set up for the directions ! !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3INIT, step 8.3") !!/PDLIB CALL VA_SETUP_IOBPD !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3INIT, step 8.4") !/DEBUGINIT WRITE(740+IAPROC,*) 'W3INIT, aft BLOCK_SOLVER_INIT, step 9.10' !/DEBUGINIT FLUSH(740+IAPROC) ! ! 8. Final MPI set up ----------------------------------------------- / ! !/MPI CALL W3MPII ( IMOD ) !/DEBUGINIT WRITE(740+IAPROC,*) 'After W3MPII' !/DEBUGINIT FLUSH(740+IAPROC) !/MPI CALL W3MPIO ( IMOD ) !/DEBUGINIT WRITE(740+IAPROC,*) 'After W3MPIO' !/DEBUGINIT FLUSH(740+IAPROC) !/MPI IF ( FLOUT(2) ) CALL W3MPIP ( IMOD ) !/DEBUGINIT WRITE(740+IAPROC,*) 'After W3MPIP' !/DEBUGINIT FLUSH(740+IAPROC) ! !/PDLIB!/DEBUGINIT CALL PRINT_WN_STATISTIC("W3INIT leaving") !/TIMINGS CALL PRINT_MY_TIME("Leaving W3INIT") RETURN ! ! Escape locations read errors : ! !/DIST 820 CONTINUE !/DIST IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,8020) NSEA, NAPROC !/DIST CALL EXTCDE ( 820 ) ! !/DIST 821 CONTINUE !/DIST IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,8021) NSPEC, NAPROC !/DIST CALL EXTCDE ( 821 ) ! !/DIST 829 CONTINUE !/DIST IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,8029) !/DIST CALL EXTCDE ( 829 ) ! 888 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,8000) IERR CALL EXTCDE ( 1 ) ! 889 CONTINUE ! === no process number filtering for test file !!! === WRITE (NDSE,8001) IERR CALL EXTCDE ( 2 ) ! ! Formats ! 900 FORMAT ( ' WAVEWATCH III log file ', & ' version ',A/ & ' ==================================', & '==================================='/ & 50X,'date : ',A10/50X,'time : ',A8) 920 FORMAT (/' Model definition file read.') 930 FORMAT ( ' Restart file read; ',A) ! 970 FORMAT (/' Grid name : ',A) 971 FORMAT (/' ',A,' water levels.') 972 FORMAT ( ' ',A,' curents.') 973 FORMAT ( ' ',A,' winds.') 974 FORMAT ( ' ',A,' ice fields.') 9972 FORMAT( ' ',A,' mud density.') 9971 FORMAT( ' ',A,' mud thickness.') 9970 FORMAT( ' ',A,' mud viscosity.') 9973 FORMAT( ' ',A,' ice parameter 1') 9974 FORMAT( ' ',A,' ice parameter 2') 9975 FORMAT( ' ',A,' ice parameter 3') 9976 FORMAT( ' ',A,' ice parameter 4') 9977 FORMAT( ' ',A,' ice parameter 5') ! 975 FORMAT (/' Gridded output fields : '/ & '--------------------------------------------------') 976 FORMAT ( ' ',A) ! 977 FORMAT (/' Point output requested for',I6,' points : '/ & '------------------------------------------') 978 FORMAT (/' Point output disabled') 979 FORMAT & (/' point | longitude | latitude | name '/ & ' --------|-------------|-------------|----------------') 985 FORMAT & (/' point | X | Y | name '/ & ' --------|-------------|-------------|----------------') 980 FORMAT ( 5X,I5,' |',2(F10.2,' |'),2X,A) 986 FORMAT ( 5X,I5,' |',2(F8.1,'E3 |'),2X,A) ! 981 FORMAT (/' Initial time : ',A) 982 FORMAT ( ' Water level time : ',A) 983 FORMAT ( ' Ice field time : ',A) ! 984 FORMAT (// & 37X,' | input | output |'/ & 37X,' |-------------------|---------------|'/ & 2X,' step | pass | date time |', & ' b w l c i i1 i5 d | g p t r b f c |'/ & 2X,'--------|------|---------------------|', & '-------------------|---------------|'/ & 2X,'--------+------+---------------------+', & '-------------------+---------------+') 987 FORMAT (/' Coupling output fields : '/ & '--------------------------------------------------') ! 8000 FORMAT (/' *** WAVEWATCH III ERROR IN W3INIT : '/ & ' ERROR IN OPENING LOG FILE'/ & ' IOSTAT =',I5/) 8001 FORMAT (/' *** WAVEWATCH III ERROR IN W3INIT : '/ & ' ERROR IN OPENING TEST FILE'/ & ' IOSTAT =',I5/) 8002 FORMAT (/' *** WAVEWATCH III WARNING IN W3INIT : '/ & ' SIGNIFICANT PART OF RESOURCES RESERVED FOR', & ' OUTPUT :',F6.1,'%'/) !/DIST 8020 FORMAT (/' *** WAVEWATCH III ERROR IN W3INIT : '/ & !/DIST ' NUMBER OF SEA POINTS LESS THAN NUMBER OF PROC.'/ & !/DIST ' NSEA, NAPROC =',2I8/) !/DIST 8021 FORMAT (/' *** WAVEWATCH III ERROR IN W3INIT : '/ & !/DIST ' NUMBER OF SPECTRAL POINTS LESS THAN NUMBER OF PROC.'/ & !/DIST ' NSPEC, NAPROC =',2I8/) !/DIST 8028 FORMAT (/' *** WAVEWATCH III WARNING IN W3INIT : '/ & !/DIST ' INCREASING TARGET IN MPP PROPAGATION MAP.'/ & !/DIST ' IMBALANCE BETWEEN OVERALL AND CFL TIME STEPS'/) !/DIST 8029 FORMAT (/' *** WAVEWATCH III ERROR IN W3INIT : '/ & !/DIST ' SOMETHING WRONG WITH MPP PROPAGATION MAP.'/ & !/DIST ' CALL HENDRIK !!!'/) ! !/T 9000 FORMAT ( 'TEST W3INIT: MOD. NR. AND FILE EXT.: ',I4,' [',A,']') !/T 9001 FORMAT ( ' NR. OF PROCESSORS : ',3I4/ & !/T ' ASSIGNED PROCESSORS ',9I4) !/T 9002 FORMAT ( ' DATA SET NUMBERS : ',4I4) !/T 9003 FORMAT ( ' LOG FILE : [',A,']'/ & !/T ' TEST FILE : [',A,']') ! !/T 9020 FORMAT (' TEST W3INIT : IP, NTTOT, NTTARG :') !/T 9021 FORMAT ( ' ',3I8) !/T 9025 FORMAT (' TEST W3INIT : MPP PROPAGATION MAP SPECTRAL COMP.') !/T 9026 FORMAT (4X,I4,2X,24I4) !/T 9027 FORMAT (10X,24I4) ! !/T 9030 FORMAT (' TEST W3INIT : INITIALIZATION USING WINDS, ', & !/T 'PERFORMED IN W3WAVE') !/T 9031 FORMAT (' TEST W3INIT : STARTING FROM CALM CONDITIONS') ! !/T 9040 FORMAT (' TEST W3INIT : OUTPUT DATA, FIRST TIME, STEP, FLAG') !/T 9041 FORMAT (' ',I9.8,I7.6,F8.1,3X,L1) !/T 9042 FORMAT (' TEST W3INIT : FIRST TIME :') !/T 9043 FORMAT (' ',I9.8,I7.6) ! !/T 9050 FORMAT (' TEST W3INIT : INITIAL DEPTHS') !/T1 9051 FORMAT (' TEST W3INIT : ISEA =',I6,' DEPTH =',F7.1, & !/T1 ' IK, T, K, CG :') !/T1 9052 FORMAT (' ',I3,F8.2,F8.4,F8.2) !/ !/ End of W3INIT ----------------------------------------------------- / !/ END SUBROUTINE W3INIT !/ ------------------------------------------------------------------- / SUBROUTINE W3MPII ( IMOD ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | !/ | Last update : 11-May-2007 | !/ +-----------------------------------+ !/ !/ 04-Jan-1999 : Distributed FORTRAN 77 version. ( version 1.18 ) !/ 13-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 ) !/ 28-Dec-2004 : Multiple grid version. ( version 3.06 ) !/ Taken out of W3WAVE. !/ 04-May-2005 : Change to MPI_COMM_WAVE. ( version 3.07 ) !/ 13-Jun-2006 : Splitting STORE in G/SSTORE. ( version 3.09 ) !/ 11-May-2007 : Adding NTPROC/NAPROC separation. ( version 3.11 ) !/ ! 1. Purpose : ! ! Perform initializations for MPI version of model. ! Data transpose only. ! ! 2. Method : ! ! Some derived data types are defined. All communiction in ! W3GATH, W3SCAT and W3WAVE are initialized so that all ! communication can be performed with single MPI_STARTALL, ! MPI_TESTALL and MPI_WAITALL calls. ! ! 3. Parameters : ! ! Parameter list ! ---------------------------------------------------------------- ! IMOD Int. I Model number. ! ---------------------------------------------------------------- ! ! 4. Subroutines used : ! ! Name Type Module Description ! ---------------------------------------------------------------- ! STRACE Subr. W3SERVMD Subroutine tracing. ! ! MPI_TYPE_VECTOR, MPI_TYPE_COMMIT ! Subr. mpif.h MPI derived data type routines. ! ! MPI_SEND_INIT, MPI_RECV_INIT ! Subr. mpif.h MPI persistent communication calls. ! ---------------------------------------------------------------- ! ! 5. Called by : ! ! Name Type Module Description ! ---------------------------------------------------------------- ! W3INIT Subr. W3INITMD Wave model initialization routine. ! ---------------------------------------------------------------- ! ! 6. Error messages : ! ! None. ! ! 7. Remarks : ! ! - Basic MPP set up partially performed in W3INIT. ! - Each processor has to be able to send out individual error ! messages in this routine ! ! - No testing on IMOD, since only called by W3INIT. ! - In version 3.09 STORE was split into a send and receive ! buffer, to avoid/reduce possible conflicts between the FORTRAN ! and MPI standards when a gather is posted in a given buffer ! right after a send is completed. ! ! 8. Structure : ! ! See source code. ! ! 9. Switches : ! ! !/SHRD Switch for shared / distributed memory architecture. ! !/DIST Id. ! !/MPI MPI communication calls. ! ! !/S Subroutine tracing, ! !/T Test output, general. ! !/MPIT Test output, MPI communications details. ! ! 10. Source code : ! !/ ------------------------------------------------------------------- / ! !/S USE W3SERVMD, ONLY: STRACE ! USE W3GDATMD, ONLY: NSEA USE W3ADATMD, ONLY: NSEALM USE W3GDATMD, ONLY: GTYPE, UNGTYPE USE CONSTANTS, ONLY: LPDLIB !/MPI USE W3GDATMD, ONLY: NSPEC !/MPI USE W3WDATMD, ONLY: VA !/MPI USE W3ADATMD, ONLY: MPI_COMM_WAVE, WW3_FIELD_VEC, & !/MPI WW3_SPEC_VEC, IAPPRO, WADATS, & !/MPI NRQSG1, IRQSG1, NRQSG2, IRQSG2, & !/MPI GSTORE, SSTORE, MPIBUF, BSTAT, & !/MPI BISPL, ISPLOC, IBFLOC, NSPLOC USE W3ODATMD, ONLY: NDST, NAPROC, IAPROC !/ IMPLICIT NONE ! !/MPI INCLUDE "mpif.h" !/ !/ ------------------------------------------------------------------- / !/ Parameter list !/ INTEGER, INTENT(IN) :: IMOD !/ !/ ------------------------------------------------------------------- / !/ Local parameters !/ INTEGER :: NXXXX !/MPI INTEGER :: IERR_MPI, ISP, IH, ITARG, & !/MPI IERR1, IERR2, IP !/S INTEGER, SAVE :: IENT = 0 !/ !/ ------------------------------------------------------------------- / !/ !/S CALL STRACE (IENT, 'W3MPII') ! ! 1. Set up derived data types -------------------------------------- / ! !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) NXXXX = NSEALM * NAPROC ! !/MPI CALL MPI_TYPE_VECTOR ( NSEALM, 1, NAPROC, MPI_REAL, & !/MPI WW3_FIELD_VEC, IERR_MPI ) !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) !/MPI CALL MPI_TYPE_VECTOR ( NSEALM, 1, NSPEC, MPI_REAL, & !/MPI WW3_SPEC_VEC, IERR_MPI ) !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) !/MPI CALL MPI_TYPE_COMMIT ( WW3_FIELD_VEC, IERR_MPI ) !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) !/MPI CALL MPI_TYPE_COMMIT ( WW3_SPEC_VEC, IERR_MPI ) !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) ! !/MPIT WRITE (NDST,9010) WW3_FIELD_VEC, WW3_SPEC_VEC !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) ! !/MPI IF( IAPROC .GT. NAPROC ) THEN !/MPI NSPLOC = 0 !/MPI NRQSG1 = 0 !/MPI NRQSG2 = 0 !/MPIT WRITE (NDST,9011) !/MPI RETURN !/MPI END IF !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) ! ! 2. Set up scatters and gathers for W3WAVE ------------------------- / ! ( persistent communication calls ) ! !/DIST IF ((LPDLIB .eqv. .FALSE.).or.(GTYPE .NE. UNGTYPE)) THEN !/MPI NSPLOC = 0 !/MPI DO ISP=1, NSPEC !/MPI IF ( IAPPRO(ISP) .EQ. IAPROC ) NSPLOC = NSPLOC + 1 !/MPI END DO !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) ! !/MPI NRQSG1 = NSPEC - NSPLOC !/MPI ALLOCATE ( WADATS(IMOD)%IRQSG1(MAX(1,NRQSG1),2) ) !/MPI IRQSG1 => WADATS(IMOD)%IRQSG1 !/MPI IH = 0 !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) ! !/MPIT WRITE (NDST,9021) !/DEBUGINIT WRITE(*,*) 'Before VA MPI_SEND/RECV_INIT inits' !/MPI DO ISP=1, NSPEC !/MPI IF ( IAPPRO(ISP) .NE. IAPROC ) THEN !/MPI ITARG = IAPPRO(ISP) - 1 !/MPI IH = IH + 1 !/MPI CALL MPI_SEND_INIT ( VA(ISP,1), 1, WW3_SPEC_VEC, & !/MPI ITARG, ISP, MPI_COMM_WAVE, IRQSG1(IH,1), IERR1 ) !/MPI CALL MPI_RECV_INIT ( VA(ISP,1), 1, WW3_SPEC_VEC, & !/MPI ITARG, ISP, MPI_COMM_WAVE, IRQSG1(IH,2), IERR2 ) !/MPIT WRITE (NDST,9022) IH, ISP, ITARG+1, & !/MPIT IRQSG1(IH,1), IERR1, IRQSG1(IH,2), IERR2 !/MPI END IF !/MPI END DO !/DEBUGINIT WRITE(*,*) 'After VA MPI_SEND/RECV_INIT inits' !/MPIT WRITE (NDST,9023) !/MPIT WRITE (NDST,9020) NRQSG1 !/DEBUGINIT WRITE(740+IAPROC,*) 'W3MPII, step 1' !/DEBUGINIT FLUSH(740+IAPROC) ! ! 3. Set up scatters and gathers for W3SCAT and W3GATH -------------- / ! Also set up buffering of data. ! !/MPI NRQSG2 = MAX( 1 , NAPROC-1 ) !/MPI ALLOCATE ( WADATS(IMOD)%IRQSG2(NRQSG2*NSPLOC,2), & !/MPI WADATS(IMOD)%GSTORE(NAPROC*NSEALM,MPIBUF), & !/MPI WADATS(IMOD)%SSTORE(NAPROC*NSEALM,MPIBUF) ) !/MPI NRQSG2 = NAPROC - 1 ! !/MPI IRQSG2 => WADATS(IMOD)%IRQSG2 !/MPI GSTORE => WADATS(IMOD)%GSTORE !/MPI SSTORE => WADATS(IMOD)%SSTORE ! !/MPI IH = 0 !/MPI ISPLOC = 0 !/MPI IBFLOC = 0 !/MPI WADATS(IMOD)%GSTORE = 0. !/MPI WADATS(IMOD)%SSTORE = 0. ! ! 3.a Loop over local spectral components ! !/MPIT WRITE (NDST,9031) ! !/MPI DO ISP=1, NSPEC !/MPI IF ( IAPPRO(ISP) .EQ. IAPROC ) THEN ! !/MPI ISPLOC = ISPLOC + 1 !/MPI IBFLOC = IBFLOC + 1 !/MPI IF ( IBFLOC .GT. MPIBUF ) IBFLOC = 1 ! ! 3.b Loop over non-local processes ! !/MPI DO IP=1, NAPROC !/MPI IF ( IP .NE. IAPROC ) THEN ! !/MPI ITARG = IP - 1 !/MPI IH = IH + 1 ! !/MPI CALL MPI_RECV_INIT & !/MPI ( WADATS(IMOD)%GSTORE(IP,IBFLOC), 1, & !/MPI WW3_FIELD_VEC, ITARG, ISP, MPI_COMM_WAVE, & !/MPI IRQSG2(IH,1), IERR2 ) !/MPI CALL MPI_SEND_INIT & !/MPI ( WADATS(IMOD)%SSTORE(IP,IBFLOC), 1, & !/MPI WW3_FIELD_VEC, ITARG, ISP, MPI_COMM_WAVE, & !/MPI IRQSG2(IH,2), IERR2 ) !/MPIT WRITE (NDST,9032) IH, ISP, ITARG+1, IBFLOC, & !/MPIT IRQSG2(IH,1), IERR1, IRQSG2(IH,2), IERR2 ! ! ... End of loops ! !/MPI END IF !/MPI END DO ! !/MPI END IF !/MPI END DO ! !/MPIT WRITE (NDST,9033) !/MPIT WRITE (NDST,9030) NSPLOC, NRQSG2, IH ! ! 4. Initialize buffer management ----------------------------------- / ! !/MPI BSTAT = 0 !/MPI BISPL = 0 !/MPI ISPLOC = 0 !/MPI IBFLOC = 0 ! !/DIST END IF RETURN ! ! Format statements ! !/MPIT 9010 FORMAT ( ' TEST W3MPII: DATA TYPES DEFINED'/ & !/MPIT ' WW3_FIELD_VEC : ',I10/ & !/MPIT ' WW3_SPEC_VEC : ',I10) !/MPIT 9011 FORMAT ( ' TEST W3MPII: NO COMPUTATIONS ON THIS NODE') ! !/MPIT 9020 FORMAT ( ' TEST W3MPII: W3WAVE COMM. SET UP FINISHED'/ & !/MPIT ' NRQSG1 : ',I10) !/MPIT 9021 FORMAT (/' TEST W3MPII: COMMUNICATION CALLS FOR W3WAVE '/ & !/MPIT ' +------+------+------+--------------+--------------+'/ & !/MPIT ' | IH | ISP | TARG | SCATTER | GATHER |'/ & !/MPIT ' | | | | handle err | handle err |'/ & !/MPIT ' +------+------+------+--------------+--------------+') !/MPIT 9022 FORMAT ( ' |',3(I5,' |'),2(I9,I4,' |')) !/MPIT 9023 FORMAT ( & !/MPIT ' +------+------+------+--------------+--------------+'/) ! !/MPIT 9030 FORMAT ( ' TEST W3MPII: GATH/SCAT COMM. SET UP FINISHED'/ & !/MPIT ' NSPLOC : ',I10/ & !/MPIT ' NRQSG2 : ',I10/ & !/MPIT ' TOTAL REQ. : ',I10/) !/MPIT 9031 FORMAT (/' TEST W3MPII: COMM. CALLS FOR W3GATH/W3SCAT '/ & !/MPIT ' +------+------+------+------+--------------+', & !/MPIT '--------------+'/ & !/MPIT ' | IH | ISP | TARG | IBFR | GATHER |', & !/MPIT ' SCATTER |'/ & !/MPIT ' | | | | | handle err |', & !/MPIT ' handle err |'/ & !/MPIT ' +------+------+------+------+--------------+', & !/MPIT '--------------+') !/MPIT 9032 FORMAT ( ' |',4(I5,' |'),2(I9,I4,' |')) !/MPIT 9033 FORMAT ( ' +------+------+------+------+--------------+', & !/MPIT '--------------+'/) !/ !/ End of W3MPII ----------------------------------------------------- / !/ END SUBROUTINE W3MPII !/ ------------------------------------------------------------------- / SUBROUTINE W3MPIO ( IMOD ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | !/ | Last update : 11-Nov-2015 | !/ +-----------------------------------+ !/ !/ 17-Mar-1999 : Distributed FORTRAN 77 version. ( version 1.18 ) !/ 11-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 ) !/ 20-Aug-2003 : Output server options added. ( version 3.04 ) !/ 28-Dec-2004 : Multiple grid version. ( version 3.06 ) !/ Taken out of W3WAVE. !/ 03-Jan-2005 : Add US2x to MPI communication. ( version 3.06 ) !/ 04-May-2005 : Change to MPI_COMM_WAVE. ( version 3.07 ) !/ 21-Jul-2005 : Add output fields. ( version 3.07 ) !/ 04-Jul-2006 : Consolidate stress arrays. ( version 3.09 ) !/ 02-Aug-2006 : W3MPIP split off. ( version 3.10 ) !/ 02-Apr-2007 : Add partitioned field data. ( version 3.11 ) !/ Add user-defined field data. !/ 17-May-2007 : Adding NTPROC/NAPROC separation. ( version 3.11 ) !/ 21-Jun-2007 : Dedicated output processes. ( version 3.11 ) !/ 25-Dec-2012 : Modify field output MPI for new ( version 4.11 ) !/ structure and smaller memory footprint. !/ 02-Jul-2013 : Bug fix MPI_FLOAT -> MPI_REAL. ( version 4.11 ) !/ 11-Nov-2015 : Added ICEF ( version 5.08 ) !/ ! 1. Purpose : ! ! Prepare MPI persistent communication needed for WAVEWATCH I/O ! routines. ! ! 2. Method : ! ! Create handles as needed. ! ! 3. Parameters : ! ! Parameter list ! ---------------------------------------------------------------- ! IMOD Int. I Model number. ! ---------------------------------------------------------------- ! ! 4. Subroutines used : ! ! Name Type Module Description ! ---------------------------------------------------------------- ! W3XDMA Subr. W3ADATMD Dimension expanded output arrays. ! W3SETA Subr. " Set pointers for output arrays ! STRACE Subr. W3SERVMD Subroutine tracing. ! ! MPI_SEND_INIT, MPI_RECV_INIT ! Subr. mpif.h MPI persistent communication calls. ! ---------------------------------------------------------------- ! ! 5. Called by : ! ! Name Type Module Description ! ---------------------------------------------------------------- ! W3INIT Subr. W3INITMD Wave model initialization routine. ! ---------------------------------------------------------------- ! ! 6. Error messages : ! ! 7. Remarks : ! ! - The communication as set up in W3MPII uses tags with number ! ranging from 1 through NSPEC. New and unique tags for IO ! related communication are assigned here dynamically. ! - No testing on IMOD, since only called by W3INIT. ! ! 8. Structure : ! ! See source code. ! ! 9. Switches : ! ! !/MPI MPI communication calls. ! ! !/S Enable subroutine tracing. ! !/MPIT Enable test output. ! ! 10. Source code : ! !/ ------------------------------------------------------------------- / ! !/MPI USE W3ADATMD, ONLY: W3XDMA, W3SETA, W3XETA USE W3SERVMD, ONLY: EXTCDE !/S USE W3SERVMD, ONLY: STRACE !/ USE W3GDATMD, ONLY: NSEA USE W3ADATMD, ONLY: NSEALM !/MPI USE W3GDATMD, ONLY: NX, NSPEC, MAPFS, E3DF, P2MSF, US3DF, USSPF !/MPI USE W3WDATMD, ONLY: VA, UST, USTDIR, ASF, FPIS, ICEF !/MPI USE W3ADATMD, ONLY: MPI_COMM_WAVE, WW3_FIELD_VEC !/MPI USE W3ADATMD, ONLY: HS, WLM, T02 !/MPI USE W3ADATMD, ONLY: T0M1, THM, THS, FP0, THP0, FP1, THP1, & !/MPI DTDYN, FCUT, SPPNT, ABA, ABD, UBA, UBD,& !/MPI SXX, SYY, SXY, USERO, PHS, PTP, PLP, & !/MPI PDIR, PSI, PWS, PWST, PNR, PHIAW, PHIOC,& !/MPI TUSX, TUSY, TAUWIX, TAUWIY, TAUOX, & !/MPI TAUOY, USSX, USSY, MSSX, MSSY, MSSD, & !/MPI MSCX, MSCY, MSCD, PRMS, TPMS, CHARN, & !/MPI TWS, TAUWNX, TAUWNY, BHD, CGE, & !/MPI CFLXYMAX, CFLTHMAX, CFLKMAX, WHITECAP, & !/MPI BEDFORMS, PHIBBL, TAUBBL, T01, & !/MPI P2SMS, US3D, EF, TH1M, STH1M, TH2M, & !/MPI STH2M, HSIG, PHICE, TAUICE, USSP, & !/MPI STMAXE, STMAXD, HMAXE, HCMAXE, HMAXD, & !/MPI HCMAXD, QP, PTHP0, PQP, PPE, PGW, PSW, & !/MPI PTM1, PT1, PT2, PEP, WBT !/MPI USE W3GDATMD, ONLY: NK !/MPI USE W3ODATMD, ONLY: NDST, IAPROC, NAPROC, NTPROC, FLOUT, & !/MPI NAPFLD, NAPPNT, NAPRST, NAPBPT, NAPTRK,& !/MPI NOGRP, NGRPP, NOGE !/MPI USE W3ODATMD, ONLY: OUTPTS, NRQGO, NRQGO2, IRQGO, IRQGO2, & !/MPI FLOGRD, NRQPO, NRQPO2, IRQPO1, IRQPO2, & !/MPI NOPTS, IPTINT, NRQRS, IRQRS, NBLKRS, & !/MPI RSBLKS, IRQRSS, VAAUX, NRQBP, NRQBP2, & !/MPI IRQBP1, IRQBP2, NFBPO, NBO2, ISBPO, & !/MPI ABPOS, NRQTR, IRQTR, IT0PNT, IT0TRK, & !/MPI IT0PRT, NOSWLL, NOEXTR, NDSE, IOSTYP, & !/MPI FLOGR2 !/MPI USE W3PARALL, ONLY : INIT_GET_JSEA_ISPROC USE W3GDATMD, ONLY: GTYPE, UNGTYPE USE CONSTANTS, ONLY: LPDLIB !/ IMPLICIT NONE ! !/MPI INCLUDE "mpif.h" !/ !/ ------------------------------------------------------------------- / !/ Parameter list !/ INTEGER, INTENT(IN) :: IMOD !/ !/ ------------------------------------------------------------------- / !/ Local parameters !/ !/MPI INTEGER :: IK, IFJ !/MPI INTEGER :: IH, IT0, IROOT, IT, IERR, I0, & !/MPI IFROM, IX(4), IY(4), IS(4), & !/MPI IP(4), I, J, JSEA, ITARG, IB, & !/MPI JSEA0, JSEAN, NSEAB, IBOFF, & !/MPI ISEA, ISPROC, K, NRQMAX !/S INTEGER, SAVE :: IENT !/MPI LOGICAL :: FLGRDALL(NOGRP,NGRPP) !/MPIT CHARACTER(LEN=5) :: STRING !/ !/ ------------------------------------------------------------------- / !/ !/S CALL STRACE (IENT, 'W3MPIO') ! ! 1. Set-up for W3IOGO ---------------------------------------------- / ! !/MPI DO J=1, NOGRP !/MPI DO K=1, NGRPP !/MPI FLGRDALL (J,K) = (FLOGRD(J,K) .OR. FLOGR2(J,K)) !/MPI END DO !/MPI END DO ! !/MPI NRQGO = 0 !/MPI NRQGO2 = 0 !/MPI IT0 = NSPEC !/MPI IROOT = NAPFLD - 1 ! ! !/MPI IF ((FLOUT(1) .OR. FLOUT(7)).and.(.not. LPDLIB .or. & !/MPI (GTYPE .ne. UNGTYPE).or. .TRUE.)) THEN ! ! NRQMAX is the maximum number of fields, it is the sum of the ! sizes of scalar fields (Hs) + 2-component vectors (CUR) + 3-comp ... ! !/MPI NRQMAX = 0 + 12 + 0 + 2+(NOGE(4)-2)*(NOSWLL+1) + 10+4 + & !/MPI 7+6 + 5+5 + 2+2 + 5+0 + NOEXTR !/MPI DO IFJ=1,5 !/MPI IF ( FLGRDALL( 3,IFJ)) NRQMAX = NRQMAX + & !/MPI E3DF(3,IFJ) - E3DF(2,IFJ) + 1 !/MPI END DO !/MPI IF ( FLGRDALL( 6,9)) NRQMAX = NRQMAX + & !/MPI P2MSF(3) - P2MSF(2) + 1 !/MPI IF ( FLGRDALL( 6, 8) ) NRQMAX = NRQMAX + 2*NK !/MPI IF ( FLGRDALL( 6,12) ) NRQMAX = NRQMAX + 2*NK ! !/MPI IF ( NRQMAX .GT. 0 ) THEN !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT1%IRQGO(NRQMAX) ) !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT1%IRQGO2(NRQMAX*NAPROC) ) !/MPI END IF !/MPI IRQGO => OUTPTS(IMOD)%OUT1%IRQGO !/MPI IRQGO2 => OUTPTS(IMOD)%OUT1%IRQGO2 ! ! 1.a Sends of fields ! !/MPI IH = 0 ! !/MPI IF ( IAPROC .LE. NAPROC ) THEN !/MPI IT = IT0 !/MPIT WRITE (NDST,9010) '(SEND)' ! !/MPI IF ( FLGRDALL( 1, 9) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (ICEF (IAPROC), 1, WW3_FIELD_VEC, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 1/09', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (HS (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/01', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (WLM (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/02', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (T02 (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/03', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (T0M1 (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/04', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (T01 (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/05', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 6) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (FP0 (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/06', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 7) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (THM (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/07', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 8) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (THS (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/09', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 9) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (THP0 (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/09', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 10) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (HSIG (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/10', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 11) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (STMAXE (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/11', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 12) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (STMAXD (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/12', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 13) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (HMAXE (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/13', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 14) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (HCMAXE (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/14', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 15) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (HMAXD (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/15', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 16) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (HCMAXD (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/16', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 17) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (WBT (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 2/17', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 1) ) THEN !/MPI DO IK=E3DF(2,1),E3DF(3,1) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (EF(1,IK),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, 'EF', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 2) ) THEN !/MPI DO IK=E3DF(2,2),E3DF(3,2) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TH1M(1,IK),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, 'TH1M', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 3) ) THEN !/MPI DO IK=E3DF(2,3),E3DF(3,3) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (STH1M(1,IK),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, 'STH1M', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 4) ) THEN !/MPI DO IK=E3DF(2,4),E3DF(3,4) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TH2M(1,IK),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, 'TH2M', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 5) ) THEN !/MPI DO IK=E3DF(2,5),E3DF(3,5) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (STH2M(1,IK),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, 'STH2M', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 1) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PHS(1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/01', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 2) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PTP(1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/02', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 3) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PLP(1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/03', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 4) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PDIR(1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/04', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 5) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PSI(1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/05', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 6) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PWS(1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/06', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 7) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PTHP0(1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/07', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 8) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PQP (1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/08', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 9) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PPE (1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/09', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,10) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PGW (1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/10', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,11) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PSW (1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/11', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,12) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PTM1(1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/12', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! ! !/MPI IF ( FLGRDALL( 4,13) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PT1 (1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/13', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,14) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PT2 (1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/14', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,15) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PEP (1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/15', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,16) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PWST (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/16', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,17) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PNR (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 4/17', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (UST (IAPROC), 1, WW3_FIELD_VEC, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQGO(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/01', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (USTDIR(IAPROC), 1, WW3_FIELD_VEC, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQGO(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/01', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (ASF (IAPROC), 1, WW3_FIELD_VEC, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQGO(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/01', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (CHARN(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/02', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (CGE (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/03', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PHIAW(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/04', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUWIX(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/05', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUWIY(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/05', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 6) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUWNX(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/06', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUWNY(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/06', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 7) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (WHITECAP(1,1),NSEALM , MPI_REAL, IROOT,& !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/07', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 8) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (WHITECAP(1,2),NSEALM , MPI_REAL, IROOT,& !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/08', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 9) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (WHITECAP(1,3),NSEALM , MPI_REAL, IROOT,& !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/09', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5,10) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (WHITECAP(1,4),NSEALM , MPI_REAL, IROOT,& !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/10', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 11) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TWS(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 5/11', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (SXX (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/01', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (SYY (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/01', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (SXY (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/01', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUOX (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/02', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUOY (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/02', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (BHD(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/03', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PHIOC (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/04', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TUSX (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/05', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TUSY (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/05', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 6) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (USSX (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/06', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (USSY (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/06', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 7) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PRMS (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/07', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TPMS (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/07', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 8) ) THEN !/MPI DO IK=1,2*NK !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (US3D(1,IK),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, 'US3D ', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 9) ) THEN !/MPI DO K=P2MSF(2),P2MSF(3) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (P2SMS(1,K),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, 'P2SMS', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 6,10) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUICE (1,1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/10', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUICE (1,2),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/10', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6,11) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PHICE (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 6/11', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 12) ) THEN !/MPI DO IK=1,2*NK !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (USSP(1,IK),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, 'USSP ', IROOT, IT, IRQGO(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (ABA (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/01', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (ABD (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/01', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (UBA (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/02', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (UBD (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/02', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (BEDFORMS(1,1),NSEALM , MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/03', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (BEDFORMS(1,2),NSEALM , MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/03', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (BEDFORMS(1,3),NSEALM , MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/03', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (PHIBBL(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/04', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUBBL(1,1),NSEALM , MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/05', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (TAUBBL(1,2),NSEALM , MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 7/05', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (MSSX (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 8/01', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (MSSY (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 8/01', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (MSCX (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 8/02', IROOT, IT, IRQGO(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (MSCY (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 8/02', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (MSSD (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 8/03', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (MSCD (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 8/04', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (QP (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 8/05', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (DTDYN(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 9/01', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (FCUT (1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 9/02', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (CFLXYMAX(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 9/03', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (CFLTHMAX(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 9/04', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (CFLKMAX(1),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (NDST,9011) IH, ' 9/05', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! !/MPI DO I=1, NOEXTR !/MPI IF ( FLGRDALL(10, I) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (USERO(1,I),NSEALM , MPI_REAL, IROOT, & !/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) !/MPIT WRITE (STRING,'(A3,I2.2)') '10/', I !/MPIT WRITE (NDST,9011) IH, STRING, IROOT, IT, IRQGO(IH), IERR !/MPI END IF !/MPI END DO ! !/MPI NRQGO = IH !/MPIT WRITE (NDST,9012) !/MPIT WRITE (NDST,9013) NRQGO, NRQMAX ! !/MPI END IF ! !/MPI IF ( NRQGO .GT. NRQMAX ) THEN !/MPI WRITE (NDSE,1010) NRQGO, NRQMAX !/MPI CALL EXTCDE (10) !/MPI END IF ! !/MPI IF ( IAPROC .EQ. NAPFLD ) THEN ! ! 1.b Setting up expanded arrays ! !/MPI CALL W3XDMA ( IMOD, NDSE, NDST, FLGRDALL ) ! ! 1.c Receives of fields ! !/MPI CALL W3XETA ( IMOD, NDSE, NDST ) !/MPIT WRITE (NDST,9010) '(RECV)' ! !/MPI IH = 0 ! !/MPI DO I0=1, NAPROC !/MPI IT = IT0 !/MPI IFROM = I0 - 1 ! !/MPI IF ( FLGRDALL( 1, 9) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (ICEF (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 1/09', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (HS (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/01', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (WLM (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/02', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (T02 (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/03', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (T0M1 (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/04', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (T01(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/05', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 6) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (FP0 (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/06', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 7) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (THM (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/07', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 8) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (THS (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/08', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 9) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (THP0 (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/09', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 10) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (HSIG (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/10', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 11) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (STMAXE (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/11', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 12) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (STMAXD(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/12', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 13) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (HMAXE (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/13', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 14) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (HCMAXE(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/14', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 15) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (HMAXD (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/15', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 16) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (HCMAXD(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/16', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 2, 17) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (WBT(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 2/17', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 1) ) THEN !/MPI DO IK=E3DF(2,1),E3DF(3,1) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (EF(I0,IK),1,WW3_FIELD_VEC, IFROM, IT,& !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, 'EF', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 2) ) THEN !/MPI DO IK=E3DF(2,2),E3DF(3,2) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TH1M(I0,IK),1,WW3_FIELD_VEC, IFROM, IT,& !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, 'TH1M', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 3) ) THEN !/MPI DO IK=E3DF(2,3),E3DF(3,3) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (STH1M(I0,IK),1,WW3_FIELD_VEC, IFROM, IT,& !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, 'STH1M', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 4) ) THEN !/MPI DO IK=E3DF(2,4),E3DF(3,4) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TH2M(I0,IK),1,WW3_FIELD_VEC, IFROM, IT,& !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, 'TH2M', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 3, 5) ) THEN !/MPI DO IK=E3DF(2,5),E3DF(3,5) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (STH2M(I0,IK),1,WW3_FIELD_VEC, IFROM, IT,& !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, 'STH2M', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 1) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PHS(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/01', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 2) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PTP(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/02', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 3) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PLP(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/03', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 4) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PDIR(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/04', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 5) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PSI(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/05', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 6) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PWS(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/06', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 7) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PTHP0(I0,K),1,WW3_FIELD_VEC, IFROM, IT,& !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/07', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 8) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PQP(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/08', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4, 9) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PPE(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/09', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,10) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PGW(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/10', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,11) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PSW(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/11', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,12) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PTM1(I0,K),1,WW3_FIELD_VEC, IFROM, IT,& !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/12', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,13) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PT1(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/13', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,14) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PT2(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/14', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,15) ) THEN !/MPI DO K=0, NOSWLL !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PEP(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/15', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,16) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PWST (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/16', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 4,17) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PNR (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 4/17', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (UST (I0), 1, WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/01', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (USTDIR(I0), 1, WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/01', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (ASF (I0), 1, WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/01', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (CHARN(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/02', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (CGE (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/03', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PHIAW(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/04', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUWIX(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/05', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUWIY(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/05', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 6) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUWNX(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/06', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUWNY(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/06', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 7) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (WHITECAP(I0,1),1,WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/07', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 8) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (WHITECAP(I0,2),1,WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/08', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5, 9) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (WHITECAP(I0,3),1,WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/09', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5,10) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (WHITECAP(I0,4),1,WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/10', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 5,11) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TWS(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 5/11', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (SXX (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/01', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (SYY (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/01', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (SXY (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/01', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUOX (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/02', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUOY (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/02', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (BHD(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/03', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PHIOC (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/04', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TUSX (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/05', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TUSY (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/05', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 6) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (USSX (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/06', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (USSY (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/06', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 7) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PRMS (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/07', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TPMS (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/07', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 8) ) THEN !/MPI DO IK=1,2*NK !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (US3D(I0,IK),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, 'US3D ', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 9) ) THEN !/MPI DO K=P2MSF(2),P2MSF(3) !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (P2SMS(I0,K),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, 'P3SMS', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 6,10) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUICE (I0,1),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/10', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUICE (I0,2),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/10', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6,11) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PHICE (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 6/11', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 6, 12) ) THEN !/MPI DO IK=1,2*NK !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (USSP(I0,IK),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, 'USSP ', IFROM, IT, IRQGO2(IH), IERR !/MPI END DO !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (ABA (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/01', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (ABD (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/01', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (UBA (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/02', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (UBD (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/02', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (BEDFORMS(I0,1),1,WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/03', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (BEDFORMS(I0,2),1,WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/03', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (BEDFORMS(I0,3),1,WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/03', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (PHIBBL(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/04', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 7, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUBBL(I0,1),1,WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/05', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (TAUBBL(I0,2),1,WW3_FIELD_VEC, IFROM, & !/MPI IT, MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 7/05', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (MSSX (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 8/01', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (MSSY (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 8/01', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (MSCX (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 8/02', IFROM, IT, IRQGO2(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (MSCY (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 8/02', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (MSSD (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 8/03', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (MSCD (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 8/04', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 8, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (QP (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 8/05', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (DTDYN(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 9/01', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 2) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (FCUT (I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 9/02', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 3) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (CFLXYMAX(I0),1,WW3_FIELD_VEC, IFROM, IT,& !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 9/03', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 4) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (CFLTHMAX(I0),1,WW3_FIELD_VEC, IFROM, IT,& !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 9/04', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI IF ( FLGRDALL( 9, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (CFLKMAX(I0),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH, ' 9/05', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! !/MPI DO I=1, NOEXTR !/MPI !WRITE(740+IAPROC,*) 'SECOND : I=', I, ' / ', NOEXTR, ' val=', FLGRDALL(10, I) !/MPI IF ( FLGRDALL(10, I) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (USERO(I0,I),1,WW3_FIELD_VEC, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) !/MPIT WRITE (STRING,'(A3,I2.2)') '10/', I !/MPIT WRITE (NDST,9011) IH, STRING, IFROM, IT, IRQGO2(IH), IERR !/MPI END IF !/MPI END DO ! !/MPI END DO ! !/MPI NRQGO2 = IH !/MPIT WRITE (NDST,9012) !/MPIT WRITE (NDST,9014) NRQGO2, NRQMAX*NAPROC ! !/MPI CALL W3SETA ( IMOD, NDSE, NDST ) ! !/MPI END IF ! !/MPI IF ( NRQGO2 .GT. NRQMAX*NAPROC ) THEN !/MPI WRITE (NDSE,1011) NRQGO2, NRQMAX*NAPROC !/MPI CALL EXTCDE (11) !/MPI END IF ! !/MPI END IF ! ! 2. Set-up for W3IORS ---------------------------------------------- / ! 2.a General preparations ! !/MPI NRQRS = 0 !/MPI IH = 0 !/MPI IROOT = NAPRST - 1 ! !/MPI IF ( FLOUT(4) .OR. FLOUT(8) ) THEN !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRS(3*NAPROC) ) !/MPI IRQRS => OUTPTS(IMOD)%OUT4%IRQRS ! ! 2.b Fields at end of file (allways) ! !/MPIT WRITE (NDST,9020) ! !/MPI IF ( IAPROC.NE.NAPRST .AND. IAPROC.LE.NAPROC ) THEN ! !/MPI IH = IH + 1 !/MPI IT = IT0 + 1 !/MPI CALL MPI_SEND_INIT (UST (IAPROC), 1, WW3_FIELD_VEC, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'S U*', IROOT, IT, IRQRS(IH), IERR ! !/MPI IH = IH + 1 !/MPI IT = IT0 + 2 !/MPI CALL MPI_SEND_INIT (USTDIR(IAPROC), 1, WW3_FIELD_VEC, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'S UD', IROOT, IT, IRQRS(IH), IERR ! !/MPI IH = IH + 1 !/MPI IT = IT0 + 3 !/MPI CALL MPI_SEND_INIT (FPIS(IAPROC), 1, WW3_FIELD_VEC, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'S FP', IROOT, IT, IRQRS(IH), IERR ! !/MPI ELSE IF ( IAPROC .EQ. NAPRST ) THEN !/MPI DO I0=1, NAPROC !/MPI IFROM = I0 - 1 !/MPI IF ( I0 .NE. IAPROC ) THEN ! !/MPI IH = IH + 1 !/MPI IT = IT0 + 1 !/MPI CALL MPI_RECV_INIT (UST (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R U*', IFROM, IT, IRQRS(IH), IERR ! !/MPI IH = IH + 1 !/MPI IT = IT0 + 2 !/MPI CALL MPI_RECV_INIT (USTDIR(I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R UD', IFROM, IT, IRQRS(IH), IERR ! !/MPI IH = IH + 1 !/MPI IT = IT0 + 3 !/MPI CALL MPI_RECV_INIT (FPIS(I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R FP', IFROM, IT, IRQRS(IH), IERR ! !/MPI END IF ! !/MPI END DO !/MPI END IF ! !/MPI NRQRS = IH !/MPI IT0 = IT0 + 3 ! !/MPIT WRITE (NDST,9022) !/MPIT WRITE (NDST,9023) NRQRS ! ! 2.c Data server mode ! !/MPI IF ( IOSTYP .GT. 0 ) THEN ! !/MPI NBLKRS = 10 !/MPI RSBLKS = MAX ( 5 , NSEALM/NBLKRS ) !/MPI IF ( NBLKRS*RSBLKS .LT. NSEALM ) RSBLKS = RSBLKS + 1 !/MPI NBLKRS = 1 + (NSEALM-1)/RSBLKS ! !/MPIT WRITE (NDST,9025) RSBLKS, NBLKRS !/MPI IH = 0 ! !/MPI IF ((.NOT. LPDLIB).OR.(GTYPE .NE. UNGTYPE)) THEN !/MPI IF ( IAPROC .NE. NAPRST ) THEN ! !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRSS(NBLKRS) ) !/MPI IRQRSS => OUTPTS(IMOD)%OUT4%IRQRSS ! !/MPI DO IB=1, NBLKRS !/MPI IH = IH + 1 !/MPI IT = IT0 + 3 + IB !/MPI JSEA0 = 1 + (IB-1)*RSBLKS !/MPI JSEAN = MIN ( NSEALM , IB*RSBLKS ) !/MPI NSEAB = 1 + JSEAN - JSEA0 !/MPI CALL MPI_SEND_INIT (VA(1,JSEA0), NSPEC*NSEAB,& !/MPI MPI_REAL, IROOT, IT, MPI_COMM_WAVE, & !/MPI IRQRSS(IH), IERR ) !/MPIT WRITE (NDST,9026) IH, 'S', IB, IROOT, IT, & !/MPIT IRQRSS(IH), IERR, NSEAB !/MPI END DO ! !/MPI ELSE ! !/MPI ALLOCATE & !/MPI ( OUTPTS(IMOD)%OUT4%IRQRSS(NAPROC*NBLKRS) , & !/MPI OUTPTS(IMOD)%OUT4%VAAUX(NSPEC,2*RSBLKS,NAPROC) ) ! !/MPI IRQRSS => OUTPTS(IMOD)%OUT4%IRQRSS !/MPI VAAUX => OUTPTS(IMOD)%OUT4%VAAUX !/MPI DO IB=1, NBLKRS !/MPI IT = IT0 + 3 + IB !/MPI JSEA0 = 1 + (IB-1)*RSBLKS !/MPI JSEAN = MIN ( NSEALM , IB*RSBLKS ) !/MPI NSEAB = 1 + JSEAN - JSEA0 !/MPI DO I0=1, NAPROC !/MPI IF ( I0 .NE. NAPRST ) THEN !/MPI IH = IH + 1 !/MPI IFROM = I0 - 1 !/MPI IBOFF = MOD(IB-1,2)*RSBLKS !/MPI CALL MPI_RECV_INIT (VAAUX(1,1+IBOFF,I0),& !/MPI NSPEC*NSEAB, MPI_REAL, IFROM, IT, & !/MPI MPI_COMM_WAVE, IRQRSS(IH), IERR ) !/MPIT WRITE (NDST,9026) IH, 'R', IB, IFROM, & !/MPIT IT, IRQRSS(IH), IERR, NSEAB !/MPI END IF !/MPI END DO !/MPI END DO ! !/MPI END IF !/MPI END IF ! !/MPIT WRITE (NDST,9027) !/MPIT WRITE (NDST,9028) IH !/MPI IT0 = IT0 + NBLKRS ! !/MPI END IF ! !/MPI END IF ! ! 3. Set-up for W3IOBC ( SENDs ) ------------------------------------ / ! !/MPI NRQBP = 0 !/MPI NRQBP2 = 0 !/MPI IH = 0 !/MPI IT = IT0 !/MPI IROOT = NAPBPT - 1 ! !/MPI IF ( FLOUT(5) ) THEN !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT5%IRQBP1(NBO2(NFBPO)), & !/MPI OUTPTS(IMOD)%OUT5%IRQBP2(NBO2(NFBPO)) ) !/MPI IRQBP1 => OUTPTS(IMOD)%OUT5%IRQBP1 !/MPI IRQBP2 => OUTPTS(IMOD)%OUT5%IRQBP2 ! ! 3.a Loops over files and points ! !/MPIT WRITE (NDST,9030) 'MPI_SEND_INIT' ! !/MPI DO J=1, NFBPO !/MPI DO I=NBO2(J-1)+1, NBO2(J) ! !/MPI IT = IT + 1 ! ! 3.b Residence processor of point ! !/MPI ISEA = ISBPO(I) !/MPI CALL INIT_GET_JSEA_ISPROC(ISEA, JSEA, ISPROC) ! ! 3.c If stored locally, send data ! !/MPI IF ( IAPROC .EQ. ISPROC ) THEN !/MPI IH = IH + 1 !/MPI CALL MPI_SEND_INIT (VA(1,JSEA),NSPEC,MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQBP1(IH), IERR) !/MPIT WRITE (NDST,9031) IH, I, J, IROOT, IT, IRQBP1(IH), IERR !/MPI END IF ! !/MPI END DO !/MPI END DO ! ! ... End of loops 4.a ! !/MPI NRQBP = IH ! !/MPIT WRITE (NDST,9032) !/MPIT WRITE (NDST,9033) NRQBP ! ! 3.d Set-up for W3IOBC ( RECVs ) ------------------------------------ / ! !/MPI IF ( IAPROC .EQ. NAPBPT ) THEN ! !/MPI IH = 0 !/MPI IT = IT0 ! ! 3.e Loops over files and points ! !/MPIT WRITE (NDST,9030) 'MPI_RECV_INIT' ! !/MPI DO J=1, NFBPO !/MPI DO I=NBO2(J-1)+1, NBO2(J) ! ! 3.f Residence processor of point ! !/MPI ISEA = ISBPO(I) !/MPI CALL INIT_GET_JSEA_ISPROC(ISEA, JSEA, ISPROC) ! ! 3.g Receive in correct array ! !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI ITARG = ISPROC - 1 !/MPI CALL MPI_RECV_INIT (ABPOS(1,IH),NSPEC,MPI_REAL,& !/MPI ITARG, IT, MPI_COMM_WAVE, IRQBP2(IH), IERR) !/MPIT WRITE (NDST,9031) IH, I, J, ITARG, IT, IRQBP2(IH), IERR ! !/MPI END DO !/MPI END DO ! !/MPI NRQBP2 = IH ! ! ... End of loops 4.e ! !/MPIT WRITE (NDST,9032) !/MPIT WRITE (NDST,9033) NRQBP2 ! !/MPI END IF ! !/MPI IT0 = IT0 + NBO2(NFBPO) ! !/MPI END IF ! !/MPIT WRITE (NDST,*) ! ! 4. Set-up for W3IOTR ---------------------------------------------- / ! !/MPI IH = 0 !/MPI IROOT = NAPTRK - 1 ! !/MPI IF ( FLOUT(3) ) THEN ! ! 4.a U* ! !/MPIT WRITE (NDST,9040) ! !/MPI IF ( IAPROC .NE. NAPTRK ) THEN !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT3%IRQTR(2) ) !/MPI IRQTR => OUTPTS(IMOD)%OUT3%IRQTR !/MPI IH = IH + 1 !/MPI IT = IT0 + 1 !/MPI CALL MPI_SEND_INIT (UST (IAPROC),1,WW3_FIELD_VEC,& !/MPI IROOT, IT, MPI_COMM_WAVE, IRQTR(IH), IERR ) !/MPIT WRITE (NDST,9041) IH, 'S U*', IROOT, IT, IRQTR(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT0 + 2 !/MPI CALL MPI_SEND_INIT (USTDIR(IAPROC),1,WW3_FIELD_VEC,& !/MPI IROOT, IT, MPI_COMM_WAVE, IRQTR(IH), IERR ) !/MPIT WRITE (NDST,9041) IH, 'S U*', IROOT, IT, IRQTR(IH), IERR !/MPI ELSE !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT3%IRQTR(2*NAPROC) ) !/MPI IRQTR => OUTPTS(IMOD)%OUT3%IRQTR !/MPI DO I0=1, NAPROC !/MPI IFROM = I0 - 1 !/MPI IF ( I0 .NE. IAPROC ) THEN !/MPI IH = IH + 1 !/MPI IT = IT0 + 1 !/MPI CALL MPI_RECV_INIT(UST (I0),1,WW3_FIELD_VEC,& !/MPI IFROM,IT,MPI_COMM_WAVE, IRQTR(IH), IERR) !/MPIT WRITE (NDST,9041) IH, 'R U*', IFROM, IT, IRQTR(IH), IERR !/MPI IH = IH + 1 !/MPI IT = IT0 + 2 !/MPI CALL MPI_RECV_INIT(USTDIR(I0),1,WW3_FIELD_VEC,& !/MPI IFROM,IT,MPI_COMM_WAVE, IRQTR(IH), IERR) !/MPIT WRITE (NDST,9041) IH, 'R U*', IFROM, IT, IRQTR(IH), IERR !/MPI END IF !/MPI END DO !/MPI END IF ! !/MPI NRQTR = IH !/MPI IT0 = IT0 + 2 ! !/MPIT WRITE (NDST,9042) !/MPIT WRITE (NDST,9043) NRQTR ! !/MPI END IF ! ! 5. Set-up remaining counters -------------------------------------- / ! !/MPI IT0PRT = IT0 !/MPI IT0PNT = IT0PRT + 2*NAPROC !/MPI IT0TRK = IT0PNT + 5000 ! RETURN ! ! Formats : ! !/MPI 1010 FORMAT (/' *** ERROR W3MPIO : ARRAY IRQGO TOO SMALL *** '/) !/MPI 1011 FORMAT (/' *** ERROR W3MPIO : ARRAY IRQGO2 TOO SMALL *** '/) ! !/MPIT 9010 FORMAT (/' TEST W3MPIO: COMMUNICATION CALLS FOR W3IOGO ',A/ & !/MPIT ' +------+-------+------+------+--------------+'/ & !/MPIT ' | IH | ID | TARG | TAG | handle err |'/ & !/MPIT ' +------+-------+------+------+--------------+') !/MPIT 9011 FORMAT ( ' |',I5,' | ',A5,' |',2(I5,' |'),I9,I4,' |') !/MPIT 9012 FORMAT ( ' +------+-------+------+------+--------------+') !/MPIT 9013 FORMAT ( ' TEST W3MPIO: NRQGO :',2I10) !/MPIT 9014 FORMAT ( ' TEST W3MPIO: NRQGO2:',2I10) ! !/MPIT 9020 FORMAT (/' TEST W3MPIO: COMM. CALLS FOR W3IORS (F)'/ & !/MPIT ' +------+------+------+------+--------------+'/ & !/MPIT ' | IH | ID | TARG | TAG | handle err |'/ & !/MPIT ' +------+------+------+------+--------------+') !/MPIT 9021 FORMAT ( ' |',I5,' | ',A4,' |',2(I5,' |'),I9,I4,' |') !/MPIT 9022 FORMAT ( ' +------+------+------+------+--------------+') !/MPIT 9023 FORMAT ( ' TEST W3MPIO: NRQRS :',I10) ! !/MPIT 9025 FORMAT (/' TEST W3MPIO: COMM. CALLS FOR W3IORS (S)'/ & !/MPIT ' BLOCK SIZE / BLOCKS : ',2I6/ & !/MPIT ' +------+------+------+------+--------------+---------+'/ & !/MPIT ' | IH | ID | TARG | TAG | handle err | spectra |'/ & !/MPIT ' +------+------+------+------+--------------+---------+') !/MPIT 9026 FORMAT ( & !/MPIT ' |',I5,' | ',A1,I3,' |',2(I5,' |'),I9,I4,' |',I8,' |') !/MPIT 9027 FORMAT ( & !/MPIT ' +------+------+------+------+--------------+---------+') !/MPIT 9028 FORMAT ( ' TEST W3MPIO: IHMAX :',I10) ! !/MPIT 9030 FORMAT (/' TEST W3MPIO: ',A,' CALLS FOR W3IOBC'/ & !/MPIT ' +------+------+---+------+------+--------------+'/ & !/MPIT ' | IH | IPT | F | TARG | TAG | handle err |'/ & !/MPIT ' +------+------+---+------+------+--------------+') !/MPIT 9031 FORMAT ( ' |',2(I5,' |'),I2,' |',2(I5,' |'),I9,I4,' |') !/MPIT 9032 FORMAT ( & !/MPIT ' +------+------+---+------+------+--------------+') !/MPIT 9033 FORMAT ( ' TEST W3MPIO: NRQBC :',I10) !/MPIT 9034 FORMAT ( ' TEST W3MPIO: TOTAL :',I10) ! !/MPIT 9040 FORMAT (/' TEST W3MPIO: COMMUNICATION CALLS FOR W3IOTR'/ & !/MPIT ' +------+------+------+------+--------------+'/ & !/MPIT ' | IH | ID | TARG | TAG | handle err |'/ & !/MPIT ' +------+------+------+------+--------------+') !/MPIT 9041 FORMAT ( ' |',I5,' | ',A4,' |',2(I5,' |'),I9,I4,' |') !/MPIT 9042 FORMAT ( & !/MPIT ' +------+------+------+------+--------------+') !/MPIT 9043 FORMAT ( ' TEST W3MPIO: NRQTR :',I10) !/ !/ End of W3MPIO ----------------------------------------------------- / !/ END SUBROUTINE W3MPIO !/ ------------------------------------------------------------------- / SUBROUTINE W3MPIP ( IMOD ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | !/ | Last update : 30-Oct-2009 | !/ +-----------------------------------+ !/ !/ 02-Aug-2006 : Origination. ( version 3.10 ) !/ 17-May-2007 : Adding NTPROC/NAPROC separation. ( version 3.11 ) !/ 30-Oct-2009 : Implement curvilinear grid type. ( version 3.14 ) !/ (W. E. Rogers & T. J. Campbell, NRL) !/ ! 1. Purpose : ! ! Prepare MPI persistent communication needed for WAVEWATCH I/O ! routines. ! ! 2. Method : ! ! Create handles as needed. ! ! 3. Parameters : ! ! Parameter list ! ---------------------------------------------------------------- ! IMOD Int. I Model number. ! ---------------------------------------------------------------- ! ! 4. Subroutines used : ! ! Name Type Module Description ! ---------------------------------------------------------------- ! STRACE Subr. W3SERVMD Subroutine tracing. ! ! MPI_SEND_INIT, MPI_RECV_INIT ! Subr. mpif.h MPI persistent communication calls. ! ---------------------------------------------------------------- ! ! 5. Called by : ! ! Name Type Module Description ! ---------------------------------------------------------------- ! W3INIT Subr. W3INITMD Wave model initialization routine. ! ---------------------------------------------------------------- ! ! 6. Error messages : ! ! 7. Remarks : ! ! 8. Structure : ! ! See source code. ! ! 9. Switches : ! ! !/MPI MPI communication calls. ! ! !/S Enable subroutine tracing. ! !/MPIT Enable test output. ! ! 10. Source code : ! !/ ------------------------------------------------------------------- / !/S USE W3SERVMD, ONLY: STRACE !/MPI USE W3SERVMD, ONLY: EXTCDE !/ !/MPI USE W3GDATMD, ONLY: NX, NY, NSPEC, MAPFS !/MPI USE W3WDATMD, ONLY: VA !/MPI USE W3ADATMD, ONLY: MPI_COMM_WAVE, SPPNT !/MPI USE W3ODATMD, ONLY: NDST, NDSE, IAPROC, NAPROC, NAPPNT, FLOUT !/MPI USE W3ODATMD, ONLY: OUTPTS, NRQPO, NRQPO2, IRQPO1, IRQPO2, & !/MPI NOPTS, IPTINT, IT0PNT, IT0TRK, O2IRQI !/MPI USE W3PARALL, ONLY: INIT_GET_JSEA_ISPROC !/ IMPLICIT NONE ! !/MPI INCLUDE "mpif.h" !/ !/ ------------------------------------------------------------------- / !/ Parameter list !/ INTEGER, INTENT(IN) :: IMOD !/ !/ ------------------------------------------------------------------- / !/ Local parameters !/ !/MPI INTEGER :: IH, IROOT, I, J, IT, IT0, JSEA, & !/MPI IERR, ITARG, IX(4), IY(4), & !/MPI K, IS(4), IP(4) INTEGER :: itout !/S INTEGER, SAVE :: IENT !/ !/ ------------------------------------------------------------------- / !/ !/S CALL STRACE (IENT, 'W3MPIP') ! !/MPI IF ( O2IRQI ) THEN !/MPI WRITE (NDSE,1001) !/MPI CALL EXTCDE (1) !/MPI END IF ! ! 1. Set-up for W3IOPE/O ( SENDs ) ---------------------------------- / ! !/MPI NRQPO = 0 !/MPI NRQPO2 = 0 !/MPI IH = 0 !/MPI IT0 = IT0PNT !/MPI IROOT = NAPPNT - 1 ! !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT2%IRQPO1(4*NOPTS), & !/MPI OUTPTS(IMOD)%OUT2%IRQPO2(4*NOPTS) ) !/MPI IRQPO1 => OUTPTS(IMOD)%OUT2%IRQPO1 !/MPI IRQPO2 => OUTPTS(IMOD)%OUT2%IRQPO2 !/MPI O2IRQI = .TRUE. ! ! 1.a Loop over output locations ! !/MPIT WRITE (NDST,9010) 'MPI_SEND_INIT' ! !/MPI DO I=1, NOPTS !/MPI DO K=1,4 !/MPI IX(K)=IPTINT(1,K,I) !/MPI IY(K)=IPTINT(2,K,I) !/MPI END DO ! 1.b Loop over corner points ! !/MPI DO J=1, 4 ! !/MPI IT = IT0 + (I-1)*4 + J !/MPI IS(J) = MAPFS (IY(J),IX(J)) !/MPI IF ( IS(J) .EQ. 0 ) THEN !/MPI JSEA = 0 !/MPI IP(J) = NAPPNT !/MPI ELSE !/MPI CALL INIT_GET_JSEA_ISPROC(IS(J), JSEA, IP(J)) !/MPI END IF ! ! 1.c Send if point is stored here ! !/MPI IF ( IP(J) .EQ. IAPROC ) THEN !/MPI IH = IH + 1 !/MPI CALL MPI_SEND_INIT ( VA(1,JSEA), NSPEC, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQPO1(IH), IERR ) !/MPIT WRITE (NDST,9011) IH,I,J, IROOT,IT, IRQPO1(IH), IERR !/MPI END IF ! ! ... End of loop 1.b ! !/MPI END DO ! ! ... End of loop 1.a ! !/MPI END DO ! !/MPI NRQPO = IH ! !/MPIT WRITE (NDST,9012) !/MPIT WRITE (NDST,9013) NRQPO ! ! 1.d Set-up for W3IOPE/O ( RECVs ) ---------------------------------- / ! !/MPI IF ( IAPROC .EQ. NAPPNT ) THEN ! !/MPI IH = 0 ! ! 2.e Loop over output locations ! !/MPIT WRITE (NDST,9010) 'MPI_RECV_INIT' ! !/MPI DO I=1, NOPTS !/MPI DO K=1,4 !/MPI IX(K)=IPTINT(1,K,I) !/MPI IY(K)=IPTINT(2,K,I) !/MPI END DO ! !/MPI DO J=1, 4 ! !/MPI IT = IT0 + (I-1)*4 + J !/MPI IS(J) = MAPFS (IY(J),IX(J)) !/MPI IF ( IS(J) .EQ. 0 ) THEN !/MPI JSEA = 0 !/MPI IP(J) = NAPPNT !/MPI ELSE !/MPI CALL INIT_GET_JSEA_ISPROC(IS(J), JSEA, IP(J)) !/MPI END IF ! ! 1.g Receive in correct array ! !/MPI IH = IH + 1 !/MPI ITARG = IP(J) - 1 !/MPI CALL MPI_RECV_INIT ( SPPNT(1,1,J), NSPEC, MPI_REAL, & !/MPI ITARG, IT, MPI_COMM_WAVE, IRQPO2(IH), IERR ) !/MPIT WRITE (NDST,9011) IH,I,J, ITARG,IT, IRQPO2(IH), IERR ! ! ... End of loop 1.f ! !/MPI END DO ! ! ... End of loop 1.e ! !/MPI END DO ! !/MPI NRQPO2 = NOPTS*4 ! !/MPIT WRITE (NDST,9012) !/MPIT WRITE (NDST,9014) NRQPO2 ! !/MPI END IF ! ! !/MPI IT0 = IT0 + 8*NOPTS ! ! 1.h Base tag number for track output ! !/MPI IT0TRK = IT0 ! RETURN ! ! Formats : ! !/MPI 1001 FORMAT (/' *** ERROR W3MPIP : ARRAYS ALREADY ALLOCATED *** '/) ! !/MPIT 9010 FORMAT (/' TEST W3MPIP: ',A,' CALLS FOR W3IOPO'/ & !/MPIT ' +------+------+---+------+------+--------------+'/ & !/MPIT ' | IH | IPT | J | TARG | TAG | handle err |'/ & !/MPIT ' +------+------+---+------+------+--------------+') !/MPIT 9011 FORMAT ( ' |',2(I5,' |'),I2,' |',2(I5,' |'),I9,I4,' |') !/MPIT 9012 FORMAT ( & !/MPIT ' +------+------+---+------+------+--------------+') !/MPIT 9013 FORMAT ( ' TEST W3MPIP: NRQPO :',I10) !/MPIT 9014 FORMAT ( ' TEST W3MPIP: TOTAL :',I10) !/ !/ End of W3MPIP ----------------------------------------------------- / !/ END SUBROUTINE W3MPIP !/ !/ End of module W3INITMD -------------------------------------------- / !/ END MODULE W3INITMD