From 8678b6f5fbf1ef9068e941ef67907358a71f0956 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Tue, 2 Apr 2019 16:57:03 -0400 Subject: [PATCH 01/84] Adding changes to reference ver 7.00 in manual and WWVER in w3initmd (#5) Merging into develop (#6). --- manual/defs.tex | 2 +- manual/intro/about.tex | 27 ++------------------------- manual/start.tex | 8 ++++---- model/ftn/w3initmd.ftn | 2 +- 4 files changed, 8 insertions(+), 31 deletions(-) diff --git a/manual/defs.tex b/manual/defs.tex index 0a73cba87..07839d71d 100644 --- a/manual/defs.tex +++ b/manual/defs.tex @@ -1,4 +1,4 @@ -\newcommand{\WWver}{6.07} +\newcommand{\WWver}{7.00} \newcommand{\guidever}{1.2} \newcommand{\guideref}{tol:MMABguide} \newcommand{\genever}{1.5} diff --git a/manual/intro/about.tex b/manual/intro/about.tex index a5ac1b4c5..f535a8077 100644 --- a/manual/intro/about.tex +++ b/manual/intro/about.tex @@ -42,38 +42,15 @@ \subsection{~About this manual} \vspace{\baselineskip} \noindent The present model version (\WWver) is the new public version based on the -previous official model release (version 5.16). The following are new features added +previous official model release (version 6.07). The following are new features added and code-structure modifications made in \ws\ \WWver since the previous release. \begin{list}{$\bullet$}{\rightmargin 5mm \parsep 0mm \itemsep 0mm} -\item Preparing for next model version, adding optional instrumentation to code - for profiling of memory use (model version 6.00). - -\item Separates Stokes drift spectrum calculation (US3D) from OUTG and provides - new option to output surface Stokes drift partitioned into run-time defined - frequencies (USSP) (model version 6.01). - -\item Adds a new module for ESMF interface (model version 6.02). - -\item Adds a capability to update restart file's total energy based on independent - significant wave height analysis (model version 6.03). - -\item Adds domain decomposition for unstructured implicit schemes using PDLIB - (Parallel Domain Decomposition Library) and ParMetis (model version 6.04). - -\item Updates the namelist options for the following programs: ww3\_ounf, ww3\_ounp, - ww3\_trnc, ww3\_bounc, and ww3\_shel (model version 6.05). - -\item Adding IC5 (the extended FS model) as a sea ice source term option (model version 6.06) - -\item Public release (model version 6.07) +\item Preparing for next model version (model version 7.00). \end{list} -Other additions include updates on source term parameterizations such IC2, IS2, ST4, REF1. - - \vspace{\baselineskip} \noindent Up to date information on this model can be found (including bugs and bug fixes) on the \ws\ GitHub wiki page diff --git a/manual/start.tex b/manual/start.tex index f5b6a7f65..acfacaf80 100644 --- a/manual/start.tex +++ b/manual/start.tex @@ -30,16 +30,16 @@ \vfill March 2019 \\ -%(DRAFT) \\ +(DRAFT) \\ %Last Changed Rev: \SVNRevision\ % on \SVNDate \\ \vspace{\baselineskip} %This model version will not be distributed \\ % This model version is an alpha distribution \\ % This model version is a beta distribution \\ -%{\sc please do not refer to this manuscript} \\ -%Please use the following citation from the previous release: +{\sc please do not refer to this manuscript} \\ +Please use the following citation from the previous release: %Use \cite{\prevman} and reference in section 1.1 instead. -{\sc To refer to this manual, please use the following citation:} \\ +%{\sc To refer to this manual, please use the following citation:} \\ \end{center} \noindent The WAVEWATCH III\textsuperscript{\textregistered} Development Group (\citetalias{ww3man2019}), \citeyearpar{ww3man2019}: User manual and system documentation of WAVEWATCH III\textsuperscript{\textregistered} version 6.07. Tech. Note 333, NOAA/NWS/NCEP/MMAB, College Park, MD, USA, 465 pp. + Appendices. diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 989e9d82e..fda6c3e80 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -109,7 +109,7 @@ PUBLIC !/ REAL, PARAMETER :: CRITOS = 15. - CHARACTER(LEN=10), PARAMETER :: WWVER = '6.07 ' + CHARACTER(LEN=10), PARAMETER :: WWVER = '7.00 ' CHARACTER(LEN=512), PARAMETER :: SWITCHES = & 'PUT_SW1' // & 'PUT_SW2' // & From 2b1ea78a34183d0c17d4802487dcfa856141730b Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Tue, 23 Apr 2019 18:31:44 -0300 Subject: [PATCH 02/84] HotFix: ounfpart + NCO switch + DB1 coeff (v6.07.1) (#16) HF ounfpart integrates hotfixes from the NCEP/NOAA-EMC auth repo and the trusted repos UKMO and ERDC. The following hotfixes are implemented with this pull request: * Bugfix in ww3_ounf.ftn: NBIPART check against NOSWLL was not accouting for zeroth wind partition. See Issue #2. * Updating link.wcoss_phase2 for grib compile, removing !$ lines in ww3_uprstr that broke compilation of codes with OMPH OMPG switch flags, added new global wave model switch. * Added option for writing to fixed netcdf gridded output file when using NCO switch (the issue will be fixed more adequately in v7 following Issue #8). * DB1 depth-breaking_bugfix: added proper scaling coefficients for radian freq. [radHz]. See issue #7 . Hotfixes were tested using the full regression testing matrix at NCEP which resulted in differences only in regtests wher DB1 was employed, as expected. --- README.md | 4 +- model/bin/link.cray_xc.Intel | 10 +- model/bin/link.wcoss_phase2 | 5 +- model/bin/switch_NCEP_glwu | 1 + model/bin/switch_NCEP_gwm | 1 + model/bin/w3_make | 7 ++ model/ftn/w3sdb1md.ftn | 40 ++++--- model/ftn/ww3_grid.ftn | 2 +- model/ftn/ww3_ounf.ftn | 10 +- model/ftn/ww3_ounp.ftn | 2 +- model/ftn/ww3_uprstr.ftn | 102 +++++++++--------- regtests/ww3_tpt1.1/info | 5 + .../input/{ => grid_nml}/namelists_PTM1.nml | 0 .../input/{ => grid_nml}/namelists_PTM2.nml | 0 .../input/{ => grid_nml}/namelists_PTM3.nml | 0 .../input/{ => grid_nml}/namelists_PTM4.nml | 0 .../input/{ => grid_nml}/namelists_PTM5.nml | 0 .../input/{ => grid_nml}/ww3_grid_PTM1.nml | 0 .../input/{ => grid_nml}/ww3_grid_PTM2.nml | 0 .../input/{ => grid_nml}/ww3_grid_PTM3.nml | 0 .../input/{ => grid_nml}/ww3_grid_PTM4.nml | 0 .../input/{ => grid_nml}/ww3_grid_PTM5.nml | 0 22 files changed, 112 insertions(+), 77 deletions(-) create mode 100755 model/bin/switch_NCEP_glwu create mode 100755 model/bin/switch_NCEP_gwm rename regtests/ww3_tpt1.1/input/{ => grid_nml}/namelists_PTM1.nml (100%) rename regtests/ww3_tpt1.1/input/{ => grid_nml}/namelists_PTM2.nml (100%) rename regtests/ww3_tpt1.1/input/{ => grid_nml}/namelists_PTM3.nml (100%) rename regtests/ww3_tpt1.1/input/{ => grid_nml}/namelists_PTM4.nml (100%) rename regtests/ww3_tpt1.1/input/{ => grid_nml}/namelists_PTM5.nml (100%) rename regtests/ww3_tpt1.1/input/{ => grid_nml}/ww3_grid_PTM1.nml (100%) rename regtests/ww3_tpt1.1/input/{ => grid_nml}/ww3_grid_PTM2.nml (100%) rename regtests/ww3_tpt1.1/input/{ => grid_nml}/ww3_grid_PTM3.nml (100%) rename regtests/ww3_tpt1.1/input/{ => grid_nml}/ww3_grid_PTM4.nml (100%) rename regtests/ww3_tpt1.1/input/{ => grid_nml}/ww3_grid_PTM5.nml (100%) diff --git a/README.md b/README.md index 077e861fd..24c789367 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # The WAVEWATCH III Framework -WAVEWATCH III ™ is a community wave modeling framework that includes the +WAVEWATCH III ® is a community wave modeling framework that includes the latest scientific advancements in the field of wind-wave modeling and dynamics. ## General Features @@ -11,7 +11,7 @@ for shallow-water (surf zone) applications, as well as wetting and drying of grid points. Propagation of a wave spectrum can be solved using regular (rectilinear or curvilinear) and unstructured (triangular) grids. See [About WW3](https://github.com/NOAA-EMC/WW3/wiki/About-WW3) for a -detailed description of WAVEWATCH III ™. +detailed description of WAVEWATCH III ®. ## Installation diff --git a/model/bin/link.cray_xc.Intel b/model/bin/link.cray_xc.Intel index be5df1781..59a37eb38 100755 --- a/model/bin/link.cray_xc.Intel +++ b/model/bin/link.cray_xc.Intel @@ -82,7 +82,6 @@ # Intel compiler ------------------------------------------------------------ # 3.a Build options and determine compiler name -# No GRIB libraries for this one opt="-o $prog" opt="$opt -xHost -O3 -ip -fno-alias -fp-model strict -no-fma -ftz" @@ -121,7 +120,14 @@ fi fi - # netcdf library dir + if [ "$ncep_grib_compile" = 'yes' ] + then +# GRIB libraries for this one + opt="$opt -convert big_endian -assume byterecl -prec-div -prec-sqrt -ip" + libs="$libs ${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" + fi + +# netcdf library dir if [ "$netcdf_compile" = 'yes' ] then case $WWATCH3_NETCDF in diff --git a/model/bin/link.wcoss_phase2 b/model/bin/link.wcoss_phase2 index d18553fbc..3d5abaf36 100755 --- a/model/bin/link.wcoss_phase2 +++ b/model/bin/link.wcoss_phase2 @@ -140,8 +140,11 @@ esac fi - if [ "$prog" = 'ww3_grib' ] +# NCEP grib creation + if [ "$ncep_grib_compile" = 'yes' ] then +# GRIB libraries for this one + opt="$opt -convert big_endian -assume byterecl -prec-div -prec-sqrt -ip" libs="$libs ${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" fi diff --git a/model/bin/switch_NCEP_glwu b/model/bin/switch_NCEP_glwu new file mode 100755 index 000000000..ebc1025a4 --- /dev/null +++ b/model/bin/switch_NCEP_glwu @@ -0,0 +1 @@ +F90 NCO NOPA LRB4 NCEP2 DIST MPI SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL3 BT1 DB1 IC0 IS0 REF0 MLIM TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 O0 O1 O2 O4 O5 O6 O7 O14 O15 diff --git a/model/bin/switch_NCEP_gwm b/model/bin/switch_NCEP_gwm new file mode 100755 index 000000000..402cc54a1 --- /dev/null +++ b/model/bin/switch_NCEP_gwm @@ -0,0 +1 @@ +F90 NCO NOPA LRB4 NOGRB DIST MPI OMPH OMPG SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC4 IS0 REF0 TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 RWND O0 O1 O2 O4 O5 O6 O7 O14 O15 diff --git a/model/bin/w3_make b/model/bin/w3_make index 88cea43f1..f2727ea8a 100755 --- a/model/bin/w3_make +++ b/model/bin/w3_make @@ -161,6 +161,13 @@ cdf_programs="$cdf_programs ww3_prtide" fi + # NCEP GRIB + export ncep_grib_compile="no" + if [ -n "`grep NCEP $switch_file`" ] + then + export ncep_grib_compile="yes" + fi + # MULTI MULTI_ESMF SBS1 if [ -n "`grep SCRIPNC $switch_file`" ] || [ -n "`grep OASIS $switch_file`" ] || [ -n "`grep PDLIB $switch_file`" ] then diff --git a/model/ftn/w3sdb1md.ftn b/model/ftn/w3sdb1md.ftn index 7d2d93e19..b8fffb92c 100644 --- a/model/ftn/w3sdb1md.ftn +++ b/model/ftn/w3sdb1md.ftn @@ -57,27 +57,37 @@ !/ | FORTRAN 90 | !/ | J. H. Alves | !/ | H. L. Tolman | +!/ ! A. Roland | !/ | Last update : 08-Jun-2018 | !/ +-----------------------------------+ !/ !/ 25-Apr-2007 : Origination of module. ( version 3.11 ) !/ 08-Jun-2018 : Add DEBUGDB1. ( version 6.04 ) +!/ 03-Apr-2019 : Rewrite in terms of energy density (A. Roland,version 6.07) +!/ 03-Apr-2019 : Add Thornton & Guza, 1983 (A. Roland,version 6.07) !/ ! 1. Purpose : ! ! Compute depth-induced breaking using Battjes and Janssen bore ! model approach ! -! 2. Method : -! -! Sdb = - CDB * FMEAN * QB * B * B * SPEC -! -! Where CDB = SDBC1 = 0.25 * BJALFA (defaults to BJALFA = 1) -! modified via ww3_grid namelist parameter BJALFA -! B = HM / HRMS -! HM = GAMMA * DEP -! GAMMA = SDBC2 defaults to 0.73 (mean Battjes/Janssen value) -! modified via ww3_grid namelist parameter BJGAM +! 2. Method : Battjes & Janssen (1978), +! +! Sbr = Dtot/Etot*WA = D * WA +! Dtot = 0.25*alpha*Qb*fm*Hmax² +! fm = sigma/2Pi +! BB = Hrms²/Hmax² = 8Etot/Hmax² +! D = Dtot/Etot = BJALFA * sigma / pi * Qb/BB = 2 * BJALFA * fm * Qb/BB +! +! AR: only valid for Hrms .le. Hm, Qb .le. 1, otherwise, in the degenrative regime it is +! due to Qb > 1 that all wave are broken and Hrms .le. Hmax +! MLIM can be used to enforce this conditions, source term will smoothly converge to this limit. +! +! Where CDB = SDBC1 = BJALFA (defaults to BJALFA = 1) +! modified via ww3_grid namelist parameter BJALFA +! HM = GAMMA * DEP +! GAMMA = SDBC2 defaults to 0.73 (mean Battjes/Janssen value) +! modified via ww3_grid namelist parameter BJGAM ! ! And QB is estimated by iterations using the nonlinear expression ! @@ -145,7 +155,6 @@ !/ INTEGER, INTENT(IN) :: IX ! Local grid number REAL, INTENT(IN) :: A(NSPEC) -!AR: This below is not good I know ... we need more inlined methods ... REAL, INTENT(INOUT) :: EMEAN, FMEAN, WNMEAN, DEPTH REAL, INTENT(OUT) :: S(NSPEC), D(NSPEC) REAL, INTENT(IN) :: CG(NK) @@ -179,7 +188,7 @@ ! !/T WRITE (NDST,9000) SDBC1, SDBC2, FDONLY ! -! 1. Integral quantities ... only for the case when it is used nonlinear in the solver ... +! 1. Integral quantities. AR: make sure mean quantities are computed, need to move upward ! ETOT = 0. FMEAN2 = 0. @@ -256,16 +265,16 @@ IF (IWB == 1) THEN IF ( ( BB .GT. THR) .AND. ( ABS ( BB - QB ) .GT. THR) ) THEN IF ( BB .LT. 1.0) THEN - CBJ = DBLE(SDBC1) * QB * DBLE(FMEAN) / BB + CBJ = 2 * DBLE(SDBC1) * QB * DBLE(FMEAN) / BB ELSE - CBJ = DBLE(SDBC1) * DBLE(FMEAN) * BB ! Make sure the energy vanishes ... + CBJ = 2 * DBLE(SDBC1) * DBLE(FMEAN) * BB ! AR: degenerative regime, all waves must be .le. Hmax, we just smoothly let the excessive energy vanish by * BB. END IF ELSE CBJ = 0.d0 ENDIF D = - CBJ S = D * A - ELSE IF (IWB == 2) THEN + ELSE IF (IWB == 2) THEN IF (ETOT .GT. THR) THEN HRMS = SQRT(8*EMEAN) FAK = (1+4./SQRT(PI)*(B*BB+1.5*B)*exp(-BB)-ERF(B)) @@ -275,7 +284,6 @@ ENDIF D = - CBJ S = D * A - ELSE IF (IWB == 3) THEN ENDIF IF (CBJ .GT. 0.) THEN diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 3234e79f2..6b22d97b5 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -1888,7 +1888,7 @@ !/DB1 ' Using Hmax/d in Miche style formulation.' !/DB1 END IF !/DB1 WRITE (NDSO,*) -!/DB1 SDBC1 = 0.25 * BJALFA +!/DB1 SDBC1 = BJALFA !/DB1 SDBC2 = BJGAM !/DB1 FDONLY = BJFLAG ! diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index f3d3d2f31..5d6d9e9a7 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -7,7 +7,7 @@ !/ | F. Ardhuin | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 12-Sep-2018 | +!/ | Last update : 28-Mar-2019 | !/ +-----------------------------------+ !/ !/ 17-Mar-2010 : Creation ( version 3.14_SHOM ) @@ -31,6 +31,7 @@ !/ 26-Jul-2018 : Changed reading of TABIPART ( version 6.05 ) !/ 12-Sep-2018 : Added extra partitioned fields ( version 6.06 ) !/ 25-Sep-2018 : Add WBT parameter ( version 6.06 ) +!/ 28-Mar-2019 : Bugfix to NBIPART check. ( version 6.07 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -381,7 +382,7 @@ ! Alternative processing of TABIPART to capture requests ! greater than NOSWLL (C.Bunney): - ALLOCATE(TABIPART(NOSWLL)) + ALLOCATE(TABIPART(NOSWLL + 1)) NBIPART=0 DO I=1,30 IF(STRINGIPART(I:I) .EQ. ' ') CYCLE @@ -391,7 +392,7 @@ CYCLE ENDIF NBIPART = NBIPART + 1 - IF(NBIPART .GT. NOSWLL) THEN + IF(NBIPART .GT. NOSWLL + 1) THEN GOTO 803 ENDIF TABIPART(NBIPART) = IPART @@ -3397,6 +3398,9 @@ FNAMENC(S1+S2+1:S1+S2+3) = '.nc' FNAMENC(S1+S2+4:S1+S2+6) = ' ' +!/NCO ! For NCEP application, requires fixed netcdf file name +!/NCO FNAMENC='ww3.gridded.nc' + ! If the flag frequency is .TRUE., defines the fourth dimension IF (FLFRQ) THEN UNITVAR(:)=UNITS diff --git a/model/ftn/ww3_ounp.ftn b/model/ftn/ww3_ounp.ftn index 3ae5cb519..111b9b591 100644 --- a/model/ftn/ww3_ounp.ftn +++ b/model/ftn/ww3_ounp.ftn @@ -202,7 +202,7 @@ !/MPI INTEGER :: IERR_MPI !/O14 INTEGER :: NDBO !/S INTEGER, SAVE :: IENT = 0 -!/NCO INTEGER :: NDSTAB +!/NCO INTEGER :: NDSTAB, NDST ! INTEGER, ALLOCATABLE :: INDREQ(:), INDREQTMP(:) INTEGER,ALLOCATABLE :: NCID(:) diff --git a/model/ftn/ww3_uprstr.ftn b/model/ftn/ww3_uprstr.ftn index 05dc8f4f5..23deba90a 100644 --- a/model/ftn/ww3_uprstr.ftn +++ b/model/ftn/ww3_uprstr.ftn @@ -115,62 +115,62 @@ ! i. ww3_uprstr.inp ! It includes some limited information for running the program: ! -!$ -------------------------------------------------------------------- $ -!$ WAVEWATCH III Update Restart input file $ -!$ -------------------------------------------------------------------- $ -!$ -!$ Time of Assimilation ----------------------------------------------- $ -!$ - Starting time in yyyymmdd hhmmss format. -!$ -!$ This is the assimilation starting time and has to be the same with -!$ the time at the restart.ww3. -!$ +! -------------------------------------------------------------------- $ +! WAVEWATCH III Update Restart input file $ +! -------------------------------------------------------------------- $ +! +! Time of Assimilation ----------------------------------------------- $ +! - Starting time in yyyymmdd hhmmss format. +! +! This is the assimilation starting time and has to be the same with +! the time at the restart.ww3. +! ! 19680607 120000 -!$ -!$ Choose algorithm to update restart file -!$ UPDN for the Nth approach -!$ The UPDN*, with N<2 the same correction factor is applied at all the grid points -!$ UPD0C:: ELIMINATED -!$ UPDOF:: Option 0F All the spectra are updated with a constant -!$ fac=HsAnl/HsBckg. -!$ Expected input: PRCNTG, as defined at fac -!$ UPD1 :: ELIMINATED -!$ UPDN, with N>1 each gridpoint has its own update factor. -!$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -!$ according to HsBckg and HsAnl -!$ Expected input the Analysis field, grbtxt format -!$ UPD3 :: Option 3 The update factor is a surface with the shape of -!$ the background spectrum. -!$ Expected input the Analysis field, grbtxt format -!$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] -!$ Option 4 The generalization of the UPD3. The update factor -!$ is the sum of surfaces which are applied on the background -!$ spectrum. -!$ The algorithm requires the mapping of each partition on the -!$ individual spectra; the map is used to determine the weighting -!$ surfaces. -!$ Expected input: the Analysis field, grbtxt format and the -!$ functions(frq,theta) of the update to be applied. +! +! Choose algorithm to update restart file +! UPDN for the Nth approach +! The UPDN*, with N<2 the same correction factor is applied at all the grid points +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg. +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! UPDN, with N>1 each gridpoint has its own update factor. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point +! according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape of +! the background spectrum. +! Expected input the Analysis field, grbtxt format +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update factor +! is the sum of surfaces which are applied on the background +! spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the weighting +! surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. ! UPD3 -!$ -!$ PRCNTG is input for option 1 and it is the percentage of correction -!$applied to all the gridpoints (e.g. 1.) -!$ +! +! PRCNTG is input for option 1 and it is the percentage of correction +!applied to all the gridpoints (e.g. 1.) +! ! 0.475 -!$ -!$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -!$ maximun correction applied to all the gridpoints (e.g. 0.5) -!$ +! +! PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the +! maximun correction applied to all the gridpoints (e.g. 0.5) +! ! 0.6 -!$ -!$ Name of the file with the SWH analysis from the DA system $ -!$ suffix .grbtxt for text out of grib2 file. $ -!$ +! +! Name of the file with the SWH analysis from the DA system $ +! suffix .grbtxt for text out of grib2 file. $ +! ! anl.grbtxt -!$ -!$ -------------------------------------------------------------------- $ -!$ WAVEWATCH III EoF ww3_uprstr.inp -!$ -------------------------------------------------------------------- $ +! +! -------------------------------------------------------------------- $ +! WAVEWATCH III EoF ww3_uprstr.inp +! -------------------------------------------------------------------- $ ! ! ii. Data files anl.XXX ! diff --git a/regtests/ww3_tpt1.1/info b/regtests/ww3_tpt1.1/info index ccf219a29..2c17e3bf6 100644 --- a/regtests/ww3_tpt1.1/info +++ b/regtests/ww3_tpt1.1/info @@ -26,6 +26,10 @@ # PTM=5: Wave components defined using a user defined frequency cut-off # # (PTFCUT). Outputs high frequency and low frequency partition. # # # +# ===== # +# NOTE: CURRENTLY, THIS TEST NEEDS TO BE RUN WITH THE "-N" FLAG. # +# ===== # +# # # Use the -g option to select the partitioning method. E.g: # # for Serial (SHARED): # # ./bin/run_test -N -g PTM1 -f -o both ../model ww3_tpt1.1 # @@ -38,5 +42,6 @@ # ./bin/run_test -N -g PTM2 -n 2 -p aprun -f -s MPI \ # # -o both ../model ww3_tpt1.1 # # # +# # # Chris Bunney, Nov 2018 # ############################################################################### diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM1.nml b/regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM1.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/namelists_PTM1.nml rename to regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM1.nml diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM2.nml b/regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM2.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/namelists_PTM2.nml rename to regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM2.nml diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM3.nml b/regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM3.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/namelists_PTM3.nml rename to regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM3.nml diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM4.nml b/regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM4.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/namelists_PTM4.nml rename to regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM4.nml diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM5.nml b/regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM5.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/namelists_PTM5.nml rename to regtests/ww3_tpt1.1/input/grid_nml/namelists_PTM5.nml diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM1.nml b/regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM1.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/ww3_grid_PTM1.nml rename to regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM1.nml diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM2.nml b/regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM2.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/ww3_grid_PTM2.nml rename to regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM2.nml diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM3.nml b/regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM3.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/ww3_grid_PTM3.nml rename to regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM3.nml diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM4.nml b/regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM4.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/ww3_grid_PTM4.nml rename to regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM4.nml diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM5.nml b/regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM5.nml similarity index 100% rename from regtests/ww3_tpt1.1/input/ww3_grid_PTM5.nml rename to regtests/ww3_tpt1.1/input/grid_nml/ww3_grid_PTM5.nml From 04ed64b586bb31546531ca046d105c222e861f26 Mon Sep 17 00:00:00 2001 From: flampouris Date: Tue, 21 May 2019 09:26:33 -0400 Subject: [PATCH 03/84] Merging feature/sharedobject to develop (#29) The shared object, named libww3.so, has been added as a target at the makefile, it is created similar to the other executables and libraries of WW3 (./w3_make libww3.so); the "libww3.so" resides at the [...]/obj folder. --- model/bin/cmplr.env | 4 ++-- model/bin/comp.Intel | 5 +++-- model/bin/make_makefile.sh | 23 ++++++++++++++++++++++- model/bin/w3_automake | 1 + model/bin/w3_make | 5 +++++ model/bin/ww3_from_ftp.sh | 4 ++-- 6 files changed, 35 insertions(+), 7 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 67d50e94e..21c431450 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -117,7 +117,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' + optc='-c -module $path_m -no-fma -fPIC -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' optl='-o $prog -p -g' # list options @@ -179,7 +179,7 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -J$path_m -p -g -fno-second-underscore -ffree-line-length-none -fconvert=big-endian' + optc='-c -J$path_m -p -fPIC -g -fno-second-underscore -ffree-line-length-none -fconvert=big-endian' optl='-o $prog -p -g' # omp options diff --git a/model/bin/comp.Intel b/model/bin/comp.Intel index fa8ffd433..4a44a4f60 100755 --- a/model/bin/comp.Intel +++ b/model/bin/comp.Intel @@ -77,8 +77,9 @@ # # Intel compiler on Linux ---------------------------------------------------- # 2.b.1 Build options and determine compiler name - - opt="-c $list -O3 -assume byterecl -ip -module $path_m" + + opt="-c $list -O3 -assume byterecl -fPIC -module $path_m" +# opt="-c $list -O3 -assume byterecl -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" # opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 0afcd5406..2038dcb97 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -851,6 +851,7 @@ ww3_ounp ww3_gspl ww3_gint ww3_bound ww3_bounc ww3_systrk $tideprog" progs="$progs ww3_multi_esmf ww3_uprstr" progs="$progs libww3" + progs="$progs libww3.so" for prog in $progs do @@ -1059,6 +1060,13 @@ source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; + libww3.so) IDstring='Object file archive' + core='w3fldsmd w3initmd w3wavemd w3wdasmd w3updtmd' + data='wmmdatmd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' + prop="$pr" + source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" + IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' + aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; ww3_uprstr) IDstring='Update Restart File' core= data='wmmdatmd w3triamd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' @@ -1078,7 +1086,7 @@ filesl="$data $core $prop $source $IO $aux" # if program name is libww3, then # the target is compile and create archive - elif [ "$prog" = "libww3" ] + elif [ "$prog" = "libww3" ] || [ "$prog" = "libww3.so" ] then d_string="$prog"' : $(aPo)/' files="$aux $core $data $prop $source $IO" @@ -1123,6 +1131,19 @@ done echo " @cd \$(aPo); $ar_cmd $lib $objs" >> makefile echo ' ' >> makefile + # if program name is libww3.so, then + # the target is compile and create archive + elif [ "$prog" = "libww3.so" ] + then + lib=$prog + objs="" + for file in $filesl + do + objs="$objs $file.o" + done + echo " @cd \$(aPo); ld -o $lib -shared $objs" >> makefile + echo ' ' >> makefile + else echo ' @$(aPb)/link '"$filesl" >> makefile echo ' ' >> makefile diff --git a/model/bin/w3_automake b/model/bin/w3_automake index dc80435e0..b610d0f0c 100755 --- a/model/bin/w3_automake +++ b/model/bin/w3_automake @@ -132,6 +132,7 @@ reg_programs="$reg_programs gx_outp" reg_programs="$reg_programs ww3_uprstr" reg_programs="$reg_programs libww3" + reg_programs="$reg_programs libww3.so" # PRNC OUNF OUNP BOUNC TRNC cdf_programs="ww3_prnc" diff --git a/model/bin/w3_make b/model/bin/w3_make index f2727ea8a..f707dccd5 100755 --- a/model/bin/w3_make +++ b/model/bin/w3_make @@ -174,6 +174,7 @@ cdf_programs="$cdf_programs ww3_multi" cdf_programs="$cdf_programs ww3_sbs1" cdf_programs="$cdf_programs libww3" + cdf_programs="$cdf_programs libww3.so" if [ $ESMFMKFILE ] then cdf_programs="$cdf_programs ww3_multi_esmf" @@ -182,6 +183,7 @@ reg_programs="$reg_programs ww3_multi" reg_programs="$reg_programs ww3_sbs1" reg_programs="$reg_programs libww3" + reg_programs="$reg_programs libww3.so" if [ $ESMFMKFILE ] then reg_programs="$reg_programs ww3_multi_esmf" @@ -662,6 +664,9 @@ EOF # if program name is libww3, then # the target is compile and create archive elif [ "$prog" = "libww3" ] + then + target="$prog" + elif [ "$prog" = "libww3.so" ] then target="$prog" else diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index 6630a5c97..5723b53d8 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -23,7 +23,7 @@ wget ftp://polar.ncep.noaa.gov/tempor/ww3ftp/ww3_from_ftp.v6.07.tar.gz tar -xvzf ww3_from_ftp.v6.07.tar.gz #Move regtest info from data_regtests to regtests: -echo -e "Moving data from data_regtests to regtets" +echo -e "Moving data from data_regtests to regtests" cp -r data_regtests/ww3_tp2.15/input/*.nc regtests/ww3_tp2.15/input/ cp -r data_regtests/ww3_tp2.13/*.png regtests/ww3_tp2.13/ cp -r data_regtests/ww3_tic1.4/input/*.nc regtests/ww3_tic1.4/input/ @@ -53,7 +53,7 @@ else echo -e ' Not deleting tar file.' fi -echo -e "\n\n Files were copied from the data_regtests to the regtets folder." +echo -e "\n\n Files were copied from the data_regtests to the regstets folder." echo -e "Do you want to delete the data_regtests folder? [y|n]: " read wnew2 if [ "${wnew2}" = "Y" ] || [ "${wnew2}" = "y" ] From f69e98a61ba75de96a2b479bc52a53cf247461b0 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Tue, 21 May 2019 09:49:39 -0400 Subject: [PATCH 04/84] Esmf makefile (#36) Branch esmf_makefile: Updating Makefile for NEMS build, adding codes needed for NCEP operational applications using NEMS. * Modifications to support using intel option and generalized cmplr.env comp/link framework for building WW3 esmf for NEMS application * Changes to make work on NCEP R&D machine * Changing Makefile to ensure compilation of ww3_multi occurs in all platforms. --- model/bin/link.theia | 4 ++-- model/bin/link.tmpl | 7 +++++++ model/esmf/Makefile | 15 ++++++++++----- model/esmf/switch | 3 +++ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/model/bin/link.theia b/model/bin/link.theia index fe4aca9e8..a6abfc2d3 100755 --- a/model/bin/link.theia +++ b/model/bin/link.theia @@ -141,8 +141,8 @@ fi case $prog in - 'ww3_grib' ) libs="${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" ;; - * ) libs= ;; + 'ww3_grib' ) libs="${libs} ${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" ;; + * ) libs="${libs}" ;; esac diff --git a/model/bin/link.tmpl b/model/bin/link.tmpl index fe1421d7f..c0efb4080 100755 --- a/model/bin/link.tmpl +++ b/model/bin/link.tmpl @@ -104,6 +104,13 @@ fi fi + # grib library + if [ "$ncep_grib_compile" = 'yes' ] + then + opt="$opt -convert big_endian -assume byterecl -prec-div -prec-sqrt -ip" + libs="$libs ${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" + fi + # netcdf library dir if [ "$netcdf_compile" = 'yes' ] ; then case $WWATCH3_NETCDF in diff --git a/model/esmf/Makefile b/model/esmf/Makefile index 1d1f3ff96..1832cd931 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -1,4 +1,4 @@ -# GNU Makefile for test Wavewatch III coupled application +# GNU Makefile for WAVEWATCH III Implementation using NEMS at NCEP ################################################################################ @@ -12,7 +12,9 @@ WW3_F90 := gfortran SWITCHES := $(shell cat switch) WWATCH3_ENV := $(WW3_BINDIR)/wwatch3.env -export WWATCH3_ENV +WWATCH3_NETCDF := NC4 +NETCDF_CONFIG := $(shell which nc-config) +export WWATCH3_ENV WWATCH3_NETCDF NETCDF_CONFIG EXE := $(WW3_EXEDIR)/ww3_multi_esmf @@ -85,6 +87,7 @@ default: env setup gout switch ww3_nems: env setup gout switch $(WW3_BINDIR)/w3_make ww3_multi_esmf + $(WW3_BINDIR)/w3_make ww3_multi ww3_multi_esmf: esmApp.o $(DEP_LINK_OBJS) $(ESMF_F90LINKER) $(ESMF_F90LINKOPTS) -o $(EXE) $^ \ @@ -162,6 +165,11 @@ gout: $(WW3_BINDIR)/w3_make ww3_grid $(WW3_BINDIR)/w3_make ww3_outf $(WW3_BINDIR)/w3_make ww3_outp + $(WW3_BINDIR)/w3_make ww3_prep + $(WW3_BINDIR)/w3_make ww3_gint + $(WW3_BINDIR)/w3_make ww3_prnc + $(WW3_BINDIR)/w3_make ww3_ounf + $(WW3_BINDIR)/w3_make ww3_ounp @echo "$(SWITCHES)" > $(WW3_BINDIR)/tempswitch @sed -e "s/DIST/SHRD/g"\ -e "s/MPIT/ /g"\ @@ -170,9 +178,6 @@ gout: -e "s/NOGRB/NCEP2 NCO/g"\ $(WW3_BINDIR)/tempswitch > $(WW3_BINDIR)/switch \rm -f $(WW3_BINDIR)/tempswitch - $(WW3_BINDIR)/w3_make ww3_outp $(WW3_BINDIR)/w3_make ww3_grib # ------------------------------------------------------------------------------ - - diff --git a/model/esmf/switch b/model/esmf/switch index 71ac407d3..fa59a929e 100644 --- a/model/esmf/switch +++ b/model/esmf/switch @@ -1,8 +1,11 @@ F90 +NCO NOGRB DIST MPI SCRIP +SCRIPNC +NC4 PR3 UQ FLX0 From 03f853abd106c411287098bd39b50592ce7b191d Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Fri, 7 Jun 2019 19:30:33 +0200 Subject: [PATCH 05/84] Hotfix/hf master (#45) Pull request for HF to master featuring: * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * add WCOR to switch list * add check on array index * undo modification on ndates * add feature for fixed filename with ndates=0 for ww3_ounf --- model/aux/bash/ww3_ounf_inp2nml.sh | 2 +- model/bin/make_makefile.sh | 7 ++++++- model/ftn/w3triamd.ftn | 5 ++++- model/ftn/ww3_ounf.ftn | 19 ++++++++++--------- model/ftn/ww3_shel.ftn | 1 - model/inp/ww3_ounf.inp | 2 +- model/nml/ww3_ounf.nml | 2 +- regtests/mww3_test_01/input/ww3_ounf.nml | 2 +- regtests/mww3_test_02/input/ww3_ounf.nml | 2 +- regtests/mww3_test_03/input/ww3_ounf.nml | 2 +- regtests/mww3_test_04/input/ww3_ounf.inp | 2 +- regtests/mww3_test_04/input/ww3_ounf.nml | 2 +- regtests/mww3_test_05/input/ww3_ounf.inp | 2 +- regtests/mww3_test_05/input/ww3_ounf.nml | 2 +- regtests/mww3_test_06/input/ww3_ounf.inp | 2 +- regtests/mww3_test_06/input/ww3_ounf.nml | 2 +- regtests/mww3_test_07/input/ww3_ounf.nml | 2 +- .../mww3_test_07/input/ww3_ounf_rect1.nml | 2 +- .../mww3_test_07/input/ww3_ounf_zcmpl.nml | 2 +- .../mww3_test_08/i_highres_multi/ww3_ounf.inp | 2 +- .../mww3_test_08/i_highres_multi/ww3_ounf.nml | 2 +- .../mww3_test_08/i_highres_shel/ww3_ounf.inp | 2 +- .../mww3_test_08/i_highres_shel/ww3_ounf.nml | 2 +- .../i_highres_shel_IC1/ww3_ounf.inp | 2 +- .../i_highres_shel_IC1/ww3_ounf.nml | 2 +- .../mww3_test_08/i_lowres_multi/ww3_ounf.inp | 2 +- .../mww3_test_08/i_lowres_multi/ww3_ounf.nml | 2 +- .../mww3_test_08/i_lowres_shel/ww3_ounf.inp | 2 +- .../mww3_test_08/i_lowres_shel/ww3_ounf.nml | 2 +- .../i_lowres_shel_IC1/ww3_ounf.inp | 2 +- .../i_lowres_shel_IC1/ww3_ounf.nml | 2 +- regtests/mww3_test_08/input/ww3_ounf.inp | 2 +- regtests/mww3_test_08/input/ww3_ounf.nml | 2 +- regtests/ww3_ta1/input_UPD0F_O/ww3_ounf.nml | 2 +- regtests/ww3_ta1/input_UPD0F_U/ww3_ounf.nml | 2 +- regtests/ww3_ta1/input_UPD2_O/ww3_ounf.nml | 2 +- regtests/ww3_ta1/input_UPD2_U/ww3_ounf.nml | 2 +- .../ww3_ta1/input_UPD2_U_cap/ww3_ounf.nml | 2 +- regtests/ww3_ta1/input_UPD3_O/ww3_ounf.nml | 2 +- regtests/ww3_ta1/input_UPD3_U/ww3_ounf.nml | 2 +- .../ww3_ta1/input_UPD3_U_cap/ww3_ounf.nml | 2 +- regtests/ww3_tbt1.1/input/ww3_ounf.inp | 2 +- regtests/ww3_tbt1.1/input/ww3_ounf.nml | 2 +- regtests/ww3_tbt2.1/input/ww3_ounf.inp | 2 +- regtests/ww3_tbt2.1/input/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC1/ww3_ounf.inp | 2 +- regtests/ww3_tic1.1/input_IC1/ww3_ounf.nml | 2 +- .../ww3_tic1.1/input_IC1_156x3/ww3_ounf.inp | 2 +- .../ww3_tic1.1/input_IC1_156x3/ww3_ounf.nml | 2 +- .../ww3_tic1.1/input_IC2_ifr/ww3_ounf.inp | 2 +- .../ww3_tic1.1/input_IC2_ifr/ww3_ounf.nml | 2 +- .../ww3_tic1.1/input_IC2_nondisp/ww3_ounf.inp | 2 +- .../ww3_tic1.1/input_IC2_nondisp/ww3_ounf.nml | 2 +- .../ww3_tic1.1/input_IC2_nrl/ww3_ounf.inp | 2 +- .../ww3_tic1.1/input_IC2_nrl/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC3/ww3_ounf.inp | 2 +- regtests/ww3_tic1.1/input_IC3/ww3_ounf.nml | 2 +- .../ww3_tic1.1/input_IC3_nondisp/ww3_ounf.inp | 2 +- .../ww3_tic1.1/input_IC3_nondisp/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC4_M1/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC4_M2/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC4_M3/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC4_M4/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC4_M5/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC4_M6/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC4_M7/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IC5/ww3_ounf.inp | 2 +- regtests/ww3_tic1.1/input_IC5/ww3_ounf.nml | 2 +- regtests/ww3_tic1.1/input_IS2/ww3_ounf.inp | 2 +- regtests/ww3_tic1.1/input_IS2/ww3_ounf.nml | 2 +- .../ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.inp | 2 +- .../ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.nml | 2 +- .../ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.inp | 2 +- .../ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.nml | 2 +- .../ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.inp | 2 +- .../ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.nml | 2 +- .../ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.inp | 2 +- .../ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.nml | 2 +- .../ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.inp | 2 +- .../ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.nml | 2 +- .../ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.inp | 2 +- .../ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.nml | 2 +- .../ww3_tic1.2/input_IC3_CHENG/ww3_ounf.inp | 2 +- .../ww3_tic1.2/input_IC3_CHENG/ww3_ounf.nml | 2 +- .../ww3_tic1.2/input_IC3_V1_G/ww3_ounf.inp | 2 +- .../ww3_tic1.2/input_IC3_V1_G/ww3_ounf.nml | 2 +- .../ww3_tic1.2/input_IC3_V1_h/ww3_ounf.inp | 2 +- .../ww3_tic1.2/input_IC3_V1_h/ww3_ounf.nml | 2 +- .../ww3_tic1.3/input_IC3_0.5k/ww3_ounf.inp | 2 +- .../ww3_tic1.3/input_IC3_0.5k/ww3_ounf.nml | 2 +- .../ww3_tic1.3/input_IC3_2.5k/ww3_ounf.inp | 2 +- .../ww3_tic1.3/input_IC3_2.5k/ww3_ounf.nml | 2 +- .../ww3_tic1.3/input_IC3_CHENG/ww3_ounf.inp | 2 +- .../ww3_tic1.3/input_IC3_CHENG/ww3_ounf.nml | 2 +- .../ww3_tic1.3/input_IC3_V1_G/ww3_ounf.inp | 2 +- .../ww3_tic1.3/input_IC3_V1_G/ww3_ounf.nml | 2 +- .../ww3_tic1.3/input_IC3_V1_h/ww3_ounf.inp | 2 +- .../ww3_tic1.3/input_IC3_V1_h/ww3_ounf.nml | 2 +- regtests/ww3_tic1.4/input/ww3_ounf.inp | 2 +- regtests/ww3_tic1.4/input/ww3_ounf.nml | 2 +- regtests/ww3_tic2.1/input_IC1/ww3_ounf.inp | 2 +- regtests/ww3_tic2.1/input_IC1/ww3_ounf.nml | 2 +- regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.inp | 2 +- regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.nml | 2 +- regtests/ww3_tic2.2/input/ww3_ounf.inp | 2 +- regtests/ww3_tic2.2/input/ww3_ounf.nml | 2 +- regtests/ww3_tic2.2/input_IC2/ww3_ounf.inp | 2 +- regtests/ww3_tic2.2/input_IC2/ww3_ounf.nml | 2 +- regtests/ww3_tic2.3/input/ww3_ounf.inp | 2 +- regtests/ww3_tic2.3/input/ww3_ounf.nml | 2 +- regtests/ww3_tp1.1/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.1/input/ww3_ounf.nml | 2 +- regtests/ww3_tp1.1/input2/ww3_ounf.nml | 2 +- regtests/ww3_tp1.10/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.10/input/ww3_ounf.nml | 2 +- regtests/ww3_tp1.2/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.2/input/ww3_ounf.nml | 2 +- regtests/ww3_tp1.3/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.3/input/ww3_ounf.nml | 3 ++- regtests/ww3_tp1.4/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.4/input/ww3_ounf.nml | 2 +- regtests/ww3_tp1.5/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.5/input/ww3_ounf.nml | 2 +- regtests/ww3_tp1.6/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.6/input/ww3_ounf.nml | 2 +- regtests/ww3_tp1.7/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.7/input/ww3_ounf.nml | 2 +- regtests/ww3_tp1.7/input_OBST/ww3_ounf.nml | 2 +- regtests/ww3_tp1.8/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.8/input/ww3_ounf.nml | 2 +- regtests/ww3_tp1.8/input_BJ/ww3_ounf.nml | 2 +- regtests/ww3_tp1.9/input/ww3_ounf.inp | 2 +- regtests/ww3_tp1.9/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.1/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.1/input/ww3_ounf.nml | 2 +- .../ww3_tp2.1/input/ww3_ounf_flds_hrly.inp | 2 +- .../ww3_tp2.1/input/ww3_ounf_flds_hrly.nml | 2 +- regtests/ww3_tp2.10/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.11/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.13/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.14/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.14/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.15/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.15/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.16/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.16/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.17/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.2/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.2/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.3/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.3/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.4/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.4/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.5/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.5/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.5/input_REF/ww3_ounf.nml | 2 +- regtests/ww3_tp2.6/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.7/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.7/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.8/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.8/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.9/input/ww3_ounf.nml | 2 +- .../ww3_tp2.9/input/ww3_ounf_flds_hrly.nml | 2 +- regtests/ww3_ts1/input/ww3_ounf.nml | 2 +- regtests/ww3_ts1/input_fld/ww3_ounf.nml | 2 +- regtests/ww3_ts3/input/ww3_ounf.inp | 2 +- regtests/ww3_ts3/input/ww3_ounf.nml | 2 +- regtests/ww3_ts4/input_rg_multi/ww3_ounf.nml | 2 +- regtests/ww3_ts4/input_rg_shel/ww3_ounf.nml | 2 +- regtests/ww3_ts4/input_ug/ww3_ounf.nml | 2 +- 170 files changed, 187 insertions(+), 178 deletions(-) diff --git a/model/aux/bash/ww3_ounf_inp2nml.sh b/model/aux/bash/ww3_ounf_inp2nml.sh index 4cc002225..db64c24e9 100755 --- a/model/aux/bash/ww3_ounf_inp2nml.sh +++ b/model/aux/bash/ww3_ounf_inp2nml.sh @@ -182,7 +182,7 @@ cat >> $nmlfile << EOF ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 0afcd5406..a0313397e 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -97,7 +97,7 @@ shared mpp mpiexp thread GSE prop \ stress s_ln source stab s_nl snls s_bot s_db miche s_tr s_bs \ dstress s_ice s_is reflection s_xx \ - wind windx rwind curr currx mgwind mgprop mggse \ + wind windx wcor rwind curr currx mgwind mgprop mggse \ subsec tdyn dss0 pdif tide refrx ig rotag arctic nnt mprf \ cou oasis agcm ogcm igcm trknc setup pdlib memck uost do @@ -247,6 +247,11 @@ windx ) TY='one' ID='wind interpolation in space' OK='WNX0 WNX1 WNX2' ;; +#sort:wcor: + wcor ) TY='upto1' + ID='wind speed correction' + TS='WCOR' + OK='WCOR' ;; #sort:rwind: rwind ) TY='upto1' ID='wind vs. current definition' diff --git a/model/ftn/w3triamd.ftn b/model/ftn/w3triamd.ftn index 9c8199d57..57b8250cb 100755 --- a/model/ftn/w3triamd.ftn +++ b/model/ftn/w3triamd.ftn @@ -666,7 +666,10 @@ CONTAINS DO IBC = 1, N_OUTSIDE_BOUNDARY IX = OUTSIDE_BOUNDARY(IBC) !write(*,*) 'TEST1', IX, TMPSTA(1,IX), CCON(IX), COUNTCON(IX), ZBIN(1,IX), ZLIM - IF (IX.NE.0) THEN ! There was a bug in the mesh conversion, OUTSIDE_BOUNDARY(IBC) should not be zero + + ! OUTSIDE_BOUNDARY(IBC) is defined over the full nodes NODES indexes + ! whereas TMPSTA and ZBIN are defined over the clean up list of nodes NX + IF ((IX.NE.0).AND.(IX.LE.NX)) THEN IF ((TMPSTA(1,IX).EQ.1).AND.(STATUS(IX).EQ.0) & .AND.(ZBIN(1,IX).LT.ZLIM)) TMPSTA(1,IX)=2 END IF diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 5d6d9e9a7..6c27d39ff 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -157,10 +157,9 @@ IOUT, S3, IRET, HASNC4, & NBIPART, CNTIPART, NCVARTYPE, IPART, & RTDNX, RTDNY - INTEGER :: TOUT(2), TDUM(2), & - NCIDS(NOGRP,NGRPP,6), STOPDATE(8) + INTEGER :: TOUT(2), TDUM(2), STOPDATE(8) ! - INTEGER, ALLOCATABLE :: TABIPART(:) + INTEGER, ALLOCATABLE :: TABIPART(:), NCIDS(:,:,:) ! !/S INTEGER, SAVE :: IENT = 0 ! @@ -383,6 +382,7 @@ ! Alternative processing of TABIPART to capture requests ! greater than NOSWLL (C.Bunney): ALLOCATE(TABIPART(NOSWLL + 1)) + ALLOCATE(NCIDS(NOGRP,NGRPP,NOSWLL + 1)) NBIPART=0 DO I=1,30 IF(STRINGIPART(I:I) .EQ. ' ') CYCLE @@ -874,17 +874,21 @@ ! 1.2 Sets the date as ISO8601 convention ! S3 defines the number of characters in the date for the filename - ! S3=4-> YYYY, S3=6 -> YYYYMM, S3=10 -> YYYYMMDDHH + ! S3=0 -> field, S3=4-> YYYY, S3=6 -> YYYYMM, S3=10 -> YYYYMMDDHH ! Setups min and max date format - IF (S3.LT.4) S3=4 + IF (S3.GT.0 .AND. S3.LT.4) S3=4 IF (S3.GT.10) S3=10 ! ! Defines the format of FILETIME S5=S3-8 S4=S3 OLDTIMEID=TIMEID + ! if S3=>nodate then filetime='field' + IF (S3.EQ.0) THEN + S4=5 + TIMEID="field" ! if S3=>YYYYMMDDHH then filetime='YYYYMMDDTHHZ' - IF (S3.EQ.10) THEN + ELSE IF (S3.EQ.10) THEN S4=S4+2 ! add chars for ISO8601 : day T hours Z WRITE(FORMAT1,'(A,I1,A,I1,A)') '(I8.8,A1,I',S5,'.',S5,',A1)' WRITE (TIMEID,FORMAT1) TIME(1), 'T', & @@ -3398,9 +3402,6 @@ FNAMENC(S1+S2+1:S1+S2+3) = '.nc' FNAMENC(S1+S2+4:S1+S2+6) = ' ' -!/NCO ! For NCEP application, requires fixed netcdf file name -!/NCO FNAMENC='ww3.gridded.nc' - ! If the flag frequency is .TRUE., defines the fourth dimension IF (FLFRQ) THEN UNITVAR(:)=UNITS diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index a288125ce..c123ea717 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -1297,7 +1297,6 @@ ELSE IF ( J .EQ. 6 ) THEN ! IPRT: IX0, IXN, IXS, IY0, IYN, IYS CALL NEXTLN ( COMSTR , NDSI , NDSEN ) - READ (NDSI,*,END=2001,ERR=2002) IPRT, PRTFRM !/DEBUGINIT write(740+IAPROC,*), 'Before reading IPRT' !/DEBUGINIT write(740+IAPROC,*), 'Before read 2002, case 10' READ (NDSI,*) IPRT, PRTFRM diff --git a/model/inp/ww3_ounf.inp b/model/inp/ww3_ounf.inp index f30b18f2f..162a7d0ba 100644 --- a/model/inp/ww3_ounf.inp +++ b/model/inp/ww3_ounf.inp @@ -33,7 +33,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/model/nml/ww3_ounf.nml b/model/nml/ww3_ounf.nml index fa8177278..d57d22c5a 100644 --- a/model/nml/ww3_ounf.nml +++ b/model/nml/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file diff --git a/regtests/mww3_test_01/input/ww3_ounf.nml b/regtests/mww3_test_01/input/ww3_ounf.nml index b0a860836..dce88981e 100644 --- a/regtests/mww3_test_01/input/ww3_ounf.nml +++ b/regtests/mww3_test_01/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_02/input/ww3_ounf.nml b/regtests/mww3_test_02/input/ww3_ounf.nml index c4d430428..466e66cda 100644 --- a/regtests/mww3_test_02/input/ww3_ounf.nml +++ b/regtests/mww3_test_02/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_03/input/ww3_ounf.nml b/regtests/mww3_test_03/input/ww3_ounf.nml index b0a860836..dce88981e 100644 --- a/regtests/mww3_test_03/input/ww3_ounf.nml +++ b/regtests/mww3_test_03/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_04/input/ww3_ounf.inp b/regtests/mww3_test_04/input/ww3_ounf.inp index 0626cdb1d..704c8997c 100644 --- a/regtests/mww3_test_04/input/ww3_ounf.inp +++ b/regtests/mww3_test_04/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_04/input/ww3_ounf.nml b/regtests/mww3_test_04/input/ww3_ounf.nml index 24593c224..9f12b73a3 100644 --- a/regtests/mww3_test_04/input/ww3_ounf.nml +++ b/regtests/mww3_test_04/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_05/input/ww3_ounf.inp b/regtests/mww3_test_05/input/ww3_ounf.inp index f003b3ff8..b9aba86e3 100644 --- a/regtests/mww3_test_05/input/ww3_ounf.inp +++ b/regtests/mww3_test_05/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_05/input/ww3_ounf.nml b/regtests/mww3_test_05/input/ww3_ounf.nml index f5fc6d7c9..215362f9d 100644 --- a/regtests/mww3_test_05/input/ww3_ounf.nml +++ b/regtests/mww3_test_05/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_06/input/ww3_ounf.inp b/regtests/mww3_test_06/input/ww3_ounf.inp index 8e244f1c0..a9abd4a3f 100644 --- a/regtests/mww3_test_06/input/ww3_ounf.inp +++ b/regtests/mww3_test_06/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_06/input/ww3_ounf.nml b/regtests/mww3_test_06/input/ww3_ounf.nml index 0e38e3c57..edaa6389f 100644 --- a/regtests/mww3_test_06/input/ww3_ounf.nml +++ b/regtests/mww3_test_06/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_07/input/ww3_ounf.nml b/regtests/mww3_test_07/input/ww3_ounf.nml index 7f92a7ae1..03c16bef8 100644 --- a/regtests/mww3_test_07/input/ww3_ounf.nml +++ b/regtests/mww3_test_07/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_07/input/ww3_ounf_rect1.nml b/regtests/mww3_test_07/input/ww3_ounf_rect1.nml index 7f92a7ae1..03c16bef8 100644 --- a/regtests/mww3_test_07/input/ww3_ounf_rect1.nml +++ b/regtests/mww3_test_07/input/ww3_ounf_rect1.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_07/input/ww3_ounf_zcmpl.nml b/regtests/mww3_test_07/input/ww3_ounf_zcmpl.nml index 7f92a7ae1..03c16bef8 100644 --- a/regtests/mww3_test_07/input/ww3_ounf_zcmpl.nml +++ b/regtests/mww3_test_07/input/ww3_ounf_zcmpl.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_08/i_highres_multi/ww3_ounf.inp b/regtests/mww3_test_08/i_highres_multi/ww3_ounf.inp index dc78ec82d..665a23525 100644 --- a/regtests/mww3_test_08/i_highres_multi/ww3_ounf.inp +++ b/regtests/mww3_test_08/i_highres_multi/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_08/i_highres_multi/ww3_ounf.nml b/regtests/mww3_test_08/i_highres_multi/ww3_ounf.nml index 13e86563d..88698915f 100644 --- a/regtests/mww3_test_08/i_highres_multi/ww3_ounf.nml +++ b/regtests/mww3_test_08/i_highres_multi/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_08/i_highres_shel/ww3_ounf.inp b/regtests/mww3_test_08/i_highres_shel/ww3_ounf.inp index dc78ec82d..665a23525 100644 --- a/regtests/mww3_test_08/i_highres_shel/ww3_ounf.inp +++ b/regtests/mww3_test_08/i_highres_shel/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_08/i_highres_shel/ww3_ounf.nml b/regtests/mww3_test_08/i_highres_shel/ww3_ounf.nml index 13e86563d..88698915f 100644 --- a/regtests/mww3_test_08/i_highres_shel/ww3_ounf.nml +++ b/regtests/mww3_test_08/i_highres_shel/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_ounf.inp b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_ounf.inp index dc78ec82d..665a23525 100644 --- a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_ounf.inp +++ b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_ounf.nml b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_ounf.nml index 13e86563d..88698915f 100644 --- a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_ounf.nml +++ b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_08/i_lowres_multi/ww3_ounf.inp b/regtests/mww3_test_08/i_lowres_multi/ww3_ounf.inp index dc78ec82d..665a23525 100644 --- a/regtests/mww3_test_08/i_lowres_multi/ww3_ounf.inp +++ b/regtests/mww3_test_08/i_lowres_multi/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_08/i_lowres_multi/ww3_ounf.nml b/regtests/mww3_test_08/i_lowres_multi/ww3_ounf.nml index 13e86563d..88698915f 100644 --- a/regtests/mww3_test_08/i_lowres_multi/ww3_ounf.nml +++ b/regtests/mww3_test_08/i_lowres_multi/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_08/i_lowres_shel/ww3_ounf.inp b/regtests/mww3_test_08/i_lowres_shel/ww3_ounf.inp index dc78ec82d..665a23525 100644 --- a/regtests/mww3_test_08/i_lowres_shel/ww3_ounf.inp +++ b/regtests/mww3_test_08/i_lowres_shel/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_08/i_lowres_shel/ww3_ounf.nml b/regtests/mww3_test_08/i_lowres_shel/ww3_ounf.nml index 13e86563d..88698915f 100644 --- a/regtests/mww3_test_08/i_lowres_shel/ww3_ounf.nml +++ b/regtests/mww3_test_08/i_lowres_shel/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_ounf.inp b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_ounf.inp index dc78ec82d..665a23525 100644 --- a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_ounf.inp +++ b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_ounf.nml b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_ounf.nml index 13e86563d..88698915f 100644 --- a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_ounf.nml +++ b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/mww3_test_08/input/ww3_ounf.inp b/regtests/mww3_test_08/input/ww3_ounf.inp index dc78ec82d..665a23525 100644 --- a/regtests/mww3_test_08/input/ww3_ounf.inp +++ b/regtests/mww3_test_08/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/mww3_test_08/input/ww3_ounf.nml b/regtests/mww3_test_08/input/ww3_ounf.nml index 13e86563d..88698915f 100644 --- a/regtests/mww3_test_08/input/ww3_ounf.nml +++ b/regtests/mww3_test_08/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ta1/input_UPD0F_O/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD0F_O/ww3_ounf.nml index 2eef25018..1d58e1dcb 100644 --- a/regtests/ww3_ta1/input_UPD0F_O/ww3_ounf.nml +++ b/regtests/ww3_ta1/input_UPD0F_O/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ta1/input_UPD0F_U/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD0F_U/ww3_ounf.nml index 2eef25018..1d58e1dcb 100644 --- a/regtests/ww3_ta1/input_UPD0F_U/ww3_ounf.nml +++ b/regtests/ww3_ta1/input_UPD0F_U/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ta1/input_UPD2_O/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD2_O/ww3_ounf.nml index 2eef25018..1d58e1dcb 100644 --- a/regtests/ww3_ta1/input_UPD2_O/ww3_ounf.nml +++ b/regtests/ww3_ta1/input_UPD2_O/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ta1/input_UPD2_U/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD2_U/ww3_ounf.nml index 2eef25018..1d58e1dcb 100644 --- a/regtests/ww3_ta1/input_UPD2_U/ww3_ounf.nml +++ b/regtests/ww3_ta1/input_UPD2_U/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_ounf.nml index 2eef25018..1d58e1dcb 100644 --- a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_ounf.nml +++ b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ta1/input_UPD3_O/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD3_O/ww3_ounf.nml index 2eef25018..1d58e1dcb 100644 --- a/regtests/ww3_ta1/input_UPD3_O/ww3_ounf.nml +++ b/regtests/ww3_ta1/input_UPD3_O/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ta1/input_UPD3_U/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD3_U/ww3_ounf.nml index 2eef25018..1d58e1dcb 100644 --- a/regtests/ww3_ta1/input_UPD3_U/ww3_ounf.nml +++ b/regtests/ww3_ta1/input_UPD3_U/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_ounf.nml index 2eef25018..1d58e1dcb 100644 --- a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_ounf.nml +++ b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tbt1.1/input/ww3_ounf.inp b/regtests/ww3_tbt1.1/input/ww3_ounf.inp index 2ffd8881f..050f3b8bb 100644 --- a/regtests/ww3_tbt1.1/input/ww3_ounf.inp +++ b/regtests/ww3_tbt1.1/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tbt1.1/input/ww3_ounf.nml b/regtests/ww3_tbt1.1/input/ww3_ounf.nml index a9ee93f03..205bfe693 100644 --- a/regtests/ww3_tbt1.1/input/ww3_ounf.nml +++ b/regtests/ww3_tbt1.1/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tbt2.1/input/ww3_ounf.inp b/regtests/ww3_tbt2.1/input/ww3_ounf.inp index 2ffd8881f..050f3b8bb 100644 --- a/regtests/ww3_tbt2.1/input/ww3_ounf.inp +++ b/regtests/ww3_tbt2.1/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tbt2.1/input/ww3_ounf.nml b/regtests/ww3_tbt2.1/input/ww3_ounf.nml index a9ee93f03..205bfe693 100644 --- a/regtests/ww3_tbt2.1/input/ww3_ounf.nml +++ b/regtests/ww3_tbt2.1/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC1/ww3_ounf.inp b/regtests/ww3_tic1.1/input_IC1/ww3_ounf.inp index 7840039dc..9e017400a 100644 --- a/regtests/ww3_tic1.1/input_IC1/ww3_ounf.inp +++ b/regtests/ww3_tic1.1/input_IC1/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.1/input_IC1/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC1/ww3_ounf.nml index 4880e853d..bb8f38547 100644 --- a/regtests/ww3_tic1.1/input_IC1/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC1/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC1_156x3/ww3_ounf.inp b/regtests/ww3_tic1.1/input_IC1_156x3/ww3_ounf.inp index 7840039dc..9e017400a 100644 --- a/regtests/ww3_tic1.1/input_IC1_156x3/ww3_ounf.inp +++ b/regtests/ww3_tic1.1/input_IC1_156x3/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.1/input_IC1_156x3/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC1_156x3/ww3_ounf.nml index 4880e853d..bb8f38547 100644 --- a/regtests/ww3_tic1.1/input_IC1_156x3/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC1_156x3/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC2_ifr/ww3_ounf.inp b/regtests/ww3_tic1.1/input_IC2_ifr/ww3_ounf.inp index 417f9c976..e74db75f4 100644 --- a/regtests/ww3_tic1.1/input_IC2_ifr/ww3_ounf.inp +++ b/regtests/ww3_tic1.1/input_IC2_ifr/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.1/input_IC2_ifr/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC2_ifr/ww3_ounf.nml index 7cb7aa9d6..50b21f3cb 100644 --- a/regtests/ww3_tic1.1/input_IC2_ifr/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC2_ifr/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_ounf.inp b/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_ounf.inp index 7840039dc..9e017400a 100644 --- a/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_ounf.inp +++ b/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_ounf.nml index 4880e853d..bb8f38547 100644 --- a/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC2_nrl/ww3_ounf.inp b/regtests/ww3_tic1.1/input_IC2_nrl/ww3_ounf.inp index 7840039dc..9e017400a 100644 --- a/regtests/ww3_tic1.1/input_IC2_nrl/ww3_ounf.inp +++ b/regtests/ww3_tic1.1/input_IC2_nrl/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.1/input_IC2_nrl/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC2_nrl/ww3_ounf.nml index 4880e853d..bb8f38547 100644 --- a/regtests/ww3_tic1.1/input_IC2_nrl/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC2_nrl/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC3/ww3_ounf.inp b/regtests/ww3_tic1.1/input_IC3/ww3_ounf.inp index 7840039dc..9e017400a 100644 --- a/regtests/ww3_tic1.1/input_IC3/ww3_ounf.inp +++ b/regtests/ww3_tic1.1/input_IC3/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.1/input_IC3/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC3/ww3_ounf.nml index 4880e853d..bb8f38547 100644 --- a/regtests/ww3_tic1.1/input_IC3/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC3/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_ounf.inp b/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_ounf.inp index 7840039dc..9e017400a 100644 --- a/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_ounf.inp +++ b/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_ounf.nml index 4880e853d..bb8f38547 100644 --- a/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC4_M1/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC4_M1/ww3_ounf.nml index 9629765e1..d13d4d034 100644 --- a/regtests/ww3_tic1.1/input_IC4_M1/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC4_M1/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC4_M2/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC4_M2/ww3_ounf.nml index 9629765e1..d13d4d034 100644 --- a/regtests/ww3_tic1.1/input_IC4_M2/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC4_M2/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC4_M3/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC4_M3/ww3_ounf.nml index 9629765e1..d13d4d034 100644 --- a/regtests/ww3_tic1.1/input_IC4_M3/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC4_M3/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC4_M4/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC4_M4/ww3_ounf.nml index 9629765e1..d13d4d034 100644 --- a/regtests/ww3_tic1.1/input_IC4_M4/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC4_M4/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC4_M5/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC4_M5/ww3_ounf.nml index 9629765e1..d13d4d034 100644 --- a/regtests/ww3_tic1.1/input_IC4_M5/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC4_M5/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC4_M6/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC4_M6/ww3_ounf.nml index 9629765e1..d13d4d034 100644 --- a/regtests/ww3_tic1.1/input_IC4_M6/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC4_M6/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC4_M7/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC4_M7/ww3_ounf.nml index 9629765e1..d13d4d034 100644 --- a/regtests/ww3_tic1.1/input_IC4_M7/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC4_M7/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IC5/ww3_ounf.inp b/regtests/ww3_tic1.1/input_IC5/ww3_ounf.inp index 7840039dc..9e017400a 100644 --- a/regtests/ww3_tic1.1/input_IC5/ww3_ounf.inp +++ b/regtests/ww3_tic1.1/input_IC5/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.1/input_IC5/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IC5/ww3_ounf.nml index 4880e853d..bb8f38547 100644 --- a/regtests/ww3_tic1.1/input_IC5/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IC5/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.1/input_IS2/ww3_ounf.inp b/regtests/ww3_tic1.1/input_IS2/ww3_ounf.inp index ee3bc1b98..6b487b802 100644 --- a/regtests/ww3_tic1.1/input_IS2/ww3_ounf.inp +++ b/regtests/ww3_tic1.1/input_IS2/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.1/input_IS2/ww3_ounf.nml b/regtests/ww3_tic1.1/input_IS2/ww3_ounf.nml index 2741ad07e..58191cda2 100644 --- a/regtests/ww3_tic1.1/input_IS2/ww3_ounf.nml +++ b/regtests/ww3_tic1.1/input_IS2/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.inp b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.inp index c091215e8..44e810c23 100644 --- a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.inp +++ b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.nml b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.nml index f58ba1795..b28efebc9 100644 --- a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.nml +++ b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.inp b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.inp index c091215e8..44e810c23 100644 --- a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.inp +++ b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.nml b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.nml index f58ba1795..b28efebc9 100644 --- a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.nml +++ b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.inp b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.inp index c091215e8..44e810c23 100644 --- a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.inp +++ b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.nml b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.nml index f58ba1795..b28efebc9 100644 --- a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.nml +++ b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.inp b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.inp index c091215e8..44e810c23 100644 --- a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.inp +++ b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.nml b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.nml index f58ba1795..b28efebc9 100644 --- a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.nml +++ b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.inp b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.inp index c091215e8..44e810c23 100644 --- a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.inp +++ b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.nml b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.nml index f58ba1795..b28efebc9 100644 --- a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.nml +++ b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.inp b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.inp index c091215e8..44e810c23 100644 --- a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.inp +++ b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.nml b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.nml index f58ba1795..b28efebc9 100644 --- a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.nml +++ b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounf.inp b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounf.inp index 4b3f935c2..1feeb5659 100644 --- a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounf.inp +++ b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounf.nml b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounf.nml index 1c9d3690f..87b76936b 100644 --- a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounf.nml +++ b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounf.inp b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounf.inp index ac02b4890..e4bd5fd37 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounf.inp +++ b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounf.nml b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounf.nml index 207192bea..f742adafd 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounf.nml +++ b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounf.inp b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounf.inp index ac02b4890..e4bd5fd37 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounf.inp +++ b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounf.nml b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounf.nml index 207192bea..f742adafd 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounf.nml +++ b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounf.inp b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounf.inp index ac02b4890..e4bd5fd37 100644 --- a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounf.inp +++ b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounf.nml b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounf.nml index 207192bea..f742adafd 100644 --- a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounf.nml +++ b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounf.inp b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounf.inp index ac02b4890..e4bd5fd37 100644 --- a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounf.inp +++ b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounf.nml b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounf.nml index 207192bea..f742adafd 100644 --- a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounf.nml +++ b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounf.inp b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounf.inp index ac02b4890..e4bd5fd37 100644 --- a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounf.inp +++ b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounf.nml b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounf.nml index 207192bea..f742adafd 100644 --- a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounf.nml +++ b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounf.inp b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounf.inp index ac02b4890..e4bd5fd37 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounf.inp +++ b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounf.nml b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounf.nml index 207192bea..f742adafd 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounf.nml +++ b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounf.inp b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounf.inp index ac02b4890..e4bd5fd37 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounf.inp +++ b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounf.nml b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounf.nml index 207192bea..f742adafd 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounf.nml +++ b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic1.4/input/ww3_ounf.inp b/regtests/ww3_tic1.4/input/ww3_ounf.inp index 5a9e09ee9..fd9ab4d08 100755 --- a/regtests/ww3_tic1.4/input/ww3_ounf.inp +++ b/regtests/ww3_tic1.4/input/ww3_ounf.inp @@ -33,7 +33,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic1.4/input/ww3_ounf.nml b/regtests/ww3_tic1.4/input/ww3_ounf.nml index 8fc0013b2..a559cdbbb 100644 --- a/regtests/ww3_tic1.4/input/ww3_ounf.nml +++ b/regtests/ww3_tic1.4/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic2.1/input_IC1/ww3_ounf.inp b/regtests/ww3_tic2.1/input_IC1/ww3_ounf.inp index 93dcedd5b..ec8a30542 100644 --- a/regtests/ww3_tic2.1/input_IC1/ww3_ounf.inp +++ b/regtests/ww3_tic2.1/input_IC1/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic2.1/input_IC1/ww3_ounf.nml b/regtests/ww3_tic2.1/input_IC1/ww3_ounf.nml index d3a3a2916..f1eaa40da 100644 --- a/regtests/ww3_tic2.1/input_IC1/ww3_ounf.nml +++ b/regtests/ww3_tic2.1/input_IC1/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.inp b/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.inp index 93dcedd5b..ec8a30542 100644 --- a/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.inp +++ b/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.nml b/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.nml index d3a3a2916..f1eaa40da 100644 --- a/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.nml +++ b/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic2.2/input/ww3_ounf.inp b/regtests/ww3_tic2.2/input/ww3_ounf.inp index c77330395..5bef7ef7a 100644 --- a/regtests/ww3_tic2.2/input/ww3_ounf.inp +++ b/regtests/ww3_tic2.2/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic2.2/input/ww3_ounf.nml b/regtests/ww3_tic2.2/input/ww3_ounf.nml index 99c986fe1..9c21eb069 100644 --- a/regtests/ww3_tic2.2/input/ww3_ounf.nml +++ b/regtests/ww3_tic2.2/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic2.2/input_IC2/ww3_ounf.inp b/regtests/ww3_tic2.2/input_IC2/ww3_ounf.inp index c77330395..5bef7ef7a 100644 --- a/regtests/ww3_tic2.2/input_IC2/ww3_ounf.inp +++ b/regtests/ww3_tic2.2/input_IC2/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic2.2/input_IC2/ww3_ounf.nml b/regtests/ww3_tic2.2/input_IC2/ww3_ounf.nml index 99c986fe1..9c21eb069 100644 --- a/regtests/ww3_tic2.2/input_IC2/ww3_ounf.nml +++ b/regtests/ww3_tic2.2/input_IC2/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tic2.3/input/ww3_ounf.inp b/regtests/ww3_tic2.3/input/ww3_ounf.inp index fbcbdeca3..8ba98aa5e 100755 --- a/regtests/ww3_tic2.3/input/ww3_ounf.inp +++ b/regtests/ww3_tic2.3/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tic2.3/input/ww3_ounf.nml b/regtests/ww3_tic2.3/input/ww3_ounf.nml index a456c135b..4aa585d07 100644 --- a/regtests/ww3_tic2.3/input/ww3_ounf.nml +++ b/regtests/ww3_tic2.3/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.1/input/ww3_ounf.inp b/regtests/ww3_tp1.1/input/ww3_ounf.inp index 18fee4a56..b863b4fe4 100644 --- a/regtests/ww3_tp1.1/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.1/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.1/input/ww3_ounf.nml b/regtests/ww3_tp1.1/input/ww3_ounf.nml index e764b41b1..2b11b0451 100644 --- a/regtests/ww3_tp1.1/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.1/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.1/input2/ww3_ounf.nml b/regtests/ww3_tp1.1/input2/ww3_ounf.nml index 1249cceda..7b1f707ea 100644 --- a/regtests/ww3_tp1.1/input2/ww3_ounf.nml +++ b/regtests/ww3_tp1.1/input2/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.10/input/ww3_ounf.inp b/regtests/ww3_tp1.10/input/ww3_ounf.inp index 527ea7902..57665d0e3 100644 --- a/regtests/ww3_tp1.10/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.10/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.10/input/ww3_ounf.nml b/regtests/ww3_tp1.10/input/ww3_ounf.nml index c58576e60..8c982e9f3 100644 --- a/regtests/ww3_tp1.10/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.10/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.2/input/ww3_ounf.inp b/regtests/ww3_tp1.2/input/ww3_ounf.inp index 1a5fb9f56..03f00553c 100644 --- a/regtests/ww3_tp1.2/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.2/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.2/input/ww3_ounf.nml b/regtests/ww3_tp1.2/input/ww3_ounf.nml index 90861d44b..fb956d680 100644 --- a/regtests/ww3_tp1.2/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.2/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.3/input/ww3_ounf.inp b/regtests/ww3_tp1.3/input/ww3_ounf.inp index 2ca999afb..7371ea97f 100644 --- a/regtests/ww3_tp1.3/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.3/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.3/input/ww3_ounf.nml b/regtests/ww3_tp1.3/input/ww3_ounf.nml index c0c714b7b..6619cf3d8 100644 --- a/regtests/ww3_tp1.3/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.3/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] @@ -33,6 +33,7 @@ FIELD%TIMESTART = '19680606 000000' FIELD%TIMESTRIDE = '3600.' FIELD%TIMECOUNT = '1000' + FIELD%TIMESPLIT = 6 FIELD%LIST = 'DPT HS FC CFX' FIELD%PARTITION = '0 1 2' FIELD%TYPE = 4 diff --git a/regtests/ww3_tp1.4/input/ww3_ounf.inp b/regtests/ww3_tp1.4/input/ww3_ounf.inp index 5492fd164..3195e813d 100644 --- a/regtests/ww3_tp1.4/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.4/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.4/input/ww3_ounf.nml b/regtests/ww3_tp1.4/input/ww3_ounf.nml index 6fe800a28..de17d91be 100644 --- a/regtests/ww3_tp1.4/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.4/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.5/input/ww3_ounf.inp b/regtests/ww3_tp1.5/input/ww3_ounf.inp index b519a575a..a9be6f2cd 100644 --- a/regtests/ww3_tp1.5/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.5/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.5/input/ww3_ounf.nml b/regtests/ww3_tp1.5/input/ww3_ounf.nml index cf0b1b66e..e81b7a530 100644 --- a/regtests/ww3_tp1.5/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.5/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.6/input/ww3_ounf.inp b/regtests/ww3_tp1.6/input/ww3_ounf.inp index 31d88a584..8ab4cf90d 100644 --- a/regtests/ww3_tp1.6/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.6/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.6/input/ww3_ounf.nml b/regtests/ww3_tp1.6/input/ww3_ounf.nml index 67ce6acc8..dd7fb918a 100644 --- a/regtests/ww3_tp1.6/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.6/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.7/input/ww3_ounf.inp b/regtests/ww3_tp1.7/input/ww3_ounf.inp index 66a9477d6..7d0438ed9 100644 --- a/regtests/ww3_tp1.7/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.7/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.7/input/ww3_ounf.nml b/regtests/ww3_tp1.7/input/ww3_ounf.nml index a14907b20..174936359 100644 --- a/regtests/ww3_tp1.7/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.7/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.7/input_OBST/ww3_ounf.nml b/regtests/ww3_tp1.7/input_OBST/ww3_ounf.nml index 3402bd08c..27ee0f599 100644 --- a/regtests/ww3_tp1.7/input_OBST/ww3_ounf.nml +++ b/regtests/ww3_tp1.7/input_OBST/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.8/input/ww3_ounf.inp b/regtests/ww3_tp1.8/input/ww3_ounf.inp index 0a075dd65..7dfef7253 100755 --- a/regtests/ww3_tp1.8/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.8/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.8/input/ww3_ounf.nml b/regtests/ww3_tp1.8/input/ww3_ounf.nml index 2a61be067..d6c8c59ce 100644 --- a/regtests/ww3_tp1.8/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.8/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.8/input_BJ/ww3_ounf.nml b/regtests/ww3_tp1.8/input_BJ/ww3_ounf.nml index 0e4300c21..9b1045771 100644 --- a/regtests/ww3_tp1.8/input_BJ/ww3_ounf.nml +++ b/regtests/ww3_tp1.8/input_BJ/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp1.9/input/ww3_ounf.inp b/regtests/ww3_tp1.9/input/ww3_ounf.inp index 164aeea7f..b2dca6d70 100644 --- a/regtests/ww3_tp1.9/input/ww3_ounf.inp +++ b/regtests/ww3_tp1.9/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp1.9/input/ww3_ounf.nml b/regtests/ww3_tp1.9/input/ww3_ounf.nml index ce690708f..82bbd73fa 100644 --- a/regtests/ww3_tp1.9/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.9/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.1/input/ww3_ounf.inp b/regtests/ww3_tp2.1/input/ww3_ounf.inp index fe1a2940c..56774896a 100644 --- a/regtests/ww3_tp2.1/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.1/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.1/input/ww3_ounf.nml b/regtests/ww3_tp2.1/input/ww3_ounf.nml index 86bbe08b2..807d2576c 100644 --- a/regtests/ww3_tp2.1/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.1/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.1/input/ww3_ounf_flds_hrly.inp b/regtests/ww3_tp2.1/input/ww3_ounf_flds_hrly.inp index 6873a0300..d50d9d096 100644 --- a/regtests/ww3_tp2.1/input/ww3_ounf_flds_hrly.inp +++ b/regtests/ww3_tp2.1/input/ww3_ounf_flds_hrly.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.1/input/ww3_ounf_flds_hrly.nml b/regtests/ww3_tp2.1/input/ww3_ounf_flds_hrly.nml index 209bd1384..b7972bdeb 100644 --- a/regtests/ww3_tp2.1/input/ww3_ounf_flds_hrly.nml +++ b/regtests/ww3_tp2.1/input/ww3_ounf_flds_hrly.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.10/input/ww3_ounf.nml b/regtests/ww3_tp2.10/input/ww3_ounf.nml index 4d85daba1..eeff7aac3 100644 --- a/regtests/ww3_tp2.10/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.10/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.11/input/ww3_ounf.nml b/regtests/ww3_tp2.11/input/ww3_ounf.nml index d6c1d0051..a7109f70c 100644 --- a/regtests/ww3_tp2.11/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.11/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.13/input/ww3_ounf.nml b/regtests/ww3_tp2.13/input/ww3_ounf.nml index 339b1ebd8..59a71ab9d 100644 --- a/regtests/ww3_tp2.13/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.13/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.14/input/ww3_ounf.inp b/regtests/ww3_tp2.14/input/ww3_ounf.inp index b0e17e2bd..d5a240375 100755 --- a/regtests/ww3_tp2.14/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.14/input/ww3_ounf.inp @@ -25,7 +25,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY DX DY, unstructured:IP NP DP DP] $ ww3. diff --git a/regtests/ww3_tp2.14/input/ww3_ounf.nml b/regtests/ww3_tp2.14/input/ww3_ounf.nml index 61816516b..6157d667d 100644 --- a/regtests/ww3_tp2.14/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.14/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.15/input/ww3_ounf.inp b/regtests/ww3_tp2.15/input/ww3_ounf.inp index 5262627b6..ff7cbbcdf 100644 --- a/regtests/ww3_tp2.15/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.15/input/ww3_ounf.inp @@ -12,7 +12,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.15/input/ww3_ounf.nml b/regtests/ww3_tp2.15/input/ww3_ounf.nml index 4872fecf2..bdd7e13c2 100644 --- a/regtests/ww3_tp2.15/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.15/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.16/input/ww3_ounf.inp b/regtests/ww3_tp2.16/input/ww3_ounf.inp index d7a4dd2c0..940b4a05f 100644 --- a/regtests/ww3_tp2.16/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.16/input/ww3_ounf.inp @@ -33,7 +33,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.16/input/ww3_ounf.nml b/regtests/ww3_tp2.16/input/ww3_ounf.nml index 74539ef0a..6dd44ba6c 100644 --- a/regtests/ww3_tp2.16/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.16/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.17/input/ww3_ounf.nml b/regtests/ww3_tp2.17/input/ww3_ounf.nml index 800fae20e..df701f8d5 100644 --- a/regtests/ww3_tp2.17/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.17/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.2/input/ww3_ounf.inp b/regtests/ww3_tp2.2/input/ww3_ounf.inp index 973dbacbf..1d901574c 100644 --- a/regtests/ww3_tp2.2/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.2/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.2/input/ww3_ounf.nml b/regtests/ww3_tp2.2/input/ww3_ounf.nml index 862ffa888..3fdd6fb1b 100644 --- a/regtests/ww3_tp2.2/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.2/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.3/input/ww3_ounf.inp b/regtests/ww3_tp2.3/input/ww3_ounf.inp index 62ee03dda..b0c2404f0 100644 --- a/regtests/ww3_tp2.3/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.3/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.3/input/ww3_ounf.nml b/regtests/ww3_tp2.3/input/ww3_ounf.nml index d73186f7b..b2e4ef753 100644 --- a/regtests/ww3_tp2.3/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.3/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.4/input/ww3_ounf.inp b/regtests/ww3_tp2.4/input/ww3_ounf.inp index 666d78f4e..ee08f49c3 100644 --- a/regtests/ww3_tp2.4/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.4/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.4/input/ww3_ounf.nml b/regtests/ww3_tp2.4/input/ww3_ounf.nml index 5cc21c71c..a7e9dbaa3 100644 --- a/regtests/ww3_tp2.4/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.4/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.5/input/ww3_ounf.inp b/regtests/ww3_tp2.5/input/ww3_ounf.inp index d4295cd4f..5d77fdfdc 100644 --- a/regtests/ww3_tp2.5/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.5/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.5/input/ww3_ounf.nml b/regtests/ww3_tp2.5/input/ww3_ounf.nml index 2472bbf34..c47276da3 100644 --- a/regtests/ww3_tp2.5/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.5/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.5/input_REF/ww3_ounf.nml b/regtests/ww3_tp2.5/input_REF/ww3_ounf.nml index b80a5ecbf..f12445fa5 100644 --- a/regtests/ww3_tp2.5/input_REF/ww3_ounf.nml +++ b/regtests/ww3_tp2.5/input_REF/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.6/input/ww3_ounf.nml b/regtests/ww3_tp2.6/input/ww3_ounf.nml index 7b47a0063..38b15c686 100644 --- a/regtests/ww3_tp2.6/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.6/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.7/input/ww3_ounf.inp b/regtests/ww3_tp2.7/input/ww3_ounf.inp index e636e699d..587f472a4 100644 --- a/regtests/ww3_tp2.7/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.7/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.7/input/ww3_ounf.nml b/regtests/ww3_tp2.7/input/ww3_ounf.nml index 2adadfcd0..c26a22b9f 100644 --- a/regtests/ww3_tp2.7/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.7/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.8/input/ww3_ounf.inp b/regtests/ww3_tp2.8/input/ww3_ounf.inp index 4bbecaaa0..0f78cc437 100644 --- a/regtests/ww3_tp2.8/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.8/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_tp2.8/input/ww3_ounf.nml b/regtests/ww3_tp2.8/input/ww3_ounf.nml index 45a9f84cb..3c0ab164b 100644 --- a/regtests/ww3_tp2.8/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.8/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.9/input/ww3_ounf.nml b/regtests/ww3_tp2.9/input/ww3_ounf.nml index 8fe90968c..f26d976d0 100644 --- a/regtests/ww3_tp2.9/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.9/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_tp2.9/input/ww3_ounf_flds_hrly.nml b/regtests/ww3_tp2.9/input/ww3_ounf_flds_hrly.nml index 8fe90968c..f26d976d0 100644 --- a/regtests/ww3_tp2.9/input/ww3_ounf_flds_hrly.nml +++ b/regtests/ww3_tp2.9/input/ww3_ounf_flds_hrly.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ts1/input/ww3_ounf.nml b/regtests/ww3_ts1/input/ww3_ounf.nml index 3ee0de65e..892b30bd8 100644 --- a/regtests/ww3_ts1/input/ww3_ounf.nml +++ b/regtests/ww3_ts1/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ts1/input_fld/ww3_ounf.nml b/regtests/ww3_ts1/input_fld/ww3_ounf.nml index a22e156f7..c22b2d835 100644 --- a/regtests/ww3_ts1/input_fld/ww3_ounf.nml +++ b/regtests/ww3_ts1/input_fld/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ts3/input/ww3_ounf.inp b/regtests/ww3_ts3/input/ww3_ounf.inp index f003b3ff8..b9aba86e3 100644 --- a/regtests/ww3_ts3/input/ww3_ounf.inp +++ b/regtests/ww3_ts3/input/ww3_ounf.inp @@ -27,7 +27,7 @@ $ $ $ -------------------------------------------------------------------- $ $ File prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] $ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] $ ww3. diff --git a/regtests/ww3_ts3/input/ww3_ounf.nml b/regtests/ww3_ts3/input/ww3_ounf.nml index f5fc6d7c9..215362f9d 100644 --- a/regtests/ww3_ts3/input/ww3_ounf.nml +++ b/regtests/ww3_ts3/input/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ts4/input_rg_multi/ww3_ounf.nml b/regtests/ww3_ts4/input_rg_multi/ww3_ounf.nml index 386ec76d6..670165267 100644 --- a/regtests/ww3_ts4/input_rg_multi/ww3_ounf.nml +++ b/regtests/ww3_ts4/input_rg_multi/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ts4/input_rg_shel/ww3_ounf.nml b/regtests/ww3_ts4/input_rg_shel/ww3_ounf.nml index 386ec76d6..670165267 100644 --- a/regtests/ww3_ts4/input_rg_shel/ww3_ounf.nml +++ b/regtests/ww3_ts4/input_rg_shel/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] diff --git a/regtests/ww3_ts4/input_ug/ww3_ounf.nml b/regtests/ww3_ts4/input_ug/ww3_ounf.nml index 386ec76d6..670165267 100644 --- a/regtests/ww3_ts4/input_ug/ww3_ounf.nml +++ b/regtests/ww3_ts4/input_ug/ww3_ounf.nml @@ -23,7 +23,7 @@ ! FIELD%TIMESTRIDE = '0' ! Time stride for the output field ! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field ! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] From 526bf5cb16017e075d072ee207d6e84b469f8319 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Mon, 10 Jun 2019 11:04:38 -0400 Subject: [PATCH 06/84] Revert "Merging feature/sharedobject to develop (#29)" (#46) This reverts commit 04ed64b586bb31546531ca046d105c222e861f26. --- model/bin/cmplr.env | 4 ++-- model/bin/comp.Intel | 5 ++--- model/bin/make_makefile.sh | 23 +---------------------- model/bin/w3_automake | 1 - model/bin/w3_make | 5 ----- model/bin/ww3_from_ftp.sh | 4 ++-- 6 files changed, 7 insertions(+), 35 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 21c431450..67d50e94e 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -117,7 +117,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -module $path_m -no-fma -fPIC -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' + optc='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' optl='-o $prog -p -g' # list options @@ -179,7 +179,7 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -J$path_m -p -fPIC -g -fno-second-underscore -ffree-line-length-none -fconvert=big-endian' + optc='-c -J$path_m -p -g -fno-second-underscore -ffree-line-length-none -fconvert=big-endian' optl='-o $prog -p -g' # omp options diff --git a/model/bin/comp.Intel b/model/bin/comp.Intel index 4a44a4f60..fa8ffd433 100755 --- a/model/bin/comp.Intel +++ b/model/bin/comp.Intel @@ -77,9 +77,8 @@ # # Intel compiler on Linux ---------------------------------------------------- # 2.b.1 Build options and determine compiler name - - opt="-c $list -O3 -assume byterecl -fPIC -module $path_m" -# opt="-c $list -O3 -assume byterecl -ip -module $path_m" + + opt="-c $list -O3 -assume byterecl -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" # opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 2038dcb97..0afcd5406 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -851,7 +851,6 @@ ww3_ounp ww3_gspl ww3_gint ww3_bound ww3_bounc ww3_systrk $tideprog" progs="$progs ww3_multi_esmf ww3_uprstr" progs="$progs libww3" - progs="$progs libww3.so" for prog in $progs do @@ -1060,13 +1059,6 @@ source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; - libww3.so) IDstring='Object file archive' - core='w3fldsmd w3initmd w3wavemd w3wdasmd w3updtmd' - data='wmmdatmd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' - prop="$pr" - source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" - IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' - aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; ww3_uprstr) IDstring='Update Restart File' core= data='wmmdatmd w3triamd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' @@ -1086,7 +1078,7 @@ filesl="$data $core $prop $source $IO $aux" # if program name is libww3, then # the target is compile and create archive - elif [ "$prog" = "libww3" ] || [ "$prog" = "libww3.so" ] + elif [ "$prog" = "libww3" ] then d_string="$prog"' : $(aPo)/' files="$aux $core $data $prop $source $IO" @@ -1131,19 +1123,6 @@ done echo " @cd \$(aPo); $ar_cmd $lib $objs" >> makefile echo ' ' >> makefile - # if program name is libww3.so, then - # the target is compile and create archive - elif [ "$prog" = "libww3.so" ] - then - lib=$prog - objs="" - for file in $filesl - do - objs="$objs $file.o" - done - echo " @cd \$(aPo); ld -o $lib -shared $objs" >> makefile - echo ' ' >> makefile - else echo ' @$(aPb)/link '"$filesl" >> makefile echo ' ' >> makefile diff --git a/model/bin/w3_automake b/model/bin/w3_automake index b610d0f0c..dc80435e0 100755 --- a/model/bin/w3_automake +++ b/model/bin/w3_automake @@ -132,7 +132,6 @@ reg_programs="$reg_programs gx_outp" reg_programs="$reg_programs ww3_uprstr" reg_programs="$reg_programs libww3" - reg_programs="$reg_programs libww3.so" # PRNC OUNF OUNP BOUNC TRNC cdf_programs="ww3_prnc" diff --git a/model/bin/w3_make b/model/bin/w3_make index f707dccd5..f2727ea8a 100755 --- a/model/bin/w3_make +++ b/model/bin/w3_make @@ -174,7 +174,6 @@ cdf_programs="$cdf_programs ww3_multi" cdf_programs="$cdf_programs ww3_sbs1" cdf_programs="$cdf_programs libww3" - cdf_programs="$cdf_programs libww3.so" if [ $ESMFMKFILE ] then cdf_programs="$cdf_programs ww3_multi_esmf" @@ -183,7 +182,6 @@ reg_programs="$reg_programs ww3_multi" reg_programs="$reg_programs ww3_sbs1" reg_programs="$reg_programs libww3" - reg_programs="$reg_programs libww3.so" if [ $ESMFMKFILE ] then reg_programs="$reg_programs ww3_multi_esmf" @@ -664,9 +662,6 @@ EOF # if program name is libww3, then # the target is compile and create archive elif [ "$prog" = "libww3" ] - then - target="$prog" - elif [ "$prog" = "libww3.so" ] then target="$prog" else diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index 5723b53d8..6630a5c97 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -23,7 +23,7 @@ wget ftp://polar.ncep.noaa.gov/tempor/ww3ftp/ww3_from_ftp.v6.07.tar.gz tar -xvzf ww3_from_ftp.v6.07.tar.gz #Move regtest info from data_regtests to regtests: -echo -e "Moving data from data_regtests to regtests" +echo -e "Moving data from data_regtests to regtets" cp -r data_regtests/ww3_tp2.15/input/*.nc regtests/ww3_tp2.15/input/ cp -r data_regtests/ww3_tp2.13/*.png regtests/ww3_tp2.13/ cp -r data_regtests/ww3_tic1.4/input/*.nc regtests/ww3_tic1.4/input/ @@ -53,7 +53,7 @@ else echo -e ' Not deleting tar file.' fi -echo -e "\n\n Files were copied from the data_regtests to the regstets folder." +echo -e "\n\n Files were copied from the data_regtests to the regtets folder." echo -e "Do you want to delete the data_regtests folder? [y|n]: " read wnew2 if [ "${wnew2}" = "Y" ] || [ "${wnew2}" = "y" ] From 002a2e57ab68888f8d9a04947c87563b9560f9ee Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Mon, 24 Jun 2019 14:05:59 -0400 Subject: [PATCH 07/84] Bug fix to ad3 where .mod files could be deleted/moved too soon when (#39) (#55) running parallel make. Only an issue if compiler does not allow switch to target a different directory to output mod files. --- model/bin/ad3 | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/model/bin/ad3 b/model/bin/ad3 index 32a0b6c4c..e4b07b88c 100755 --- a/model/bin/ad3 +++ b/model/bin/ad3 @@ -303,7 +303,19 @@ fi rm -f $path_o/$name.o - rm -f *.mod + ## Chris B: Dont delete *.mod - could clobber files in parallel make + ## Need to delete specific mod file that could be upper/lower/mixed case! +# rm -f *.mod ## too indiscriminate + + ## Using find -iname most succinct, but maybe not all version of find have + ## the -iname option? +# find . -iname "${name}.mod" -delete # not all versions of find have -iname? + + # Fall back on grep -i + mods=`ls *.mod | grep -i "${name}.mod 2> /dev/null"` + if [ -n ${mods} ]; then + rm -f ${mods} + fi # --------------------------------------------------------------------------- # # 3. Compile source code f / f90 # @@ -380,7 +392,17 @@ then rm -f $name.o else mv $name.o $path_o/. - mods=`ls *.mod 2> /dev/null` + ## ChrisB: Don't move all module files...could break parallel make. + ## Just target specific module file (could be mixed case filename + ## depending on compiler - use case insensitive find): +# mods=`ls *.mod 2> /dev/null` + + ## Using find -iname most succinct, but maybe not all version of find have + ## the -iname option? +# mods=`find . -iname "${name}.mod"` # not all versions of find have -iname? + + # Fall back on grep -i + mods=`ls *.mod | grep -i "${name}.mod 2> /dev/null"` if [ -n "$mods" ] then for mod in $mods From 9f504c36b44a6444e5fb02f31f8874676ec160ed Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Tue, 25 Jun 2019 09:37:26 -0400 Subject: [PATCH 08/84] Slurm regtests (#51) (#52) Branch slurm_regtests: timing option -T added to run_test, option to run batch queue [slurm] -b added to run_test, created new matrix_ncep with slurm directives for R&D testing, corrected bug in matrix.base ww3_ts4 [mpi tests were missing -p -n flags]. --- regtests/bin/matrix.base | 6 +- regtests/bin/matrix.comp | 30 +- regtests/bin/matrix_ncep | 157 +++ regtests/bin/run_test | 2509 ++++++++++++++++++++++---------------- 4 files changed, 1638 insertions(+), 1064 deletions(-) create mode 100755 regtests/bin/matrix_ncep diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 72b4e736a..24de249a9 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -1965,9 +1965,9 @@ echo ' ' >> matrix.body if [ "$dist" = 'y' ] then - echo "$rtst -s MPI -w work_rg_shel_MPI -i input_rg_shel $ww3 ww3_ts4" >> matrix.body - echo "$rtst -s MPI -w work_rg_multi_MPI -i input_rg_multi -m grdset $ww3 ww3_ts4" >> matrix.body - echo "$rtst -s MPI -w work_ug_MPI -i input_ug $ww3 ww3_ts4" >> matrix.body + echo "$rtst -s MPI -w work_rg_shel_MPI -i input_rg_shel -f -p $mpi -n $np $ww3 ww3_ts4" >> matrix.body + echo "$rtst -s MPI -w work_rg_multi_MPI -i input_rg_multi -m grdset -f -p $mpi -n $np $ww3 ww3_ts4" >> matrix.body + echo "$rtst -s MPI -w work_ug_MPI -i input_ug -f -p $mpi -n $np $ww3 ww3_ts4" >> matrix.body else echo "$rtst -w work_rg_shel -i input_rg_shel $ww3 ww3_ts4" >> matrix.body echo "$rtst -w work_rg_multi -i input_rg_multi -m grdset $ww3 ww3_ts4" >> matrix.body diff --git a/regtests/bin/matrix.comp b/regtests/bin/matrix.comp index f6dade828..8c20ffdb1 100755 --- a/regtests/bin/matrix.comp +++ b/regtests/bin/matrix.comp @@ -19,9 +19,21 @@ # 1. Set up # 1.a Computer/ user dependent set up + if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] + then + printf "\n ERROR ABORTING \n" + printf "\n matrix.comp requires 3 arguments: " + printf " 1: test type (eg, all or test-name), 2: base directory and 3: reference directory. \n" + printf "\n Usage:" + printf " ./bin/matrix.comp all basedir compdir \n\n" + exit + fi + + ctest=$1 + base_dir=$2 + comp_dir=$3 home_dir=`pwd` - base_dir='.' - comp_dir='../../EMC_ww3_master/regtests' + rm -rf $home_dir/output rm -f $home_dir/matrixDiff.out @@ -58,18 +70,12 @@ echo '**********************************************************************' >> $home_dir/fulldiff.tmp - if [ "$#" != '1' ] ; then - echo "usage: matrix.comp test" - echo " test can be 'all'" ; exit 1 ; fi - - test=$1 - - if [ "$test" = 'all' ] ; then - test=`ls -d ww3_tp1.? ww3_tp2.? ww3_ts? ww3_tbt1.? ww3_tbt2.? ww3_tic1.? ww3_tic2.? ww3_tig1.? ww3_tp2.1? mww3_test_0?` ; fi + if [ "$ctest" = 'all' ] ; then + ctest=`ls -d ww3_tp1.? ww3_tp2.? ww3_ts? ww3_tbt1.? ww3_tbt2.? ww3_tic1.? ww3_tic2.? ww3_tig1.? ww3_tp2.1? mww3_test_0?` ; fi echo "base directory : $base_dir" >> $home_dir/header.tmp echo "comp directory : $comp_dir" >> $home_dir/header.tmp echo "test(s) : " >> $home_dir/header.tmp - echo $test >> $home_dir/header.tmp + echo $ctest >> $home_dir/header.tmp echo " " >> $home_dir/header.tmp cat $home_dir/header.tmp @@ -84,7 +90,7 @@ # 2. Looping over tests # # --------------------------------------------------------------------------- # - for tst in $test + for tst in $ctest do cd $home_dir ; cd $base_dir if [ ! -d $tst ] diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep new file mode 100755 index 000000000..2fff488b2 --- /dev/null +++ b/regtests/bin/matrix_ncep @@ -0,0 +1,157 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# matrix.go: Run matrix of regression tests on target machine. # +# # +# Remarks: # +# - This version is set up for automatic w3_setenv script and for the # +# NOAA RDHPC 'zeus' system. When using this for your own setup and # +# computer, please copy rather than modify. # +# # +# Hendrik L. Tolman # +# August 2013 # +# December 2013 # +# April 2018 # +# # +# Copyright 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. # +# # +# --------------------------------------------------------------------------- # +# 0. Environment file + + source $(dirname $0)/../../model/bin/w3_setenv + main_dir=$WWATCH3_DIR + temp_dir=$WWATCH3_TMP + source=$WWATCH3_SOURCE + list=$WWATCH3_LIST + + echo "Main directory : $main_dir" + echo "Scratch directory : $temp_dir" + echo "Save source codes : $source" + echo "Save listings : $list" + +# Set batchq queue to define headers etc (default to original version if empty) +batchq="slurm" + +# 1. Set up +# 1.a Computer/ user dependent set up + + echo '#!/bin/sh --login' > matrix.head + echo ' ' >> matrix.head +if [ $batchq = "slurm" ] +then + echo '#SBATCH -n 24' >> matrix.head + echo '#SBATCH -q batch' >> matrix.head + echo '#SBATCH -t 08:00:00' >> matrix.head + echo '#SBATCH -A marine-cpu' >> matrix.head + echo '#SBATCH -J ww3_regtest' >> matrix.head + echo '#SBATCH -o matrix.out' >> matrix.head +else + echo '#PBS -l procs=24' >> matrix.head + echo '#PBS -q batch' >> matrix.head + echo '#PBS -l walltime=08:00:00' >> matrix.head + echo '#PBS -A marine-cpu' >> matrix.head + echo '#PBS -N ww3_regtest' >> matrix.head + echo '#PBS -j oe' >> matrix.head + echo '#PBS -o matrix.out' >> matrix.head + echo ' ' >> matrix.head +fi + echo " cd $(dirname $main_dir)/regtests" >> matrix.head + echo ' ' >> matrix.head + +# Netcdf and Parmetis modules & variables + +istheia=`hostname | grep tfe` +if [ $istheia ] +then + modcomp='intel/14.0.2' + modmpi='impi/5.1.2.150' + modnetcdf='netcdf/4.3.0' +fi + + echo " module load $modcomp $modmpi $modnetcdf" >> matrix.head + echo " export WWATCH3_NETCDF=NC4" >> matrix.head + echo " export NETCDF_CONFIG=`which nc-config`" >> matrix.head + echo " export METIS_PATH=/scratch3/NCEPDEV/stmp2/Jessica.Meixner/parmetis-4.0.3" >> matrix.head + echo " export WW3_PARCOMPN=4" >> matrix.head + echo ' ' + +# Compiler option. Choose appropriate compiler and set cmplOption to +# y if using for the first time or using a different compiler + + cmplr=Intel + export cmplOption='y' + + if [ "$batchq" = 'slurm' ] + then + export mpi='srun' + else + export mpi='mpirun' + fi + export np='24' + export nr='4' + export nth='6' +# Compile option + if [ "$cmplOption" = 'y' ] + then + opt="-c $cmplr -S -T" + else + opt="-S" + fi +# Batch queue option + if [ "$batchq" = 'slurm' ] + then + opt="-b $batchq $opt" + fi + +# Base run_test command line + export rtst="./bin/run_test $opt" + + export ww3='../model' + +# 1.b Flags to do course selection - - - - - - - - - - - - - - - - - - - - - - +# Addition selection by commenting out lines as below + + export shrd='y' # Do shared architecture tests + export dist='y' # Do distributed architecture (MPI) tests + export omp='y' # Threaded (OpenMP) tests + export hybd='n' # Hybrid options + + export prop1D='y' # 1-D propagation tests (ww3_tp1.X) + export prop2D='y' # 2-D propagation tests (ww3_tp2.X) + export time='y' # time linmited growth + export fetch='y' # fetch linmited growth + export hur1mg='y' # Hurricane with one moving grid + export shwtr='y' # shallow water tests + export unstr='y' # unstructured grid tests + export pdlib='y' # unstr with pdlib for domain decomposition and implicit solver + export smcgr='y' # SMC/Rotated grid test + export mudice='y' # Mud/Ice and wave interaction tests + export infgrv='y' # Second harmonic generation tests + export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) + export assim='y' # Restart spectra update + + export multi01='y' # mww3_test_01 (wetting and drying) + export multi02='y' # mww3_test_02 (basic two-way nesting test)) + export multi03='y' # mww3_test_03 (three high and three low res grids). + export multi04='y' # mww3_test_04 (swell on sea mount and/or current) + export multi05='y' # mww3_test_05 (three-grid moving hurricane) + export multi06='y' # mww3_test_06 (curvilinear grid tests) + export multi07='y' # mww3_test_07 (unstructured grid tests) + export multi08='y' # mww3_test_08 (wind and ice tests) + +# export filter='PR3 ST2 UQ' + # The filter does a set of consecutinve greps on the + # command lines generated by filter.base with the above + # selected options. + +# --------------------------------------------------------------------------- # +# 2. Execute matrix.base ... # +# --------------------------------------------------------------------------- # + + $main_dir/../regtests/bin/matrix.base + +# --------------------------------------------------------------------------- # +# End to the matrix # +# --------------------------------------------------------------------------- # diff --git a/regtests/bin/run_test b/regtests/bin/run_test index 858e84171..91b5acd5f 100755 --- a/regtests/bin/run_test +++ b/regtests/bin/run_test @@ -40,7 +40,7 @@ errmsg () # 1.b Usage function myname="`basename $0`" #name of script -optstr="a:c:C:defg:Ghi:m:n:No:Op:q:r:s:t:Sw:" #option string for getopt function +optstr="a:b:c:C:defg:Ghi:m:n:No:Op:q:r:s:t:STw:" #option string for getopt function usage () { @@ -54,6 +54,7 @@ Options: -a ww3_env : use WW3 environment setup file : *default is /bin/wwatch3.env : *file will be created if it does not already exist + -b batchq : optional setting to determine batch queue type (for slurm now) -c cmplr : setup comp & link files for specified cmplr -C coupl : invoke test using coupled application : OASIS : OASIS3-mct ww3_shel coupled application @@ -97,6 +98,7 @@ Options: tests not executed if file is found. -t nthrd : Threading option. (this is system dependant and can be used : only for the hybrid option) + -T : Run w3_make under time command to create compile-time metric -w work_dir : run test case in test_name/work_dir (default test_name/work) EOF @@ -107,6 +109,10 @@ EOF # 2. Preparations # # --------------------------------------------------------------------------- # +echo ' ' +echo " Running now options: run_test $*" +echo ' ' + # 2.a Setup array of command-line arguments args=`getopt $optstr $*` if [ $? != 0 ] @@ -116,6 +122,8 @@ then fi set -- $args +ARGS=$args + # 2.b Process command-line options exit_p=none exec_p=none @@ -129,6 +137,7 @@ while : do case "$1" in -a) shift; ww3_env="$1" ;; + -b) shift; batchq="$1" ;; -c) shift; cmplr="$1" ;; -C) shift; coupl="$1" ;; -d) use_gdb=1 ;; @@ -155,6 +164,7 @@ do -s) shift; swtstr="$1" ;; -S) stub=1 ;; -t) shift; nthrd="$1" ;; + -T) time_count=1 ;; -w) shift; wrkdir="$1" ;; --) break ;; esac @@ -276,6 +286,7 @@ then else file_c="$path_i/switch" fi + if [ ! -f $file_c ] then errmsg "switch file $file_c not found" @@ -387,6 +398,12 @@ fi # $path_b/w3_setup $path_s -s $file_c -q #fi +# 2.m Initialize time counter if time_count option +if [ $time_count ] +then # Add time counter if -T + cumult_comp=0 + cumult_run=0 +fi # --------------------------------------------------------------------------- # # 3. Execute Test # @@ -405,6 +422,11 @@ then fi fi +if [ $time_count ] +then # Add time counter if -T + echo " REGTESTS Time counter: run_test $ARGS" >> time_count.txt +fi + if [ $multi -eq 0 ] && [ $coupl = "OASIS" ] then if $path_i/prep_env.sh $path_i $path_w $cmplr $swtstr @@ -464,6 +486,12 @@ then cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch rm $path_b/switch_noST fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + if $path_b/w3_make $prog then : else @@ -471,6 +499,14 @@ then exit 1 fi + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + fi + for g in $all_grids do @@ -521,6 +557,11 @@ then echo " Processing $ifile" echo " Screen output routed to $ofile" + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + if $path_e/$prog > $ofile then \rm -f $prog.inp @@ -538,6 +579,14 @@ then exit 1 fi + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + done fi @@ -554,100 +603,128 @@ if [ $exec_p = $prog -o $exec_p = "none" ] then # select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] -then - ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" -else - ifile="`ls $path_i/$prog.inp 2>/dev/null`" -fi + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] + then + ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" + else + ifile="`ls $path_i/$prog.inp 2>/dev/null`" + fi -if [ $? = 0 ] -then + if [ $? = 0 ] + then - echo ' ' - echo '+--------------------+' - echo '| Initial conditions |' - echo '+--------------------+' - echo ' ' + echo ' ' + echo '+--------------------+' + echo '| Initial conditions |' + echo '+--------------------+' + echo ' ' - if [ $force_shrd ] - then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + if [ $force_shrd ] + then # build pre- & post-processing programs with SHRD only + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ sed 's/OMPG //' | sed 's/OMPX //'| \ sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch - else - \cp -f $file_c $path_b/switch - fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : - else - errmsg "Error occured during WW3 $prog build" - exit 1 - fi - - if [ ! -f $path_e/$prog ] - then - errmsg "$path_e/$prog not found" - exit 1 - fi - - for g in $model_grids - do + else + \cp -f $file_c $path_b/switch + fi + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST + fi - if [ $multi -eq 2 ] - then - gu="_$g" + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` fi - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] - then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - ofile="$path_w/`basename $ifile .nml`${gu}.out" + if $path_b/w3_make $prog + then : else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - ofile="$path_w/`basename $ifile .inp`${gu}.out" + errmsg "Error occured during WW3 $prog build" + exit 1 fi - echo " Processing $ifile" - echo " Screen output routed to $ofile" - - if [ $multi -eq 2 ] - then - \rm -f mod_def.ww3 - \ln -s mod_def.$g mod_def.ww3 + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` fi - if $path_e/$prog > $ofile + + if [ ! -f $path_e/$prog ] then - \rm -f $prog.inp - \rm -f $prog.nml + errmsg "$path_e/$prog not found" + exit 1 + fi + + for g in $model_grids + do + + if [ $multi -eq 2 ] + then + gu="_$g" + fi + + # link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + \rm -f $prog.nml + \ln -s $ifile $prog.nml + ofile="$path_w/`basename $ifile .nml`${gu}.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + ofile="$path_w/`basename $ifile .inp`${gu}.out" + fi + + echo " Processing $ifile" + echo " Screen output routed to $ofile" + if [ $multi -eq 2 ] then - mv restart.ww3 restart.$g \rm -f mod_def.ww3 - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + \ln -s mod_def.$g mod_def.ww3 + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_e/$prog > $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml + if [ $multi -eq 2 ] then - mv $prog.nml.log ${prog}_$g.nml.log + mv restart.ww3 restart.$g + \rm -f mod_def.ww3 + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + mv $prog.nml.log ${prog}_$g.nml.log + fi fi + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 fi - else - errmsg "Error occured during $path_e/$prog execution" - exit 1 - fi - - done - -fi - + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + + done + + fi + fi if [ $exit_p = $prog ] @@ -655,104 +732,132 @@ then exit fi -# 3.d boundary conditions -------------------------------------------------- # +# 3.d.1 boundary conditions -------------------------------------------------- # prog=ww3_bound if [ $exec_p = $prog -o $exec_p = "none" ] then # select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] -then - ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" -else - ifile="`ls $path_i/$prog.inp 2>/dev/null`" -fi - -if [ $? = 0 ] -then - - echo ' ' - echo '+---------------------+' - echo '| Boundary conditions |' - echo '+---------------------+' - echo ' ' - - if [ $force_shrd ] - then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch - else - \cp -f $file_c $path_b/switch - fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] + then + ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" else - errmsg "Error occured during WW3 $prog build" - exit 1 + ifile="`ls $path_i/$prog.inp 2>/dev/null`" fi - if [ ! -f $path_e/$prog ] + if [ $? = 0 ] then - errmsg "$path_e/$prog not found" - exit 1 - fi - - for g in $model_grids - do - if [ $multi -eq 2 ] - then - gu="_$g" + + echo ' ' + echo '+---------------------+' + echo '| Boundary conditions |' + echo '+---------------------+' + echo ' ' + + if [ $force_shrd ] + then # build pre- & post-processing programs with SHRD only + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //'| \ + sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + else + \cp -f $file_c $path_b/switch fi - - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] - then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - ofile="$path_w/`basename $ifile .nml`${gu}.out" + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_b/w3_make $prog + then : else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - ofile="$path_w/`basename $ifile .inp`${gu}.out" + errmsg "Error occured during WW3 $prog build" + exit 1 fi - - echo " Processing $ifile" - echo " Screen output routed to $ofile" - - if [ $multi -eq 2 ] - then - \rm -f mod_def.ww3 - \ln -s mod_def.$g mod_def.ww3 + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` fi - if $path_e/$prog > $ofile + + if [ ! -f $path_e/$prog ] then - \rm -f $prog.inp - \rm -f $prog.nml + errmsg "$path_e/$prog not found" + exit 1 + fi + + for g in $model_grids + do + if [ $multi -eq 2 ] + then + gu="_$g" + fi + + # link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + \rm -f $prog.nml + \ln -s $ifile $prog.nml + ofile="$path_w/`basename $ifile .nml`${gu}.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + ofile="$path_w/`basename $ifile .inp`${gu}.out" + fi + + echo " Processing $ifile" + echo " Screen output routed to $ofile" + if [ $multi -eq 2 ] then - mv nest.ww3 nest.$g \rm -f mod_def.ww3 - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + \ln -s mod_def.$g mod_def.ww3 + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_e/$prog > $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml + if [ $multi -eq 2 ] then - mv $prog.nml.log ${prog}_$g.nml.log + mv nest.ww3 nest.$g + \rm -f mod_def.ww3 + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + mv $prog.nml.log ${prog}_$g.nml.log + fi fi + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 fi - else - errmsg "Error occured during $path_e/$prog execution" - exit 1 - fi - - done - -fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + + done + + fi fi @@ -761,202 +866,111 @@ then exit fi -# 3.d boundary conditions -------------------------------------------------- # +# 3.d.2 boundary conditions -------------------------------------------------- # prog=ww3_bounc if [ $exec_p = $prog -o $exec_p = "none" ] then # select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] -then - ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" -else - ifile="`ls $path_i/$prog.inp 2>/dev/null`" -fi - -if [ $? = 0 ] -then - - echo ' ' - echo '+---------------------+' - echo '| Boundary conditions |' - echo '+---------------------+' - echo ' ' - - if [ $force_shrd ] - then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch - else - \cp -f $file_c $path_b/switch - fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] + then + ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" else - errmsg "Error occured during WW3 $prog build" - exit 1 + ifile="`ls $path_i/$prog.inp 2>/dev/null`" fi - - if [ ! -f $path_e/$prog ] + + if [ $? = 0 ] then - errmsg "$path_e/$prog not found" - exit 1 - fi - - for g in $model_grids - do - if [ $multi -eq 2 ] - then - gu="_$g" - fi - - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] - then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - ofile="$path_w/`basename $ifile .nml`${gu}.out" + + echo ' ' + echo '+---------------------+' + echo '| Boundary conditions |' + echo '+---------------------+' + echo ' ' + + if [ $force_shrd ] + then # build pre- & post-processing programs with SHRD only + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //'| \ + sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - ofile="$path_w/`basename $ifile .inp`${gu}.out" + \cp -f $file_c $path_b/switch fi - - echo " Processing $ifile" - echo " Screen output routed to $ofile" - - if [ $multi -eq 2 ] - then - \rm -f mod_def.ww3 - \ln -s mod_def.$g mod_def.ww3 + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST fi - if $path_e/$prog > $ofile - then - \rm -f $prog.inp - \rm -f $prog.nml - if [ $multi -eq 2 ] - then - mv nest.ww3 nest.$g - \rm -f mod_def.ww3 - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] - then - mv $prog.nml.log ${prog}_$g.nml.log - fi - fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_b/w3_make $prog + then : else - errmsg "Error occured during $path_e/$prog execution" + errmsg "Error occured during WW3 $prog build" exit 1 fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi - done - -fi - -fi - -if [ $exit_p = $prog ] -then - exit -fi - -# 3.e Prep forcing fields --------------------------------------------------- # - -prog=ww3_prep -if [ $exec_p = $prog -o $exec_p = "none" ] -then - -# select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] -then - inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" -else - inputs="`ls $path_i/$prog*.inp 2>/dev/null`" -fi - -if [ $? = 0 ] -then - echo ' ' - echo '+---------------------+' - echo '| Prep forcing fields |' - echo '+---------------------+' - echo ' ' - - if [ $force_shrd ] - then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch - else - \cp -f $file_c $path_b/switch - fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : - else - errmsg "Error occured during WW3 $prog build" - exit 1 - fi - - if [ ! -f $path_e/$prog ] - then - errmsg "$path_e/$prog not found" - exit 1 - fi - - for g in $input_grids - do - - if [ $multi -eq 2 ] + if [ ! -f $path_e/$prog ] then - gu="_$g" + errmsg "$path_e/$prog not found" + exit 1 fi - - for ifile in $inputs + + for g in $model_grids do - + if [ $multi -eq 2 ] + then + gu="_$g" + fi + # link conf file if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] then \rm -f $prog.nml \ln -s $ifile $prog.nml - otype="`basename $ifile .nml | sed s/^${prog}_//`" - ofile="$path_w/`basename $ifile .nml`.out" + ofile="$path_w/`basename $ifile .nml`${gu}.out" else \rm -f $prog.inp \ln -s $ifile $prog.inp - otype="`basename $ifile .inp | sed s/^${prog}_//`" - ofile="$path_w/`basename $ifile .inp`.out" + ofile="$path_w/`basename $ifile .inp`${gu}.out" fi - - echo " Processing $ifile for $otype" + + echo " Processing $ifile" echo " Screen output routed to $ofile" - + if [ $multi -eq 2 ] then \rm -f mod_def.ww3 \ln -s mod_def.$g mod_def.ww3 fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + if $path_e/$prog > $ofile then \rm -f $prog.inp \rm -f $prog.nml if [ $multi -eq 2 ] then + mv nest.ww3 nest.$g \rm -f mod_def.ww3 - mv $otype.ww3 $otype.$g if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] then mv $prog.nml.log ${prog}_$g.nml.log @@ -966,12 +980,18 @@ then errmsg "Error occured during $path_e/$prog execution" exit 1 fi - + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + done - - done - -fi + + fi fi @@ -980,112 +1000,281 @@ then exit fi -# 3.e Prep forcing fields --------------------------------------------------- # +# 3.e.1 Prep forcing fields --------------------------------------------------- # -prog=ww3_prnc +prog=ww3_prep if [ $exec_p = $prog -o $exec_p = "none" ] then # select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] -then - inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" -else - inputs="`ls $path_i/$prog*.inp 2>/dev/null`" -fi - -if [ $? = 0 ] -then - echo ' ' - echo '+-------------------------------+' - echo '| Prep of NetCDF forcing fields |' - echo '+-------------------------------+' - echo ' ' - - if [ $force_shrd ] - then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch - else - \cp -f $file_c $path_b/switch - fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] + then + inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" else - errmsg "Error occured during WW3 $prog build" - exit 1 + inputs="`ls $path_i/$prog*.inp 2>/dev/null`" fi - if [ ! -f $path_e/$prog ] + if [ $? = 0 ] then - errmsg "$path_e/$prog not found" - exit 1 - fi + echo ' ' + echo '+---------------------+' + echo '| Prep forcing fields |' + echo '+---------------------+' + echo ' ' + + if [ $force_shrd ] + then # build pre- & post-processing programs with SHRD only + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //'| \ + sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + else + \cp -f $file_c $path_b/switch + fi + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST + fi - for g in $input_grids - do + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi - if [ $multi -eq 2 ] + if $path_b/w3_make $prog + then : + else + errmsg "Error occured during WW3 $prog build" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi + + if [ ! -f $path_e/$prog ] then - gu="_$g" + errmsg "$path_e/$prog not found" + exit 1 fi - for ifile in $inputs + for g in $input_grids do - - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + + if [ $multi -eq 2 ] then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - otype="`basename $ifile .nml | sed s/^${prog}_//`" - ofile="$path_w/`basename $ifile .nml`.out" - else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - otype="`basename $ifile .inp | sed s/^${prog}_//`" - ofile="$path_w/`basename $ifile .inp`.out" + gu="_$g" fi + + for ifile in $inputs + do - echo " Processing $ifile" - echo " Screen output routed to $ofile" +# link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + \rm -f $prog.nml + \ln -s $ifile $prog.nml + otype="`basename $ifile .nml | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .nml`.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + otype="`basename $ifile .inp | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .inp`.out" + fi + + echo " Processing $ifile for $otype" + echo " Screen output routed to $ofile" - if [ $multi -eq 2 ] - then - \rm -f mod_def.ww3 - \ln -s mod_def.$g mod_def.ww3 - fi - if $path_e/$prog > $ofile - then - \rm -f $prog.inp - \rm -f $prog.nml if [ $multi -eq 2 ] then \rm -f mod_def.ww3 - mv $otype.ww3 $otype.$g - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + \ln -s mod_def.$g mod_def.ww3 + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_e/$prog > $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml + if [ $multi -eq 2 ] then - mv $prog.nml.log ${prog}_$g.nml.log + \rm -f mod_def.ww3 + mv $otype.ww3 $otype.$g + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + mv $prog.nml.log ${prog}_$g.nml.log + fi fi + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt fi - else - errmsg "Error occured during $path_e/$prog execution" - exit 1 - fi + + done done - done + fi fi +if [ $exit_p = $prog ] +then + exit +fi + +# 3.e.2 Prep forcing fields --------------------------------------------------- # + +prog=ww3_prnc +if [ $exec_p = $prog -o $exec_p = "none" ] +then + +# select inp/nml files + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] + then + inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" + else + inputs="`ls $path_i/$prog*.inp 2>/dev/null`" + fi + + if [ $? = 0 ] + then + echo ' ' + echo '+-------------------------------+' + echo '| Prep of NetCDF forcing fields |' + echo '+-------------------------------+' + echo ' ' + + if [ $force_shrd ] + then # build pre- & post-processing programs with SHRD only + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //'| \ + sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + else + \cp -f $file_c $path_b/switch + fi + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_b/w3_make $prog + then : + else + errmsg "Error occured during WW3 $prog build" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi + + if [ ! -f $path_e/$prog ] + then + errmsg "$path_e/$prog not found" + exit 1 + fi + + for g in $input_grids + do + + if [ $multi -eq 2 ] + then + gu="_$g" + fi + + for ifile in $inputs + do + +# link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + \rm -f $prog.nml + \ln -s $ifile $prog.nml + otype="`basename $ifile .nml | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .nml`.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + otype="`basename $ifile .inp | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .inp`.out" + fi + + echo " Processing $ifile" + echo " Screen output routed to $ofile" + + if [ $multi -eq 2 ] + then + \rm -f mod_def.ww3 + \ln -s mod_def.$g mod_def.ww3 + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_e/$prog > $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml + if [ $multi -eq 2 ] + then + \rm -f mod_def.ww3 + mv $otype.ww3 $otype.$g + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + mv $prog.nml.log ${prog}_$g.nml.log + fi + fi + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + + done + + done + + fi + fi if [ $exit_p = $prog ] @@ -1113,173 +1302,206 @@ else prog=ww3_shel prgb=ww3_shel fi + if [ $exec_p = $prog -o $exec_p = "none" ] then # track file - multigrid option (ge 1) -if [ $multi -ge 1 ] -then - for g in $all_grids - do - ifile="`ls $path_i/track_i.$g 2>/dev/null`" + if [ $multi -ge 1 ] + then + for g in $all_grids + do + ifile="`ls $path_i/track_i.$g 2>/dev/null`" + if [ $? = 0 ] + then + \rm -f track_i.$g + \ln -s $ifile + fi + done + else + ifile="`ls $path_i/track_i.ww3 2>/dev/null`" if [ $? = 0 ] then - \rm -f track_i.$g + \rm -f track_i.ww3 \ln -s $ifile fi - done -else - ifile="`ls $path_i/track_i.ww3 2>/dev/null`" - if [ $? = 0 ] - then - \rm -f track_i.ww3 - \ln -s $ifile fi -fi - + # config filename - gridset option (eq 2) -if [ $multi -eq 2 ] -then - fileconf="${prog}_${grdset}" -else - fileconf="${prog}" -fi - -# select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${fileconf}.nml 2>/dev/null`" ] -then - ifile="`ls ${path_i}/${fileconf}.nml 2>/dev/null`" -else - ifile="`ls $path_i/${fileconf}.inp 2>/dev/null`" -fi - - -if [ $? = 0 ] -then - - echo ' ' - echo '+--------------------+' - echo '| Main program |' - echo '+--------------------+' - echo ' ' - - \cp -f $file_c $path_b/switch - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST + if [ $multi -eq 2 ] + then + fileconf="${prog}_${grdset}" + else + fileconf="${prog}" fi - if $path_b/w3_make $prgb - then : + +# select inp/nml files + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${fileconf}.nml 2>/dev/null`" ] + then + ifile="`ls ${path_i}/${fileconf}.nml 2>/dev/null`" else - errmsg "Error occured during WW3 $prgb build" - exit 1 + ifile="`ls $path_i/${fileconf}.inp 2>/dev/null`" fi - if [ $multi -ge 1 ] && [ $coupl = "ESMF" ] + + + if [ $? = 0 ] then - if [ $cmplr ] - then - export WW3_COMP=$cmplr + + echo ' ' + echo '+--------------------+' + echo '| Main program |' + echo '+--------------------+' + echo ' ' + + \cp -f $file_c $path_b/switch + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST fi - if make -C $path_s/esmf $prgb + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_b/w3_make $prgb then : else - errmsg "Error occured during WW3 ESMF build" + errmsg "Error occured during WW3 $prgb build" exit 1 fi - fi - - if [ ! -f $path_e/$prgb ] - then - errmsg "$path_e/$prgb not found" - exit 1 - fi - - ofile="$path_w/$prog.out" - - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] - then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - fi - - if [ $multi -ge 1 ] && [ $coupl = "ESMF" ] - then - \rm -f PET*.ESMF_LogFile - \rm -f ww3_esmf.rc - \cp -f ${path_i}/ww3_esmf.rc ww3_esmf.rc - if [ ! -z "`echo ${ifile} | grep -o nml`" ] + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi + + if [ $multi -ge 1 ] && [ $coupl = "ESMF" ] then - echo "WAV_input_file_name: $prog.nml" >> ww3_esmf.rc + if [ $cmplr ] + then + export WW3_COMP=$cmplr + fi + if make -C $path_s/esmf $prgb + then : + else + errmsg "Error occured during WW3 ESMF build" + exit 1 + fi fi - if [ $nproc ] + + if [ ! -f $path_e/$prgb ] then - echo "pet_count: $nproc" >> ww3_esmf.rc - else - echo "pet_count: 1" >> ww3_esmf.rc + errmsg "$path_e/$prgb not found" + exit 1 fi - fi - - echo " Processing $ifile" - echo " Screen output copied to $ofile" - if [ $pmpi ] - then - if [ $nproc ] + + ofile="$path_w/$prog.out" + +# link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] then - runcmd="$runcmd -np $nproc" + \rm -f $prog.nml + \ln -s $ifile $prog.nml + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp fi - if [ $nthrd ] + + if [ $multi -ge 1 ] && [ $coupl = "ESMF" ] then - if ( which omplace ) ; then - runcmd="$runcmd omplace -nt $nthrd" + \rm -f PET*.ESMF_LogFile + \rm -f ww3_esmf.rc + \cp -f ${path_i}/ww3_esmf.rc ww3_esmf.rc + if [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + echo "WAV_input_file_name: $prog.nml" >> ww3_esmf.rc + fi + if [ $nproc ] + then + echo "pet_count: $nproc" >> ww3_esmf.rc else - runcmd="$runcmd /usr/bin/env OMP_NUM_THREADS=$nthrd" + echo "pet_count: 1" >> ww3_esmf.rc fi fi - fi - if [ $pomp ] - then - if [ $nproc ] + + echo " Processing $ifile" + echo " Screen output copied to $ofile" + if [ $pmpi ] then - export OMP_NUM_THREADS=$nproc + if [ $nproc ] + then + if [ $batchq = "slurm" ] + then + runcmd="$runcmd -n $nproc" + + else + runcmd="$runcmd -np $nproc" + fi + fi + if [ $nthrd ] + then + if ( which omplace ) ; then + runcmd="$runcmd omplace -nt $nthrd" + else + runcmd="$runcmd /usr/bin/env OMP_NUM_THREADS=$nthrd" + fi + fi fi - fi - - if [ $multi -eq 0 ] && [ $coupl = "OASIS" ] - then - halfnproc=$(($nproc / 2)) - if $runcmd1 -np $halfnproc $path_e/$prgb : -np $halfnproc $path_w/toy_model | tee $ofile + if [ $pomp ] then - \rm -f track_i.ww3 - \rm -f $prog.inp - else - errmsg "Error occured during $path_e/$prog execution" - exit 1 + if [ $nproc ] + then + export OMP_NUM_THREADS=$nproc + fi fi - else - if $runcmd $path_e/$prgb | tee $ofile + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if [ $multi -eq 0 ] && [ $coupl = "OASIS" ] then - \rm -f track_i.ww3 - \rm -f $prog.inp - \rm -f $prog.nml - for file_p in ${files_p} - do - \rm -f ${file_p} - done + halfnproc=$(($nproc / 2)) + if $runcmd1 -np $halfnproc $path_e/$prgb : -np $halfnproc $path_w/toy_model | tee $ofile + then + \rm -f track_i.ww3 + \rm -f $prog.inp + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 + fi else - errmsg "Error occured during $path_e/$prog execution" - exit 1 + if $runcmd $path_e/$prgb | tee $ofile + then + \rm -f track_i.ww3 + \rm -f $prog.inp + \rm -f $prog.nml + for file_p in ${files_p} + do + \rm -f ${file_p} + done + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 + fi + fi + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt fi fi fi -fi - if [ $exit_p = $prog ] then exit @@ -1292,85 +1514,111 @@ if [ $exec_p = $prog -o $exec_p = "none" ] then # config filename - gridset option (eq 2) -if [ $multi -eq 2 ] -then - fileconf="${prog}_${grdset}" -else - fileconf="${prog}" -fi - -# select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${fileconf}.nml 2>/dev/null`" ] -then - ifile="`ls ${path_i}/${fileconf}.nml 2>/dev/null`" -else - ifile="`ls $path_i/${fileconf}.inp 2>/dev/null`" -fi - - -if [ $? = 0 ] -then - - echo ' ' - echo '+-------------------------+' - echo '| Integrated output |' - echo '+-------------------------+' - echo ' ' - - if [ $force_shrd ] - then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch - else - \cp -f $file_c $path_b/switch - fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : + if [ $multi -eq 2 ] + then + fileconf="${prog}_${grdset}" else - errmsg "Error occured during WW3 $prog build" - exit 1 + fileconf="${prog}" fi - - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] +# select inp/nml files + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${fileconf}.nml 2>/dev/null`" ] then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - ofile="$path_w/`basename $ifile .nml`.out" + ifile="`ls ${path_i}/${fileconf}.nml 2>/dev/null`" else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - ofile="$path_w/`basename $ifile .inp`.out" + ifile="`ls $path_i/${fileconf}.inp 2>/dev/null`" fi - echo " Processing $ifile" - echo " Screen output copied to $ofile" - if $path_e/$prog > $ofile + if [ $? = 0 ] then - \rm -f $prog.inp - \rm -f $prog.nml - for g in $intgl_grids - do - if [ -f "out_grd.$g" ] - then - model_grids="$model_grids $g" - fi - done - else - errmsg "Error occured during $path_e/$prog execution" - exit 1 - fi -fi + echo ' ' + echo '+-------------------------+' + echo '| Integrated output |' + echo '+-------------------------+' + echo ' ' + + if [ $force_shrd ] + then # build pre- & post-processing programs with SHRD only + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //'| \ + sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + else + \cp -f $file_c $path_b/switch + fi + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_b/w3_make $prog + then : + else + errmsg "Error occured during WW3 $prog build" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi + +# link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + \rm -f $prog.nml + \ln -s $ifile $prog.nml + ofile="$path_w/`basename $ifile .nml`.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + ofile="$path_w/`basename $ifile .inp`.out" + fi + + echo " Processing $ifile" + echo " Screen output copied to $ofile" + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_e/$prog > $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml + for g in $intgl_grids + do + if [ -f "out_grd.$g" ] + then + model_grids="$model_grids $g" + fi + done + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + + fi fi @@ -1402,169 +1650,197 @@ fi for prog in $out_progs do -rline='| Gridded output |' -if [ $prog = ww3_ounf ] -then - rline='| NC Gridded output |' -fi -if [ $prog = gx_outf ] -then - rline='|GrADS Gridded output|' -fi - -if [ $exec_p = $prog -o $exec_p = "none" ] -then - -# select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] -then - inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" -else - inputs="`ls $path_i/$prog*.inp 2>/dev/null`" -fi - - -if [ $? = 0 ] -then - - echo ' ' - echo '+--------------------+' - echo "$rline" - echo '+--------------------+' - echo ' ' - - if [ $force_shrd ] - then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch - else - \cp -f $file_c $path_b/switch - fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : - else - errmsg "Error occured during WW3 $prog build" - exit 1 + rline='| Gridded output |' + if [ $prog = ww3_ounf ] + then + rline='| NC Gridded output |' fi - - if [ ! -f $path_e/$prog ] + if [ $prog = gx_outf ] then - errmsg "$path_e/$prog not found" - exit 1 + rline='|GrADS Gridded output|' fi - for g in $model_grids - do + if [ $exec_p = $prog -o $exec_p = "none" ] + then - if [ $multi -eq 2 ] +# select inp/nml files + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] then - if [ ! -e out_grd.$g ] - then - continue - fi - gu="_$g" + inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" + else + inputs="`ls $path_i/$prog*.inp 2>/dev/null`" fi - for ifile in $inputs - do - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] - then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - otype="`basename $ifile .nml | sed s/^${prog}_//`" - ofile="$path_w/`basename $ifile .nml`${gu}.out" + if [ $? = 0 ] + then + + echo ' ' + echo '+--------------------+' + echo "$rline" + echo '+--------------------+' + echo ' ' + + if [ $force_shrd ] + then # build pre- & post-processing programs with SHRD only + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //'| \ + sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - otype="`basename $ifile .inp | sed s/^${prog}_//`" - ofile="$path_w/`basename $ifile .inp`${gu}.out" + \cp -f $file_c $path_b/switch + fi + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` fi - echo " Processing $ifile" - echo " Screen output routed to $ofile" + if $path_b/w3_make $prog + then : + else + errmsg "Error occured during WW3 $prog build" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi - if [ $multi -eq 2 ] + if [ ! -f $path_e/$prog ] then - \rm -f mod_def.ww3 - \rm -f out_grd.ww3 - \ln -s mod_def.$g mod_def.ww3 - \ln -s out_grd.$g out_grd.ww3 - \rm -f ww3.????????.* - \rm -fr ${otype}_$g + errmsg "$path_e/$prog not found" + exit 1 fi - if $path_e/$prog > $ofile - then - \rm -f $prog.inp - \rm -f $prog.nml + + for g in $model_grids + do + if [ $multi -eq 2 ] then - \rm -f mod_def.ww3 - \rm -f out_grd.ww3 - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + if [ ! -e out_grd.$g ] then - mv $prog.nml.log ${prog}_$g.nml.log + continue fi - ofiles="`ls ww3.????????.* 2>/dev/null`" - if [ $? = 0 ] + gu="_$g" + fi + + for ifile in $inputs + do + +# link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] then - mkdir ${otype}_$g - mv -f $ofiles ${otype}_$g/. - echo " ASCII output files moved to ${otype}_$g" + \rm -f $prog.nml + \ln -s $ifile $prog.nml + otype="`basename $ifile .nml | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .nml`${gu}.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + otype="`basename $ifile .inp | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .inp`${gu}.out" fi - ofiles="`ls ww3.????*.nc 2>/dev/null`" - if [ $? = 0 ] + + echo " Processing $ifile" + echo " Screen output routed to $ofile" + + if [ $multi -eq 2 ] then - mkdir ${otype}_$g - mv -f $ofiles ${otype}_$g/. - echo " NetCDF output files moved to ${otype}_$g" + \rm -f mod_def.ww3 + \rm -f out_grd.ww3 + \ln -s mod_def.$g mod_def.ww3 + \ln -s out_grd.$g out_grd.ww3 + \rm -f ww3.????????.* + \rm -fr ${otype}_$g fi -# - if [ "$prog" = 'gx_outf' ] + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_e/$prog > $ofile then - case $g in - 'grd2' ) sed -e "s/ww3\.grads/ww3\.$g/g" \ - -e "s/37\.5/3\.75/g" \ - -e "s/1\.50/0\.15/g" \ - ww3.ctl > $g.ctl ;; - 'grd3' ) sed -e "s/ww3\.grads/ww3\.$g/g" \ - -e "s/12\.5/1\.25/g" \ - -e "s/0\.50/0\.05/g" \ - ww3.ctl > $g.ctl ;; - * ) sed -e "s/ww3\.grads/ww3\.$g/g" \ - -e "s/0\.25/2\.50/g" ww3.ctl > $g.ctl ;; - esac - rm -f ww3.ctl - echo " ww3.ctl moved to $g.ctl" - mv ww3.grads ww3.$g - echo " ww3.grads moved to ww3.$g" + \rm -f $prog.inp + \rm -f $prog.nml + if [ $multi -eq 2 ] + then + \rm -f mod_def.ww3 + \rm -f out_grd.ww3 + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + mv $prog.nml.log ${prog}_$g.nml.log + fi + ofiles="`ls ww3.????????.* 2>/dev/null`" + if [ $? = 0 ] + then + mkdir ${otype}_$g + mv -f $ofiles ${otype}_$g/. + echo " ASCII output files moved to ${otype}_$g" + fi + ofiles="`ls ww3.????*.nc 2>/dev/null`" + if [ $? = 0 ] + then + mkdir ${otype}_$g + mv -f $ofiles ${otype}_$g/. + echo " NetCDF output files moved to ${otype}_$g" + fi +# + if [ "$prog" = 'gx_outf' ] + then + case $g in + 'grd2' ) sed -e "s/ww3\.grads/ww3\.$g/g" \ + -e "s/37\.5/3\.75/g" \ + -e "s/1\.50/0\.15/g" \ + ww3.ctl > $g.ctl ;; + 'grd3' ) sed -e "s/ww3\.grads/ww3\.$g/g" \ + -e "s/12\.5/1\.25/g" \ + -e "s/0\.50/0\.05/g" \ + ww3.ctl > $g.ctl ;; + * ) sed -e "s/ww3\.grads/ww3\.$g/g" \ + -e "s/0\.25/2\.50/g" ww3.ctl > $g.ctl ;; + esac + rm -f ww3.ctl + echo " ww3.ctl moved to $g.ctl" + mv ww3.grads ww3.$g + echo " ww3.grads moved to ww3.$g" + fi + fi + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 fi - fi - else - errmsg "Error occured during $path_e/$prog execution" - exit 1 - fi - done + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi - done + done -fi + done -fi + fi -if [ $exit_p = $prog ] -then - exit -fi + fi + + if [ $exit_p = $prog ] + then + exit + fi done # end of loop on progs @@ -1593,356 +1869,447 @@ fi for prog in $out_progs do -rline='| Point output |' -if [ $prog = ww3_ounp ] -then - rline='| NC Point output |' -fi + rline='| Point output |' + if [ $prog = ww3_ounp ] + then + rline='| NC Point output |' + fi -if [ $exec_p = $prog -o $exec_p = "none" ] -then + if [ $exec_p = $prog -o $exec_p = "none" ] + then # select inp/nml format for input file to program $prog -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] -then - inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" -else - inputs="`ls $path_i/$prog*.inp 2>/dev/null`" -fi + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] + then + inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" + else + inputs="`ls $path_i/$prog*.inp 2>/dev/null`" + fi + if [ $? = 0 ] + then -if [ $? = 0 ] -then + echo ' ' + echo '+--------------------+' + echo "$rline" + echo '+--------------------+' + echo ' ' + + if [ $force_shrd ] + then # build pre- & post-processing programs with SHRD only + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //'| \ + sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + else + \cp -f $file_c $path_b/switch + fi + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST + fi - echo ' ' - echo '+--------------------+' - echo "$rline" - echo '+--------------------+' - echo ' ' + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_b/w3_make $prog + then : + else + errmsg "Error occured during WW3 $prog build" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi + + if [ ! -f $path_e/$prog ] + then + errmsg "$path_e/$prog not found" + exit 1 + fi + + for g in $point_grids + do + + if [ $multi -eq 2 ] + then + if [ ! -e out_pnt.$g ] + then + continue + fi + gu="_$g" + fi + + for ifile in $inputs + do + + # link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + \rm -f $prog.nml + \ln -s $ifile $prog.nml + otype="`basename $ifile .nml | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .nml`${gu}.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + otype="`basename $ifile .inp | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .inp`${gu}.out" + fi + + echo " Processing $ifile" + echo " Screen output routed to $ofile" + + if [ $multi -eq 2 ] + then + \rm -f mod_def.ww3 + \rm -f out_pnt.ww3 + \ln -s mod_def.$g mod_def.ww3 + \ln -s out_pnt.$g out_pnt.ww3 + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_e/$prog > $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml + if [ $multi -eq 2 ] + then + \rm -f mod_def.ww3 + \rm -f out_pnt.ww3 + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + mv $prog.nml.log ${prog}_$g.nml.log + fi + fi + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + + done + + done + + fi - if [ $force_shrd ] - then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch - else - \cp -f $file_c $path_b/switch - fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : - else - errmsg "Error occured during WW3 $prog build" - exit 1 fi - if [ ! -f $path_e/$prog ] + if [ $exit_p = $prog ] then - errmsg "$path_e/$prog not found" - exit 1 + exit fi - for g in $point_grids - do +done # end of loop on progs - if [ $multi -eq 2 ] +# 3.i Track output ---------------------------------------------------------- # + +case $outopt in + native) out_progs="ww3_trck" ;; + netcdf) out_progs="ww3_trnc" ;; + both) out_progs="ww3_trck ww3_trnc" ;; + *) out_progs="" ;; +esac + +for prog in $out_progs +do + + if [ $exec_p = $prog -o $exec_p = "none" ] + then + +# select inp/nml files + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] then - if [ ! -e out_pnt.$g ] - then - continue - fi - gu="_$g" + inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" + else + inputs="`ls $path_i/$prog*.inp 2>/dev/null`" fi - for ifile in $inputs - do - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] - then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - otype="`basename $ifile .nml | sed s/^${prog}_//`" - ofile="$path_w/`basename $ifile .nml`${gu}.out" + if [ $? = 0 ] + then + + echo ' ' + echo '+--------------------+' + echo '| Track output |' + echo '+--------------------+' + echo ' ' + + if [ $force_shrd ] + then # build pre- & post-processing programs with SHRD only + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //'| \ + sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - otype="`basename $ifile .inp | sed s/^${prog}_//`" - ofile="$path_w/`basename $ifile .inp`${gu}.out" + \cp -f $file_c $path_b/switch + fi + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST fi - echo " Processing $ifile" - echo " Screen output routed to $ofile" + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi - if [ $multi -eq 2 ] - then - \rm -f mod_def.ww3 - \rm -f out_pnt.ww3 - \ln -s mod_def.$g mod_def.ww3 - \ln -s out_pnt.$g out_pnt.ww3 + if $path_b/w3_make $prog + then : + else + errmsg "Error occured during WW3 $prog build" + exit 1 fi - if $path_e/$prog > $ofile + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi + + if [ ! -f $path_e/$prog ] then - \rm -f $prog.inp - \rm -f $prog.nml + errmsg "$path_e/$prog not found" + exit 1 + fi + + for g in $point_grids + do + + if [ $multi -eq 2 ] + then + if [ ! -e track_o.$g ] + then + continue + fi + gu="_$g" + fileconf="$prog${gu}" + else + fileconf="$prog" + fi + +# select inp/nml files + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${fileconf}.nml 2>/dev/null`" ] + then + ifile="`ls ${path_i}/${fileconf}.nml 2>/dev/null`" + else + ifile="`ls $path_i/${fileconf}.inp 2>/dev/null`" + fi + + if [ ! -f $ifile ] + then + errmsg "$ifile not found" + exit 1 + fi + +# link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + \rm -f $prog.nml + \ln -s $ifile $prog.nml + otype="`basename $ifile .nml | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .nml`.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + otype="`basename $ifile .inp | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .inp`.out" + fi + + echo " Processing $ifile" + echo " Screen output routed to $ofile" + if [ $multi -eq 2 ] then - \rm -f mod_def.ww3 - \rm -f out_pnt.ww3 - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + \rm -f track_o.ww3 + \ln -s track_o.$g track_o.ww3 + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_e/$prog > $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml + if [ $multi -eq 2 ] then - mv $prog.nml.log ${prog}_$g.nml.log + \rm -f track_o.ww3 + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + mv $prog.nml.log ${prog}_$g.nml.log + fi + if [ -e track.ww3 ] + then + mv track.ww3 track.$g + elif [ -e track.nc ] + then + mv track.nc track_$g.nc + fi fi + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 fi - else - errmsg "Error occured during $path_e/$prog execution" - exit 1 - fi - - done - done + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + done -fi + fi -fi + fi -if [ $exit_p = $prog ] -then - exit -fi + if [ $exit_p = $prog ] + then + exit + fi done # end of loop on progs -# 3.i Track output ---------------------------------------------------------- # - -case $outopt in - native) out_progs="ww3_trck" ;; - netcdf) out_progs="ww3_trnc" ;; - both) out_progs="ww3_trck ww3_trnc" ;; - *) out_progs="" ;; -esac - -for prog in $out_progs -do +# 3.j Wave system tracking -------------------------------------------------- # +prog=ww3_systrk if [ $exec_p = $prog -o $exec_p = "none" ] then # select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] -then - inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" -else - inputs="`ls $path_i/$prog*.inp 2>/dev/null`" -fi - - -if [ $? = 0 ] -then - - echo ' ' - echo '+--------------------+' - echo '| Track output |' - echo '+--------------------+' - echo ' ' - - if [ $force_shrd ] - then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch - else - \cp -f $file_c $path_b/switch - fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] + then + ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" else - errmsg "Error occured during WW3 $prog build" - exit 1 + ifile="`ls $path_i/$prog.inp 2>/dev/null`" fi - if [ ! -f $path_e/$prog ] + + if [ $? = 0 ] then - errmsg "$path_e/$prog not found" - exit 1 - fi - for g in $point_grids - do + echo ' ' + echo '+-------------------------+' + echo '| Wave system tracking |' + echo '+-------------------------+' + echo ' ' - if [ $multi -eq 2 ] - then - if [ ! -e track_o.$g ] - then - continue - fi - gu="_$g" - fileconf="$prog${gu}" - else - fileconf="$prog" + \cp -f $file_c $path_b/switch +# if [ $force_shrd ] +# then # build pre- & post-processing programs with SHRD only +# cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ +# sed 's/OMPG //' | sed 's/OMPX //'| \ +# sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switchh +# else +# \cp -f $file_c $path_b/switch +# fi + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST fi - # select inp/nml files - if [ $nml_input ] && [ ! -z "`ls ${path_i}/${fileconf}.nml 2>/dev/null`" ] - then - ifile="`ls ${path_i}/${fileconf}.nml 2>/dev/null`" - else - ifile="`ls $path_i/${fileconf}.inp 2>/dev/null`" + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` fi - if [ ! -f $ifile ] - then - errmsg "$ifile not found" + if $path_b/w3_make $prog + then : + else + errmsg "Error occured during WW3 $prog build" exit 1 fi - # link conf file + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi + + +# link conf file if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] then \rm -f $prog.nml \ln -s $ifile $prog.nml - otype="`basename $ifile .nml | sed s/^${prog}_//`" ofile="$path_w/`basename $ifile .nml`.out" else \rm -f $prog.inp \ln -s $ifile $prog.inp - otype="`basename $ifile .inp | sed s/^${prog}_//`" ofile="$path_w/`basename $ifile .inp`.out" fi echo " Processing $ifile" - echo " Screen output routed to $ofile" + echo " Screen output copied to $ofile" - if [ $multi -eq 2 ] + if [ $pmpi ] then - \rm -f track_o.ww3 - \ln -s track_o.$g track_o.ww3 - fi - if $path_e/$prog > $ofile - then - \rm -f $prog.inp - \rm -f $prog.nml - if [ $multi -eq 2 ] + if [ $nproc ] then - \rm -f track_o.ww3 - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + if [ $batchq = "slurm" ] then - mv $prog.nml.log ${prog}_$g.nml.log + runcmd="$runcmd -n $nproc" + + else + runcmd="$runcmd -np $nproc" fi - if [ -e track.ww3 ] - then - mv track.ww3 track.$g - elif [ -e track.nc ] - then - mv track.nc track_$g.nc - fi fi + fi + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + if $runcmd $path_e/$prog | tee $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml else errmsg "Error occured during $path_e/$prog execution" exit 1 fi - done - -fi - -fi - -if [ $exit_p = $prog ] -then - exit -fi - -done # end of loop on progs - -# 3.j Wave system tracking -------------------------------------------------- # - -prog=ww3_systrk -if [ $exec_p = $prog -o $exec_p = "none" ] -then - -# select inp/nml files -if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] -then - ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" -else - ifile="`ls $path_i/$prog.inp 2>/dev/null`" -fi - - -if [ $? = 0 ] -then - - echo ' ' - echo '+-------------------------+' - echo '| Wave system tracking |' - echo '+-------------------------+' - echo ' ' - - \cp -f $file_c $path_b/switch -# if [ $force_shrd ] -# then # build pre- & post-processing programs with SHRD only -# cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ -# sed 's/OMPG //' | sed 's/OMPX //'| \ -# sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switchh -# else -# \cp -f $file_c $path_b/switch -# fi - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : - else - errmsg "Error occured during WW3 $prog build" - exit 1 - fi - - - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] - then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - ofile="$path_w/`basename $ifile .nml`.out" - else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - ofile="$path_w/`basename $ifile .inp`.out" - fi - - echo " Processing $ifile" - echo " Screen output copied to $ofile" - - if [ $pmpi ] - then - if [ $nproc ] - then - runcmd="$runcmd -np $nproc" + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt fi - fi - if $runcmd $path_e/$prog | tee $ofile - then - \rm -f $prog.inp - \rm -f $prog.nml - else - errmsg "Error occured during $path_e/$prog execution" - exit 1 - fi +# if [ $time_count ] +# then # Add time counter if -T +# Tstart=`date +"%s.%2N"` +# fi +# # if $path_e/$prog > $ofile # then # \rm -f $prog.inp @@ -1957,8 +2324,16 @@ then # errmsg "Error occured during $path_e/$prog execution" # exit 1 # fi +# +# if [ $time_count ] +# then # Add time counter if -T +# Tend=`date +"%s.%2N"` +# Maketime=`echo "$Tend - $Tstart" | bc` +# cumult_run=`echo "$Maketime + $cumult_run" | bc` +# printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt +# fi -fi + fi fi @@ -1983,68 +2358,99 @@ then ifile="`ls $path_i/$prog.inp 2>/dev/null`" #fi -if [ $? = 0 ] -then - - echo ' ' - echo '+-------------------------+' - echo '| Update Restart File |' - echo '+-------------------------+' - echo ' ' - - \cp -f $file_c $path_b/switch - if [ $testST ] - then #add S T switches - \cp -f $path_b/switch $path_b/switch_noST - cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch - rm $path_b/switch_noST - fi - if $path_b/w3_make $prog - then : - else - errmsg "Error occured during WW3 $prog build" - exit 1 - fi - - # link conf file - if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + if [ $? = 0 ] then - \rm -f $prog.nml - \ln -s $ifile $prog.nml - ofile="$path_w/`basename $ifile .nml`.out" - else - \rm -f $prog.inp - \ln -s $ifile $prog.inp - ofile="$path_w/`basename $ifile .inp`.out" - fi - echo " Processing $ifile" - echo " Screen output copied to $ofile" + echo ' ' + echo '+-------------------------+' + echo '| Update Restart File |' + echo '+-------------------------+' + echo ' ' -# Additional Files - \rm -f anl.grbtxt - \ln -s "$path_i/anl.grbtxt" anl.grbtxt - - mv -f restart001.ww3 restart.ww3 + \cp -f $file_c $path_b/switch + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST + fi - if [ $pmpi ] - then - if [ $nproc ] + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_b/w3_make $prog + then : + else + errmsg "Error occured during WW3 $prog build" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi + +# link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] then - runcmd="$runcmd -np $nproc" + \rm -f $prog.nml + \ln -s $ifile $prog.nml + ofile="$path_w/`basename $ifile .nml`.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + ofile="$path_w/`basename $ifile .inp`.out" fi + + echo " Processing $ifile" + echo " Screen output copied to $ofile" + +# Additional Files + \rm -f anl.grbtxt + \ln -s "$path_i/anl.grbtxt" anl.grbtxt + + mv -f restart001.ww3 restart.ww3 + + if [ $pmpi ] + then + if [ $nproc ] + then + if [ $batchq = "slurm" ] + then + runcmd="$runcmd -n $nproc" + else + runcmd="$runcmd -np $nproc" + fi + fi + fi + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $runcmd $path_e/$prog | tee $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 + fi + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + fi - if $runcmd $path_e/$prog | tee $ofile - then - \rm -f $prog.inp - \rm -f $prog.nml - else - errmsg "Error occured during $path_e/$prog execution" - exit 1 - fi - -fi - + fi if [ $exit_p = $prog ] @@ -2052,8 +2458,6 @@ then exit fi - - # 3.k End ------------------------------------------------------------------- # if [ "$stub" ] @@ -2061,6 +2465,13 @@ then date > finished fi +if [ $time_count ] +then # Export cumultive time if time_count + printf "\n\n Total compile time: %8.2f sec" $cumult_comp >> time_count.txt + printf "\n Total run time : %8.2f sec" $cumult_run >> time_count.txt + printf "\n" >> time_count.txt +fi + echo ' ' ; echo ' ' ; echo "Files in `pwd` :" ; echo ' ' ls -l From 3063a4cd337bab3de738c7ee16aa91952d1c180f Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Tue, 25 Jun 2019 16:49:00 -0400 Subject: [PATCH 09/84] Fb esmf makefile (#53) Thanks to reviewers @JessicaMeixner-NOAA and @aliabdolali for assessing changes. * Branch esmf_makefile: Creating branch to update Makefile for NEMS buil adding codes needed for NCEP operations. --- model/bin/cmplr.env | 48 +++----- model/bin/comp.wcoss_dell_p3 | 211 ++++++++++++++++++++++++++++++++++ model/bin/link.wcoss_dell_p3 | 216 +++++++++++++++++++++++++++++++++++ model/bin/w3_setup | 12 +- model/esmf/Makefile | 2 +- 5 files changed, 449 insertions(+), 40 deletions(-) create mode 100755 model/bin/comp.wcoss_dell_p3 create mode 100755 model/bin/link.wcoss_dell_p3 diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 67d50e94e..edce02b92 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -13,7 +13,7 @@ # # # value : mpt / intel / gnu / pgi # # suffix : _debug # -# prefix : zeus_ / datarmor_ # +# prefix : datarmor_ # # # # - examples : intel / pgi_debug / datarmor_mpt_debug # # # @@ -38,7 +38,6 @@ list='no' ############################### if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ - [ "$cmplr" == "zeus_mpt" ] || [ "$cmplr" == "zeus_mpt_debug" ] || \ [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -47,8 +46,8 @@ if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ comp_seq='ifort' comp_mpi='ifort -lmpi' - # zeus compiler - if [ ! -z "$(echo $cmplr | grep zeus)" ] ; then + # Cray compiler + if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then comp_seq='ftn' comp_mpi='ftn' fi @@ -79,10 +78,7 @@ if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ fi # system-dependant options - if [ ! -z "$(echo $cmplr | grep zeus)" ] ; then - optc="$optc -fastsse" - optl="$optl -fastsse" - elif [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then + if [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then optc="$optc -xcore-avx2" optl="$optl -xcore-avx2" else @@ -98,7 +94,10 @@ fi ############################### if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ - [ "$cmplr" == "zeus_intel" ] || [ "$cmplr" == "zeus_intel_debug" ] || \ + [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_phase2_intel_debug" ] || \ + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_cray_intel_debug" ] || \ + [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "wcoss_dell_p3_intel_debug" ] || \ + [ "$cmplr" == "theia" ] || [ "$cmplr" == "theia_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -107,8 +106,8 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ comp_seq='ifort' comp_mpi='mpiifort' - # zeus compiler - if [ ! -z "$(echo $cmplr | grep zeus)" ] ; then + # cray compiler + if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then comp_seq='ftn' comp_mpi='ftn' fi @@ -139,10 +138,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ fi # system-dependant options - if [ ! -z "$(echo $cmplr | grep zeus)" ] ; then - optc="$optc -fastsse" - optl="$optl -fastsse" - elif [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then + if [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then optc="$optc -xcore-avx2" optl="$optl -xcore-avx2" else @@ -153,14 +149,11 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ fi - - ############################### # GNU # ############################### if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "zeus_gnu" ] || [ "$cmplr" == "zeus_gnu_debug" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -169,8 +162,8 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ comp_seq='gfortran' comp_mpi='mpif90' - # zeus compiler - if [ ! -z "$(echo $cmplr | grep zeus)" ] ; then + # Cray compiler + if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then comp_seq='ftn' comp_mpi='ftn' fi @@ -198,10 +191,7 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ fi # system-dependant options - if [ ! -z "$(echo $cmplr | grep zeus)" ] ; then - optc="$optc -fastsse" - optl="$optl -fastsse" - elif [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then + if [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then optc="$optc -march=core-avx2" optl="$optl -march=core-avx2" else @@ -219,7 +209,6 @@ fi ############################### if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ - [ "$cmplr" == "zeus_pgi" ] || [ "$cmplr" == "zeus_pgi_debug" ] || \ [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -228,8 +217,8 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ comp_seq='pgf90' comp_mpi='mpif90' - # zeus compiler - if [ ! -z "$(echo $cmplr | grep zeus)" ] ; then + # Cray compiler + if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then comp_seq='ftn' comp_mpi='ftn' fi @@ -260,10 +249,7 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ fi # system-dependant options - if [ ! -z "$(echo $cmplr | grep zeus)" ] ; then - optc="$optc -fastsse" - optl="$optl -fastsse" - elif [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then + if [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then optc="$(echo $optc | sed 's/O3/O2/') -Mlist" optl="$optl" else diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 new file mode 100755 index 000000000..afb5a6043 --- /dev/null +++ b/model/bin/comp.wcoss_dell_p3 @@ -0,0 +1,211 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# comp : Compiler script for use in ad3 (customized for hardware and # +# optimization). Note that this script will not be replaced if part # +# of WAVEWATCH III is re-installed. Used by ad3. # +# # +# use : comp name # +# name: name of source code file without the extension. # +# # +# error codes : 1 : input error # +# 2 : no environment file $ww3_env found. # +# 3 : error in creating scratch directory. # +# 4 : w3adc error. # +# 5 : compiler error. # +# # +# remarks : # +# # +# - This script runs from the scratch directory, where it should remain. # +# # +# - For this script to interact with ad3, it needs to generate / leave # +# following files : # +# $name.f90 : Source code (generated by ad3). # +# $name.o : Object module. # +# $name.l : Listing file. # +# comp.stat.$name : status file of compiler, containing number of errors # +# and number of warnings (generated by comp). # +# # +# - Upon (first) installation of WAVEWATCH III the user needs to check the # +# following parts of this script : # +# sec. 2.b : Provide correct compiler/options. # +# sec. 3.a : Provide correct error capturing. # +# sec. 3.d : Remove unnecessary files. # +# # +# - This version is made for the Intel ifort version 12 on Xeon Westmere # +# - On zeus the -list option slows down the compilation time by an order # +# of magnitude. For this section 1.c is added. # +# # +# Hendrik L. Tolman # +# June 2012 # +# --------------------------------------------------------------------------- # +# 1. Preparations # +# --------------------------------------------------------------------------- # +# 1.a Check and process input + + if [ "$#" != '1' ] + then + echo "usage: comp name" ; exit 1 + fi + name="$1" + +# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + rm -f $name.l + rm -f $name.o + rm -f comp.stat.$name + +# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - + + list=' -list' + list= + +# --------------------------------------------------------------------------- # +# 2. Compile # +# --------------------------------------------------------------------------- # +# Add here the correct compiler call including command line options +# Note: - do not invoke a link step +# - if possible, generate a listing $name.l +# - make sure the compiler point to the proper directory where the +# modules are stored ($m_path), see examples below. + +# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - +# .f90 assumes free format, .f assumes fixed format, change if necessary +# *** file extension (fext) is set and exported by calling program (ad3) *** + +# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - +# Save compiler exit code in $OK +# +# Intel compiler on Linux ---------------------------------------------------- +# 2.b.1 Build options and determine compiler name + + opt="-c $list -O3 -assume byterecl -ip -module $path_m" +# opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" +# opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" +# opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" + + if [ "$name" != 'ww3_gspl' ] + then + opt="$opt -convert big_endian" + fi + + # mpi implementation + if [ "$mpi_mod" = 'yes' ] + then + comp=mpiifort + which mpiifort 1> /dev/null 2> /dev/null + OK=$? + if [ $OK != 0 ] + then + comp=ifort + fi + + else + comp=ifort + fi + + # open mpi implementation + if [ "$omp_mod" = 'yes' ] + then + opt="$opt -qopenmp" + fi + + # oasis coupler include dir + if [ "$oasis_mod" = 'yes' ] + then + opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" + fi + + # netcdf include dir + if [ "$netcdf_compile" = 'yes' ] + then + case $WWATCH3_NETCDF in + NC3) opt="$opt -I$NETCDF_INCDIR" ;; + NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi + opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; + esac + fi + + # ftn include dir + opt="$opt -I$path_i" + opt="$opt $ESMF_F90COMPILEPATHS" + opt="$opt $EXTRA_COMP_OPTIONS" + +# 2.b.2 Compile + + $comp $opt $name.$fext > $name.out 2> $name.err + OK="$?" + +# 2.b.2 Process listing + + if [ -s $name.lst ] + then + mv $name.lst $name.l + fi + +# 2.b.3 Add test output to listing for later viewing + + if [ -s $name.l ] + then + echo '------------' >> $name.l + echo "$comp $opt" >> $name.l + echo '------------' >> $name.l + cat $name.out >> $name.l 2> /dev/null + echo '------------' >> $name.l + cat $name.err >> $name.l 2> /dev/null + echo '------------' >> $name.l + fi + +# --------------------------------------------------------------------------- # +# 3. Postprocessing # +# --------------------------------------------------------------------------- # +# 3.a Capture errors +# nr_err : number of errors. +# nr_war : number of errors. + + nr_err='0' + nr_war='0' + + if [ -s $name.err ] + then + nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` + nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` + else + if [ "$OK" != '0' ] + then + nr_err='1' + fi + fi + +# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - + + echo "ERROR $nr_err" > comp.stat.$name + echo "WARNING $nr_war" >> comp.stat.$name + +# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# if compiler does not provide listing, make listing from source code +# and compiler messages. Second input line for w3list identifies if +# comment lines are to be numbered. + + if [ ! -f $name.l ] + then + echo "$name.$fext" > w3list.inp + echo "T" >> w3list.inp + w3list < w3list.inp 2> /dev/null + rm -f w3list.inp + mv w3list.out $name.l + echo '------------' >> $name.l + echo "$comp $opt" >> $name.l + echo '------------' >> $name.l + cat $name.out >> $name.l #2> /dev/null + echo '------------' >> $name.l + cat $name.err >> $name.l #2> /dev/null + echo '------------' >> $name.l + fi + +# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - +# include here unwanted files generated by the compiler + +# rm -f $name.out +# rm -f $name.err + +# end of comp --------------------------------------------------------------- # diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 new file mode 100755 index 000000000..57b258d95 --- /dev/null +++ b/model/bin/link.wcoss_dell_p3 @@ -0,0 +1,216 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# link : Linker script for use in make (customized for hardware and # +# optimization. Note that this script will not be replaced if part # +# of WAVEWATCH III is re-installed. # +# # +# use : link name [name ... ] # +# name: name of source code file without the extension. # +# the first name will become the program name. # +# # +# error codes : all error output directly to screen. # +# # +# remarks : # +# # +# - Upon (first) installation of WAVEWATCH III the user needs to check the # +# following parts of this scripts : # +# sec. 3 : Provide correct link command # +# # +# - This version is made for the Intel ifort version 12 on nehalem. # +# processor. # +# # +# Hendrik L. Tolman # +# February 2012 # +# --------------------------------------------------------------------------- # +# 1. Preparations # +# --------------------------------------------------------------------------- # +# 1.a Check and process input + + if [ "$#" -lt '1' ] + then + echo "usage: link name [name]" ; exit 1 + fi + + prog=$1 + echo " Linking $prog" + input="$*" + +# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - + + source $(dirname $0)/w3_setenv + main_dir=$WWATCH3_DIR + temp_dir=$WWATCH3_TMP + source=$WWATCH3_SOURCE + list=$WWATCH3_LIST + + +# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + rm -f $main_dir/exe/$prog + +# --------------------------------------------------------------------------- # +# 2. Check objects # +# --------------------------------------------------------------------------- # + + cd $main_dir/obj + objects=$NULL + error='n' + set $input + + while [ "$#" -gt '0' ] + do + file=$1.o + if [ -f "$file" ] + then + objects="$objects $file" + else + echo " *** file $file not found ***" + error='y' + fi + shift + done + if [ "$error" = 'y' ] + then + echo "*** Missing object files ***" + exit 3 + fi + +# --------------------------------------------------------------------------- # +# 3. Link all things # +# --------------------------------------------------------------------------- # +# Add here the correct linker call including switches + +# Intel compiler ------------------------------------------------------------ +# 3.a Build options and determine compiler name +# No GRIB libraries for this one + + # linking options + libs="" + opt="-O3 -ip -o $prog" +# opt="-O3 -xSSE4.2 -ip -o $prog" +# opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" +# opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" + + # mpi implementation + if [ "$mpi_mod" = 'yes' ] + then + comp=mpiifort + which mpiifort 1> /dev/null 2> /dev/null + OK=$? + if [ $OK != 0 ] + then + comp='ifort -lmpi' + fi +# opt="-O3 -o $prog" + else + comp=ifort + fi + + # open mpi implementation + if [ "$omp_mod" = 'yes' ] + then + opt="$opt -qopenmp" + fi + + # oasis coupler archive + if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ + [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ + [ "$prog" = 'ww3_gspl' ] + then + if [ "$oasis_mod" = 'yes' ] + then + if [ -z "$(env | grep OASISDIR)" ] + then + echo '' + echo "[ERROR] OASISDIR is not defined" + exit 1 + fi + echo "link with oasis" + libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" + fi + fi + + # netcdf library dir + if [ "$netcdf_compile" = 'yes' ] + then + case $WWATCH3_NETCDF in + NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; + NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi + libs="$libs `$NETCDF_CONFIG --flibs`" ;; + esac + fi + +# NCEP grib creation + if [ "$ncep_grib_compile" = 'yes' ] + then +# GRIB libraries for this one + opt="$opt -convert big_endian -assume byterecl -prec-div -prec-sqrt -ip" + libs="$libs ${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" + fi + + # parmetis library + if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] + then + if [ "$pdlib_mod" = 'yes' ] + then + if [ -z "$(env | grep METIS_PATH)" ] + then + echo '' + echo "[ERROR] METIS_PATH is not defined" + exit 1 + fi + echo "link with parmetis" + libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" + fi + fi + + opt="$opt $EXTRA_LINK_OPTIONS" + +# 3.b Link + + rprfx="-Wl,-rpath," + rpath= + for path in $libs + do + if [ "${path:0:2}" = '-L' ] + then + rpath="$rpath ${rprfx}${path//-L/}" + fi + done + + $comp $opt $objects $libs $rpath > link.out 2> link.err + OK="$?" + +# --------------------------------------------------------------------------- # +# 4. Postprocessing # +# --------------------------------------------------------------------------- # + + if [ "$OK" != '0' ] + then + echo " *** error in linking ***" + echo ' ' + cat link.out + echo ' ' + cat link.err + echo ' ' + rm -f link.??? + rm -f $prog + exit $OK + else + if [ ! -f $prog ] + then + echo " *** program $prog not found ***" + echo ' ' + cat link.out + echo ' ' + cat link.err + echo ' ' + rm -f link.??? + exit 1 + else + mv $prog $main_dir/exe/. + rm -f link.??? + fi + fi + +# end of link --------------------------------------------------------------- # diff --git a/model/bin/w3_setup b/model/bin/w3_setup index 78df92a68..c7ea1d890 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -409,16 +409,14 @@ then cp -f $path_b/comp.$cmplr $path_b/comp echo " copy $path_b/comp.$cmplr => $path_b/comp" elif [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ - [ "$cmplr" == "zeus_mpt" ] || [ "$cmplr" == "zeus_mpt_debug" ] || \ [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] || \ [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ - [ "$cmplr" == "zeus_intel" ] || [ "$cmplr" == "zeus_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "zeus_gnu" ] || [ "$cmplr" == "zeus_gnu_debug" ] || \ + [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ + [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ - [ "$cmplr" == "zeus_pgi" ] || [ "$cmplr" == "zeus_pgi_debug" ] || \ [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then source $path_b/cmplr.env sed -e "s//$optc/" -e "s//$comp_seq/" -e "s//$comp_mpi/" $path_b/comp.tmpl > $path_b/comp @@ -433,16 +431,14 @@ then cp -f $path_b/link.$cmplr $path_b/link echo " copy $path_b/link.$cmplr => $path_b/link" elif [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ - [ "$cmplr" == "zeus_mpt" ] || [ "$cmplr" == "zeus_mpt_debug" ] || \ [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] || \ [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ - [ "$cmplr" == "zeus_intel" ] || [ "$cmplr" == "zeus_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "zeus_gnu" ] || [ "$cmplr" == "zeus_gnu_debug" ] || \ + [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ + [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ - [ "$cmplr" == "zeus_pgi" ] || [ "$cmplr" == "zeus_pgi_debug" ] || \ [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then source $path_b/cmplr.env sed -e "s//$optl/" -e "s//$comp_seq/" -e "s//$comp_mpi/" $path_b/link.tmpl > $path_b/link diff --git a/model/esmf/Makefile b/model/esmf/Makefile index 1832cd931..cd3300743 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -36,7 +36,7 @@ else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","pgi" "datarmor_pgi" "datarmor_p # intel else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","theia" "Intel")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_phase2" "wcoss_cray")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_phase2" "wcoss_cray" "wcoss_dell_p3")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","intel" "datarmor_intel" "datarmor_intel_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian From 92cb41f70e91da97be9e5cd8bfee1de0a569f676 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Wed, 24 Jul 2019 13:10:50 -0400 Subject: [PATCH 10/84] Pull request for compiling shared objects. (#47) (#65) * Pull request for compiling shared objects. (#47) * Fixed bug on ad3 when listing mod files. --- model/bin/ad3 | 4 ++-- model/bin/cmplr.env | 21 ++++++++++++++------- model/bin/comp.Intel | 2 +- model/bin/make_makefile.sh | 23 ++++++++++++++++++++++- model/bin/w3_automake | 6 ++++++ model/bin/w3_make | 10 ++++++++++ model/bin/w3_setup | 5 +++-- model/bin/ww3_from_ftp.sh | 4 ++-- model/ftn/ww3_ounf.ftn | 4 ---- 9 files changed, 60 insertions(+), 19 deletions(-) diff --git a/model/bin/ad3 b/model/bin/ad3 index e4b07b88c..2c3c8043a 100755 --- a/model/bin/ad3 +++ b/model/bin/ad3 @@ -312,7 +312,7 @@ # find . -iname "${name}.mod" -delete # not all versions of find have -iname? # Fall back on grep -i - mods=`ls *.mod | grep -i "${name}.mod 2> /dev/null"` + mods=`ls *.mod 2> /dev/null | grep -i "${name}.mod"` if [ -n ${mods} ]; then rm -f ${mods} fi @@ -402,7 +402,7 @@ then # mods=`find . -iname "${name}.mod"` # not all versions of find have -iname? # Fall back on grep -i - mods=`ls *.mod | grep -i "${name}.mod 2> /dev/null"` + mods=`ls *.mod 2> /dev/null | grep -i "${name}.mod"` if [ -n "$mods" ] then for mod in $mods diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index edce02b92..fb946b73d 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -9,13 +9,14 @@ # # # use : cmplr.env cmplr # # # -# cmplr : keyword based on a value and optional suffix and prefix # +# cmplr : keyword based on a value and optional suffix, prefix and extras # # # # value : mpt / intel / gnu / pgi # # suffix : _debug # -# prefix : datarmor_ # +# prefix : datarmor_ # +# extras : so_ # # # -# - examples : intel / pgi_debug / datarmor_mpt_debug # +# - examples : intel / pgi_debug / datarmor_mpt_debug / so_intel # # # # remarks : # # # @@ -94,6 +95,7 @@ fi ############################### if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ + [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_phase2_intel_debug" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_cray_intel_debug" ] || \ [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "wcoss_dell_p3_intel_debug" ] || \ @@ -145,15 +147,20 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ optc="$optc -xhost" optl="$optl -xhost" fi + + if [ ! -z "$(echo $cmplr | grep so)" ] ; then + optc="$optc -fPIC" + optl='-o $prog -p -g' + fi fi - ############################### # GNU # ############################### if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ + [ "$cmplr" == "so_gnu" ] || [ "$cmplr" == "so_gnu_debug" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -199,11 +206,11 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ optl="$optl -march=native" fi + if [ ! -z "$(echo $cmplr | grep so)" ] ; then + optc="$optc -fPIC" + fi fi - - - ############################### # PGI # ############################### diff --git a/model/bin/comp.Intel b/model/bin/comp.Intel index fa8ffd433..5491ecb56 100755 --- a/model/bin/comp.Intel +++ b/model/bin/comp.Intel @@ -77,7 +77,7 @@ # # Intel compiler on Linux ---------------------------------------------------- # 2.b.1 Build options and determine compiler name - + opt="-c $list -O3 -assume byterecl -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index a0313397e..205cee2df 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -856,6 +856,7 @@ ww3_ounp ww3_gspl ww3_gint ww3_bound ww3_bounc ww3_systrk $tideprog" progs="$progs ww3_multi_esmf ww3_uprstr" progs="$progs libww3" + progs="$progs libww3.so" for prog in $progs do @@ -1064,6 +1065,13 @@ source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; + libww3.so) IDstring='Object file archive' + core='w3fldsmd w3initmd w3wavemd w3wdasmd w3updtmd' + data='wmmdatmd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' + prop="$pr" + source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" + IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' + aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; ww3_uprstr) IDstring='Update Restart File' core= data='wmmdatmd w3triamd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' @@ -1083,7 +1091,7 @@ filesl="$data $core $prop $source $IO $aux" # if program name is libww3, then # the target is compile and create archive - elif [ "$prog" = "libww3" ] + elif [ "$prog" = "libww3" ] || [ "$prog" = "libww3.so" ] then d_string="$prog"' : $(aPo)/' files="$aux $core $data $prop $source $IO" @@ -1128,6 +1136,19 @@ done echo " @cd \$(aPo); $ar_cmd $lib $objs" >> makefile echo ' ' >> makefile + # if program name is libww3.so, then + # the target is compile and create archive + elif [ "$prog" = "libww3.so" ] + then + lib=$prog + objs="" + for file in $filesl + do + objs="$objs $file.o" + done + echo " @cd \$(aPo); ld -o $lib -shared $objs" >> makefile + echo ' ' >> makefile + else echo ' @$(aPb)/link '"$filesl" >> makefile echo ' ' >> makefile diff --git a/model/bin/w3_automake b/model/bin/w3_automake index dc80435e0..ae312067b 100755 --- a/model/bin/w3_automake +++ b/model/bin/w3_automake @@ -192,6 +192,12 @@ reg_programs="$reg_programs ww3_gspl" fi + if [ -n "`grep -nri fPIC $comp_file`" ] + then + reg_programs="$reg_programs libww3.so" + else + echo 'Shared Object : No' + fi # 1.f sort sequential and parallel programs - - - - - - - - - - - - - - - - - - diff --git a/model/bin/w3_make b/model/bin/w3_make index f2727ea8a..153da7be7 100755 --- a/model/bin/w3_make +++ b/model/bin/w3_make @@ -220,6 +220,13 @@ reg_programs="$reg_programs ww3_shel" fi + if [ -n "`grep -nri fPIC $comp_file`" ] + then + reg_programs="$reg_programs libww3.so" + else + echo 'Shared Object : No' + fi + # if no progs in argument if [ -z "$all_programs" ] then @@ -662,6 +669,9 @@ EOF # if program name is libww3, then # the target is compile and create archive elif [ "$prog" = "libww3" ] + then + target="$prog" + elif [ "$prog" = "libww3.so" ] then target="$prog" else diff --git a/model/bin/w3_setup b/model/bin/w3_setup index c7ea1d890..0e87f6ac4 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -411,6 +411,7 @@ then elif [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] || \ [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ + [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ @@ -420,7 +421,7 @@ then [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then source $path_b/cmplr.env sed -e "s//$optc/" -e "s//$comp_seq/" -e "s//$comp_mpi/" $path_b/comp.tmpl > $path_b/comp - echo " sed $path_b/comp.tmpl => $path_b/comp" + echo " sed $path_b/comp.tmpl => $path_b/comp" else errmsg "$path_b/comp.$cmplr not found" exit 1 @@ -433,6 +434,7 @@ then elif [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] || \ [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ + [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ @@ -449,7 +451,6 @@ then fi chmod 775 $path_b/comp $path_b/link fi - # 3.d Setup switch file if [ $swtch ] then diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index 6630a5c97..33daa927e 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -23,7 +23,7 @@ wget ftp://polar.ncep.noaa.gov/tempor/ww3ftp/ww3_from_ftp.v6.07.tar.gz tar -xvzf ww3_from_ftp.v6.07.tar.gz #Move regtest info from data_regtests to regtests: -echo -e "Moving data from data_regtests to regtets" +echo -e "Moving data from data_regtests to regtests" cp -r data_regtests/ww3_tp2.15/input/*.nc regtests/ww3_tp2.15/input/ cp -r data_regtests/ww3_tp2.13/*.png regtests/ww3_tp2.13/ cp -r data_regtests/ww3_tic1.4/input/*.nc regtests/ww3_tic1.4/input/ @@ -53,7 +53,7 @@ else echo -e ' Not deleting tar file.' fi -echo -e "\n\n Files were copied from the data_regtests to the regtets folder." +echo -e "\n\n Files were copied from the data_regtests to the regtests folder." echo -e "Do you want to delete the data_regtests folder? [y|n]: " read wnew2 if [ "${wnew2}" = "Y" ] || [ "${wnew2}" = "y" ] diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 129887525..571fb2123 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -3401,10 +3401,6 @@ ! Defines the netcdf extension FNAMENC(S1+S2+1:S1+S2+3) = '.nc' FNAMENC(S1+S2+4:S1+S2+6) = ' ' - -!/NCO ! For NCEP application, requires fixed netcdf file name -!/NCO FNAMENC='ww3.gridded.nc' - ! If the flag frequency is .TRUE., defines the fourth dimension IF (FLFRQ) THEN UNITVAR(:)=UNITS From aced0a0f74e83436c3c1355dbf9b553c4d6f6183 Mon Sep 17 00:00:00 2001 From: Ty Hesser Date: Sun, 29 Sep 2019 11:57:04 -0400 Subject: [PATCH 11/84] PDLIB changes for reducing memory usage (#84) "This PR yields smaller memory usage for the PDLIB and is an unambiguous win. --- model/ftn/PDLIB/yowelementpool.ftn | 103 ++--------- model/ftn/PDLIB/yowexchangeModule.ftn | 251 +++----------------------- model/ftn/PDLIB/yownodepool.ftn | 19 -- model/ftn/PDLIB/yowpdlibmain.ftn | 218 +++++++--------------- model/ftn/w3profsmd_pdlib.ftn | 2 +- 5 files changed, 103 insertions(+), 490 deletions(-) diff --git a/model/ftn/PDLIB/yowelementpool.ftn b/model/ftn/PDLIB/yowelementpool.ftn index 1fdd9264c..c924cd76f 100644 --- a/model/ftn/PDLIB/yowelementpool.ftn +++ b/model/ftn/PDLIB/yowelementpool.ftn @@ -38,22 +38,8 @@ module yowElementpool implicit none private - public :: finalizeElementpool + public :: finalizeElementpool, belongto - type, public :: t_element - !> global node id - !> @todo duplicate date. replace with a pointer to INE(:,) ? - integer :: node(3) - - contains - - procedure getDomainID - procedure belongTo - procedure getArea - end type - - !> array of all elements, global index - type(t_element), public, allocatable, target :: elements(:) !> number of elements, global integer, public :: ne_global = 0 @@ -76,70 +62,23 @@ module yowElementpool !> ne long. give the global element id integer, public, target, allocatable :: ielg(:) - !> Element global to local mapping - !> ne_global long. give the local element id but only for this rank. local element id for other ranks are set to 0! - integer, public, allocatable :: iegl(:) - contains - !> Returns the domainID to which this element belongs - !> conversione: if a element has two nodes from domain 1 and one node from domain 2, the element belongs to domain 1. - !> If a element adjoint to three different domains, it belongs to the with the lowest domain ID - !> The one node from domain 2 is, of course, a ghost node. - function getDomainID(this) result(domainID) - use yowDatapool, only: myrank, nTasks - use yowNodepool, only: t_Node, nodes_global - implicit none - class(t_element), intent(in) :: this - integer :: domainID - - integer :: j, itemp, ranks - type(t_Node), pointer :: node - type(t_Node) :: nodes(3) - - domainID = -1 - - ! check if this element adjoint to three different domains. - nodes(:) = nodes_global(this%node(:)) - if(nodes(1)%domainID /= nodes(2)%domainID .and. & - & nodes(1)%domainID /= nodes(3)%domainID .and. & - & nodes(2)%domainID /= nodes(3)%domainID) then - domainID = minval(nodes(:)%domainID) - - ! check if this element has two nodes wich belongs to this domain - else - do ranks = 0, nTasks-1 - itemp = 0 - do j=1, 3 - node => nodes_global(this%node(j)) - if(node%domainID == ranks+1) then - itemp = itemp + 1 - endif - end do - ! yes, this element belongs to rank - if(itemp >= 2) then - domainID = ranks+1 - exit - endif - end do - endif - end function !> Returns true if the element belongs to rank. !> conversione: If a element is connected to domain 1,2 and 3. It belongs to 1,2 and 3. !> @param[in] rank optional. If not given, datapool:myrank is used - function belongTo(this, rank) + function belongTo(ele_in, rank) use yowDatapool, only: myrank, nTasks use yowNodepool, only: t_Node, nodes_global implicit none - class(t_element), intent(in) :: this + integer, intent(in) :: ele_in(3) integer, intent(in), optional :: rank logical :: belongTo integer :: myDomainID - type(t_Node) :: nodes(3) - - belongTo = .false. + integer :: nodes(3) + integer J if(present(rank) .eqv. .true.) then myDomainID = rank +1 @@ -148,40 +87,20 @@ module yowElementpool endif ! check if this element adjoint to three different domains. - nodes(:) = nodes_global(this%node(:)) - if(nodes(1)%domainID == myDomainID .or. & - & nodes(2)%domainID == myDomainID .or. & - & nodes(3)%domainID == myDomainID) then - belongTo = .true. - endif - end function - - !> Returns the area of this element - function getArea(this) result(area) - use yowDatapool, only: myrank, rkind - use yowNodepool, only: t_Node, nodes_global - implicit none - class(t_element), intent(in) :: this - real(rkind) :: area - type(t_Node) :: nodes(3) - - nodes(:) = nodes_global(this%node(:)) - - area = 0.5_rkind * ( (nodes(1)%x - nodes(3)%x)*(nodes(2)%y - nodes(1)%y) + & - & (nodes(2)%x - nodes(1)%x)*(nodes(3)%y - nodes(1)%y)) - -! area = 0.5_rkind * ( (this%p1%getX() - this%p3%getX())*(this%p2%getY() - this%p1%getY()) + & -! & (this%p2%getX() - this%p1%getX())*(this%p3%getY() - this%p1%getY())) + belongTo = .false. + DO J=1,3 + IF (nodes_global(ele_in(J)) % domainID == myDomainID) THEN + belongTo = .true. + END IF + END DO end function subroutine finalizeElementpool() implicit none - if(allocated(elements)) deallocate(elements) if(allocated(INE)) deallocate(INE) if(allocated(INE_global)) deallocate(INE_global) if(allocated(ielg)) deallocate(ielg) - if(allocated(iegl)) deallocate(iegl) end subroutine end module yowElementpool diff --git a/model/ftn/PDLIB/yowexchangeModule.ftn b/model/ftn/PDLIB/yowexchangeModule.ftn index 7bfc458cd..1a5d3d80b 100644 --- a/model/ftn/PDLIB/yowexchangeModule.ftn +++ b/model/ftn/PDLIB/yowexchangeModule.ftn @@ -43,7 +43,7 @@ module yowExchangeModule private public :: initNbrDomains, createMPITypes, setDimSize public :: finalizeExchangeModule, PDLIB_exchange1Dreal - public :: PDLIB_exchange1Dint, PDLIB_exchange2Dreal, PDLIB_exchange3Dreal + public :: PDLIB_exchange2Dreal !> Holds some data belong to a neighbor Domain type, public :: t_neighborDomain @@ -72,16 +72,11 @@ module yowExchangeModule !> MPI datatypes for 1D exchange integer :: p1DRsendType = MPI_DATATYPE_NULL integer :: p1DRrecvType = MPI_DATATYPE_NULL - integer :: p1DIsendType = MPI_DATATYPE_NULL - integer :: p1DIrecvType = MPI_DATATYPE_NULL !> MPI datatypes for 2D exchange integer :: p2DRsendType1 = MPI_DATATYPE_NULL integer :: p2DRrecvType1 = MPI_DATATYPE_NULL integer :: p2DRsendType2 = MPI_DATATYPE_NULL integer :: p2DRrecvType2 = MPI_DATATYPE_NULL - !> MPI datatypes for 3D exchange - integer :: p3DRsendType = MPI_DATATYPE_NULL - integer :: p3DRrecvType = MPI_DATATYPE_NULL contains ! procedure :: exchangeGhostIds @@ -101,8 +96,6 @@ module yowExchangeModule !> number of the second dimension for exchange integer, public :: n2ndDim = 1 - !> number fo the third dimension for exchange - integer, public :: n3ndDim = 1 contains @@ -121,10 +114,6 @@ module yowExchangeModule if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("freeMPItype", ierr) call mpi_type_free(this%p1DRrecvType, ierr) if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("freeMPItype", ierr) - call mpi_type_free(this%p1DIsendType, ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("freeMPItype", ierr) - call mpi_type_free(this%p1DIrecvType, ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("freeMPItype", ierr) call mpi_type_free(this%p2DRsendType1, ierr) if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("freeMPItype", ierr) call mpi_type_free(this%p2DRrecvType1, ierr) @@ -133,10 +122,6 @@ module yowExchangeModule if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("freeMPItype", ierr) call mpi_type_free(this%p2DRrecvType2, ierr) if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("freeMPItype", ierr) - call mpi_type_free(this%p3DRsendType, ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("freeMPItype", ierr) - call mpi_type_free(this%p3DRrecvType, ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("freeMPItype", ierr) end subroutine ! create MPI indexed datatype for this neighborDomain @@ -152,7 +137,7 @@ module yowExchangeModule integer :: dsplSend(this%numNodesToSend) integer :: dsplRecv(this%numNodesToReceive) - + dsplSend = ipgl(this%nodesToSend)-1 dsplRecv = ghostgl(this%nodesToReceive) + np -1 @@ -161,23 +146,12 @@ module yowExchangeModule if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) call mpi_type_commit(this%p1DRsendType,ierr) if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - + call mpi_type_create_indexed_block(this%numNodesToReceive, 1, dsplRecv, rtype, this%p1DRrecvType,ierr) if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) call mpi_type_commit(this%p1DRrecvType,ierr) if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - ! p1D integer - call mpi_type_create_indexed_block(this%numNodesToSend, 1, dsplSend, itype, this%p1DIsendType,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - call mpi_type_commit(this%p1DIsendType,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - - call mpi_type_create_indexed_block(this%numNodesToReceive, 1, dsplRecv, itype, this%p1DIrecvType,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - call mpi_type_commit(this%p1DIrecvType,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - ! p2D real dsplSend = (ipgl(this%nodesToSend)-1) * n2ndDim dsplRecv = (ghostgl(this%nodesToReceive) + np -1) * n2ndDim @@ -192,32 +166,6 @@ module yowExchangeModule if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - IF (n3ndDim .gt. 0) THEN - dsplSend = (ipgl(this%nodesToSend)-1) * n3ndDim - dsplRecv = (ghostgl(this%nodesToReceive) + np -1) * n3ndDim - call mpi_type_create_indexed_block(this%numNodesToSend, n3ndDim, dsplSend, rtype, this%p2DRsendType2,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - call mpi_type_commit(this%p2DRsendType2,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - - call mpi_type_create_indexed_block(this%numNodesToReceive, n3ndDim, dsplRecv, rtype, this%p2DRrecvType2,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - call mpi_type_commit(this%p2DRrecvType2,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - - ! p3D real - dsplSend = (ipgl(this%nodesToSend)-1) * n2ndDim*n3ndDim - dsplRecv = (ghostgl(this%nodesToReceive) + np -1) * n2ndDim*n3ndDim - call mpi_type_create_indexed_block(this%numNodesToSend, n2ndDim*n3ndDim, dsplSend, rtype, this%p3DRsendType,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - call mpi_type_commit(this%p3DRsendType,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - - call mpi_type_create_indexed_block(this%numNodesToReceive, n2ndDim*n3ndDim, dsplRecv, rtype, this%p3DRrecvType,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - call mpi_type_commit(this%p3DRrecvType,ierr) - if(ierr /= MPI_SUCCESS) CALL PARALLEL_ABORT("createMPIType", ierr) - END IF end subroutine subroutine initNbrDomains(nConnD) @@ -232,7 +180,7 @@ module yowExchangeModule if(stat/=0) CALL ABORT('neighborDomains allocation failure') end subroutine - subroutine createMPITypes() + subroutine createMPITypes() implicit none integer :: i @@ -294,53 +242,6 @@ module yowExchangeModule if(ierr/=MPI_SUCCESS) CALL PARALLEL_ABORT("waitall", ierr) end subroutine - !> \overload exchange1Dreal - !> \note MPI recv tag: 20000 + MPI rank - !> \note MPI send tag: 20000 + neighbor MPI rank - subroutine PDLIB_exchange1Dint(U) - use yowDatapool, only: comm, myrank - use yowNodepool, only: t_Node, nodes_global, np, ng, ghosts, npa - use yowerr - use MPI - implicit none - integer, intent(inout) :: U(:) - - integer :: i, ierr, tag - integer :: sendRqst(nConnDomains), recvRqst(nConnDomains) - integer :: recvStat(MPI_STATUS_SIZE, nConnDomains), sendStat(MPI_STATUS_SIZE, nConnDomains) - - if(size(U) /= npa) then - CALL ABORT("sizeof(U) < npa") - endif - - ! post receives - do i=1, nConnDomains - tag = 20000 + myrank - call MPI_IRecv(U, 1, neighborDomains(i)%p1DIrecvType, & - neighborDomains(i)%domainID-1, tag, comm, & - recvRqst(i), ierr) - if(ierr/=MPI_SUCCESS) then - CALL PARALLEL_ABORT("MPI_IRecv", ierr) - endif - enddo - - ! post sends - do i=1, nConnDomains - tag = 20000 + (neighborDomains(i)%domainID-1) - call MPI_ISend(U, 1, neighborDomains(i)%p1DIsendType, & - neighborDomains(i)%domainID-1, tag, comm, & - sendRqst(i), ierr) - if(ierr/=MPI_SUCCESS) then - CALL PARALLEL_ABORT("MPI_ISend", ierr) - endif - end do - - ! Wait for completion - call mpi_waitall(nConnDomains, recvRqst, recvStat,ierr) - if(ierr/=MPI_SUCCESS) CALL PARALLEL_ABORT("waitall", ierr) - call mpi_waitall(nConnDomains, sendRqst, sendStat,ierr) - if(ierr/=MPI_SUCCESS) CALL PARALLEL_ABORT("waitall", ierr) - end subroutine !> \overload PDLIB_exchange1Dreal !> @@ -360,160 +261,56 @@ module yowExchangeModule integer :: recvStat(MPI_STATUS_SIZE, nConnDomains), sendStat(MPI_STATUS_SIZE, nConnDomains) -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 1' -!/DEBUGEXCH FLUSH(740+IAPROC) - - if(size(U,2) /= npa) then - CALL ABORT("sizeof(U,2) < npa") - endif -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 2' -!/DEBUGEXCH FLUSH(740+IAPROC) - - if((size(U,1) /= n2ndDim) ) then - if((size(U,1) /= n3ndDim) ) then - CALL ABORT("sizeof(U,1) /= n2ndDim or n3ndDim") - endif - endif !/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 3' !/DEBUGEXCH FLUSH(740+IAPROC) - !> \todo do that better - if(size(U,1) == n2ndDim) then - ! post receives + ! post receives !/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 4' !/DEBUGEXCH FLUSH(740+IAPROC) - do i=1, nConnDomains - tag = 30000 + myrank - call MPI_IRecv(U, 1, neighborDomains(i)%p2DRrecvType1, & - neighborDomains(i)%domainID-1, tag, comm, & - recvRqst(i), ierr) - if(ierr/=MPI_SUCCESS) then - CALL PARALLEL_ABORT("MPI_IRecv", ierr) - endif - enddo -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 5' -!/DEBUGEXCH FLUSH(740+IAPROC) - - ! post sends - do i=1, nConnDomains - tag = 30000 + (neighborDomains(i)%domainID-1) - call MPI_ISend(U, 1, neighborDomains(i)%p2DRsendType1, & - neighborDomains(i)%domainID-1, tag, comm, & - sendRqst(i), ierr) - if(ierr/=MPI_SUCCESS) then - CALL PARALLEL_ABORT("MPI_ISend", ierr) - endif - end do -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 6' -!/DEBUGEXCH FLUSH(740+IAPROC) - else if(size(U,1) == n3ndDim) then -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 7' -!/DEBUGEXCH FLUSH(740+IAPROC) - ! post receives - do i=1, nConnDomains - tag = 30000 + myrank - call MPI_IRecv(U, 1, neighborDomains(i)%p2DRrecvType2, & - neighborDomains(i)%domainID-1, tag, comm, & - recvRqst(i), ierr) - if(ierr/=MPI_SUCCESS) then - CALL PARALLEL_ABORT("MPI_IRecv", ierr) - endif - enddo -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 8' -!/DEBUGEXCH FLUSH(740+IAPROC) - - ! post sends - do i=1, nConnDomains - tag = 30000 + (neighborDomains(i)%domainID-1) - call MPI_ISend(U, 1, neighborDomains(i)%p2DRsendType2, & - neighborDomains(i)%domainID-1, tag, comm, & - sendRqst(i), ierr); - if(ierr/=MPI_SUCCESS) then - CALL PARALLEL_ABORT("MPI_ISend", ierr) - endif - end do -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 9' -!/DEBUGEXCH FLUSH(740+IAPROC) - endif -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 10' -!/DEBUGEXCH FLUSH(740+IAPROC) - - ! Wait for completion - call mpi_waitall(nConnDomains, recvRqst, recvStat,ierr) - if(ierr/=MPI_SUCCESS) CALL PARALLEL_ABORT("waitall", ierr) -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 11' -!/DEBUGEXCH FLUSH(740+IAPROC) - call mpi_waitall(nConnDomains, sendRqst, sendStat,ierr) - if(ierr/=MPI_SUCCESS) CALL PARALLEL_ABORT("waitall", ierr) -!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 12' -!/DEBUGEXCH FLUSH(740+IAPROC) - end subroutine - - !> \overload exchange1Dreal - !> \note MPI recv tag: 40000 + MPI rank - !> \note MPI send tag: 40000 + neighbor MPI rank - subroutine PDLIB_exchange3Dreal(U) - use yowDatapool, only: comm, myrank, rkind - use yowNodepool, only: t_Node, nodes_global, np, ng, ghosts, npa - use yowerr - use MPI - implicit none - real(kind=rkind), intent(inout) :: U(:,:,:) - - integer :: i, ierr, tag - integer :: sendRqst(nConnDomains), recvRqst(nConnDomains) - integer :: recvStat(MPI_STATUS_SIZE, nConnDomains), sendStat(MPI_STATUS_SIZE, nConnDomains) - - - if(size(U,3) /= npa) then - CALL ABORT("sizeof(U,3) < npa") - endif - - if((size(U,2) /= n2ndDim) ) then - CALL ABORT("sizeof(U,2) < n2ndDim") - endif - - if((size(U,1) /= n3ndDim) ) then - CALL ABORT("sizeof(U,1) < n3ndDim") - endif - - ! post receives do i=1, nConnDomains - tag = 40000 + myrank - call MPI_IRecv(U, 1, neighborDomains(i)%p3DRrecvType, & - neighborDomains(i)%domainID-1, tag, comm, & - recvRqst(i), ierr) + tag = 30000 + myrank + call MPI_IRecv(U, 1, neighborDomains(i)%p2DRrecvType1, & + neighborDomains(i)%domainID-1, tag, comm, & + recvRqst(i), ierr) if(ierr/=MPI_SUCCESS) then CALL PARALLEL_ABORT("MPI_IRecv", ierr) endif enddo +!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 5' +!/DEBUGEXCH FLUSH(740+IAPROC) ! post sends do i=1, nConnDomains - tag = 40000 + (neighborDomains(i)%domainID-1) - call MPI_ISend(U, 1, neighborDomains(i)%p3DRsendType, & - neighborDomains(i)%domainID-1, tag, comm, & - sendRqst(i), ierr) + tag = 30000 + (neighborDomains(i)%domainID-1) + call MPI_ISend(U, 1, neighborDomains(i)%p2DRsendType1, & + neighborDomains(i)%domainID-1, tag, comm, & + sendRqst(i), ierr) if(ierr/=MPI_SUCCESS) then CALL PARALLEL_ABORT("MPI_ISend", ierr) endif end do +!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 6' +!/DEBUGEXCH FLUSH(740+IAPROC) ! Wait for completion call mpi_waitall(nConnDomains, recvRqst, recvStat,ierr) if(ierr/=MPI_SUCCESS) CALL PARALLEL_ABORT("waitall", ierr) +!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 11' +!/DEBUGEXCH FLUSH(740+IAPROC) call mpi_waitall(nConnDomains, sendRqst, sendStat,ierr) if(ierr/=MPI_SUCCESS) CALL PARALLEL_ABORT("waitall", ierr) +!/DEBUGEXCH WRITE(740+IAPROC,*) 'PDLIB_exchange2Dreal, step 12' +!/DEBUGEXCH FLUSH(740+IAPROC) end subroutine + !> set the size of the second and third dimension for exchange !> \note the size of the first dimension is npa !> \note call this before initPD() - subroutine setDimSize(second, third) + subroutine setDimSize(second) implicit none - integer, intent(in) :: second, third + integer, intent(in) :: second n2ndDim = second - n3ndDim = third end subroutine setDimSize subroutine finalizeExchangeModule() diff --git a/model/ftn/PDLIB/yownodepool.ftn b/model/ftn/PDLIB/yownodepool.ftn index bbb8bc918..6376f13cd 100644 --- a/model/ftn/PDLIB/yownodepool.ftn +++ b/model/ftn/PDLIB/yownodepool.ftn @@ -43,13 +43,6 @@ module yowNodepool public :: finalizeNodepool, nodes, ghosts - type, public :: llist_type - integer :: rank=-1 ! Processor rank assignment - integer :: id=0 ! Local index on processor "rank" - type(llist_type),pointer :: next=>null() ! Next entry in linked-list. ! we dont need this in pdlib - end type llist_type - type(llist_type), public, allocatable :: ARR_ipgl(:) - !> Holds the nodes data. !> Such as x, y, z data or the number of connected nodes type, public :: t_Node @@ -60,13 +53,6 @@ module yowNodepool !> the global node number integer :: id_global = 0 - !> X Coordiante - real(rkind), pointer :: x=>null() - !> Y Coordiante - real(rkind), pointer :: y=>null() - !> Z Coordiante - real(rkind), pointer :: z=>null() - !> number of connected nodes. !> holds the number of neighbors conntected to this node. !> to get the connected nodes, iterate over the connNodes() Array @@ -89,10 +75,6 @@ module yowNodepool procedure :: isGhost end type - !> coordinates of the node, ({x,y,z}, global ID) - !> \todo change to local ID, later - real(rkind), public, target, allocatable :: xyz(:,:) - !> coordinates of the local + ghost nodes. range [1:npa] real(rkind), public, target, allocatable :: x(:), y(:), z(:) real(rkind), public, target, allocatable :: PDLIB_SI(:), PDLIB_TRIA(:), PDLIB_IEN(:,:) @@ -237,7 +219,6 @@ module yowNodepool subroutine finalizeNodepool() implicit none - if(allocated(xyz)) deallocate(xyz) if(allocated(x)) deallocate(x) if(allocated(y)) deallocate(y) if(allocated(z)) deallocate(z) diff --git a/model/ftn/PDLIB/yowpdlibmain.ftn b/model/ftn/PDLIB/yowpdlibmain.ftn index 98047c76e..d1aba643f 100644 --- a/model/ftn/PDLIB/yowpdlibmain.ftn +++ b/model/ftn/PDLIB/yowpdlibmain.ftn @@ -58,9 +58,9 @@ module yowpdlibMain !> @param[in] thirdDim size of the third dimensions to exchange !> @param[in] MPIComm MPI communicator to use with pdlib !> @overload initPD1 - subroutine initFromGridDim(MNP, XP, YP, DEP, MNE, INE, secDim, thirdDim, MPIcomm) + subroutine initFromGridDim(MNP, XP, YP, DEP, MNE, INE, secDim, MPIcomm) use yowDatapool, only: myrank, debugPrePartition, debugPostPartition - use yowNodepool, only: np_global, np, np_perProcSum, ng, ARR_ipgl, ipgl, iplg, npa + use yowNodepool, only: np_global, np, np_perProcSum, ng, ipgl, iplg, npa use yowElementpool, only: ne_global,ne use yowSidepool, only: ns, ns_global use yowExchangeModule, only: nConnDomains, setDimSize @@ -69,11 +69,11 @@ module yowpdlibMain integer, intent(in) :: MNP, MNE integer, intent(in) :: INE(3,MNE) real(kind=rkind), intent(in) :: XP(MNP), YP(MNP), DEP(MNP) - integer, intent(in) :: secDim, thirdDim + integer, intent(in) :: secDim integer, intent(in) :: MPIcomm integer istat - call setDimSize(secDim, thirdDim) + call setDimSize(secDim) !/DEBUGINIT Print *, '1: MPIcomm=', MPIcomm call initMPI(MPIcomm) !/DEBUGINIT Print *, '2: After initMPI' @@ -98,7 +98,7 @@ module yowpdlibMain ! call writeMesh() !/DEBUGINIT Print *, '4.1: After findConnNodes' ! CALL REAL_MPI_BARRIER_PDLIB(MPIcomm, "Before call to runParmetis") - call runParmetis + call runParmetis(MNP, XP, YP) ! CALL REAL_MPI_BARRIER_PDLIB(MPIcomm, "After call to runParmetis") !/DEBUGINIT Print *, '5: After runParmetis' call postPartition @@ -106,7 +106,7 @@ module yowpdlibMain call findGhostNodes call findConnDomains call exchangeGhostIds - call postPartition2 + call postPartition2(MNP, XP, YP, DEP) call initRankModule call ComputeTRIA_IEN_SI_CCON call ComputeIA_JA_POSI_NNZ @@ -124,12 +124,6 @@ module yowpdlibMain write(*,*) "Thread", myrank, "# of ghosts", ng write(*,*) "Thread", myrank, "# of neighbor domains", nConnDomains endif - allocate(ARR_ipgl(np_global), stat=istat) - if(istat/=0) CALL ABORT("allocate") - ARR_ipgl(:)%id = 0 - ARR_ipgl(1:np_global)%id = ipgl(1:np_global) - ARR_ipgl(:)%rank = -1 - ARR_ipgl(iplg(1:npa))%rank = myrank end subroutine initFromGridDim @@ -210,10 +204,10 @@ module yowpdlibMain !> @param[in] DEP node Z value !> @param[in] MNE number of element global !> @param[in] INE element array - !> alter: np_global, nodes_global(), xyz, ne_global, elements(), INE_global + !> alter: np_global, nodes_global(), ne_global, elements(), INE_global subroutine assignMesh(MNP, XP, YP, DEP, MNE, INE) - use yowNodepool, only: nodes_global, xyz, np_global - use yowElementpool, only: ne_global, elements, INE_global + use yowNodepool, only: nodes_global, np_global + use yowElementpool, only: ne_global, INE_global use yowerr, only: parallel_abort implicit none integer, intent(in) :: MNP, MNE @@ -226,34 +220,16 @@ module yowpdlibMain allocate(nodes_global(np_global), stat=stat); if(stat/=0) CALL ABORT('nodes_global() allocate failure') - if(allocated(xyz)) deallocate(xyz) - allocate(xyz(3, np_global), stat=stat); - if(stat/=0) CALL ABORT('xyz(,3) allocate failure') - - do i=1, np_global - nodes_global(i)%x => xyz(1,i) - nodes_global(i)%y => xyz(2,i) - nodes_global(i)%z => xyz(3,i) - xyz(1,i)=XP(I) - xyz(2,i)=YP(I) - xyz(3,i)=DEP(I) + do i =1, np_global nodes_global(i)%id_global = i end do ne_global=MNE - if(allocated(elements)) deallocate(elements) - allocate(elements(ne_global), stat=stat); - if(stat/=0) CALL ABORT('elements() allocate failure') - if(allocated(INE_global)) deallocate(INE_global) allocate(INE_global(3, ne_global), stat=stat); if(stat/=0) CALL ABORT('INE_global allocate failure') - - do i = 1, ne_global - elements(i)%node(:)=INE(:,i) - INE_global(:, i) = elements(i)%node(:) - end do + INE_global = INE end subroutine assignMesh @@ -318,13 +294,13 @@ module yowpdlibMain subroutine findConnNodes use yowerr, only: parallel_abort use yowNodepool, only: np, np_global, nodes_global, nodes, maxConnNodes, t_Node, connNodes_data - use yowElementpool, only: ne_global, elements + use yowElementpool, only: ne_global, INE_global use yowSidepool, only: ns, ns_global - use yowElementpool, only: ne_global, elements implicit none integer :: i, j, stat type(t_Node), pointer :: node + integer JPREV, JNEXT ! Loop over all nlements ! look at their nodes @@ -339,7 +315,7 @@ module yowpdlibMain ! first loop do i = 1, ne_global do j = 1, 3 - node => nodes_global(elements(i)%node(j)) + node => nodes_global(INE_global(j,i)) call node%insertConnNode() call node%insertConnNode() end do @@ -356,23 +332,21 @@ module yowpdlibMain ! second loop do i = 1, ne_global - ! do j = 1, 3 - ! node = nodes(elements(i)%node(j)) - ! call node%insertConnNode( elements(i)%node( mod (j+1, 3)+1 )) - ! call node%insertConnNode( elements(i)%node( mod (j+2, 3)+1 )) - ! end do - - node => nodes_global(elements(i)%node(1)) - call node%insertConnNode( elements(i)%node(2)) - call node%insertConnNode( elements(i)%node(3)) - - node => nodes_global(elements(i)%node(2)) - call node%insertConnNode( elements(i)%node(3)) - call node%insertConnNode( elements(i)%node(1)) - - node => nodes_global(elements(i)%node(3)) - call node%insertConnNode( elements(i)%node(1)) - call node%insertConnNode( elements(i)%node(2)) + DO J=1,3 + IF (J .eq. 3) THEN + JNEXT = 1 + ELSE + JNEXT = J + 1 + END IF + IF (J .eq. 1) THEN + JPREV = 3 + ELSE + JPREV = J - 1 + END IF + node => nodes_global(INE_global(J,i)) + call node%insertConnNode(INE_global(JNEXT,i)) + call node%insertConnNode(INE_global(JPREV,i)) + END DO end do @@ -395,16 +369,18 @@ module yowpdlibMain !------------------------------------------------------------------------ !> Collect all data for parmetis und partition the mesh - !> after that, we knoe for every node the domain ID + !> after that, we know for every node the domain ID !> alter: t_Node::domainID - subroutine runParmetis + subroutine runParmetis(MNP, XP, YP) use yowerr, only: parallel_abort use yowDatapool, only: debugParmetis,debugPartition, nTasks, myrank, itype, comm - use yowNodepool, only: np, npa, np_global, nodes, nodes_global, t_Node, np_perProcSum, np_perProc + use yowNodepool, only: np, npa, np_global, nodes, nodes_global, t_Node, iplg, np_perProcSum, np_perProc use yowSidepool, only: ns - use yowElementpool, only: ne, ne_global, elements + use yowElementpool, only: ne, ne_global use MPI implicit none + integer, intent(in) :: MNP + real(kind=rkind), intent(in) :: XP(MNP), YP(MNP) ! Parmetis ! Node neighbor information @@ -412,6 +388,7 @@ module yowpdlibMain integer, allocatable :: xadj(:), part(:), vwgt(:), adjwgt(:), vtxdist(:), options(:), adjncy(:) ! parmetis need single precision real(4), allocatable :: xyz(:), tpwgts(:), ubvec(:) + integer IP_glob ! Node to domain mapping. ! np_global long. give the domain number for die global node number @@ -500,9 +477,9 @@ module yowpdlibMain if(debugParmetis) write(710+myrank,*) 'np_global, ne_global, np, npa, ne' if(debugParmetis) write(710+myrank,*) np_global, ne_global, np, npa, ne do i = 1, np - node => nodes(i) - xyz(2*(i-1)+1) = REAL(node%x) - xyz(2*(i-1)+2) = REAL(node%y) + IP_glob = iplg(i) + xyz(2*(i-1)+1) = REAL(XP(IP_glob)) + xyz(2*(i-1)+2) = REAL(YP(IP_glob)) if(debugParmetis) then write(710+myrank,*) i, np, xyz(2*(i-1)+1), xyz(2*(i-1)+2) call flush(710+myrank) @@ -557,13 +534,6 @@ module yowpdlibMain ! write(1112+myrank,*) "Thread",myrank,"sum;vtxdist", sum(vtxdist), vtxdist ! write(1112+myrank,*) "Thread",myrank,"sum;xadj", sum(xadj), xadj ! write(1112+myrank,*) "Thread",myrank,"sum;adjncy", sum(adjncy), adjncy - ! write(1112+myrank,*) "Thread",myrank,"sum;xyz", sum(xyz), xyz - - do i=1, ne_global - if(elements(i)%getArea() < 0) then - write(*,*) "Thread", myrank, "global Element area <0", i - endif - end do CALL REAL_MPI_BARRIER_PDLIB(comm, "runParmetis, step 8") @@ -572,7 +542,7 @@ module yowpdlibMain vwgt, & !vwgt - ignore weights adjwgt, & ! adjwgt - ignore weights wgtflag, & - numflag,ndims,xyz,ncon,nparts,tpwgts,ubvec,options, & + numflag,ndims,ncon,nparts,tpwgts,ubvec,options, & edgecut,part,comm call flush(710+myrank) endif @@ -934,7 +904,7 @@ module yowpdlibMain integer :: status(MPI_STATUS_SIZE, nConnDomains); - type(t_node) , pointer :: node + type(t_node), pointer :: node ! send to all domain neighbors how many ghosts nodes we want from him and which ones do i=1, nConnDomains @@ -1042,16 +1012,18 @@ module yowpdlibMain end subroutine exchangeGhostIds !> this collects all data which depends on ghost information - !> alter: ne, INE, x, y, z, ielg, iegl - subroutine postPartition2 - use yowElementpool, only: ne, ne_global, elements, INE, ielg, iegl + !> alter: ne, INE, x, y, z, ielg + subroutine postPartition2(MNP, XP, YP, DEP) + use yowElementpool, only: ne, ne_global, INE, INE_global, belongto, ielg use yowerr, only: parallel_abort use yowDatapool, only: myrank use yowNodepool, only: np_global, np, nodes_global, iplg, t_Node, ghostlg, ng, npa - use yowNodepool, only: x, y, z, XYZ + use yowNodepool, only: x, y, z implicit none + integer, intent(in) :: MNP + REAL(kind=rkind), intent(in) :: XP(MNP), YP(MNP), DEP(MNP) - integer :: i, j, k, stat + integer :: i, j, k, stat, IP_glob type(t_Node), pointer :: node logical :: assigned @@ -1060,9 +1032,8 @@ module yowpdlibMain ! step 1: calc the number of local elements ne = 0 do i=1, ne_global - if(elements(i)%belongTo() .eqv. .true.) then + if (belongto(INE_global(:,i))) then ne = ne +1 -! write(*,*) myrank, "ele global", i-1 endif end do @@ -1075,12 +1046,11 @@ module yowpdlibMain ne = 0 do i=1, ne_global ! yes, this element belongs to this domain - if(elements(i)%belongTo() .eqv. .true.) then + if (belongto(INE_global(:,i))) then ne = ne + 1 do j=1, 3 assigned = .false. - node => nodes_global(elements(i)%node(j)) - + node => nodes_global(INE_global(j,i)) if(node%domainID == myrank+1) then INE(j, ne) = node%id assigned = .true. @@ -1109,7 +1079,7 @@ module yowpdlibMain endif end do - ! check if INE contains 0. + ! check if INE contains 0. do i=1, ne if(MINVAL(ABS(INE(:,i))) == 0) then write(*,*) "0 in INE ne=", ne @@ -1122,23 +1092,16 @@ module yowpdlibMain endif ! create element local to global mapping ielg - ! and element global to local mapping iegl if(allocated(ielg)) deallocate(ielg) allocate(ielg(ne), stat=stat) if(stat/=0) call parallel_abort('ielg allocation failure') ielg = 0 - if(allocated(iegl)) deallocate(iegl) - allocate(iegl(ne_global), stat=stat) - if(stat/=0) call parallel_abort('iegl allocation failure') - iegl = 0 - j = 0 do i=1, ne_global - if(elements(i)%belongTo() .eqv. .true.) then + if (belongto(INE_global(:,i))) then j = j +1 ielg(j) = i - iegl(i) = j end if end do @@ -1156,31 +1119,32 @@ module yowpdlibMain if(stat/=0) call parallel_abort('z allocation failure') do i=1, np - x(i) = XYZ(1, iplg(i)) - y(i) = XYZ(2, iplg(i)) - z(i) = XYZ(3, iplg(i)) + IP_glob = iplg(i) + x(i) = XP(IP_glob) + y(i) = YP(IP_glob) + z(i) = DEP(IP_glob) end do do i=1, ng - x(np+i) = XYZ(1, ghostlg(i)) - y(np+i) = XYZ(2, ghostlg(i)) - z(np+i) = XYZ(3, ghostlg(i)) + IP_glob = ghostlg(i) + x(np+i) = XP(IP_glob) + y(np+i) = YP(IP_glob) + z(np+i) = DEP(IP_glob) end do end subroutine !********************************************************************** !* * !********************************************************************** subroutine ComputeTRIA_IEN_SI_CCON - use yowElementpool, only: ne, ne_global, elements, INE, ielg, iegl + use yowElementpool, only: ne, ne_global, INE, ielg use yowExchangeModule, only : PDLIB_exchange1Dreal use yowerr, only: parallel_abort use yowDatapool, only: myrank - use yowNodepool, only: np_global, np, nodes_global, iplg, t_Node, ghostlg, ng, npa - use yowNodepool, only: x, y, z, XYZ, PDLIB_SI, PDLIB_IEN, PDLIB_TRIA, PDLIB_CCON + use yowNodepool, only: np_global, np, iplg, t_Node, ghostlg, ng, npa + use yowNodepool, only: x, y, z, PDLIB_SI, PDLIB_IEN, PDLIB_TRIA, PDLIB_CCON implicit none integer I1, I2, I3, stat, IE, NI(3) real(rkind) :: DXP1, DXP2, DXP3, DYP1, DYP2, DYP3, DBLTMP, TRIA03 - allocate(PDLIB_SI(npa), PDLIB_CCON(npa), PDLIB_IEN(6,ne), PDLIB_TRIA(ne), stat=stat) if(stat/=0) call parallel_abort('SI allocation failure') @@ -1190,7 +1154,7 @@ module yowpdlibMain DO IE = 1 , ne I1 = INE(1,IE) I2 = INE(2,IE) - I3 = INE(3,IE) + I3 = INE(3,IE) NI = INE(:,IE) DXP1=x(I2) - x(I1) @@ -1223,7 +1187,7 @@ module yowpdlibMain !* * !********************************************************************** subroutine ComputeIA_JA_POSI_NNZ - use yowElementpool, only: ne, ne_global, elements, INE, ielg, iegl + use yowElementpool, only: ne, ne_global, INE, ielg use yowerr, only: parallel_abort use yowDatapool, only: myrank use yowNodepool, only: np_global, np, nodes_global, iplg, t_Node, ghostlg, ng, npa @@ -1424,57 +1388,9 @@ module yowpdlibMain implicit none call finalizeRankModule() - call finalizeExchangeModule() + call finalizeExchangeModule() call finalizeElementpool() call finalizeNodepool() end subroutine - !> This is a simple function to search for an available unit. - !> @param[out] unit optional the new free unit number - !> @return next free unit number. If no units are available, -1 is returned. - integer function newunit(unit) - implicit none - integer, intent(out), optional :: unit - - ! LUN_MIN and LUN_MAX define the range of possible LUNs to check. - integer, parameter :: LUN_MIN=10, LUN_MAX=1000 - logical :: opened - integer :: lun - - newunit=-1 - do lun=LUN_MIN, LUN_MAX - inquire(unit=lun,opened=opened) - if (.not. opened) then - newunit=lun - exit - end if - end do - if (present(unit)) unit=newunit - end function newunit - - subroutine writeMesh() - use yowElementpool - use yowNodepool - use yowDatapool, only: myrank - implicit none - integer :: i - type(t_Node), pointer :: node - type(t_element), pointer :: ele - - write(1113+myrank,*) 0 - write(1113+myrank,*) np_global - - do i=1, np_global - node => nodes_global(i) - write(1113+myrank,*) i, node%x, node%y, 0 - end do - - write(1113+myrank,*) ne_global - do i=1, ne_global - ele => elements(i) - write(1113+myrank,*) ele%node(:)-1 ,0, i - end do - - - end subroutine end module yowpdlibMain diff --git a/model/ftn/w3profsmd_pdlib.ftn b/model/ftn/w3profsmd_pdlib.ftn index b67338d24..f9a03865e 100644 --- a/model/ftn/w3profsmd_pdlib.ftn +++ b/model/ftn/w3profsmd_pdlib.ftn @@ -317,7 +317,7 @@ !/DEBUGSOLVER WRITE(740+IAPROC,*) 'PDLIB_STYLE_INIT, myrank=', myrank !/DEBUGSOLVER FLUSH(740+IAPROC) ! - CALL initFromGridDim(NX,XP_IN,YP_IN,DEP_IN,NTRI,INE_IN,NSPEC,0,MPI_COMM_WCMP) + CALL initFromGridDim(NX,XP_IN,YP_IN,DEP_IN,NTRI,INE_IN,NSPEC,MPI_COMM_WCMP) ! !/DEBUGSOLVER WRITE(740+IAPROC,*) 'After initFromGridDim' !/DEBUGSOLVER FLUSH(740+IAPROC) From 5eaa60999a27c565a76858b0be64330972a7c30f Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Mon, 30 Sep 2019 13:50:58 -0400 Subject: [PATCH 12/84] Fb port2hera (#107) * Port 2 hera (#101) Includes NCEP development machine Hera to cmplr.env if blocks allowing compilation of WW3 executables under NEMS. A correction to run_test is made to allow empty values of the batchq parameter. * Adding hera for NEMS coupled application builds * regtests scripts matrix_ncep and run_test: adding feature to run on several NCEP compute systems, adding a conditional statement on run_test to check if batchq parameter is non-empty and avoid error when it is. * Adding hera option for openmp runs in regtests: intel compiler on hera requires flag to be -qopenmp instead of -openmp * Changing '=' to '==' in cpmlr.env for consistent usage when comparing strings. --- model/bin/cmplr.env | 29 ++++++++++++++++++---------- model/bin/w3_setup | 2 ++ model/esmf/Makefile | 2 +- regtests/bin/matrix.comp | 2 +- regtests/bin/matrix_ncep | 41 ++++++++++++++++++++++------------------ regtests/bin/run_test | 2 +- 6 files changed, 47 insertions(+), 31 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index fb946b73d..388499c43 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -64,7 +64,7 @@ if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi # omp options - if [ "$omp_mod" = 'yes' ] ; then optc="$optc -openmp"; optl="$optl -openmp"; fi + if [ "$omp_mod" == 'yes' ] ; then optc="$optc -openmp"; optl="$optl -openmp"; fi # optimized options if [ -z "$(echo $cmplr | grep debug)" ] ; then @@ -94,14 +94,15 @@ fi # INTEL # ############################### -if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ - [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ - [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_phase2_intel_debug" ] || \ - [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_cray_intel_debug" ] || \ - [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "wcoss_dell_p3_intel_debug" ] || \ - [ "$cmplr" == "theia" ] || [ "$cmplr" == "theia_intel_debug" ] || \ +if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ + [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ + [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_phase2_intel_debug" ] || \ + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_cray_intel_debug" ] || \ + [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "wcoss_dell_p3_intel_debug" ] || \ + [ "$cmplr" == "theia" ] || [ "$cmplr" == "hera" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] ; then + # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # compiler @@ -125,7 +126,15 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi # omp options - if [ "$omp_mod" = 'yes' ] ; then optc="$optc -openmp"; optl="$optl -openmp"; fi + if [ "$omp_mod" == 'yes' ] ; then + if [ "$cmplr" == "hera" ] ; then + optc="$optc -qopenmp" + optl="$optl -qopenmp" + else + optc="$optc -openmp" + optl="$optl -openmp" + fi + fi # optimized options if [ -z "$(echo $cmplr | grep debug)" ] ; then @@ -183,7 +192,7 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ optl='-o $prog -p -g' # omp options - if [ "$omp_mod" = 'yes' ] ; then optc="$optc -fopenmp"; optl="$optl -fopenmp"; fi + if [ "$omp_mod" == 'yes' ] ; then optc="$optc -fopenmp"; optl="$optl -fopenmp"; fi # optimized options if [ -z "$(echo $cmplr | grep debug)" ] ; then @@ -241,7 +250,7 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ if [ "$list" == 'yes' ] ; then optc="$optc -Mlist"; fi # omp options - if [ "$omp_mod" = 'yes' ] ; then optc="$optc -mp"; optl="$optl -mp"; fi + if [ "$omp_mod" == 'yes' ] ; then optc="$optc -mp"; optl="$optl -mp"; fi # optimized options if [ -z "$(echo $cmplr | grep debug)" ] ; then diff --git a/model/bin/w3_setup b/model/bin/w3_setup index 0e87f6ac4..b9cd4d402 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -415,6 +415,7 @@ then [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ + [ "$cmplr" == "hera" ] || \ [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ @@ -438,6 +439,7 @@ then [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ + [ "$cmplr" == "hera" ] || \ [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ diff --git a/model/esmf/Makefile b/model/esmf/Makefile index cd3300743..8453a6ae6 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -34,7 +34,7 @@ ifeq ($(WW3_COMP),Portland) else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","pgi" "datarmor_pgi" "datarmor_pgi_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -byteswapio # intel -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","theia" "Intel")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","theia" "Intel" "hera")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_phase2" "wcoss_cray" "wcoss_dell_p3")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian diff --git a/regtests/bin/matrix.comp b/regtests/bin/matrix.comp index 8c20ffdb1..3f29c90db 100755 --- a/regtests/bin/matrix.comp +++ b/regtests/bin/matrix.comp @@ -159,7 +159,7 @@ binaryfiles=`grep . -r * | grep 'Binary file' | sed -e "s/^Binary file //" -e "s/ matches$//"` #Generate list of files to skip - skipfiles="ww3_shel.out ww3_multi.out prf.*.mww3 finished ww3_systrk.out" + skipfiles="ww3_shel.out ww3_multi.out prf.*.mww3 finished ww3_systrk.out gmon.out time_count.txt" nf_1=`echo $files_1 | wc -w | awk '{print $1}'` echo " found $nf_1 files in base directory" >> $home_dir/fulldiff.tmp diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index 2fff488b2..60e0bfbd6 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -31,8 +31,27 @@ echo "Save source codes : $source" echo "Save listings : $list" -# Set batchq queue to define headers etc (default to original version if empty) -batchq="slurm" +# Compiler option. Choose appropriate compiler and set cmplOption to +# y if using for the first time or using a different compiler + + cmplr=intel + export cmplOption='y' + +# Set batchq queue, choose modules and other custom variables to fit system and +# to define headers etc (default to original version if empty) +ishera=`hostname | grep hfe` +if [ $ishera ] +then +# If no other h, assuming Hera + cmplr=hera + batchq="slurm" + modcomp='intel/18.0.5.274' + modmpi='impi/2018.0.4' + modnetcdf='netcdf/4.6.1' + metispath='/scratch2/COASTAL/coastal/save/Ali.Abdolali/parmetis-4.0.3' +else + batchq= +fi # 1. Set up # 1.a Computer/ user dependent set up @@ -62,30 +81,16 @@ fi # Netcdf and Parmetis modules & variables -istheia=`hostname | grep tfe` -if [ $istheia ] -then - modcomp='intel/14.0.2' - modmpi='impi/5.1.2.150' - modnetcdf='netcdf/4.3.0' -fi - echo " module load $modcomp $modmpi $modnetcdf" >> matrix.head echo " export WWATCH3_NETCDF=NC4" >> matrix.head echo " export NETCDF_CONFIG=`which nc-config`" >> matrix.head - echo " export METIS_PATH=/scratch3/NCEPDEV/stmp2/Jessica.Meixner/parmetis-4.0.3" >> matrix.head + echo " export METIS_PATH=${metispath}" >> matrix.head echo " export WW3_PARCOMPN=4" >> matrix.head echo ' ' -# Compiler option. Choose appropriate compiler and set cmplOption to -# y if using for the first time or using a different compiler - - cmplr=Intel - export cmplOption='y' - if [ "$batchq" = 'slurm' ] then - export mpi='srun' + export mpi='mpirun' else export mpi='mpirun' fi diff --git a/regtests/bin/run_test b/regtests/bin/run_test index 91b5acd5f..fc1008481 100755 --- a/regtests/bin/run_test +++ b/regtests/bin/run_test @@ -1436,7 +1436,7 @@ then then if [ $nproc ] then - if [ $batchq = "slurm" ] + if [ -z $batchq ] && [ $batchq = "slurm" ] then runcmd="$runcmd -n $nproc" From e0b61d0036b5553faeb9f0cec38f882d60824e42 Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Mon, 7 Oct 2019 13:55:59 -0400 Subject: [PATCH 13/84] Add option for reading wind from restart for wmesmf and a few other things (#109) * superscript to registered trademark in README * Branch esmf_hybrid: Adding hybrid compile options for OMP threading in esmf build for NEMS app. * Branch esmf_hybrid: fixing makefile bug for completing make process in esmf area. * updating w3_make for esmf for hybrid compile option (#78) updating esmf makefile for option to only build library updating switch to remove FLD2 which is only used for 2way coupling * spaces to tab in makefile for esmf * updating comp/link for theia issue for hybrid compilation * Adding to skip files in matrix.comp Github Issue #87 * Removing T400 until parameters can be confirmed and updated * removing a temp manual file and adding to git ignore list * Adding hera for NEMS coupled application builds * more hera updates for NEMS * adding wind restarts for esmf issues * updates for proper indexing of tw* and bug fixes plus debug statements to be removed after more testing * adding implicit none to wmesmf * removing w3tide computed gotos - update from Mickael * remove computed goto * bugfix for w3iors * adding WXNwrst because WXN/WYN are not allocated yet * removing debug write statements * adding wrst to manual * adding WRST to w3_new * when WRST is allocated a second time it was zeroing out field so a variable was added to make sure it was only allocated once --- .gitignore | 1 + README.md | 6 +- manual/app/nuopc.tex | 4 ++ manual/eqs/ST4.tex | 133 +++++++++++++++++++++++++------------ manual/impl/switch.tex | 1 + manual/ww3_trnc.tex | 24 ------- model/bin/comp.theia | 2 +- model/bin/link.theia | 2 +- model/bin/make_makefile.sh | 9 ++- model/bin/w3_make | 10 ++- model/bin/w3_new | 3 + model/esmf/Makefile | 7 ++ model/esmf/switch | 2 +- model/ftn/w3idatmd.ftn | 13 ++++ model/ftn/w3iorsmd.ftn | 58 ++++++++++++++-- model/ftn/w3profsmd.ftn | 24 ++++++- model/ftn/w3tidemd.ftn | 20 +++--- model/ftn/wmesmfmd.ftn | 64 ++++++++++++++++-- 18 files changed, 285 insertions(+), 98 deletions(-) delete mode 100644 manual/ww3_trnc.tex diff --git a/.gitignore b/.gitignore index df8f4fb85..de14dfa6c 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ manual/ww3_systrk.tex manual/ww3_uprstr.tex manual/ww3_grib.tex manual/ww3_gint.tex +manual/ww3_trnc.tex manual/gx_outf.tex manual/gx_outp.tex manual/*.log diff --git a/README.md b/README.md index 24c789367..fa2c1df63 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # The WAVEWATCH III Framework -WAVEWATCH III ® is a community wave modeling framework that includes the +WAVEWATCH III® is a community wave modeling framework that includes the latest scientific advancements in the field of wind-wave modeling and dynamics. ## General Features @@ -11,11 +11,11 @@ for shallow-water (surf zone) applications, as well as wetting and drying of grid points. Propagation of a wave spectrum can be solved using regular (rectilinear or curvilinear) and unstructured (triangular) grids. See [About WW3](https://github.com/NOAA-EMC/WW3/wiki/About-WW3) for a -detailed description of WAVEWATCH III ®. +detailed description of WAVEWATCH III® . ## Installation -The WAVEWATCH III framework package has two parts that need to be combined so +The WAVEWATCH III® framework package has two parts that need to be combined so all runs smoothly: the GitHub repo itself, and a binary data file bundle that needs to be obtained from our ftp site. Steps to successfully acquire and install the framework are outlined in our [Quick Start](https://github.com/NOAA-EMC/WW3/wiki/Quick-Start) diff --git a/manual/app/nuopc.tex b/manual/app/nuopc.tex index 67c6f670f..d149b670e 100644 --- a/manual/app/nuopc.tex +++ b/manual/app/nuopc.tex @@ -25,6 +25,10 @@ \subsection{~Building and Installing the NUOPC Cap} \label{sec:nuopcbuild} this makefile will subsequently call {\code w3\_make}. As part of this process a nuopc.mk makefile fragment will also be created, which tells NUOPC/ESMF where the \ws\ library is located. +Note there is a new switch {\code WRST} which will add 10 m wind to the restart file and use that wind field +at the initial time step of the wave model. This can be used in situations where the coupled atmospheric model +does not have 10 m wind speeds at initialization. + \vssub \subsection{~Import/Export Fields in the NUOPC Cap} \label{sec:nuopcfields} \vssub diff --git a/manual/eqs/ST4.tex b/manual/eqs/ST4.tex index 37092a504..0904ca2f9 100644 --- a/manual/eqs/ST4.tex +++ b/manual/eqs/ST4.tex @@ -14,9 +14,9 @@ \subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \l Many different adjustments can be made by changing the namelist parameters. A few successful combinations are given by tables \ref{tab:ST4_parSIN} and \ref{tab:ST4_parSDS}, with results described by \citep{art:RA13,art:SAG16}. Further calibration to any particular wind field should be done for best performance. Guidance for this is given by \cite{Stopa2018}. -We also note that the particular -set of parameters T400 corresponds to setting IPHYS=1 in the ECWAM code cycle 45R2, with a few differences -related to the fact that precomputed stress tables have now been removed from ECWAM. +%We also note that the particular +%set of parameters T400 corresponds to setting IPHYS=1 in the ECWAM code cycle 45R2, with a few differences +%related to the fact that precomputed stress tables have now been removed from ECWAM. The reduction of $u_\star$ in @@ -93,29 +93,51 @@ \subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \l \begin{landscape} \begin{table} \begin{center} -\begin{tabular}{|l|c|c|c|c|c|c|c|c|} \hline \hline -Par. & WWATCH var. & namelist & T471 & T471f & T400/$I_{\mathrm{phys}}=1$ & T405 & T500 & T601 \\ +%\begin{tabular}{|l|c|c|c|c|c|c|c|c|} \hline \hline +%Par. & WWATCH var. & namelist & T471 & T471f & T400/$I_{\mathrm{phys}}=1$ & T405 & T500 & T601 \\ +%\hline +% $z_u$ & ZWND & SIN4 & 10.0 & 10.0 & 10.0 & 10.0 & 10.0 & 10.0 \\ +% $\alpha_0$ & ALPHA0 & SIN4 & 0.0095 & 0.0095 & \textbf{0.0062}& 0.0095 & 0.0095 & 0.0095 \\ +% $\beta_{\mathrm{max}}$ & BETAMAX & SIN4 & 1.43 &\textbf{1.33}&\textbf{1.42} & \textbf{1.55} &\textbf{1.52} & \textbf{2.0}\\ +% $p_{\mathrm{in}}$ & SINTHP & SIN4 & 2 & 2 & 2 & 2 & 2 & \textbf{1} \\ +% $z_\alpha$ & ZALP & SIN4 & 0.006 & 0.006 & 0.008 & 0.006 &0.006 & 0.006 \\ +% $s_u$ & TAUWSHELTER & SIN4 & 0.3 & 0.3 & \textbf{0.25} & \textbf{0.0} &\textbf{1.0} & \textbf{0.5}\\ +% $s_1$ & SWELLF & SIN4 & 0.66 & 0.66 & 0.66 & 0.8 & 0.8 & 0.66 \\ +% $s_2$ & SWELLF2 & SIN4 & -0.018 & -0.018 &-0.018 & -0.018 & -0.018 & -0.018 \\ +% $s_3$ & SWELLF3 & SIN4 & 0.022 & 0.022 & 0.022 &\textbf{0.015} &\textbf{0.015}& 0.022 \\ +% $\mathrm{Re}_c$ & SWELLF4 & SIN4 &$1.5\X^5$& $1.5\X^5$ & $1.5\X^5$ &$\mathbf{10^5}$&$\mathbf{10^5}$& $1.5\X^5$ \\ +% $s_5$ & SWELLF5 & SIN4 & 1.2 & 1.2 & 1.2 & 1.2 & 1.2 & 1.2 \\ +% $s_6$ & SWELLF6 & SIN4 & 0. & 0. & \textbf{1.0} & 0. & 0. & 0. \\ +% $s_7$ & SWELLF7 & SIN4 &3.6$\X^5$&3.6$\X^5$ & 3.6$\X^5$ &\textbf{0.0} &\textbf{0.0} & 3.6$\X^5$ \\ +% $z_r$ & Z0RAT & SIN4 & 0.04 & 0.04 & 0.04 & 0.04 & 0.04 & 0.04 \\ +% $z_{0,\max}$ & Z0MAX & SIN4 & 1.002 & 1.002 & 1.002 &\textbf{0.002} & 1.002 & 1.002 \\ +%\hline +%\end{tabular} +\begin{tabular}{|l|c|c|c|c|c|c|c|} \hline \hline +Par. & WWATCH var. & namelist & T471 & T471f & T405 & T500 & T601 \\ \hline - $z_u$ & ZWND & SIN4 & 10.0 & 10.0 & 10.0 & 10.0 & 10.0 & 10.0 \\ - $\alpha_0$ & ALPHA0 & SIN4 & 0.0095 & 0.0095 & \textbf{0.0062}& 0.0095 & 0.0095 & 0.0095 \\ - $\beta_{\mathrm{max}}$ & BETAMAX & SIN4 & 1.43 &\textbf{1.33}&\textbf{1.42} & \textbf{1.55} &\textbf{1.52} & \textbf{2.0}\\ - $p_{\mathrm{in}}$ & SINTHP & SIN4 & 2 & 2 & 2 & 2 & 2 & \textbf{1} \\ - $z_\alpha$ & ZALP & SIN4 & 0.006 & 0.006 & 0.008 & 0.006 &0.006 & 0.006 \\ - $s_u$ & TAUWSHELTER & SIN4 & 0.3 & 0.3 & \textbf{0.25} & \textbf{0.0} &\textbf{1.0} & \textbf{0.5}\\ - $s_1$ & SWELLF & SIN4 & 0.66 & 0.66 & 0.66 & 0.8 & 0.8 & 0.66 \\ - $s_2$ & SWELLF2 & SIN4 & -0.018 & -0.018 &-0.018 & -0.018 & -0.018 & -0.018 \\ - $s_3$ & SWELLF3 & SIN4 & 0.022 & 0.022 & 0.022 &\textbf{0.015} &\textbf{0.015}& 0.022 \\ - $\mathrm{Re}_c$ & SWELLF4 & SIN4 &$1.5\X^5$& $1.5\X^5$ & $1.5\X^5$ &$\mathbf{10^5}$&$\mathbf{10^5}$& $1.5\X^5$ \\ - $s_5$ & SWELLF5 & SIN4 & 1.2 & 1.2 & 1.2 & 1.2 & 1.2 & 1.2 \\ - $s_6$ & SWELLF6 & SIN4 & 0. & 0. & \textbf{1.0} & 0. & 0. & 0. \\ - $s_7$ & SWELLF7 & SIN4 &3.6$\X^5$&3.6$\X^5$ & 3.6$\X^5$ &\textbf{0.0} &\textbf{0.0} & 3.6$\X^5$ \\ - $z_r$ & Z0RAT & SIN4 & 0.04 & 0.04 & 0.04 & 0.04 & 0.04 & 0.04 \\ - $z_{0,\max}$ & Z0MAX & SIN4 & 1.002 & 1.002 & 1.002 &\textbf{0.002} & 1.002 & 1.002 \\ + $z_u$ & ZWND & SIN4 & 10.0 & 10.0 & 10.0 & 10.0 & 10.0 \\ + $\alpha_0$ & ALPHA0 & SIN4 & 0.0095 & 0.0095 & 0.0095 & 0.0095 & 0.0095 \\ + $\beta_{\mathrm{max}}$ & BETAMAX & SIN4 & 1.43 &\textbf{1.33}& \textbf{1.55} &\textbf{1.52} & \textbf{2.0}\\ + $p_{\mathrm{in}}$ & SINTHP & SIN4 & 2 & 2 & 2 & 2 & \textbf{1} \\ + $z_\alpha$ & ZALP & SIN4 & 0.006 & 0.006 & 0.006 &0.006 & 0.006 \\ + $s_u$ & TAUWSHELTER & SIN4 & 0.3 & 0.3 & \textbf{0.0} &\textbf{1.0} & \textbf{0.5}\\ + $s_1$ & SWELLF & SIN4 & 0.66 & 0.66 & 0.8 & 0.8 & 0.66 \\ + $s_2$ & SWELLF2 & SIN4 & -0.018 & -0.018 & -0.018 & -0.018 & -0.018 \\ + $s_3$ & SWELLF3 & SIN4 & 0.022 & 0.022 &\textbf{0.015} &\textbf{0.015}& 0.022 \\ + $\mathrm{Re}_c$ & SWELLF4 & SIN4 &$1.5\X^5$& $1.5\X^5$ &$\mathbf{10^5}$&$\mathbf{10^5}$& $1.5\X^5$ \\ + $s_5$ & SWELLF5 & SIN4 & 1.2 & 1.2 & 1.2 & 1.2 & 1.2 \\ + $s_6$ & SWELLF6 & SIN4 & 0. & 0. & 0. & 0. & 0. \\ + $s_7$ & SWELLF7 & SIN4 &3.6$\X^5$&3.6$\X^5$ &\textbf{0.0} &\textbf{0.0} & 3.6$\X^5$ \\ + $z_r$ & Z0RAT & SIN4 & 0.04 & 0.04 & 0.04 & 0.04 & 0.04 \\ + $z_{0,\max}$ & Z0MAX & SIN4 & 1.002 & 1.002 &\textbf{0.002} & 1.002 & 1.002 \\ \hline -\end{tabular} +\end{tabular} + + \end{center} -\caption{Parameter values for T471, T471f, T400, T405, T500, and T601 source +\caption{Parameter values for T471, T471f, T405, T500, and T601 source term parameterizations that can be reset via the {\F SIN4} namelist. Please note that the names of the variables only apply to the namelists. In the source term module the names are slightly different, with a doubled first @@ -295,30 +317,53 @@ \subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \l \begin{landscape} \begin{table} \begin{center} -\begin{tabular}{|l|c|c|c|c|c|c|c|} \hline \hline -Par. & WWATCH var. & namelist & T471 & T400/$I_{\mathrm{phys}}=1$& T405 & T500 & T601 \\ +%\begin{tabular}{|l|c|c|c|c|c|c|c|} \hline \hline +%Par. & WWATCH var. & namelist & T471 & T400/$I_{\mathrm{phys}}=1$& T405 & T500 & T601 \\ +%\hline +%% $p$ & WNMEANP & SDS4 & 0.5 & 0.5 & 0.5 & 0.5 \\ +%% $p_{\mathrm{tail}}$ & WNMEANPTAIL & SDS4 & 0.5 & 0.5 & 0.5 & 0.5 \\ +% $f_{\mathrm{FM}}$ & FXFM3 & SDS4 & 2.5 & 2.5 & 2.5 &\textbf{9.9} & 5 \\ +% & SDSC1 & SDS4 & 0 & 0 & 0 &\textbf{1.0} & 0 \\ +% $C_{\mathrm{ds}}^{\mathrm{sat}}$ & SDSC2 & SDS4 &$-2.2\X^{-5}$&$-2.2\X^{-5}$ &$-2.2\X^{-5}$ &\textbf{0.0} &$-2.2\X^{-5}$ \\ +% $C_{\mathrm{ds}}^{\mathrm{BCK}}$ & SDSBCK & SDS4 & 0 & 0 & 0 &\textbf{0.185}& 0 \\ +% $C_{\mathrm{ds}}^{\mathrm{HCK}}$ & SDSHCK & SDS4 & 0 & 0 & 0 &\textbf{1.5} & 0 \\ +% $\Delta_\theta$ & SDSDTH & SDS4 & 80 & 80 & 80 & 80 & 80 \\ +% $\delta_\theta$ & SDSSTRAINA & SDS4 & 0 & 0 & 0 & 0 & \textbf{15} \\ +% $M_\theta$ & SDSSTRAIN & SDS4 & 0 & 0 & 0 & 0 & \textbf{10} \\ +% $N_\theta$ & SDSSTRAIN2 & SDS4 & 0 & 0 & 0 & 0 & \textbf{20} \\ +% $B_r$ & SDSBR & SDS4 & 0.0009 & 0.0009 &\textbf{0.00085} & 0.0009 & 0.0009 \\ +% $C_{\mathrm{cu}}$ & SDSCUM & SDS4 & -0.40344 & \textbf{0.0} & \textbf{0.0} &-0.40344 &-0.40344 \\ +% ${\mathrm{s_B}}$ & SDSCOS &SDS4 & 2.0 & 2.0 & \textbf{0.0} & 2.0 & 2.0 \\ +% $B_0$ & SDSC4 & SDS4 & 1.0 & 1.0 & 1.0 & 1.0 & 1.0 \\ +% $p^{\mathrm{sat}}$ & SDSP & SDS4 & 2.0 & 2.0 & 2.0 & 2.0 & 2.0 \\ +% $C_{\mathrm{turb}}$ & SDSC5 & SDS4 & 0.0 & 0.0 & 0.0 & 0.0 & \textbf{1.0} \\ +% $\delta_d$ & SDSC6 & SDS4 & 0.3 & 0.3 & 0.3 & 0.3 &0.3 \\ +% $C$ & NLPROP & SNL1 & $2.5\X^7$ & $\mathbf{2.7\X^7}$ &$\mathbf{2.7\X^7}$& $2.5\X^7$ & $2.5\X^7$ \\ +% \hline \hline +%\end{tabular} +\begin{tabular}{|l|c|c|c|c|c|c|} \hline \hline +Par. & WWATCH var. & namelist & T471 & T405 & T500 & T601 \\ \hline -% $p$ & WNMEANP & SDS4 & 0.5 & 0.5 & 0.5 & 0.5 \\ -% $p_{\mathrm{tail}}$ & WNMEANPTAIL & SDS4 & 0.5 & 0.5 & 0.5 & 0.5 \\ - $f_{\mathrm{FM}}$ & FXFM3 & SDS4 & 2.5 & 2.5 & 2.5 &\textbf{9.9} & 5 \\ - & SDSC1 & SDS4 & 0 & 0 & 0 &\textbf{1.0} & 0 \\ - $C_{\mathrm{ds}}^{\mathrm{sat}}$ & SDSC2 & SDS4 &$-2.2\X^{-5}$&$-2.2\X^{-5}$ &$-2.2\X^{-5}$ &\textbf{0.0} &$-2.2\X^{-5}$ \\ - $C_{\mathrm{ds}}^{\mathrm{BCK}}$ & SDSBCK & SDS4 & 0 & 0 & 0 &\textbf{0.185}& 0 \\ - $C_{\mathrm{ds}}^{\mathrm{HCK}}$ & SDSHCK & SDS4 & 0 & 0 & 0 &\textbf{1.5} & 0 \\ - $\Delta_\theta$ & SDSDTH & SDS4 & 80 & 80 & 80 & 80 & 80 \\ - $\delta_\theta$ & SDSSTRAINA & SDS4 & 0 & 0 & 0 & 0 & \textbf{15} \\ - $M_\theta$ & SDSSTRAIN & SDS4 & 0 & 0 & 0 & 0 & \textbf{10} \\ - $N_\theta$ & SDSSTRAIN2 & SDS4 & 0 & 0 & 0 & 0 & \textbf{20} \\ - $B_r$ & SDSBR & SDS4 & 0.0009 & 0.0009 &\textbf{0.00085} & 0.0009 & 0.0009 \\ - $C_{\mathrm{cu}}$ & SDSCUM & SDS4 & -0.40344 & \textbf{0.0} & \textbf{0.0} &-0.40344 &-0.40344 \\ - ${\mathrm{s_B}}$ & SDSCOS &SDS4 & 2.0 & 2.0 & \textbf{0.0} & 2.0 & 2.0 \\ - $B_0$ & SDSC4 & SDS4 & 1.0 & 1.0 & 1.0 & 1.0 & 1.0 \\ - $p^{\mathrm{sat}}$ & SDSP & SDS4 & 2.0 & 2.0 & 2.0 & 2.0 & 2.0 \\ - $C_{\mathrm{turb}}$ & SDSC5 & SDS4 & 0.0 & 0.0 & 0.0 & 0.0 & \textbf{1.0} \\ - $\delta_d$ & SDSC6 & SDS4 & 0.3 & 0.3 & 0.3 & 0.3 &0.3 \\ - $C$ & NLPROP & SNL1 & $2.5\X^7$ & $\mathbf{2.7\X^7}$ &$\mathbf{2.7\X^7}$& $2.5\X^7$ & $2.5\X^7$ \\ + $f_{\mathrm{FM}}$ & FXFM3 & SDS4 & 2.5 & 2.5 &\textbf{9.9} & 5 \\ + & SDSC1 & SDS4 & 0 & 0 &\textbf{1.0} & 0 \\ + $C_{\mathrm{ds}}^{\mathrm{sat}}$ & SDSC2 & SDS4 &$-2.2\X^{-5}$&$-2.2\X^{-5}$ &\textbf{0.0} &$-2.2\X^{-5}$ \\ + $C_{\mathrm{ds}}^{\mathrm{BCK}}$ & SDSBCK & SDS4 & 0 & 0 &\textbf{0.185}& 0 \\ + $C_{\mathrm{ds}}^{\mathrm{HCK}}$ & SDSHCK & SDS4 & 0 & 0 &\textbf{1.5} & 0 \\ + $\Delta_\theta$ & SDSDTH & SDS4 & 80 & 80 & 80 & 80 \\ + $\delta_\theta$ & SDSSTRAINA & SDS4 & 0 & 0 & 0 & \textbf{15} \\ + $M_\theta$ & SDSSTRAIN & SDS4 & 0 & 0 & 0 & \textbf{10} \\ + $N_\theta$ & SDSSTRAIN2 & SDS4 & 0 & 0 & 0 & \textbf{20} \\ + $B_r$ & SDSBR & SDS4 & 0.0009 &\textbf{0.00085} & 0.0009 & 0.0009 \\ + $C_{\mathrm{cu}}$ & SDSCUM & SDS4 & -0.40344 & \textbf{0.0} &-0.40344 &-0.40344 \\ + ${\mathrm{s_B}}$ & SDSCOS &SDS4 & 2.0 & \textbf{0.0} & 2.0 & 2.0 \\ + $B_0$ & SDSC4 & SDS4 & 1.0 & 1.0 & 1.0 & 1.0 \\ + $p^{\mathrm{sat}}$ & SDSP & SDS4 & 2.0 & 2.0 & 2.0 & 2.0 \\ + $C_{\mathrm{turb}}$ & SDSC5 & SDS4 & 0.0 & 0.0 & 0.0 & \textbf{1.0} \\ + $\delta_d$ & SDSC6 & SDS4 & 0.3 & 0.3 & 0.3 &0.3 \\ + $C$ & NLPROP & SNL1 & $2.5\X^7$ &$\mathbf{2.7\X^7}$& $2.5\X^7$ & $2.5\X^7$ \\ \hline \hline -\end{tabular} \end{center} +\end{tabular} +\end{center} \caption{Same as Table \ref{tab:ST4_parSIN}, for the {\F SDS4} and {\F SNL1} namelists. Bold values are different from the default values set by diff --git a/manual/impl/switch.tex b/manual/impl/switch.tex index 7484507f2..d3702595b 100644 --- a/manual/impl/switch.tex +++ b/manual/impl/switch.tex @@ -365,6 +365,7 @@ \subsubsection{~Optional switches} \label{sub:opt_switch} NetCDF-3 files. Selecting both TRKNC and NC4 will generate NetCDF-4 files.} \sit{uost}{Enable the unresolved obstacles source term.} +\sit{wrst}{Save wind in restart and use in first time step in wmesmf.} \sit{xw0 }{Swell diffusion only in \uq\ scheme.} \sit{xw1 }{Id. wave growth diffusion only.} \end{slist} diff --git a/manual/ww3_trnc.tex b/manual/ww3_trnc.tex deleted file mode 100644 index 62d5d932a..000000000 --- a/manual/ww3_trnc.tex +++ /dev/null @@ -1,24 +0,0 @@ -\begin{footnotesize} -\begin{verbatim} -$ -------------------------------------------------------------------- $ -$ WAVEWATCH III Track output post-processing $ -$--------------------------------------------------------------------- $ -$ First output time (yyyymmdd hhmmss), increment of output (s), -$ and number of output times. -$ - 19680606 000000 3600. 100000 -$ -$ Output type -------------------------------------------------------- $ -$ netCDF version [3,4] -$ file prefix -$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly) -$ - 3 - ww3. - 6 -$ -$ -------------------------------------------------------------------- $ -$ End of input file $ -$ -------------------------------------------------------------------- $ -\end{verbatim} -\end{footnotesize} diff --git a/model/bin/comp.theia b/model/bin/comp.theia index c8f3c6246..afb5a6043 100755 --- a/model/bin/comp.theia +++ b/model/bin/comp.theia @@ -106,7 +106,7 @@ # open mpi implementation if [ "$omp_mod" = 'yes' ] then - opt="$opt -openmp" + opt="$opt -qopenmp" fi # oasis coupler include dir diff --git a/model/bin/link.theia b/model/bin/link.theia index a6abfc2d3..c29f0275b 100755 --- a/model/bin/link.theia +++ b/model/bin/link.theia @@ -109,7 +109,7 @@ # open mpi implementation if [ "$omp_mod" = 'yes' ] then - opt="$opt -openmp" + opt="$opt -qopenmp" fi # oasis coupler archive diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 205cee2df..4b8852196 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -99,7 +99,7 @@ dstress s_ice s_is reflection s_xx \ wind windx wcor rwind curr currx mgwind mgprop mggse \ subsec tdyn dss0 pdif tide refrx ig rotag arctic nnt mprf \ - cou oasis agcm ogcm igcm trknc setup pdlib memck uost + cou oasis agcm ogcm igcm trknc setup pdlib memck uost rstwind do case $type in #sort:mach: @@ -257,6 +257,13 @@ ID='wind vs. current definition' TS='RWND' OK='RWND' ;; + +#sort:rstwind: + rstwind ) TY='upto1' + ID='wind in restart for wmesmf' + TS='WRST' + OK='WRST' ;; + #sort:curr: curr ) TY='one' ID='current interpolation in time' diff --git a/model/bin/w3_make b/model/bin/w3_make index 153da7be7..027a66063 100755 --- a/model/bin/w3_make +++ b/model/bin/w3_make @@ -709,8 +709,14 @@ EOF if [ -n "`echo $prog | grep esmf 2>/dev/null`" ] then mkfile=$main_dir/nuopc.mk - mod_dir=$main_dir/mod_MPI - obj_dir=$main_dir/obj_MPI + if [ -n "`grep OMP $switch_file`" ] + then + mod_dir=$main_dir/mod_HYB + obj_dir=$main_dir/obj_HYB + else + mod_dir=$main_dir/mod_MPI + obj_dir=$main_dir/obj_MPI + fi rm -f $mkfile touch $mkfile echo "#-----------------------------------------------" >> $mkfile diff --git a/model/bin/w3_new b/model/bin/w3_new index df6a44ddf..ec346d3cf 100755 --- a/model/bin/w3_new +++ b/model/bin/w3_new @@ -320,6 +320,9 @@ touch w3gdatmd.ftn touch w3iogrmd.ftn touch ww3_grid.ftn ;; + 'rstwind') cd $main_dir/ftn ; touch wmesmfmd.ftn + touch w3idatmd.ftn + touch w3iorsmd.ftn ;; 'curr' ) cd $main_dir/ftn ; touch w3updtmd.ftn touch ww3_prnc.ftn touch ww3_prep.ftn ;; diff --git a/model/esmf/Makefile b/model/esmf/Makefile index 8453a6ae6..a899702b8 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -89,6 +89,9 @@ ww3_nems: env setup gout switch $(WW3_BINDIR)/w3_make ww3_multi_esmf $(WW3_BINDIR)/w3_make ww3_multi +ww3_nemslibonly: env setup switch + $(WW3_BINDIR)/w3_make ww3_multi_esmf + ww3_multi_esmf: esmApp.o $(DEP_LINK_OBJS) $(ESMF_F90LINKER) $(ESMF_F90LINKOPTS) -o $(EXE) $^ \ $(ESMF_F90LINKPATHS) $(ESMF_F90LINKRPATHS) $(ESMF_F90ESMFLINKLIBS) @@ -157,6 +160,8 @@ switch: gout: @echo "$(SWITCHES)" > $(WW3_BINDIR)/tempswitch @sed -e "s/DIST/SHRD/g"\ + -e "s/OMPG/ /g"\ + -e "s/OMPH/ /g"\ -e "s/MPIT/ /g"\ -e "s/MPI/ /g"\ -e "s/PDLIB/ /g"\ @@ -172,6 +177,8 @@ gout: $(WW3_BINDIR)/w3_make ww3_ounp @echo "$(SWITCHES)" > $(WW3_BINDIR)/tempswitch @sed -e "s/DIST/SHRD/g"\ + -e "s/OMPG/ /g"\ + -e "s/OMPH/ /g"\ -e "s/MPIT/ /g"\ -e "s/MPI/ /g"\ -e "s/PDLIB/ /g"\ diff --git a/model/esmf/switch b/model/esmf/switch index fa59a929e..bb713ff4f 100644 --- a/model/esmf/switch +++ b/model/esmf/switch @@ -5,12 +5,12 @@ DIST MPI SCRIP SCRIPNC +WRST NC4 PR3 UQ FLX0 SEED -FLD2 ST4 STAB0 NL1 diff --git a/model/ftn/w3idatmd.ftn b/model/ftn/w3idatmd.ftn index 9de24a559..cfb8b89f7 100644 --- a/model/ftn/w3idatmd.ftn +++ b/model/ftn/w3idatmd.ftn @@ -149,6 +149,7 @@ INTEGER :: TFN(2,-7:8), TC0(2), TW0(2), & TDN(2), TG0(2) REAL :: GA0, GD0, GAN, GDN +!/WRST REAL, POINTER :: WXNwrst(:,:),WYNwrst(:,:) REAL, POINTER :: WX0(:,:), WY0(:,:), DT0(:,:), & WXN(:,:), WYN(:,:), DTN(:,:), & CX0(:,:), CY0(:,:), CXN(:,:), & @@ -159,6 +160,7 @@ !/TIDE REAL, POINTER :: CXTIDE(:,:,:,:), CYTIDE(:,:,:,:), & !/TIDE WLTIDE(:,:,:,:) LOGICAL :: IINIT +!/WRST LOGICAL :: WRSTIINIT=.FALSE. ! note that if size of INFLAGS1 is changed, then TFLAGS in wminitmd.ftn ! also must be resized. LOGICAL :: INFLAGS1(-7:12), FLAGSC(-7:12), & @@ -179,6 +181,7 @@ REAL, POINTER :: GA0, GD0, GAN, GDN REAL, POINTER :: WX0(:,:), WY0(:,:), DT0(:,:), & WXN(:,:), WYN(:,:), DTN(:,:), & +!/WRST WXNwrst(:,:),WYNwrst(:,:), & CX0(:,:), CY0(:,:), CXN(:,:), & CYN(:,:), WLEV(:,:), ICEI(:,:), & BERGI(:,:), MUDT(:,:), MUDV(:,:), & @@ -527,6 +530,13 @@ !/TIDE CHECK_ALLOC_STATUS ( ISTAT ) !/TIDE END IF ! + +!/WRST IF(.NOT.(INPUTS(IMOD)%WRSTIINIT)) THEN +!/WRST ALLOCATE ( INPUTS(IMOD)%WXNwrst(NX,NY) , & +!/WRST INPUTS(IMOD)%WYNwrst(NX,NY) , STAT=ISTAT ) +!/WRST INPUTS(IMOD)%WRSTIINIT=.TRUE. +!/WRST ENDIF + IF ( FLWIND ) THEN !/SMC IF( FSWND ) THEN !/SMC ALLOCATE ( INPUTS(IMOD)%WX0(NSEA,1) , & @@ -795,6 +805,9 @@ !/TIDE CYTIDE => INPUTS(IMOD)%CYTIDE !/TIDE END IF ! +!/WRST WXNwrst => INPUTS(IMOD)%WXNwrst +!/WRST WYNwrst => INPUTS(IMOD)%WYNwrst + IF ( FLWIND ) THEN WX0 => INPUTS(IMOD)%WX0 WY0 => INPUTS(IMOD)%WY0 diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index 8d1cdcb5d..4c7fa12c2 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -234,6 +234,8 @@ GNAME, FILEXT, GTYPE, UNGTYPE USE W3TRIAMD, ONLY: SETUGIOBP USE W3WDATMD +!/WRST USE W3IDATMD, ONLY: WXN, WYN, W3SETI +!/WRST USE W3IDATMD, ONLY: WXNwrst, WYNwrst USE W3ODATMD, ONLY: NDSE, NDST, IAPROC, NAPROC, NAPERR, NAPRST, & IFILE => IFILE4, FNMPRE, NTPROC, IOSTYP !/MPI USE W3ODATMD, ONLY: NRQRS, NBLKRS, RSBLKS, IRQRS, IRQRSS, VAAUX @@ -270,7 +272,7 @@ INTEGER :: IGRD, I, J, LRECL, NSIZE, IERR, & NSEAT, MSPEC, TTIME(2), ISEA, JSEA, & NREC, NPART, IPART, IX, IY, IXL, IP, & - NPRTX2 + NPRTX2, NPRTY2, IYL INTEGER, ALLOCATABLE :: MAPTMP(:,:) !/S INTEGER, SAVE :: IENT = 0 !/MPI INTEGER :: IERR_MPI, IH, IB, ISEA0, ISEAN, & @@ -279,6 +281,7 @@ !/MPI INTEGER, ALLOCATABLE :: STAT1(:,:), STAT2(:,:) !/MPI REAL, ALLOCATABLE :: VGBUFF(:), VLBUFF(:) REAL(KIND=LRB), ALLOCATABLE :: WRITEBUFF(:) + LOGICAL :: WRITE, IOSFLG CHARACTER(LEN=4) :: TYPE CHARACTER(LEN=10) :: VERTST @@ -313,6 +316,7 @@ CALL W3SETO ( IGRD, NDSE, NDST ) CALL W3SETG ( IGRD, NDSE, NDST ) CALL W3SETW ( IGRD, NDSE, NDST ) +!/WRST CALL W3SETI ( IGRD, NDSE, NDST ) ! IF (INXOUT.NE.'READ' .AND. INXOUT.NE.'HOT' .AND. & INXOUT.NE.'COLD' .AND. INXOUT.NE.'WIND' .AND. & @@ -684,6 +688,7 @@ NREC = NSEA + 3 NPART = 1 + (NSEA-1)/NSIZE NPRTX2 = 1 + (NX-1)/NSIZE + NPRTY2 = 1 + (NY-1)/NSIZE ! !/DEBUGIO WRITE(740+IAPROC,*) 'W3IORS, step 8' !/DEBUGIO FLUSH(740+IAPROC) @@ -701,8 +706,8 @@ RPOS = 1_8 + LRECL*(NREC-1_8) WRITEBUFF(:) = 0. WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) WRITEBUFF - WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) TLEV, TICE - + WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) & + TLEV, TICE DO IPART=1,NPART NREC = NREC + 1 RPOS = 1_8 + LRECL*(NREC-1_8) @@ -718,7 +723,27 @@ WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) & (ICE(ISEA),ISEA=1+(IPART-1)*NSIZE, & MIN(NSEA,IPART*NSIZE)) - END DO + END DO +!/WRST DO IX=1, NX +!/WRST DO IPART=1,NPRTY2 +!/WRST NREC = NREC + 1 +!/WRST RPOS = 1_8 + LRECL*(NREC-1_8) +!/WRST WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) WRITEBUFF +!/WRST WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) & +!/WRST (WXN(IX,IYL),IYL=1+(IPART-1)*NSIZE, & +!/WRST MIN(NY,IPART*NSIZE)) +!/WRST END DO +!/WRST END DO +!/WRST DO IX=1, NX +!/WRST DO IPART=1,NPRTY2 +!/WRST NREC = NREC + 1 +!/WRST RPOS = 1_8 + LRECL*(NREC-1_8) +!/WRST WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) WRITEBUFF +!/WRST WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) & +!/WRST (WYN(IX,IYL),IYL=1+(IPART-1)*NSIZE, & +!/WRST MIN(NY,IPART*NSIZE)) +!/WRST END DO +!/WRST END DO ALLOCATE ( MAPTMP(NY,NX) ) MAPTMP = MAPSTA + 8*MAPST2 DO IY=1, NY @@ -777,7 +802,8 @@ ELSE IF (TYPE.EQ.'FULL') THEN RPOS = 1_8 + LRECL*(NREC-1_8) - READ (NDSR,POS=RPOS,ERR=802,IOSTAT=IERR) TLEV, TICE + READ (NDSR,POS=RPOS,ERR=802,IOSTAT=IERR) & + TLEV, TICE !/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading WLV' DO IPART=1,NPART NREC = NREC + 1 @@ -793,7 +819,25 @@ READ (NDSR,POS=RPOS,ERR=802,IOSTAT=IERR) & (ICE(ISEA),ISEA=1+(IPART-1)*NSIZE, & MIN(NSEA,IPART*NSIZE)) - END DO + END DO +!/WRST DO IX=1, NX +!/WRST DO IPART=1,NPRTY2 +!/WRST NREC = NREC + 1 +!/WRST RPOS = 1_8 + LRECL*(NREC-1_8) +!/WRST READ (NDSR,POS=RPOS,ERR=802,IOSTAT=IERR) & +!/WRST (WXNwrst(IX,IYL),IYL=1+(IPART-1)*NSIZE, & +!/WRST MIN(NY,IPART*NSIZE)) +!/WRST END DO +!/WRST END DO +!/WRST DO IX=1, NX +!/WRST DO IPART=1,NPRTY2 +!/WRST NREC = NREC + 1 +!/WRST RPOS = 1_8 + LRECL*(NREC-1_8) +!/WRST READ (NDSR,POS=RPOS,ERR=802,IOSTAT=IERR) & +!/WRST (WYNwrst(IX,IYL),IYL=1+(IPART-1)*NSIZE, & +!/WRST MIN(NY,IPART*NSIZE)) +!/WRST END DO +!/WRST END DO ALLOCATE ( MAPTMP(NY,NX) ) !/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading MAPTMP' DO IY=1, NY @@ -859,6 +903,8 @@ TIC1(2) = 0 TIC5(1) = -1 TIC5(2) = 0 +!/WRST WXNwrst = 0. +!/WRST WYNwrst = 0. WLV = 0. ICE = 0. ASF = 1. diff --git a/model/ftn/w3profsmd.ftn b/model/ftn/w3profsmd.ftn index 0677b1948..36d915317 100644 --- a/model/ftn/w3profsmd.ftn +++ b/model/ftn/w3profsmd.ftn @@ -2030,7 +2030,29 @@ END MODULE W3PROFSMD ! where to go ! if (ipar(1).gt.0) then - goto (10, 20, 40, 50, 60, 70, 80, 90, 100, 110) ipar(10) + !!goto (10, 20, 40, 50, 60, 70, 80, 90, 100, 110) ipar(10) + SELECT CASE (ipar(10)) + CASE (1) + GOTO 10 + CASE (2) + GOTO 20 + CASE (3) + GOTO 40 + CASE (4) + GOTO 50 + CASE (5) + GOTO 60 + CASE (6) + GOTO 70 + CASE (7) + GOTO 80 + CASE (8) + GOTO 90 + CASE (9) + GOTO 100 + CASE (10) + GOTO 110 + END SELECT else if (ipar(1).lt.0) then goto 900 endif diff --git a/model/ftn/w3tidemd.ftn b/model/ftn/w3tidemd.ftn index f8e516214..a322ce1c1 100644 --- a/model/ftn/w3tidemd.ftn +++ b/model/ftn/w3tidemd.ftn @@ -581,11 +581,11 @@ ! RR=EE(J) L2=IR(J)+1 - GO TO (901,902,903),L2 - 902 RR=EE(J)*0.36309*(1.-5.*SLAT*SLAT)/SLAT - GO TO 901 - 903 RR=EE(J)*2.59808*SLAT - 901 CONTINUE + IF (L2.EQ.2) THEN + RR=EE(J)*0.36309*(1.-5.*SLAT*SLAT)/SLAT + ELSE IF (L2.EQ.3) THEN + RR=EE(J)*2.59808*SLAT + END IF UUDBL=LDEL(J)*P+MDEL(J)*ENP+NDEL(J)*PP+PH(J) IUU=UUDBL UU=UUDBL-IUU @@ -1905,11 +1905,11 @@ ! RR=EE(J) L=IR(J)+1 - GO TO (901,902,903),L - 902 RR=EE(J)*0.36309*(1.-5.*SLAT*SLAT)/SLAT - GO TO 901 - 903 RR=EE(J)*2.59808*SLAT - 901 CONTINUE + IF (L.EQ.2) THEN + RR=EE(J)*0.36309*(1.-5.*SLAT*SLAT)/SLAT + ELSE IF (L.EQ.3) THEN + RR=EE(J)*2.59808*SLAT + END IF UUDBL=LDEL(J)*P+MDEL(J)*ENP+NDEL(J)*PP+PH(J) IUU=UUDBL UU=UUDBL-IUU diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index 6278d54bf..42ef128b8 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -328,6 +328,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -482,6 +483,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp type(ESMF_State) :: impState type(ESMF_State) :: expState @@ -607,6 +609,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp type(ESMF_State) :: impState type(ESMF_State) :: expState @@ -626,9 +629,9 @@ character(ESMF_MAXSTR) :: wrkdir = '.' character(ESMF_MAXSTR) :: preamb = '.' character(ESMF_MAXSTR) :: ifname = 'ww3_multi.inp' - logical :: lsep_ss = .false. - logical :: lsep_st = .false. - logical :: lsep_se = .false. + logical :: lsep_ss = .true. + logical :: lsep_st = .true. + logical :: lsep_se = .true. character(ESMF_MAXSTR) :: attstr integer(ESMF_KIND_I4) :: yy,mm,dd,h,m,s type(ESMF_Time) :: ttmp @@ -1157,6 +1160,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp type(ESMF_State) :: impState type(ESMF_State) :: expState @@ -1461,6 +1465,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -1662,6 +1667,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -1872,6 +1878,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -2038,6 +2045,8 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ +!/MPI USE WMMDATMD, ONLY: IMPROC + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -2098,6 +2107,7 @@ if (ESMF_LogFoundError(rc, PASSTHRU)) return tend(1) = 10000*yy + 100*mm + dd tend(2) = 10000*h + 100*m + s + ! ! -------------------------------------------------------------------- / ! Water levels @@ -2196,6 +2206,7 @@ if ( impFieldActive(i1) ) then call w3setg ( impGridID, mdse, mdst ) call w3seti ( impGridID, mdse, mdst ) + if (firstCall) then twn = tcur else @@ -2219,7 +2230,32 @@ tw0 = twn wx0 = wxn wy0 = wyn - endif +!/WRST wxn = WXNwrst !replace with values from restart +!/WRST wyn = WYNwrst +!/WRST wx0 = WXNwrst +!/WRST wy0 = WYNwrst +!/WRST do imod = 1,nrgrd +!/WRST call w3setg ( imod, mdse, mdst ) +!/WRST call w3setw ( imod, mdse, mdst ) +!/WRST call w3seti ( imod, mdse, mdst ) +!/WRST call wmsetm ( imod, mdse, mdst ) +!/WRST if ( mpi_comm_grd .eq. mpi_comm_null ) cycle +!/WRST INPUTS(IMOD)%TW0(:) = INPUTS(impGridID)%TW0(:) +!/WRST INPUTS(IMOD)%TFN(:,3) = INPUTS(impGridID)%TFN(:,3) +!/WRST wxn = WXNwrst !replace with values from restart +!/WRST wyn = WYNwrst +!/WRST wx0 = WXNwrst +!/WRST wy0 = WYNwrst +!/WRST if (ESMF_LogFoundError(rc, PASSTHRU)) return +!/WRST enddo +!/WRST endif + +!/WRST if ( ((twn(1)-tw0(1))*1000000+((twn(2)-tw0(2)))) .le. 0 ) then +!/WRST !If the time of the field is still initial time, replace +!/WRST !with restart field +!/WRST wxn = WXNwrst !replace with values from restart +!/WRST wyn = WYNwrst +!/WRST else !twn>tw0 do imod = 1,nrgrd call w3setg ( imod, mdse, mdst ) call w3setw ( imod, mdse, mdst ) @@ -2232,6 +2268,7 @@ if (ESMF_LogFoundError(rc, PASSTHRU)) return endif enddo +!/WRST endif !if ( twn-tw0 .le. 0 ) endif ! ! -------------------------------------------------------------------- / @@ -2344,6 +2381,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -2523,6 +2561,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -2890,6 +2929,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -3412,6 +3452,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -3781,6 +3822,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_GridComp) :: gcomp integer,intent(out) :: rc !/ @@ -4231,6 +4273,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_Field) :: bmskField type(ESMF_Field) :: impField real(ESMF_KIND_RX) :: missingVal @@ -4448,6 +4491,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_Field) :: impField type(ESMF_Field) :: mbgField type(ESMF_Field) :: bmskField @@ -4549,6 +4593,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_Field) :: field real(ESMF_KIND_RX) :: fillVal integer, optional :: rc @@ -4663,6 +4708,7 @@ !/PDLIB use yowNodepool, only: np, iplg !/PDLIB use yowrankModule, only: rank !/ + implicit none !/ ------------------------------------------------------------------- / !/ Parameter list !/ @@ -4782,6 +4828,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none character (6) :: fnameList(:) character (6) :: fname integer :: rc @@ -4865,6 +4912,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none character(*) :: cname character(*) :: wtnam(:) integer :: wtcnt(:) @@ -4952,6 +5000,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none integer, intent(in) :: nx, ny integer, intent(in) :: nproc integer, intent(in) :: npmin @@ -5079,6 +5128,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none character(*) :: cenv character(*) :: cval integer :: rc @@ -5164,6 +5214,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none integer :: rc !/ !/ ------------------------------------------------------------------- / @@ -5272,6 +5323,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_Field) :: chkField integer :: rc !/ @@ -5399,6 +5451,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none type(ESMF_Field) :: wrlField integer :: rc !/ @@ -5558,6 +5611,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none real :: a(nth,nk,0:nseal) type(ESMF_Field) :: wbxField type(ESMF_Field) :: wbyField @@ -5770,6 +5824,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none real :: a(nth,nk,0:nseal) type(ESMF_Field) :: sxxField type(ESMF_Field) :: sxyField @@ -6006,6 +6061,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ + implicit none real :: a(nth,nk,0:nseal) type(ESMF_Field) :: usxField type(ESMF_Field) :: usyField From 4bacd0241420e6f63ef1613a9825e74bd125cfad Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Thu, 10 Oct 2019 20:48:35 +0200 Subject: [PATCH 14/84] Develop (#86) Merging Ifremer (umr-lops) trusted repo to the NOAA-EMC/WW3 auth repo. * add WCOR to switch list * add check on array index * correct flag status to read time with new CF convention when month and day are written on only one character : YYYY-M-D * set log message into SCRIP comment to avoid misleading error detection with gnu compiler * correct bug due to misuse of NAME instead of UNIT for reading data in input file * remove linking inp file in conversion scripts minor typing change in ww3_multi.nml and ww3_bounc.nml * initialize pointer to avoid random value assignement * remove exit statement to display full list of output boundaries * add check on NDSEN to avoid print on wrong IAPROC * when creating new points file from input file, add relative to points file instead of filename * revert to version number to 7.00 * update matrix_datarmor --- model/aux/bash/ww3_bounc_inp2nml.sh | 49 ++-- model/aux/bash/ww3_grid_inp2nml.sh | 152 +++++----- model/aux/bash/ww3_multi_inp2nml.sh | 59 ++-- model/aux/bash/ww3_ounf_inp2nml.sh | 47 ++- model/aux/bash/ww3_ounp_inp2nml.sh | 47 ++- model/aux/bash/ww3_prnc_inp2nml.sh | 48 ++-- model/aux/bash/ww3_shel_inp2nml.sh | 49 ++-- model/aux/bash/ww3_trnc_inp2nml.sh | 47 ++- model/ftn/w3adatmd.ftn | 3 + model/ftn/w3iogomd.ftn | 10 +- model/ftn/w3timemd.ftn | 16 +- model/ftn/wmgridmd.ftn | 4 +- model/ftn/ww3_grid.ftn | 31 +- regtests/bin/matrix_datarmor | 68 +++-- regtests/bin/run_test | 1 + .../mww3_test_02/input/ww3_multi_grdset_a.nml | 1 - .../mww3_test_02/input/ww3_multi_grdset_b.nml | 1 - .../mww3_test_02/input/ww3_multi_grdset_c.nml | 1 - .../mww3_test_02/input/ww3_multi_grdset_d.nml | 1 - .../mww3_test_03/input/ww3_multi_grdset_a.nml | 1 - .../mww3_test_03/input/ww3_multi_grdset_b.nml | 1 - .../mww3_test_03/input/ww3_multi_grdset_c.nml | 1 - .../mww3_test_03/input/ww3_multi_grdset_d.nml | 1 - .../input/ww3_multi_grdset_d2.nml | 1 - .../mww3_test_03/input/ww3_multi_grdset_e.nml | 1 - .../mww3_test_04/input/ww3_multi_grdset_a.nml | 5 +- .../mww3_test_04/input/ww3_multi_grdset_b.nml | 1 - .../mww3_test_04/input/ww3_multi_grdset_c.nml | 1 - .../mww3_test_04/input/ww3_multi_grdset_d.nml | 1 - .../mww3_test_04/input/ww3_multi_grdset_e.nml | 1 - .../mww3_test_04/input/ww3_multi_grdset_f.nml | 1 - .../mww3_test_04/input/ww3_multi_grdset_g.nml | 1 - .../mww3_test_05/input/ww3_multi_grdset_a.nml | 1 - .../mww3_test_05/input/ww3_multi_grdset_b.nml | 1 - .../mww3_test_05/input/ww3_multi_grdset_c.nml | 1 - .../mww3_test_05/input/ww3_multi_grdset_d.nml | 1 - .../mww3_test_05/input/ww3_multi_grdset_e.nml | 1 - .../mww3_test_06/input/ww3_multi_grdset_d.nml | 1 - .../mww3_test_07/input/ww3_multi_grdset.nml | 1 - .../i_highres_multi/ww3_multi_grdset_a.nml | 1 - .../i_lowres_multi/ww3_multi_grdset_a.nml | 1 - .../mww3_test_08/input/ww3_multi_grdset_a.nml | 1 - regtests/ww3_tp1.3/input/ww3_ounf.nml | 1 - regtests/ww3_tp1.7/input_OBST/1-D.obst | 6 + regtests/ww3_tp1.7/input_OBST/ww3_grid.nml | 110 ++----- regtests/ww3_tp2.1/input/ww3_multi.nml | 1 - regtests/ww3_tp2.17/input/ww3_bounc.nml | 1 - .../ww3_tp2.17/input/ww3_multi_grdset_a.nml | 1 - .../ww3_tp2.17/input/ww3_multi_grdset_b.nml | 1 - .../ww3_tp2.17/input/ww3_multi_grdset_c.nml | 1 - regtests/ww3_tp2.2/input/ww3_multi.nml | 1 - regtests/ww3_tp2.8/input/ww3_bounc.nml | 1 - regtests/ww3_tpt1.1/input/PTM1.depth | 5 + regtests/ww3_tpt1.1/input/PTM1.mask | 5 + regtests/ww3_tpt1.1/input/PTM2.depth | 5 + regtests/ww3_tpt1.1/input/PTM2.mask | 5 + regtests/ww3_tpt1.1/input/PTM3.depth | 5 + regtests/ww3_tpt1.1/input/PTM3.mask | 5 + regtests/ww3_tpt1.1/input/PTM4.depth | 5 + regtests/ww3_tpt1.1/input/PTM4.mask | 5 + regtests/ww3_tpt1.1/input/PTM5.depth | 5 + regtests/ww3_tpt1.1/input/PTM5.mask | 5 + regtests/ww3_tpt1.1/input/namelists_PTM1.nml | 2 + regtests/ww3_tpt1.1/input/namelists_PTM2.nml | 2 + regtests/ww3_tpt1.1/input/namelists_PTM3.nml | 2 + regtests/ww3_tpt1.1/input/namelists_PTM4.nml | 2 + regtests/ww3_tpt1.1/input/namelists_PTM5.nml | 2 + regtests/ww3_tpt1.1/input/ww3_grid_PTM1.nml | 269 ++++++++++++++++++ regtests/ww3_tpt1.1/input/ww3_grid_PTM2.nml | 269 ++++++++++++++++++ regtests/ww3_tpt1.1/input/ww3_grid_PTM3.nml | 269 ++++++++++++++++++ regtests/ww3_tpt1.1/input/ww3_grid_PTM4.nml | 269 ++++++++++++++++++ regtests/ww3_tpt1.1/input/ww3_grid_PTM5.nml | 269 ++++++++++++++++++ .../input_rg_multi/ww3_multi_grdset.nml | 5 +- 73 files changed, 1835 insertions(+), 361 deletions(-) create mode 100644 regtests/ww3_tp1.7/input_OBST/1-D.obst create mode 100644 regtests/ww3_tpt1.1/input/PTM1.depth create mode 100644 regtests/ww3_tpt1.1/input/PTM1.mask create mode 100644 regtests/ww3_tpt1.1/input/PTM2.depth create mode 100644 regtests/ww3_tpt1.1/input/PTM2.mask create mode 100644 regtests/ww3_tpt1.1/input/PTM3.depth create mode 100644 regtests/ww3_tpt1.1/input/PTM3.mask create mode 100644 regtests/ww3_tpt1.1/input/PTM4.depth create mode 100644 regtests/ww3_tpt1.1/input/PTM4.mask create mode 100644 regtests/ww3_tpt1.1/input/PTM5.depth create mode 100644 regtests/ww3_tpt1.1/input/PTM5.mask create mode 100644 regtests/ww3_tpt1.1/input/namelists_PTM1.nml create mode 100644 regtests/ww3_tpt1.1/input/namelists_PTM2.nml create mode 100644 regtests/ww3_tpt1.1/input/namelists_PTM3.nml create mode 100644 regtests/ww3_tpt1.1/input/namelists_PTM4.nml create mode 100644 regtests/ww3_tpt1.1/input/namelists_PTM5.nml create mode 100644 regtests/ww3_tpt1.1/input/ww3_grid_PTM1.nml create mode 100644 regtests/ww3_tpt1.1/input/ww3_grid_PTM2.nml create mode 100644 regtests/ww3_tpt1.1/input/ww3_grid_PTM3.nml create mode 100644 regtests/ww3_tpt1.1/input/ww3_grid_PTM4.nml create mode 100644 regtests/ww3_tpt1.1/input/ww3_grid_PTM5.nml diff --git a/model/aux/bash/ww3_bounc_inp2nml.sh b/model/aux/bash/ww3_bounc_inp2nml.sh index 16f3909f9..64b4ec593 100755 --- a/model/aux/bash/ww3_bounc_inp2nml.sh +++ b/model/aux/bash/ww3_bounc_inp2nml.sh @@ -1,21 +1,34 @@ #!/bin/bash -e +prog="ww3_bounc" if [ $# -ne 1 ] then - echo ' [ERROR] need ww3_bounc input filename in argument [ww3_bounc.inp]' + echo " [ERROR] need ${prog} input filename in argument [${prog}.inp]" exit 1 fi -# link to temporary inp with regtest format inp="$( cd "$( dirname "$1" )" && pwd )/$(basename $1)" -if [ ! -z $(echo $inp | awk -F'ww3_bounc\\..inp.' '{print $2}') ] ; then - new_inp=$(echo $(echo $inp | awk -F'ww3_bounc\\..inp.' '{print $1}')ww3_bounc_$(echo $inp | awk -F'ww3_bounc\\..inp.' '{print $2}').inp) - ln -sfn $inp $new_inp - old_inp=$inp - inp=$new_inp + +# check filename extension +ext=$(echo $inp | awk -F '.' '{print $NF}') +if [ "$(echo $ext)" != 'inp' ] ; then + echo "[ERROR] input file has no .inp extension. Please rename it before conversion" + exit 1 fi +# commented because it is not working in all cases +# link to temporary inp with regtest format +#ext=$(echo $inp | awk -F"${prog}.inp." '{print $2}' || awk -F"${prog}.inp_" '{print $2}') +#base=$(echo $inp | awk -F"${prog}\\..inp\\.." '{print $1}' | awk -F".inp.$ext" '{print $1}' || awk -F"${prog}\\..inp_" '{print $1}' | awk -F".inp_$ext" #'{print $1}') +#if [ ! -z $(echo $ext) ] ; then +# new_inp=${base}_${ext}.inp +# echo "link $inp to $new_inp" +# ln -sfn $inp $new_inp +# old_inp=$inp +# inp=$new_inp +#fi + cd $( dirname $inp) cur_dir="../$(basename $(dirname $inp))" @@ -33,7 +46,7 @@ fi #------------------------------ # clean up inp file from all $ lines -cleaninp="$cur_dir/ww3_bounc_clean.inp" +cleaninp="$cur_dir/${prog}_clean.inp" rm -f $cleaninp cat $inp | while read line @@ -141,18 +154,22 @@ if [ "$spec_filename" != "spec.list" ]; then echo " BOUND%FILE = '$spe cat >> $nmlfile << EOF / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! EOF echo "DONE : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile)" rm -f $cleaninp -if [ ! -z $(echo $old_inp | awk -F'ww3_bounc\\..inp\\..' '{print $2}') ] ; then - unlink $new_inp - addon="$(echo $(basename $nmlfile) | awk -F'ww3_bounc_' '{print $2}' | awk -F'\\..nml' '{print $1}' )" - new_nmlfile="ww3_bounc.nml.$addon" - mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) - echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" -fi + +# commented because it is not working in all cases +#if [ ! -z $(echo $ext) ] ; then +# unlink $new_inp +# addon="$(echo $(basename $nmlfile) | awk -F"${prog}_" '{print $2}' | awk -F'.nml' '{print $1}' )" +# new_nmlfile="${prog}.nml.$addon" +# mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) +# echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" +#fi + #------------------------------ + + diff --git a/model/aux/bash/ww3_grid_inp2nml.sh b/model/aux/bash/ww3_grid_inp2nml.sh index 34006cd8c..064a743c0 100755 --- a/model/aux/bash/ww3_grid_inp2nml.sh +++ b/model/aux/bash/ww3_grid_inp2nml.sh @@ -1,21 +1,34 @@ #!/bin/bash -e +prog="ww3_grid" if [ $# -ne 1 ] then - echo ' [ERROR] need ww3_grid input filename in argument [ww3_grid.inp]' + echo " [ERROR] need ${prog} input filename in argument [${prog}.inp]" exit 1 fi -# link to temporary inp with regtest format inp="$( cd "$( dirname "$1" )" && pwd )/$(basename $1)" -if [ ! -z $(echo $inp | awk -F'ww3_grid\\..inp.' '{print $2}') ] ; then - new_inp=$(echo $(echo $inp | awk -F'ww3_grid\\..inp\\..' '{print $1}')ww3_grid_$(echo $inp | awk -F'ww3_grid\\..inp\\..' '{print $2}').inp) - ln -sfn $inp $new_inp - old_inp=$inp - inp=$new_inp + +# check filename extension +ext=$(echo $inp | awk -F '.' '{print $NF}') +if [ "$(echo $ext)" != 'inp' ] ; then + echo "[ERROR] input file has no .inp extension. Please rename it before conversion" + exit 1 fi +# commented because it is not working in all cases +# link to temporary inp with regtest format +#ext=$(echo $inp | awk -F"${prog}.inp." '{print $2}' || awk -F"${prog}.inp_" '{print $2}') +#base=$(echo $inp | awk -F"${prog}\\..inp\\.." '{print $1}' | awk -F".inp.$ext" '{print $1}' || awk -F"${prog}\\..inp_" '{print $1}' | awk -F".inp_$ext" '{print $1}') +#if [ ! -z $(echo $ext) ] ; then +# new_inp=${base}_${ext}.inp +# echo "link $inp to $new_inp" +# ln -sfn $inp $new_inp +# old_inp=$inp +# inp=$new_inp +#fi + cd $( dirname $inp) cur_dir="../$(basename $(dirname $inp))" @@ -52,7 +65,7 @@ declare -A oulnnp #------------------------------ # clean up inp file from all $ lines -cleaninp="$cur_dir/ww3_grid_clean.inp" +cleaninp="$cur_dir/${prog}_clean.inp" rm -f $cleaninp cat $inp | while read line @@ -241,7 +254,7 @@ depth_format="$(echo ${lines[$il]} | awk -F' ' '{print $7}' | cut -d \" -f2 | c depth_from="$(echo ${lines[$il]} | awk -F' ' '{print $8}' | cut -d \" -f2 | cut -d \' -f2)" depth_filename="$(echo ${lines[$il]} | awk -F' ' '{print $9}' | cut -d \" -f2 | cut -d \' -f2)" echo 'depth : ' $depth_zlim $depth_dmin $depth_idf $depth_sf $depth_idla $depth_idfm $depth_format $depth_from $depth_filename -if [ "$depth_from" == 'UNIT' ] +if [ "$depth_from" == 'UNIT' ] || [ "$depth_idf" == '10' ] then foridepth=$cur_dir/${grdname}.depth fdepth=$cur_dir/${grdname}.depth.new @@ -355,7 +368,7 @@ then obst_format="$(echo ${lines[$il]} | awk -F' ' '{print $4}' | cut -d \" -f2 | cut -d \' -f2)" obst_filename="$(echo ${lines[$il]} | awk -F' ' '{print $5}' | cut -d \" -f2 | cut -d \' -f2)" echo 'smc obst : ' $obst_idf $obst_idla $obst_idfm $obst_format $obst_filename - if [ "$obst_from" == 'UNIT' ] + if [ "$obst_from" == 'UNIT' ] || [ "$obst_idf" == '10' ] then foriobst=$cur_dir/${grdname}.obst fobst=$cur_dir/${grdname}.obst.new @@ -521,7 +534,7 @@ then obst_from="$(echo ${lines[$il]} | awk -F' ' '{print $6}' | cut -d \" -f2 | cut -d \' -f2)" obst_filename="$(echo ${lines[$il]} | awk -F' ' '{print $7}' | cut -d \" -f2 | cut -d \' -f2)" echo 'obst : ' $obst_idf $obst_sf $obst_idla $obst_idfm $obst_format $obst_from $obst_filename - if [ "$obst_from" == 'UNIT' ] + if [ "$obst_from" == 'UNIT' ] || [ "$obst_idf" == '10' ] then foriobst=$cur_dir/${grdname}.obst fobst=$cur_dir/${grdname}.obst.new @@ -628,60 +641,63 @@ mask_format="$(echo ${lines[$il]} | awk -F' ' '{print $4}' | cut -d \" -f2 | cu mask_from="$(echo ${lines[$il]} | awk -F' ' '{print $5}' | cut -d \" -f2 | cut -d \' -f2)" mask_filename="$(echo ${lines[$il]} | awk -F' ' '{print $6}' | cut -d \" -f2 | cut -d \' -f2)" echo 'mask : ' $mask_idf $mask_idla $mask_idfm $mask_format $mask_from $mask_filename -if [ "$mask_from" == 'UNIT' ] +if [ "$mask_from" == 'UNIT' ] || [ "$mask_from" == 'NAME' ] then - forimask=$cur_dir/${grdname}.mask - fmask=$cur_dir/${grdname}.mask.new - mask_filename=$forimask - mask_from='NAME' - rm -f $fmask - num_total=0 - iread=0 - j=1 - # unfold the array - while [ $num_total -lt $num_max ]; do - il=$(($il+1)) - curline="$(echo ${lines[$il]} | sed -e 's/,/ /g')" - line_elem=$(echo $curline} | awk -F' ' '{print NF}') - for n_elem in $(seq 1 $line_elem); do - curelem=$(echo $curline | awk -F' ' "{print \$$n_elem}" | cut -d \" -f2 | cut -d \' -f2) - if [ ! -z "$(echo $curelem | grep '*')" ]; then - num_times=$(echo $curelem | awk -F'*' '{print $1}') - val_times=$(echo $curelem | awk -F'*' '{print $2}') - else - num_times=1 - val_times=$curelem - fi - num_total=$(($num_total + $num_times)) - for t in $(seq 1 $num_times); do - iread=$(($iread+1)) - mask2d[$iread,$j]="$val_times" -# echo -n "$val_times " >> $fmask - if [ $iread -ge $nx ]; then - iread=0 - j=$(($j+1)) -# echo '' >> $fmask + if [ "$mask_idf" == '10' ] + then + forimask=$cur_dir/${grdname}.mask + fmask=$cur_dir/${grdname}.mask.new + mask_filename=$forimask + mask_from='NAME' + rm -f $fmask + num_total=0 + iread=0 + j=1 + # unfold the array + while [ $num_total -lt $num_max ]; do + il=$(($il+1)) + curline="$(echo ${lines[$il]} | sed -e 's/,/ /g')" + line_elem=$(echo $curline} | awk -F' ' '{print NF}') + for n_elem in $(seq 1 $line_elem); do + curelem=$(echo $curline | awk -F' ' "{print \$$n_elem}" | cut -d \" -f2 | cut -d \' -f2) + if [ ! -z "$(echo $curelem | grep '*')" ]; then + num_times=$(echo $curelem | awk -F'*' '{print $1}') + val_times=$(echo $curelem | awk -F'*' '{print $2}') + else + num_times=1 + val_times=$curelem fi + num_total=$(($num_total + $num_times)) + for t in $(seq 1 $num_times); do + iread=$(($iread+1)) + mask2d[$iread,$j]="$val_times" +# echo -n "$val_times " >> $fmask + if [ $iread -ge $nx ]; then + iread=0 + j=$(($j+1)) +# echo '' >> $fmask + fi + done done + echo "${lines[$il]}" >> $fmask done - echo "${lines[$il]}" >> $fmask - done - # save file - if [ -f $forimask ] - then - if [ -z "$(diff $forimask $fmask)" ] + # save file + if [ -f $forimask ] then - echo $forimask ' and ' $fmask 'are same.' - echo 'delete ' $fmask - rm $fmask + if [ -z "$(diff $forimask $fmask)" ] + then + echo $forimask ' and ' $fmask 'are same.' + echo 'delete ' $fmask + rm $fmask + else + echo 'diff between :' $forimask ' and new file : ' $fmask + echo 'inp2nml conversion stopped' + exit 1 + fi else - echo 'diff between :' $forimask ' and new file : ' $fmask - echo 'inp2nml conversion stopped' - exit 1 + echo 'mv '$fmask ' to ' $forimask + mv $fmask $forimask fi - else - echo 'mv '$fmask ' to ' $forimask - mv $fmask $forimask fi elif [ "$mask_from" == 'PART' ] then @@ -709,7 +725,7 @@ then slope_from="$(echo ${lines[$il]} | awk -F' ' '{print $6}' | cut -d \" -f2 | cut -d \' -f2)" slope_filename="$(echo ${lines[$il]} | awk -F' ' '{print $7}' | cut -d \" -f2 | cut -d \' -f2)" echo 'slope : ' $slope_idf $slope_sf $slope_idla $slope_idfm $slope_format $slope_from $slope_filename - if [ "$slope_from" == 'UNIT' ] + if [ "$slope_from" == 'UNIT' ] || [ "$slope_idf" == '10' ] then forislope=$cur_dir/${grdname}.slope fslope=$cur_dir/${grdname}.slope.new @@ -851,7 +867,7 @@ then sed_from="$(echo ${lines[$il]} | awk -F' ' '{print $6}' | cut -d \" -f2 | cut -d \' -f2)" sed_filename="$(echo ${lines[$il]} | awk -F' ' '{print $7}' | cut -d \" -f2 | cut -d \' -f2)" echo 'sed : ' $sed_idf $sed_sf $sed_idla $sed_idfm $sed_format $sed_from $sed_filename - if [ "$sed_from" == 'UNIT' ] + if [ "$sed_from" == 'UNIT' ] || [ "$sed_idf" == '10' ] then forised=$cur_dir/${grdname}.sed fsed=$cur_dir/${grdname}.sed.new @@ -1984,13 +2000,15 @@ cat >> $nmlfile << EOF EOF echo "DONE : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile)" rm -f $cleaninp -if [ ! -z $(echo $old_inp | awk -F'ww3_grid\\..inp\\..' '{print $2}') ] ; then - unlink $new_inp - addon="$(echo $(basename $nmlfile) | awk -F'ww3_grid_' '{print $2}' | awk -F'\\..nml' '{print $1}' )" - new_nmlfile="ww3_grid.nml.$addon" - mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) - echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" -fi + +# commented because it is not working in all cases +#if [ ! -z $(echo $ext) ] ; then +# unlink $new_inp +# addon="$(echo $(basename $nmlfile) | awk -F"${prog}_" '{print $2}' | awk -F'.nml' '{print $1}' )" +# new_nmlfile="${prog}.nml.$addon" +# mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) +# echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" +#fi #------------------------------ diff --git a/model/aux/bash/ww3_multi_inp2nml.sh b/model/aux/bash/ww3_multi_inp2nml.sh index 927727cf4..fe2fc3842 100755 --- a/model/aux/bash/ww3_multi_inp2nml.sh +++ b/model/aux/bash/ww3_multi_inp2nml.sh @@ -1,21 +1,34 @@ #!/bin/bash -e +prog="ww3_multi" if [ $# -ne 1 ] then - echo ' [ERROR] need ww3_multi input filename in argument [ww3_multi.inp]' + echo " [ERROR] need ${prog} input filename in argument [${prog}.inp]" exit 1 fi -# link to temporary inp with regtest format inp="$( cd "$( dirname "$1" )" && pwd )/$(basename $1)" -if [ ! -z $(echo $inp | awk -F'ww3_multi\\..inp\\..' '{print $2}') ] ; then - new_inp=$(echo $(echo $inp | awk -F'ww3_multi\\..inp\\..' '{print $1}')ww3_multi_$(echo $inp | awk -F'ww3_multi\\..inp\\..' '{print $2}').inp) - ln -sfn $inp $new_inp - old_inp=$inp - inp=$new_inp + +# check filename extension +ext=$(echo $inp | awk -F '.' '{print $NF}') +if [ "$(echo $ext)" != 'inp' ] ; then + echo "[ERROR] input file has no .inp extension. Please rename it before conversion" + exit 1 fi +# commented because it is not working in all cases +# link to temporary inp with regtest format +#ext=$(echo $inp | awk -F"${prog}.inp." '{print $2}' || awk -F"${prog}.inp_" '{print $2}') +#base=$(echo $inp | awk -F"${prog}\\..inp\\.." '{print $1}' | awk -F".inp.$ext" '{print $1}' || awk -F"${prog}\\..inp_" '{print $1}' | awk -F".inp_$ext" '{print $1}') +#if [ ! -z $(echo $ext) ] ; then +# new_inp=${base}_${ext}.inp +# echo "link $inp to $new_inp" +# ln -sfn $inp $new_inp +# old_inp=$inp +# inp=$new_inp +#fi + cd $( dirname $inp) cur_dir="../$(basename $(dirname $inp))" @@ -48,13 +61,13 @@ declare -A homogmov #------------------------------ # clean up inp file from all $ lines -cleaninp="$cur_dir/ww3_multi_clean.inp" +cleaninp="$cur_dir/${prog}_clean.inp" rm -f $cleaninp cat $inp | while read line do - - if [ "$(echo $line | cut -c1)" = "$" ] + + if [ "$(echo $line | cut -c1)" = "$" ] then continue fi @@ -69,12 +82,13 @@ do done + + #------------------------------ # get all values from clean inp file readarray -t lines < "$cleaninp" il=0 - # model definition nrgrd="$(echo ${lines[$il]} | awk -F' ' '{print $1}' | cut -d \" -f2 | cut -d \' -f2)" @@ -348,13 +362,13 @@ do done if [ ${pointdates[$irgrd,3]} != 0 ] then - pointfiles[$irgrd]="points_${irgrd}.list" - rm -f $cur_dir/${pointfiles[$irgrd]} + pointfiles[$irgrd]="$cur_dir/points_${irgrd}.list" + rm -f ${pointfiles[$irgrd]} il=$(($il+1)) tmpname="$(echo ${lines[$il]} | awk -F' ' '{print $3}' | cut -d \" -f2 | cut -d \' -f2)" while [ "$tmpname" != "STOPSTRING" ] do - echo ${lines[$il]} >> $cur_dir/${pointfiles[$irgrd]} + echo ${lines[$il]} >> ${pointfiles[$irgrd]} il=$(($il+1)) tmpname="$(echo ${lines[$il]} | awk -F' ' '{print $3}' | cut -d \" -f2 | cut -d \' -f2)" done @@ -888,20 +902,21 @@ fi cat >> $nmlfile << EOF / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! EOF echo "DONE : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile)" rm -f $cleaninp -if [ ! -z $(echo $old_inp | awk -F'ww3_multi\\..inp\\..' '{print $2}') ] ; then - unlink $new_inp - addon="$(echo $(basename $nmlfile) | awk -F'ww3_multi_' '{print $2}' | awk -F'\\..nml' '{print $1}' )" - new_nmlfile="ww3_multi.nml.$addon" - mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) - echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" -fi + +# commented because it is not working in all cases +#if [ ! -z $(echo $ext) ] ; then +# unlink $new_inp +# addon="$(echo $(basename $nmlfile) | awk -F"${prog}_" '{print $2}' | awk -F'.nml' '{print $1}' )" +# new_nmlfile="${prog}.nml.$addon" +# mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) +# echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" +#fi #------------------------------ diff --git a/model/aux/bash/ww3_ounf_inp2nml.sh b/model/aux/bash/ww3_ounf_inp2nml.sh index db64c24e9..560a4f964 100755 --- a/model/aux/bash/ww3_ounf_inp2nml.sh +++ b/model/aux/bash/ww3_ounf_inp2nml.sh @@ -1,21 +1,34 @@ #!/bin/bash -e +prog="ww3_ounf" if [ $# -ne 1 ] then - echo ' [ERROR] need ww3_ounf input filename in argument [ww3_ounf.inp]' + echo " [ERROR] need ${prog} input filename in argument [${prog}.inp]" exit 1 fi -# link to temporary inp with regtest format inp="$( cd "$( dirname "$1" )" && pwd )/$(basename $1)" -if [ ! -z $(echo $inp | awk -F'ww3_ounf\\..inp\\..' '{print $2}') ] ; then - new_inp=$(echo $(echo $inp | awk -F'ww3_ounf\\..inp\\..' '{print $1}')ww3_ounf_$(echo $inp | awk -F'ww3_ounf\\..inp\\..' '{print $2}').inp) - ln -sfn $inp $new_inp - old_inp=$inp - inp=$new_inp + +# check filename extension +ext=$(echo $inp | awk -F '.' '{print $NF}') +if [ "$(echo $ext)" != 'inp' ] ; then + echo "[ERROR] input file has no .inp extension. Please rename it before conversion" + exit 1 fi +# commented because it is not working in all cases +# link to temporary inp with regtest format +#ext=$(echo $inp | awk -F"${prog}.inp." '{print $2}' || awk -F"${prog}.inp_" '{print $2}') +#base=$(echo $inp | awk -F"${prog}\\..inp\\.." '{print $1}' | awk -F".inp.$ext" '{print $1}' || awk -F"${prog}\\..inp_" '{print $1}' | awk -F".inp_$ext" '{print $1}') +#if [ ! -z $(echo $ext) ] ; then +# new_inp=${base}_${ext}.inp +# echo "link $inp to $new_inp" +# ln -sfn $inp $new_inp +# old_inp=$inp +# inp=$new_inp +#fi + cd $( dirname $inp) cur_dir="../$(basename $(dirname $inp))" @@ -33,7 +46,7 @@ fi #------------------------------ # clean up inp file from all $ lines -cleaninp="$cur_dir/ww3_ounf_clean.inp" +cleaninp="$cur_dir/${prog}_clean.inp" rm -f $cleaninp cat $inp | while read line @@ -282,11 +295,15 @@ cat >> $nmlfile << EOF EOF echo "DONE : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile)" rm -f $cleaninp -if [ ! -z $(echo $old_inp | awk -F'ww3_ounf\\..inp\\..' '{print $2}') ] ; then - unlink $new_inp - addon="$(echo $(basename $nmlfile) | awk -F'ww3_ounf_' '{print $2}' | awk -F'\\..nml' '{print $1}' )" - new_nmlfile="ww3_ounf.nml.$addon" - mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) - echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" -fi + +# commented because it is not working in all cases +#if [ ! -z $(echo $ext) ] ; then +# unlink $new_inp +# addon="$(echo $(basename $nmlfile) | awk -F"${prog}_" '{print $2}' | awk -F'.nml' '{print $1}' )" +# new_nmlfile="${prog}.nml.$addon" +# mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) +# echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" +#fi #------------------------------ + + diff --git a/model/aux/bash/ww3_ounp_inp2nml.sh b/model/aux/bash/ww3_ounp_inp2nml.sh index d7afc2a70..1b6109ca9 100755 --- a/model/aux/bash/ww3_ounp_inp2nml.sh +++ b/model/aux/bash/ww3_ounp_inp2nml.sh @@ -1,21 +1,34 @@ #!/bin/bash -e +prog="ww3_ounp" if [ $# -ne 1 ] then - echo ' [ERROR] need ww3_ounp input filename in argument [ww3_ounp.inp]' + echo " [ERROR] need ${prog} input filename in argument [${prog}.inp]" exit 1 fi -# link to temporary inp with regtest format inp="$( cd "$( dirname "$1" )" && pwd )/$(basename $1)" -if [ ! -z $(echo $inp | awk -F'ww3_ounp\\..inp\\..' '{print $2}') ] ; then - new_inp=$(echo $(echo $inp | awk -F'ww3_ounp\\..inp\\..' '{print $1}')ww3_ounp_$(echo $inp | awk -F'ww3_ounp\\..inp\\..' '{print $2}').inp) - ln -sfn $inp $new_inp - old_inp=$inp - inp=$new_inp + +# check filename extension +ext=$(echo $inp | awk -F '.' '{print $NF}') +if [ "$(echo $ext)" != 'inp' ] ; then + echo "[ERROR] input file has no .inp extension. Please rename it before conversion" + exit 1 fi +# commented because it is not working in all cases +# link to temporary inp with regtest format +#ext=$(echo $inp | awk -F"${prog}.inp." '{print $2}' || awk -F"${prog}.inp_" '{print $2}') +#base=$(echo $inp | awk -F"${prog}\\..inp\\.." '{print $1}' | awk -F".inp.$ext" '{print $1}' || awk -F"${prog}\\..inp_" '{print $1}' | awk -F".inp_$ext" '{print $1}') +#if [ ! -z $(echo $ext) ] ; then +# new_inp=${base}_${ext}.inp +# echo "link $inp to $new_inp" +# ln -sfn $inp $new_inp +# old_inp=$inp +# inp=$new_inp +#fi + cd $( dirname $inp) cur_dir="../$(basename $(dirname $inp))" @@ -33,7 +46,7 @@ fi #------------------------------ # clean up inp file from all $ lines -cleaninp="$cur_dir/ww3_ounp_clean.inp" +cleaninp="$cur_dir/${prog}_clean.inp" rm -f $cleaninp cat $inp | while read line @@ -435,11 +448,15 @@ cat >> $nmlfile << EOF EOF echo "DONE : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile)" rm -f $cleaninp -if [ ! -z $(echo $old_inp | awk -F'ww3_ounp\\..inp\\..' '{print $2}') ] ; then - unlink $new_inp - addon="$(echo $(basename $nmlfile) | awk -F'ww3_ounp_' '{print $2}' | awk -F'\\..nml' '{print $1}' )" - new_nmlfile="ww3_ounp.nml.$addon" - mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) - echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" -fi + +# commented because it is not working in all cases +#if [ ! -z $(echo $ext) ] ; then +# unlink $new_inp +# addon="$(echo $(basename $nmlfile) | awk -F"${prog}_" '{print $2}' | awk -F'.nml' '{print $1}' )" +# new_nmlfile="${prog}.nml.$addon" +# mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) +# echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" +#fi #------------------------------ + + diff --git a/model/aux/bash/ww3_prnc_inp2nml.sh b/model/aux/bash/ww3_prnc_inp2nml.sh index 6c89a6fc7..801b79048 100755 --- a/model/aux/bash/ww3_prnc_inp2nml.sh +++ b/model/aux/bash/ww3_prnc_inp2nml.sh @@ -1,21 +1,34 @@ #!/bin/bash -e +prog="ww3_prnc" if [ $# -ne 1 ] then - echo ' [ERROR] need ww3_prnc input filename in argument [ww3_prnc.inp]' + echo " [ERROR] need ${prog} input filename in argument [${prog}.inp]" exit 1 fi -# link to temporary inp with regtest format inp="$( cd "$( dirname "$1" )" && pwd )/$(basename $1)" -if [ ! -z $(echo $inp | awk -F'ww3_prnc\\..inp\\..' '{print $2}') ] ; then - new_inp=$(echo $(echo $inp | awk -F'ww3_prnc\\..inp\\..' '{print $1}')ww3_prnc_$(echo $inp | awk -F'ww3_prnc\\..inp\\..' '{print $2}').inp) - ln -sfn $inp $new_inp - old_inp=$inp - inp=$new_inp + +# check filename extension +ext=$(echo $inp | awk -F '.' '{print $NF}') +if [ "$(echo $ext)" != 'inp' ] ; then + echo "[ERROR] input file has no .inp extension. Please rename it before conversion" + exit 1 fi +# commented because it is not working in all cases +# link to temporary inp with regtest format +#ext=$(echo $inp | awk -F"${prog}.inp." '{print $2}' || awk -F"${prog}.inp_" '{print $2}') +#base=$(echo $inp | awk -F"${prog}\\..inp\\.." '{print $1}' | awk -F".inp.$ext" '{print $1}' || awk -F"${prog}\\..inp_" '{print $1}' | awk -F".inp_$ext" '{print $1}') +#if [ ! -z $(echo $ext) ] ; then +# new_inp=${base}_${ext}.inp +# echo "link $inp to $new_inp" +# ln -sfn $inp $new_inp +# old_inp=$inp +# inp=$new_inp +#fi + cd $( dirname $inp) cur_dir="../$(basename $(dirname $inp))" @@ -35,7 +48,7 @@ declare -A var #------------------------------ # clean up inp file from all $ lines -cleaninp="$cur_dir/ww3_prnc_clean.inp" +cleaninp="$cur_dir/${prog}_clean.inp" rm -f $cleaninp cat $inp | while read line @@ -236,7 +249,6 @@ do done - cat >> $nmlfile << EOF / @@ -246,11 +258,15 @@ cat >> $nmlfile << EOF EOF echo "DONE : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile)" rm -f $cleaninp -if [ ! -z $(echo $old_inp | awk -F'ww3_prnc\\..inp\\..' '{print $2}') ] ; then - unlink $new_inp - addon="$(echo $(basename $nmlfile) | awk -F'ww3_prnc_' '{print $2}' | awk -F'\\..nml' '{print $1}' )" - new_nmlfile="ww3_prnc.nml.$addon" - mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) - echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" -fi + +# commented because it is not working in all cases +#if [ ! -z $(echo $ext) ] ; then +# unlink $new_inp +# addon="$(echo $(basename $nmlfile) | awk -F"${prog}_" '{print $2}' | awk -F'.nml' '{print $1}' )" +# new_nmlfile="${prog}.nml.$addon" +# mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) +# echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" +#fi #------------------------------ + + diff --git a/model/aux/bash/ww3_shel_inp2nml.sh b/model/aux/bash/ww3_shel_inp2nml.sh index 1710a88bb..45ab0d1e0 100755 --- a/model/aux/bash/ww3_shel_inp2nml.sh +++ b/model/aux/bash/ww3_shel_inp2nml.sh @@ -1,21 +1,34 @@ #!/bin/bash -e +prog="ww3_shel" if [ $# -ne 1 ] then - echo ' [ERROR] need ww3_shel input filename in argument [ww3_shel.inp]' + echo " [ERROR] need ${prog} input filename in argument [${prog}.inp]" exit 1 fi -# link to temporary inp with regtest format inp="$( cd "$( dirname "$1" )" && pwd )/$(basename $1)" -if [ ! -z $(echo $inp | awk -F'ww3_shel\\..inp\\..' '{print $2}') ] ; then - new_inp=$(echo $(echo $inp | awk -F'ww3_shel\\..inp\\..' '{print $1}')ww3_shel_$(echo $inp | awk -F'ww3_shel\\..inp\\..' '{print $2}').inp) - ln -sfn $inp $new_inp - old_inp=$inp - inp=$new_inp + +# check filename extension +ext=$(echo $inp | awk -F '.' '{print $NF}') +if [ "$(echo $ext)" != 'inp' ] ; then + echo "[ERROR] input file has no .inp extension. Please rename it before conversion" + exit 1 fi +# commented because it is not working in all cases +# link to temporary inp with regtest format +#ext=$(echo $inp | awk -F"${prog}.inp." '{print $2}' || awk -F"${prog}.inp_" '{print $2}') +#base=$(echo $inp | awk -F"${prog}\\..inp\\.." '{print $1}' | awk -F".inp.$ext" '{print $1}' || awk -F"${prog}\\..inp_" '{print $1}' | awk -F".inp_$ext" '{print $1}') +#if [ ! -z $(echo $ext) ] ; then +# new_inp=${base}_${ext}.inp +# echo "link $inp to $new_inp" +# ln -sfn $inp $new_inp +# old_inp=$inp +# inp=$new_inp +#fi + cd $( dirname $inp) cur_dir="../$(basename $(dirname $inp))" @@ -61,13 +74,13 @@ declare -A homogmov #------------------------------ # clean up inp file from all $ lines -cleaninp="$cur_dir/ww3_shel_clean.inp" +cleaninp="$cur_dir/${prog}_clean.inp" rm -f $cleaninp cat $inp | while read line do - if [ "$(echo $line | cut -c1)" = "$" ] + if [ "$(echo $line | cut -c1)" = "$" ] then continue fi @@ -1253,11 +1266,15 @@ cat >> $nmlfile << EOF EOF echo "DONE : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile)" rm -f $cleaninp -if [ ! -z $(echo $old_inp | awk -F'ww3_shel\\..inp\\..' '{print $2}') ] ; then - unlink $new_inp - addon="$(echo $(basename $nmlfile) | awk -F'ww3_shel_' '{print $2}' | awk -F'\\..nml' '{print $1}' )" - new_nmlfile="ww3_shel.nml.$addon" - mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) - echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" -fi + +# commented because it is not working in all cases +#if [ ! -z $(echo $ext) ] ; then +# unlink $new_inp +# addon="$(echo $(basename $nmlfile) | awk -F"${prog}_" '{print $2}' | awk -F'.nml' '{print $1}' )" +# new_nmlfile="${prog}.nml.$addon" +# mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) +# echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" +#fi #------------------------------ + + diff --git a/model/aux/bash/ww3_trnc_inp2nml.sh b/model/aux/bash/ww3_trnc_inp2nml.sh index ee229e8c1..df283e171 100755 --- a/model/aux/bash/ww3_trnc_inp2nml.sh +++ b/model/aux/bash/ww3_trnc_inp2nml.sh @@ -1,21 +1,34 @@ #!/bin/bash -e +prog="ww3_trnc" if [ $# -ne 1 ] then - echo ' [ERROR] need ww3_trnc input filename in argument [ww3_trnc.inp]' + echo " [ERROR] need ${prog} input filename in argument [${prog}.inp]" exit 1 fi -# link to temporary inp with regtest format inp="$( cd "$( dirname "$1" )" && pwd )/$(basename $1)" -if [ ! -z $(echo $inp | awk -F'ww3_trnc\\..inp\\..' '{print $2}') ] ; then - new_inp=$(echo $(echo $inp | awk -F'ww3_trnc\\..inp\\..' '{print $1}')ww3_trnc_$(echo $inp | awk -F'ww3_trnc\\..inp\\..' '{print $2}').inp) - ln -sfn $inp $new_inp - old_inp=$inp - inp=$new_inp + +# check filename extension +ext=$(echo $inp | awk -F '.' '{print $NF}') +if [ "$(echo $ext)" != 'inp' ] ; then + echo "[ERROR] input file has no .inp extension. Please rename it before conversion" + exit 1 fi +# commented because it is not working in all cases +# link to temporary inp with regtest format +#ext=$(echo $inp | awk -F"${prog}.inp." '{print $2}' || awk -F"${prog}.inp_" '{print $2}') +#base=$(echo $inp | awk -F"${prog}\\..inp\\.." '{print $1}' | awk -F".inp.$ext" '{print $1}' || awk -F"${prog}\\..inp_" '{print $1}' | awk -F".inp_$ext" '{print $1}') +#if [ ! -z $(echo $ext) ] ; then +# new_inp=${base}_${ext}.inp +# echo "link $inp to $new_inp" +# ln -sfn $inp $new_inp +# old_inp=$inp +# inp=$new_inp +#fi + cd $( dirname $inp) cur_dir="../$(basename $(dirname $inp))" @@ -33,7 +46,7 @@ fi #------------------------------ # clean up inp file from all $ lines -cleaninp="$cur_dir/ww3_trnc_clean.inp" +cleaninp="$cur_dir/${prog}_clean.inp" rm -f $cleaninp cat $inp | while read line @@ -146,11 +159,15 @@ cat >> $nmlfile << EOF EOF echo "DONE : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile)" rm -f $cleaninp -if [ ! -z $(echo $old_inp | awk -F'ww3_trnc\\..inp\\..' '{print $2}') ] ; then - unlink $new_inp - addon="$(echo $(basename $nmlfile) | awk -F'ww3_trnc_' '{print $2}' | awk -F'\\..nml' '{print $1}' )" - new_nmlfile="ww3_trnc.nml.$addon" - mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) - echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" -fi + +# link to temporary inp with regtest format +#if [ ! -z $(echo $ext) ] ; then +# unlink $new_inp +# addon="$(echo $(basename $nmlfile) | awk -F"${prog}_" '{print $2}' | awk -F'.nml' '{print $1}' )" +# new_nmlfile="${prog}.nml.$addon" +# mv $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $nmlfile) $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile) +# echo "RENAMED : $( cd "$( dirname "$nmlfile" )" && pwd )/$(basename $new_nmlfile)" +#fi #------------------------------ + + diff --git a/model/ftn/w3adatmd.ftn b/model/ftn/w3adatmd.ftn index 8fd6fa3b9..1c1d5a208 100644 --- a/model/ftn/w3adatmd.ftn +++ b/model/ftn/w3adatmd.ftn @@ -720,6 +720,9 @@ WADATS(I)%ITIME = 0 WADATS(I)%IPASS = 0 WADATS(I)%IDLAST = 0 + WADATS(I)%NSEALM = 0 + WADATS(I)%FLCOLD = .FALSE. + WADATS(I)%FLIWND = .FALSE. WADATS(I)%AINIT = .FALSE. WADATS(I)%AINIT2 = .FALSE. WADATS(I)%FL_ALL = .FALSE. diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 787b7be70..f5e8df06c 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -401,7 +401,7 @@ IF ( OUT_NAMES(IFJ) .EQ. 'T' ) & FLG2D(IFI,IFJ)=.TRUE. ENDDO - IF (IFJ .LT. NOGE(IFI)) WRITE(NDSEN,1007) IFI + IF ( IAPROC .EQ. NAPOUT .AND. IFJ .LT. NOGE(IFI) ) WRITE(NDSEN,1007) IFI ENDIF END DO ! @@ -590,7 +590,7 @@ IF (US3DF(1).GE.1) THEN FLG2D(6,8)=.TRUE. ELSE - WRITE(NDSEN,1008) 'USF','US3D' + IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USF','US3D' END IF CASE('P2L') FLG2D(6,9)=.TRUE. @@ -602,7 +602,7 @@ IF (USSPF(1).GE.1) THEN FLG2D(6,12)=.TRUE. ELSE - WRITE(NDSEN,1008) 'USP','USSP' + IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USP','USSP' END IF ! ! Group 7 @@ -1010,7 +1010,7 @@ IF (US3DF(1).GE.1) THEN FLG2D(6,8)=.TRUE. ELSE - WRITE(NDSEN,1008) 'USF','US3D' + IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USF','US3D' END IF CASE('P2L') FLG2D(6,9)=.TRUE. @@ -1022,7 +1022,7 @@ IF (USSPF(1).GE.1) THEN FLG2D(6,12)=.TRUE. ELSE - WRITE(NDSEN,1008) 'USP','USSP' + IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USP','USSP' END IF ! diff --git a/model/ftn/w3timemd.ftn b/model/ftn/w3timemd.ftn index aac99f21a..e5760264b 100644 --- a/model/ftn/w3timemd.ftn +++ b/model/ftn/w3timemd.ftn @@ -1590,12 +1590,12 @@ DAT(8) = 0 ! force milliseconds to 0 READ(UNITS(20:20),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(2) READ(UNITS(22:22),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(3) ! seconds since YYYY-M-D h:m:s - IF (INDEX(UNITS, ":", .TRUE.).EQ.25) THEN + IF (INDEX(UNITS, ":", .FALSE.).EQ.25) THEN READ(UNITS(24:24),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(5) READ(UNITS(26:26),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(6) READ(UNITS(28:28),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(7) ! seconds since YYYY-M-D hh:mm:ss - ELSE IF (INDEX(UNITS, ":", .TRUE.).EQ.26) THEN + ELSE IF (INDEX(UNITS, ":", .FALSE.).EQ.26) THEN READ(UNITS(24:25),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(5) READ(UNITS(27:28),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(6) READ(UNITS(30:31),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(7) @@ -1622,12 +1622,12 @@ DAT(8) = 0 ! force milliseconds to 0 READ(UNITS(17:17),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(2) READ(UNITS(19:19),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(3) ! days since YYYY-M-D h:m:s - IF (INDEX(UNITS, ":", .TRUE.).EQ.22) THEN + IF (INDEX(UNITS, ":", .FALSE.).EQ.22) THEN READ(UNITS(21:21),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(5) READ(UNITS(23:23),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(6) READ(UNITS(25:25),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(7) ! days since YYYY-M-D hh:mm:ss - ELSE IF (INDEX(UNITS, ":", .TRUE.).EQ.23) THEN + ELSE IF (INDEX(UNITS, ":", .FALSE.).EQ.23) THEN READ(UNITS(21:22),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(5) READ(UNITS(24:25),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(6) READ(UNITS(27:28),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(7) @@ -1654,12 +1654,12 @@ DAT(8) = 0 ! force milliseconds to 0 READ(UNITS(18:18),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(2) READ(UNITS(20:20),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(3) ! hours since YYYY-M-D h:m:s - IF (INDEX(UNITS, ":", .TRUE.).EQ.23) THEN + IF (INDEX(UNITS, ":", .FALSE.).EQ.23) THEN READ(UNITS(22:22),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(5) READ(UNITS(24:24),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(6) READ(UNITS(26:26),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(7) ! hours since YYYY-M-D hh:mm:ss - ELSE IF (INDEX(UNITS, ":", .TRUE.).EQ.24) THEN + ELSE IF (INDEX(UNITS, ":", .FALSE.).EQ.24) THEN READ(UNITS(22:23),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(5) READ(UNITS(25:26),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(6) READ(UNITS(28:29),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(7) @@ -1686,12 +1686,12 @@ DAT(8) = 0 ! force milliseconds to 0 READ(UNITS(20:20),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(2) READ(UNITS(22:22),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(3) ! minutes since YYYY-M-D h:m:s - IF (INDEX(UNITS, ":", .TRUE.).EQ.25) THEN + IF (INDEX(UNITS, ":", .FALSE.).EQ.25) THEN READ(UNITS(24:24),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(5) READ(UNITS(26:26),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(6) READ(UNITS(28:28),'(I1.1)',END=804,ERR=805,IOSTAT=IERR) DAT(7) ! minutes since YYYY-M-D hh:mm:ss - ELSE IF (INDEX(UNITS, ":", .TRUE.).EQ.26) THEN + ELSE IF (INDEX(UNITS, ":", .FALSE.).EQ.26) THEN READ(UNITS(24:25),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(5) READ(UNITS(27:28),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(6) READ(UNITS(30:31),'(I2.2)',END=804,ERR=805,IOSTAT=IERR) DAT(7) diff --git a/model/ftn/wmgridmd.ftn b/model/ftn/wmgridmd.ftn index 004ab32cf..0a93386f2 100644 --- a/model/ftn/wmgridmd.ftn +++ b/model/ftn/wmgridmd.ftn @@ -3245,8 +3245,8 @@ ' GRDHGH NOT YET ALLOCATED, CALL WMGLOW FIRST'/) 1020 FORMAT (/' *** WAVEWATCH III ERROR IN WMGHGH : *** '/ & ' TMPINT AND TMPRL TOO SMALL (w/out SCRIP)'/) - 1021 FORMAT (/' *** WAVEWATCH III ERROR IN WMGHGH : *** '/ & - ' TMPINT AND TMPRL TOO SMALL (w/SCRIP) '/) +!/SCRIP 1021 FORMAT (/' *** WAVEWATCH III ERROR IN WMGHGH : *** '/ & +!/SCRIP ' TMPINT AND TMPRL TOO SMALL (w/SCRIP) '/) ! !/T 9010 FORMAT ( ' TEST WMGHGH : INITIALIZE BOUNDARY DISTANCE MAPS') !/T 9011 FORMAT ( ' GRID = ',I3,' RANK = ',I3, & diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 6b22d97b5..3624ce92e 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -4876,7 +4876,8 @@ ! ILOOP = 2 to fill data arrays ! WRITE (NDSO,990) - OPEN (NDSS,FILE=TRIM(FNMPRE)//'ww3_grid.scratch',FORM='FORMATTED') + IF ( .NOT. FLGNML ) & + OPEN (NDSS,FILE=TRIM(FNMPRE)//'ww3_grid.scratch',FORM='FORMATTED') ! DO ILOOP = 1, 2 ! @@ -4888,11 +4889,13 @@ NBO(0) = 0 NBO2(0)= 0 FIRST = .TRUE. - REWIND (NDSS) - IF ( ILOOP .EQ. 1 ) THEN - NDSI2 = NDSI - ELSE - NDSI2 = NDSS + IF ( .NOT. FLGNML ) THEN + REWIND (NDSS) + IF ( ILOOP .EQ. 1 ) THEN + NDSI2 = NDSI + ELSE + NDSI2 = NDSS + END IF END IF ! DO @@ -4906,21 +4909,17 @@ NPO = NML_OUTBND_LINE(I)%NP I=I+1 ELSE - EXIT + NPO=0 END IF ELSE CALL NEXTLN ( COMSTR , NDSI2 , NDSE ) READ (NDSI2,*,END=2001,ERR=2002) XO0, YO0, DXO, DYO, NPO END IF ! - IF ( ILOOP .EQ. 1 ) THEN - IF (FLGNML) THEN - WRITE(NDSS,'(A)') NML_OUTBND_LINE(I-1) - ELSE - BACKSPACE (NDSI) - READ (NDSI,'(A)') LINE - WRITE (NDSS,'(A)') LINE - END IF + IF ( .NOT. FLGNML .AND. ILOOP .EQ. 1 ) THEN + BACKSPACE (NDSI) + READ (NDSI,'(A)') LINE + WRITE (NDSS,'(A)') LINE END IF ! ! ... Check if new file to be used @@ -5109,7 +5108,7 @@ ! END DO ! - CLOSE ( NDSS, STATUS='DELETE' ) + IF ( .NOT. FLGNML ) CLOSE ( NDSS, STATUS='DELETE' ) ! FLBPO = NBOTOT .GT. 0 IF ( .NOT. FLBPO ) THEN diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index 1b465caaa..5c965ef06 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -35,7 +35,7 @@ # 1. Set up # 1.a Computer/ user dependent set up - echo '#!/bin/sh' > matrix.head + echo '#!/bin/bash' > matrix.head echo ' ' >> matrix.head echo '#PBS -q mpi_2' >> matrix.head echo '#PBS -l mem=20G' >> matrix.head @@ -50,34 +50,46 @@ # Netcdf modules - comp="mpt" - echo ' source /etc/profile.d/modules.sh' >> matrix.head - echo ' module purge' >> matrix.head - if [ $comp = "mpi" ] + comp="datarmor_mpt_debug" + + echo ' source /usr/share/Modules/3.2.10/init/bash' >> matrix.head + echo ' module purge' >> matrix.head + echo ' export WWATCH3_NETCDF=NC4' >> matrix.head + echo " export WW3_PARCOMPN=4" >> matrix.head + + if [ $comp = "datarmor_intel_debug" ] then - echo ' module load NETCDF/4.3.3.1-impi5-intel2016' >> matrix.head - elif [ $comp = "mpt" ] + echo ' module load intel-comp/18' >> matrix.head + echo ' module load impi/2018.1.163' >> matrix.head + echo ' export PATH=/home/datawork-wave/NETCDF-FINAL/INTEL/bin::${PATH}' >> matrix.head + echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/INTEL/bin/nf-config'>> matrix.head + echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/INTEL' >> matrix.head + + elif [ $comp = "datarmor_mpt_debug" ] then - #echo ' module load NETCDF/4.3.3.1-mpt-intel2016' >> matrix.head - echo ' export PATH=/home/datawork-wave/NETCDF/MPT/bin::${PATH}' >> matrix.head - echo ' source /usr/share/Modules/3.2.10/init/sh' >> matrix.head - echo ' module purge' >> matrix.head - echo ' module load intel-comp/18' >> matrix.head - echo ' module load mpt/2.15' >> matrix.head - echo ' module list' >> matrix.head - echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF/MPT/bin/nf-config' >> matrix.head - echo ' export WWATCH3_NETCDF=NC4' >> matrix.head - echo ' export MPI_LAUNCH=mpiexec_mpt' >> matrix.head - echo " export WW3_PARCOMPN=4" >> matrix.head - - elif [ $comp = "gfortran" ] + echo ' module load intel-comp/18' >> matrix.head + echo ' module load mpt/2.15' >> matrix.head + echo ' export PATH=/home/datawork-wave/NETCDF-FINAL/MPT/bin::${PATH}' >> matrix.head + echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/MPT/bin/nf-config' >> matrix.head + echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/MPT' >> matrix.head + + elif [ $comp = "datarmor_gnu_debug" ] then - echo ' module load NetCDF/4.4.1.1__gcc-6.3.0__nop' >> matrix.head + echo ' module load impi/2018.1.163' >> matrix.head + echo ' export PATH=/home/datawork-wave/NETCDF-FINAL/GNU/bin::${PATH}' >> matrix.head + echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/GNU/bin/nf-config' >> matrix.head + echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/GNU' >> matrix.head + + elif [ $comp = "datarmor_pgi_debug" ] + then + echo ' module load pgi/17.10' >> matrix.head + echo ' module load mpt/2.17' >> matrix.head + echo ' export PATH=/home/datawork-wave/NETCDF-FINAL/PGI/bin::${PATH}' >> matrix.head + echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/PGI/bin/nf-config' >> matrix.head + echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/PGI' >> matrix.head + fi -# PARMETIS - echo " export METIS_PATH=/appli/parmetis/4.0.3-intel-cc-17.0.2.174" >> matrix.head - echo " export WW3_PARCOMPN=4" >> matrix.head echo ' ' # Compiler option. Choose appropriate compiler and set cmplOption to @@ -93,9 +105,9 @@ if [ "$cmplOption" = 'y' ] then - export rtst="./bin/run_test -o both -N -f -c $cmplr -S" + export rtst="./bin/run_test -o both -N -f -S -T -c $cmplr" else - export rtst="./bin/run_test -o both -N -f -S" + export rtst="./bin/run_test -o both -N -f -S -T" fi export ww3='../model' @@ -115,12 +127,13 @@ export hur1mg='y' # Hurricane with one moving grid export shwtr='y' # shallow water tests export unstr='y' # unstructured grid tests - export pdlib='y' # unstructured grid tests with pdlib for domain decomposition and implicit solver + export pdlib='y' # unstr with pdlib for domain decomposition and implicit solver export smcgr='y' # SMC/Rotated grid test export mudice='y' # Mud/Ice and wave interaction tests export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update + export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) export multi03='y' # mww3_test_03 (three high and three low res grids). @@ -129,6 +142,7 @@ export multi06='y' # mww3_test_06 (curvilinear grid tests) export multi07='y' # mww3_test_07 (unstructured grid tests) export multi08='y' # mww3_test_08 (wind and ice tests) + # export filter='PR3 ST2 UQ' # The filter does a set of consecutinve greps on the # command lines generated by filter.base with the above diff --git a/regtests/bin/run_test b/regtests/bin/run_test index fc1008481..3f8d83ac8 100755 --- a/regtests/bin/run_test +++ b/regtests/bin/run_test @@ -133,6 +133,7 @@ inpdir=input outopt=native grads=0 coupl=none +batchq=none while : do case "$1" in diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_02/input/ww3_multi_grdset_a.nml index 53c3d0394..dc7ee3b72 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_a.nml @@ -232,7 +232,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_b.nml b/regtests/mww3_test_02/input/ww3_multi_grdset_b.nml index c4d8d1ba4..59ba019a9 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_b.nml +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_b.nml @@ -230,7 +230,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_c.nml b/regtests/mww3_test_02/input/ww3_multi_grdset_c.nml index ec474d64d..d7141a1b8 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_c.nml +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_c.nml @@ -230,7 +230,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_02/input/ww3_multi_grdset_d.nml index d9a7efc98..c42e60a63 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_d.nml @@ -230,7 +230,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_a.nml index 67e290262..bac57edb3 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_a.nml @@ -234,7 +234,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_b.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_b.nml index 038e62f9b..a0ba92328 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_b.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_b.nml @@ -235,7 +235,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_c.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_c.nml index a0a6840da..55ade60b8 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_c.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_c.nml @@ -235,7 +235,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_d.nml index d0dd87e47..a005b051c 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_d.nml @@ -240,7 +240,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml index 4688b7c10..cbaceca6f 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml @@ -246,7 +246,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_e.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_e.nml index 584e8da75..3091a916b 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_e.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_e.nml @@ -235,7 +235,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_a.nml index c792e5ff1..b553fbe3b 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_a.nml @@ -162,8 +162,8 @@ ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML ALLTYPE%FIELD%LIST = 'DPT CUR HS FP DP DIR SPR' - ITYPE(2)%POINT%FILE = 'points_2.list' - ITYPE(3)%POINT%FILE = 'points_3.list' + ITYPE(2)%POINT%FILE = '../input/points_2.list' + ITYPE(3)%POINT%FILE = '../input/points_3.list' / ! -------------------------------------------------------------------- ! @@ -235,7 +235,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_b.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_b.nml index b3dc74306..90309e026 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_b.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_b.nml @@ -235,7 +235,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_c.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_c.nml index afd96e5ce..1e127b0a6 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_c.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_c.nml @@ -233,7 +233,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml index df5e1f663..3a8b96db2 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml @@ -236,7 +236,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_e.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_e.nml index 28de7e4e8..5aa8abbf9 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_e.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_e.nml @@ -235,7 +235,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_f.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_f.nml index 4e3919103..c9641e31b 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_f.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_f.nml @@ -235,7 +235,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_g.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_g.nml index 37184b388..1afd949ea 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_g.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_g.nml @@ -234,7 +234,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_a.nml index 42519a548..73aacabba 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_a.nml @@ -245,7 +245,6 @@ HOMOG_INPUT(1)%VALUE2 = 90. / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_b.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_b.nml index 843d312bc..033906d0a 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_b.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_b.nml @@ -240,7 +240,6 @@ HOMOG_INPUT(1)%VALUE2 = 90. / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_c.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_c.nml index 82f893263..1abd0f257 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_c.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_c.nml @@ -240,7 +240,6 @@ HOMOG_INPUT(1)%VALUE2 = 90. / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_d.nml index ec677da74..064343568 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_d.nml @@ -240,7 +240,6 @@ HOMOG_INPUT(1)%VALUE2 = 90. / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_e.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_e.nml index 4a7fd4504..c94a9c9fa 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_e.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_e.nml @@ -240,7 +240,6 @@ HOMOG_INPUT(1)%VALUE2 = 90. / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_06/input/ww3_multi_grdset_d.nml index 5b84d09b8..6d4ae7488 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d.nml @@ -229,7 +229,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_07/input/ww3_multi_grdset.nml b/regtests/mww3_test_07/input/ww3_multi_grdset.nml index d8da40480..12feb1b63 100644 --- a/regtests/mww3_test_07/input/ww3_multi_grdset.nml +++ b/regtests/mww3_test_07/input/ww3_multi_grdset.nml @@ -235,7 +235,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.nml b/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.nml index 89ad415e1..dba60f24d 100644 --- a/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.nml @@ -233,7 +233,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.nml b/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.nml index 78bfa655c..200159029 100644 --- a/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.nml @@ -233,7 +233,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_08/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_08/input/ww3_multi_grdset_a.nml index 22f625b52..084f2064a 100644 --- a/regtests/mww3_test_08/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_08/input/ww3_multi_grdset_a.nml @@ -237,7 +237,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp1.3/input/ww3_ounf.nml b/regtests/ww3_tp1.3/input/ww3_ounf.nml index 6619cf3d8..c83a8fd56 100644 --- a/regtests/ww3_tp1.3/input/ww3_ounf.nml +++ b/regtests/ww3_tp1.3/input/ww3_ounf.nml @@ -33,7 +33,6 @@ FIELD%TIMESTART = '19680606 000000' FIELD%TIMESTRIDE = '3600.' FIELD%TIMECOUNT = '1000' - FIELD%TIMESPLIT = 6 FIELD%LIST = 'DPT HS FC CFX' FIELD%PARTITION = '0 1 2' FIELD%TYPE = 4 diff --git a/regtests/ww3_tp1.7/input_OBST/1-D.obst b/regtests/ww3_tp1.7/input_OBST/1-D.obst new file mode 100644 index 000000000..75ce9a166 --- /dev/null +++ b/regtests/ww3_tp1.7/input_OBST/1-D.obst @@ -0,0 +1,6 @@ +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/regtests/ww3_tp1.7/input_OBST/ww3_grid.nml b/regtests/ww3_tp1.7/input_OBST/ww3_grid.nml index 0650ceb2a..a96e23149 100644 --- a/regtests/ww3_tp1.7/input_OBST/ww3_grid.nml +++ b/regtests/ww3_tp1.7/input_OBST/ww3_grid.nml @@ -224,49 +224,6 @@ DEPTH%IDLA = 2 / -! -------------------------------------------------------------------- ! -! Define the point status map via MASK_NML namelist -! - only for RECT and CURV grids - -! -! * If no mask defined, INBOUND can be used to set active boundaries -! -! * IDLA : Layout indicator : -! 1 : Read line-by-line bottom to top. (default) -! 2 : Like 1, single read statement. -! 3 : Read line-by-line top to bottom. -! 4 : Like 3, single read statement. -! * IDFM : format indicator : -! 1 : Free format. (default) -! 2 : Fixed format. -! 3 : Unformatted. -! * FORMAT : element format to read : -! '(....)' : auto detected (default) -! '(f10.6)' : float type -! -! * Example : -! IDF IDLA IDFM FORMAT FILENAME -! 60 1 1 '(....)' 'GLOB-30M.mask' -! -! * The legend for the input map is : -! -2 : Excluded boundary point (covered by ice) -! -1 : Excluded sea point (covered by ice) -! 0 : Excluded land point -! 1 : Sea point -! 2 : Active boundary point -! 3 : Excluded grid point -! 7 : Ice point -! -! * namelist must be terminated with / -! * definitions & defaults: -! MASK%FILENAME = 'unset' ! filename -! MASK%IDF = 60 ! file unit number -! MASK%IDLA = 1 ! layout indicator -! MASK%IDFM = 1 ! format indicator -! MASK%FORMAT = '(....)' ! formatted read format -! -------------------------------------------------------------------- ! -&MASK_NML -/ - ! -------------------------------------------------------------------- ! ! Define the obstruction map via OBST_NML namelist ! - only for RECT and CURV grids - @@ -316,62 +273,53 @@ ! -------------------------------------------------------------------- ! &OBST_NML OBST%SF = 0.2 - OBST%FILENAME = 'obstr.inp' + OBST%FILENAME = '../input_OBST/1-D.obst' OBST%IDLA = 3 / ! -------------------------------------------------------------------- ! -! Define the output boundary points via OUTBND_COUNT_NML and -! OUTBND_LINE_NML namelist -! - only for RECT and CURV grids - +! Define the input boundary points via INBND_COUNT_NML and +! INBND_POINT_NML namelist +! - for RECT, CURV and UNST grids - ! -! * It will creates a nest file with output boundaries for a inner grid. -! The prefered way to do it is to use ww3_bounc program. +! * If no mask defined, INBOUND can be used ! -! * These do not need to be defined for data transfer between grids in -! the multi grid driver. +! * If the actual input data is not defined in the actual wave model run +! the initial conditions will be applied as constant boundary conditions. ! -! * The number of lines are defined by OUTBND_COUNT +! * The number of points is defined by INBND_COUNT ! -! * The lines must start from index 1 to N +! * The points must start from index 1 to N ! -! * Output boundary points are defined as a number of straight lines, -! defined by its starting point (X0,Y0), increments (DX,DY) and number -! of points. A negative number of points starts a new output file. +! * Each line contains: +! Discrete grid counters (IX,IY) of the active point and a +! connect flag. If this flag is true, and the present and previous +! point are on a grid line or diagonal, all intermediate points +! are also defined as boundary points. ! -! * Example for spherical grid in degrees : -! '1.75 1.50 0.25 -0.10 3' -! '2.25 1.50 -0.10 0.00 -6' -! '0.10 0.10 0.10 0.00 -10' +! * Included point : +! grid points from segment data +! Defines as lines identifying points at which +! input boundary conditions are to be defined. ! ! * namelist must be terminated with / ! * definitions & defaults: -! OUTBND_COUNT%N_LINE = 0 ! number of lines +! INBND_COUNT%N_POINT = 0 ! number of segments +! +! INBND_POINT(I)%X_INDEX = 0 ! x index included point +! INBND_POINT(I)%Y_INDEX = 0 ! y index included point +! INBND_POINT(I)%CONNECT = F ! connect flag ! -! OUTBND_LINE(I)%X0 = 0. ! x index start point -! OUTBND_LINE(I)%Y0 = 0. ! y index start point -! OUTBND_LINE(I)%DX = 0. ! x-along increment -! OUTBND_LINE(I)%DY = 0. ! y-along increment -! OUTBND_LINE(I)%NP = 0 ! number of points ! OR -! OUTBND_LINE(I) = 0. 0. 0. 0. 0 ! included lines +! INBND_POINT(I) = 0 0 F ! included point ! -------------------------------------------------------------------- ! -&OUTBND_COUNT_NML - OUTBND_COUNT%N_LINE = 11 +&INBND_COUNT_NML + INBND_COUNT%N_POINT = 2 / -&OUTBND_LINE_NML - OUTBND_LINE(1) = 0 0 4 0 0 - OUTBND_LINE(2) = 0 0 0 0 0 - OUTBND_LINE(3) = 0 0 0 0 0 - OUTBND_LINE(4) = 0 0 0 0 0 - OUTBND_LINE(5) = 0 0 0 0 0 - OUTBND_LINE(6) = 10 2 1 (....) PART - OUTBND_LINE(7) = 2 2 F - OUTBND_LINE(8) = 2 2 T - OUTBND_LINE(9) = 0 0 F - OUTBND_LINE(10) = 0 0 F - OUTBND_LINE(11) = 0 0 +&INBND_POINT_NML + INBND_POINT(1) = 2 2 F + INBND_POINT(2) = 2 2 T / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.1/input/ww3_multi.nml b/regtests/ww3_tp2.1/input/ww3_multi.nml index a4b5a3edf..6ff8057d5 100644 --- a/regtests/ww3_tp2.1/input/ww3_multi.nml +++ b/regtests/ww3_tp2.1/input/ww3_multi.nml @@ -226,7 +226,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.17/input/ww3_bounc.nml b/regtests/ww3_tp2.17/input/ww3_bounc.nml index b5a76a161..724568dd1 100644 --- a/regtests/ww3_tp2.17/input/ww3_bounc.nml +++ b/regtests/ww3_tp2.17/input/ww3_bounc.nml @@ -16,7 +16,6 @@ BOUND%FILE = '../input/spec.list' / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.nml b/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.nml index dd641a6b0..e14bf55a2 100644 --- a/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.nml +++ b/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.nml @@ -233,7 +233,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.nml b/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.nml index 1919f0d1a..3c75b6c6c 100644 --- a/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.nml +++ b/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.nml @@ -233,7 +233,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.nml b/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.nml index d363f3c5c..257777563 100644 --- a/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.nml +++ b/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.nml @@ -233,7 +233,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.2/input/ww3_multi.nml b/regtests/ww3_tp2.2/input/ww3_multi.nml index f221435b7..7125ad5fc 100644 --- a/regtests/ww3_tp2.2/input/ww3_multi.nml +++ b/regtests/ww3_tp2.2/input/ww3_multi.nml @@ -230,7 +230,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.8/input/ww3_bounc.nml b/regtests/ww3_tp2.8/input/ww3_bounc.nml index b5a76a161..724568dd1 100644 --- a/regtests/ww3_tp2.8/input/ww3_bounc.nml +++ b/regtests/ww3_tp2.8/input/ww3_bounc.nml @@ -16,7 +16,6 @@ BOUND%FILE = '../input/spec.list' / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tpt1.1/input/PTM1.depth b/regtests/ww3_tpt1.1/input/PTM1.depth new file mode 100644 index 000000000..36d8e7230 --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM1.depth @@ -0,0 +1,5 @@ +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 diff --git a/regtests/ww3_tpt1.1/input/PTM1.mask b/regtests/ww3_tpt1.1/input/PTM1.mask new file mode 100644 index 000000000..46aeeb91f --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM1.mask @@ -0,0 +1,5 @@ +3 3 3 3 3 +3 2 2 2 3 +3 2 1 2 3 +3 2 2 2 3 +3 3 3 3 3 diff --git a/regtests/ww3_tpt1.1/input/PTM2.depth b/regtests/ww3_tpt1.1/input/PTM2.depth new file mode 100644 index 000000000..36d8e7230 --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM2.depth @@ -0,0 +1,5 @@ +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 diff --git a/regtests/ww3_tpt1.1/input/PTM2.mask b/regtests/ww3_tpt1.1/input/PTM2.mask new file mode 100644 index 000000000..46aeeb91f --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM2.mask @@ -0,0 +1,5 @@ +3 3 3 3 3 +3 2 2 2 3 +3 2 1 2 3 +3 2 2 2 3 +3 3 3 3 3 diff --git a/regtests/ww3_tpt1.1/input/PTM3.depth b/regtests/ww3_tpt1.1/input/PTM3.depth new file mode 100644 index 000000000..36d8e7230 --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM3.depth @@ -0,0 +1,5 @@ +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 diff --git a/regtests/ww3_tpt1.1/input/PTM3.mask b/regtests/ww3_tpt1.1/input/PTM3.mask new file mode 100644 index 000000000..46aeeb91f --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM3.mask @@ -0,0 +1,5 @@ +3 3 3 3 3 +3 2 2 2 3 +3 2 1 2 3 +3 2 2 2 3 +3 3 3 3 3 diff --git a/regtests/ww3_tpt1.1/input/PTM4.depth b/regtests/ww3_tpt1.1/input/PTM4.depth new file mode 100644 index 000000000..36d8e7230 --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM4.depth @@ -0,0 +1,5 @@ +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 diff --git a/regtests/ww3_tpt1.1/input/PTM4.mask b/regtests/ww3_tpt1.1/input/PTM4.mask new file mode 100644 index 000000000..46aeeb91f --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM4.mask @@ -0,0 +1,5 @@ +3 3 3 3 3 +3 2 2 2 3 +3 2 1 2 3 +3 2 2 2 3 +3 3 3 3 3 diff --git a/regtests/ww3_tpt1.1/input/PTM5.depth b/regtests/ww3_tpt1.1/input/PTM5.depth new file mode 100644 index 000000000..36d8e7230 --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM5.depth @@ -0,0 +1,5 @@ +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 +1 1 1 1 1 diff --git a/regtests/ww3_tpt1.1/input/PTM5.mask b/regtests/ww3_tpt1.1/input/PTM5.mask new file mode 100644 index 000000000..46aeeb91f --- /dev/null +++ b/regtests/ww3_tpt1.1/input/PTM5.mask @@ -0,0 +1,5 @@ +3 3 3 3 3 +3 2 2 2 3 +3 2 1 2 3 +3 2 2 2 3 +3 3 3 3 3 diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM1.nml b/regtests/ww3_tpt1.1/input/namelists_PTM1.nml new file mode 100644 index 000000000..7e7a21bfa --- /dev/null +++ b/regtests/ww3_tpt1.1/input/namelists_PTM1.nml @@ -0,0 +1,2 @@ +&MISC FLAGTR = 0, PTM = 1 / +END OF NAMELISTS diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM2.nml b/regtests/ww3_tpt1.1/input/namelists_PTM2.nml new file mode 100644 index 000000000..190abba29 --- /dev/null +++ b/regtests/ww3_tpt1.1/input/namelists_PTM2.nml @@ -0,0 +1,2 @@ +&MISC FLAGTR = 0, PTM = 2 / +END OF NAMELISTS diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM3.nml b/regtests/ww3_tpt1.1/input/namelists_PTM3.nml new file mode 100644 index 000000000..e8edee58d --- /dev/null +++ b/regtests/ww3_tpt1.1/input/namelists_PTM3.nml @@ -0,0 +1,2 @@ +&MISC FLAGTR = 0, PTM = 3 / +END OF NAMELISTS diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM4.nml b/regtests/ww3_tpt1.1/input/namelists_PTM4.nml new file mode 100644 index 000000000..03f7ce3fc --- /dev/null +++ b/regtests/ww3_tpt1.1/input/namelists_PTM4.nml @@ -0,0 +1,2 @@ +&MISC FLAGTR = 0, PTM = 4 / +END OF NAMELISTS diff --git a/regtests/ww3_tpt1.1/input/namelists_PTM5.nml b/regtests/ww3_tpt1.1/input/namelists_PTM5.nml new file mode 100644 index 000000000..eb8b18c1b --- /dev/null +++ b/regtests/ww3_tpt1.1/input/namelists_PTM5.nml @@ -0,0 +1,2 @@ +&MISC FLAGTR = 0, PTM = 5, PTFC = 0.1 / +END OF NAMELISTS diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM1.nml b/regtests/ww3_tpt1.1/input/ww3_grid_PTM1.nml new file mode 100644 index 000000000..54aaa9bfa --- /dev/null +++ b/regtests/ww3_tpt1.1/input/ww3_grid_PTM1.nml @@ -0,0 +1,269 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.1 + SPECTRUM%FREQ1 = 0.04118 + SPECTRUM%NK = 30 + SPECTRUM%NTH = 36 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 600. + TIMESTEPS%DTXY = 100. + TIMESTEPS%DTKTH = 100. + TIMESTEPS%DTMIN = 60. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'Partitioning test grid' + GRID%NML = '../input/namelists_PTM1.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.1 + GRID%DMIN = 2.50 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 5 + RECT%NY = 5 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 2. + RECT%X0 = -1. + RECT%Y0 = -1. +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -100. + DEPTH%FILENAME = '../input/PTM1.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! Define the point status map via MASK_NML namelist +! - only for RECT and CURV grids - +! +! * If no mask defined, INBOUND can be used to set active boundaries +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF IDLA IDFM FORMAT FILENAME +! 60 1 1 '(....)' 'GLOB-30M.mask' +! +! * The legend for the input map is : +! -2 : Excluded boundary point (covered by ice) +! -1 : Excluded sea point (covered by ice) +! 0 : Excluded land point +! 1 : Sea point +! 2 : Active boundary point +! 3 : Excluded grid point +! 7 : Ice point +! +! * namelist must be terminated with / +! * definitions & defaults: +! MASK%FILENAME = 'unset' ! filename +! MASK%IDF = 60 ! file unit number +! MASK%IDLA = 1 ! layout indicator +! MASK%IDFM = 1 ! format indicator +! MASK%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&MASK_NML + MASK%FILENAME = '../input/PTM1.mask' + MASK%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM2.nml b/regtests/ww3_tpt1.1/input/ww3_grid_PTM2.nml new file mode 100644 index 000000000..f33d9f9f9 --- /dev/null +++ b/regtests/ww3_tpt1.1/input/ww3_grid_PTM2.nml @@ -0,0 +1,269 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.1 + SPECTRUM%FREQ1 = 0.04118 + SPECTRUM%NK = 30 + SPECTRUM%NTH = 36 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 600. + TIMESTEPS%DTXY = 100. + TIMESTEPS%DTKTH = 100. + TIMESTEPS%DTMIN = 60. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'Partitioning test grid' + GRID%NML = '../input/namelists_PTM2.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.1 + GRID%DMIN = 2.50 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 5 + RECT%NY = 5 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 2. + RECT%X0 = -1. + RECT%Y0 = -1. +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -100. + DEPTH%FILENAME = '../input/PTM2.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! Define the point status map via MASK_NML namelist +! - only for RECT and CURV grids - +! +! * If no mask defined, INBOUND can be used to set active boundaries +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF IDLA IDFM FORMAT FILENAME +! 60 1 1 '(....)' 'GLOB-30M.mask' +! +! * The legend for the input map is : +! -2 : Excluded boundary point (covered by ice) +! -1 : Excluded sea point (covered by ice) +! 0 : Excluded land point +! 1 : Sea point +! 2 : Active boundary point +! 3 : Excluded grid point +! 7 : Ice point +! +! * namelist must be terminated with / +! * definitions & defaults: +! MASK%FILENAME = 'unset' ! filename +! MASK%IDF = 60 ! file unit number +! MASK%IDLA = 1 ! layout indicator +! MASK%IDFM = 1 ! format indicator +! MASK%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&MASK_NML + MASK%FILENAME = '../input/PTM2.mask' + MASK%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM3.nml b/regtests/ww3_tpt1.1/input/ww3_grid_PTM3.nml new file mode 100644 index 000000000..9036cef2d --- /dev/null +++ b/regtests/ww3_tpt1.1/input/ww3_grid_PTM3.nml @@ -0,0 +1,269 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.1 + SPECTRUM%FREQ1 = 0.04118 + SPECTRUM%NK = 30 + SPECTRUM%NTH = 36 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 600. + TIMESTEPS%DTXY = 100. + TIMESTEPS%DTKTH = 100. + TIMESTEPS%DTMIN = 60. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'Partitioning test grid' + GRID%NML = '../input/namelists_PTM3.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.1 + GRID%DMIN = 2.50 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 5 + RECT%NY = 5 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 2. + RECT%X0 = -1. + RECT%Y0 = -1. +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -100. + DEPTH%FILENAME = '../input/PTM3.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! Define the point status map via MASK_NML namelist +! - only for RECT and CURV grids - +! +! * If no mask defined, INBOUND can be used to set active boundaries +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF IDLA IDFM FORMAT FILENAME +! 60 1 1 '(....)' 'GLOB-30M.mask' +! +! * The legend for the input map is : +! -2 : Excluded boundary point (covered by ice) +! -1 : Excluded sea point (covered by ice) +! 0 : Excluded land point +! 1 : Sea point +! 2 : Active boundary point +! 3 : Excluded grid point +! 7 : Ice point +! +! * namelist must be terminated with / +! * definitions & defaults: +! MASK%FILENAME = 'unset' ! filename +! MASK%IDF = 60 ! file unit number +! MASK%IDLA = 1 ! layout indicator +! MASK%IDFM = 1 ! format indicator +! MASK%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&MASK_NML + MASK%FILENAME = '../input/PTM3.mask' + MASK%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM4.nml b/regtests/ww3_tpt1.1/input/ww3_grid_PTM4.nml new file mode 100644 index 000000000..f018d250e --- /dev/null +++ b/regtests/ww3_tpt1.1/input/ww3_grid_PTM4.nml @@ -0,0 +1,269 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.1 + SPECTRUM%FREQ1 = 0.04118 + SPECTRUM%NK = 30 + SPECTRUM%NTH = 36 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 600. + TIMESTEPS%DTXY = 100. + TIMESTEPS%DTKTH = 100. + TIMESTEPS%DTMIN = 60. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'Partitioning test grid' + GRID%NML = '../input/namelists_PTM4.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.1 + GRID%DMIN = 2.50 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 5 + RECT%NY = 5 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 2. + RECT%X0 = -1. + RECT%Y0 = -1. +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -100. + DEPTH%FILENAME = '../input/PTM4.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! Define the point status map via MASK_NML namelist +! - only for RECT and CURV grids - +! +! * If no mask defined, INBOUND can be used to set active boundaries +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF IDLA IDFM FORMAT FILENAME +! 60 1 1 '(....)' 'GLOB-30M.mask' +! +! * The legend for the input map is : +! -2 : Excluded boundary point (covered by ice) +! -1 : Excluded sea point (covered by ice) +! 0 : Excluded land point +! 1 : Sea point +! 2 : Active boundary point +! 3 : Excluded grid point +! 7 : Ice point +! +! * namelist must be terminated with / +! * definitions & defaults: +! MASK%FILENAME = 'unset' ! filename +! MASK%IDF = 60 ! file unit number +! MASK%IDLA = 1 ! layout indicator +! MASK%IDFM = 1 ! format indicator +! MASK%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&MASK_NML + MASK%FILENAME = '../input/PTM4.mask' + MASK%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tpt1.1/input/ww3_grid_PTM5.nml b/regtests/ww3_tpt1.1/input/ww3_grid_PTM5.nml new file mode 100644 index 000000000..52af9e4b4 --- /dev/null +++ b/regtests/ww3_tpt1.1/input/ww3_grid_PTM5.nml @@ -0,0 +1,269 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.1 + SPECTRUM%FREQ1 = 0.04118 + SPECTRUM%NK = 30 + SPECTRUM%NTH = 36 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 600. + TIMESTEPS%DTXY = 100. + TIMESTEPS%DTKTH = 100. + TIMESTEPS%DTMIN = 60. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'Partitioning test grid' + GRID%NML = '../input/namelists_PTM5.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.1 + GRID%DMIN = 2.50 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 5 + RECT%NY = 5 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 2. + RECT%X0 = -1. + RECT%Y0 = -1. +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -100. + DEPTH%FILENAME = '../input/PTM5.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! Define the point status map via MASK_NML namelist +! - only for RECT and CURV grids - +! +! * If no mask defined, INBOUND can be used to set active boundaries +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF IDLA IDFM FORMAT FILENAME +! 60 1 1 '(....)' 'GLOB-30M.mask' +! +! * The legend for the input map is : +! -2 : Excluded boundary point (covered by ice) +! -1 : Excluded sea point (covered by ice) +! 0 : Excluded land point +! 1 : Sea point +! 2 : Active boundary point +! 3 : Excluded grid point +! 7 : Ice point +! +! * namelist must be terminated with / +! * definitions & defaults: +! MASK%FILENAME = 'unset' ! filename +! MASK%IDF = 60 ! file unit number +! MASK%IDLA = 1 ! layout indicator +! MASK%IDFM = 1 ! format indicator +! MASK%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&MASK_NML + MASK%FILENAME = '../input/PTM5.mask' + MASK%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.nml b/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.nml index f2aa35f56..dc1537ff9 100644 --- a/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.nml +++ b/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.nml @@ -165,8 +165,8 @@ ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML ALLTYPE%FIELD%LIST = 'HS FP DP DIR SPR' - ITYPE(1)%POINT%FILE = 'points_1.list' - ITYPE(2)%POINT%FILE = 'points_2.list' + ITYPE(1)%POINT%FILE = '../input_rg_multi/points_1.list' + ITYPE(2)%POINT%FILE = '../input_rg_multi/points_2.list' / ! -------------------------------------------------------------------- ! @@ -238,7 +238,6 @@ &HOMOG_INPUT_NML / - ! -------------------------------------------------------------------- ! ! WAVEWATCH III - end of namelist ! ! -------------------------------------------------------------------- ! From ab9e6490904b92e5e54a7c0606905eea114bf04f Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Fri, 11 Oct 2019 10:07:41 -0400 Subject: [PATCH 15/84] Fb hybrid switchback (#113) * Adding OMPG/OMPH switches for compilation of WW3 using hybrid MPI/OpenMP (NCEP use). * Adding options for NCEP wcoss Cray compilation that provides b4b consistency. --- model/bin/cmplr.env | 6 ++++++ model/bin/comp.wcoss_cray | 4 +++- model/esmf/switch | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 388499c43..dab1a054c 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -122,6 +122,12 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ optc='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' optl='-o $prog -p -g' + if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then + optc="-c -fno-alias -auto -safe-cray-ptr -ftz -assume byterecl -nowarn -sox -align array64byte" + optc="$optc -xCORE-AVX2 -qno-opt-dynamic-align -ip -module $path_m" + fi + + # list options if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi diff --git a/model/bin/comp.wcoss_cray b/model/bin/comp.wcoss_cray index 562332ed7..fe439caaf 100755 --- a/model/bin/comp.wcoss_cray +++ b/model/bin/comp.wcoss_cray @@ -78,7 +78,9 @@ # Intel compiler on Linux ---------------------------------------------------- # 2.b.1 Build options and determine compiler name - opt="-c $list -O3 -assume byterecl -ip -module $path_m" +# opt="-c $list -O3 -assume byterecl -ip -module $path_m" +opt="-c $list -O3 -fno-alias -auto -safe-cray-ptr -ftz -assume byterecl -nowarn -sox -align array64byte" +opt="$opt -xCORE-AVX2 -qno-opt-dynamic-align -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" # opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" diff --git a/model/esmf/switch b/model/esmf/switch index bb713ff4f..8ed1abab2 100644 --- a/model/esmf/switch +++ b/model/esmf/switch @@ -3,6 +3,8 @@ NCO NOGRB DIST MPI +OMPG +OMPH SCRIP SCRIPNC WRST From 39d1fb73d8ffde828e3070eafc49f6fd5951dfdb Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Wed, 30 Oct 2019 13:47:43 +0000 Subject: [PATCH 16/84] UKMO Cray bugfixes (#105) * Removed incorrectly placed commas. * Added UNIT_AB variable to hold unit number for LOAD_ALPHABETA call. Changed unit number from 100 to 110 to avoid Cray reserved unit number range. * Fixed instability in ww3_tp2.10 regtest by decreasing CFL timestep * Added !/OMPG switches to OMP directives. * Added RECL specifier to OPEN statement enabled by switch /O2c. This avoids record length overflow for large dimension grids in WRITE statment with non-advancing I/O. * Changes for compilation and regtesting on UK Met Office Cray HPC: * Added cray_xc to the cmplr.env and w3_setup scripts. * Added cray_xc.CCE (Cray Compiler Envrionment) specific comp and link scripts. * Explicitly disable OMP in cray comp scripts for non-OMP compilation (Cray compiler enables by default). Note that is still enabled in link script as OMP library is always required by SCRIP code. * Updated matrix_ukmo_cray to run everything on a shared node using mpiexec - compilation is not efficient on compute nodes. * Add -eg switch (allows use of GOTO jumps into DO loops for SEC1 switch * Addition of GNU compilers on Cray architecture. * Fixed typo in wminitmd.ftn as rasied in #94 * Removed extra brackets around variable list that were causing some compilers to complain. * Removed UKMO comp/link scripts and updated cmplr.env accordingly --- model/bin/cmplr.env | 71 +++++++- model/bin/w3_setup | 8 +- model/ftn/w3iogrmd.ftn | 4 +- model/ftn/w3psmcmd.ftn | 228 ++++++++++++------------- model/ftn/w3smcomd.ftn | 2 +- model/ftn/w3uostmd.ftn | 8 +- model/ftn/wminitmd.ftn | 2 +- model/ftn/ww3_grid.ftn | 2 +- regtests/bin/matrix_ukmo_cray | 148 ++++++++++++++++ regtests/ww3_tp2.10/input/ww3_grid.inp | 6 +- 10 files changed, 348 insertions(+), 131 deletions(-) create mode 100755 regtests/bin/matrix_ukmo_cray diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index dab1a054c..c6d615fa3 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -4,19 +4,19 @@ # cmplr.env : Defines the compiler executable and its options for WW3 # # from the compiler keyword given in argument # # # -# - supported compiler are SGI-MPT, INTEL, GNU, PORTLAND # +# - supported compiler are SGI-MPT, INTEL, GNU, PORTLAND, CRAY # # # # # # use : cmplr.env cmplr # # # # cmplr : keyword based on a value and optional suffix, prefix and extras # # # -# value : mpt / intel / gnu / pgi # +# value : mpt / intel / gnu / pgi / cray # # suffix : _debug # -# prefix : datarmor_ # +# prefix : datarmor_ # # extras : so_ # # # -# - examples : intel / pgi_debug / datarmor_mpt_debug / so_intel # +# - examples : intel / pgi_debug / datarmor_mpt_debug / so_intel # # # # remarks : # # # @@ -176,7 +176,8 @@ fi if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "so_gnu" ] || [ "$cmplr" == "so_gnu_debug" ] || \ - [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] ; then + [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ + [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -185,7 +186,7 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ comp_mpi='mpif90' # Cray compiler - if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then + if [ ! -z "$(echo $cmplr | grep cray)" ] ; then comp_seq='ftn' comp_mpi='ftn' fi @@ -216,6 +217,9 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ if [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then optc="$optc -march=core-avx2" optl="$optl -march=core-avx2" + elif [ ! -z "$(echo $cmplr | grep ukmo_cray)" ]; then + # don't specify -march for Cray; processor specific tuning handled by ftn wrapper script + optc="$optc -frecord-marker=4" else optc="$optc -march=native" optl="$optl -march=native" @@ -281,7 +285,62 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ fi +############################### +# Crayftn (CCE) +############################### + +if [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ + [ "$cmplr" == "ukmo_cray_regtest" ]; then + + # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + # common compiler + comp_seq='ftn' + comp_mpi='ftn' + + # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + # common options + optc='-c -J$path_m -sdefault32 -eg' + optl='-o $prog' + + # list options + if [ "$list" == 'yes' ] ; then optc="$optc -hlist=a"; fi + + # omp options + if [ "$omp_mod" = 'yes' ] ; then + optc="$optc -h omp" + optl="$optl -h omp" + else + # by default, OMP is enabled on Cray ftn: + optc="$optc -h noomp" + # ... but don't disable at link stage as is currently needed by SCRIP + #optl="$optl -h noomp" + fi + + # optimized options + if [ -z "$(echo $cmplr | grep debug)" ] ; then + optc="$optc -O3" + optl="$optl -O3" + fi + + # debugging options + if [ ! -z "$(echo $cmplr | grep debug)" ] ; then + optc="$optc -O0 -g -Rbcps" + optl="$optl -O0 -g" + fi + + # regtest options: + if [ ! -z "$(echo $cmplr | grep regtest)" ] ; then + # -O1 best balance between compile time and runtime for regtests + optc="$optc -O1" + optl="$optl -O1" + fi + + # system-dependant options + # N/A +fi diff --git a/model/bin/w3_setup b/model/bin/w3_setup index b9cd4d402..081e79b39 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -419,7 +419,9 @@ then [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ - [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then + [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || \ + [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ + [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ]; then source $path_b/cmplr.env sed -e "s//$optc/" -e "s//$comp_seq/" -e "s//$comp_mpi/" $path_b/comp.tmpl > $path_b/comp echo " sed $path_b/comp.tmpl => $path_b/comp" @@ -443,7 +445,9 @@ then [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ - [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then + [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || \ + [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ + [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ]; then source $path_b/cmplr.env sed -e "s//$optl/" -e "s//$comp_seq/" -e "s//$comp_mpi/" $path_b/link.tmpl > $path_b/link echo " sed $path_b/link.tmpl => $path_b/link" diff --git a/model/ftn/w3iogrmd.ftn b/model/ftn/w3iogrmd.ftn index afe6cd145..dc365c92e 100644 --- a/model/ftn/w3iogrmd.ftn +++ b/model/ftn/w3iogrmd.ftn @@ -1260,8 +1260,8 @@ !/DB1 IF ( FLTEST ) WRITE (NDST,9053) SDBC1, SDBC2, FDONLY !/UOST IF ( WRITE ) THEN -!/UOST WRITE (NDSM), UOSTFILELOCAL, UOSTFILESHADOW, & -!/UOST UOSTFACTORLOCAL, UOSTFACTORSHADOW +!/UOST WRITE (NDSM) UOSTFILELOCAL, UOSTFILESHADOW, & +!/UOST UOSTFACTORLOCAL, UOSTFACTORSHADOW !/UOST ELSE !/UOST READ (NDSM,END=801,ERR=802,IOSTAT=IERR) & !/UOST UOSTFILELOCAL, UOSTFILESHADOW, & diff --git a/model/ftn/w3psmcmd.ftn b/model/ftn/w3psmcmd.ftn index dcd59a77e..6269ffcab 100644 --- a/model/ftn/w3psmcmd.ftn +++ b/model/ftn/w3psmcmd.ftn @@ -359,31 +359,31 @@ VLCFLY = 0. !Li Pass spectral element VQ to CQ and define size-1 cell CFL -!$OMP Parallel DO Private(ISEA) +!/OMPG!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA !Li Transported variable is divided by CG as in WW3 (???) CQ(ISEA) = VQ(ISEA)/CG(IK,ISEA) !Li Resetting NaNQ VQ to zero if any. JGLi18Mar2013 IF( .NOT. (CQ(ISEA) .EQ. CQ(ISEA)) ) CQ(ISEA) = 0.0 END DO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !Li Add current components if any to wave velocity. IF ( FLCUR ) THEN -!$OMP Parallel DO Private(ISEA) +!/OMPG!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA CXTOT(ISEA) = (CGCOS * CG(IK,ISEA) + CX(ISEA)) CYTOT(ISEA) = (CGSIN * CG(IK,ISEA) + CY(ISEA)) ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO ELSE !Li No current case use group speed only. -!$OMP Parallel DO Private(ISEA) +!/OMPG!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA CXTOT(ISEA) = CGCOS * CG(IK,ISEA) CYTOT(ISEA) = CGSIN * CG(IK,ISEA) END DO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !Li End of IF( FLCUR ) block. ENDIF @@ -404,12 +404,12 @@ !/ARC !Li Convert velocity components into CFL factors. -!$OMP Parallel DO Private(ISEA) +!/OMPG!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA UCFL(ISEA) = DTLDX*CXTOT(ISEA)/CLATS(ISEA) VCFL(ISEA) = DTLDY*CYTOT(ISEA) ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !Li Initialise boundary cell CQ and Velocity values. CQ(-9:0)=0.0 @@ -437,7 +437,7 @@ ENDIF ! Store conservative flux in FCNt advective one in AFCN -!$OMP Parallel DO Private(i, M, N, FUTRN) +!/OMPG!$OMP Parallel DO Private(i, M, N, FUTRN) DO i=1, NUFc M=IJKUFc(5,i) N=IJKUFc(6,i) @@ -445,7 +445,7 @@ !! Add sub-grid transparency for input flux update. JGLi16May2011 !! Transparency is also applied on diffusion flux. JGLi12Mar2012 -!$OMP CRITICAL +!/OMPG!$OMP CRITICAL IF( (CTRNX(M)+CTRNX(N)) .GE. 1.96 ) THEN FCNt(M) = FCNt(M) - FUTRN FCNt(N) = FCNt(N) + FUTRN @@ -459,19 +459,19 @@ ! Also divided by another cell length as UCFL is in basic unit. AFCN(M) = AFCN(M) - FUMD(i)*UCFL(M) + FUDIFX(i) AFCN(N) = AFCN(N) + FUMD(i)*UCFL(N) - FUDIFX(i) -!$OMP END CRITICAL +!/OMPG!$OMP END CRITICAL ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO ! Store conservative update in CQA and advective update in CQ ! The side length in MF value has to be cancelled with cell length ! Note ULCFLX has been divided by the cell size inside SMCxUNO2. -!$OMP Parallel DO Private(n) +!/OMPG!$OMP Parallel DO Private(n) DO n=1, NSEA CQA(n)=CQ(n) + FCNt(n)/FLOAT(IJKCel(3,n)) CQ (n)=CQ(n) + AFCN(n)/FLOAT(IJKCel(3,n)) ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO ! Call advection subs. IF( FUNO3 ) THEN @@ -482,7 +482,7 @@ CALL SMCyUNO2r(1, NVFc, CQ, VCFL, VLCFLY, DSSD, FVMD, FVDIFY) ENDIF -!$OMP Parallel DO Private(j, M, N, FVTRN) +!/OMPG!$OMP Parallel DO Private(j, M, N, FVTRN) DO j=1, NVFc M=IJKVFc(5,j) N=IJKVFc(6,j) @@ -490,7 +490,7 @@ !! Add sub-grid transparency for input flux update. JGLi16May2011 !! Transparency is also applied on diffusion flux. JGLi12Mar2012 -!$OMP CRITICAL +!/OMPG!$OMP CRITICAL IF( (CTRNY(M)+CTRNY(N)) .GE. 1.96 ) THEN BCNt(M) = BCNt(M) - FVTRN BCNt(N) = BCNt(N) + FVTRN @@ -501,18 +501,18 @@ BCNt(M) = BCNt(M) - FVTRN*CTRNY(N)*CTRNY(M) BCNt(N) = BCNt(N) + FVTRN*CTRNY(N) ENDIF -!$OMP END CRITICAL +!/OMPG!$OMP END CRITICAL ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO ! Store conservative update of CQA in CQ ! The v side length in MF value has to be cancelled with cell length !! One cosine factor is also needed to be divided for SMC grid -!$OMP Parallel DO Private(n) +!/OMPG!$OMP Parallel DO Private(n) DO n=1, NSEA CQ(n)=CQA(n) + BCNt(n)/( CLATS(n)*FLOAT(IJKCel(3,n)) ) ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !/ARC !Li Polar cell needs a special area factor, one-level case. !/ARC CQ(NSEA) = CQA(NSEA) + BCNt(NSEA)*PCArea @@ -552,12 +552,12 @@ ENDIF ! Store fineset level conservative flux in FCNt advective one in AFCN -!$OMP Parallel DO Private(i, L, M, FUTRN) +!/OMPG!$OMP Parallel DO Private(i, L, M, FUTRN) DO i=iuf, juf L=IJKUFc(5,i) M=IJKUFc(6,i) FUTRN = FUMD(i)*ULCFLX(i) - FUDIFX(i) -!$OMP CRITICAL +!/OMPG!$OMP CRITICAL !! Add sub-grid blocking for refined cells. JGLi18Apr2018 IF( (CTRNX(M)+CTRNX(L)) .GE. 1.96 ) THEN FCNt(L) = FCNt(L) - FUTRN @@ -571,21 +571,21 @@ ENDIF AFCN(L) = AFCN(L) - FUMD(i)*UCFL(L)*FMR + FUDIFX(i) AFCN(M) = AFCN(M) + FUMD(i)*UCFL(M)*FMR - FUDIFX(i) -!$OMP END CRITICAL +!/OMPG!$OMP END CRITICAL ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO ! Store conservative update in CQA and advective update in CQ ! The side length in MF value has to be cancelled with cell y-length. ! Also divided by another cell x-size as UCFL is in size-1 unit. -!$OMP Parallel DO Private(n) +!/OMPG!$OMP Parallel DO Private(n) DO n=icl, jcl CQA(n)=CQ(n) + FCNt(n)/FLOAT( IJKCel(3, n)*IJKCel(4, n) ) CQ (n)=CQ(n) + AFCN(n)/FLOAT( IJKCel(3, n)*IJKCel(4, n) ) FCNt(n)=0.0 AFCN(n)=0.0 ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO ! ! Use 3rd order UNO3 scheme. JGLi03Sep2015 IF( FUNO3 ) THEN @@ -596,12 +596,12 @@ ENDIF ! ! Store conservative flux in BCNt -!$OMP Parallel DO Private(j, L, M, FVTRN) +!/OMPG!$OMP Parallel DO Private(j, L, M, FVTRN) DO j=ivf, jvf L=IJKVFc(5,j) M=IJKVFc(6,j) FVTRN = FVMD(j)*VLCFLY(j) - FVDIFY(j) -!$OMP CRITICAL +!/OMPG!$OMP CRITICAL !! Add sub-grid blocking for refined cells. JGLi18Apr2018 IF( (CTRNY(M)+CTRNY(L)) .GE. 1.96 ) THEN BCNt(L) = BCNt(L) - FVTRN @@ -613,21 +613,21 @@ BCNt(L) = BCNt(L) - FVTRN*CTRNY(L)*CTRNY(M) BCNt(M) = BCNt(M) + FVTRN*CTRNY(M) ENDIF -!$OMP END CRITICAL +!/OMPG!$OMP END CRITICAL ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO ! Store conservative update of CQA in CQ ! The v side length in MF value has to be cancelled with x-size. ! Also divided by cell y-size as VCFL is in size-1 unit. !! One cosine factor is also needed to be divided for SMC grid. -!$OMP Parallel DO Private(n) +!/OMPG!$OMP Parallel DO Private(n) DO n=icl, jcl CQ(n)=CQA(n) + BCNt(n)/( CLATS(n)* & & FLOAT( IJKCel(3, n)*IJKCel(4, n) ) ) BCNt(n)=0.0 ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !/ARC !Li Polar cell needs a special area factor, multi-level case. !/ARC IF( jcl .EQ. NSEA ) THEN !/ARC CQ(NSEA) = CQA(NSEA) + BCNt(NSEA)*PCArea @@ -673,11 +673,11 @@ ! ! 4. Store results in VQ in proper format --------------------------- * ! -!$OMP Parallel DO Private(ISEA) +!/OMPG!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA VQ(ISEA) = MAX ( 0. , CQ(ISEA)*CG(IK,ISEA) ) END DO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO ! RETURN ! @@ -1030,14 +1030,14 @@ ! Uniform diffusion coefficient for all sizes. JGLi24Feb2012 ! CNST0=AKDif*MRFct*FTS -!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & -!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST8,CNST9) +!/OMPG!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & +!/OMPG!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST8,CNST9) ! Notice an extra side length L is multiplied to mid-flux to give correct ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!$OMP DO +!/OMPG!$OMP DO DO i=NUA, NUB @@ -1105,9 +1105,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel ! 999 PRINT*, ' Sub SMCxUNO2 ended.' @@ -1142,10 +1142,10 @@ ! Uniform diffusion coefficient for all sizes. JGLi24Feb2012 ! CNST0=AKDif*MRFct*FTS -!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & -!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST8) +!/OMPG!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & +!/OMPG!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST8) -!$OMP DO +!/OMPG!$OMP DO DO j=NVA, NVB @@ -1220,9 +1220,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel ! 999 PRINT*, ' Sub SMCyUNO2 ended.' @@ -1253,10 +1253,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & -!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6) +!/OMPG!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & +!/OMPG!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6) -!$OMP DO +!/OMPG!$OMP DO DO i=NUA, NUB @@ -1317,9 +1317,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel ! 999 PRINT*, ' Sub SMCxUNO2r ended.' @@ -1346,10 +1346,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & -!$OMP& Private(CNST,CNST4,CNST5,CNST6,CNST8) +!/OMPG!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & +!/OMPG!$OMP& Private(CNST,CNST4,CNST5,CNST6,CNST8) -!$OMP DO +!/OMPG!$OMP DO DO j=NVA, NVB @@ -1407,9 +1407,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel ! 999 PRINT*, ' Sub SMCyUNO2r ended.' @@ -1447,10 +1447,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & -!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) +!/OMPG!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & +!/OMPG!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) -!$OMP DO +!/OMPG!$OMP DO DO i=NUA, NUB @@ -1547,9 +1547,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel ! 999 PRINT*, ' Sub SMCxUNO3 ended.' @@ -1585,10 +1585,10 @@ ! Uniform diffusion coefficient for all sizes. JGLi24Feb2012 ! CNST0=AKDif*MRFct*FTS -!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & -!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) +!/OMPG!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & +!/OMPG!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) -!$OMP DO +!/OMPG!$OMP DO DO j=NVA, NVB @@ -1695,9 +1695,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel ! 999 PRINT*, ' Sub SMCyUNO3 ended.' @@ -1728,10 +1728,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & -!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) +!/OMPG!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & +!/OMPG!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) -!$OMP DO +!/OMPG!$OMP DO DO i=NUA, NUB @@ -1811,9 +1811,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel ! 999 PRINT*, ' Sub SMCxUNO3r ended.' @@ -1841,10 +1841,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & -!$OMP& Private(CNST,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) +!/OMPG!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & +!/OMPG!$OMP& Private(CNST,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) -!$OMP DO +!/OMPG!$OMP DO DO j=NVA, NVB @@ -1925,9 +1925,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel ! 999 PRINT*, ' Sub SMCyUNO3r ended.' @@ -1980,10 +1980,10 @@ DX0I = MRFct/ ( SX * DERA * RADIUS ) DY0I = MRFct/ ( SY * DERA * RADIUS ) -!$OMP Parallel Default(Shared), Private(i, j, K, L, M, N), & -!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6) +!/OMPG!$OMP Parallel Default(Shared), Private(i, j, K, L, M, N), & +!/OMPG!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6) -!$OMP DO +!/OMPG!$OMP DO !! Calculate x-gradient by averaging U-face gradients. DO i=1, NUFc @@ -2006,22 +2006,22 @@ ! Face size factor is also included for average. CNST5=CNST1*(CVF(M)-CVF(L))/(CNST2+CNST3) -!$OMP CRITICAL +!/OMPG!$OMP CRITICAL ! Store side gradient in two neighbouring cells AUN(L) = AUN(L) + CNST5 AUN(M) = AUN(M) + CNST5 -!$OMP END CRITICAL +!/OMPG!$OMP END CRITICAL ENDIF END DO -!$OMP END DO +!/OMPG!$OMP END DO ! Assign averaged side-gradient to GrdX, plus latitude factor ! Note averaging over 2 times of cell y-width factor but AUN ! has already been divied by two cell lengths. -!$OMP DO +!/OMPG!$OMP DO DO n=1, NSEA ! Cell y-size IJKCel(4,i) is used to cancel the face size-factor in AUN. @@ -2031,9 +2031,9 @@ ENDDO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP DO +!/OMPG!$OMP DO !! Calculate y-gradient by averaging V-face gradients. DO j=1, NVFc @@ -2056,18 +2056,18 @@ ! Face size factor is also included for average. CNST6=CNST1*(CVF(M)-CVF(L))/(CNST2+CNST3) -!$OMP CRITICAL +!/OMPG!$OMP CRITICAL ! Store side gradient in two neighbouring cells AVN(L) = AVN(L) + CNST6 AVN(M) = AVN(M) + CNST6 -!$OMP END CRITICAL +!/OMPG!$OMP END CRITICAL ENDIF END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP DO +!/OMPG!$OMP DO ! Assign averaged side-gradient to GrdY. DO n=1, NSEA @@ -2077,9 +2077,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel !/ARC !!Li Polar cell (if any) y-gradient is set to zero. !/ARC IF( NSEA .GT. NGLO ) GrdY(NSEA) = 0.0 @@ -2121,10 +2121,10 @@ !/ARC !!Li Save polar cell value !/ARC CNST0 = CVQ(NSEA) -!$OMP Parallel Default(Shared), Private(i, j, L, M, n), & -!$OMP& Private(CNST3,CNST4,CNST5,CNST6) +!/OMPG!$OMP Parallel Default(Shared), Private(i, j, L, M, n), & +!/OMPG!$OMP& Private(CNST3,CNST4,CNST5,CNST6) -!$OMP DO +!/OMPG!$OMP DO !! Calculate x-gradient by averaging U-face gradients. DO i=1, NUFc @@ -2136,17 +2136,17 @@ ! Multi-resolution SMC grid requires flux multiplied by face factor. CNST5=Real( IJKUFc(3,i) )*(CVF(M)+CVF(L)) -!$OMP CRITICAL +!/OMPG!$OMP CRITICAL ! Store side gradient in two neighbouring cells AUN(L) = AUN(L) + CNST5 AUN(M) = AUN(M) + CNST5 -!$OMP END CRITICAL +!/OMPG!$OMP END CRITICAL END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP DO +!/OMPG!$OMP DO !! Calculate y-gradient by averaging V-face gradients. DO j=1, NVFc @@ -2158,17 +2158,17 @@ ! Face size is required for multi-resolution grid. CNST6=Real( IJKVfc(3,j) )*(CVF(M)+CVF(L)) -!$OMP CRITICAL +!/OMPG!$OMP CRITICAL ! Store side gradient in two neighbouring cells AVN(L) = AVN(L) + CNST6 AVN(M) = AVN(M) + CNST6 -!$OMP END CRITICAL +!/OMPG!$OMP END CRITICAL END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP DO +!/OMPG!$OMP DO ! Assign averaged value back to CVQ. DO n=1, NSEA @@ -2181,9 +2181,9 @@ END DO -!$OMP END DO +!/OMPG!$OMP END DO -!$OMP END Parallel +!/OMPG!$OMP END Parallel !/ARC !!Li Polar cell (if any) keep original value. !/ARC IF( NSEA .GT. NGLO ) CVQ(NSEA) = CNST0 @@ -2391,11 +2391,11 @@ HCel(1:NSEA)= DW(1:NSEA) !! Reset shallow water depth with minimum depth -!$OMP Parallel DO Private(k) +!/OMPG!$OMP Parallel DO Private(k) DO k=1, NSEA IF(DW(k) .LT. DMIN) HCel(k)=DMIN ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !! Initialize full grid gradient arrays DDDX = 0. @@ -2412,7 +2412,7 @@ DHDY(1:NSEA) = GrHy !! Apply limiter to depth-gradient and copy to full grid. -!$OMP Parallel DO Private(i,j,k,m,n, CNST0, CNST1, CNST2) +!/OMPG!$OMP Parallel DO Private(i,j,k,m,n, CNST0, CNST1, CNST2) DO n=1,NSEA ! A limiter of gradient <= 0.1 is applied. @@ -2438,12 +2438,12 @@ !/ARC ENDIF END DO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !! Calculate the depth gradient limiter for refraction. L = 0 -!$OMP Parallel DO Private(i, n, CNST4, CNST6) +!/OMPG!$OMP Parallel DO Private(i, n, CNST4, CNST6) DO n=1,NSEA !Li Work out magnitude of depth gradient @@ -2452,9 +2452,9 @@ !Li Directional depedent depth gradient limiter. JGLi16Jun2011 IF ( CNST4 .GT. 1.0E-5 ) THEN -!$OMP ATOMIC Update +!/OMPG!$OMP ATOMIC Update L = L + 1 -!$OMP END ATOMIC +!/OMPG!$OMP END ATOMIC DO i=1, NTH !Li Refraction is done only when depth gradient is non-zero. @@ -2472,7 +2472,7 @@ ENDIF ENDDO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !/T WRITE(NDST,*) ' No. Refraction points =', L @@ -2516,7 +2516,7 @@ CALL SMCGradn(CXCY, GrHx, GrHy, L) !! Apply limiter to CX-gradient and copy to full grid. -!$OMP Parallel DO Private(i, j, k, m, n, CNST0, CNST1, CNST2) +!/OMPG!$OMP Parallel DO Private(i, j, k, m, n, CNST0, CNST1, CNST2) DO n=1,NSEA ! A limiter of gradient <= 0.01 is applied. @@ -2542,7 +2542,7 @@ DCXDY(j:j+m-1,i:i+k-1) = GrHy(n) END DO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !/DEBUGDCXDX WRITE(740+IAPROC,*) 'After non-trivial assination to DCXDX array' @@ -2560,7 +2560,7 @@ CALL SMCGradn(CXCY, GrHx, GrHy, L) !! Apply limiter to CX-gradient and copy to full grid. -!$OMP Parallel DO Private(i, j, k, m, n, CNST0, CNST1, CNST2) +!/OMPG!$OMP Parallel DO Private(i, j, k, m, n, CNST0, CNST1, CNST2) DO n=1,NSEA ! A limiter of gradient <= 0.1 is applied. @@ -2586,7 +2586,7 @@ DCYDY(j:j+m-1,i:i+k-1) = GrHy(n) END DO -!$OMP END Parallel DO +!/OMPG!$OMP END Parallel DO !/T 999 PRINT*, ' Sub SMCDCXY ended.' diff --git a/model/ftn/w3smcomd.ftn b/model/ftn/w3smcomd.ftn index ea227124c..526bd5e89 100644 --- a/model/ftn/w3smcomd.ftn +++ b/model/ftn/w3smcomd.ftn @@ -526,7 +526,7 @@ ALLOCATE(NNIDX(NXO,NYO), XDIST(NXO,NYO), YDIST(NXO,NYO)) ! Indices and weights: - READ(NDSMC) (((NNIDX(I,J), xdist(i,j), ydist(i,j)),i=1,NXO),j=1,NYO) + READ(NDSMC)((NNIDX(I,J), XDIST(I,J), YDIST(I,J),I=1,NXO),J=1,NYO) CLOSE(NDSMC) diff --git a/model/ftn/w3uostmd.ftn b/model/ftn/w3uostmd.ftn index 9228a1e8a..0bf5cf608 100755 --- a/model/ftn/w3uostmd.ftn +++ b/model/ftn/w3uostmd.ftn @@ -9,6 +9,8 @@ !/ +-----------------------------------+ !/ !/ Aug-2018 : Origination. ( version 6.07 ) +!/ 18-Sep-2019 : Added UNIT_AB and changed unit ( version 7.06 ) +!/ number to 110 (C. Bunney, UKMO) !/ !/ Copyright 2010 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -72,6 +74,8 @@ ! srctrm: global singleton source term CLASS(UOST_SOURCETERM), ALLOCATABLE :: SRCTRM + INTEGER, PARAMETER :: UNIT_AB = 110 ! Unit number for LOAD_ALPHABETA + CONTAINS @@ -156,7 +160,7 @@ IF ( (IGRID .GT. 0) .AND. ( ALLOCATED(SRCTRM)) ) THEN ! loading local/shadow alpha/beta - CALL LOAD_ALPHABETA(GRD, SGD, 100) + CALL LOAD_ALPHABETA(GRD, SGD, UNIT_AB) ! warning the user that for cells too small UOST may be inaccurate CGMAX = 20 ! simply taking a high value for the max group velocity to give an indication of this threshold @@ -429,7 +433,7 @@ FILESTART = .FALSE. ELSEIF (HEADER) THEN ! reading the position of an obstructed cell - READ(LINE, *), IX, IY + READ(LINE, *) IX, IY ISOBSTRUCTED(IX, IY) = .TRUE. IF ((IX .GT. NX) .OR. (IY .GT. NY)) THEN WRITE(NDSE,*) '*** WAVEWATCH III ERROR IN W3UOST: '// & diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 8b93efdb2..e8b122ea4 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -3265,7 +3265,7 @@ !/ USE W3SERVMD, ONLY: ITRACE, EXTCDE, NEXTLN, WWDATE, WWTIME !/S USE W3SERVMD, ONLY: STRACE -!/MPRF USE W3SERVMD, ONLY: PRINIT, PRTIME +!/MPRF USE W3TIMEMD, ONLY: PRINIT, PRTIME USE W3TIMEMD, ONLY: STME21, DSEC21, TICK21, TDIFF USE WMUNITMD, ONLY: WMUINI, WMUDMP, WMUSET, WMUGET, WMUINQ !/ diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 3624ce92e..101b1443d 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -4551,7 +4551,7 @@ !/O2b WRITE (NDSO,1104) !/O2b END IF ! -!/O2c OPEN (NDSM,FILE=TRIM(FNMPRE)//'mapsta.ww3') +!/O2c OPEN (NDSM,FILE=TRIM(FNMPRE)//'mapsta.ww3', RECL=2*NX*NY*50+1) !/O2c DO IY=NY,1, -1 !/O2c DO IX=1,NX !/O2c DO I=1,50 diff --git a/regtests/bin/matrix_ukmo_cray b/regtests/bin/matrix_ukmo_cray new file mode 100755 index 000000000..f40eec117 --- /dev/null +++ b/regtests/bin/matrix_ukmo_cray @@ -0,0 +1,148 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# matrix_ukmo_cray: Run matrix of regression tests on Cray XC architecture # +# as currently used at the UK Met Office. # +# # +# Remarks: # +# Currently, programs using the PDLIB switch (METIS library) crash when # +# compiled with the Cray CCE compiler. For those regtests that use PDLIB # +# it is required to use the GNU compiler. # +# # +# Chris Bunney # +# April 2019 # +# # +# Hendrik L. Tolman # +# August 2013 # +# December 2013 # +# April 2018 # +# # +# Copyright 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. # +# # +# --------------------------------------------------------------------------- # +# 0. Environment file + + source $(dirname $0)/../../model/bin/w3_setenv + main_dir=$WWATCH3_DIR + temp_dir=$WWATCH3_TMP + source=$WWATCH3_SOURCE + list=$WWATCH3_LIST + + echo "Main directory : $main_dir" + echo "Scratch directory : $temp_dir" + echo "Save source codes : $source" + echo "Save listings : $list" + + # Set Cray compiler variant; CCE (Cray Compiler Environment) or GNU. + # Use GNU for programs compiled with PDLIB, CCE for all others. + comp="CCE" + #comp = "GNU" + + +# 1. Set up for compilation environemnt on Cray XC (broadwell processors) + + echo '#!/bin/bash' > matrix.head + echo ' ' >> matrix.head + +# Run everything on single node in shared queue (compilation on compute +# nodes via parallel queue is inefficient and wasteful of resources): + echo '#PBS -l ncpus=16' >> matrix.head + echo '#PBS -l mem=16GB' >> matrix.head + echo '#PBS -q shared' >> matrix.head + echo '#PBS -l walltime=04:00:00' >> matrix.head + echo '#PBS -N ww3_regtest' >> matrix.head + echo '#PBS -j oe' >> matrix.head + echo '#PBS -o matrix.out' >> matrix.head + echo ' ' >> matrix.head + + echo " cd $(dirname $main_dir)/regtests" >> matrix.head + echo ' ' >> matrix.head + +if [[ $comp == "CCE" ]]; then + # Load targetted versions of Cray Development Tools (bug in Fortran StreamIO + # for older versions) and netCDF/HDF5 modules: + echo " module load cdt/18.12" >> matrix.head + echo " module load cray-netcdf/4.6.1.3" >> matrix.head + echo " module load cray-hdf5/1.10.2.0" >> matrix.head + echo " export METIS_PATH=/home/d02/frey/WW3/ParMETIS" >> matrix.head +elif [[ $comp == "GNU" ]]; then + # ParMETIS library not currently working with Cray compiler. + # Use GNU compiler for programs that use PDLIB. + echo " module switch PrgEnv-cray PrgEnv-gnu/5.2.82" >> matrix.head + echo " module load cray-netcdf" >> matrix.head + echo " export METIS_PATH=/home/d02/frey/WW3/ParMETIS_GNU" >> matrix.head +fi + +# SNP Launcher 7.7.4 allows -np switch: + echo " module load cray-snplauncher/7.7.4" >> matrix.head + + echo " export WWATCH3_NETCDF=NC4" >> matrix.head + echo " export NETCDF_CONFIG=\$(which nc-config)" >> matrix.head + +# Compiler option. Choose appropriate compiler and set cmplOption to +# y if using for the first time or using a different compiler + + cmplr=cray_xc.${comp} + export cmplOption='n' + + export mpi='mpiexec' + export np='16' + export nr='4' + export nth='4' + + if [ "$cmplOption" = 'y' ] + then + export rtst="./bin/run_test -c $cmplr -S" + else + export rtst="./bin/run_test -S" + fi + + export ww3='../model' + +# 1.b Flags to do course selection - - - - - - - - - - - - - - - - - - - - - - +# Addition selection by commenting out lines as below + + export shrd='y' # Do shared architecture tests + export dist='y' # Do distributed architecture (MPI) tests + export omp='y' # Threaded (OpenMP) tests + export hybd='y' # Hybrid options + + export prop1D='y' # 1-D propagation tests (ww3_tp1.X) + export prop2D='y' # 2-D propagation tests (ww3_tp2.X) + export time='y' # time linmited growth + export fetch='y' # fetch linmited growth + export hur1mg='y' # Hurricane with one moving grid + export shwtr='y' # shallow water tests + export unstr='y' # unstructured grid tests + export pdlib='y' # unstr with pdlib for domain decomposition and implicit solver + export smcgr='y' # SMC/Rotated grid test + export mudice='y' # Mud/Ice and wave interaction tests + export infgrv='y' # Second harmonic generation tests + export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) + export assim='y' # Restart spectra update + + export multi01='y' # mww3_test_01 (wetting and drying) + export multi02='y' # mww3_test_02 (basic two-way nesting test)) + export multi03='y' # mww3_test_03 (three high and three low res grids). + export multi04='y' # mww3_test_04 (swell on sea mount and/or current) + export multi05='y' # mww3_test_05 (three-grid moving hurricane) + export multi06='y' # mww3_test_06 (curvilinear grid tests) + export multi07='y' # mww3_test_07 (unstructured grid tests) + export multi08='y' # mww3_test_08 (wind and ice tests) + +# export filter='PR3 ST2 UQ' + # The filter does a set of consecutinve greps on the + # command lines generated by filter.base with the above + # selected options. + +# --------------------------------------------------------------------------- # +# 2. Execute matrix.base ... # +# --------------------------------------------------------------------------- # + + $main_dir/../regtests/bin/matrix.base + +# --------------------------------------------------------------------------- # +# End to the matrix # +# --------------------------------------------------------------------------- # diff --git a/regtests/ww3_tp2.10/input/ww3_grid.inp b/regtests/ww3_tp2.10/input/ww3_grid.inp index 45136fc9f..3baf0d038 100644 --- a/regtests/ww3_tp2.10/input/ww3_grid.inp +++ b/regtests/ww3_tp2.10/input/ww3_grid.inp @@ -2,7 +2,7 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Grid preprocessor input file $ $ -------------------------------------------------------------------- $ $ Adapted for SMC grid test. JGLi18Dec2012 -$ Last modified: JGLi23Nov2015 +$ Last modified: C. Bunney, 10 Sep 2019 $ 'SMC0512 Grid' $ @@ -13,7 +13,9 @@ $ $ SMC625 model time steps. JGLi18Dec2012 $ 1800. 600. 450. 300. $ SMC0512 GtLakes model time steps. JGLi28Oct2015 - 450. 90. 90. 90. +$ 450. 90. 90. 90. +$ CFL timestep set to 60s to avoid instability. C.Bunney 20190910 + 450. 60. 60. 60. $ $ SMC grid swell age to 11. hr with refined cell-scaling. JGLi18Dec2012 $ ST4 option with new parameters in SIN4 and SDS4. JGLi13Feb2013 From da4a8d1c7610f85e8182a5a32c1e04389456befb Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Thu, 31 Oct 2019 14:32:19 -0400 Subject: [PATCH 17/84] Gefs v12 (#118) FB_gefsv12: Adding changes to adjust to NCEP operations. * Changed compile option for NCEP Dell Phase 3, * Expanded grib2 output parameters to include Tz, depth, mean direction on ww3_grib, * Enforced NOSW=3 on ww3_grid for NCEP operations (NCO switch). * Added cmplr.env support to new NCEP Dell P3 comp/link * Changed opt in cmplr.env, comp/link.wcoss_dell_p3 following suggestion to consolidate compiler flags eliminating redundancies and generalizing blocks for several compiler/machine configurations. * Fixing indices nx/ny for exporting ESMF grid in module /model/ftn/wmesmfmd.ftn * Correcting the ABX2/ABY2 computation in w3iogomd.ftn * Moving profiling flag -p to optional block. Removing -p improves performance slightly, which can be welcome in operational applications. --- model/bin/cmplr.env | 88 ++++++++++++++++++++++++------------ model/bin/comp.wcoss_dell_p3 | 11 ++++- model/bin/link.wcoss_dell_p3 | 8 +++- model/ftn/w3iogomd.ftn | 10 ++-- model/ftn/wmesmfmd.ftn | 22 ++++----- model/ftn/ww3_grib.ftn | 12 ++--- model/ftn/ww3_grid.ftn | 2 + 7 files changed, 101 insertions(+), 52 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index c6d615fa3..53c21bcfb 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -38,8 +38,8 @@ list='no' # MPT # ############################### -if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ - [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] ; then +if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || [ "$cmplr" == "mpt_prof" ] || \ + [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] || [ "$cmplr" == "datarmor_mpt_prof" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -53,12 +53,12 @@ if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ comp_mpi='ftn' fi - + # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' - optl='-o $prog -p -g' + optc='-c -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' + optl='-o $prog -g' # list options if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi @@ -72,6 +72,12 @@ if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ optl="$optl -O3" fi + # profiling option + if [ -z "$(echo $cmplr | grep prof)" ] ; then + optc="$optc -p" + optl="$optl -p" + fi + # debugging options if [ ! -z "$(echo $cmplr | grep debug)" ] ; then optc="$optc -O0 -debug all -warn all -check all -check noarg_temp_created -fp-stack-check -heap-arrays -traceback -fpe0" @@ -94,13 +100,11 @@ fi # INTEL # ############################### -if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ - [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ - [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_phase2_intel_debug" ] || \ - [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_cray_intel_debug" ] || \ - [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "wcoss_dell_p3_intel_debug" ] || \ - [ "$cmplr" == "theia" ] || [ "$cmplr" == "hera" ] || \ - [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] ; then +if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$cmplr" == "intel_prof" ] || \ + [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || [ "$cmplr" == "so_intel_prof" ] || \ + [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || [ "$cmplr" == "datarmor_intel_prof" ] || \ + [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ + [ "$cmplr" == "theia" ] || [ "$cmplr" == "hera" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -119,12 +123,21 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' - optl='-o $prog -p -g' + optc='-c -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox' + optl='-o $prog -g' - if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then - optc="-c -fno-alias -auto -safe-cray-ptr -ftz -assume byterecl -nowarn -sox -align array64byte" - optc="$optc -xCORE-AVX2 -qno-opt-dynamic-align -ip -module $path_m" + if [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then + optc="$optc -xcore-avx2" + optl="$optl -xcore-avx2" + elif [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then + optc="$optc -xCORE-AVX2 -qno-opt-dynamic-align -auto -nowarn -align array64byte -safe-cray-ptr" + optl="$optl -xCORE-AVX2" + elif [ ! -z "$(echo $cmplr | grep wcoss_dell_p3)" ] ; then + optc="$opt -xHOST -qno-opt-dynamic-align -auto -nowarn -align array64byte -Wp,-w" + optl="$optl -xHOST" + else + optc="$optc -xhost" + optl="$optl -xhost" fi @@ -148,6 +161,12 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ optl="$optl -O3" fi + # profiling option + if [ -z "$(echo $cmplr | grep prof)" ] ; then + optc="$optc -p" + optl="$optl -p" + fi + # debugging options if [ ! -z "$(echo $cmplr | grep debug)" ] ; then optc="$optc -O0 -debug all -warn all -check all -check noarg_temp_created -fp-stack-check -heap-arrays -traceback -fpe0" @@ -165,7 +184,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ if [ ! -z "$(echo $cmplr | grep so)" ] ; then optc="$optc -fPIC" - optl='-o $prog -p -g' + optl='-o $prog -g' fi fi @@ -174,10 +193,11 @@ fi # GNU # ############################### -if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "so_gnu" ] || [ "$cmplr" == "so_gnu_debug" ] || \ - [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ - [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ] ; then + +if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || [ "$cmplr" == "gnu_prof" ] || \ + [ "$cmplr" == "so_gnu" ] || [ "$cmplr" == "so_gnu_debug" ] || [ "$cmplr" == "so_gnu_prof" ] || \ + [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || [ "$cmplr" == "datarmor_gnu_prof" ] || \ + [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ] || [ "$cmplr" == "ukmo_cray_gnu_prof" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -195,8 +215,8 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -J$path_m -p -g -fno-second-underscore -ffree-line-length-none -fconvert=big-endian' - optl='-o $prog -p -g' + optc='-c -J$path_m -g -fno-second-underscore -ffree-line-length-none -fconvert=big-endian' + optl='-o $prog -g' # omp options if [ "$omp_mod" == 'yes' ] ; then optc="$optc -fopenmp"; optl="$optl -fopenmp"; fi @@ -207,6 +227,12 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ optl="$optl -O3" fi + # profiling option + if [ -z "$(echo $cmplr | grep prof)" ] ; then + optc="$optc -p" + optl="$optl -p" + fi + # debugging options if [ ! -z "$(echo $cmplr | grep debug)" ] ; then optc="$optc -O0 -Wall -fcheck=all -ffpe-trap=invalid,zero,overflow -frecursive -fbacktrace" @@ -234,8 +260,8 @@ fi # PGI # ############################### -if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ - [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then +if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || [ "$cmplr" == "pgi_prof" ] || \ + [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -253,8 +279,8 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -module $path_m -p -g -i4 -r4 -Kieee -byteswapio' - optl='-o $prog -p -g' + optc='-c -module $path_m -g -i4 -r4 -Kieee -byteswapio' + optl='-o $prog -g' # list options if [ "$list" == 'yes' ] ; then optc="$optc -Mlist"; fi @@ -268,6 +294,12 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ optl="$optl -O3" fi + # profiling option + if [ -z "$(echo $cmplr | grep prof)" ] ; then + optc="$optc -p" + optl="$optl -p" + fi + # debugging options if [ ! -z "$(echo $cmplr | grep debug)" ] ; then optc="$optc -O0 -Mbounds -Mchkfpstk -Mchkstk -Mdalign -Mdclchk -Mdepchk -Miomutex -Ktrap=fp -Mrecursive -traceback" diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 index afb5a6043..604568a1f 100755 --- a/model/bin/comp.wcoss_dell_p3 +++ b/model/bin/comp.wcoss_dell_p3 @@ -78,7 +78,16 @@ # Intel compiler on Linux ---------------------------------------------------- # 2.b.1 Build options and determine compiler name - opt="-c $list -O3 -assume byterecl -ip -module $path_m" +# opt="-c $list -O3 -assume byterecl -ip -module $path_m" + +opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox" +opt="$opt -xHOST -qno-opt-dynamic-align -auto -nowarn -align array64byte -Wp,-w" +# Add profiling +# opt="$opt -p" +### opt="-c $list -O2 -Wp,-w -fno-alias -auto -ftz -assume byterecl -nowarn -sox -align array64byte" +### opt="$opt -xHOST -qno-opt-dynamic-align -fp-model source -ip -module $path_m" +## opt="$opt -nowarn -sox -align array64byte -real-size 32 -xHOST -qno-opt-dynamic-align" +## opt="$opt -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3" # opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" # opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 index 57b258d95..16aa631d8 100755 --- a/model/bin/link.wcoss_dell_p3 +++ b/model/bin/link.wcoss_dell_p3 @@ -86,7 +86,13 @@ # linking options libs="" - opt="-O3 -ip -o $prog" +# opt="-O2 -ip -o $prog" +opt="-o $prog -g" +opt="$opt -xhost" +# Add profiling +# opt="$opt -p" + +# opt="-O3 -ip -o $prog" # opt="-O3 -xSSE4.2 -ip -o $prog" # opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" # opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index f5e8df06c..01cff23c7 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -51,6 +51,8 @@ !/ processing code) !/ 05-Jun-2018 : Add DEBUGSTP/SETUP ( version 6.04 ) !/ 22-Aug-2018 : Add WBT output parameter ( version 6.06 ) +!/ 25-Sep-2019 : Corrected th2m and sth2m ( version 6.07 ) +!/ calculations. (J Dykes, NRL) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -1145,6 +1147,8 @@ !/ 01-Mar-2018 : Removed RTD code (now used in post ( version 6.02 ) !/ processing code) !/ 22-Aug-2018 : Add WBT parameter ( version 6.06 ) +!/ 25-Sep-2019 : Corrected th2m and sth2m ( version 6.07 ) +!/ calculations. (J Dykes, NRL) !/ ! 1. Purpose : ! @@ -1218,7 +1222,6 @@ USE W3ADATMD, ONLY: CG, WN, DW USE W3ADATMD, ONLY: HS, WLM, T02, T0M1, T01, FP0, & THM, THS, THP0 - USE W3ADATMD, ONLY: FP1, THP1, ABA, ABD, UBA, UBD, FCUT, SXX, & SYY, SXY, PHS, PTP, PLP, PDIR, PSI, PWS, & PWST, PNR, USERO, TUSX, TUSY, PRMS, TPMS, & @@ -1433,8 +1436,9 @@ AB (JSEA) = AB (JSEA) + A(ITH,IK,JSEA) ABX(JSEA) = ABX(JSEA) + A(ITH,IK,JSEA)*ECOS(ITH) ABY(JSEA) = ABY(JSEA) + A(ITH,IK,JSEA)*ESIN(ITH) - ABX2(JSEA) = ABX2(JSEA) + A(ITH,IK,JSEA)*EC2(ITH) - ABY2(JSEA) = ABY2(JSEA) + A(ITH,IK,JSEA)*ES2(ITH) +! Using trig identities to represent cos2theta and sin2theta. + ABX2(JSEA) = ABX2(JSEA) + A(ITH,IK,JSEA)*(2*EC2(ITH) - 1) + ABY2(JSEA) = ABY2(JSEA) + A(ITH,IK,JSEA)*(2*ESC(ITH)) ABYX(JSEA) = ABYX(JSEA) + A(ITH,IK,JSEA)*ESC(ITH) IF (ITH.LE.NTH/2) THEN ABST(JSEA) = ABST(JSEA) + & diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index 42ef128b8..a72c93509 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -3175,7 +3175,7 @@ ! -------------------------------------------------------------------- / ! 4. Create ESMF grid with arbitrary domain decomposition to match ! the native domain decomposition of the non-excluded points -! Note that the native grid layout is dim1=Y, dim2=X +! Note that the native grid layout is dim1=X, dim2=Y ! Note that coordinates and mask are not needed since this ! grid is only used to define fields for a redist operation ! @@ -3200,9 +3200,9 @@ if (ipass.eq.2) then ix = mapsf(isea,1) iy = mapsf(isea,2) - ! native grid layout: dim1=Y, dim2=X - arbIndexList(arbIndexCount,1) = iy - arbIndexList(arbIndexCount,2) = ix + ! native grid layout: dim1=X, dim2=Y + arbIndexList(arbIndexCount,1) = ix + arbIndexList(arbIndexCount,2) = iy endif enddo endif @@ -3213,9 +3213,9 @@ if ( mapsta(iy,ix).ne.0 ) cycle ! skip non-excluded point arbIndexCount = arbIndexCount+1 if (ipass.eq.2) then - ! native grid layout: dim1=Y, dim2=X - arbIndexList(arbIndexCount,1) = iy - arbIndexList(arbIndexCount,2) = ix + ! native grid layout: dim1=X, dim2=Y + arbIndexList(arbIndexCount,1) = ix + arbIndexList(arbIndexCount,2) = iy endif enddo enddo @@ -3228,7 +3228,7 @@ case (iclose_none) natGrid = ESMF_GridCreateNoPeriDim( & minIndex=(/ 1, 1/), & - maxIndex=(/ny,nx/), & + maxIndex=(/nx,ny/), & coordDep1=(/ESMF_DIM_ARB,ESMF_DIM_ARB/), & coordDep2=(/ESMF_DIM_ARB,ESMF_DIM_ARB/), & arbIndexCount=arbIndexCount, & @@ -3239,11 +3239,11 @@ if (ESMF_LogFoundError(rc, PASSTHRU)) return case (iclose_smpl) natGrid = ESMF_GridCreate1PeriDim( & - periodicDim=2, & - poleDim=1, & + periodicDim=1, & + poleDim=2, & poleKindFlag=(/ESMF_POLEKIND_NONE,ESMF_POLEKIND_NONE/), & minIndex=(/ 1, 1/), & - maxIndex=(/ny,nx/), & + maxIndex=(/nx,ny/), & coordDep1=(/ESMF_DIM_ARB,ESMF_DIM_ARB/), & coordDep2=(/ESMF_DIM_ARB,ESMF_DIM_ARB/), & arbIndexCount=arbIndexCount, & diff --git a/model/ftn/ww3_grib.ftn b/model/ftn/ww3_grib.ftn index e00d1087c..28a8eacae 100644 --- a/model/ftn/ww3_grib.ftn +++ b/model/ftn/ww3_grib.ftn @@ -124,10 +124,6 @@ ! USE W3GDATMD USE W3WDATMD, ONLY: TIME, WLV, ICE, UST, USTDIR -! USE W3ADATMD, ONLY: DW, UA, UD, AS, CX, CY, HS, WLM, T0M1, THM, & -! THS, FP0, THP0, FP1, THP1, DTDYN, FCUT, & -! PHS, PTP, PLP, PDIR, PSI, PWS, PWST, PNR, & -! USERO USE W3ADATMD USE W3ODATMD, ONLY: NDSE, NDST, NDSO, NOGRP, NGRPP, IDOUT, UNDEF,& FLOGRD, FNMPRE, NOSWLL, NOGE, FLOGD @@ -310,11 +306,11 @@ ! ! Chage this as parameters become available in grib2 tables ! - ALLOCATE ( IFIA (16), IFJA(16) ) + ALLOCATE ( IFIA (13), IFJA(13) ) - IFIA = (/ 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 5, 9, 9, 9, 9 /) - IFJA = (/ 1, 4, 2 ,3, 5, 8, 3, 5, 6, 7, 8, 1, 1, 2, 3, 4 /) - DO I = 1, 16 + IFIA = (/ 1, 2, 2, 4, 4, 4, 4, 4, 5, 9, 9, 9, 9 /) + IFJA = (/ 4, 2, 8, 3, 5, 6, 7, 8, 1, 1, 2, 3, 4 /) + DO I = 1, 13 IF ( FLREQ(IFIA(I),IFJA(I)) ) THEN FLREQ(IFIA(I),IFJA(I)) = .FALSE. WRITE(NDSO,946) IDOUT(IFIA(I),IFJA(I)), & diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 101b1443d..253396612 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -2190,6 +2190,8 @@ FLC = .TRUE. TRCKCMPR = .TRUE. NOSW = 5 +!/NCO/! NCEP operations retains first three swell systems. +!/NCO NOSW=3 PTM = 1 ! Default to standard WW3 partitioning. C. Bunney PTFC = 0.1 ! Part. method 5 cutoff freq default. C. Bunney FMICHE = 1.6 From f7fa51f31a711f347757368fd64a6d4ed271cca4 Mon Sep 17 00:00:00 2001 From: RobertoPadilla-NOAA <49441900+RobertoPadilla-NOAA@users.noreply.github.com> Date: Fri, 1 Nov 2019 12:15:24 -0400 Subject: [PATCH 18/84] Fb input interp (#119) Branch FB_InputInterp: preparing general arrays and loop blocks for generalized interpolation to curvilinear grids. * Adding interpolation code and functions in wmupdtmd.ftn * adding interpolation function and subroutine in wmupdtmd.ftn * Adding Func & Subr to interp recti to curvi grids * Making INTEGER, INTENT(INOUT) :: NCIDS(NOGRP,NGRPP,NOSWLL + 1) allows for NOSWLL different to the default =5, which can be the case when using the NCO switch (NOSWLL=3). Bugfix suggested by @CarstenHansen --- model/ftn/wmupdtmd.ftn | 1108 ++++++++++++++++++++++++++++++---------- model/ftn/wmwavemd.ftn | 2 + model/ftn/ww3_ounf.ftn | 2 +- 3 files changed, 850 insertions(+), 262 deletions(-) diff --git a/model/ftn/wmupdtmd.ftn b/model/ftn/wmupdtmd.ftn index 84cf4439f..7d94ecacd 100644 --- a/model/ftn/wmupdtmd.ftn +++ b/model/ftn/wmupdtmd.ftn @@ -21,6 +21,8 @@ !/ (T. J. Campbell, NRL) !/ 20-Jan-2017 : Enable using input from coupler ( version 6.02 ) !/ (T. J. Campbell, NRL) +!/ 01-Jul-2019 : Generalize output to curv grids ( version 7.XX ) +!/ (R. Padilla-Hernandez, J.H. Alves, EMC/NOAA) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -903,6 +905,7 @@ ! 2.a-3 Ice parameter 5 ! CASE (-3) + CALL WMUPDS ( IMOD, INPUTS(IMOD)%ICEP5, & JMOD, INPUTS(JMOD)%ICEP5, 0. ) ! @@ -943,6 +946,7 @@ CALL WMUPDV ( IMOD, INPUTS(IMOD)%WXN, INPUTS(IMOD)%WYN, & JMOD, INPUTS(JMOD)%WXN, INPUTS(JMOD)%WYN, & 0., ICONSW ) +! IF ( IDINP(IMOD,J) .EQ. 'WNS' ) CALL WMUPDS & ( IMOD, INPUTS(IMOD)%DTN, & JMOD, INPUTS(JMOD)%DTN, 0. ) @@ -1055,6 +1059,8 @@ !/ 06-Dec-2010 : Change from GLOBAL (logical) to ICLOSE (integer) to !/ specify index closure for a grid. ( version 3.14 ) !/ (T. J. Campbell, NRL) +!/ 01-Jul-2019 : Generalize output to curv grids ( version 7.XX ) +!/ (R. Padilla-Hernandez, J.H. Alves, EMC/NOAA) !/ ! 1. Purpose : ! @@ -1122,7 +1128,8 @@ !/ USE W3GDATMD, ONLY: NX, NY, X0, Y0, SX, SY, GRIDS, FLAGLL, & GTYPE, RLGTYPE, CLGTYPE, UNGTYPE, & - ICLOSE_NONE, ICLOSE_SMPL, ICLOSE_TRPL + ICLOSE_NONE, ICLOSE_SMPL, ICLOSE_TRPL, & + HPFAC, HQFAC, XGRD, YGRD USE WMMDATMD, ONLY: IMPROC, NMPERR, NMPSCR, MDST, MDSE, MDSO, & MDSS !/ @@ -1144,18 +1151,31 @@ IYFN, IXS0, IXSN, IYS0, IYSN, IXS, & MXA, MYA, J, J1, J2, IXC, IYC, JJ, & JX, JY + INTEGER :: NPOIX, NPOIY, I, IFIELDS,CURVI !RP + !/S INTEGER, SAVE :: IENT = 0 INTEGER, ALLOCATABLE :: NXA(:,:), NYA(:,:) REAL :: XR, YR, R1, R2, RT, XFL, XFR, XSL, & XSR, YFL, YFR, YSL, YSR REAL :: VXL, VYL, VA0, VA, VA2, FACTOR, & WTOT, WL + + REAL :: LONC, LATC, SXYC, & + XDI, DTOLER, VALUEX, VALUEY + REAL, ALLOCATABLE :: RXA(:,:), RYA(:,:) + +! REAL, ALLOCATABLE :: VARIN(:,:) !RP + LOGICAL :: MAP1(NX,NY), MAP2(NX,NY), & MAP3(NX,NY), FLAGUP ! INTEGER, POINTER :: NXI, NYI, MAP(:,:), MAPI(:,:) - REAL, POINTER :: X0I, Y0I, SXI, SYI + REAL, POINTER :: X0I, Y0I, SXI, SYI !RP , HPFACI, HQFACI + + REAL, POINTER :: XGRDI(:,:), YGRDI(:,:), XGRDC(:,:), & + YGRDC(:,:), HPFACI(:,:), HQFACI(:,:) !RP + INTEGER, POINTER :: ICLOSE !/T1 CHARACTER(LEN=17) :: FORMAT1 !/ @@ -1166,12 +1186,7 @@ !/S CALL STRACE (IENT, 'WMUPDV') ! - IF ( GRIDS(IMOD)%GTYPE .EQ. CLGTYPE .OR. & - GRIDS(JMOD)%GTYPE .EQ. CLGTYPE ) THEN - WRITE (MDSE,'(/2A)') ' *** ERROR WMUPDV: ', & - 'CURVILINEAR GRID SUPPORT NOT YET IMPLEMENTED ***' - CALL EXTCDE ( 999 ) - ELSE IF ( GRIDS(IMOD)%GTYPE .EQ. UNGTYPE .OR. & + IF ( GRIDS(IMOD)%GTYPE .EQ. UNGTYPE .OR. & GRIDS(JMOD)%GTYPE .EQ. UNGTYPE ) THEN WRITE (MDSE,'(/2A)') ' *** ERROR WMUPDV: ', & 'UNSTRUCTURED GRID SUPPORT NOT YET IMPLEMENTED ***' @@ -1184,10 +1199,12 @@ Y0I => GRIDS(JMOD)%Y0 SXI => GRIDS(JMOD)%SX SYI => GRIDS(JMOD)%SY + HPFACI => GRIDS(JMOD)%HPFAC + HQFACI => GRIDS(JMOD)%HQFAC MAP => GRIDS(IMOD)%MAPSTA MAPI => GRIDS(JMOD)%MAPSTA ICLOSE => GRIDS(JMOD)%ICLOSE - +! IF ( ICLOSE .EQ. ICLOSE_TRPL ) THEN IF ( IMPROC.EQ.NMPERR ) WRITE(MDSE,*)'SUBROUTINE WMUPDV IS'// & ' NOT YET ADAPTED FOR TRIPOLE GRIDS. STOPPING NOW.' @@ -1201,11 +1218,17 @@ ! 0.b Initialize fields ! VX = UNDEF - VY = UNDEF + VY = UNDEF ! + CURVI=0 + IF ( GRIDS(IMOD)%GTYPE .EQ. CLGTYPE .OR. & + GRIDS(JMOD)%GTYPE .EQ. CLGTYPE ) THEN + CURVI=1 + END IF + ! 1. Case of identical resolution and coinciding grids --------------- / + IF(CURVI .EQ. 0) THEN ! - IF ( ABS(SX/SXI-1.) .LT. 1.E-3 .AND. & ABS(SY/SYI-1.) .LT. 1.E-3 .AND. & ABS(MOD((ABS(X0-X0I))/SX+0.5,1.)-0.5) .LT. 1.E-2 .AND. & @@ -1258,12 +1281,80 @@ RETURN ! END IF + END IF !CURVI ! ! 2. General case --------------------------------------------------- / ! -! 2.a Interpolation / averaging data for X axis +! 2.a Curvilinear grids ! - IF ( SX/SXI .LT. 1.0001 ) THEN + IF ( GRIDS(IMOD)%GTYPE .EQ. CLGTYPE .OR. & + GRIDS(JMOD)%GTYPE .EQ. CLGTYPE ) THEN + + XGRDI => GRIDS(JMOD)%XGRD !LONS FOR INPUT FIELD + YGRDI => GRIDS(JMOD)%YGRD !LATS FOR INPUT FIELD + +! GETTING THE INFO FOR THE CURVILINEAR GRID + XGRDC => GRIDS(IMOD)%XGRD !LONS FOR CURVI GRID + YGRDC => GRIDS(IMOD)%YGRD !LATS FOR CURVI GRID + !HPFAC => GRIDS(IMOD)%HPFAC !DELTAS IN LON FOR CURVI GRID + !HQFAC => GRIDS(IMOD)%HQFAC !DELTAS IN LAT FOR CURVI GRID +! +! +! FOR NOW ONLY INTERPOLATION NOT AVERAGING THEN MXA=2 + MXA=2 + MYA=2 + ALLOCATE ( NXA(NX,0:MXA) , RXA(NX,MXA) ) + NXA = 0 + RXA = 0. + ALLOCATE ( NYA(NY,0:MYA) , RYA(NY,MYA) ) + NYA = 0 + RYA = 0. + +!IS THE TOLERANCE USED TO DETERMINE IF TWO VALUES ARE EQUAL IN LOCATION + DTOLER = 1E-5 +! 2.a.1 running over the curvilinear grid + DO J=1,NY + DO I=1,NX + LONC=XGRDC(J,I) !LON FOR EVERY CURVL GRID POINT + LATC=YGRDC(J,I) !LAT FOR EVERY CURVL GRID POINT + + !SXC =HPFAC(J,I) !DELTA IN LON FOR CURVI GRID + !SYC =HQFAC(J,I) !DELTA IN LAT FOR CURVI GRID + !CHOOSING THE LARGEST DELTA + !!SXYC=MAX(SXC,SYC) + !!XDI=SXYC/SXI + !!IF(XDI .LT. 2.00) THEN + !! MXA=2 + !!ELSE + !! MXA=2+INT(XDI) + !!ENDIF + + !IF (MXA .EQ. 2) THEN + CALL INTERPOLATE2D(NXI,XGRDI(1,:),NYI,YGRDI(:,1), & + VXI,VYI,LONC,LATC,DTOLER,VALUEX,VALUEY) + !ELSE + ! COMPUTING THE NUMBER OF POINTS IN THE REGULAR GRID THAT + ! SURROUND THE POINT IN THE CURVILINEAR GRID, COULD BE + ! DIFFERENT FOR LAT AND LONG, IN THE AVERAGING PROCESS. + !NPOIX=INT(SXC/SXI) + !NPOIY=INT(SYC/SYI) + !!VALUEX=AVERAGING(NXI,XGRDI(1,:),NYI,YGRDI(:,1), & + !! VARIN,LONC,LATC,NPOIX,NPOIY) + !ENDIF + + VX(I,J)=VALUEX + VY(I,J)=VALUEY + + END DO !END I + END DO !END J + + ELSE +! +! 2.b Rectilinear grids +! +! 2.b.1 Interpolation / averaging data for X axis +! + IF ( SX/SXI .LT. 1.0001 ) THEN MXA = 2 ELSE MXA = 2 + INT(SX/SXI) @@ -1273,47 +1364,47 @@ !/T1 WRITE (FORMAT1,'(A,I2,A,I2,A)') "'(10X,",MXA+1,'I5,',MXA+1,"F6.2)'" !/T1 WRITE (MDST,9021) NX, MXA ! - ALLOCATE ( NXA(NX,0:MXA) , RXA(NX,MXA) ) - NXA = 0 - RXA = 0. + ALLOCATE ( NXA(NX,0:MXA) , RXA(NX,MXA) ) + NXA = 0 + RXA = 0. ! - IF ( MXA .EQ. 2 ) THEN + IF ( MXA .EQ. 2 ) THEN ! DO IX=1, NX IF ( FLAGLL ) THEN - XR = 1. + MOD & + XR = 1. + MOD & ( 1080.+X0+REAL(IX-1)*SX-X0I , 360. ) / SXI - ELSE - XR = 1. + ( X0+REAL(IX-1)*SX - X0I ) / SXI - END IF + ELSE + XR = 1. + ( X0+REAL(IX-1)*SX - X0I ) / SXI + END IF IF ( XR.GT.0. ) THEN - J1 = INT(XR) - J2 = J1 + 1 - R2 = MAX ( 0. , XR-REAL(J1) ) - R1 = 1. - R2 - IF ( FLAGLL .AND. ICLOSE.NE.ICLOSE_NONE ) THEN - J1 = 1 + MOD(J1-1,NXI) - J2 = 1 + MOD(J2-1,NXI) - END IF - IF ( J1.GE.1 .AND. J1.LE.NXI .AND. R1.GT.0.05 ) THEN - NXA(IX,0) = NXA(IX,0) + 1 - NXA(IX,NXA(IX,0)) = J1 - RXA(IX,NXA(IX,0)) = R1 - END IF - IF ( J2.GE.1 .AND. J2.LE.NXI .AND. R2.GT.0.05 ) THEN - NXA(IX,0) = NXA(IX,0) + 1 - NXA(IX,NXA(IX,0)) = J2 - RXA(IX,NXA(IX,0)) = R2 - END IF - IF ( NXA(IX,0) .GT. 0 ) THEN - RT = SUM ( RXA(IX,:) ) - IF ( RT .LT. 0.7 ) THEN - NXA(IX,:) = 0 - RXA(IX,:) = 0. - END IF - END IF + J1 = INT(XR) + J2 = J1 + 1 + R2 = MAX ( 0. , XR-REAL(J1) ) + R1 = 1. - R2 + IF ( FLAGLL .AND. ICLOSE.NE.ICLOSE_NONE ) THEN + J1 = 1 + MOD(J1-1,NXI) + J2 = 1 + MOD(J2-1,NXI) END IF - END DO + IF ( J1.GE.1 .AND. J1.LE.NXI .AND. R1.GT.0.05 ) THEN + NXA(IX,0) = NXA(IX,0) + 1 + NXA(IX,NXA(IX,0)) = J1 + RXA(IX,NXA(IX,0)) = R1 + END IF + IF ( J2.GE.1 .AND. J2.LE.NXI .AND. R2.GT.0.05 ) THEN + NXA(IX,0) = NXA(IX,0) + 1 + NXA(IX,NXA(IX,0)) = J2 + RXA(IX,NXA(IX,0)) = R2 + END IF + IF ( NXA(IX,0) .GT. 0 ) THEN + RT = SUM ( RXA(IX,:) ) + IF ( RT .LT. 0.7 ) THEN + NXA(IX,:) = 0 + RXA(IX,:) = 0. + END IF + END IF + END IF + END DO ! ELSE ! @@ -1322,45 +1413,45 @@ XFL = X0 + REAL(IX-1)*SX - 0.5*SX XFR = X0 + REAL(IX-1)*SX + 0.5*SX IF ( FLAGLL ) THEN - IXC = 1 + NINT ( MOD ( & - 1080.+X0+REAL(IX-1)*SX-X0I , 360. ) / SXI ) - IXS0 = IXC - 1 - MXA/2 - IXSN = IXC + 1 + MXA/2 - ELSE - IXC = NINT ( 1. + ( X0+REAL(IX-1)*SX - X0I ) / SXI ) - IXS0 = MAX ( 1 , IXC - 1 - MXA/2 ) - IXSN = MIN ( NXI , IXC + 1 + MXA/2 ) - END IF + IXC = 1 + NINT ( MOD ( & + 1080.+X0+REAL(IX-1)*SX-X0I , 360. ) / SXI ) + IXS0 = IXC - 1 - MXA/2 + IXSN = IXC + 1 + MXA/2 + ELSE + IXC = NINT ( 1. + ( X0+REAL(IX-1)*SX - X0I ) / SXI ) + IXS0 = MAX ( 1 , IXC - 1 - MXA/2 ) + IXSN = MIN ( NXI , IXC + 1 + MXA/2 ) + END IF DO J=IXS0, IXSN - JJ=J + JJ=J IF ( FLAGLL ) THEN - IF ( ICLOSE.NE.ICLOSE_NONE ) JJ = 1 + MOD(J-1,NXI) - IF ( JJ.LT.1 .OR. JJ.GT. NXI ) CYCLE - IXC = NINT((0.5*(XFL+XFR)-X0I-REAL(JJ-1)*SXI)/360.) - IF ( IXC .NE. 0 ) THEN - XFL = XFL - REAL(IXC) * 360. - XFR = XFR - REAL(IXC) * 360. - END IF - ELSE - JJ = J + IF ( ICLOSE.NE.ICLOSE_NONE ) JJ = 1 + MOD(J-1,NXI) + IF ( JJ.LT.1 .OR. JJ.GT. NXI ) CYCLE + IXC = NINT((0.5*(XFL+XFR)-X0I-REAL(JJ-1)*SXI)/360.) + IF ( IXC .NE. 0 ) THEN + XFL = XFL - REAL(IXC) * 360. + XFR = XFR - REAL(IXC) * 360. END IF + ELSE + JJ = J + END IF XSL = MAX ( XFL , X0I + REAL(JJ-1)*SXI - 0.5*SXI ) XSR = MIN ( XFR , X0I + REAL(JJ-1)*SXI + 0.5*SXI ) R1 = MAX ( 0. , XSR - XSL ) / SX IF ( R1 .GT. 0 ) THEN - NXA(IX,0) = NXA(IX,0) + 1 - NXA(IX,NXA(IX,0)) = JJ - RXA(IX,NXA(IX,0)) = R1 - END IF - END DO - IF ( NXA(IX,0) .GT. 0 ) THEN - RT = SUM ( RXA(IX,:) ) - IF ( RT .LT. 0.7 ) THEN - NXA(IX,:) = 0 - RXA(IX,:) = 0. - END IF + NXA(IX,0) = NXA(IX,0) + 1 + NXA(IX,NXA(IX,0)) = JJ + RXA(IX,NXA(IX,0)) = R1 END IF END DO + IF ( NXA(IX,0) .GT. 0 ) THEN + RT = SUM ( RXA(IX,:) ) + IF ( RT .LT. 0.7 ) THEN + NXA(IX,:) = 0 + RXA(IX,:) = 0. + END IF + END IF + END DO ! END IF ! @@ -1369,9 +1460,9 @@ !/T1 IX, NXA(IX,1:MXA), RXA(IX,1:MXA), SUM(RXA(IX,1:MXA)) !/T1 END DO ! -! 2.b Interpolation / averaging data for Y axis +! 2.b.2 Interpolation / averaging data for Y axis ! - IF ( SY/SYI .LT. 1.0001 ) THEN + IF ( SY/SYI .LT. 1.0001 ) THEN MYA = 2 ELSE MYA = 2 + INT(SY/SYI) @@ -1382,38 +1473,38 @@ !/T1 WRITE (FORMAT1,'(A,I2,A,I2,A)') "'(10X,",MYA+1,'I5,',MYA+1,"F6.2)'" !/T1 WRITE (MDST,9021) NY, MYA ! - ALLOCATE ( NYA(NY,0:MYA) , RYA(NY,MYA) ) - NYA = 0 - RYA = 0. + ALLOCATE ( NYA(NY,0:MYA) , RYA(NY,MYA) ) + NYA = 0 + RYA = 0. ! - IF ( MYA .EQ. 2 ) THEN + IF ( MYA .EQ. 2 ) THEN ! DO IY=1, NY YR = 1. + ( Y0+REAL(IY-1)*SY - Y0I ) / SYI IF ( YR.GT.0. ) THEN - J1 = INT(YR) - J2 = J1 + 1 - R2 = MAX ( 0. , YR-REAL(J1) ) - R1 = 1. - R2 - IF ( J1.GE.1 .AND. J1.LE.NYI .AND. R1.GT.0.05 ) THEN - NYA(IY,0) = NYA(IY,0) + 1 - NYA(IY,NYA(IY,0)) = J1 - RYA(IY,NYA(IY,0)) = R1 - END IF - IF ( J2.GE.1 .AND. J2.LE.NYI .AND. R2.GT.0.05 ) THEN - NYA(IY,0) = NYA(IY,0) + 1 - NYA(IY,NYA(IY,0)) = J2 - RYA(IY,NYA(IY,0)) = R2 - END IF - IF ( NYA(IY,0) .GT. 0 ) THEN - RT = SUM ( RYA(IY,:) ) - IF ( RT .LT. 0.7 ) THEN - NYA(IY,:) = 0 - RYA(IY,:) = 0. - END IF - END IF + J1 = INT(YR) + J2 = J1 + 1 + R2 = MAX ( 0. , YR-REAL(J1) ) + R1 = 1. - R2 + IF ( J1.GE.1 .AND. J1.LE.NYI .AND. R1.GT.0.05 ) THEN + NYA(IY,0) = NYA(IY,0) + 1 + NYA(IY,NYA(IY,0)) = J1 + RYA(IY,NYA(IY,0)) = R1 END IF - END DO + IF ( J2.GE.1 .AND. J2.LE.NYI .AND. R2.GT.0.05 ) THEN + NYA(IY,0) = NYA(IY,0) + 1 + NYA(IY,NYA(IY,0)) = J2 + RYA(IY,NYA(IY,0)) = R2 + END IF + IF ( NYA(IY,0) .GT. 0 ) THEN + RT = SUM ( RYA(IY,:) ) + IF ( RT .LT. 0.7 ) THEN + NYA(IY,:) = 0 + RYA(IY,:) = 0. + END IF + END IF + END IF + END DO ! ELSE ! @@ -1428,21 +1519,24 @@ YSR = MIN ( YFR , Y0I + REAL(J-1)*SYI + 0.5*SYI ) R1 = MAX ( 0. , YSR - YSL ) / SY IF ( R1 .GT. 0 ) THEN - NYA(IY,0) = NYA(IY,0) + 1 - NYA(IY,NYA(IY,0)) = J - RYA(IY,NYA(IY,0)) = R1 - END IF - END DO - IF ( NYA(IY,0) .GT. 0 ) THEN - RT = SUM ( RYA(IY,:) ) - IF ( RT .LT. 0.7 ) THEN - NYA(IY,:) = 0 - RYA(IY,:) = 0. - END IF + NYA(IY,0) = NYA(IY,0) + 1 + NYA(IY,NYA(IY,0)) = J + RYA(IY,NYA(IY,0)) = R1 END IF END DO + IF ( NYA(IY,0) .GT. 0 ) THEN + RT = SUM ( RYA(IY,:) ) + IF ( RT .LT. 0.7 ) THEN + NYA(IY,:) = 0 + RYA(IY,:) = 0. + END IF + END IF + END DO ! END IF +! + END IF + ! !/T1 DO, IY=1, NY !/T1 IF ( NYA(IY,0) .GT. 0 ) WRITE (MDST,FORMAT1) & @@ -1455,6 +1549,7 @@ MAP2 = .FALSE. FACTOR = 1. ! + DO IX=1, NX IF ( NXA(IX,0) .EQ. 0 ) CYCLE DO IY=1, NY @@ -1501,6 +1596,7 @@ END IF END DO END DO + ! ! 2.d Reconcile mask differences ! @@ -1567,6 +1663,7 @@ EXIT END IF END DO + ! ! 3. End of routine -------------------------------------------------- / ! @@ -1609,6 +1706,8 @@ !/ specify index closure for a grid. ( version 3.14 ) !/ (T. J. Campbell, NRL) !/ 11-May-2015 : Updates to 2-ways nestings for UG ( version 5.08 ) +!/ 01-Jul-2019 : Generalize output to curv grids ( version 7.XX ) +!/ (R. Padilla-Hernandez, J.H. Alves, EMC/NOAA) !/ ! 1. Purpose : ! @@ -1672,7 +1771,8 @@ !/ USE W3GDATMD, ONLY: NX, NY, X0, Y0, SX, SY, GRIDS, FLAGLL, & GTYPE, RLGTYPE, CLGTYPE, UNGTYPE, & - ICLOSE_NONE, ICLOSE_SMPL, ICLOSE_TRPL + ICLOSE_NONE, ICLOSE_SMPL, ICLOSE_TRPL, & + HPFAC, HQFAC, XGRD, YGRD USE WMMDATMD, ONLY: IMPROC, NMPERR, NMPSCR, MDST, MDSE, MDSO, & MDSS !/ @@ -1693,17 +1793,30 @@ IYFN, IXS0, IXSN, IYS0, IYSN, IXS, & MXA, MYA, J, J1, J2, IXC, IYC, JJ, & JX, JY + + INTEGER :: NPOIX, NPOIY, I, CURVI !RP + !/S INTEGER, SAVE :: IENT = 0 INTEGER, ALLOCATABLE :: NXA(:,:), NYA(:,:) REAL :: XR, YR, R1, R2, RT, XFL, XFR, XSL, & XSR, YFL, YFR, YSL, YSR REAL :: FDL, WTOT, WL + + REAL :: LONC, LATC, SXYC, & + XDI, DTOLER, VALUEINTER + REAL, ALLOCATABLE :: RXA(:,:), RYA(:,:) + + LOGICAL :: MAP1(NX,NY), MAP2(NX,NY), & MAP3(NX,NY), FLAGUP ! INTEGER, POINTER :: NXI, NYI, MAP(:,:), MAPI(:,:) - REAL, POINTER :: X0I, Y0I, SXI, SYI + + REAL, POINTER :: XGRDI(:,:), YGRDI(:,:), XGRDC(:,:), & + YGRDC(:,:), HPFACI(:,:), HQFACI(:,:) !RP + + REAL, POINTER :: X0I, Y0I, SXI, SYI !RPXXX , HPFACI, HQFACI INTEGER, POINTER :: ICLOSE !/T1 CHARACTER(LEN=17) :: FORMAT1 !/ @@ -1712,13 +1825,6 @@ ! 0.a Subroutine tracing and test output ! !/S CALL STRACE (IENT, 'WMUPDS') -! - IF ( GRIDS(IMOD)%GTYPE .EQ. CLGTYPE .OR. & - GRIDS(JMOD)%GTYPE .EQ. CLGTYPE ) THEN - WRITE (MDSE,'(/2A)') ' *** ERROR WMUPDS: ', & - 'CURVILINEAR GRID SUPPORT NOT YET IMPLEMENTED ***' - CALL EXTCDE ( 999 ) - END IF ! NXI => GRIDS(JMOD)%NX NYI => GRIDS(JMOD)%NY @@ -1726,16 +1832,17 @@ Y0I => GRIDS(JMOD)%Y0 SXI => GRIDS(JMOD)%SX SYI => GRIDS(JMOD)%SY + HPFACI => GRIDS(JMOD)%HPFAC + HQFACI => GRIDS(JMOD)%HQFAC MAP => GRIDS(IMOD)%MAPSTA MAPI => GRIDS(JMOD)%MAPSTA ICLOSE => GRIDS(JMOD)%ICLOSE - +! IF ( ICLOSE .EQ. ICLOSE_TRPL ) THEN IF ( IMPROC.EQ.NMPERR ) WRITE(MDSE,*)'SUBROUTINE WMUPDS IS'// & ' NOT YET ADAPTED FOR TRIPOLE GRIDS. STOPPING NOW.' CALL EXTCDE ( 1 ) END IF - ! !/T WRITE (MDST,9000) IMOD, NX, NY, X0, Y0, SX, SY, & !/T JMOD, NXI, NYI, X0I, Y0I, SXI, SYI, UNDEF @@ -1744,8 +1851,15 @@ ! FD = UNDEF ! + CURVI=0 + IF ( GRIDS(IMOD)%GTYPE .EQ. CLGTYPE .OR. & + GRIDS(JMOD)%GTYPE .EQ. CLGTYPE ) THEN + CURVI=1 + END IF + ! 1. Case of identical resolution and coinciding grids --------------- / ! + IF(CURVI .EQ. 0) THEN IF ( ABS(SX/SXI-1.) .LT. 1.E-3 .AND. & ABS(SY/SYI-1.) .LT. 1.E-3 .AND. & ABS(MOD((ABS(X0-X0I))/SX+0.5,1.)-0.5) .LT. 1.E-2 .AND. & @@ -1753,57 +1867,104 @@ ! ! 1.a Offsets ! - IXO = NINT((X0-X0I)/SX) + IXO = NINT((X0-X0I)/SX) ! - IF ( FLAGLL ) THEN - IXF0 = 1 - IXFN = NX - IXS0 = -999 - IXSN = -999 - ELSE - IXF0 = MAX ( 1 , 1-IXO ) - IXFN = MIN ( NX , NXI-IXO ) - IXS0 = MAX ( 1 , 1+IXO ) - IXSN = IXS0 + IXFN - IXF0 - END IF + IF ( FLAGLL ) THEN + IXF0 = 1 + IXFN = NX + IXS0 = -999 + IXSN = -999 + ELSE + IXF0 = MAX ( 1 , 1-IXO ) + IXFN = MIN ( NX , NXI-IXO ) + IXS0 = MAX ( 1 , 1+IXO ) + IXSN = IXS0 + IXFN - IXF0 + END IF ! - IYO = NINT((Y0-Y0I)/SY) + IYO = NINT((Y0-Y0I)/SY) ! - IYF0 = MAX ( 1 , 1-IYO ) - IYFN = MIN ( NY , NYI-IYO ) - IYS0 = MAX ( 1 , 1+IYO ) - IYSN = IYS0 + IYFN - IYF0 + IYF0 = MAX ( 1 , 1-IYO ) + IYFN = MIN ( NY , NYI-IYO ) + IYS0 = MAX ( 1 , 1+IYO ) + IYSN = IYS0 + IYFN - IYF0 ! !/T WRITE (MDST,9010) IXO, IYO, IXF0, IXFN, IYF0, IYFN, & !/T IXS0, IXSN, IYS0, IYSN ! ! 1.b Fill arrays for sea points only ! - IF ( FLAGLL ) THEN - DO IX=IXF0, IXFN - IXS = 1 + NINT ( MOD ( & + IF ( FLAGLL ) THEN + DO IX=IXF0, IXFN + IXS = 1 + NINT ( MOD ( & 1080.+X0+(REAL(IX)-0.5)*SX-X0I , 360. ) / SX - 0.5 ) - IF ( IXS .GT. NXI ) CYCLE - FD(IX,IYF0:IYFN) = FDI(IXS,IYS0:IYSN) - END DO - ELSE - DO IX=IXF0, IXFN - IXS = IX + IXO - FD(IX,IYF0:IYFN) = FDI(IXS,IYS0:IYSN) - END DO - END IF + IF ( IXS .GT. NXI ) CYCLE + FD(IX,IYF0:IYFN) = FDI(IXS,IYS0:IYSN) + END DO + ELSE + DO IX=IXF0, IXFN + IXS = IX + IXO + FD(IX,IYF0:IYFN) = FDI(IXS,IYS0:IYSN) + END DO + END IF ! ! 1.c Return to calling routine ! - RETURN + RETURN ! - END IF + END IF + END IF !CURVI ! ! 2. General case --------------------------------------------------- / ! -! 2.a Interpolation / averaging data for X axis ! - IF ( SX/SXI .LT. 1.0001 ) THEN +! 2.a Curvilinear grids +! + IF ( GRIDS(IMOD)%GTYPE .EQ. CLGTYPE .OR. & + GRIDS(JMOD)%GTYPE .EQ. CLGTYPE ) THEN + +! 2.a.1 Getting the info for reg and curvi grids + XGRDI => GRIDS(JMOD)%XGRD !LONS FOR INPUT FIELD + YGRDI => GRIDS(JMOD)%YGRD !LATS FOR INPUT FIELD + +! GETTING THE INFO FOR THE CURVILINEAR GRID + XGRDC => GRIDS(IMOD)%XGRD !LONS FOR CURVI GRID + YGRDC => GRIDS(IMOD)%YGRD !LATS FOR CURVI GRID + !HPFAC => GRIDS(IMOD)%HPFAC !DELTAS IN LON FOR CURVI GRID + !HQFAC => GRIDS(IMOD)%HQFAC !DELTAS IN LAT FOR CURVI GRID + +! FOR NOW ONLY INTERPOLATION NOT AVERAGING THEN MXA=2 + MXA=2 + MYA=2 + ALLOCATE ( NXA(NX,0:MXA) , RXA(NX,MXA) ) + NXA = 0 + RXA = 0. + ALLOCATE ( NYA(NY,0:MYA) , RYA(NY,MYA) ) + NYA = 0 + RYA = 0. +! +!IS THE TOLERANCE USED TO DETERMINE IF TWO VALUES ARE EQUAL IN LOCATION + DTOLER = 1E-5 +! 2.a.2 running over the curvilinear grid + DO J=1,NY + DO I=1,NX + LONC=XGRDC(J,I) !LON FOR EVERY CURVL GRID POINT + LATC=YGRDC(J,I) !LAT FOR EVERY CURVL GRID POINT + !SXC =HPFAC(J,I) !DELTA IN LON FOR CURVI GRID + !SYC =HQFAC(J,I) !DELTA IN LAT FOR CURVI GRID + + VALUEINTER=INTERPOLATE(NXI,XGRDI(1,:),NYI,YGRDI(:,1), & + FDI,LONC,LATC,DTOLER) + FD(I,J)=VALUEINTER + END DO !END I + END DO !END J + + ELSE +! +! 2.b Rectilinear grids +! +! 2.b.1 Interpolation / averaging data for X axis +! + IF ( SX/SXI .LT. 1.0001 ) THEN MXA = 2 ELSE MXA = 2 + INT(SX/SXI) @@ -1814,47 +1975,48 @@ !/T1 WRITE (FORMAT1,'(A,I2,A,I2,A)') "'(10X,",MXA+1,'I5,',MXA+1,"F6.2)'" !/T1 WRITE (MDST,9021) NX, MXA ! - ALLOCATE ( NXA(NX,0:MXA) , RXA(NX,MXA) ) - NXA = 0 - RXA = 0. + ALLOCATE ( NXA(NX,0:MXA) , RXA(NX,MXA) ) + NXA = 0 + RXA = 0. ! - IF ( MXA .EQ. 2 ) THEN +! + IF ( MXA .EQ. 2 ) THEN ! DO IX=1, NX IF ( FLAGLL ) THEN - XR = 1. + MOD & + XR = 1. + MOD & ( 1080.+X0+REAL(IX-1)*SX-X0I , 360. ) / SXI - ELSE + ELSE XR = 1. + ( X0+REAL(IX-1)*SX - X0I ) / SXI - END IF + END IF IF ( XR.GT.0. ) THEN - J1 = INT(XR) - J2 = J1 + 1 - R2 = MAX ( 0. , XR-REAL(J1) ) - R1 = 1. - R2 - IF ( FLAGLL .AND. ICLOSE.NE.ICLOSE_NONE ) THEN - J1 = 1 + MOD(J1-1,NXI) - J2 = 1 + MOD(J2-1,NXI) - END IF - IF ( J1.GE.1 .AND. J1.LE.NXI .AND. R1.GT.0.05 ) THEN - NXA(IX,0) = NXA(IX,0) + 1 - NXA(IX,NXA(IX,0)) = J1 - RXA(IX,NXA(IX,0)) = R1 - END IF - IF ( J2.GE.1 .AND. J2.LE.NXI .AND. R2.GT.0.05 ) THEN - NXA(IX,0) = NXA(IX,0) + 1 - NXA(IX,NXA(IX,0)) = J2 - RXA(IX,NXA(IX,0)) = R2 - END IF - IF ( NXA(IX,0) .GT. 0 ) THEN - RT = SUM ( RXA(IX,:) ) - IF ( RT .LT. 0.7 ) THEN - NXA(IX,:) = 0 - RXA(IX,:) = 0. - END IF - END IF + J1 = INT(XR) + J2 = J1 + 1 + R2 = MAX ( 0. , XR-REAL(J1) ) + R1 = 1. - R2 + IF ( FLAGLL .AND. ICLOSE.NE.ICLOSE_NONE ) THEN + J1 = 1 + MOD(J1-1,NXI) + J2 = 1 + MOD(J2-1,NXI) END IF - END DO + IF ( J1.GE.1 .AND. J1.LE.NXI .AND. R1.GT.0.05 ) THEN + NXA(IX,0) = NXA(IX,0) + 1 + NXA(IX,NXA(IX,0)) = J1 + RXA(IX,NXA(IX,0)) = R1 + END IF + IF ( J2.GE.1 .AND. J2.LE.NXI .AND. R2.GT.0.05 ) THEN + NXA(IX,0) = NXA(IX,0) + 1 + NXA(IX,NXA(IX,0)) = J2 + RXA(IX,NXA(IX,0)) = R2 + END IF + IF ( NXA(IX,0) .GT. 0 ) THEN + RT = SUM ( RXA(IX,:) ) + IF ( RT .LT. 0.7 ) THEN + NXA(IX,:) = 0 + RXA(IX,:) = 0. + END IF + END IF + END IF + END DO ! ELSE ! @@ -1863,44 +2025,44 @@ XFL = X0 + REAL(IX-1)*SX - 0.5*SX XFR = X0 + REAL(IX-1)*SX + 0.5*SX IF ( FLAGLL ) THEN - IXC = 1 + NINT ( MOD ( & + IXC = 1 + NINT ( MOD ( & 1080.+X0+REAL(IX-1)*SX-X0I , 360. ) / SXI ) - IXS0 = IXC - 1 - MXA/2 - IXSN = IXC + 1 + MXA/2 - ELSE - IXC = NINT ( 1. + ( X0+REAL(IX-1)*SX - X0I ) / SXI ) - IXS0 = MAX ( 1 , IXC - 1 - MXA/2 ) - IXSN = MIN ( NXI , IXC + 1 + MXA/2 ) - END IF + IXS0 = IXC - 1 - MXA/2 + IXSN = IXC + 1 + MXA/2 + ELSE + IXC = NINT ( 1. + ( X0+REAL(IX-1)*SX - X0I ) / SXI ) + IXS0 = MAX ( 1 , IXC - 1 - MXA/2 ) + IXSN = MIN ( NXI , IXC + 1 + MXA/2 ) + END IF DO J=IXS0, IXSN IF ( FLAGLL ) THEN - IF ( ICLOSE.NE.ICLOSE_NONE ) JJ = 1 + MOD(J-1,NXI) - IF ( JJ.LT.1 .OR. JJ.GT. NXI ) CYCLE - IXC = NINT((0.5*(XFL+XFR)-X0I-REAL(JJ-1)*SXI)/360.) - IF ( IXC .NE. 0 ) THEN - XFL = XFL - REAL(IXC) * 360. - XFR = XFR - REAL(IXC) * 360. - END IF - ELSE - JJ = J + IF ( ICLOSE.NE.ICLOSE_NONE ) JJ = 1 + MOD(J-1,NXI) + IF ( JJ.LT.1 .OR. JJ.GT. NXI ) CYCLE + IXC = NINT((0.5*(XFL+XFR)-X0I-REAL(JJ-1)*SXI)/360.) + IF ( IXC .NE. 0 ) THEN + XFL = XFL - REAL(IXC) * 360. + XFR = XFR - REAL(IXC) * 360. END IF + ELSE + JJ = J + END IF XSL = MAX ( XFL , X0I + REAL(JJ-1)*SXI - 0.5*SXI ) XSR = MIN ( XFR , X0I + REAL(JJ-1)*SXI + 0.5*SXI ) R1 = MAX ( 0. , XSR - XSL ) / SX IF ( R1 .GT. 0 ) THEN - NXA(IX,0) = NXA(IX,0) + 1 - NXA(IX,NXA(IX,0)) = JJ - RXA(IX,NXA(IX,0)) = R1 - END IF - END DO - IF ( NXA(IX,0) .GT. 0 ) THEN - RT = SUM ( RXA(IX,:) ) - IF ( RT .LT. 0.7 ) THEN - NXA(IX,:) = 0 - RXA(IX,:) = 0. - END IF + NXA(IX,0) = NXA(IX,0) + 1 + NXA(IX,NXA(IX,0)) = JJ + RXA(IX,NXA(IX,0)) = R1 END IF END DO + IF ( NXA(IX,0) .GT. 0 ) THEN + RT = SUM ( RXA(IX,:) ) + IF ( RT .LT. 0.7 ) THEN + NXA(IX,:) = 0 + RXA(IX,:) = 0. + END IF + END IF + END DO ! END IF ! @@ -1909,9 +2071,9 @@ !/T1 IX, NXA(IX,1:MXA), RXA(IX,1:MXA), SUM(RXA(IX,1:MXA)) !/T1 END DO ! -! 2.b Interpolation / averaging data for Y axis +! 2.b.2 Interpolation / averaging data for Y axis ! - IF ( SY/SYI .LT. 1.0001 ) THEN + IF ( SY/SYI .LT. 1.0001 ) THEN MYA = 2 ELSE MYA = 2 + INT(SY/SYI) @@ -1921,38 +2083,39 @@ !/T1 WRITE (FORMAT1,'(A,I2,A,I2,A)') "'(10X,",MYA+1,'I5,',MYA+1,"F6.2)'" !/T1 WRITE (MDST,9021) NY, MYA ! - ALLOCATE ( NYA(NY,0:MYA) , RYA(NY,MYA) ) - NYA = 0 - RYA = 0. + ALLOCATE ( NYA(NY,0:MYA) , RYA(NY,MYA) ) + NYA = 0 + RYA = 0. ! - IF ( MYA .EQ. 2 ) THEN +! + IF ( MYA .EQ. 2 ) THEN ! DO IY=1, NY YR = 1. + ( Y0+REAL(IY-1)*SY - Y0I ) / SYI IF ( YR.GT.0. ) THEN - J1 = INT(YR) - J2 = J1 + 1 - R2 = MAX ( 0. , YR-REAL(J1) ) - R1 = 1. - R2 - IF ( J1.GE.1 .AND. J1.LE.NYI .AND. R1.GT.0.05 ) THEN - NYA(IY,0) = NYA(IY,0) + 1 - NYA(IY,NYA(IY,0)) = J1 - RYA(IY,NYA(IY,0)) = R1 - END IF - IF ( J2.GE.1 .AND. J2.LE.NYI .AND. R2.GT.0.05 ) THEN - NYA(IY,0) = NYA(IY,0) + 1 - NYA(IY,NYA(IY,0)) = J2 - RYA(IY,NYA(IY,0)) = R2 - END IF - IF ( NYA(IY,0) .GT. 0 ) THEN - RT = SUM ( RYA(IY,:) ) - IF ( RT .LT. 0.7 ) THEN - NYA(IY,:) = 0 - RYA(IY,:) = 0. - END IF - END IF + J1 = INT(YR) + J2 = J1 + 1 + R2 = MAX ( 0. , YR-REAL(J1) ) + R1 = 1. - R2 + IF ( J1.GE.1 .AND. J1.LE.NYI .AND. R1.GT.0.05 ) THEN + NYA(IY,0) = NYA(IY,0) + 1 + NYA(IY,NYA(IY,0)) = J1 + RYA(IY,NYA(IY,0)) = R1 END IF - END DO + IF ( J2.GE.1 .AND. J2.LE.NYI .AND. R2.GT.0.05 ) THEN + NYA(IY,0) = NYA(IY,0) + 1 + NYA(IY,NYA(IY,0)) = J2 + RYA(IY,NYA(IY,0)) = R2 + END IF + IF ( NYA(IY,0) .GT. 0 ) THEN + RT = SUM ( RYA(IY,:) ) + IF ( RT .LT. 0.7 ) THEN + NYA(IY,:) = 0 + RYA(IY,:) = 0. + END IF + END IF + END IF + END DO ! ELSE ! @@ -1966,22 +2129,24 @@ YSL = MAX ( YFL , Y0I + REAL(J-1)*SYI - 0.5*SYI ) YSR = MIN ( YFR , Y0I + REAL(J-1)*SYI + 0.5*SYI ) R1 = MAX ( 0. , YSR - YSL ) / SY - IF ( R1 .GT. 0 ) THEN - NYA(IY,0) = NYA(IY,0) + 1 - NYA(IY,NYA(IY,0)) = J - RYA(IY,NYA(IY,0)) = R1 - END IF - END DO + IF ( R1 .GT. 0 ) THEN + NYA(IY,0) = NYA(IY,0) + 1 + NYA(IY,NYA(IY,0)) = J + RYA(IY,NYA(IY,0)) = R1 + END IF + END DO IF ( NYA(IY,0) .GT. 0 ) THEN - RT = SUM ( RYA(IY,:) ) - IF ( RT .LT. 0.7 ) THEN - NYA(IY,:) = 0 - RYA(IY,:) = 0. - END IF + RT = SUM ( RYA(IY,:) ) + IF ( RT .LT. 0.7 ) THEN + NYA(IY,:) = 0 + RYA(IY,:) = 0. END IF - END DO + END IF + END DO ! END IF +! + END IF ! !/T1 DO, IY=1, NY !/T1 IF ( NYA(IY,0) .GT. 0 ) WRITE (MDST,FORMAT1) & @@ -2107,6 +2272,427 @@ !/ End of WMUPDS ----------------------------------------------------- / !/ END SUBROUTINE WMUPDS +!======================================================================= + + FUNCTION XYCURVISEARCH(LENGTH, ARRAY, VALUE, DELTA) +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | H. L. Tolman | +!/ | FORTRAN 90 | +!/ | Last update : 20-Jan-2017 | +!/ +-----------------------------------+ +!/ (R. Padilla-Hernandez, EMC/NOAA) +!/ +!/ 01-Jul-2019 : Origination. ( version 7.XX ) +!/ 01-Jul-2019 : Generalize output to curv grids ( version 7.XX ) +!/ +!/ Copyright 2009 National Weather Service (NWS), +!/ National Oceanic and Atmospheric Administration. All rights +!/ reserved. WAVEWATCH III is a trademark of the NWS. +!/ No unauthorized use without permission. +!/ +! 1. Purpose : +! +! Search the location of a point(XC,YC) in a regular grid +! +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! LENGTH Int. Input Dimension of input array +! ARRAY Int. Input 1D array for lats or longs +! VALUE Real Input Value to be located in ARRAY +! DELTA Real Input Threshold to determine if two values +! are equal +! ---------------------------------------------------------------- +! +! Internal parameters +! ---------------------------------------------------------------- +! +! ---------------------------------------------------------------- +! +! 3. Subroutines and functions : +! +! Name Type Scope Description +! ---------------------------------------------------------------- +! XYCURVISEARCH Function Find indexes See bellow +! ---------------------------------------------------------------- +! +! 4. Subroutines and functions used : +! +! - +! +! 5. Remarks : +! GIVEN AN ARRAY AND A VALUE TO SEARCH, IT RETURNS THE INDEX OF +! THE ELEMENT ON THE RECTILINEAR GRID THAT IS CLOSEST TO, BUT +! LESS THAN, THE GIVEN VALUE. +! "DELTA" IS THE THERSHOLD USED TO DETERMINE IF TWO VALUES ARE EQUAL +! IF ( ABS(X1 - X2) <= DELTA) THEN +! ASSUME X1 = X2 +! ENDIF +! +! 6. Switches : +! - +! +! 7. Source code : + + INTEGER, INTENT(IN) :: LENGTH + REAL, DIMENSION(LENGTH), INTENT(IN) :: ARRAY + REAL, INTENT(IN) :: VALUE + REAL, INTENT(IN), OPTIONAL :: DELTA + + INTEGER :: XYCURVISEARCH + + INTEGER :: LEFT, MIDDLE, RIGHT + + + LEFT = 1 + RIGHT = LENGTH + DO + IF (LEFT > RIGHT) THEN + EXIT + ENDIF + MIDDLE = NINT((LEFT+RIGHT) / 2.0) + IF ( ABS(ARRAY(MIDDLE) - VALUE) <= DELTA) THEN + XYCURVISEARCH = MIDDLE + RETURN + ELSE IF (ARRAY(MIDDLE) > VALUE) THEN + RIGHT = MIDDLE - 1 + ELSE + LEFT = MIDDLE + 1 + END IF + END DO + XYCURVISEARCH = RIGHT + + END FUNCTION XYCURVISEARCH +! End of function -------------------------------------------------- / + + REAL FUNCTION INTERPOLATE(X_LEN,XARRAY,Y_LEN,YARRAY,FUNC, & + X,Y,DELTA) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | H. L. Tolman | +!/ | FORTRAN 90 | +!/ | Last update : 25-July-2019 | +!/ +-----------------------------------+ +!/ +!/ (R. Padilla-Hernandez, EMC/NOAA) +!/ +!/ 29-July-2019 : ( version 7.XX ) +!/ +! 1. Purpose : +! +! Perform interpolation from regular to curvilinear grid for a +! scalar field. THIS FUNCTION USES BILINEAR INTERPOLATION TO +! ESTIMATE THE VALUE OF A FUNCTION F AT POINT (X,Y) F IS ASSUMED +! TO BE ON A REGULAR GRID, WITH THE GRID X VALUES SPECIFIED BY +! XARRAY WITH DIMENSION X_LEN AND THE GRID Y VALUES SPECIFIED BY +! YARRAY WITH DIMENSION Y_LEN +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! X_LEN Int. Dimension in X +! XARRAY Int. 1D array for Longitudes +! Y_LEN Int. Dimension in Y +! YARRAY Int. 1D array for Latitudes +! FUNC Int. 1D Field +! X,Y Real Long-Lat for point in the curv grid +! DELTA Real Threshold to determine if two values are equal +! ---------------------------------------------------------------- +! +! Internal parameters +! ---------------------------------------------------------------- +! INX Int. Index in X on the rectiliniear grid that is +! closest to, but less than, the given value for a +! point in the curvilinear grid. +! JNX Int. Idem INX for for Y. +! X1,Y1 Real (Long, Lat) left-bottom corner for the square in +! regular grid, where the given value for the point +! in the curvilinear grid lies +! X2,Y2 Real (Long, Lat) right-upper corner for the square in +! regular grid, where the given value for the point +! in the curvilinear grid lies +! ---------------------------------------------------------------- +! +! 3. Subroutines used : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! XYCURVISEARCH Func. wmupdtmd Look for indexes in 1D array. +! ---------------------------------------------------------------- +! +! 4. Called by : +! +! Main program in which it is contained. +! +! 5. Error messages : +! +! None. +! +! 6. Remarks : +! +! - +! +! 7. Structure : +! +! See source code. +! +! 8. Switches : +! +! - +! +! 9. Source code : + ! THIS FUNCTION USES BILINEAR INTERPOLATION TO ESTIMATE THE VALUE + ! OF A FUNCTION F AT POINT (X,Y) + ! F IS ASSUMED TO BE ON A REGULAR GRID, WITH THE GRID X VALUES SPECIFIED + ! BY XARRAY WITH DIMENSION X_LEN + ! AND THE GRID Y VALUES SPECIFIED BY YARRAY WITH DIMENSION Y_LEN +! + INTEGER, INTENT(IN) :: X_LEN, Y_LEN + REAL, DIMENSION(X_LEN), INTENT(IN) :: XARRAY + REAL, DIMENSION(Y_LEN), INTENT(IN) :: YARRAY + REAL, DIMENSION(X_LEN, Y_LEN), INTENT(IN) :: FUNC + REAL, INTENT(IN) :: X,Y + REAL, INTENT(IN), OPTIONAL :: DELTA + REAL :: DENOM, X1, X2, Y1, Y2 + INTEGER :: INX,JNX + + INX = XYCURVISEARCH(X_LEN, XARRAY, X, DELTA) + JNX = XYCURVISEARCH(Y_LEN, YARRAY, Y, DELTA) +! + IF (INX .GE. X_LEN) THEN + INX=INX-1 + END IF + IF (JNX .GE. Y_LEN) THEN + JNX=JNX-1 + END IF +! + X1 = XARRAY(INX) + X2 = XARRAY(INX+1) + Y1 = YARRAY(JNX) + Y2 = YARRAY(JNX+1) +! + DENOM = (X2 - X1)*(Y2 - Y1) +! + INTERPOLATE = (FUNC(INX,JNX)*(X2-X)*(Y2-Y) + & + FUNC(INX+1,JNX)*(X-X1)*(Y2-Y) + & + FUNC(INX,JNX+1)*(X2-X)*(Y-Y1)+ & + FUNC(INX+1, JNX+1)*(X-X1)*(Y-Y1))/DENOM +! + END FUNCTION INTERPOLATE + +!======================================================================== + + SUBROUTINE INTERPOLATE2D(X_LEN,XARRAY,Y_LEN,YARRAY,FUNC1, & + FUNC2,X,Y,DELTA,VAL1,VAL2) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | H. L. Tolman | +!/ | FORTRAN 90 | +!/ | Last update : 25-July-2019 | +!/ +-----------------------------------+ +!/ +!/ (R. Padilla-Hernandez, EMC/NOAA) +!/ +!/ 29-July-2019 : ( version 7.XX ) +!/ +! 1. Purpose : +! +! Perform interpolation from regular to curvilinear grid for a +! Vector field. THIS FUNCTION USES BILINEAR INTERPOLATION TO +! ESTIMATE THE VALUE OF A FUNCTION F AT POINT (X,Y) F IS ASSUMED +! TO BE ON A REGULAR GRID, WITH THE GRID X VALUES SPECIFIED BY +! XARRAY WITH DIMENSION X_LEN AND THE GRID Y VALUES SPECIFIED BY +! YARRAY WITH DIMENSION Y_LEN +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! X_LEN Int. Dimension in X +! XARRAY Int. 1D array for Longitudes +! Y_LEN Int. Dimension in Y +! YARRAY Int. 1D array for Latitudes +! FUNC1 Int. First componen of the 2D array +! FUNC2 Int. Second component of the 2D array +! X,Y Real Long-Lat for point in the curv grid +! DELTA Real Threshold to determine if two values are equal +! VAL1,VAL2 Real Interpolated values at a point in curvi grid +! ---------------------------------------------------------------- +! +! Internal parameters +! ---------------------------------------------------------------- +! INX Int. Index in X on the rectiliniear grid that is +! closest to, but less than, the given value for a +! point in the curvilinear grid. +! JNX Int. Idem INX for for Y. +! X1,Y1 Real (Long, Lat) left-bottom corner for the square in +! regular grid, where the given value for the point +! in the curvilinear grid lies +! X2,Y2 Real (Long, Lat) right-upper corner for the square in +! regular grid, where the given value for the point +! in the curvilinear grid lies +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! XYCURVISEARCH Func. wmupdtmd Look for indexes in 1D array. +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! Main program in which it is contained. +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! - +! +! 8. Structure : +! +! See source code. +! +! 9. Switches : +! +! - +! +! 10. Source code : +! + INTEGER, INTENT(IN) :: X_LEN, Y_LEN + REAL, DIMENSION(X_LEN), INTENT(IN) :: XARRAY + REAL, DIMENSION(Y_LEN), INTENT(IN) :: YARRAY + REAL, DIMENSION(X_LEN, Y_LEN), INTENT(IN) :: FUNC1, FUNC2 + REAL, INTENT(IN) :: X,Y + REAL, INTENT(IN), OPTIONAL :: DELTA + REAL, INTENT(OUT) :: VAL1,VAL2 + + REAL :: DENOM, X1, X2, Y1, Y2,C1,C2,C3,C4 + INTEGER :: INX,JNX + + INX = XYCURVISEARCH(X_LEN, XARRAY, X, DELTA) + JNX = XYCURVISEARCH(Y_LEN, YARRAY, Y, DELTA) +! + IF (INX .GE. X_LEN) THEN + INX=INX-1 + END IF + IF (JNX .GE. Y_LEN) THEN + JNX=JNX-1 + END IF +! + X1 = XARRAY(INX) + X2 = XARRAY(INX+1) + Y1 = YARRAY(JNX) + Y2 = YARRAY(JNX+1) +! + DENOM = (X2 - X1)*(Y2 - Y1) + C1=(X2-X)*(Y2-Y) + C2=(X-X1)*(Y2-Y) + C3=(X2-X)*(Y-Y1) + C4=(X-X1)*(Y-Y1) + VAL1 = (FUNC1(INX,JNX) *C1 + FUNC1(INX+1,JNX) *C2 + & + FUNC1(INX,JNX+1)*C3 + FUNC1(INX+1,JNX+1)*C4)/DENOM + + VAL2 = (FUNC2(INX,JNX) *C1 + FUNC2(INX+1,JNX) *C2 + & + FUNC2(INX,JNX+1)*C3 + FUNC2(INX+1,JNX+1)*C4)/DENOM +! + END SUBROUTINE INTERPOLATE2D +!==================================================================== + + REAL FUNCTION AVERAGING(X_LEN,XARRAY,Y_LEN,YARRAY,FUNC, & + X,Y,NPX,NPY) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | H. L. Tolman | +!/ | FORTRAN 90 | +!/ | Last update : 25-July-2019 | +!/ +-----------------------------------+ +!/ +!/ (R. Padilla-Hernandez, EMC/NOAA) +!/ +!/ 29-July-2019 : ( version 7.XX ) +!/ + + ! THIS FUNCTION USES AVERAGING TO ESTIMATE THE VALUE + ! OF A FUNCTION F AT POINT (X,Y) + ! F IS ASSUMED TO BE ON A REGULAR GRID, WITH THE GRID X VALUES SPECIFIED + ! BY XARRAY WITH DIMENSION X_LEN + ! AND THE GRID Y VALUES SPECIFIED BY YARRAY WITH DIMENSION Y_LEN + ! ININI AND INEND, THE NUMBER OF POINT TO BE TAKEN INTO ACCOUNT + ! IN X AND Y + + !IMPLICIT NONE + INTEGER X_LEN, Y_LEN, INXEND, INYEND, NPX,NPY + REAL, DIMENSION(X_LEN) :: XARRAY + REAL, DIMENSION(Y_LEN) :: YARRAY + REAL, DIMENSION(X_LEN, Y_LEN) :: FUNC + REAL :: X,Y + + REAL :: X1, X2, Y1, Y2, SUM + INTEGER :: INX,INY, INITIALX, INITIALY + INTEGER :: INFINX, INFINY,ICOUNT,I,J + + INX = XYCURVISEARCH(X_LEN, XARRAY, X) + INY = XYCURVISEARCH(Y_LEN, YARRAY, Y) + + X1 = XARRAY(INX) + !X2 = XARRAY(INX+1) + + Y1 = YARRAY(INY) + !Y2 = YARRAY(INY+1) + + INXEND=NPX+1 + INYEND=NPY+1 + ! LETS FIX THE INITIAL INDEX =1 NEGATIVE INDEXES IN LONG + IF (INX-NPX .LT. 1) THEN + INITIALX=1 + ELSE + INITIALX=INX-NPX + END IF + ! LETS FIX THE FINAL INDEX =NX IF LOOKING FOR INDEXES > NX + IF (INX+INXEND .GT. X_LEN) THEN + INFINX=X_LEN + ELSE + INFINX=INX+INXEND + END IF + ! LETS FIX THE INITIAL INDEX =1 FOR NEGATIVE INDEXES FOR LAT + IF (INY-NPY .LT. 1) THEN + INITIALY=1 + ELSE + INITIALY=INY-NPY + END IF + ! LETS FIX THE FINAL INDEX =NX IF LOOKING FOR INDEXES > NX + IF (INY+INYEND .GT. Y_LEN) THEN + INFINY=Y_LEN + ELSE + INFINY=INY+INYEND + END IF + + + SUM=0.0 + ICOUNT=0 + DO J=INITIALY,INFINY + DO I=INITIALX,INFINX + ICOUNT=ICOUNT+1 + SUM=SUM+FUNC(I,J) + END DO + END DO + AVERAGING=SUM/REAL(ICOUNT) + + END FUNCTION AVERAGING + +!======================================================================= + !/ !/ End of module WMUPDTMD -------------------------------------------- / !/ diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index 65aaecf76..861e4ba22 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -494,6 +494,7 @@ ! ! 3.b Normal processing ! + IF ( GRSTAT(I) .EQ. 1 ) THEN !/T WRITE (MDST,9002) I, GRSTAT(I), 'SECOND PART' !/MPRF CALL PRTIME ( PRFT0 ) @@ -915,6 +916,7 @@ END IF ! END IF + ! ! 7.c Stage data ! diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 571fb2123..6a68c51d7 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -757,7 +757,7 @@ CHARACTER(30) :: FILEPREFIX LOGICAL, INTENT(IN) :: TOGETHER LOGICAL, INTENT(IN) :: FLG2D(NOGRP,NGRPP) - INTEGER, INTENT(INOUT) :: NCIDS(NOGRP,NGRPP,6), S3 + INTEGER, INTENT(INOUT) :: NCIDS(NOGRP,NGRPP,NOSWLL + 1) CHARACTER*30,INTENT(IN) :: STRSTOPDATE !/ !/ ------------------------------------------------------------------- / From 5ab43010002d0a4e175e7647828fbf9e989ab5f7 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Fri, 1 Nov 2019 12:20:20 -0400 Subject: [PATCH 19/84] Update ww3_ounf.ftn Adding back S3 to define the number of characters in the date for the filename in SBR W3EXNC. --- model/ftn/ww3_ounf.ftn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 6a68c51d7..26650f84e 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -757,7 +757,7 @@ CHARACTER(30) :: FILEPREFIX LOGICAL, INTENT(IN) :: TOGETHER LOGICAL, INTENT(IN) :: FLG2D(NOGRP,NGRPP) - INTEGER, INTENT(INOUT) :: NCIDS(NOGRP,NGRPP,NOSWLL + 1) + INTEGER, INTENT(INOUT) :: NCIDS(NOGRP,NGRPP,NOSWLL + 1), S3 CHARACTER*30,INTENT(IN) :: STRSTOPDATE !/ !/ ------------------------------------------------------------------- / From db57a3efb321a1a3b01fa5482bbebf708519793b Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Mon, 16 Dec 2019 20:14:52 +0100 Subject: [PATCH 20/84] revert comment on wcc and wcf in manual (#131) --- manual/eqs/output.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manual/eqs/output.tex b/manual/eqs/output.tex index c91eebbf6..adcf49fe3 100644 --- a/manual/eqs/output.tex +++ b/manual/eqs/output.tex @@ -205,8 +205,8 @@ \subsection{~Output parameters} \label{sub:outpars} \item \textbf{FAW} Wind to wave energy flux \item \textbf{TAW} Net wave-supported stress (wind to wave momentum flux) \item \textbf{TWA} Negative part of the wave-supported stress -\item \textbf{WCC} Wave to wind momentum flux -\item \textbf{WCF} Whitecap coverage (without dimensions) +\item \textbf{WCC} Whitecap coverage (without dimensions) +\item \textbf{WCF} Wave to wind momentum flux \item \textbf{WCH} Whitecap mean thickness (m) \item \textbf{WCM} Mean breaking wave height (m) (NOT AVAILABLE YET) %\item \textbf{PWS} Moment of whitecap distribution (?) (NOT PLUGGED YET) From d7e746d13c7ee4179aa035b84d34ab441f6fff03 Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Tue, 17 Dec 2019 15:40:20 -0500 Subject: [PATCH 21/84] B4b reproducibility (#134) Correct variables and initialization which were affecting b4b reproducibility in WW3 regtests. * correct typo in COMM_FRAC for ww3_multi.nml initialize variable for TYPE SGRD update matrix_datarmor remove unexpected NOPA switch * correct initialization to avoid b4b difference see regtests : mww3_test03/work_PR2_UQ_MPI_e mww3_test_03/work_PR3_UQ_MPI_e_c --- model/aux/bash/ww3_multi_inp2nml.sh | 2 +- model/ftn/w3gdatmd.ftn | 22 +++++++++++++++---- model/ftn/w3wdatmd.ftn | 15 ++++++++----- regtests/bin/matrix_datarmor | 11 +++++----- .../input/ww3_multi_grdset_d2.nml | 12 +++++----- regtests/ww3_ts4/input_rg_multi/switch_MPI | 2 +- regtests/ww3_ts4/input_rg_shel/switch_MPI | 2 +- regtests/ww3_ts4/input_ug/switch_MPI | 2 +- 8 files changed, 42 insertions(+), 26 deletions(-) diff --git a/model/aux/bash/ww3_multi_inp2nml.sh b/model/aux/bash/ww3_multi_inp2nml.sh index fe2fc3842..5fc6188d0 100755 --- a/model/aux/bash/ww3_multi_inp2nml.sh +++ b/model/aux/bash/ww3_multi_inp2nml.sh @@ -630,7 +630,7 @@ do if [ "${rank[$irgrd]}" != "$irgrd" ]; then echo " MODEL($irgrd)%RESOURCE%RANK_ID = ${rank[$irgrd]}" >> $nmlfile; fi if [ "${group[$irgrd]}" != 1 ]; then echo " MODEL($irgrd)%RESOURCE%GROUP_ID = ${group[$irgrd]}" >> $nmlfile; fi if [ "${comm0[$irgrd]},${comm1[$irgrd]}" != '0.00,1.00' ];then - echo " MODEL($irgrd)%RESOURCE%COMM_FLAG = ${comm0[$irgrd]},${comm1[$irgrd]}" >> $nmlfile; fi + echo " MODEL($irgrd)%RESOURCE%COMM_FRAC = ${comm0[$irgrd]},${comm1[$irgrd]}" >> $nmlfile; fi if [ "${bound[$irgrd]}" != 'F' ]; then echo " MODEL($irgrd)%RESOURCE%BOUND_FLAG = ${bound[$irgrd]}" >> $nmlfile; fi fi done diff --git a/model/ftn/w3gdatmd.ftn b/model/ftn/w3gdatmd.ftn index 496362aff..9231eb14e 100644 --- a/model/ftn/w3gdatmd.ftn +++ b/model/ftn/w3gdatmd.ftn @@ -717,14 +717,14 @@ END TYPE GRID ! TYPE SGRD ! this is the spectral grid with all parameters that vary with freq. and direction - INTEGER :: NK, NK2, NTH, NSPEC + INTEGER :: NK=0, NK2=0, NTH=0, NSPEC=0 INTEGER, POINTER :: MAPWN(:), MAPTH(:) - REAL :: DTH, XFR, FR1, FTE, FTF, FTWN, FTTR, & - FTWL, FACTI1, FACTI2, FACHFA, FACHFE + REAL :: DTH=0., XFR=0., FR1=0., FTE=0., FTF=0., FTWN=0., FTTR=0., & + FTWL=0., FACTI1=0., FACTI2=0., FACHFA=0., FACHFE=0. REAL, POINTER :: TH(:), ESIN(:), ECOS(:), ES2(:), & ESC(:), EC2(:), SIG(:), SIG2(:), & DSIP(:), DSII(:), DDEN(:), DDEN2(:) - LOGICAL :: SINIT + LOGICAL :: SINIT=.FALSE. END TYPE SGRD ! TYPE NPAR @@ -1718,6 +1718,20 @@ SGRDS(IMOD)%DDEN2(MSPEC), & STAT=ISTAT ) CHECK_ALLOC_STATUS ( ISTAT ) + SGRDS(IMOD)%MAPWN(:)=0. + SGRDS(IMOD)%MAPTH(:)=0. + SGRDS(IMOD)%TH(:)=0. + SGRDS(IMOD)%ESIN(:)=0. + SGRDS(IMOD)%ECOS(:)=0. + SGRDS(IMOD)%ES2(:)=0. + SGRDS(IMOD)%ESC(:)=0. + SGRDS(IMOD)%EC2(:)=0. + SGRDS(IMOD)%SIG(:)=0. + SGRDS(IMOD)%SIG2(:)=0. + SGRDS(IMOD)%DSIP(:)=0. + SGRDS(IMOD)%DSII(:)=0. + SGRDS(IMOD)%DDEN(:)=0. + SGRDS(IMOD)%DDEN2(:)=0. !/ST4 ALLOCATE ( MPARS(IMOD)%SRCPS%IKTAB(MK,NDTAB), & !/ST4 MPARS(IMOD)%SRCPS%DCKI(NKHS,NKD), & !/ST4 MPARS(IMOD)%SRCPS%QBI(NKHS,NKD), & diff --git a/model/ftn/w3wdatmd.ftn b/model/ftn/w3wdatmd.ftn index 5af61d495..1d63269a6 100644 --- a/model/ftn/w3wdatmd.ftn +++ b/model/ftn/w3wdatmd.ftn @@ -482,15 +482,18 @@ CHECK_ALLOC_STATUS ( ISTAT ) !/DEBUGINIT WRITE(740+IAPROC,*) 'W3DIMW, step 10' !/DEBUGINIT FLUSH(740+IAPROC) + + WDATAS(IMOD)%WLV (:) = 0. + WDATAS(IMOD)%ICE (0:NSEA) = 0. !/SETUP WDATAS(IMOD)%ZETA_SETUP(:) = 0. -! - WDATAS(IMOD)%UST (:) = 1.E-5 - WDATAS(IMOD)%USTDIR(:) = 0. WDATAS(IMOD)%BERG (:) = 0. - WDATAS(IMOD)%ICE (:) = 0. - WDATAS(IMOD)%ICEH (:) = GRIDS(IMOD)%IICEHINIT - WDATAS(IMOD)%ICEF (:) = 1000. + WDATAS(IMOD)%ICEH (0:NSEA) = GRIDS(IMOD)%IICEHINIT + WDATAS(IMOD)%ICEF (0:NSEA) = 1000. WDATAS(IMOD)%ICEDMAX(:) = 1000. + WDATAS(IMOD)%UST (0:NSEATM) = 1.E-5 + WDATAS(IMOD)%USTDIR(0:NSEATM) = 0. + WDATAS(IMOD)%ASF (:) = 0. + WDATAS(IMOD)%FPIS (:) = 0. WDATAS(IMOD)%DINIT = .TRUE. !/DEBUGINIT WRITE(740+IAPROC,*) 'W3DIMW, step 11' !/DEBUGINIT FLUSH(740+IAPROC) diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index 5c965ef06..1f000c8ab 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -50,14 +50,14 @@ # Netcdf modules - comp="datarmor_mpt_debug" + cmplr=datarmor_mpt_debug echo ' source /usr/share/Modules/3.2.10/init/bash' >> matrix.head echo ' module purge' >> matrix.head echo ' export WWATCH3_NETCDF=NC4' >> matrix.head echo " export WW3_PARCOMPN=4" >> matrix.head - if [ $comp = "datarmor_intel_debug" ] + if [ $cmplr = "datarmor_intel_debug" ] then echo ' module load intel-comp/18' >> matrix.head echo ' module load impi/2018.1.163' >> matrix.head @@ -65,7 +65,7 @@ echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/INTEL/bin/nf-config'>> matrix.head echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/INTEL' >> matrix.head - elif [ $comp = "datarmor_mpt_debug" ] + elif [ $cmplr = "datarmor_mpt_debug" ] then echo ' module load intel-comp/18' >> matrix.head echo ' module load mpt/2.15' >> matrix.head @@ -73,14 +73,14 @@ echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/MPT/bin/nf-config' >> matrix.head echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/MPT' >> matrix.head - elif [ $comp = "datarmor_gnu_debug" ] + elif [ $cmplr = "datarmor_gnu_debug" ] then echo ' module load impi/2018.1.163' >> matrix.head echo ' export PATH=/home/datawork-wave/NETCDF-FINAL/GNU/bin::${PATH}' >> matrix.head echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/GNU/bin/nf-config' >> matrix.head echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/GNU' >> matrix.head - elif [ $comp = "datarmor_pgi_debug" ] + elif [ $cmplr = "datarmor_pgi_debug" ] then echo ' module load pgi/17.10' >> matrix.head echo ' module load mpt/2.17' >> matrix.head @@ -95,7 +95,6 @@ # Compiler option. Choose appropriate compiler and set cmplOption to # y if using for the first time or using a different compiler - cmplr=datarmor_mpt_debug export cmplOption='y' export mpi='$MPI_LAUNCH' diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml index cbaceca6f..d2a77d0d3 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml @@ -111,22 +111,22 @@ ! -------------------------------------------------------------------- ! &MODEL_GRID_NML MODEL(1)%NAME = 'low1' - MODEL(1)%RESOURCE%COMM_FLAG = 0.00,0.33 + MODEL(1)%RESOURCE%COMM_FRAC = 0.00,0.33 MODEL(2)%NAME = 'low2' MODEL(2)%RESOURCE%RANK_ID = 1 - MODEL(2)%RESOURCE%COMM_FLAG = 0.33,0.67 + MODEL(2)%RESOURCE%COMM_FRAC = 0.33,0.67 MODEL(3)%NAME = 'low3' MODEL(3)%RESOURCE%RANK_ID = 1 - MODEL(3)%RESOURCE%COMM_FLAG = 0.67,1.00 + MODEL(3)%RESOURCE%COMM_FRAC = 0.67,1.00 MODEL(4)%NAME = 'hgh1' MODEL(4)%RESOURCE%RANK_ID = 2 - MODEL(4)%RESOURCE%COMM_FLAG = 0.00,0.33 + MODEL(4)%RESOURCE%COMM_FRAC = 0.00,0.33 MODEL(5)%NAME = 'hgh2' MODEL(5)%RESOURCE%RANK_ID = 2 - MODEL(5)%RESOURCE%COMM_FLAG = 0.33,0.67 + MODEL(5)%RESOURCE%COMM_FRAC = 0.33,0.67 MODEL(6)%NAME = 'hgh3' MODEL(6)%RESOURCE%RANK_ID = 2 - MODEL(6)%RESOURCE%COMM_FLAG = 0.67,1.00 + MODEL(6)%RESOURCE%COMM_FRAC = 0.67,1.00 / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ts4/input_rg_multi/switch_MPI b/regtests/ww3_ts4/input_rg_multi/switch_MPI index 42357d1dd..87ae57a5c 100644 --- a/regtests/ww3_ts4/input_rg_multi/switch_MPI +++ b/regtests/ww3_ts4/input_rg_multi/switch_MPI @@ -1 +1 @@ -F90 NOGRB NOPA NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST diff --git a/regtests/ww3_ts4/input_rg_shel/switch_MPI b/regtests/ww3_ts4/input_rg_shel/switch_MPI index 42357d1dd..87ae57a5c 100644 --- a/regtests/ww3_ts4/input_rg_shel/switch_MPI +++ b/regtests/ww3_ts4/input_rg_shel/switch_MPI @@ -1 +1 @@ -F90 NOGRB NOPA NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST diff --git a/regtests/ww3_ts4/input_ug/switch_MPI b/regtests/ww3_ts4/input_ug/switch_MPI index 42357d1dd..87ae57a5c 100644 --- a/regtests/ww3_ts4/input_ug/switch_MPI +++ b/regtests/ww3_ts4/input_ug/switch_MPI @@ -1 +1 @@ -F90 NOGRB NOPA NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST From dd6d3577e08bf32589d174758187b1df194c702f Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Fri, 10 Jan 2020 11:02:00 -0500 Subject: [PATCH 22/84] Fb segfalt grdid (#136) * Insertion of the PDLIB stuff. Mathieu * Correct unset variable + segmentation fault. Mathieu Co-authored-by: Mathieu Dutour Sikiric Co-authored-by: Ty Hesser --- model/ftn/w3odatmd.ftn | 6 ++++-- model/ftn/wminitmd.ftn | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 613b63ac0..c107a7014 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -343,7 +343,8 @@ ICEFO(:), SPCO(:,:) REAL, POINTER :: ZET_SETO(:) ! For the wave setup. - CHARACTER(LEN=10), POINTER :: PTNME(:), GRDID(:) + CHARACTER(LEN=10), POINTER :: PTNME(:) + CHARACTER(LEN=13), POINTER :: GRDID(:) LOGICAL :: O2INIT !/MPI LOGICAL :: O2IRQI END TYPE OTYPE2 @@ -447,7 +448,8 @@ ICEFO(:), SPCO(:,:) REAL, POINTER :: ZET_SETO(:) ! - CHARACTER(LEN=10), POINTER :: PTNME(:), GRDID(:) + CHARACTER(LEN=10), POINTER :: PTNME(:) + CHARACTER(LEN=13), POINTER :: GRDID(:) LOGICAL, POINTER :: O2INIT !/MPI LOGICAL, POINTER :: O2IRQI !/ diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index e8b122ea4..36fdde35c 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -653,6 +653,8 @@ MDS = -1 MDSF = -1 FLGR2 = .FALSE. + FLG2 = .FALSE. + LPRT = .FALSE. IPRT = 0 ! ! ... Fixed and recycleable unit numbers. From 328a42a390c68b25c78da45fe62b8f8bccdec1ca Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Mon, 13 Jan 2020 12:41:36 -0500 Subject: [PATCH 23/84] NCEP GFSv16/GEFSv12 (#140) Changes including new features and bugfixes for adding WW3 to the GEFSv12 and GFSv16 coupled systems at NCEP: Added option to write single output (gridded and point) files at individual specified output time steps (#141 ), to allow inline post-processing; Added option to write second stream of restart files (#1 ) with write stride different to first (default) restart file, Updated ww3_grib for grib2 encoding following recent additions/changes in WMO tables, Several bugfixes to new output and restart options, including alignment of MPI calls and resources, backwards compatibility with multiple output configurations specified in regtests, Changes to compile options for WCOSS to allow b4b. Please find results from the regtest matrix comparisons in the comment below. --- model/bin/comp.wcoss_dell_p3 | 10 +- model/bin/link.wcoss_dell_p3 | 11 +- model/bin/switch_NCEP_gwm | 2 +- model/ftn/w3initmd.ftn | 79 ++++- model/ftn/w3iogomd.ftn | 86 +++++- model/ftn/w3iopomd.ftn | 89 +++++- model/ftn/w3iorsmd.ftn | 40 ++- model/ftn/w3nmlmultimd.ftn | 18 +- model/ftn/w3nmlshelmd.ftn | 11 + model/ftn/w3odatmd.ftn | 12 +- model/ftn/w3wavemd.ftn | 82 +++++- model/ftn/wmesmfmd.ftn | 16 +- model/ftn/wminitmd.ftn | 275 ++++++++++++++++-- model/ftn/wmwavemd.ftn | 47 ++- model/ftn/ww3_grib.ftn | 102 ++++++- model/ftn/ww3_shel.ftn | 145 ++++++++- model/inp/ww3_grib.inp | 7 + regtests/mww3_test_06/info | 15 +- regtests/mww3_test_06/input/grdset_d_h | 4 + regtests/mww3_test_06/input/grdset_d_r | 4 + .../mww3_test_06/input/ww3_grid_points.inp | 29 ++ .../mww3_test_06/input/ww3_grid_points.nml | 226 ++++++++++++++ .../mww3_test_06/input/ww3_multi_grdset_d.inp | 2 +- .../input/ww3_multi_grdset_d_h.inp | 145 +++++++++ .../input/ww3_multi_grdset_d_r.inp | 146 ++++++++++ .../input/ww3_multi_grdset_d_r.nml | 242 +++++++++++++++ 26 files changed, 1738 insertions(+), 107 deletions(-) create mode 100644 regtests/mww3_test_06/input/grdset_d_h create mode 100644 regtests/mww3_test_06/input/grdset_d_r create mode 100644 regtests/mww3_test_06/input/ww3_grid_points.inp create mode 100644 regtests/mww3_test_06/input/ww3_grid_points.nml create mode 100644 regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp create mode 100644 regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp create mode 100644 regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 index 604568a1f..15fe28f11 100755 --- a/model/bin/comp.wcoss_dell_p3 +++ b/model/bin/comp.wcoss_dell_p3 @@ -80,17 +80,9 @@ # opt="-c $list -O3 -assume byterecl -ip -module $path_m" -opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox" -opt="$opt -xHOST -qno-opt-dynamic-align -auto -nowarn -align array64byte -Wp,-w" + opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -sox -xhost -O2" # Add profiling # opt="$opt -p" -### opt="-c $list -O2 -Wp,-w -fno-alias -auto -ftz -assume byterecl -nowarn -sox -align array64byte" -### opt="$opt -xHOST -qno-opt-dynamic-align -fp-model source -ip -module $path_m" -## opt="$opt -nowarn -sox -align array64byte -real-size 32 -xHOST -qno-opt-dynamic-align" -## opt="$opt -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3" -# opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" -# opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" if [ "$name" != 'ww3_gspl' ] then diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 index 16aa631d8..25aa081af 100755 --- a/model/bin/link.wcoss_dell_p3 +++ b/model/bin/link.wcoss_dell_p3 @@ -86,17 +86,12 @@ # linking options libs="" -# opt="-O2 -ip -o $prog" -opt="-o $prog -g" -opt="$opt -xhost" + + opt="-o $prog -g -xhost -O2" + # Add profiling # opt="$opt -p" -# opt="-O3 -ip -o $prog" -# opt="-O3 -xSSE4.2 -ip -o $prog" -# opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" -# opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" - # mpi implementation if [ "$mpi_mod" = 'yes' ] then diff --git a/model/bin/switch_NCEP_gwm b/model/bin/switch_NCEP_gwm index 402cc54a1..2f3effce6 100755 --- a/model/bin/switch_NCEP_gwm +++ b/model/bin/switch_NCEP_gwm @@ -1 +1 @@ -F90 NCO NOPA LRB4 NOGRB DIST MPI OMPH OMPG SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC4 IS0 REF0 TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 RWND O0 O1 O2 O4 O5 O6 O7 O14 O15 +F90 NCO NOPA NOGRB SHRD SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC0 IS0 REF0 TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 RWND O0 O1 O2 O4 O5 O6 O7 O14 O15 diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index fda6c3e80..81cd23cf6 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -117,9 +117,11 @@ !/ CONTAINS !/ ------------------------------------------------------------------- / - SUBROUTINE W3INIT ( IMOD, IsMulti, FEXT, MDS, MTRACE, ODAT,FLGRD, & + SUBROUTINE W3INIT ( IMOD, IsMulti, FEXT, MDS, MTRACE, ODAT & + , FLGRD, & FLGR2, FLGD, FLG2, NPT, XPT, YPT, PNAMES, & - IPRT, PRTFRM, MPI_COMM, FLAGSTIDEIN ) + IPRT, PRTFRM, MPI_COMM, FLAGSTIDEIN) + !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -213,6 +215,7 @@ ! 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 @@ -388,7 +391,8 @@ !/ Parameter list !/ INTEGER, INTENT(IN) :: IMOD, MDS(13), MTRACE(2), & - ODAT(35), NPT, IPRT(6), MPI_COMM + 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),& @@ -851,7 +855,7 @@ !/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), INTYPE, IMOD ) + CALL W3IORS ( 'READ', NDS(6), SIG(NK), INTYPE, IMOD) !/TIMINGS CALL PRINT_MY_TIME("After W3IORS") !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 3a' !/MEMCHECK call getMallocInfo(mallinfos) @@ -954,6 +958,20 @@ 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. @@ -1060,6 +1078,57 @@ ! 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) @@ -3591,7 +3660,7 @@ !/MPI IH = 0 !/MPI IROOT = NAPRST - 1 ! -!/MPI IF ( FLOUT(4) ) THEN +!/MPI IF ( FLOUT(4) .OR. FLOUT(8) ) THEN !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRS(3*NAPROC) ) !/MPI IRQRS => OUTPTS(IMOD)%OUT4%IRQRS ! diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 01cff23c7..6e04ada22 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -53,6 +53,8 @@ !/ 22-Aug-2018 : Add WBT output parameter ( version 6.06 ) !/ 25-Sep-2019 : Corrected th2m and sth2m ( version 6.07 ) !/ calculations. (J Dykes, NRL) +!/ 04-Oct-2019 : Optional one file per output stride ( version 7.00 ) +!/ (Roberto Padilla-Hernandez & J.H. Alves) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -2343,6 +2345,7 @@ !/ END SUBROUTINE W3OUTG !/ ------------------------------------------------------------------- / +!/ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD ) !/ !/ +-----------------------------------+ @@ -2483,6 +2486,7 @@ !/ USE W3SERVMD, ONLY: EXTCDE USE W3ODATMD, only : IAPROC + USE W3ODATMD, ONLY : OFILES !/SETUP USE W3WDATMD, ONLY: ZETA_SETUP !/S USE W3SERVMD, ONLY: STRACE ! @@ -2495,12 +2499,14 @@ INTEGER, INTENT(IN) :: NDSOG INTEGER, INTENT(IN), OPTIONAL :: IMOD CHARACTER, INTENT(IN) :: INXOUT*(*) + CHARACTER(LEN=15) :: TIMETAG !/ !/ ------------------------------------------------------------------- / !/ Local parameters !/ INTEGER :: IGRD, IERR, I, J, IX, IY, MOGRP, & - MGRPP, ISEA, MOSWLL, IK, IFI, IFJ + MGRPP, ISEA, MOSWLL, IK, IFI, IFJ & + ,IFILOUT INTEGER, ALLOCATABLE :: MAPTMP(:,:) !/S INTEGER, SAVE :: IENT = 0 REAL :: AUX1(NSEA), AUX2(NSEA), & @@ -2535,7 +2541,7 @@ CALL EXTCDE ( 1 ) END IF ! - IF ( IPASS.EQ.1 ) THEN + IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN WRITE = INXOUT.EQ.'WRITE' ELSE IF ( WRITE .AND. INXOUT.EQ.'READ' ) THEN @@ -2546,11 +2552,11 @@ ! !/T WRITE (NDST,9000) IPASS, INXOUT, WRITE, NDSOG, IGRD, FILEXT ! +! ! open file ---------------------------------------------------------- * ! ( IPASS = 1 ) ! - IF ( IPASS.EQ.1 ) THEN -! + IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) ! @@ -2604,6 +2610,76 @@ ! END IF ! +! IN CASE OF GENERATION OF A NEW FILE OUTPUT EVERY DELTA OUTPUT +! open file ---------------------------------------------------------- * +! ( IPASS = 1 ) +! + IF ( IPASS.GE.1 .AND. OFILES(1) .EQ. 1) THEN + WRITE = INXOUT.EQ.'WRITE' + ELSE + IF ( WRITE .AND. INXOUT.EQ.'READ' ) THEN + WRITE (NDSE,901) INXOUT + CALL EXTCDE ( 2 ) + END IF + END IF + +! + IF ( IPASS.GE.1 .AND. OFILES(1) .EQ. 1) THEN + I = LEN_TRIM(FILEXT) + J = LEN_TRIM(FNMPRE) +! +! Create TIMETAG for file name using YYYYMMDD.HHMMS prefix + WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) +!/T WRITE (NDST,9001) FNMPRE(:J)//TIMETAG//'.out_grd.'//FILEXT(:I) + IF ( WRITE ) THEN + OPEN (NDSOG,FILE=FNMPRE(:J)//TIMETAG//'.out_grd.' & + //FILEXT(:I),FORM='UNFORMATTED',ERR=800,IOSTAT=IERR) + ELSE + OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FILEXT(:I), & + FORM='UNFORMATTED',ERR=800,IOSTAT=IERR,STATUS='OLD') + END IF +! + REWIND ( NDSOG ) +! +! test info --------------------------------------------------------- * +! ( IPASS >= 1 & OFILES(1) = 1) +! + IF ( WRITE ) THEN + WRITE (NDSOG) & + IDSTR, VEROGR, GNAME, NOGRP, NGRPP, NSEA, NX, NY, & + UNDEF, NOSWLL + ELSE + READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) & + IDTST, VERTST, TNAME, MOGRP, MGRPP, NSEA, NX, NY, & + UNDEF, MOSWLL +! + IF ( IDTST .NE. IDSTR ) THEN + WRITE (NDSE,902) IDTST, IDSTR + CALL EXTCDE ( 20 ) + END IF + IF ( VERTST .NE. VEROGR ) THEN + WRITE (NDSE,903) VERTST, VEROGR + CALL EXTCDE ( 21 ) + END IF + IF ( NOGRP .NE. MOGRP .OR. NGRPP .NE. MGRPP ) THEN + WRITE (NDSE,904) MOGRP, MGRPP, NOGRP, NGRPP + CALL EXTCDE ( 22 ) + END IF + IF ( TNAME .NE. GNAME ) THEN + WRITE (NDSE,905) TNAME, GNAME + END IF + IF ( NOSWLL .NE. MOSWLL ) THEN + WRITE (NDSE,906) MOSWLL, NOSWLL + CALL EXTCDE ( 24 ) + END IF +! + END IF +! +!/T WRITE (NDST,9002) IDSTR, VEROGR, GNAME, NSEA, NX, NY, & +!/T UNDEF +! + END IF +! ! TIME and flags ----------------------------------------------------- * ! IF ( WRITE ) THEN @@ -3417,6 +3493,8 @@ ! Flush the buffers for write ! IF ( WRITE ) CALL FLUSH ( NDSOG ) +! + IF(OFILES(1) .EQ. 1) CLOSE(NDSOG) ! !/MPI CALL W3SETA ( IGRD, NDSE, NDST ) ! diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index ec9f83e71..6eb629560 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -33,6 +33,8 @@ !/ 11-Nov-2013 : SMC and rotated grid incorporated in the main !/ trunk ( version 4.13 ) !/ 05-Jun-2018 : Add SETUP ( version 6.04 ) +!/ 04-Oct-2019 : Optional one file per output stride ( version 7.00 ) +!/ (R. Padilla-Hernandez & J.H. Alves) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -939,6 +941,8 @@ IL, IW, II, PTLOC, PTIFAC, DPO, WAO, WDO, & ASO, CAO, CDO, SPCO, PTNME, O2INIT, FNMPRE, & GRDID, ICEO, ICEHO, ICEFO + USE W3ODATMD, ONLY : OFILES +!/ !/SETUP USE W3ODATMD, ONLY: ZET_SETO !/ USE W3SERVMD, ONLY: EXTCDE @@ -962,6 +966,8 @@ LOGICAL,SAVE :: WRITE CHARACTER(LEN=31) :: IDTST CHARACTER(LEN=10) :: VERTST +!/ + CHARACTER(LEN=15) :: TIMETAG !/ !/ ------------------------------------------------------------------- / !/ @@ -986,7 +992,8 @@ CALL EXTCDE ( 1 ) END IF ! - IF ( IPASS.EQ.1 ) THEN +! IF ( IPASS.EQ.1 ) THEN + IF ( IPASS.EQ.1 .AND. OFILES(2) .EQ. 0) THEN WRITE = INXOUT.EQ.'WRITE' ELSE IF ( WRITE .AND. INXOUT.EQ.'READ' ) THEN @@ -997,7 +1004,7 @@ ! ! open file ---------------------------------------------------------- * ! - IF ( IPASS.EQ.1 ) THEN + IF ( IPASS.EQ.1 .AND. OFILES(2) .EQ. 0 ) THEN ! I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) @@ -1059,6 +1066,83 @@ ! END IF ! +! + IF ( IPASS.GE. 1 .AND. OFILES(2) .EQ. 1) THEN + WRITE = INXOUT.EQ.'WRITE' + ELSE + IF ( WRITE .AND. INXOUT.EQ.'READ' ) THEN + WRITE (NDSE,901) INXOUT + CALL EXTCDE ( 2 ) + END IF + END IF + +! open file ---------------------------------------------------------- * +! + IF ( IPASS.GE.1 .AND. OFILES(2) .EQ. 1) THEN +! + I = LEN_TRIM(FILEXT) + J = LEN_TRIM(FNMPRE) + +! Create TIMETAG for file name using YYYYMMDD.HHMMS prefix + WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) +! +!/T WRITE (NDST,9001) FNMPRE(:J)//TIMETAG//'.out_pnt.'// & +!/T FILEXT(:I) + IF ( WRITE ) THEN + OPEN (NDSOP,FILE=FNMPRE(:J)//TIMETAG//'.out_pnt.' & + //FILEXT(:I),FORM='UNFORMATTED',ERR=800,IOSTAT=IERR) + END IF +! + REWIND ( NDSOP ) +! +! +! test info ---------------------------------------------------------- * +! ( IPASS GE.1 .AND. OFILES(2) .EQ. 1) +! + IF ( WRITE ) THEN + WRITE (NDSOP) & + IDSTR, VEROPT, NK, NTH, NOPTS + ELSE + READ (NDSOP,END=801,ERR=802,IOSTAT=IERR) & + IDTST, VERTST, MK, MTH, NOPTS +! + IF ( IDTST .NE. IDSTR ) THEN + WRITE (NDSE,902) IDTST, IDSTR + CALL EXTCDE ( 10 ) + END IF + IF ( VERTST .NE. VEROPT ) THEN + WRITE (NDSE,903) VERTST, VEROPT + CALL EXTCDE ( 11 ) + END IF + IF (NK.NE.MK .OR. NTH.NE.MTH) THEN + WRITE (NDSE,904) MK, MTH, NK, NTH + CALL EXTCDE ( 12 ) + END IF + IF ( .NOT. O2INIT ) & + CALL W3DMO2 ( IGRD, NDSE, NDST, NOPTS ) + END IF +! +!/T WRITE (NDST,9002) IDSTR, VEROPT, NK, NTH, NOPTS +! +! Point specific info ------------------------------------------------ * +! ( IPASS GE.1 .AND. OFILES(2) .EQ. 1) +! + IF ( WRITE ) THEN + WRITE (NDSOP) & + ((PTLOC(J,I),J=1,2),I=1,NOPTS), (PTNME(I),I=1,NOPTS) + ELSE + READ (NDSOP,END=801,ERR=802,IOSTAT=IERR) & + ((PTLOC(J,I),J=1,2),I=1,NOPTS), (PTNME(I),I=1,NOPTS) + END IF +! +!/T WRITE (NDST,9003) +!/T DO I=1, NOPTS +!/T WRITE (NDST,9004) I, PTLOC(1,I), PTLOC(2,I), PTNME(I) +!/T END DO +! + END IF +! +! ! TIME --------------------------------------------------------------- * ! IF ( WRITE ) THEN @@ -1094,6 +1178,7 @@ END IF ! END DO + IF (OFILES(2) .EQ. 1) CLOSE (NDSOP) ! RETURN ! diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index 4c7fa12c2..f8fe6ae3c 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -61,7 +61,7 @@ !/ CONTAINS !/ ------------------------------------------------------------------- / - SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, INTYPE, IMOD ) + SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, INTYPE, IMOD, FLRSTRT ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -97,6 +97,10 @@ !/ (T. Campbell, NRL) !/ 05-Jun-2018 : Add PDLIB/TIMINGS/DEBUGIO ( version 6.04 ) !/ DEBUGINIT/MPI +!/ 19-Dec-2019 : Optional second stream of ( version 7.00 ) +!/ restart files +!/ (Roberto Padilla-Hernandez & J.H. Alves) + !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -118,6 +122,14 @@ ! restart001.FILEXT ! restart002.FILEXT etc. ! +! Optionally, a second stream of restart files is generated given +! a secondary stride definad by an additional start/end time line +! triggered by an optional argument added to the end of the stan- +! dard restart request line (a sixth argument flag set to T). File +! names include a time-tag prefix: +! +! YYYYMMDD.HHMMSS.restart.FILEXT +! ! The file to be read thus always is unnumbered, whereas all ! written files are automatically numbered. ! @@ -141,6 +153,7 @@ ! 3 : for writing file. ! 4 : starting from calm. ! IMOD Int. I Optional grid number, defaults to 1. +! FLRSTRT LOGIC I OTIONAL TRUE: A second request for restart files ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -238,7 +251,8 @@ !/WRST USE W3IDATMD, ONLY: WXNwrst, WYNwrst USE W3ODATMD, ONLY: NDSE, NDST, IAPROC, NAPROC, NAPERR, NAPRST, & IFILE => IFILE4, FNMPRE, NTPROC, IOSTYP -!/MPI USE W3ODATMD, ONLY: NRQRS, NBLKRS, RSBLKS, IRQRS, IRQRSS, VAAUX +!/MPI USE W3ODATMD, ONLY: NRQRS, NBLKRS, RSBLKS, IRQRS, IRQRSS, & +!/MPI VAAUX !/MPI USE W3ADATMD, ONLY: MPI_COMM_WCMP !/ USE W3SERVMD, ONLY: EXTCDE @@ -263,6 +277,7 @@ INTEGER, INTENT(OUT) :: INTYPE REAL, INTENT(INOUT) :: DUMFPI CHARACTER, INTENT(IN) :: INXOUT*(*) + LOGICAL, INTENT(IN),OPTIONAL :: FLRSTRT !/ !/ ------------------------------------------------------------------- / !/ Local parameters @@ -285,9 +300,11 @@ LOGICAL :: WRITE, IOSFLG CHARACTER(LEN=4) :: TYPE CHARACTER(LEN=10) :: VERTST - CHARACTER(LEN=21) :: FNAME +! CHARACTER(LEN=21) :: FNAME + CHARACTER(LEN=40) :: FNAME CHARACTER(LEN=26) :: IDTST CHARACTER(LEN=30) :: TNAME + CHARACTER(LEN=15) :: TIMETAG !/ !/ ------------------------------------------------------------------- / !/ @@ -365,13 +382,20 @@ I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) ! - IF ( IFILE.EQ.0 ) THEN - FNAME = 'restart.'//FILEXT(:I) - ELSE - FNAME = 'restartNNN.'//FILEXT(:I) - IF ( WRITE .AND. IAPROC.EQ.NAPRST ) & +!CHECKPOINT + IF ( PRESENT(FLRSTRT) .AND. FLRSTRT) THEN + WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) + FNAME=TIMETAG//'.restart.'//FILEXT(:I) + ELSE + IF ( IFILE.EQ.0 ) THEN + FNAME = 'restart.'//FILEXT(:I) + ELSE + FNAME = 'restartNNN.'//FILEXT(:I) + IF ( WRITE .AND. IAPROC.EQ.NAPRST ) & WRITE (FNAME(8:10),'(I3.3)') IFILE END IF + END IF + IFILE = IFILE + 1 ! !/T WRITE (NDST,9001) FNAME, LRECL diff --git a/model/ftn/w3nmlmultimd.ftn b/model/ftn/w3nmlmultimd.ftn index dbde2ce2c..91400e401 100644 --- a/model/ftn/w3nmlmultimd.ftn +++ b/model/ftn/w3nmlmultimd.ftn @@ -151,6 +151,8 @@ CHARACTER(15) :: START CHARACTER(15) :: STRIDE CHARACTER(15) :: STOP + CHARACTER(1) :: OUTFFILE +! END TYPE NML_OUTPUT_TIME_T ! TYPE NML_OUTPUT_DATE_T @@ -158,6 +160,7 @@ TYPE(NML_OUTPUT_TIME_T) :: POINT TYPE(NML_OUTPUT_TIME_T) :: TRACK TYPE(NML_OUTPUT_TIME_T) :: RESTART + TYPE(NML_OUTPUT_TIME_T) :: RESTART2 TYPE(NML_OUTPUT_TIME_T) :: BOUNDARY TYPE(NML_OUTPUT_TIME_T) :: PARTITION !/COU TYPE(NML_OUTPUT_TIME_T) :: COUPLING @@ -1139,6 +1142,8 @@ IDATE(I)%FIELD%START = '19680606 000000' IDATE(I)%FIELD%STRIDE = '0' IDATE(I)%FIELD%STOP = '19680607 000000' + IDATE(I)%FIELD%OUTFFILE = '0' + IDATE(I)%POINT%OUTFFILE = '0' IDATE(I)%POINT%START = '19680606 000000' IDATE(I)%POINT%STRIDE = '0' IDATE(I)%POINT%STOP = '19680607 000000' @@ -1148,6 +1153,9 @@ IDATE(I)%RESTART%START = '19680606 000000' IDATE(I)%RESTART%STRIDE = '0' IDATE(I)%RESTART%STOP = '19680607 000000' + IDATE(I)%RESTART2%START = '19680606 000000' + IDATE(I)%RESTART2%STRIDE = '0' + IDATE(I)%RESTART2%STOP = '19680607 000000' IDATE(I)%BOUNDARY%START = '19680606 000000' IDATE(I)%BOUNDARY%STRIDE = '0' IDATE(I)%BOUNDARY%STOP = '19680607 000000' @@ -1161,15 +1169,20 @@ ALLDATE%FIELD%START = '19680606 000000' ALLDATE%FIELD%STRIDE = '0' ALLDATE%FIELD%STOP = '19680607 000000' + ALLDATE%FIELD%OUTFFILE = '0' ALLDATE%POINT%START = '19680606 000000' ALLDATE%POINT%STRIDE = '0' ALLDATE%POINT%STOP = '19680607 000000' + ALLDATE%POINT%OUTFFILE = '0' ALLDATE%TRACK%START = '19680606 000000' ALLDATE%TRACK%STRIDE = '0' ALLDATE%TRACK%STOP = '19680607 000000' ALLDATE%RESTART%START = '19680606 000000' ALLDATE%RESTART%STRIDE = '0' - ALLDATE%RESTART%STOP = '19680607 000000' + ALLDATE%RESTART%STOP = '19680607 000000' + ALLDATE%RESTART2%START = '19680606 000000' + ALLDATE%RESTART2%STRIDE = '0' + ALLDATE%RESTART2%STOP = '19680607 000000' ALLDATE%BOUNDARY%START = '19680606 000000' ALLDATE%BOUNDARY%STRIDE = '0' ALLDATE%BOUNDARY%STOP = '19680607 000000' @@ -1874,6 +1887,9 @@ WRITE (NDSN,10) TRIM(MSG),'RESTART % START = ', TRIM(NML_OUTPUT_DATE(I)%RESTART%START) WRITE (NDSN,10) TRIM(MSG),'RESTART % STRIDE = ', TRIM(NML_OUTPUT_DATE(I)%RESTART%STRIDE) WRITE (NDSN,10) TRIM(MSG),'RESTART % STOP = ', TRIM(NML_OUTPUT_DATE(I)%RESTART%STOP) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % START = ', TRIM(NML_OUTPUT_DATE(I)%RESTART2%START) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STRIDE = ', TRIM(NML_OUTPUT_DATE(I)%RESTART2%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STOP = ', TRIM(NML_OUTPUT_DATE(I)%RESTART2%STOP) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % START = ', TRIM(NML_OUTPUT_DATE(I)%BOUNDARY%START) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STRIDE = ', TRIM(NML_OUTPUT_DATE(I)%BOUNDARY%STRIDE) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STOP = ', TRIM(NML_OUTPUT_DATE(I)%BOUNDARY%STOP) diff --git a/model/ftn/w3nmlshelmd.ftn b/model/ftn/w3nmlshelmd.ftn index 73fe38d57..1d048b555 100644 --- a/model/ftn/w3nmlshelmd.ftn +++ b/model/ftn/w3nmlshelmd.ftn @@ -28,6 +28,7 @@ INTEGER :: IOSTYP CHARACTER(15) :: START CHARACTER(15) :: STOP + CHARACTER(1) :: OUTFFILE END TYPE NML_DOMAIN_T @@ -102,6 +103,7 @@ CHARACTER(15) :: START CHARACTER(15) :: STRIDE CHARACTER(15) :: STOP + CHARACTER(15) :: OUTFFILE END TYPE NML_OUTPUT_TIME_T ! TYPE NML_OUTPUT_DATE_T @@ -109,6 +111,7 @@ TYPE(NML_OUTPUT_TIME_T) :: POINT TYPE(NML_OUTPUT_TIME_T) :: TRACK TYPE(NML_OUTPUT_TIME_T) :: RESTART + TYPE(NML_OUTPUT_TIME_T) :: RESTART2 TYPE(NML_OUTPUT_TIME_T) :: BOUNDARY TYPE(NML_OUTPUT_TIME_T) :: PARTITION TYPE(NML_OUTPUT_TIME_T) :: COUPLING @@ -732,6 +735,8 @@ DATE%FIELD%START = '19680606 000000' DATE%FIELD%STRIDE = '0' DATE%FIELD%STOP = '19680607 000000' + DATE%FIELD%OUTFFILE = '0' + DATE%POINT%OUTFFILE = '0' DATE%POINT%START = '19680606 000000' DATE%POINT%STRIDE = '0' DATE%POINT%STOP = '19680607 000000' @@ -741,6 +746,9 @@ DATE%RESTART%START = '19680606 000000' DATE%RESTART%STRIDE = '0' DATE%RESTART%STOP = '19680607 000000' + DATE%RESTART2%START = '19680606 000000' + DATE%RESTART2%STRIDE = '0' + DATE%RESTART2%STOP = '19680607 000000' DATE%BOUNDARY%START = '19680606 000000' DATE%BOUNDARY%STRIDE = '0' DATE%BOUNDARY%STOP = '19680607 000000' @@ -1297,6 +1305,9 @@ WRITE (NDSN,10) TRIM(MSG),'RESTART % START = ', TRIM(NML_OUTPUT_DATE%RESTART%START) WRITE (NDSN,10) TRIM(MSG),'RESTART % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART%STRIDE) WRITE (NDSN,10) TRIM(MSG),'RESTART % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART%STOP) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % START = ', TRIM(NML_OUTPUT_DATE%RESTART2%START) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART2%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART2%STOP) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % START = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%START) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STRIDE = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STRIDE) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STOP = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STOP) diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index c107a7014..7877dd6be 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -127,6 +127,7 @@ ! suppl. data for output type 5. ! OUT6 TYPE Public Data structure of type OTYPE6 with ! suppl. data for output type 6. +! OFILES I.A. Public Output in one or several files. ! ---------------------------------------------------------------- ! ! Elements of OUT1 are aliased to pointers with the same @@ -399,10 +400,10 @@ NAPOUT, NAPERR, NAPFLD, NAPPNT, & NAPTRK, NAPRST, NAPBPT, NAPPRT INTEGER :: NOSWLL - INTEGER :: TOFRST(2), TONEXT(2,7), TOLAST(2,7), & - TBPI0(2), TBPIN(2), NDS(13) - REAL :: DTOUT(7) - LOGICAL :: FLOUT(7) + INTEGER :: TOFRST(2), TONEXT(2,8), TOLAST(2,8), & + TBPI0(2), TBPIN(2), NDS(13), OFILES(7) + REAL :: DTOUT(8) + LOGICAL :: FLOUT(8) TYPE(OTYPE1) :: OUT1 TYPE(OTYPE2) :: OUT2 TYPE(OTYPE3) :: OUT3 @@ -424,6 +425,7 @@ INTEGER, POINTER :: NOSWLL INTEGER, POINTER :: TOFRST(:), TONEXT(:,:), TOLAST(:,:), & TBPI0(:), TBPIN(:), NDS(:) + INTEGER, POINTER :: OFILES(:) REAL, POINTER :: DTOUT(:) LOGICAL, POINTER :: FLOUT(:) !/ @@ -1449,6 +1451,7 @@ !/ Local parameters !/ INTEGER :: NLOW + INTEGER :: J !/S INTEGER, SAVE :: IENT = 0 !/ !/S CALL STRACE (IENT, 'W3SETO') @@ -1503,6 +1506,7 @@ TBPI0 => OUTPTS(IMOD)%TBPI0 TBPIN => OUTPTS(IMOD)%TBPIN NDS => OUTPTS(IMOD)%NDS + OFILES => OUTPTS(IMOD)%OFILES ! DTOUT => OUTPTS(IMOD)%DTOUT FLOUT => OUTPTS(IMOD)%FLOUT diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index a226a8101..92783b73d 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -175,7 +175,7 @@ !/ CONTAINS !/ ------------------------------------------------------------------- / - SUBROUTINE W3WAVE ( IMOD, TEND, STAMP, NO_OUT & + SUBROUTINE W3WAVE ( IMOD, ODAT, TEND, STAMP, NO_OUT & !/OASIS ,ID_LCOMM & ) !/ @@ -410,7 +410,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ - INTEGER, INTENT(IN) :: IMOD, TEND(2) + INTEGER, INTENT(IN) :: IMOD, TEND(2),ODAT(35) LOGICAL, INTENT(IN), OPTIONAL :: STAMP, NO_OUT !/OASIS INTEGER, INTENT(IN), OPTIONAL :: ID_LCOMM !/ @@ -426,6 +426,7 @@ REFLED(6), IK, ITH, IS, NKCFL INTEGER :: ISP, IP_glob REAL :: ICEDAVE +! !/OASIS INTEGER :: OASISED !/SEC1 INTEGER :: ISEC1 !/SBS INTEGER :: JJ, NDSOFLG @@ -461,7 +462,7 @@ !AR SMC option is in conflict with lofical variables for regular grid ... chicken ... egg ... stuff LOGICAL :: RGLGRD = .TRUE., ARCTIC = .FALSE. !!Li -!/MPI LOGICAL :: FLGMPI(0:6) +!/MPI LOGICAL :: FLGMPI(0:8) !/IC3 REAL :: FIXEDVISC,FIXEDDENS,FIXEDELAS !/IC3 REAL :: USE_CHENG, USE_CGICE, HICE LOGICAL :: UGDTUPDATE ! true if time step should be updated for UG schemes @@ -556,7 +557,7 @@ ! IPASS = IPASS + 1 IDACT = ' ' - OUTID = ' ' + OUTID = ' ' FLACT = ITIME .EQ. 0 FLMAP = ITIME .EQ. 0 FLDDIR = ITIME .EQ. 0 .AND. ( FLCTH .OR. FSREFRACTION & @@ -902,8 +903,9 @@ !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE TIME LOOP 0' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) - +! ITIME = ITIME + 1 +! DTG = REAL(NINT(DTGA+DTRES+0.0001)) DTRES = DTRES + DTGA - DTG IF ( ABS(DTRES) .LT. 0.001 ) DTRES = 0. @@ -2146,6 +2148,8 @@ ! !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "end of time loop") !/TIMINGS CALL PRINT_MY_TIME("end of time loop") +! +! END DO !/DEBUGRUN WRITE(740+IAPROC,*) 'W3WAVE, step 6.21.1' @@ -2168,6 +2172,7 @@ ! !/DEBUGRUN WRITE(740+IAPROC,*) 'W3WAVE, step 6.21.2' !/DEBUGRUN FLUSH(740+IAPROC) +! IF ( TOFRST(1) .EQ. -1 ) THEN DTTST = 1. ELSE @@ -2288,6 +2293,17 @@ !/MPI END IF !/MPI END IF ! +!/DEBUGRUN WRITE(740+IAPROC,*) 'After DO_OUTPUT_EXCHANGES, step 2' +!/DEBUGRUN FLUSH(740+IAPROC) +!/MPI IF ( FLOUT(8) .AND. NRQRS.NE.0 ) THEN +!/MPI IF ( DSEC21(TIME,TONEXT(:,8)).EQ.0. ) THEN +!/MPI CALL MPI_STARTALL ( NRQRS, IRQRS , IERR_MPI ) +!/MPI FLGMPI(8) = .TRUE. +!/MPI NRQMAX = MAX ( NRQMAX , NRQRS ) +!/MPIT WRITE (NDST,9043) '8 ', NRQRS, NRQMAX, NAPRST +!/MPI END IF +!/MPI END IF +! !/DEBUGRUN WRITE(740+IAPROC,*) 'After DO_OUTPUT_EXCHANGES, step 3' !/DEBUGRUN FLUSH(740+IAPROC) !/MPI IF ( FLOUT(5) .AND. NRQBP.NE.0 ) THEN @@ -2339,7 +2355,9 @@ DO J=1, NOTYPE !/DEBUGRUN WRITE(740+IAPROC,*) 'NOTYPE, J=', J !/DEBUGRUN FLUSH(740+IAPROC) + IF ( FLOUT(J) ) THEN +! !/DEBUGRUN WRITE(740+IAPROC,*) 'Matching FLOUT(J)' !/DEBUGRUN FLUSH(740+IAPROC) ! @@ -2354,8 +2372,10 @@ !/MPI IF ( FLGMPI(1) ) CALL MPI_WAITALL & !/MPI ( NRQGO2, IRQGO2, STATIO, IERR_MPI ) !/MPI FLGMPI(1) = .FALSE. +! IF ( J .EQ. 1 ) CALL W3IOGO & ( 'WRITE', NDS(7), ITEST, IMOD ) +! !/SBS ! !/SBS ! Generate output flag file for fields and SBS coupling. !/SBS ! @@ -2364,6 +2384,7 @@ !/SBS FOUTNAME = 'Field_done.' // IDTIME(1:4) & !/SBS // IDTIME(6:7) // IDTIME(9:10) & !/SBS // IDTIME(12:13) // '.' // FILEXT(1:JJ) +! !/SBS OPEN( UNIT=NDSOFLG, FILE=FOUTNAME) !/SBS CLOSE( NDSOFLG ) END IF @@ -2402,7 +2423,8 @@ ! CALL W3IOTR ( NDS(11), NDS(12), VA, IMOD ) ELSE IF ( J .EQ. 4 ) THEN - CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD ) + CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD,& + FLOUT(8) ) ELSE IF ( J .EQ. 5 ) THEN IF ( IAPROC .EQ. NAPBPT ) THEN !/MPI IF (NRQBP2.NE.0) CALL MPI_WAITALL & @@ -2445,6 +2467,52 @@ END IF ! END DO + + +! If there is a second stream of restart files then J=8 and FLOUT(8)=.TRUE. + J=8 + IF ( FLOUT(J) ) THEN +! +!/DEBUGRUN WRITE(740+IAPROC,*) 'Matching FLOUT(J)' +!/DEBUGRUN FLUSH(740+IAPROC) +! +! 4.d Perform output +! + TOUT(:) = TONEXT(:,J) + DTTST = DSEC21 ( TIME, TOUT ) + IF ( DTTST .EQ. 0. ) THEN + CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD, & + FLOUT(8) ) + CALL TICK21 ( TOUT, DTOUT(J) ) + TONEXT(:,J) = TOUT + TLST = TOLAST(:,J) + DTTST = DSEC21 ( TOUT , TLST ) + FLOUT(J) = DTTST.GE.0. + IF ( FLOUT(J) ) THEN + OUTID(2*J-1:2*J-1) = 'X' +!/OASIS IF ( (DTOUT(7).NE.0) .AND. & +!/OASIS (DSEC21(TIME,TIME00).EQ.0 .OR. & +!/OASIS DSEC21(TIME,TIMEEND).EQ.0) ) OUTID(13:13) = ' ' + ELSE + OUTID(2*J-1:2*J-1) = 'L' + END IF + END IF +! +! 4.e Update next output 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 OF CHECKPOINT +! !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE AFTER TIME LOOP 3' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) @@ -2456,6 +2524,8 @@ !/MPI ( NRQPO, IRQPO1, STATIO, IERR_MPI ) !/MPI IF ( FLGMPI(4) ) CALL MPI_WAITALL & !/MPI ( NRQRS, IRQRS , STATIO, IERR_MPI ) +!/MPI IF ( FLGMPI(8) ) CALL MPI_WAITALL & +!/MPI ( NRQRS, IRQRS , STATIO, IERR_MPI ) !/MPI IF ( FLGMPI(5) ) CALL MPI_WAITALL & !/MPI ( NRQBP, IRQBP1, STATIO, IERR_MPI ) !/MPI IF ( NRQMAX .NE. 0 ) DEALLOCATE ( STATIO ) diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index a72c93509..a072a3cd1 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -44,6 +44,7 @@ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | T. J. Campbell, NRL | +!/ | J. Meixner, NCEP | !/ | A. J. van der Westhuysen | !/ | FORTRAN 90 | !/ | Last update : 09-Aug-2017 | @@ -634,7 +635,7 @@ logical :: lsep_se = .true. character(ESMF_MAXSTR) :: attstr integer(ESMF_KIND_I4) :: yy,mm,dd,h,m,s - type(ESMF_Time) :: ttmp + type(ESMF_Time) :: ttmp, cttmp type(ESMF_TimeInterval) :: tstep, etstep integer :: i, j, n, istep, imod, jmod integer, allocatable :: cplmap(:,:) @@ -750,8 +751,15 @@ ! ! 1.e Set internal start/stop time from external start/stop time ! + call ESMF_ClockGet(extClock, startTime=ttmp, rc=rc) if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_ClockGet(extClock, currTime=cttmp, rc=rc) + if (ESMF_LogFoundError(rc, PASSTHRU)) return +! +! Adjust internal start time to currTime in case of delayed start +! + if ( cttmp.gt.ttmp ) ttmp=cttmp call ESMF_TimeGet(ttmp, yy=yy,mm=mm,dd=dd,h=h,m=m,s=s, rc=rc) if (ESMF_LogFoundError(rc, PASSTHRU)) return stime(1) = 10000*yy + 100*mm + dd @@ -1942,9 +1950,9 @@ if ( abs(delt).gt.0 ) then lerr=.true. write(msg,'(a,i2,a,2(a,i8,a,i8,a))') & - 'Wave model grid ',imod,': ', & - 'Internal time (',time(1),'.',time(2),') /= ', & - 'Component time (',tcur(1),'.',tcur(2),')' + 'Wave model grid ',imod,': ', & + 'Internal time (',time(1),'.',time(2),') /= ', & + 'Component time (',tcur(1),'.',tcur(2),')' call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_ERROR) endif enddo diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 36fdde35c..df68d27d4 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -377,6 +377,8 @@ !/MPI MPI_COMM_BCT, CROOT, FBCAST !/MPRF USE WMMDATMD, ONLY: MDSP USE W3INITMD, ONLY: WWVER + USE W3ODATMD, ONLY: OFILES +! !/ IMPLICIT NONE ! @@ -407,8 +409,9 @@ INTEGER, ALLOCATABLE :: MDS(:,:), NTRACE(:,:), ODAT(:,:), & TMPRNK(:), TMPGRP(:), NINGRP(:), & TMOVE(:,:), LOADMP(:,:), IPRT(:,:), & - NDPOUT(:) + NDPOUT(:), OUTFF(:,:) REAL :: DTTST, XX, YY + !/MPRF REAL :: PRFT0, PRFTN !/MPRF REAL(KIND=8) :: get_memory REAL, ALLOCATABLE :: X(:), Y(:), AMOVE(:), DMOVE(:), & @@ -433,10 +436,12 @@ CHARACTER(LEN=13) :: IDFLDS(-7:7) CHARACTER(LEN=23) :: DTME21 - CHARACTER(LEN=30) :: IDOTYP(7) + CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: TNAME CHARACTER(LEN=80) :: LINE -! + CHARACTER(LEN=80) :: LINEIN + CHARACTER(LEN=8) :: WORDS(6) + TYPE OT2TPE INTEGER :: NPTS REAL, POINTER :: X(:), Y(:) @@ -464,7 +469,8 @@ 'Restart files ' , & 'Nesting data ' , & 'Separated wave field data ' , & - 'Fields for coupling ' / + 'Fields for coupling ' , & + 'Restart files second request '/ ! DATA IDSTR / 'LEV', 'CUR', 'WND', 'ICE', 'DT0', 'DT1', 'DT2' / ! @@ -644,11 +650,11 @@ ! ! 2.c Set up I/O for individual models (initial) ! - ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(35,0:NRGRD), & + ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(40,0:NRGRD), & FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & - FLG2(NOGRP,NRGRD) ) + FLG2(NOGRP,NRGRD),OUTFF(7,0:NRGRD)) ! MDS = -1 MDSF = -1 @@ -1069,6 +1075,7 @@ ELSE READ (MDSI,*,END=2001,ERR=2002) STIME, ETIME END IF +! CALL STME21 ( STIME , DTME21 ) IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) WRITE (MDSS,941) DTME21 CALL STME21 ( ETIME , DTME21 ) @@ -1112,9 +1119,54 @@ ! 5.b Process standard line ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) - READ (MDSI,*,END=2001,ERR=2002) (ODAT(I,1),I=5*(J-1)+1,5*J) +! + IF(J .LE. 2) THEN + READ (MDSI,'(A)') LINEIN + READ(LINEIN,*,iostat=ierr) WORDS +! + IF(J .LE. 1) THEN + READ(WORDS( 1 ), * ) ODAT(1,1) + READ(WORDS( 2 ), * ) ODAT(2,1) + READ(WORDS( 3 ), * ) ODAT(3,1) + READ(WORDS( 4 ), * ) ODAT(4,1) + READ(WORDS( 5 ), * ) ODAT(5,1) + ELSE + READ(WORDS( 1 ), * ) ODAT(6,1) + READ(WORDS( 2 ), * ) ODAT(7,1) + READ(WORDS( 3 ), * ) ODAT(8,1) + READ(WORDS( 4 ), * ) ODAT(9,1) + READ(WORDS( 5 ), * ) ODAT(10,1) + END IF + + IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN + OUTFF(J,1)=0 + ELSE + READ(WORDS( 6 ), * ) OUTFF(J,1) +! print*,' Number of data: ', 6 + END IF +! CHECKPOINT + ELSE IF(J .EQ. 4) THEN + READ (MDSI,'(A)') LINEIN + READ(LINEIN,*,iostat=ierr) WORDS +! + READ(WORDS( 1 ), * ) ODAT(16,1) + READ(WORDS( 2 ), * ) ODAT(17,1) + READ(WORDS( 3 ), * ) ODAT(18,1) + READ(WORDS( 4 ), * ) ODAT(19,1) + READ(WORDS( 5 ), * ) ODAT(20,1) + IF (WORDS(6) .EQ. 'T') THEN + READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(8-1)+1,5*8) + END IF + ELSE + READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J) + OUTFF(J,1) = 0 + END IF +! + OUTPTS(1)%OFILES(J)=OUTFF(J,1) +! +! ODAT(5*(J-1)+3,1) = MAX ( 0 , ODAT(5*(J-1)+3,1) ) -! +! IF ( ODAT(5*(J-1)+3,1) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & WRITE (MDSS,951) J, IDOTYP(J) @@ -1144,6 +1196,7 @@ DTME21(I:I) = ' ' END DO WRITE (MDSS,954) DTME21(1:19) + END IF IF ( J .EQ. 1 ) THEN ! @@ -1279,16 +1332,54 @@ ! ... End of loop in 5.a ! END DO +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +! Checkpoint + J=8 + IF ( ODAT(5*(J-1)+3,1) .NE. 0 ) THEN + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,951) J, IDOTYP(J) + TTIME(1) = ODAT(5*(J-1)+1,1) + TTIME(2) = ODAT(5*(J-1)+2,1) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,952) DTME21 + TTIME(1) = ODAT(5*(J-1)+4,1) + TTIME(2) = ODAT(5*(J-1)+5,1) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,953) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(J-1)+3,1) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(J-1)+1,1) .NE. ODAT(5*(J-1)+4,1) .OR. & + ODAT(5*(J-1)+2,1) .NE. ODAT(5*(J-1)+5,1) ) .AND. & + MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN + DO I=1, 18 + IF ( DTME21(I:I).NE.'0' .AND. & + DTME21(I:I).NE.'/' .AND. & + DTME21(I:I).NE.' ' .AND. & + DTME21(I:I).NE.':' ) EXIT + DTME21(I:I) = ' ' + END DO + WRITE (MDSS,954) DTME21(1:19) + END IF + END IF +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ! ! 5.i Set all grids to unified output ! IF ( UNIPTS ) THEN ODAT(6:10,0) = ODAT(6:10,1) ODAT( 8 , 1) = 0 + OUTPTS(1)%OFILES(1) = OUTFF(1,1) END IF ! DO I=2, NRGRD ODAT(:,I) = ODAT(:,1) + OUTFF(:,I) = OUTFF(:,1) + OUTPTS(I)%OFILES(:)=OUTFF(:,1) FLGD(:,I) = FLGD(:,1) FLGRD(:,:,I) = FLGRD(:,:,1) FLG2(:,I) = FLG2(:,1) @@ -1357,7 +1448,37 @@ ! 5.k Process standard line ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) - READ (MDSI,*,END=2001,ERR=2002) (ODAT(II,I),II=5*(J-1)+1,5*J) + IF(J .LE. 2) THEN + OUTFF(J,I)=0 + WORDS(6) ='' + READ (MDSI,'(A)') LINEIN + READ(LINEIN,*,iostat=ierr) WORDS + IF(J .EQ. 1) THEN + READ(WORDS( 1 ), * ) ODAT(1,I) + READ(WORDS( 2 ), * ) ODAT(2,I) + READ(WORDS( 3 ), * ) ODAT(3,I) + READ(WORDS( 4 ), * ) ODAT(4,I) + READ(WORDS( 5 ), * ) ODAT(5,I) + ELSE + READ(WORDS( 1 ), * ) ODAT(6,I) + READ(WORDS( 2 ), * ) ODAT(7,I) + READ(WORDS( 3 ), * ) ODAT(8,I) + READ(WORDS( 4 ), * ) ODAT(9,I) + READ(WORDS( 5 ), * ) ODAT(10,I) + END IF + IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN + OUTFF(J,I)=0 + ELSE + READ(WORDS( 6 ), * ) OUTFF(J,I) + END IF +! + ELSE + READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,I),II=5*(J-1)+1,5*J) + OUTFF(J,I) = 0 + END IF +! + OUTPTS(I)%OFILES(J)=OUTFF(J,I) +! ODAT(5*(J-1)+3,I) = MAX ( 0 , ODAT(5*(J-1)+3,I) ) ! IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN @@ -1516,6 +1637,7 @@ !/T DO I=1, NRGRD !/T WRITE (MDST,9050) I !/T WRITE (MDST,9051) ODAT(:,I) +!/T WRITE (MDST,9051) OUTFF(:,I) !/T WRITE (MDST,9052) FLGRD(:,:,I) !/T END DO ! @@ -2049,10 +2171,11 @@ ! IF ( MDSS.NE.MDSO .AND. NMPSC2.EQ.IMPROC ) WRITE (MDSS,982) - CALL W3INIT ( I, .TRUE., MNAMES(I), MDS(:,I), NTRACE(:,I), ODAT(:,I), & + CALL W3INIT ( I, .TRUE., MNAMES(I), MDS(:,I), NTRACE(:,I), & + ODAT(:,I), & FLGRD(:,:,I),FLGR2(:,:,I),FLGD(:,I),FLG2(:,I), & OT2(I)%NPTS, OT2(I)%X, OT2(I)%Y, OT2(I)%PNAMES, & - IPRT(:,I), LPRT(I), MPI_COMM_LOC ) + IPRT(:,I), LPRT(I), MPI_COMM_LOC) ! ! ..... Finalize I/O file hook up ! @@ -2226,6 +2349,18 @@ ENDIF END IF END DO +! +! CHECKPOINT + J=8 + IF ( FLOUT(J) ) THEN + IF ( TOUTP(1,I) .EQ. -1 ) THEN + TOUTP(:,I) = TONEXT(:,J) + ELSE + DTTST = DSEC21 ( TOUTP(:,I), TONEXT(:,J) ) + IF ( DTTST .LT. 0. ) TOUTP(:,I) = TONEXT(:,J) + ENDIF + END IF +! ! GRSTAT(I) = 0 TSYNC(:,I) = TIME(:) @@ -2325,13 +2460,13 @@ !/MPI CALL MPI_BCAST ( NBI , 1, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) ! -!/MPI CALL MPI_BCAST ( FLOUT, 7, MPI_LOGICAL, 0, & +!/MPI CALL MPI_BCAST ( FLOUT, 8, MPI_LOGICAL, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( DTOUT , 7, MPI_REAL, 0, & +!/MPI CALL MPI_BCAST ( DTOUT , 8, MPI_REAL, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( TONEXT,14, MPI_INTEGER, 0, & +!/MPI CALL MPI_BCAST ( TONEXT,16, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( TOLAST,14, MPI_INTEGER, 0, & +!/MPI CALL MPI_BCAST ( TOLAST,16, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) ! !/MPI END IF @@ -2528,6 +2663,8 @@ OUTPTS(0)%DTOUT ( 2) = REAL ( ODAT( 8,0) ) OUTPTS(0)%TOLAST(1,2) = ODAT( 9,0) OUTPTS(0)%TOLAST(2,2) = ODAT(10,0) + OUTPTS(0)%OFILES(1) = OUTFF(1,1) + OUTPTS(0)%OFILES(2) = OUTFF(2,1) ! TOUT = OUTPTS(0)%TONEXT(:,2) TLST = OUTPTS(0)%TOLAST(:,2) @@ -2673,7 +2810,8 @@ IF ( TSTOUT ) CALL WMUDMP ( MDST, 0 ) ! DEALLOCATE ( MDS, NTRACE, ODAT, FLGRD, FLGR2, FLGD, FLG2, INAMES,& - MNAMES ) + MNAMES & + ,OUTFF ) ! !/MPI CALL MPI_BARRIER ( MPI_COMM_MWAVE, IERR_MPI ) ! @@ -2985,6 +3123,8 @@ !/T 9050 FORMAT ( ' TEST WMINIT : GRID NUMBER',I3,' =================') !/T 9051 FORMAT ( ' TEST WMINIT : ODAT : ',I9.8,I7.6,I7,I9.8,I7.6, & !/T 5(/24X,I9.8,I7.6,I7,I9.8,I7.6) ) +!/T 9053 FORMAT ( ' TEST WMINITNML : OUTFF : ',I9.8 & +!/T 5(/24X,I9.8) ) !/T 9052 FORMAT ( ' TEST WMINIT : FLGRD : ',5(5L2,1X)/24X,5(5L2,1X)) ! !/T 9060 FORMAT ( ' TEST WMINIT : GRID MOVEMENT DATA') @@ -3254,6 +3394,7 @@ USE W3WDATMD, ONLY: W3NDAT, W3SETW USE W3ADATMD, ONLY: W3NAUX, W3SETA USE W3ODATMD, ONLY: W3NOUT, W3SETO + USE W3ODATMD, ONLY: OFILES USE W3IDATMD, ONLY: W3NINP, W3SETI, W3DIMI USE WMMDATMD, ONLY: WMNDAT, WMSETM, WMDIMD ! @@ -3340,7 +3481,8 @@ NPTS, JJ, IP1, IPN, MPI_COMM_LOC, & NMPSC2, JJJ, NCPROC, NPOUTT, NAPLOC, & NAPRES, NAPADD, NAPBCT, IFI, IFJ, IW, & - IFT, ILOOP + IFT, ILOOP +! INTEGER :: TTIME(2), TOUT(2), STMPT(2), ETMPT(2),& TLST(2) !/MPI INTEGER :: IERR_MPI, BGROUP, LGROUP, IROOT @@ -3349,7 +3491,8 @@ INTEGER, ALLOCATABLE :: MDS(:,:), NTRACE(:,:), ODAT(:,:), & TMPRNK(:), TMPGRP(:), NINGRP(:), & TMOVE(:,:), LOADMP(:,:), IPRT(:,:), & - NDPOUT(:) + NDPOUT(:) & + ,OUTFF(:,:) ! REAL :: DTTST, XX, YY !/MPRF REAL :: PRFT0, PRFTN @@ -3381,7 +3524,7 @@ !/MPRF CHARACTER(LEN=18) :: PFILE CHARACTER(LEN=13) :: IDFLDS(-7:7) CHARACTER(LEN=23) :: DTME21 - CHARACTER(LEN=30) :: IDOTYP(7) + CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: TNAME, LINE CHARACTER(LEN=1024) :: FLDOUT ! @@ -3406,7 +3549,8 @@ 'Restart files ' , & 'Nesting data ' , & 'Separated wave field data ' , & - 'Fields for coupling ' / + 'Fields for coupling ' , & + 'Restart files second request '/ ! DATA IDSTR / 'IC1', 'IC2', 'IC3', 'IC4', 'IC5', & 'MDN', 'MTH', 'MVS', 'LEV', 'CUR', & @@ -3603,11 +3747,12 @@ ! ! 2.c Set up I/O for individual models (initial) ! - ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(35,0:NRGRD), & + ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(40,0:NRGRD), & FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & - FLG2(NOGRP,NRGRD) ) + FLG2(NOGRP,NRGRD) & + ,OUTFF(7,0:NRGRD)) ! MDS = -1 MDSF = -1 @@ -4102,15 +4247,20 @@ READ(NML_OUTPUT_DATE(I)%FIELD%START, *) ODAT(1,I), ODAT(2,I) READ(NML_OUTPUT_DATE(I)%FIELD%STRIDE, *) ODAT(3,I) READ(NML_OUTPUT_DATE(I)%FIELD%STOP, *) ODAT(4,I), ODAT(5,I) + READ(NML_OUTPUT_DATE(I)%FIELD%OUTFFILE, *) OUTFF(1,I) READ(NML_OUTPUT_DATE(I)%POINT%START, *) ODAT(6,I), ODAT(7,I) READ(NML_OUTPUT_DATE(I)%POINT%STRIDE, *) ODAT(8,I) READ(NML_OUTPUT_DATE(I)%POINT%STOP, *) ODAT(9,I), ODAT(10,I) + READ(NML_OUTPUT_DATE(I)%POINT%OUTFFILE, *) OUTFF(2,I) READ(NML_OUTPUT_DATE(I)%TRACK%START, *) ODAT(11,I), ODAT(12,I) READ(NML_OUTPUT_DATE(I)%TRACK%STRIDE, *) ODAT(13,I) READ(NML_OUTPUT_DATE(I)%TRACK%STOP, *) ODAT(14,I), ODAT(15,I) READ(NML_OUTPUT_DATE(I)%RESTART%START, *) ODAT(16,I), ODAT(17,I) READ(NML_OUTPUT_DATE(I)%RESTART%STRIDE, *) ODAT(18,I) READ(NML_OUTPUT_DATE(I)%RESTART%STOP, *) ODAT(19,I), ODAT(20,I) + READ(NML_OUTPUT_DATE(I)%RESTART2%START, *) ODAT(36,I), ODAT(37,I) + READ(NML_OUTPUT_DATE(I)%RESTART2%STRIDE, *) ODAT(38,I) + READ(NML_OUTPUT_DATE(I)%RESTART2%STOP, *) ODAT(39,I), ODAT(40,I) READ(NML_OUTPUT_DATE(I)%BOUNDARY%START, *) ODAT(21,I), ODAT(22,I) READ(NML_OUTPUT_DATE(I)%BOUNDARY%STRIDE, *) ODAT(23,I) READ(NML_OUTPUT_DATE(I)%BOUNDARY%STOP, *) ODAT(24,I), ODAT(25,I) @@ -4130,6 +4280,7 @@ ODAT(23,I) = MAX ( 0 , ODAT(23,I) ) ODAT(28,I) = MAX ( 0 , ODAT(28,I) ) !!/COU ODAT(33,I) = MAX ( 0 , ODAT(33,I) ) + ODAT(38,I) = MAX ( 0 , ODAT(38,I) ) ! define the time of the output point grid (index 0) as the & ! time of the first grid which should be the larger one by convention @@ -4145,6 +4296,7 @@ ! ! 5.b Process standard line ! + OUTPTS(I)%OFILES(J)=OUTFF(J,I) IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & WRITE (MDSS,951) J, IDOTYP(J) @@ -4175,7 +4327,7 @@ END DO WRITE (MDSS,954) DTME21(1:19) END IF - +! IF ( J .EQ. 1 ) THEN ! ! 5.c Type 1: fields of mean wave parameters @@ -4353,6 +4505,45 @@ ! ... End of loop J on NOTYPE in 5.a ! END DO +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +! Checkpoint + J=8 + !OUTPTS(I)%FLOUT(8)=.FALSE. + IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN + !OUTPTS(I)%FLOUT(8)=.TRUE. + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,951) J, IDOTYP(J) + TTIME(1) = ODAT(5*(J-1)+1,I) + TTIME(2) = ODAT(5*(J-1)+2,I) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,952) DTME21 + TTIME(1) = ODAT(5*(J-1)+4,I) + TTIME(2) = ODAT(5*(J-1)+5,I) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,953) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(J-1)+3,I) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(J-1)+1,I) .NE. ODAT(5*(J-1)+4,I) .OR. & + ODAT(5*(J-1)+2,I) .NE. ODAT(5*(J-1)+5,I) ) .AND. & + MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN + DO II=1, 18 + IF ( DTME21(II:II).NE.'0' .AND. & + DTME21(II:II).NE.'/' .AND. & + DTME21(II:II).NE.' ' .AND. & + DTME21(II:II).NE.':' ) EXIT + DTME21(II:II) = ' ' + END DO + WRITE (MDSS,954) DTME21(1:19) + END IF + !ELSE + !OUTPTS(I)%FLOUT(8) = .FALSE. + END IF +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ! ! ... End of loop I on NRGRD in 5.a ! @@ -4360,7 +4551,7 @@ ! !/T DO I=1, NRGRD !/T WRITE (MDST,9050) I -!/T WRITE (MDST,9051) ODAT(:,I) +!/T WRITE (MDST,9053) ODAT(:,I) !/T WRITE (MDST,9052) FLGRD(:,:,I) !/T END DO ! @@ -4469,8 +4660,13 @@ IF ( ODAT( 3,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( ODAT(13,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( ODAT(28,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 +!xxx +! Checkpoint + IF ( ODAT(38,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 +!xxx IF ( ODAT( 8,I) .GT. 0 .OR. ODAT(18,I) .GT. 0 .OR. & - ODAT(23,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 + ODAT(23,I) .GT. 0 ) & + NDPOUT(I) = NDPOUT(I) + 1 IF ( IOSTYP .EQ. 2 ) NDPOUT(I) = MIN ( 1 , NDPOUT(I) ) END DO END IF @@ -4855,7 +5051,7 @@ ! ..... Model initialization ! IF ( MDSS.NE.MDSO .AND. NMPSC2.EQ.IMPROC ) WRITE (MDSS,982) - +! CALL W3INIT ( I, .TRUE., MNAMES(I), MDS(:,I), NTRACE(:,I), ODAT(:,I), & FLGRD(:,:,I),FLGR2(:,:,I),FLGD(:,I),FLG2(:,I), & OT2(I)%NPTS, OT2(I)%X, OT2(I)%Y, OT2(I)%PNAMES, & @@ -5033,6 +5229,25 @@ ENDIF END IF END DO +! +! Checkpoint + J=8 + OUTPTS(I)%FLOUT(8)=.FALSE. + IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN + OUTPTS(I)%FLOUT(8)=.TRUE. + ELSE + OUTPTS(I)%FLOUT(8)=.FALSE. + ENDIF + + IF ( FLOUT(J) ) THEN + IF ( TOUTP(1,I) .EQ. -1 ) THEN + TOUTP(:,I) = TONEXT(:,J) + ELSE + DTTST = DSEC21 ( TOUTP(:,I), TONEXT(:,J) ) + IF ( DTTST .LT. 0. ) TOUTP(:,I) = TONEXT(:,J) + ENDIF + END IF +! ! GRSTAT(I) = 0 TSYNC(:,I) = TIME(:) @@ -5132,13 +5347,13 @@ !/MPI CALL MPI_BCAST ( NBI , 1, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) ! -!/MPI CALL MPI_BCAST ( FLOUT, 7, MPI_LOGICAL, 0, & +!/MPI CALL MPI_BCAST ( FLOUT, 8, MPI_LOGICAL, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( DTOUT , 7, MPI_REAL, 0, & +!/MPI CALL MPI_BCAST ( DTOUT , 8, MPI_REAL, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( TONEXT,14, MPI_INTEGER, 0, & +!/MPI CALL MPI_BCAST ( TONEXT,16, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( TOLAST,14, MPI_INTEGER, 0, & +!/MPI CALL MPI_BCAST ( TOLAST,16, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) ! !/MPI END IF diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index 861e4ba22..3a5d5d8e4 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -235,6 +235,7 @@ !/ INTEGER :: J, JJ, I, JO, TPRNT(2), TAUX(2), & II, JJJ, IX, IY, UPNEXT(2), UPLAST(2) + INTEGER :: DUMMY2(35)=0 !/T INTEGER :: ILOOP !/S INTEGER, SAVE :: IENT = 0 !/MPI INTEGER :: IERR_MPI, NMPSCS @@ -355,6 +356,8 @@ CALL STME21 ( TSYNC(:,0), MTIME ) CALL WWTIME ( WTIME ) WRITE (MDSS,901) MTIME, WTIME, MINVAL(GRSTAT), MAXVAL(GRSTAT) + +! TPRNT = TSYNC(:,0) TSTAMP = .TRUE. ENDIF @@ -751,7 +754,7 @@ !/MPRF CALL PRTIME ( PRFT0 ) ! CALL WMSETM ( I, MDSE, MDST ) - CALL W3WAVE ( I, TSYNC(:,I), .FALSE., .TRUE. ) + CALL W3WAVE ( I, DUMMY2, TSYNC(:,I), .FALSE., .TRUE. ) IF ( FLLSTL ) INFLAGS1(1) = .FALSE. IF ( FLLSTI ) INFLAGS1(4) = .FALSE. ! @@ -1013,7 +1016,7 @@ ! END IF ! - CALL W3WAVE ( I, TSYNC(:,I), .FALSE. ) + CALL W3WAVE ( I, DUMMY2, TSYNC(:,I), .FALSE. ) ! IF ( FLGHG1 .AND. .NOT.FLGHG2 .AND. & GRDHGH(I,0).GT.0 ) THEN @@ -1044,6 +1047,16 @@ IF (DTTST.LT.0.) TOUTP(:,I) = TONEXT(:,JO) ENDIF END DO +! CHECKPOINT + JO=8 + IF ( .NOT.FLOUT(JO) ) CYCLE + IF ( TOUTP(1,I) .EQ. -1 ) THEN + TOUTP(:,I) = TONEXT(:,JO) + ELSE + DTTST = DSEC21 ( TOUTP(:,I) , TONEXT(:,JO) ) + IF (DTTST.LT.0.) TOUTP(:,I) = TONEXT(:,JO) + ENDIF +! END CHECKPOINT ! !/T WRITE (MDST,9091) TOUTP(:,I) ! @@ -1121,6 +1134,36 @@ ! !/MPI END DO ! +! Checkpoint +! +!/MPI JO=8 +! +!/MPI IF ( FLOUT(JO) ) THEN +!/MPI DO +!/MPI DTTST = DSEC21 ( TIME, TONEXT(:,JO) ) +!/MPI IF ( DTTST .LE. 0. ) THEN +!/MPI CALL TICK21 ( TONEXT(:,JO), DTOUT(JO) ) +!/MPI DTTST = DSEC21 ( TONEXT(:,JO), TOLAST(:,JO) ) +!/MPI IF ( DTTST .LT. 0. ) THEN +!/MPI FLOUT(JO) = .FALSE. +!/MPI EXIT +!/MPI END IF +!/MPI ELSE +!/MPI EXIT +!/MPI END IF +!/MPI END DO +!/MPI END IF +! +!/MPI IF ( .NOT.FLOUT(JO) ) CYCLE +!/MPI IF ( TOUTP(1,I) .EQ. -1 ) THEN +!/MPI TOUTP(:,I) = TONEXT(:,JO) +!/MPI ELSE +!/MPI DTTST = DSEC21 ( TOUTP(:,I) , TONEXT(:,JO) ) +!/MPI IF (DTTST.LT.0.) TOUTP(:,I) = TONEXT(:,JO) +!/MPI ENDIF +! + +! End Checkpoint !/MPIT WRITE (MDST,9991) TOUTP(:,I) !/MPI END IF ! diff --git a/model/ftn/ww3_grib.ftn b/model/ftn/ww3_grib.ftn index 28a8eacae..a4e88cceb 100644 --- a/model/ftn/ww3_grib.ftn +++ b/model/ftn/ww3_grib.ftn @@ -157,6 +157,10 @@ REAL :: DTREQ, DTEST, RFTIME LOGICAL :: FLREQ(NOGRP,NGRPP), FLGRIB(NOGRP,NGRPP) CHARACTER :: COMSTR*1, IDTIME*23, IDDDAY*11 + CHARACTER(LEN=80) :: LINEIN + CHARACTER(LEN=8) :: WORDS(5) + INTEGER :: GEN_PRO + !/ !/ ------------------------------------------------------------------- / !/ @@ -221,7 +225,20 @@ ! Output times ! CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=801,ERR=802) TOUT, DTREQ, NOUT + READ (NDSI,'(A)') LINEIN + WRITE(NDSO,*)' LINEIN: ',LINEIN + READ(LINEIN,*,iostat=ierr) WORDS + WRITE (NDSO,*) WORDS + READ(WORDS( 1 ), * ) TOUT(1) + READ(WORDS( 2 ), * ) TOUT(2) + READ(WORDS( 3 ), * ) DTREQ + READ(WORDS( 4 ), * ) NOUT + IF (WORDS(5) .NE. '0' .AND. WORDS(5) .NE. '1') THEN + GEN_PRO=-99999 + ELSE + READ(WORDS( 5 ), * ) GEN_PRO + ENDIF + WRITE(NDSO,*) 'GEN_PRO ',GEN_PRO DTREQ = MAX ( 0. , DTREQ ) IF ( DTREQ.EQ.0 ) NOUT = 1 NOUT = MAX ( 1 , NOUT ) @@ -664,8 +681,17 @@ ! (14) Scaled factor of (13) ! (15) Scaled value of (13) ! +! +! KPDS(3)=4 ensemble forecast:ww3_grib.inp has gen_pro set to 1 +! =2 deterministic forecast: ww3_grib.inp gen_pro set to 0 +! =2 legacy :with no gen_pro set in ww3_grib.inp +! (in the case of legacy the params revert back to old names) !/NCEP2 KPDSNUM = 0 -!/NCEP2 KPDS( 3) = 2 +!/NCEP2 if ( gen_pro.eq.1 ) then +!/NCEP2 KPDS( 3) = 4 +!/NCEP2 else +!/NCEP2 KPDS(3)=2 +!/NCEP2 endif !/NCEP2 KPDS( 4) = 0 !/NCEP2 KPDS( 5) = PID !/NCEP2 KPDS( 8) = 1 @@ -955,7 +981,8 @@ !/S INTEGER, SAVE :: IENT = 0 REAL :: X1(NX*NY), X2(NX*NY), XX(NX*NY), & XY(NX*NY), CABS, UABS, & - YY(NX*NY,0:NOSWLL), KPDS5A, KPDS5B + YY(NX*NY,0:NOSWLL), KPDS5A, KPDS5B, & + KPDS5A1(3) LOGICAL*1 :: BITMAP(NX*NY) LOGICAL :: FLONE, FLTWO, FLDIR, FLTRI, FLPRT !/ @@ -1123,7 +1150,12 @@ ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 3 ) THEN FLONE = .TRUE. !/NCEP1 KPDS(5) = -1 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then !/NCEP2 KPDS(2) = 28 +!/NCEP2 else +!/NCEP2 KPDS(2) = 25 +!/NCEP2 endif + CALL W3S2XY ( NSEA, NSEA, NX, NY, T02 , MAPSF, X1 ) ! ! Mean wave period (based on first moment) @@ -1139,7 +1171,11 @@ ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 5 ) THEN FLONE = .TRUE. !/NCEP1 KPDS(5) = -1 -!/NCEP2 KPDS(2) = 25 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS(2) = 34 +!/NCEP2 else +!/NCEP2 KPDS(2) = 15 +!/NCEP2 endif CALL W3S2XY ( NSEA, NSEA, NX, NY, T01 , MAPSF, X1 ) ! ! Peak frequency @@ -1150,7 +1186,7 @@ !/NCEP2 KPDS(2) = 11 DO ISEA=1, NSEA IF ( FP0(ISEA) .NE. UNDEF .AND. FP0(ISEA) .NE. 0 ) THEN - FP0(ISEA) = 1. / FP0(ISEA) + FP0(ISEA) = 1. / MAX(FR1,FP0(ISEA)) ! Limit FP to lowest discrete frequency END IF END DO CALL W3S2XY ( NSEA, NSEA, NX, NY, FP0 , MAPSF, X1 ) @@ -1183,7 +1219,11 @@ ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 9 ) THEN FLONE = .TRUE. !/NCEP1 KPDS(5) = 107 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS(2) = 46 +!/NCEP2 else !/NCEP2 KPDS(2) = 10 +!/NCEP2 endif !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, THP0, AnglD, .FALSE.) DO ISEA=1, NSEA @@ -1201,6 +1241,13 @@ !/NCEP1 KPDS5B = 105 !/NCEP2 KPDS5A = 5 !/NCEP2 KPDS5B = 8 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS5A1(1) =47 +!/NCEP2 KPDS5A1(2) =48 +!/NCEP2 KPDS5A1(3) =49 +!/NCEP2 else +!/NCEP2 KPDS5B = 8 +!/NCEP2 endif CALL W3S2XY & ( NSEA, NSEA, NX, NY, PHS(:,0), MAPSF, YY(:,0) ) DO I=1, NOSWLL @@ -1215,7 +1262,14 @@ !/NCEP1 KPDS5A = 110 !/NCEP1 KPDS5B = 106 !/NCEP2 KPDS5A = 6 -!/NCEP2 KPDS5B = 9 +!/NCEP2 KPDS5B = 9 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS5A1(1) = 50 +!/NCEP2 KPDS5A1(2) = 51 +!/NCEP2 KPDS5A1(3) = 52 +!/NCEP2 else +!/NCEP2 KPDS5B = 9 +!/NCEP2 endif CALL W3S2XY & ( NSEA, NSEA, NX, NY, PTP(:,0), MAPSF, YY(:,0) ) DO I=1, NOSWLL @@ -1245,7 +1299,14 @@ !/NCEP1 KPDS5A = 109 !/NCEP1 KPDS5B = 104 !/NCEP2 KPDS5A = 4 -!/NCEP2 KPDS5B = 7 +!/NCEP2 KPDS5B = 7 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS5A1(1) = 53 +!/NCEP2 KPDS5A1(2) = 54 +!/NCEP2 KPDS5A1(3) = 55 +!/NCEP2 else +!/NCEP2 KPDS5B = 7 +!/NCEP2 endif !/RTD DO I = 0,NOSWLL !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, PDIR(:,I), AnglD, .FALSE.) @@ -1393,6 +1454,32 @@ !/NCEP2 IF (IO .NE. 0) GOTO 830 !/NCEP2 CALL WRYTE (NDSDAT, LENGRIB, CGRIB) ! +!/NCEP2 if ((gen_pro.eq.0) .or. (gen_pro.eq.1)) then +!/NCEP1 KPDS(5) = KPDS5B +!/NCEP1 KPDS(6) = 241 +!/NCEP2 KPDS(10) = 241 + DO I=1, NOSWLL +!/NCEP1 KPDS(7) = I +!/NCEP2 KPDS(2) = KPDS5A1(I) +!/NCEP2 KPDS(12) = I + DO IXY=1, NX*NY + BITMAP(IXY) = YY(IXY,I) .NE. UNDEF + END DO +!/NCEP1 CALL PUTGB (NDSDAT,NDATA,KPDS,KGDS,BITMAP,YY(:,I),IO) +!/NCEP2 CALL GRIBCREATE (CGRIB,LCGRIB,LISTSEC0,LISTSEC1,IO) +!/NCEP2 IF (IO .NE. 0) GOTO 810 +!/NCEP2 CALL ADDGRID (CGRIB,LCGRIB,IGDS,KGDS,200,IDEFLIST, & +!/NCEP2 IDEFNUM, IO) +!/NCEP2 IF (IO .NE. 0) GOTO 820 +!/NCEP2 CALL ADDFIELD (CGRIB,LCGRIB,KPDSNUM,KPDS,200, & +!/NCEP2 COORDLIST, NUMCOORD, IDRSNUM, IDRS, & +!/NCEP2 200,YY(:,I), NDATA, IBMP, BITMAP, IO) +!/NCEP2 IF (IO .NE. 0) GOTO 820 +!/NCEP2 CALL GRIBEND (CGRIB, LCGRIB, LENGRIB, IO) +!/NCEP2 IF (IO .NE. 0) GOTO 830 +!/NCEP2 CALL WRYTE (NDSDAT, LENGRIB, CGRIB) + END DO +!/NCEP2 ELSE !/NCEP1 KPDS(5) = KPDS5B !/NCEP1 KPDS(6) = 241 !/NCEP2 KPDS(2) = KPDS5B @@ -1417,6 +1504,7 @@ !/NCEP2 IF (IO .NE. 0) GOTO 830 !/NCEP2 CALL WRYTE (NDSDAT, LENGRIB, CGRIB) END DO +!/NCEP2 ENDIF !/NCEP1 KPDS(6) = 1 !/NCEP1 KPDS(7) = 1 !/NCEP2 KPDS(10) = 1 diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index c123ea717..c8ab524d8 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -51,6 +51,8 @@ !/ 15-May-2018 : Update namelist ( version 6.05 ) !/ 06-Jun-2018 : Add PDLIB/MEMCHECK/NETCDF_QAD/DEBUGINIT ( version 6.04 ) !/ 14-Sep-2018 : Remove PALM implementation ( version 6.06 ) +!/ 04-Oct-2019 : Inline Output implementation ( version 6.07 ) +!/ (Roberto Padilla-Hernandez) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -243,6 +245,7 @@ USE W3ODATMD, ONLY: W3NOUT, W3SETO USE W3ODATMD, ONLY: NAPROC, IAPROC, NAPOUT, NAPERR, NOGRP, & NGRPP, IDOUT, FNMPRE, IOSTYP, NOTYPE + USE W3ODATMD, ONLY: OFILES !/ USE W3FLDSMD USE W3INITMD @@ -292,8 +295,9 @@ INTEGER :: NDSF(-7:7), NDS(13), NTRACE(2), NDT(5:7), & TIME0(2), TIMEN(2), TTIME(2), TTT(2), & NH(-7:8), THO(2,-7:8,NHMAX), RCLD(5:7), & - NODATA(5:7), ODAT(35), IPRT(6) = 0, & - STARTDATE(8), STOPDATE(8), IHH(-7:8) + NODATA(5:7), ODAT(40), IPRT(6) = 0, & + STARTDATE(8), STOPDATE(8), IHH(-7:8) +! !/OASIS INTEGER :: OASISED !/COU INTEGER :: OFL !/F90 INTEGER :: CLKDT1(8), CLKDT2(8), CLKDT3(8) @@ -317,10 +321,13 @@ CHARACTER(LEN=13) :: IDFLDS(-7:8) CHARACTER(LEN=20) :: STRNG CHARACTER(LEN=23) :: DTME21 - CHARACTER(LEN=30) :: IDOTYP(7) + CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: LINE CHARACTER(LEN=256) :: TMPLINE, TEST CHARACTER(LEN=1024) :: FLDIN + CHARACTER(LEN=80) :: LINEIN + CHARACTER(LEN=8) :: WORDS(6)='' + !/COU CHARACTER(LEN=30) :: OFILE ! LOGICAL :: FLLSTL, FLLSTI, FLFLG, FLHOM, TFLAGI, & @@ -351,7 +358,8 @@ 'Restart files ' , & 'Nesting data ' , & 'Partitioned wave field data ' , & - 'Fields for coupling ' / + 'Fields for coupling ' , & + 'Restart files second request '/ DATA IDSTR / 'IC1', 'IC2', 'IC3', 'IC4', 'IC5', 'MDN', 'MTH', & 'MVS', 'LEV', 'CUR', 'WND', 'ICE', 'DT0', 'DT1', & 'DT2', 'MOV' / @@ -739,15 +747,26 @@ READ(NML_OUTPUT_DATE%FIELD%START, *) ODAT(1), ODAT(2) READ(NML_OUTPUT_DATE%FIELD%STRIDE, *) ODAT(3) READ(NML_OUTPUT_DATE%FIELD%STOP, *) ODAT(4), ODAT(5) + + READ(NML_OUTPUT_DATE%FIELD%OUTFFILE, *) OFILES(1) +! OUTPTS(I)%OUTSTRIDE(1)=ODAT(3,I) + READ(NML_OUTPUT_DATE%POINT%START, *) ODAT(6), ODAT(7) READ(NML_OUTPUT_DATE%POINT%STRIDE, *) ODAT(8) READ(NML_OUTPUT_DATE%POINT%STOP, *) ODAT(9), ODAT(10) + + READ(NML_OUTPUT_DATE%POINT%OUTFFILE, *) OFILES(2) +! OUTPTS(I)%OUTSTRIDE(2)=ODAT(8,I) + READ(NML_OUTPUT_DATE%TRACK%START, *) ODAT(11), ODAT(12) READ(NML_OUTPUT_DATE%TRACK%STRIDE, *) ODAT(13) READ(NML_OUTPUT_DATE%TRACK%STOP, *) ODAT(14), ODAT(15) READ(NML_OUTPUT_DATE%RESTART%START, *) ODAT(16), ODAT(17) READ(NML_OUTPUT_DATE%RESTART%STRIDE, *) ODAT(18) READ(NML_OUTPUT_DATE%RESTART%STOP, *) ODAT(19), ODAT(20) + READ(NML_OUTPUT_DATE%RESTART2%START, *) ODAT(36), ODAT(37) + READ(NML_OUTPUT_DATE%RESTART2%STRIDE, *) ODAT(38) + READ(NML_OUTPUT_DATE%RESTART2%STOP, *) ODAT(39), ODAT(40) READ(NML_OUTPUT_DATE%BOUNDARY%START, *) ODAT(21), ODAT(22) READ(NML_OUTPUT_DATE%BOUNDARY%STRIDE, *) ODAT(23) READ(NML_OUTPUT_DATE%BOUNDARY%STOP, *) ODAT(24), ODAT(25) @@ -766,13 +785,14 @@ ODAT(23) = MAX ( 0 , ODAT(23) ) ODAT(28) = MAX ( 0 , ODAT(28) ) ODAT(33) = MAX ( 0 , ODAT(33) ) - + ODAT(38) = MAX ( 0 , ODAT(38) ) ! 2.5 Output types NPTS = 0 NOTYPE = 6 !/COU NOTYPE = 7 DO J = 1, NOTYPE +! OUTPTS(I)%OFILES(J)=OFILES(J) IF ( ODAT(5*(J-1)+3) .NE. 0 ) THEN ! Type 1: fields of mean wave parameters @@ -1178,7 +1198,61 @@ !/DEBUGINIT write(740+IAPROC,*), 'J=', J, '/ NOTYPE=', NOTYPE CALL NEXTLN ( COMSTR , NDSI , NDSEN ) !/DEBUGINIT write(740+IAPROC,*), 'Before read 2002, case 7' - READ (NDSI,*) (ODAT(I),I=5*(J-1)+1,5*J) +! +! CHECKPOINT + IF(J .EQ. 4) THEN + ODAT(38)=0 + READ (NDSI,'(A)') LINEIN + READ(LINEIN,*,iostat=ierr) WORDS + READ(WORDS( 1 ), * ) ODAT(16) + READ(WORDS( 2 ), * ) ODAT(17) + READ(WORDS( 3 ), * ) ODAT(18) + READ(WORDS( 4 ), * ) ODAT(19) + READ(WORDS( 5 ), * ) ODAT(20) + IF (WORDS(6) .EQ. 'T') THEN + READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(8-1)+1,5*8) + WRITE(*,*)(ODAT(I),I=5*(8-1)+1,5*8) + END IF + ELSE +! +!INLINE NEW VARIABLE TO READ IF PRESENT OFILES(J), IF NOT ==0 +! READ (NDSI,*) (ODAT(I),I=5*(J-1)+1,5*J) +! READ (NDSI,*,IOSTAT=IERR) (ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) + IF(J .LE. 2) THEN +! READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) + READ (NDSI,'(A)') LINEIN + READ(LINEIN,*,iostat=ierr) WORDS + DO I=1,6 +! WRITE(*,*) I, WORDS(I) + END DO +! + IF(J .EQ. 1) THEN + READ(WORDS( 1 ), * ) ODAT(1) + READ(WORDS( 2 ), * ) ODAT(2) + READ(WORDS( 3 ), * ) ODAT(3) + READ(WORDS( 4 ), * ) ODAT(4) + READ(WORDS( 5 ), * ) ODAT(5) + ELSE + READ(WORDS( 1 ), * ) ODAT(6) + READ(WORDS( 2 ), * ) ODAT(7) + READ(WORDS( 3 ), * ) ODAT(8) + READ(WORDS( 4 ), * ) ODAT(9) + READ(WORDS( 5 ), * ) ODAT(10) + END IF + + IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN + OFILES(J)=0 + ELSE + READ(WORDS( 6 ), * ) OFILES(J) + END IF + + + ELSE + OFILES(J)=0 + READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J) + END IF +! WRITE(*,*) 'OFILES(J)= ', OFILES(J),J +! !/DEBUGINIT write(740+IAPROC,*), ' After read 2002, case 7' ODAT(5*(J-1)+3) = MAX ( 0 , ODAT(5*(J-1)+3) ) ! @@ -1322,6 +1396,7 @@ END IF ! J END IF ! ODAT + END IF ! IF J=4 END DO ! J ! force minimal allocation to avoid memory seg fault @@ -1575,8 +1650,37 @@ END IF END IF END DO - - +! +! CHECKPOINT + J=8 + IF (ODAT(38) .NE. 0) THEN + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,941) J, IDOTYP(J) + TTIME(1) = ODAT(5*(J-1)+1) + TTIME(2) = ODAT(5*(J-1)+2) + CALL STME21 ( TTIME , DTME21 ) + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,942) DTME21 + TTIME(1) = ODAT(5*(J-1)+4) + TTIME(2) = ODAT(5*(J-1)+5) + CALL STME21 ( TTIME , DTME21 ) + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,943) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(J-1)+3) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(J-1)+1) .NE. ODAT(5*(J-1)+4) .OR. & + ODAT(5*(J-1)+2) .NE. ODAT(5*(J-1)+5) ) .AND. & + IAPROC .EQ. NAPOUT ) THEN + IF ( DTME21(9:9) .NE. '0' ) THEN + WRITE (NDSO,1944) DTME21( 9:19) + ELSE IF ( DTME21(10:10) .NE. '0' ) THEN + WRITE (NDSO,2944) DTME21(10:19) + ELSE + WRITE (NDSO,3944) DTME21(12:19) + END IF + END IF + END IF +! ! 2.5 Output types !/T WRITE (NDST,9040) ODAT @@ -1604,7 +1708,22 @@ CONTINUE END IF END DO - +! +! CHECKPOINT + J = 8 + DTTST = DSEC21 ( TIME0 , ODAT(5*(J-1)+4:5*(J-1)+5) ) + IF ( DTTST .LT. 0 ) THEN + ODAT(5*(J-1)+3) = 0 + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,8945) TRIM(IDOTYP(J)) + CONTINUE + END IF + DTTST = DSEC21 ( ODAT(5*(J-1)+1:5*(J-1)+2), TIMEN ) + IF ( DTTST .LT. 0 ) THEN + ODAT(5*(J-1)+3) = 0 + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,8945) TRIM(IDOTYP(J)) + CONTINUE + END IF +! !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL SECTION 5' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) @@ -1624,7 +1743,7 @@ CALL W3INIT ( 1, .FALSE., 'ww3', NDS, NTRACE, ODAT, FLGRD, FLGR2, FLGD, & FLG2, NPTS, X, Y, PNAMES, IPRT, PRTFRM, MPI_COMM, & FLAGSTIDEIN=FLAGSTIDE ) - +! ! IF (MINVAL(VA) .LT. 0.) THEN ! WRITE(740+IAPROC,*) 'NEGATIVE ACTION SHELL 5', MINVAL(VA) ! CALL FLUSH(740+IAPROC) @@ -1690,7 +1809,7 @@ IF ( .NOT. FLFLG ) THEN ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,960) - CALL W3WAVE ( 1, TIMEN & + CALL W3WAVE ( 1, ODAT, TIMEN & !/OASIS ,.TRUE., .FALSE., MPI_COMM & ) ! @@ -2170,7 +2289,7 @@ ! TIME0 = TTIME ! - CALL W3WAVE ( 1, TIME0 & + CALL W3WAVE ( 1, ODAT, TIME0 & !/OASIS ,.TRUE., .FALSE., MPI_COMM & ) @@ -2212,7 +2331,7 @@ IF ( DTTST .EQ. 0. ) THEN IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,*) ' ' - CALL W3WAVE ( 1, TIME0 & + CALL W3WAVE ( 1, ODAT, TIME0 & !/OASIS , .TRUE., .FALSE., MPI_COMM & ) END IF diff --git a/model/inp/ww3_grib.inp b/model/inp/ww3_grib.inp index 27f9c8101..8519842ac 100644 --- a/model/inp/ww3_grib.inp +++ b/model/inp/ww3_grib.inp @@ -5,6 +5,13 @@ $ Time, time increment and number of outputs. $ 19680606 000000 3600. 3 $ +$ Time, time increment and number of outputs. Option to encode grib2 +$ from ensemble runs (replace line above with commented line below). +$ Usage: include additional (optional) 5th parameter +$ 0 - deterministic (default) +$ 1 - ensemble run +$ 19680606 000000 3600. 3 1 +$ $ Output request flags identifying fields as in ww3_shel.inp. See that $ file for a full documentation of field output options. Namelist type $ selection is used here (for alternative F/T flags, see ww3_shel.inp). diff --git a/regtests/mww3_test_06/info b/regtests/mww3_test_06/info index fd714f1e9..254671b94 100644 --- a/regtests/mww3_test_06/info +++ b/regtests/mww3_test_06/info @@ -30,7 +30,9 @@ # + Spectral grid: ntheta = 12, nf = 3, f1 = 0.0368, fgamma = 1.10 # # # # * Grid sets available : # -# + grdset_d : gbandd360 arcticsub # +# + grdset_d : gbandd360 arcticsub # +# + grdset_d_h : gbandd360 arcticsub with hourly binary output # +# + grdset_d_r : gbandd360 arcticsub with check point output # # # # - switch options (mostly self-explanatory). # # + switch_PR3_UQ # @@ -65,8 +67,17 @@ # ../model mww3_test_06 # # ./bin/run_test -m grdset_d -n 3 -p mpirun -s PR3_UQ_MPI_SCRIP_T38 \ # # ../model mww3_test_06 # +# ./bin/run_test -m grdset_d_r -n 3 -p mpirun -s PR3_UQ_SCRIP\ # +# ../model mww3_test_06 # # # -# Erick Rogers, Nov 2013 # +# For testing output file generation per output time step use: # +# ./bin/run_test -m grdset_d_h -s PR3_UQ_SCRIP ../model mww3_test_06 # +# # +# For testing generation of second stream of restart files use: # +# ./bin/run_test -m grdset_d_r -s PR3_UQ_SCRIP ../model mww3_test_06 # +# # +# Erick Rogers, Nov 2013 # +# Roberto Padilla, Jan 2019 # # # # Copyright 2009-2013 National Weather Service (NWS), # # National Oceanic and Atmospheric Administration. All rights # diff --git a/regtests/mww3_test_06/input/grdset_d_h b/regtests/mww3_test_06/input/grdset_d_h new file mode 100644 index 000000000..72f21f669 --- /dev/null +++ b/regtests/mww3_test_06/input/grdset_d_h @@ -0,0 +1,4 @@ +MODEL: gbandd360 arcticsub +INPUT: +POINT: points +INTGL: glout diff --git a/regtests/mww3_test_06/input/grdset_d_r b/regtests/mww3_test_06/input/grdset_d_r new file mode 100644 index 000000000..aa51e7329 --- /dev/null +++ b/regtests/mww3_test_06/input/grdset_d_r @@ -0,0 +1,4 @@ +MODEL: gbandd360 arcticsub +INPUT: +POINT: gbandd360 arcticsub +INTGL: glout diff --git a/regtests/mww3_test_06/input/ww3_grid_points.inp b/regtests/mww3_test_06/input/ww3_grid_points.inp new file mode 100644 index 000000000..4e2037dde --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_grid_points.inp @@ -0,0 +1,29 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'Point output mww3_test_04 ' +$ + 1.03 0.075 20 24 0. +$ + F T T T T F + 720. 720. 720. 15. +$ +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 5.E3 5.E3 1. + -5.E3 -5.E3 1. +$ + -0.1 0.25 10 -100. 3 1 '(....)' 'UNIT' 'dummy' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 3 1 '(....)' 'PART' 'dummy' + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 +$ diff --git a/regtests/mww3_test_06/input/ww3_grid_points.nml b/regtests/mww3_test_06/input/ww3_grid_points.nml new file mode 100644 index 000000000..d9f307d81 --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_grid_points.nml @@ -0,0 +1,226 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.03 + SPECTRUM%FREQ1 = 0.075 + SPECTRUM%NK = 20 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLCX = T + RUN%FLCY = T + RUN%FLCTH = T + RUN%FLCK = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 720. + TIMESTEPS%DTXY = 720. + TIMESTEPS%DTKTH = 720. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'Point output mww3_test_04' + GRID%NML = '../input/namelists_points.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.1 + GRID%DMIN = 0.25 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 5.E3 + RECT%SY = 5.E3 + RECT%X0 = -5.E3 + RECT%Y0 = -5.E3 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -100. + DEPTH%FILENAME = '../input/points.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp index 92037c4be..3e9639df7 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp @@ -96,7 +96,7 @@ $ -------------------------------------------------------------------- $ $ Conventional output requests as in ww3_shel.inp. Will be applied $ to all grids. $ - 19680606 000000 3600 19680608 000000 + 19680606 000000 3600 19680608 000000 $ $ N diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp new file mode 100644 index 000000000..a73f4874a --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp @@ -0,0 +1,145 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III multi-grid model driver input file $ +$ -------------------------------------------------------------------- $ +$ +$ The first input line sets up the general multi-grid model definition +$ by defining the follwing six parameters : +$ +$ 1) Number of wave model grids.i ( NRGRD ) +$ 2) Number of grids defining input fields. ( NRINP ) +$ 3) Flag for using unified point output file. ( UNIPTS ) +$ 4) Output server type as in ww3_shel.inp +$ 5) Flag for dedicated process for iunified point output. +$ 6) Flag for grids sharing dedicated output processes. +$ +$ 3 1 T 1 T T {example} + 2 0 T 1 F F +$ +$ -------------------------------------------------------------------- $ +$ If there are input data grids defined ( NRINP > 0 ), then these +$ grids are defined first. These grids are defined as if they are wave +$ model grids using the file mod_def.MODID. Each grid is defined on +$ a separate input line with MODID, and eight input flags identifying +$ the presentce of 1) water levels 2) currents 3) winds 4) ice and +$ 5-7) assimilation data as in the file ww3_shel.inp. +$ +$ 'input' F F T F F F F {example} +$ +$ In this example, we need the file mod_def.input to define the grid +$ and the file wind.input to provide the corresponding wind data. +$ +$ -------------------------------------------------------------------- $ +$ If all point output is gathered in a unified point output file +$ ( UNIPTS = .TRUE. ), then the output spectral grid needs to be +$ defined. Ths information is taken from a wave model grid, and only +$ the spectral definitions from this grid are relevant. Define the +$ name of this grid here +$ + 'points' +$ +$ In this example, we need the file mod_def.points to define the +$ spectral output grid, and the point output will be written to the +$ file out_pnt.points +$ +$ -------------------------------------------------------------------- $ +$ Now each actual wave model grid is defined using 13 parameters to be +$ read fom a single line in the file. Each line contains the following +$ parameters +$ 1) Define the grid with the extension of the mod_def file. +$ 2-8) Define the inputs used by the grids with 8 keywords +$ corresponding to the 8 flags defining the input in the +$ input files. Valid keywords are: +$ 'no' : This input is not used. +$ 'native' : This grid has its own input files, e.g. grid +$ grdX (mod_def.grdX) uses ice.grdX. +$ 'MODID' : Take input from the grid identified by +$ MODID. In the example below, all grids get +$ their wind from wind.input (mod_def.input). +$ 9) Rank number of grid (internally sorted and reassigned). +$ 10) Group number (internally reassigned so that different +$ ranks result in different group numbers. +$ 11-12) Define fraction of communicator (processes) used for this +$ grid. +$ 13) Flag identifying dumping of boundary data used by this +$ grid. If true, the file nest.MODID is generated. +$ +$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} +$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} +$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} +$ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F +$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F +$ +$ +$ In this example three grids are used requiring the files +$ mod_def.grdN. All files get ther winds from the grid 'input' +$ defined by mod_def.input, and no other inputs are used. In the lines +$ that are commented out, each grid runs on a part of the pool of +$ processes assigned to the computation. +$ +$ -------------------------------------------------------------------- $ +$ Starting and ending times for the entire model run +$ + 19680606 000000 19680607 000000 +$ +$ -------------------------------------------------------------------- $ +$ Specific multi-scale model settings (single line). +$ Flag for masking computation in two-way nesting (except at +$ output times). +$ Flag for masking at printout time. +$ + T T +$ +$ +$ -------------------------------------------------------------------- $ +$ Conventional output requests as in ww3_shel.inp. Will be applied +$ to all grids. +$ + 19680606 000000 3600 19680608 000000 1 +$ +$ +N +DPT HS +$ +$ NOTE: Ff UNIPTS = .TRUE. then the point output needs to be defined +$ here and cannot be redefined below. +$ + 19680606 000000 3600 19680608 000000 1 + 15.50 73.50 'LFB1' + 30.00 74.00 'LFB2' + 28.5 71.5833 'Nordkyn' + 0.0 0.0 'STOPSTRING' + 19680606 000000 0 19680608 000000 + 19680606 000000 0 19680608 000000 + 19680606 000000 0 19680608 000000 + 19680606 000000 0 19680608 000000 +$ +$ -------------------------------------------------------------------- $ +$ Output requests per grid and type to overwrite general setup +$ as defined above. First record per set is the grid name MODID +$ and the output type number. Then follows the standard time string, +$ and conventional data as per output type. In mww3_test_05 this is +$ not used. Below, one example generating partitioning output for +$ the inner grid is included but commented out. +$ +$ 'grd3' 6 +$ 19680606 000000 900 19680608 000000 +$ 0 999 1 0 999 1 T +$ +$ -------------------------------------------------------------------- $ +$ Mandatory end of outpout requests per grid, identified by output +$ type set to 0. +$ + 'the_end' 0 +$ +$ +$ -------------------------------------------------------------------- $ +$ Moving grid data as in ww3_shel.inp. All grids will use same data. +$ +$ 'MOV' 19680606 000000 5. 90. {example} + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp new file mode 100644 index 000000000..5a7094f3a --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp @@ -0,0 +1,146 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III multi-grid model driver input file $ +$ -------------------------------------------------------------------- $ +$ +$ The first input line sets up the general multi-grid model definition +$ by defining the follwing six parameters : +$ +$ 1) Number of wave model grids.i ( NRGRD ) +$ 2) Number of grids defining input fields. ( NRINP ) +$ 3) Flag for using unified point output file. ( UNIPTS ) +$ 4) Output server type as in ww3_shel.inp +$ 5) Flag for dedicated process for iunified point output. +$ 6) Flag for grids sharing dedicated output processes. +$ +$ 3 1 T 1 T T {example} + 2 0 F 1 F F +$ +$ -------------------------------------------------------------------- $ +$ If there are input data grids defined ( NRINP > 0 ), then these +$ grids are defined first. These grids are defined as if they are wave +$ model grids using the file mod_def.MODID. Each grid is defined on +$ a separate input line with MODID, and eight input flags identifying +$ the presentce of 1) water levels 2) currents 3) winds 4) ice and +$ 5-7) assimilation data as in the file ww3_shel.inp. +$ +$ 'input' F F T F F F F {example} +$ +$ In this example, we need the file mod_def.input to define the grid +$ and the file wind.input to provide the corresponding wind data. +$ +$ -------------------------------------------------------------------- $ +$ If all point output is gathered in a unified point output file +$ ( UNIPTS = .TRUE. ), then the output spectral grid needs to be +$ defined. Ths information is taken from a wave model grid, and only +$ the spectral definitions from this grid are relevant. Define the +$ name of this grid here +$ +$ 'points' {example} +$ +$ In this example, we need the file mod_def.points to define the +$ spectral output grid, and the point output will be written to the +$ file out_pnt.points +$ +$ -------------------------------------------------------------------- $ +$ Now each actual wave model grid is defined using 13 parameters to be +$ read fom a single line in the file. Each line contains the following +$ parameters +$ 1) Define the grid with the extension of the mod_def file. +$ 2-8) Define the inputs used by the grids with 8 keywords +$ corresponding to the 8 flags defining the input in the +$ input files. Valid keywords are: +$ 'no' : This input is not used. +$ 'native' : This grid has its own input files, e.g. grid +$ grdX (mod_def.grdX) uses ice.grdX. +$ 'MODID' : Take input from the grid identified by +$ MODID. In the example below, all grids get +$ their wind from wind.input (mod_def.input). +$ 9) Rank number of grid (internally sorted and reassigned). +$ 10) Group number (internally reassigned so that different +$ ranks result in different group numbers. +$ 11-12) Define fraction of communicator (processes) used for this +$ grid. +$ 13) Flag identifying dumping of boundary data used by this +$ grid. If true, the file nest.MODID is generated. +$ +$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} +$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} +$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} +$ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F +$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F +$ +$ +$ In this example three grids are used requiring the files +$ mod_def.grdN. All files get ther winds from the grid 'input' +$ defined by mod_def.input, and no other inputs are used. In the lines +$ that are commented out, each grid runs on a part of the pool of +$ processes assigned to the computation. +$ +$ -------------------------------------------------------------------- $ +$ Starting and ending times for the entire model run +$ + 19680606 000000 19680608 000000 +$ +$ -------------------------------------------------------------------- $ +$ Specific multi-scale model settings (single line). +$ Flag for masking computation in two-way nesting (except at +$ output times). +$ Flag for masking at printout time. +$ + T T +$ +$ +$ -------------------------------------------------------------------- $ +$ Conventional output requests as in ww3_shel.inp. Will be applied +$ to all grids. +$ + 19680606 000000 3600 19680608 000000 +$ +$ +N +DPT HS +$ +$ NOTE: Ff UNIPTS = .TRUE. then the point output needs to be defined +$ here and cannot be redefined below. +$ + 19680606 000000 7200 19680607 000000 + 15.50 73.50 'LFB1' + 30.00 74.00 'LFB2' + 28.5 71.5833 'Nordkyn' + 0.0 0.0 'STOPSTRING' + 19680606 000000 0 19680607 000000 + 19680606 060000 10800 19680606 060000 T + 19680607 000000 86400 19680608 000000 + 19680606 000000 0 19680607 000000 + 19680606 000000 0 19680607 000000 +$ +$ -------------------------------------------------------------------- $ +$ Output requests per grid and type to overwrite general setup +$ as defined above. First record per set is the grid name MODID +$ and the output type number. Then follows the standard time string, +$ and conventional data as per output type. In mww3_test_05 this is +$ not used. Below, one example generating partitioning output for +$ the inner grid is included but commented out. +$ +$ 'grd3' 6 +$ 19680606 000000 900 19680608 000000 +$ 0 999 1 0 999 1 T +$ +$ -------------------------------------------------------------------- $ +$ Mandatory end of outpout requests per grid, identified by output +$ type set to 0. +$ + 'the_end' 0 +$ +$ +$ -------------------------------------------------------------------- $ +$ Moving grid data as in ww3_shel.inp. All grids will use same data. +$ +$ 'MOV' 19680606 000000 5. 90. {example} + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml new file mode 100644 index 000000000..21e323eb5 --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml @@ -0,0 +1,242 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_multi.nml - multi-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%NRINP = 0 ! Number of grids defining input fields. +! DOMAIN%NRGRD = 1 ! Number of wave model grids. +! DOMAIN%UNIPTS = F ! Flag for using unified point output file. +! DOMAIN%IOSTYP = 1 ! Output server type as in ww3_shel.nml +! DOMAIN%UPPROC = F ! Flag for dedicated process for unified point output. +! DOMAIN%PSHARE = F ! Flag for grids sharing dedicated output processes. +! DOMAIN%FLGHG1 = F ! Flag for masking computation in two-way nesting +! DOMAIN%FLGHG2 = F ! Flag for masking at printout time +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680608 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '19680606 000000' ! Start date for the entire model + DOMAIN%STOP = '19680608 000000' ! Stop date for the entire model + DOMAIN%NRGRD = 2 + DOMAIN%FLGHG1 = T + DOMAIN%FLGHG2 = T +/ + +! -------------------------------------------------------------------- ! +! Define each input grid via the INPUT_GRID_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRINP +! * INPUT(I)%NAME must be set for each active input grid I +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT(I)%NAME = 'unset' +! INPUT(I)%FORCING%WATER_LEVELS = F +! INPUT(I)%FORCING%CURRENTS = F +! INPUT(I)%FORCING%WINDS = F +! INPUT(I)%FORCING%ICE_CONC = F +! INPUT(I)%FORCING%ICE_PARAM1 = F +! INPUT(I)%FORCING%ICE_PARAM2 = F +! INPUT(I)%FORCING%ICE_PARAM3 = F +! INPUT(I)%FORCING%ICE_PARAM4 = F +! INPUT(I)%FORCING%ICE_PARAM5 = F +! INPUT(I)%FORCING%MUD_DENSITY = F +! INPUT(I)%FORCING%MUD_THICKNESS = F +! INPUT(I)%FORCING%MUD_VISCOSITY = F +! INPUT(I)%ASSIM%MEAN = F +! INPUT(I)%ASSIM%SPEC1D = F +! INPUT(I)%ASSIM%SPEC2D = F +! -------------------------------------------------------------------- ! +&INPUT_GRID_NML +/ + +! -------------------------------------------------------------------- ! +! Define each model grid via the MODEL_GRID_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! * MODEL(I)%NAME must be set for each active model grid I +! * FORCING can be set as : +! - 'no' : This input is not used. +! - 'native' : This grid has its own input files, e.g. grid +! grdX (mod_def.grdX) uses ice.grdX. +! - 'INPUT%NAME' : Take input from the grid identified by +! INPUT%NAME. +! * RESOURCE%RANK_ID : Rank number of grid (internally sorted and reassigned). +! * RESOURCE%GROUP_ID : Group number (internally reassigned so that different +! ranks result in different group numbers). +! * RESOURCE%COMM_FRAC : Fraction of communicator (processes) used for this grid. +! * RESOURCE%BOUND_FLAG : Flag identifying dumping of boundary data used by this +! grid. If true, the file nest.MODID is generated. +! +! * Limitations relevant to irregular (curvilinear) grids: +! 1) Equal rank is not supported when one or more is an irregular +! grid. Use non-equal rank instead. (see wmgridmd.ftn) +! 2) Non-native input grids: feature is not supported when either +! an input grid or computational grids is irregular. +! (see wmupdtmd.ftn) +! 3) Irregular grids with unified point output: This is supported +! but the feature has not been verified for accuracy. +! (see wmiopomd.ftn) +! +! * namelist must be terminated with / +! * definitions & defaults: +! MODEL(I)%NAME = 'unset' +! MODEL(I)%FORCING%WATER_LEVELS = 'no' +! MODEL(I)%FORCING%CURRENTS = 'no' +! MODEL(I)%FORCING%WINDS = 'no' +! MODEL(I)%FORCING%ICE_CONC = 'no' +! MODEL(I)%FORCING%ICE_PARAM1 = 'no' +! MODEL(I)%FORCING%ICE_PARAM2 = 'no' +! MODEL(I)%FORCING%ICE_PARAM3 = 'no' +! MODEL(I)%FORCING%ICE_PARAM4 = 'no' +! MODEL(I)%FORCING%ICE_PARAM5 = 'no' +! MODEL(I)%FORCING%MUD_DENSITY = 'no' +! MODEL(I)%FORCING%MUD_THICKNESS = 'no' +! MODEL(I)%FORCING%MUD_VISCOSITY = 'no' +! MODEL(I)%ASSIM%MEAN = 'no' +! MODEL(I)%ASSIM%SPEC1d = 'no' +! MODEL(I)%ASSIM%SPEC2d = 'no' +! MODEL(I)%RESOURCE%RANK_ID = I +! MODEL(I)%RESOURCE%GROUP_ID = 1 +! MODEL(I)%RESOURCE%COMM_FRAC = 0.00,1.00 +! MODEL(I)%RESOURCE%BOUND_FLAG = F +! +! MODEL(4)%FORCING = 'no' 'no' 'no' 'no' 'no' 'no' +! +! MODEL(2)%RESOURCE = 1 1 0.00 1.00 F +! -------------------------------------------------------------------- ! +&MODEL_GRID_NML + MODEL(1)%NAME = 'gbandd360' + MODEL(2)%NAME = 'arcticsub' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! +! * ALLTYPE will apply the output types for all the model grids +! +! * ITYPE(I) will apply the output types for the model grid number I +! +! * need DOMAIN%UNIPTS equal true to use a unified point output file +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the detailed list of field names is given in model/nml/ww3_shel.nml : +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * output track file formatted (T) or unformated (F) +! +! * namelist must be terminated with / +! * definitions & defaults: +! ALLTYPE%FIELD%LIST = 'unset' +! ALLTYPE%POINT%NAME = 'unset' +! ALLTYPE%POINT%FILE = 'points.list' +! ALLTYPE%TRACK%FORMAT = T +! ALLTYPE%PARTITION%X0 = 0 +! ALLTYPE%PARTITION%XN = 0 +! ALLTYPE%PARTITION%NX = 0 +! ALLTYPE%PARTITION%Y0 = 0 +! ALLTYPE%PARTITION%YN = 0 +! ALLTYPE%PARTITION%NY = 0 +! ALLTYPE%PARTITION%FORMAT = T +! +! ITYPE(3)%TRACK%FORMAT = F +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + ALLTYPE%FIELD%LIST = 'DPT HS' + ALLTYPE%POINT%FILE = '../input/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! * ALLDATE will apply the output dates for all the model grids +! * IDATE(I) will apply the output dates for the model grid number i +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! * it is possible to overwrite a global output date for a given grid +! +! * namelist must be terminated with / +! * definitions & defaults: +! ALLDATE%FIELD%START = '19680606 000000' +! ALLDATE%FIELD%STRIDE = '0' +! ALLDATE%FIELD%STOP = '19680607 000000' +! ALLDATE%POINT%START = '19680606 000000' +! ALLDATE%POINT%STRIDE = '0' +! ALLDATE%POINT%STOP = '19680607 000000' +! ALLDATE%TRACK%START = '19680606 000000' +! ALLDATE%TRACK%STRIDE = '0' +! ALLDATE%TRACK%STOP = '19680607 000000' +! ALLDATE%RESTART%START = '19680606 000000' +! ALLDATE%RESTART%STRIDE = '0' +! ALLDATE%RESTART%STOP = '19680607 000000' +! ALLDATE%RESTART2%START = '19680606 000000' +! ALLDATE%RESTART2%STRIDE = '0' +! ALLDATE%RESTART2%STOP = '19680607 000000' +! ALLDATE%BOUNDARY%START = '19680606 000000' +! ALLDATE%BOUNDARY%STRIDE = '0' +! ALLDATE%BOUNDARY%STOP = '19680607 000000' +! ALLDATE%PARTITION%START = '19680606 000000' +! ALLDATE%PARTITION%STRIDE = '0' +! ALLDATE%PARTITION%STOP = '19680607 000000' +! +! ALLDATE%RESTART = '19680606 000000' '0' '19680607 000000' +! +! IDATE(3)%PARTITION%START = '19680606 000000' +! ALLDATE%RESTART2 = '19680606 000000' '86400' '19680608 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + ALLDATE%FIELD = '19680606 000000' '3600' '19680608 000000' + ALLDATE%POINT = '19680606 000000' '3600' '19680608 000000' + ALLDATE%RESTART = '19680606 060000' '21600' '19680606 060000' + ALLDATE%RESTART2 = '19680606 000000' '86400' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can only be MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! From 048461aea61c98d9a4c88d7d45160f269f53e71e Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Tue, 14 Jan 2020 12:37:14 -0500 Subject: [PATCH 24/84] Gefs v12: Adjusting comp/link options for NCEP wcoss build (#145) Changes reflect NEMS update allowing using generalized build scripts cmplr.env + comp/link.tmpl instead of machine-specific comp/link files. * Updated wcoss entries in cmplr.env * Deleted comp/link.wcoss files --- model/bin/cmplr.env | 6 +- model/bin/comp.wcoss_cray | 216 ---------------------------------- model/bin/comp.wcoss_dell_p3 | 212 ---------------------------------- model/bin/link.wcoss_cray | 217 ----------------------------------- model/bin/link.wcoss_dell_p3 | 217 ----------------------------------- 5 files changed, 3 insertions(+), 865 deletions(-) delete mode 100755 model/bin/comp.wcoss_cray delete mode 100755 model/bin/comp.wcoss_dell_p3 delete mode 100755 model/bin/link.wcoss_cray delete mode 100755 model/bin/link.wcoss_dell_p3 diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 53c21bcfb..50f083c56 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -130,10 +130,10 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c optc="$optc -xcore-avx2" optl="$optl -xcore-avx2" elif [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then - optc="$optc -xCORE-AVX2 -qno-opt-dynamic-align -auto -nowarn -align array64byte -safe-cray-ptr" + optc="$optc -xCORE-AVX2" optl="$optl -xCORE-AVX2" elif [ ! -z "$(echo $cmplr | grep wcoss_dell_p3)" ] ; then - optc="$opt -xHOST -qno-opt-dynamic-align -auto -nowarn -align array64byte -Wp,-w" + optc="$opt -xHOST" optl="$optl -xHOST" else optc="$optc -xhost" @@ -146,7 +146,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c # omp options if [ "$omp_mod" == 'yes' ] ; then - if [ "$cmplr" == "hera" ] ; then + if [ "$cmplr" == "hera" ] || [ "$cmplr" == "wcoss_dell_p3" ] ; then optc="$optc -qopenmp" optl="$optl -qopenmp" else diff --git a/model/bin/comp.wcoss_cray b/model/bin/comp.wcoss_cray deleted file mode 100755 index fe439caaf..000000000 --- a/model/bin/comp.wcoss_cray +++ /dev/null @@ -1,216 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 12 on Xeon Westmere # -# - On zeus the -list option slows down the compilation time by an order # -# of magnitude. For this section 1.c is added. # -# # -# Hendrik L. Tolman # -# June 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list=' -list' - list= - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - -# opt="-c $list -O3 -assume byterecl -ip -module $path_m" -opt="-c $list -O3 -fno-alias -auto -safe-cray-ptr -ftz -assume byterecl -nowarn -sox -align array64byte" -opt="$opt -xCORE-AVX2 -qno-opt-dynamic-align -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" -# opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" - - if [ "$name" != 'ww3_gspl' ] - then - opt="$opt -convert big_endian" - fi - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - #comp=mpiifort - #which mpiifort 1> /dev/null 2> /dev/null - comp=ftn - which ftn - OK=$? - if [ $OK != 0 ] - then - comp=ftn - fi - - else - comp=ftn - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) opt="$opt -I$NETCDF/include" ;; - #NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - # opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 deleted file mode 100755 index 15fe28f11..000000000 --- a/model/bin/comp.wcoss_dell_p3 +++ /dev/null @@ -1,212 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 12 on Xeon Westmere # -# - On zeus the -list option slows down the compilation time by an order # -# of magnitude. For this section 1.c is added. # -# # -# Hendrik L. Tolman # -# June 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list=' -list' - list= - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - -# opt="-c $list -O3 -assume byterecl -ip -module $path_m" - - opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -sox -xhost -O2" -# Add profiling -# opt="$opt -p" - - if [ "$name" != 'ww3_gspl' ] - then - opt="$opt -convert big_endian" - fi - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp=ifort - fi - - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -qopenmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/link.wcoss_cray b/model/bin/link.wcoss_cray deleted file mode 100755 index 83462a924..000000000 --- a/model/bin/link.wcoss_cray +++ /dev/null @@ -1,217 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 12 on nehalem. # -# processor. # -# # -# Hendrik L. Tolman # -# February 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-O3 -ip -static -o $prog" -# opt="-O3 -ip -o $prog" -# opt="-O3 -xSSE4.2 -ip -o $prog" -# opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" -# opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - #comp=mpiifort - #which mpiifort 1> /dev/null 2> /dev/null - comp=ftn - which ftn - OK=$? - if [ $OK != 0 ] - then - comp='ftn -lmpi' - fi -# opt="-O3 -o $prog" - else - comp=ftn - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # grib for wcoss_cray - case $prog in - 'ww3_grib' ) libs="${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" ;; - * ) libs= ;; - esac - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 deleted file mode 100755 index 25aa081af..000000000 --- a/model/bin/link.wcoss_dell_p3 +++ /dev/null @@ -1,217 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 12 on nehalem. # -# processor. # -# # -# Hendrik L. Tolman # -# February 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - - opt="-o $prog -g -xhost -O2" - -# Add profiling -# opt="$opt -p" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp='ifort -lmpi' - fi -# opt="-O3 -o $prog" - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -qopenmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - -# NCEP grib creation - if [ "$ncep_grib_compile" = 'yes' ] - then -# GRIB libraries for this one - opt="$opt -convert big_endian -assume byterecl -prec-div -prec-sqrt -ip" - libs="$libs ${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # From b9d1d9838561e21949ef66853679fe69621b4839 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Wed, 15 Jan 2020 07:13:02 -0500 Subject: [PATCH 25/84] Update cmplr.env Fix typo in optc for adding xHOST flag. --- model/bin/cmplr.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 50f083c56..67937b9c0 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -133,7 +133,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c optc="$optc -xCORE-AVX2" optl="$optl -xCORE-AVX2" elif [ ! -z "$(echo $cmplr | grep wcoss_dell_p3)" ] ; then - optc="$opt -xHOST" + optc="$optc -xHOST" optl="$optl -xHOST" else optc="$optc -xhost" From f6ebf95ff3bfa0bcbde1e5dbddf5a3e7760c6965 Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Fri, 17 Jan 2020 18:06:54 +0000 Subject: [PATCH 26/84] UKMO Develop - gencomp and ww3_uprstrt updates (#132) * Added sea-swell variants for uprstr, tidied code for consistency in option blocks * Updates to .inp file and added UPD5 and UPD6 regtests * Code and regtests revision to ww3_uprstr to read restart wind Update modules and regtests to use WRST switch * Updated uprstr logic to deal with SMC grids and X,Y wind restarts * Updated ww3_uprstr comments and manual entry * Correct handling of OMP flags when generating comp/link scripts using cmplr.env file. * Added option to specify search pattern used to grep warnings/errors from compiler output * Added ww3_ta* regtests to matrix.comp * Fixed incorrect "myname" variable - as noted in review of PR132 by @flampouris Co-authored-by: Andy Saulter <48921142+ukmo-ansaulter@users.noreply.github.com> --- manual/run/ww3_uprstr.tex | 17 +- model/bin/cmplr.env | 58 +- model/bin/comp.tmpl | 10 +- model/bin/link.tmpl | 5 + model/bin/w3_setup | 4 +- model/ftn/ww3_strt.ftn | 2 + model/ftn/ww3_uprstr.ftn | 1256 ++++++++++++++--- model/inp/ww3_uprstr.inp | 27 +- regtests/bin/matrix.base | 6 + regtests/bin/matrix.comp | 2 +- .../ww3_ta1/input_UPD5_O/HOMOGENEOUS.depth | 3 + regtests/ww3_ta1/input_UPD5_O/anl.grbtxt | 10 + regtests/ww3_ta1/input_UPD5_O/gx_outp.inp | 8 + .../input_UPD5_O/namelists_HOMOGENEOUS.nml | 2 + regtests/ww3_ta1/input_UPD5_O/points.list | 1 + regtests/ww3_ta1/input_UPD5_O/switch | 1 + regtests/ww3_ta1/input_UPD5_O/switch_ST4 | 1 + regtests/ww3_ta1/input_UPD5_O/switch_T | 1 + regtests/ww3_ta1/input_UPD5_O/ww3_grid.inp | 36 + regtests/ww3_ta1/input_UPD5_O/ww3_grid.nml | 225 +++ regtests/ww3_ta1/input_UPD5_O/ww3_ounf.inp | 41 + regtests/ww3_ta1/input_UPD5_O/ww3_ounf.nml | 62 + .../ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp | 117 ++ .../ww3_ta1/input_UPD5_O/ww3_ounp_spec.nml | 188 +++ .../ww3_ta1/input_UPD5_O/ww3_outp_spec.inp | 10 + .../ww3_ta1/input_UPD5_O/ww3_outp_tab50.inp | 11 + regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp | 36 + regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml | 370 +++++ regtests/ww3_ta1/input_UPD5_O/ww3_strt.inp | 7 + regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp | 72 + .../ww3_ta1/input_UPD5_U/HOMOGENEOUS.depth | 3 + regtests/ww3_ta1/input_UPD5_U/anl.grbtxt | 10 + regtests/ww3_ta1/input_UPD5_U/gx_outp.inp | 8 + .../input_UPD5_U/namelists_HOMOGENEOUS.nml | 2 + regtests/ww3_ta1/input_UPD5_U/points.list | 1 + regtests/ww3_ta1/input_UPD5_U/switch | 1 + regtests/ww3_ta1/input_UPD5_U/switch_ST4 | 1 + regtests/ww3_ta1/input_UPD5_U/switch_T | 1 + regtests/ww3_ta1/input_UPD5_U/ww3_grid.inp | 36 + regtests/ww3_ta1/input_UPD5_U/ww3_grid.nml | 225 +++ regtests/ww3_ta1/input_UPD5_U/ww3_ounf.inp | 41 + regtests/ww3_ta1/input_UPD5_U/ww3_ounf.nml | 62 + .../ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp | 117 ++ .../ww3_ta1/input_UPD5_U/ww3_ounp_spec.nml | 188 +++ .../ww3_ta1/input_UPD5_U/ww3_outp_spec.inp | 10 + .../ww3_ta1/input_UPD5_U/ww3_outp_tab50.inp | 11 + regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp | 36 + regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml | 370 +++++ regtests/ww3_ta1/input_UPD5_U/ww3_strt.inp | 7 + regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp | 72 + .../input_UPD5_U_cap/HOMOGENEOUS.depth | 3 + regtests/ww3_ta1/input_UPD5_U_cap/anl.grbtxt | 10 + regtests/ww3_ta1/input_UPD5_U_cap/gx_outp.inp | 8 + .../namelists_HOMOGENEOUS.nml | 2 + regtests/ww3_ta1/input_UPD5_U_cap/points.list | 1 + regtests/ww3_ta1/input_UPD5_U_cap/switch | 1 + regtests/ww3_ta1/input_UPD5_U_cap/switch_ST4 | 1 + regtests/ww3_ta1/input_UPD5_U_cap/switch_T | 1 + .../ww3_ta1/input_UPD5_U_cap/ww3_grid.inp | 36 + .../ww3_ta1/input_UPD5_U_cap/ww3_grid.nml | 225 +++ .../ww3_ta1/input_UPD5_U_cap/ww3_ounf.inp | 41 + .../ww3_ta1/input_UPD5_U_cap/ww3_ounf.nml | 62 + .../input_UPD5_U_cap/ww3_ounp_spec.inp | 117 ++ .../input_UPD5_U_cap/ww3_ounp_spec.nml | 188 +++ .../input_UPD5_U_cap/ww3_outp_spec.inp | 10 + .../input_UPD5_U_cap/ww3_outp_tab50.inp | 11 + .../ww3_ta1/input_UPD5_U_cap/ww3_shel.inp | 36 + .../ww3_ta1/input_UPD5_U_cap/ww3_shel.nml | 370 +++++ .../ww3_ta1/input_UPD5_U_cap/ww3_strt.inp | 7 + .../ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp | 72 + .../ww3_ta1/input_UPD6_O/HOMOGENEOUS.depth | 3 + regtests/ww3_ta1/input_UPD6_O/anl.grbtxt | 10 + regtests/ww3_ta1/input_UPD6_O/gx_outp.inp | 8 + .../input_UPD6_O/namelists_HOMOGENEOUS.nml | 2 + regtests/ww3_ta1/input_UPD6_O/points.list | 1 + regtests/ww3_ta1/input_UPD6_O/switch | 1 + regtests/ww3_ta1/input_UPD6_O/switch_ST4 | 1 + regtests/ww3_ta1/input_UPD6_O/switch_T | 1 + regtests/ww3_ta1/input_UPD6_O/ww3_grid.inp | 36 + regtests/ww3_ta1/input_UPD6_O/ww3_grid.nml | 225 +++ regtests/ww3_ta1/input_UPD6_O/ww3_ounf.inp | 41 + regtests/ww3_ta1/input_UPD6_O/ww3_ounf.nml | 62 + .../ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp | 117 ++ .../ww3_ta1/input_UPD6_O/ww3_ounp_spec.nml | 188 +++ .../ww3_ta1/input_UPD6_O/ww3_outp_spec.inp | 10 + .../ww3_ta1/input_UPD6_O/ww3_outp_tab50.inp | 11 + regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp | 36 + regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml | 370 +++++ regtests/ww3_ta1/input_UPD6_O/ww3_strt.inp | 7 + regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp | 72 + .../ww3_ta1/input_UPD6_U/HOMOGENEOUS.depth | 3 + regtests/ww3_ta1/input_UPD6_U/anl.grbtxt | 10 + regtests/ww3_ta1/input_UPD6_U/gx_outp.inp | 8 + .../input_UPD6_U/namelists_HOMOGENEOUS.nml | 2 + regtests/ww3_ta1/input_UPD6_U/points.list | 1 + regtests/ww3_ta1/input_UPD6_U/switch | 1 + regtests/ww3_ta1/input_UPD6_U/switch_ST4 | 1 + regtests/ww3_ta1/input_UPD6_U/switch_T | 1 + regtests/ww3_ta1/input_UPD6_U/ww3_grid.inp | 36 + regtests/ww3_ta1/input_UPD6_U/ww3_grid.nml | 225 +++ regtests/ww3_ta1/input_UPD6_U/ww3_ounf.inp | 41 + regtests/ww3_ta1/input_UPD6_U/ww3_ounf.nml | 62 + .../ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp | 117 ++ .../ww3_ta1/input_UPD6_U/ww3_ounp_spec.nml | 188 +++ .../ww3_ta1/input_UPD6_U/ww3_outp_spec.inp | 10 + .../ww3_ta1/input_UPD6_U/ww3_outp_tab50.inp | 11 + regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp | 36 + regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml | 370 +++++ regtests/ww3_ta1/input_UPD6_U/ww3_strt.inp | 7 + regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp | 72 + .../input_UPD6_U_cap/HOMOGENEOUS.depth | 3 + regtests/ww3_ta1/input_UPD6_U_cap/anl.grbtxt | 10 + regtests/ww3_ta1/input_UPD6_U_cap/gx_outp.inp | 8 + .../namelists_HOMOGENEOUS.nml | 2 + regtests/ww3_ta1/input_UPD6_U_cap/points.list | 1 + regtests/ww3_ta1/input_UPD6_U_cap/switch | 1 + regtests/ww3_ta1/input_UPD6_U_cap/switch_ST4 | 1 + regtests/ww3_ta1/input_UPD6_U_cap/switch_T | 1 + .../ww3_ta1/input_UPD6_U_cap/ww3_grid.inp | 36 + .../ww3_ta1/input_UPD6_U_cap/ww3_grid.nml | 225 +++ .../ww3_ta1/input_UPD6_U_cap/ww3_ounf.inp | 41 + .../ww3_ta1/input_UPD6_U_cap/ww3_ounf.nml | 62 + .../input_UPD6_U_cap/ww3_ounp_spec.inp | 117 ++ .../input_UPD6_U_cap/ww3_ounp_spec.nml | 188 +++ .../input_UPD6_U_cap/ww3_outp_spec.inp | 10 + .../input_UPD6_U_cap/ww3_outp_tab50.inp | 11 + .../ww3_ta1/input_UPD6_U_cap/ww3_shel.inp | 36 + .../ww3_ta1/input_UPD6_U_cap/ww3_shel.nml | 370 +++++ .../ww3_ta1/input_UPD6_U_cap/ww3_strt.inp | 7 + .../ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp | 72 + 130 files changed, 8346 insertions(+), 253 deletions(-) create mode 100644 regtests/ww3_ta1/input_UPD5_O/HOMOGENEOUS.depth create mode 100644 regtests/ww3_ta1/input_UPD5_O/anl.grbtxt create mode 100644 regtests/ww3_ta1/input_UPD5_O/gx_outp.inp create mode 100644 regtests/ww3_ta1/input_UPD5_O/namelists_HOMOGENEOUS.nml create mode 100644 regtests/ww3_ta1/input_UPD5_O/points.list create mode 100644 regtests/ww3_ta1/input_UPD5_O/switch create mode 100644 regtests/ww3_ta1/input_UPD5_O/switch_ST4 create mode 100644 regtests/ww3_ta1/input_UPD5_O/switch_T create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_grid.inp create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_grid.nml create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_ounf.inp create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_ounf.nml create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.nml create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_outp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_outp_tab50.inp create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_strt.inp create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U/HOMOGENEOUS.depth create mode 100644 regtests/ww3_ta1/input_UPD5_U/anl.grbtxt create mode 100644 regtests/ww3_ta1/input_UPD5_U/gx_outp.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U/namelists_HOMOGENEOUS.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U/points.list create mode 100644 regtests/ww3_ta1/input_UPD5_U/switch create mode 100644 regtests/ww3_ta1/input_UPD5_U/switch_ST4 create mode 100644 regtests/ww3_ta1/input_UPD5_U/switch_T create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_grid.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_grid.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_ounf.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_ounf.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_outp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_outp_tab50.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_strt.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/HOMOGENEOUS.depth create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/anl.grbtxt create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/gx_outp.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/namelists_HOMOGENEOUS.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/points.list create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/switch create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/switch_ST4 create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/switch_T create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_grid.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_grid.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounf.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounf.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_outp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_outp_tab50.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_strt.inp create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp create mode 100644 regtests/ww3_ta1/input_UPD6_O/HOMOGENEOUS.depth create mode 100644 regtests/ww3_ta1/input_UPD6_O/anl.grbtxt create mode 100644 regtests/ww3_ta1/input_UPD6_O/gx_outp.inp create mode 100644 regtests/ww3_ta1/input_UPD6_O/namelists_HOMOGENEOUS.nml create mode 100644 regtests/ww3_ta1/input_UPD6_O/points.list create mode 100644 regtests/ww3_ta1/input_UPD6_O/switch create mode 100644 regtests/ww3_ta1/input_UPD6_O/switch_ST4 create mode 100644 regtests/ww3_ta1/input_UPD6_O/switch_T create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_grid.inp create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_grid.nml create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_ounf.inp create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_ounf.nml create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.nml create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_outp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_outp_tab50.inp create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_strt.inp create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U/HOMOGENEOUS.depth create mode 100644 regtests/ww3_ta1/input_UPD6_U/anl.grbtxt create mode 100644 regtests/ww3_ta1/input_UPD6_U/gx_outp.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U/namelists_HOMOGENEOUS.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U/points.list create mode 100644 regtests/ww3_ta1/input_UPD6_U/switch create mode 100644 regtests/ww3_ta1/input_UPD6_U/switch_ST4 create mode 100644 regtests/ww3_ta1/input_UPD6_U/switch_T create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_grid.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_grid.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_ounf.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_ounf.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_outp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_outp_tab50.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_strt.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/HOMOGENEOUS.depth create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/anl.grbtxt create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/gx_outp.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/namelists_HOMOGENEOUS.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/points.list create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/switch create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/switch_ST4 create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/switch_T create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_grid.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_grid.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounf.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounf.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_outp_spec.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_outp_tab50.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_strt.inp create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp diff --git a/manual/run/ww3_uprstr.tex b/manual/run/ww3_uprstr.tex index d05b56499..d9a684a31 100644 --- a/manual/run/ww3_uprstr.tex +++ b/manual/run/ww3_uprstr.tex @@ -61,7 +61,7 @@ \subsubsection{The Restart File Processor} \label{sec:ww3uprstr} The users have to define i. the date of the assimilation, ii. the method of energy redistribution and iii. depending on the method: a percentage or an inputfile. \item \textbf{Input file of analysis.} The file can have any name, but the suffix - defines the reader used for importing the data. Currently, the reader supports only + defines the reader used for importing the data. For the majority of options, the reader supports only \textbf{grbtxt} format. This is a text file created with wgrib2 from the grib2 file of the analysis and it has the following structure:\newline @@ -140,10 +140,21 @@ \subsubsection{The Restart File Processor} \label{sec:ww3uprstr} which are applied on the background spectrum. The algorithm requires the mapping of each partition on the individual spectra; the map is used to determine the weighting surfaces. + \item UPD5 :: Option 5 Corrections are calculated as per UPD2 but are + applied to wind-sea parts of the spectrum only when wind-sea + is the dominant component, otherwise the whole spectrum is + corrected. Required inputs are the the Analysis Hs field plus + background wind speed and direction. To include the wind data it is recommended + to run code built with the WRST switch. + \item UPD6 :: Option 6 Corrections are calculated as per UPD5 but wind-sea + components are also shifted in frequency space using Toba (1973). + Required inputs are the the Analysis Hs field plus background wind speed and direction. + To include the wind data it is recommended to run code built with the WRST switch. \end{enumerate} -Any additional method for the redistribution of the energy to the WS could be added -by extending the input file and adding the source code to the \textbf{ww3\_uprstr.ftn}. +Any additional method for the redistribution of the energy to the WS and correcting +the associated winds could be added by further extending the input file and adding +the source code to the \textbf{ww3\_uprstr.ftn}. \subparagraph{Example \newline} In this section, an example of the simplest WDA application is discussed. diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 67937b9c0..1982829f1 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -22,7 +22,7 @@ # # # - template files comp.tmpl and link.tmpl will be used to create the # # comp and link file based on the following environment variables : # -# $optc, $optl, $comp_seq and $comp_mpi # +# $optc, $optl, $comp_seq, $comp_mpi, $optomp, $err_pattern, $warn_pattern # # # # # # M. Accensi # @@ -30,6 +30,12 @@ # --------------------------------------------------------------------------- # +## Set some defaults (can be overriden by individual compiler sections) + +# grep pattern for errors/warnings in compiler output: +err_pattern='error' +warn_pattern='warn' + # disable listing done by the compiler list='no' @@ -64,7 +70,7 @@ if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || [ "$cmplr" == "mpt_pr if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi # omp options - if [ "$omp_mod" == 'yes' ] ; then optc="$optc -openmp"; optl="$optl -openmp"; fi + optomp="-openmp" # optimized options if [ -z "$(echo $cmplr | grep debug)" ] ; then @@ -145,14 +151,10 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi # omp options - if [ "$omp_mod" == 'yes' ] ; then - if [ "$cmplr" == "hera" ] || [ "$cmplr" == "wcoss_dell_p3" ] ; then - optc="$optc -qopenmp" - optl="$optl -qopenmp" - else - optc="$optc -openmp" - optl="$optl -openmp" - fi + if [ "$cmplr" == "hera" ] || [ "$cmplr" == "wcoss_dell_p3" ]; then + optomp="-qopenmp" + else + optomp="-openmp" fi # optimized options @@ -219,7 +221,7 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || [ "$cmplr" == "gnu_pr optl='-o $prog -g' # omp options - if [ "$omp_mod" == 'yes' ] ; then optc="$optc -fopenmp"; optl="$optl -fopenmp"; fi + optomp='-fopenmp' # optimized options if [ -z "$(echo $cmplr | grep debug)" ] ; then @@ -286,7 +288,7 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || [ "$cmplr" == "pgi_pr if [ "$list" == 'yes' ] ; then optc="$optc -Mlist"; fi # omp options - if [ "$omp_mod" == 'yes' ] ; then optc="$optc -mp"; optl="$optl -mp"; fi + optomp="-mp" # optimized options if [ -z "$(echo $cmplr | grep debug)" ] ; then @@ -330,6 +332,9 @@ if [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ comp_seq='ftn' comp_mpi='ftn' + # cray compiler output needs more specific err/warn search patterns: + err_pattern='crayftn: error' + warn_pattern='crayftn: warn' # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options @@ -340,16 +345,7 @@ if [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ if [ "$list" == 'yes' ] ; then optc="$optc -hlist=a"; fi # omp options - if [ "$omp_mod" = 'yes' ] ; then - optc="$optc -h omp" - optl="$optl -h omp" - else - # by default, OMP is enabled on Cray ftn: - optc="$optc -h noomp" - - # ... but don't disable at link stage as is currently needed by SCRIP - #optl="$optl -h noomp" - fi + optomp="-h omp" # optimized options if [ -z "$(echo $cmplr | grep debug)" ] ; then @@ -373,21 +369,3 @@ if [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ # system-dependant options # N/A fi - - - - - - - - - - - - - - - - - - diff --git a/model/bin/comp.tmpl b/model/bin/comp.tmpl index 0f6750d67..a9c620557 100755 --- a/model/bin/comp.tmpl +++ b/model/bin/comp.tmpl @@ -91,6 +91,11 @@ opt="$opt $ESMF_F90COMPILEPATHS" opt="$opt $EXTRA_COMP_OPTIONS" + # OMP support + if [ "$omp_mod" = 'yes' ] ; then + opt="$opt " + fi + # 2.b Compile - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $comp $opt $name.$fext 1> $name.out 2> $name.err @@ -109,8 +114,8 @@ if [ -s $name.err ] then - nr_err="$(grep -i error $name.err | wc -l | awk '{ print $1 }')" - nr_war="$(grep -i warning $name.err | wc -l | awk '{ print $1 }')" + nr_err="$(grep -i '' $name.err | wc -l | awk '{ print $1 }')" + nr_war="$(grep -i '' $name.err | wc -l | awk '{ print $1 }')" else if [ "$OK" != '0' ] then @@ -154,6 +159,7 @@ cat $name.err >> $name.l 2> /dev/null echo '------------' >> $name.l fi + # remove empty warning and error files # find . -name "*.out" -or -name "*.err" -empty -delete diff --git a/model/bin/link.tmpl b/model/bin/link.tmpl index c0efb4080..e1ef8e31f 100755 --- a/model/bin/link.tmpl +++ b/model/bin/link.tmpl @@ -133,6 +133,11 @@ fi fi + # OMP support + if [ "$omp_mod" = 'yes' ] ; then + opt="$opt " + fi + opt="$opt $EXTRA_LINK_OPTIONS" # 3.b Link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/model/bin/w3_setup b/model/bin/w3_setup index 081e79b39..1c3a2c184 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -423,7 +423,7 @@ then [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ]; then source $path_b/cmplr.env - sed -e "s//$optc/" -e "s//$comp_seq/" -e "s//$comp_mpi/" $path_b/comp.tmpl > $path_b/comp + sed -e "s//$optc/" -e "s//$comp_seq/" -e "s//$comp_mpi/" -e "s//$optomp/" -e "s//$err_pattern/" -e "s//$warn_pattern/" $path_b/comp.tmpl > $path_b/comp echo " sed $path_b/comp.tmpl => $path_b/comp" else errmsg "$path_b/comp.$cmplr not found" @@ -449,7 +449,7 @@ then [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ]; then source $path_b/cmplr.env - sed -e "s//$optl/" -e "s//$comp_seq/" -e "s//$comp_mpi/" $path_b/link.tmpl > $path_b/link + sed -e "s//$optl/" -e "s//$comp_seq/" -e "s//$comp_mpi/" -e "s//$optomp/" $path_b/link.tmpl > $path_b/link echo " sed $path_b/link.tmpl => $path_b/link" else errmsg "$path_b/link.$cmplr not found" diff --git a/model/ftn/ww3_strt.ftn b/model/ftn/ww3_strt.ftn index 043da47da..90f976eb1 100644 --- a/model/ftn/ww3_strt.ftn +++ b/model/ftn/ww3_strt.ftn @@ -193,6 +193,7 @@ USE W3WDATMD USE W3ODATMD, ONLY: NDSE, NDST, NDSO, NAPROC, IAPROC, & NAPOUT, NAPERR, FNMPRE +!/WRST USE W3IDATMD, ONLY: W3NINP !/ IMPLICIT NONE ! @@ -233,6 +234,7 @@ !/NL1 CALL W3SETA ( 1, 6, 6 ) CALL W3NOUT ( 6, 6 ) CALL W3SETO ( 1, 6, 6 ) +!/WRST CALL W3NINP( 6, 6 ) ! ! 1.b IO set-up. ! diff --git a/model/ftn/ww3_uprstr.ftn b/model/ftn/ww3_uprstr.ftn index 23deba90a..f51e1a425 100644 --- a/model/ftn/ww3_uprstr.ftn +++ b/model/ftn/ww3_uprstr.ftn @@ -21,6 +21,10 @@ !/ Simplified the code, remove some user unfriendly !/ options, add reg test ta1, add logical checks, !/ unified the operator, add/update the documentation. +!/ 05-Oct-2019 : Added UPD5 and UPD6 options, plus logic for running +!/ with SMC grids (Andy Saulter) ( version 6.07 ) +!/ 01-Nov-2019 : UPD5 and UPD6 use wind data either from anl.XXX file +!/ or from restart under WRST switch (Andy Saulter) !/ !/ Copyright 2010 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -137,11 +141,11 @@ ! UPD1 :: ELIMINATED ! UPDN, with N>1 each gridpoint has its own update factor. ! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -! according to HsBckg and HsAnl -! Expected input the Analysis field, grbtxt format +! according to the ratio of HsBckg and HsAnl (squared to preseve energy) +! Expected input: the Analysis field, grbtxt format ! UPD3 :: Option 3 The update factor is a surface with the shape of ! the background spectrum. -! Expected input the Analysis field, grbtxt format +! Expected input: the Analysis field, grbtxt format ! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] ! Option 4 The generalization of the UPD3. The update factor ! is the sum of surfaces which are applied on the background @@ -151,17 +155,28 @@ ! surfaces. ! Expected input: the Analysis field, grbtxt format and the ! functions(frq,theta) of the update to be applied. -! UPD3 -! -! PRCNTG is input for option 1 and it is the percentage of correction -!applied to all the gridpoints (e.g. 1.) +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when wind-sea +! is the dominant component, otherwise the whole spectrum is +! corrected +! Expected input: the Analysis Hs field plus background wind speed +! and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but wind-sea +! components are also shifted in frequency space using Toba (1973) +! Expected input: the Analysis Hs field plus background wind speed +! and direction +! +! PRCNTG is input for option UPD0F and is the correction factor +! applied to all the gridpoints (e.g. 1.) ! ! 0.475 ! -! PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -! maximun correction applied to all the gridpoints (e.g. 0.5) +! PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on +! the maximum SWH correction factor applied to all the gridpoints, as +! both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 +! and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 ! -! 0.6 +! 5.0 ! ! Name of the file with the SWH analysis from the DA system $ ! suffix .grbtxt for text out of grib2 file. $ @@ -174,6 +189,7 @@ ! ! ii. Data files anl.XXX ! +! FOR UPD2,3 and UPD5,6 with WRST switch ! USE THE grbtxt FORMAT, See Format E. ! ! Format E. @@ -186,9 +202,26 @@ ! ... ! VALNX*NY ! -! IMPORTANT : All the tests are with the format E. strongly recommended. -! The order of the values in .grbtxt, it is the same by -! defaults with the order in the restart file. +! IMPORTANT : All the regtests are with the format E. strongly recommended. +! The order of the values in .grbtxt, is assumed the same by +! default as the order of spectral data in the restart file. +! +! NOTE: It is recommended to use UPD5,6 with the WRST switch enabled and +! using SWH analysis data only as per Format E. However, the code includes +! an option to run using a text file in which case: +! USE THE grbtxtws format below +! +! Text file with following lines: +! NX NY +! SWH0001 WSPD0001 WDIR0001 +! SWH0002 WSPD0002 WDIR0002 +! ... +! SWHNX*NY WSPDNX*NY WDIRNX*NY +! +! The order of the values in .grbtxt, is assumed the same by +! default as the order of spectral data in the restart file. +! Wind speeds and directions in the anl.XXX file are assumed to be +! in CARTESIAN (GRID U,V) CONVENTION ! ! NOTE About Format: if you prefer a different format; there are several ! I/O subroutines ready, not included in the current version of the code, @@ -217,6 +250,9 @@ ! W3SETG Subr. Id. Point to selected model. ! W3NDAT Subr. W3WDATMD Set number of model for wave data. ! W3SETW Subr. Id. Point to selected model for wave data. +! W3NINP Subr. W3IDATMD Set number of grids/models. +! W3SETI Subr. Id. Point to data structure. +! W3DIMI Subr. Id. Set array sizes in data structure. ! W2NAUX Subr. W3ADATMD Set number of model for aux data. ! W3SETA Subr. Id. Point to selected model for aux data. ! ITRACE Subr. W3SERVMD Subroutine tracing initialization. @@ -280,40 +316,47 @@ USE W3SERVMD, ONLY: ITRACE, NEXTLN, EXTCDE USE W3IOGRMD, ONLY: W3IOGR USE W3DISPMD, ONLY: WAVNU1 -!/ +! USE W3GDATMD, ONLY: GNAME, NX, NY, MAPSTA, SIG, NK, NTH, NSEA, & NSEAL, MAPSF, DMIN, ZB, DSIP, DTH USE W3WDATMD, ONLY: VA, TIME USE W3ADATMD, ONLY: NSEALM USE W3ODATMD, ONLY: IAPROC, NAPERR, NAPLOG, NDS, NAPOUT USE W3ODATMD, ONLY: NDSE, NDSO, NDST, IDOUT, FNMPRE -!/ +!/WRST USE W3IDATMD +! IMPLICIT NONE !/ !/ ------------------------------------------------------------------- / -!/ Local variables +! Local variables !/ INTEGER :: NDSI, NDSM, NDSTRC, NTRACE, IERR, I, J CHARACTER :: COMSTR*1 -!/ +! ! REAL, ALLOCATABLE :: BETAW(:) ! LOGICAL, ALLOCATABLE :: MASK(:) - LOGICAL :: anl_exists - INTEGER :: IMOD, INTYPE, NDSEN, IX, IY, IK, ITH + LOGICAL :: anl_exists, CORWSEA + INTEGER :: IMOD, INTYPE, NDSEN, IX, IY, IK, ITH, & + IXW, IYW REAL, ALLOCATABLE :: UPDPRCNT(:,:),VATMP(:), HSIG(:,:), & A(:), HS_ANAL(:,:), gues(:,:), & HS_DIF(:,:),SWHANL(:,:), SWHBCKG(:,:), & - SWHUPRSTR(:,:),VATMP_NORM(:) - REAL :: PRCNTG, PRCNTG_CAP + SWHUPRSTR(:,:),VATMP_NORM(:), & + WSBCKG(:,:),WDRBCKG(:,:) + INTEGER, ALLOCATABLE :: VAMAPWS(:) + REAL :: PRCNTG, PRCNTG_CAP, THRWSEA INTEGER :: ROWS, COLS, ISEA CHARACTER(128) :: FLNMCOR, FLNMANL CHARACTER(16) :: UPDPROC ! for howv REAL :: SWHTMP,SWHBCKG_1, SWHANL_1, & - DEPTH, WN, CG, ETOT, E1I + DEPTH, WN, CG, ETOT, E1I, & + SWHTMP1,SUMVATMP, SWHBCKG_W, SWHBCKG_S REAL :: K CHARACTER(8), PARAMETER :: MYNAME='W3UPRSTR' - + LOGICAL :: SMCGRD = .FALSE. + LOGICAL :: SMCWND = .FALSE. + LOGICAL :: WRSTON = .FALSE. !/ !/ ------------------------------------------------------------------- / !/ @@ -326,28 +369,42 @@ CALL W3SETA ( 1, 6, 6 ) CALL W3NOUT ( 6, 6 ) CALL W3SETO ( 1, 6, 6 ) -!/ +!/WRST CALL W3NINP ( 6, 6 ) +!/WRST CALL W3SETI ( 1, 6, 6 ) +! NDSE = 6 NDSI = 10 NDSM = 20 -!/ +! IAPROC = 1 NAPOUT = 1 NAPERR = 1 IMOD = 1 NAPLOG = 1 -!/ +! NDSTRC = 6 NTRACE = 10 CALL ITRACE ( NDSTRC, NTRACE ) -!/ +! IF ( IAPROC .EQ. NAPERR ) THEN NDSEN = NDSE ELSE NDSEN = -1 END IF -!/ +! WRITE (NDSO,900) +! +! +!/WRST !Compiling with WRST will allow access to options UPD5/6 +!/WRST WRSTON = .TRUE. +!/WRST WRITE (NDSO,*) '*** UPRSTR will read wind from restart files' +!/SMC !Compiling with SMC option activates SMC grid logicals +!/SMC SMCGRD = .TRUE. +!/SMC SMCWND = .TRUE. +!/WRST ! Override SMCWND - at present restarts only store wind on +!/WRST ! a regular grid +!/WRST SMCWND = .FALSE. +!/SMC WRITE (NDSO,*) '*** UPRSTR set to work with SMC grid model' !/ !/ ------------------------------------------------------------------- / ! 2. Read the ww3_uprstr.inp @@ -358,7 +415,7 @@ READ (NDSI,'(A)',END=801,ERR=802) COMSTR IF (COMSTR.EQ.' ') COMSTR = '$' WRITE (NDSO,901) COMSTR -!/ +! CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) TIME CALL NEXTLN ( COMSTR , NDSI , NDSEN ) @@ -371,7 +428,6 @@ !/F READ (NDSI,*,END=2001,ERR=2002) FLNMCOR CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) FLNMANL -! !/T WRITE (NDSO,*)' TIME: ',TIME !/T WRITE (NDSO,1004)' FLNMANL: ', trim(FLNMANL), & !/T ' UPDPROC: ', trim(UPDPROC) @@ -387,6 +443,9 @@ !/ ------------------------------------------------------------------- / ! 4. Read restart file !/ +!/WRST ! Set the wind flag to true when reading restart wind +!/WRST INFLAGS1(3) = .TRUE. +!/WRST CALL W3DIMI ( 1, 6, 6 ) !Needs to be called after w3iogr to have correct dimensions? CALL W3IORS ( 'READ', NDS(6), SIG(NK), INTYPE, IMOD )! IF ( IAPROC .EQ. NAPLOG ) THEN IF (INTYPE.EQ.0.OR.INTYPE.EQ.1.OR.INTYPE.EQ.4) THEN @@ -397,202 +456,478 @@ WRITE (NDSO,1004) 'Updating Restart File' END IF END IF -! !/T WRITE (NDST,*), MYNAME,' : Exporting VA as imported to VA01.txt' !/T CALL writeMatrix('VA01.txt', REAL(VA)) !/ !/ ------------------------------------------------------------------- / ! 5. Update restart spectra array according to the selected option -! - select case (UPDPROC) -! +!/ + SELECT CASE (UPDPROC) +!/ +!/ ------------------------------------------------------------------- / ! UPD0F - case ('UPD0F') - write (NDSO,902) 'UPD0F' +!/ + CASE ('UPD0F') + WRITE (NDSO,902) 'UPD0F' !/T ALLOCATE( VATMP (SIZE(VA ,1) )) !/T ALLOCATE( SWHANL (SIZE(MAPSTA,1), SIZE(MAPSTA,2))) !/T ALLOCATE( SWHBCKG(SIZE(MAPSTA,1), SIZE(MAPSTA,2))) -!/ DO ISEA=1, NSEA, 1 -!/T IX = MAPSF(ISEA,1) -!/T IY = MAPSF(ISEA,2) -!/T VATMP = VA(:,ISEA) -!/T CALL SWH_RSRT_1p (VATMP, ISEA, SWHBCKG_1) -!/T SWHBCKG(IY,IX)=SWHBCKG_1 +!/T IX = MAPSF(ISEA,1) +!/T IY = MAPSF(ISEA,2) +!/T VATMP = VA(:,ISEA) +!/T CALL SWH_RSRT_1p (VATMP, ISEA, SWHBCKG_1) +!/T SWHBCKG(IY,IX)=SWHBCKG_1 CALL UPDATE_VA(PRCNTG, VA(:,ISEA)) -!/T VATMP = VA(:,ISEA) -!/T CALL SWH_RSRT_1p (VATMP, ISEA, SWHANL_1) -!/T SWHANL(IY,IX)=SWHANL_1 -!/T WRITE (NDSO,*)'ISEA = ', ISEA,' PRCNTG = ',PRCNTG, & -!/T ' SWHBCKG = ',SWHBCKG(IY,IX), & -!/T ' SWHANL= ', SWHANL(IY,IX) +!/T VATMP = VA(:,ISEA) +!/T CALL SWH_RSRT_1p (VATMP, ISEA, SWHANL_1) +!/T SWHANL(IY,IX)=SWHANL_1 +!/T WRITE (NDSO,*) ' =========== UPD0F Output ===========' +!/T WRITE (NDSO,*)'ISEA = ', ISEA,' PRCNTG = ',PRCNTG, & +!/T ' SWHBCKG = ',SWHBCKG(IY,IX), & +!/T ' SWHANL= ', SWHANL(IY,IX) END DO -! -!/T CALL writeMatrix('SWHBCKG_UPD0F.txt', REAL(SWHBCKG)) -!/T CALL writeMatrix('SWHANL_UPD0F.txt' , REAL(SWHANL )) -!/T CALL writeMatrix('SWHRSTR_UPD0F.txt', REAL(SWHANL )) -!/T DEALLOCATE ( VATMP, SWHBCKG, SWHANL ) -! +!/T CALL writeMatrix('SWHBCKG_UPD0F.txt', REAL(SWHBCKG)) +!/T CALL writeMatrix('SWHANL_UPD0F.txt' , REAL(SWHANL )) +!/T CALL writeMatrix('SWHRSTR_UPD0F.txt', REAL(SWHANL )) +!/T +!/T DEALLOCATE ( VATMP, SWHBCKG, SWHANL ) +!/ !/ ------------------------------------------------------------------- / - case ('UPD2') - write (NDSO,902) 'UPD2' -! Additional Input: Analysis Field - INQUIRE(FILE=FLNMANL, EXIST=anl_exists) - IF (anl_exists) then +! UPD2 +! Apply a bulk correction to the wave spectrum at each grid cell based +! on the ratio of HsBckg and HsAnl +!/ + CASE ('UPD2') + WRITE (NDSO,902) 'UPD2' +! +! Array allocation + ALLOCATE ( VATMP(SIZE(VA,1))) + IF (.NOT. SMCGRD) THEN + ALLOCATE( SWHBCKG(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) ALLOCATE( SWHANL(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) +!/SMC ELSE +!/SMC ALLOCATE( SWHBCKG(NSEA,1) ) +!/SMC ALLOCATE( SWHANL(NSEA,1) ) + ENDIF +!/T IF (.NOT. SMCGRD) THEN +!/T ALLOCATE( SWHUPRSTR(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) +!/T ELSE +!/T ALLOCATE( SWHUPRSTR(NSEA,1) ) +!/T ENDIF +! +! Read additional Input: Analysis Field + INQUIRE(FILE=FLNMANL, EXIST=anl_exists) + IF (anl_exists) THEN !/T WRITE (NDSO,*) 'shape(SWHANL)', shape(SWHANL) - CALL READ_GRBTXT(SWHANL,FLNMANL) + CALL READ_GRBTXT(SWHANL, FLNMANL, SMCGRD) !/T CALL writeMatrix('SWHANL_IN.txt',SWHANL) ELSE WRITE (NDSO,*) trim(FLNMANL), ' does not exist, stopping...' + DEALLOCATE( SWHANL,VATMP,SWHBCKG ) +!/T DEALLOCATE( SWHUPRSTR ) STOP END IF -!/ +! ! Calculation - ALLOCATE ( VATMP(SIZE(VA,1))) - ALLOCATE ( SWHBCKG (SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) - ALLOCATE ( SWHUPRSTR (SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) -!/ DO ISEA=1, NSEA, 1 - IX = MAPSF(ISEA,1) - IY = MAPSF(ISEA,2) + IF (.NOT. SMCGRD) THEN + IX = MAPSF(ISEA,1) + IY = MAPSF(ISEA,2) +!/SMC ELSE +!/SMC IX = 1 +!/SMC IY = ISEA + ENDIF VATMP = VA(:,ISEA) CALL SWH_RSRT_1p (VATMP, ISEA, SWHBCKG_1) SWHBCKG(IY,IX)=SWHBCKG_1 -!/ - IF ( SWHBCKG(IY,IX) > 0.01 .AND. SWHANL(IY,IX) > 0.01 ) THEN -!/ +! + IF ( SWHBCKG(IY,IX) > 0.01 .AND. SWHANL(IY,IX) > 0.01 ) THEN PRCNTG=(SWHANL(IY,IX)/SWHBCKG_1) - -!/T WRITE (NDSO,*) 'ISEA = ', ISEA,' IX = ',IX,' IY = ', IY, & -!/T ' PRCNTG = ',PRCNTG,' SWHBCKG = ',SWHBCKG(IY,IX), & -!/T ' SWHANL = ', SWHANL(IY,IX) - +!/T WRITE (NDSO,*) 'ISEA = ', ISEA,' IX = ',IX,' IY = ', IY, & +!/T ' PRCNTG = ',PRCNTG,' SWHBCKG = ',SWHBCKG(IY,IX), & +!/T ' SWHANL = ', SWHANL(IY,IX) CALL CHECK_PRCNTG (PRCNTG,PRCNTG_CAP) CALL UPDATE_VA(PRCNTG, VA(:,ISEA)) - CALL SWH_RSRT_1p (VA(:,ISEA), ISEA, SWHUPRSTR(IY,IX)) - -!/T WRITE (NDSO,*)'ISEA = ',ISEA,' PRCNTG = ',PRCNTG, & -!/T 'SWH_BCKG = ', SWHBCKG(IY,IX), 'SWH_ANL = ', & -!/T SWHANL(IY,IX),'SWH_RSTR = ',SWHUPRSTR(IY,IX) -! +!/T CALL SWH_RSRT_1p (VA(:,ISEA), ISEA, SWHUPRSTR(IY,IX)) !/T WRITE (NDSO,*) ' =========== UPD2 Output ===========' !/T WRITE (NDSO,*)'ISEA = ',ISEA, & !/T 'SWH_BCKG = ', SWHBCKG(IY,IX), & !/T 'SWH_ANL = ', SWHANL(IY,IX), & +!/T 'PRCNTG = ', PRCNTG, & !/T 'SWH_RSTR = ',SWHUPRSTR(IY,IX) -!/ END IF END DO +!/T CALL writeMatrix('SWHBCKG_UPD2.txt', REAL(SWHBCKG )) +!/T CALL writeMatrix('SWHANL_UPD2.txt' , REAL(SWHANL )) +!/T CALL writeMatrix('SWHRSTR_UPD2.txt', REAL(SWHUPRSTR)) ! -!/T CALL writeMatrix('SWHBCKG_UPD2.txt', REAL(SWHBCKG )) -!/T CALL writeMatrix('SWHANL_UPD2.txt' , REAL(SWHANL )) -!/T CALL writeMatrix('SWHRSTR_UPD2.txt', REAL(SWHUPRSTR)) -!/T - DEALLOCATE( SWHANL,VATMP,SWHBCKG,SWHUPRSTR ) -! + DEALLOCATE( SWHANL,VATMP,SWHBCKG ) +!/T DEALLOCATE( SWHUPRSTR ) +!/ !/ ------------------------------------------------------------------- / ! UPD3 ! As per UPD2, but the update factor is a surface with the shape of the ! background spectrum - case ('UPD3') +!/ + CASE ('UPD3') WRITE (NDSO,902) 'UPD3' -! Additional Input: Analysis Field - INQUIRE(FILE=FLNMANL, EXIST=anl_exists) - IF (anl_exists) then +! +! Array allocation + ALLOCATE ( VATMP(SIZE(VA,1))) + ALLOCATE ( VATMP_NORM(SIZE(VA,1))) + ALLOCATE ( A(SIZE(VA,1))) + IF (.NOT. SMCGRD) THEN + ALLOCATE( SWHBCKG(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) ALLOCATE( SWHANL(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) -!/ WRITE (NDSO,*) 'shape(SWHANL)', shape(SWHANL) - CALL READ_GRBTXT(SWHANL,FLNMANL) +!/SMC ELSE +!/SMC ALLOCATE( SWHBCKG(NSEA,1) ) +!/SMC ALLOCATE( SWHANL(NSEA,1) ) + ENDIF +!/T IF (.NOT. SMCGRD) THEN +!/T ALLOCATE( SWHUPRSTR(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) +!/T ELSE +!/T ALLOCATE( SWHUPRSTR(NSEA,1) ) +!/T ENDIF +! +! Read additional Input: Analysis Field + INQUIRE(FILE=FLNMANL, EXIST=anl_exists) + IF (anl_exists) THEN +!/T WRITE (NDSO,*) 'shape(SWHANL)', shape(SWHANL) + CALL READ_GRBTXT(SWHANL, FLNMANL, SMCGRD) !/T CALL writeMatrix('SWHANL_IN.txt',SWHANL) ELSE WRITE (NDSO,*) trim(FLNMANL), ' does not exist, stopping...' + DEALLOCATE( SWHANL,VATMP,SWHBCKG,VATMP_NORM,A ) +!/T DEALLOCATE( SWHUPRSTR ) STOP END IF -!/ +! ! Calculation - ALLOCATE ( VATMP(SIZE(VA,1))) - ALLOCATE ( SWHBCKG (SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) - ALLOCATE ( SWHUPRSTR (SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) - ALLOCATE ( VATMP_NORM(SIZE(VA,1))) - ALLOCATE ( A (SIZE(VA,1))) -!/ DO ISEA=1, NSEA, 1 - IX = MAPSF(ISEA,1) - IY = MAPSF(ISEA,2) -!/ + IF (.NOT. SMCGRD) THEN + IX = MAPSF(ISEA,1) + IY = MAPSF(ISEA,2) +!/SMC ELSE +!/SMC IX = 1 +!/SMC IY = ISEA + ENDIF VATMP = VA(:,ISEA) -!/ CALL SWH_RSRT_1p (VATMP, ISEA, SWHBCKG_1) SWHBCKG(IY,IX)=SWHBCKG_1 -!/ +! IF ( SWHBCKG(IY,IX) > 0.01 .AND. SWHANL(IY,IX) > 0.01 ) THEN !Step 1. PRCNTG=(SWHANL(IY,IX)/SWHBCKG_1) - -!/T WRITE (NDSO,*) ' =========== Step 1. ===========' -!/T WRITE (NDSO,*) ' ISEA = ', ISEA,' IX = ',IX,' IY = ', IY, & -!/T ' PRCNTG = ',PRCNTG,' SWHBCKG = ',SWHBCKG(IY,IX), & -!/T ' SWHANL = ', SWHANL(IY,IX) - - CALL CHECK_PRCNTG (PRCNTG,PRCNTG_CAP) +!/T WRITE (NDSO,*) ' =========== Step 1. ===========' +!/T WRITE (NDSO,*) ' ISEA = ', ISEA,' IX = ',IX,' IY = ', IY, & +!/T ' PRCNTG = ',PRCNTG,' SWHBCKG = ',SWHBCKG(IY,IX), & +!/T ' SWHANL = ', SWHANL(IY,IX) + CALL CHECK_PRCNTG(PRCNTG,PRCNTG_CAP) VATMP_NORM=VATMP/SUM(VATMP) - -!/T WRITE (NDSO,*)' ISEA =', ISEA,' IX = ',IX,' IY = ', IY, & -!/T ' PRCNTG = ',PRCNTG, & -!/T ' SWHBCKG = ',SWHBCKG(IY,IX), ' SWHANL = ', SWHANL(IY,IX) -!/T - IF (PRCNTG > 1.) THEN - A=PRCNTG**2*(1 + VATMP_NORM) - ELSE - A=PRCNTG**2*(1 - VATMP_NORM) - END IF -!/ - VATMP=A*VATMP -!/ - CALL SWH_RSRT_1p (VATMP, ISEA, SWHTMP) - SWHUPRSTR(IY,IX)=SWHTMP - PRCNTG=(SWHANL(IY,IX)/SWHTMP) -!/ -!/T WRITE (NDSO,*) ' =========== Step 2. ===========' -!/T WRITE (NDSO,*)'ISEA = ', ISEA, ' PRCNTG = ',PRCNTG, & -!/T ' SWHANL= ', SWHANL(IY,IX), & -!/T ' SWHUPRSTR(IY,IX) = ', SWHUPRSTR(IY,IX) -!/ +!/T WRITE (NDSO,*)' ISEA =', ISEA,' IX = ',IX,' IY = ', IY, & +!/T ' PRCNTG = ',PRCNTG, & +!/T ' SWHBCKG = ',SWHBCKG(IY,IX), ' SWHANL = ', SWHANL(IY,IX) + IF (PRCNTG > 1.) THEN + A=PRCNTG**2*(1 + VATMP_NORM) + ELSE + A=PRCNTG**2*(1 - VATMP_NORM) + END IF + VATMP=A*VATMP + CALL SWH_RSRT_1p (VATMP, ISEA, SWHTMP) + PRCNTG=(SWHANL(IY,IX)/SWHTMP) +!/T SWHUPRSTR(IY,IX)=SWHTMP +!/T WRITE (NDSO,*) ' =========== Step 2. ===========' +!/T WRITE (NDSO,*)'ISEA = ', ISEA, ' PRCNTG = ',PRCNTG, & +!/T ' SWHANL= ', SWHANL(IY,IX), & +!/T ' SWHUPRSTR(IY,IX) = ', SWHUPRSTR(IY,IX) CALL CHECK_PRCNTG (PRCNTG,PRCNTG_CAP) CALL UPDATE_VA(PRCNTG, VATMP) - VA(:,ISEA)=VATMP - CALL SWH_RSRT_1p (VATMP, ISEA, SWHTMP) - SWHUPRSTR(IY,IX)=SWHTMP - +!/T CALL SWH_RSRT_1p (VATMP, ISEA, SWHTMP) +!/T SWHUPRSTR(IY,IX)=SWHTMP !/T WRITE (NDSO,*) ' =========== UPD3 Output ===========' !/T WRITE (NDSO,*)'ISEA = ',ISEA,'SWH_BCKG = ', SWHBCKG(IY,IX), & -!/T 'SWH_ANL = ', SWHANL(IY,IX), & -!/T 'SWH_RSTR = ',SWHUPRSTR(IY,IX) -!/ +!/T 'SWH_ANL = ', SWHANL(IY,IX), & +!/T 'SWH_RSTR = ',SWHUPRSTR(IY,IX) END IF END DO +!/T CALL writeMatrix('SWHBCKG_UPD3.txt', REAL(SWHBCKG)) +!/T CALL writeMatrix('SWHANL_UPD3.txt' , REAL(SWHANL )) +!/T CALL writeMatrix('SWHRSTR_UPD3.txt', REAL(SWHUPRSTR)) ! -!/T CALL writeMatrix('SWHBCKG_UPD3.txt', REAL(SWHBCKG)) -!/T CALL writeMatrix('SWHANL_UPD3.txt' , REAL(SWHANL )) -!/T CALL writeMatrix('SWHRSTR_UPD3.txt', REAL(SWHUPRSTR)) -!/T - DEALLOCATE( SWHANL,VATMP,SWHBCKG,SWHUPRSTR,VATMP_NORM,A ) - end select + DEALLOCATE( SWHANL,VATMP,SWHBCKG,VATMP_NORM,A ) +!/T DEALLOCATE( SWHUPRSTR ) +!/ +!/ ------------------------------------------------------------------- / +! UPD5 +! Corrects wind-sea only in wind dominated conditions - bulk correction +! The fac(x,y,frq,theta), is calculated at each grid point according to +! HsBckg and HsAnl +!/ + CASE ('UPD5') + WRITE (NDSO,902) 'UPD5' + ! Presently set hardwired THRWSEA energy threshold here + ! not user defined in input file + THRWSEA = 0.7 +! +! Array allocation + ALLOCATE ( VATMP(SIZE(VA,1))) + ALLOCATE ( VAMAPWS(SIZE(VA,1))) + IF (.NOT. SMCGRD) THEN + ! SWH arrays allocated using Y,X convention as per wgrib write + ALLOCATE( SWHBCKG(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) + ALLOCATE( SWHANL(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) + ! Wind arrays allocated using X,Y convention as in w3idatmd + ALLOCATE( WSBCKG(SIZE(MAPSTA,2), SIZE(MAPSTA,1)) ) + ALLOCATE( WDRBCKG(SIZE(MAPSTA,2), SIZE(MAPSTA,1)) ) +!/SMC ELSE +!/SMC ALLOCATE( SWHBCKG(NSEA,1) ) +!/SMC ALLOCATE( SWHANL(NSEA,1) ) +!/SMC ! Use SMCWND to determine if reading a seapoint aray for wind +!/SMC IF( SMCWND ) THEN +!/SMC ALLOCATE( WSBCKG(NSEA,1) ) +!/SMC ALLOCATE( WDRBCKG(NSEA,1) ) +!/SMC ELSE +!/SMC ALLOCATE(WSBCKG(SIZE(MAPSTA,2), SIZE(MAPSTA,1))) +!/SMC ALLOCATE(WDRBCKG(SIZE(MAPSTA,2), SIZE(MAPSTA,1))) +!/SMC ENDIF + ENDIF +!/T IF (.NOT. SMCGRD) THEN +!/T ALLOCATE( SWHUPRSTR(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) +!/T ELSE +!/T ALLOCATE( SWHUPRSTR(NSEA,1) ) +!/T ENDIF +! +! Read additional Input: Analysis Field + INQUIRE(FILE=FLNMANL, EXIST=anl_exists) + IF (anl_exists) THEN +!/T WRITE (NDSO,*) 'shape(SWHANL)', shape(SWHANL) +!/WRST ! For WRST switch read only corrected SWH +!/WRST ! Wind will have been read from the restart +!/WRST IF (WRSTON) THEN +!/WRST CALL READ_GRBTXT(SWHANL, FLNMANL, SMCGRD) +!/WRST ELSE + CALL READ_GRBTXTWS(SWHANL,WSBCKG,WDRBCKG,FLNMANL,SMCGRD) +!/WRST ENDIF +!/T CALL writeMatrix('SWHANL_IN.txt',SWHANL) + ELSE + WRITE (NDSO,*) trim(FLNMANL), ' does not exist, stopping...' + DEALLOCATE( SWHANL,VATMP,SWHBCKG,VAMAPWS,WSBCKG,WDRBCKG ) +!/T DEALLOCATE( SWHUPRSTR ) + STOP + END IF +! +!/WRST !Calculate wind speed and direction values from u,v.. +!/WRST !..using cartesian direction convention +!/WRST !At present assume only needed for data read from restart +!/WRST CALL UVTOCART(WXNwrst,WYNwrst,WSBCKG,WDRBCKG,SMCWND) +! +! Calculation + DO ISEA=1, NSEA, 1 + IF (.NOT. SMCGRD) THEN + IX = MAPSF(ISEA,1) + IY = MAPSF(ISEA,2) + IXW = IX + IYW = IY +!/SMC ELSE +!/SMC IX = 1 +!/SMC IY = ISEA +!/SMC IF( SMCWND ) THEN +!/SMC IXW = IX +!/SMC IYW = IY +!/SMC ELSE +!/SMC IXW = MAPSF(ISEA,1) +!/SMC IYW= MAPSF(ISEA,2) +!/SMC ENDIF + ENDIF + VATMP = VA(:,ISEA) + CALL SWH_RSRT_1pw (VATMP, WSBCKG(IXW,IYW), WDRBCKG(IXW,IYW), ISEA, & + SWHBCKG_1, SWHBCKG_W, SWHBCKG_S, VAMAPWS) + SWHBCKG(IY,IX)=SWHBCKG_1 +! + IF ( SWHBCKG(IY,IX) > 0.01 .AND. SWHANL(IY,IX) > 0.01 ) THEN + ! If wind-sea is dominant energy component apply correction to + ! wind-sea part only + IF ( (SWHBCKG_W / SWHBCKG_1)**2.0 > THRWSEA ) THEN + ! Apply spectrum updates to wind-sea bins only + PRCNTG=SQRT((SWHANL(IY,IX)**2.0-SWHBCKG_S**2.0)/SWHBCKG_W**2.0) + CALL CHECK_PRCNTG(PRCNTG,PRCNTG_CAP) + CALL UPDTWSPEC(VATMP, PRCNTG, VAMAPWS) + ! else correct the whole spectrum as for UPD2 + ELSE + PRCNTG=(SWHANL(IY,IX)/SWHBCKG_1) + CALL CHECK_PRCNTG(PRCNTG,PRCNTG_CAP) + CALL UPDATE_VA(PRCNTG,VATMP) + END IF +!/T WRITE (NDSO,*) 'ISEA = ', ISEA,' IX = ',IX,' IY = ', IY, & +!/T ' PRCNTG = ',PRCNTG,' SWHBCKG = ',SWHBCKG(IY,IX), & +!/T ' SWHANL = ', SWHANL(IY,IX) + VA(:,ISEA)=VATMP +!/T CALL SWH_RSRT_1p (VATMP, ISEA, SWHTMP) +!/T SWHUPRSTR(IY,IX)=SWHTMP +!/T WRITE (NDSO,*) ' =========== UPD5 Output ===========' +!/T WRITE (NDSO,*)'ISEA = ',ISEA,'SWH_BCKG = ', SWHBCKG(IY,IX), & +!/T 'SWH_ANL = ', SWHANL(IY,IX), & +!/T 'SWH_RSTR = ',SWHUPRSTR(IY,IX) + END IF + END DO +!/T CALL writeMatrix('SWHBCKG_UPD5.txt', REAL(SWHBCKG )) +!/T CALL writeMatrix('SWHANL_UPD5.txt' , REAL(SWHANL )) +!/T CALL writeMatrix('SWHRSTR_UPD5.txt', REAL(SWHUPRSTR)) ! + DEALLOCATE( SWHANL,VATMP,SWHBCKG,VAMAPWS,WSBCKG,WDRBCKG ) +!/T DEALLOCATE( SWHUPRSTR ) +!/ +!/ ------------------------------------------------------------------- / +! UPD6 +! Hybrid of Lionello et al. and Kohno methods +! Corrects wind-sea only in wind dominated conditions - including fp shift +! The fac(x,y,frq,theta), is calculated at each grid point according to +! HsBckg and HsAnl +!/ + CASE ('UPD6') + WRITE (NDSO,902) 'UPD6' + ! Presently set hardwired CORWSEA logical and THRWSEA energy + ! thresholds here, not user defined in input file + CORWSEA = .FALSE. + THRWSEA = 0.7 +! +! Array allocation + ALLOCATE ( VATMP(SIZE(VA,1))) + ALLOCATE ( VAMAPWS(SIZE(VA,1))) + IF (.NOT. SMCGRD) THEN + ! SWH arrays allocated using Y,X convention as per wgrib write + ALLOCATE( SWHBCKG(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) + ALLOCATE( SWHANL(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) + ! Wind arrays allocated using X,Y convention as in w3idatmd + ALLOCATE( WSBCKG(SIZE(MAPSTA,2), SIZE(MAPSTA,1)) ) + ALLOCATE( WDRBCKG(SIZE(MAPSTA,2), SIZE(MAPSTA,1)) ) +!/SMC ELSE +!/SMC ALLOCATE( SWHBCKG(NSEA,1) ) +!/SMC ALLOCATE( SWHANL(NSEA,1) ) +!/SMC ! Use SMCWND to determine if reading a seapoint aray for wind +!/SMC IF( SMCWND ) THEN +!/SMC ALLOCATE( WSBCKG(NSEA,1) ) +!/SMC ALLOCATE( WDRBCKG(NSEA,1) ) +!/SMC ELSE +!/SMC ALLOCATE(WSBCKG(SIZE(MAPSTA,2), SIZE(MAPSTA,1))) +!/SMC ALLOCATE(WDRBCKG(SIZE(MAPSTA,2), SIZE(MAPSTA,1))) +!/SMC ENDIF + ENDIF +!/T IF (.NOT. SMCGRD) THEN +!/T ALLOCATE( SWHUPRSTR(SIZE(MAPSTA,1), SIZE(MAPSTA,2)) ) +!/T ELSE +!/T ALLOCATE( SWHUPRSTR(NSEA,1) ) +!/T ENDIF +! +! Read additional Input: Analysis Field + INQUIRE(FILE=FLNMANL, EXIST=anl_exists) + IF (anl_exists) THEN +!/T WRITE (NDSO,*) 'shape(SWHANL)', shape(SWHANL) +!/WRST ! For WRST switch read only corrected SWH +!/WRST ! Wind will have been read from the restart +!/WRST IF (WRSTON) THEN +!/WRST CALL READ_GRBTXT(SWHANL, FLNMANL, SMCGRD) +!/WRST ELSE + CALL READ_GRBTXTWS(SWHANL,WSBCKG,WDRBCKG,FLNMANL,SMCGRD) +!/WRST ENDIF +!/T CALL writeMatrix('SWHANL_IN.txt',SWHANL) + ELSE + WRITE (NDSO,*) trim(FLNMANL), ' does not exist, stopping...' + DEALLOCATE( SWHANL,VATMP,SWHBCKG,VAMAPWS,WSBCKG,WDRBCKG ) +!/T DEALLOCATE( SWHUPRSTR ) + STOP + END IF +! +!/WRST !Calculate wind speed and direction values from u,v.. +!/WRST !..using cartesian direction convention +!/WRST !At present assume only needed for data read from restart +!/WRST CALL UVTOCART(WXNwrst,WYNwrst,WSBCKG,WDRBCKG,SMCWND) +! +! Calculation + DO ISEA=1, NSEA, 1 + IF (.NOT. SMCGRD) THEN + IX = MAPSF(ISEA,1) + IY = MAPSF(ISEA,2) + IXW = IX + IYW = IY +!/SMC ELSE +!/SMC IX = 1 +!/SMC IY = ISEA +!/SMC IF( SMCWND ) THEN +!/SMC IXW = IX +!/SMC IYW = IY +!/SMC ELSE +!/SMC IXW = MAPSF(ISEA,1) +!/SMC IYW = MAPSF(ISEA,2) +!/SMC ENDIF + ENDIF + VATMP = VA(:,ISEA) + CALL SWH_RSRT_1pw (VATMP, WSBCKG(IXW,IYW), WDRBCKG(IXW,IYW), ISEA, & + SWHBCKG_1, SWHBCKG_W, SWHBCKG_S, VAMAPWS) + SWHBCKG(IY,IX)=SWHBCKG_1 +!/ + IF ( SWHBCKG(IY,IX) > 0.01 .AND. SWHANL(IY,IX) > 0.01 ) THEN + ! If wind-sea is dominant energy component apply correction to + ! wind-sea part only + IF ( (SWHBCKG_W / SWHBCKG_1)**2.0 > THRWSEA ) THEN + ! Apply spectrum updates to wind-sea bins only + PRCNTG=SQRT((SWHANL(IY,IX)**2.0-SWHBCKG_S**2.0)/SWHBCKG_W**2.0) + CALL CHECK_PRCNTG(PRCNTG,PRCNTG_CAP) + CALL UPDTWSPECF(VATMP, PRCNTG, VAMAPWS, ISEA, .FALSE.) + ! else correct the whole spectrum + ELSE + PRCNTG=(SWHANL(IY,IX)/SWHBCKG_1) + CALL CHECK_PRCNTG(PRCNTG,PRCNTG_CAP) + IF (CORWSEA) THEN + ! Include frequency shifts in wind-sea update + CALL UPDTWSPECF(VATMP, PRCNTG, VAMAPWS, ISEA, .TRUE.) + ELSE + ! bulk correction only, as per UPD2 + CALL UPDATE_VA(PRCNTG,VATMP) + END IF + END IF +!/T WRITE (NDSO,*) 'ISEA = ', ISEA,' IX = ',IX,' IY = ', IY, & +!/T ' PRCNTG = ',PRCNTG,' SWHBCKG = ',SWHBCKG(IY,IX), & +!/T ' SWHANL = ', SWHANL(IY,IX) + VA(:,ISEA)=VATMP +!/T CALL SWH_RSRT_1p (VATMP, ISEA, SWHTMP) +!/T SWHUPRSTR(IY,IX)=SWHTMP +!/T WRITE (NDSO,*) ' =========== UPD6 Output ===========' +!/T WRITE (NDSO,*)'ISEA = ',ISEA,'SWH_BCKG = ', SWHBCKG(IY,IX), & +!/T 'SWH_ANL = ', SWHANL(IY,IX), & +!/T 'SWH_RSTR = ',SWHUPRSTR(IY,IX) + END IF + END DO +!/T CALL writeMatrix('SWHBCKG_UPD6.txt', REAL(SWHBCKG )) +!/T CALL writeMatrix('SWHANL_UPD6.txt' , REAL(SWHANL )) +!/T CALL writeMatrix('SWHRSTR_UPD6.txt', REAL(SWHUPRSTR)) +! + DEALLOCATE( SWHANL,VATMP,SWHBCKG,VAMAPWS,WSBCKG,WDRBCKG ) +!/T DEALLOCATE( SWHUPRSTR ) +!/ +!/ ------------------------------------------------------------------- / +! End of update options +!/ + END SELECT +!/ !/ ------------------------------------------------------------------- / ! 6. Write updated restart file +!/ +!/WRST ! Copy read wind values from restart for write out +!/WRST WXN = WXNwrst +!/WRST WYN = WYNwrst WRITE (NDSO,903) INTYPE = 3 CALL W3IORS ( 'HOT', NDS(6), SIG(NK), INTYPE, 1 ) -! +!/T WRITE (NDST,*), MYNAME,' : Exporting VA at the end of the re-analysis' +!/T CALL writeMatrix('VA02.txt', REAL(VA)) +! +!/ !/ ------------------------------------------------------------------- / -!/T WRITE (NDST,*), MYNAME,' : Exporting VA at the end of the re-analysis' -!/T CALL writeMatrix('VA02.txt', REAL(VA)) - -!/ ! Escape locations read errors 08k: -! +!/ GOTO 888 ! 800 CONTINUE @@ -609,9 +944,10 @@ ! 888 CONTINUE WRITE (NDSO,999) -! +!/ +!/ ------------------------------------------------------------------- / ! Escape locations read errors 2k: -! +!/ GOTO 2222 ! 2001 CONTINUE @@ -623,10 +959,12 @@ GOTO 2222 ! 2222 CONTINUE - -!! Formats -900 FORMAT (/15X,' *** WAVEWATCH III ww3_uprsrt Initializing *** '/ & - 15X,'==============================================='/) +!/ +!/ ------------------------------------------------------------------- / +! Formats +!/ +900 FORMAT (/15X,' *** WAVEWATCH III ww3_uprstr Initializing *** '/ & + 15X,' ==============================================='/) 901 FORMAT ( ' Comment character is ''',A,''''/) ! 902 FORMAT ( ' The Option ''',A,''' is used.'/) @@ -646,14 +984,14 @@ ' ========================================='/ & ' WAVEWATCH III ww3_uprsrt '/) ! -1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3URSTR : '/ & +1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3UPRSTR : '/ & ' ERROR IN OPENING INPUT FILE'/ & ' IOSTAT =',I5/) ! -1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3URSTR : '/ & +1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3UPRSTR : '/ & ' PREMATURE END OF INPUT FILE'/) -1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3URSTR : '/ & +1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3UPRSTR : '/ & ' ERROR IN READING FROM INPUT FILE'/ & ' IOSTAT =',I5/) 1004 FORMAT (/' '/,A/) @@ -665,6 +1003,7 @@ !/ ------------------------------------------------------------------- / !/ SUBROUTINE UPDATE_VA (PRCNTG, VATMP) +!/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | Stelios Flampouris | @@ -707,15 +1046,18 @@ ! !/T ! ! 10. Source code : - +! +!/ REAL, INTENT(IN) :: PRCNTG REAL, DIMENSION(:), INTENT(INOUT) :: VATMP - +! VATMP = (PRCNTG**2)*VATMP - +! END SUBROUTINE UPDATE_VA !/ !/ --------------------------------------------------------------------- +!/ + SUBROUTINE CHECK_PRCNTG (PRCNTG,PRCNTG_CAP) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -759,9 +1101,8 @@ ! !/T ! ! 10. Source code : - - SUBROUTINE CHECK_PRCNTG (PRCNTG,PRCNTG_CAP) ! +!/ REAL, INTENT(INOUT) :: PRCNTG REAL, INTENT(IN ) :: PRCNTG_CAP ! local @@ -778,12 +1119,13 @@ !/T END IF !/T WRITE (NDSO,*) trim(MYNAME)," The updated correction is ",PRCNTG -!/ +! END SUBROUTINE CHECK_PRCNTG !/ !/ ------------------------------------------------------------------- / !/ - SUBROUTINE READ_GRBTXT(UPDPRCNT,FLNMCOR) + SUBROUTINE READ_GRBTXT(UPDPRCNT,FLNMCOR,SMCGRD) +!/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | Stelios Flampouris | @@ -827,49 +1169,181 @@ ! !/T ! ! 10. Source code : - +! +!/ REAL, DIMENSION(:,:), INTENT(OUT) :: UPDPRCNT CHARACTER(*), INTENT(IN) :: FLNMCOR + LOGICAL, INTENT(IN) :: SMCGRD ! Local Variables INTEGER :: I, J, IERR INTEGER :: K, L, M, N REAL :: A INTEGER, PARAMETER :: IP_FID = 123 CHARACTER(25), PARAMETER::myname='read_grbtxt' -!/ +! !/T WRITE (NDSO,*) trim(myname), ' starts' -!/ J = LEN_TRIM(FNMPRE) OPEN (IP_FID,FILE=FNMPRE(:J)//TRIM(FLNMCOR),STATUS='OLD' & ,ACTION='read',IOSTAT=IERR) -!/ - READ( IP_FID, *) M,N - - IF (( SIZE(UPDPRCNT,1) /= N) .OR. ( SIZE(UPDPRCNT,2) /= M )) THEN - WRITE (NDSO,*) trim(myname),': These are not the grid ' // & - 'dimensions: M=',M,' N=',N - STOP +! + ! Read text header and check dimensions match expected values + IF (.NOT. SMCGRD) THEN + READ( IP_FID, *) M,N + IF (( SIZE(UPDPRCNT,1) /= N) .OR. ( SIZE(UPDPRCNT,2) /= M )) THEN + WRITE (NDSO,*) trim(myname),': These are not the grid ' // & + 'dimensions: M=',M,' N=',N + STOP + END IF +!/SMC ELSE +!/SMC READ( IP_FID, *) N +!/SMC IF ( SIZE(UPDPRCNT,1) /= N ) THEN +!/SMC WRITE (NDSO,*) trim(myname),': These are not the grid ' // & +!/SMC 'dimensions: N=',N +!/SMC STOP +!/SMC END IF END IF UPDPRCNT=0 -!/ - DO L=1,N - DO K=1,M - A=0. - READ(IP_FID,*)A - UPDPRCNT(N+1-L,K)=A +! + ! Read the data into its allocated array + IF (.NOT. SMCGRD) THEN + DO L=1,N + DO K=1,M + A=0. + READ(IP_FID,*)A + UPDPRCNT(N+1-L,K)=A + END DO END DO - END DO - +!/SMC ELSE +!/SMC DO L=1,N +!/SMC A=0. +!/SMC READ(IP_FID,*)A +!/SMC UPDPRCNT(L,1)=A +!/SMC END DO + END IF +! CLOSE(IP_FID) +! !/T WRITE (NDSO,*) trim(myname), ' ends' - -110 format (2(I4) ) - END SUBROUTINE READ_GRBTXT !/ +!/ ------------------------------------------------------------------- / +!/ + SUBROUTINE READ_GRBTXTWS(UPDPRCNT,WSPD,WDIR,FLNMCOR,SMCGRD) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | Andy Saulter | +!/ | FORTRAN 90 | +!/ | Original code : 24-Oct-2018 | +!/ | Last update : 05-Oct-2019 | +!/ +-----------------------------------+ +!/ +!/ 24-Oct-2018 : Original Code ( version 6.07 ) +!/ +!/ Copyright 2010 National Weather Service (NWS), +!/ National Oceanic and Atmospheric Administration. All rights +!/ reserved. WAVEWATCH III is a trademark of the NWS. +!/ No unauthorized use without permission. +!/ +! 1. Purpose : +! Read txt files that include wind data +! 2. Method : +! +! 3. Parameters : +! +! Local parameters. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! ---------------------------------------------------------------- +! Internal Subroutines: +! +! 5. Called by : +! +! 6. Error messages : +! +! 7. Remarks : +! +! 8. Structure : +! +! 9. Switches : +! +! !/T +! +! 10. Source code : +! +!/ + REAL, DIMENSION(:,:), INTENT(OUT) :: UPDPRCNT, WSPD, WDIR + CHARACTER(*), INTENT(IN) :: FLNMCOR + LOGICAL, INTENT(IN) :: SMCGRD +! Local Variables + INTEGER :: I, J, IERR + INTEGER :: K, L, M, N + REAL :: A, WS, WD + INTEGER, PARAMETER :: IP_FID = 123 + CHARACTER(25), PARAMETER::myname='read_grbtxt' +! +!/T WRITE (NDSO,*) trim(myname), ' starts' + J = LEN_TRIM(FNMPRE) + OPEN (IP_FID,FILE=FNMPRE(:J)//TRIM(FLNMCOR),STATUS='OLD' & + ,ACTION='read',IOSTAT=IERR) +! + ! Read text header and check dimensions match expected values + IF (.NOT. SMCGRD) THEN + READ( IP_FID, *) M,N + IF (( SIZE(UPDPRCNT,1) /= N) .OR. ( SIZE(UPDPRCNT,2) /= M )) THEN + WRITE (NDSO,*) trim(myname),': These are not the grid ' // & + 'dimensions: M=',M,' N=',N + STOP + END IF +!/SMC ELSE +!/SMC READ( IP_FID, *) N +!/SMC IF ( SIZE(UPDPRCNT,1) /= N ) THEN +!/SMC WRITE (NDSO,*) trim(myname),': These are not the grid ' // & +!/SMC 'dimensions: N=',N +!/SMC STOP +!/SMC END IF + END IF + UPDPRCNT=0 + WSPD=0. + WDIR=0. +! + ! Read the data into allocated arrays + IF (.NOT. SMCGRD) THEN + DO L=1,N + DO K=1,M + A=0. + WS=0. + WD=0. + READ(IP_FID,*)A, WS, WD + !SWH data read onto Y,X grid + UPDPRCNT(N+1-L,K)=A + !Wind data read onto X,Y grid + WSPD(K,N+1-L)=WS + WDIR(K,N+1-L)=WD + END DO + END DO +!/SMC ELSE +!/SMC DO L=1,N +!/SMC A=0. +!/SMC READ(IP_FID,*)A, WS, WD +!/SMC UPDPRCNT(L,1)=A +!/SMC WSPD(L,1)=WS +!/SMC WDIR(L,1)=WD +!/SMC END DO + ENDIF +! + CLOSE(IP_FID) +! +! +!/T WRITE (NDSO,*) trim(myname), ' ends' + END SUBROUTINE READ_GRBTXTWS !/ !/ ------------------------------------------------------------------- / !/ + SUBROUTINE SWH_RSRT_1p (VA1p, ISEA1p, HSIG1p ) +!/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | Stelios Flampouris | @@ -913,19 +1387,17 @@ ! 10. Source code : ! !/ - SUBROUTINE SWH_RSRT_1p (VA1p, ISEA1p, HSIG1p ) - REAL, INTENT(OUT) :: HSIG1p INTEGER, INTENT(IN) :: ISEA1p REAL, DIMENSION(:), INTENT(IN) :: VA1p CHARACTER(25),PARAMETER :: myname='SWH_RSRT_1p' -!/ +! !/FT WRITE (NDSO,*)' ' !/FT WRITE (NDSO,*) trim(myname), ' starts' HSIG1p = 0. DEPTH = MAX ( DMIN , -ZB(ISEA1p) ) ETOT = 0. - +! DO IK=1, NK CALL WAVNU1 ( SIG(IK), DEPTH, WN, CG ) E1I = 0. @@ -934,17 +1406,404 @@ END DO ETOT = ETOT + E1I*DSIP(IK) END DO - +! HSIG1p = 4. * SQRT ( ETOT * DTH ) -!/ +! !/FT WRITE (NDSO,*) ' ', trim(myname), ' ends' !/FT WRITE (NDSO,*)' ' - END SUBROUTINE SWH_RSRT_1p !/ !/ ------------------------------------------------------------------- / +!/ + SUBROUTINE SWH_RSRT_1pw (VA1p, WS, WD, ISEA1p, HSIG1p, HSIGwp, HSIGsp, VAMAPWS ) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | Andy Saulter | +!/ | FORTRAN 90 | +!/ | Original code : 24-Oct-2018 | +!/ | Last update : 05-Oct-2019 | +!/ +-----------------------------------+ +!/ +!/ 24-Oct-2018 : Original Code ( version 6.07 ) +!/ +!/ Copyright 2010 National Weather Service (NWS), +!/ National Oceanic and Atmospheric Administration. All rights +!/ reserved. WAVEWATCH III is a trademark of the NWS. +!/ No unauthorized use without permission. +!/ +! 1. Purpose : +! Calculate the significant wave height for total, wind sea and +! swell components from the restart file for 1 point +! 2. Method : +! +! 3. Parameters : +! +! Local parameters. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! ---------------------------------------------------------------- +! Internal Subroutines: +! +! 5. Called by : +! +! 6. Error messages : +! +! 7. Remarks : +! +! 8. Structure : +! +! 9. Switches : +! +! !/T +! +! 10. Source code : +! +!/ + USE W3GDATMD, ONLY: TH + USE W3ODATMD, ONLY: WSMULT !same wind sea cut-off factor for sea/swell outputs +! + REAL, INTENT(OUT) :: HSIG1p, HSIGwp, HSIGsp + INTEGER, INTENT(IN) :: ISEA1p + REAL, INTENT(IN) :: WS, WD + REAL, DIMENSION(:), INTENT(IN) :: VA1p + INTEGER, DIMENSION(:), INTENT(OUT) :: VAMAPWS ! Wind-sea id for spectral bins + REAL :: RELWS, ETOTw, ETOTs, EwI, EsI + CHARACTER(25),PARAMETER :: myname='SWH_RSRT_1pw' +! +!/T WRITE (NDSO,*) trim(myname), ' starts' + HSIG1p = 0. + HSIGwp = 0. + HSIGsp = 0. + DEPTH = MAX ( DMIN , -ZB(ISEA1p) ) + ETOT = 0. + ETOTw = 0. + ETOTs = 0. +! + DO IK=1, NK + CALL WAVNU1 ( SIG(IK), DEPTH, WN, CG ) + E1I = 0. + EwI = 0. + EsI = 0. + DO ITH=1, NTH + ! Relative wind-sea calc assumes input with in direction toward + ! i.e. same as for the wave spectrum + RELWS = WSMULT * WS * MAX(0.0, COS(WD - TH(ITH))) + E1I = E1I + VA1p(ITH+(IK-1)*NTH) * SIG(IK) / CG + IF ( RELWS > (SIG(IK)/WN) ) THEN + EwI = EwI + VA1p(ITH+(IK-1)*NTH) * SIG(IK) / CG + VAMAPWS(ITH+(IK-1)*NTH) = 1 + ELSE + EsI = EsI + VA1p(ITH+(IK-1)*NTH) * SIG(IK) / CG + VAMAPWS(ITH+(IK-1)*NTH) = 0 + END IF + END DO + ETOT = ETOT + E1I*DSIP(IK) + ETOTw = ETOTw + EwI*DSIP(IK) + ETOTs = ETOTs + EsI*DSIP(IK) + END DO +! + HSIG1p = 4. * SQRT ( ETOT * DTH ) + HSIGwp = 4. * SQRT ( ETOTw * DTH ) + HSIGsp = 4. * SQRT ( ETOTs * DTH ) +! +!/T WRITE (NDSO,*) trim(myname), ' ends' + END SUBROUTINE SWH_RSRT_1pw +!/ +!/ ------------------------------------------------------------------- / +!/ + SUBROUTINE UVTOCART (UVEC, VVEC, SPD, DCART, SMCGRD) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | Andy Saulter | +!/ | FORTRAN 90 | +!/ | Original code : 05-Oct-2019 | +!/ +-----------------------------------+ +!/ +!/ 05-Oct-2019 : Original Code ( version 6.07 ) +!/ +!/ Copyright 2010 National Weather Service (NWS), +!/ National Oceanic and Atmospheric Administration. All rights +!/ reserved. WAVEWATCH III is a trademark of the NWS. +!/ No unauthorized use without permission. +!/ +! 1. Purpose : +! Calculate speed and cartesian convention directions from u,v +! input vectors +! 2. Method : +! +! 3. Parameters : +! +! Local parameters. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! ---------------------------------------------------------------- +! Internal Subroutines: +! +! 5. Called by : +! +! 6. Error messages : +! +! 7. Remarks : +! +! 8. Structure : +! +! 9. Switches : +! +! !/T +! +! 10. Source code : +! +!/ + USE CONSTANTS, ONLY: TPI +! + REAL, DIMENSION(:,:), INTENT(OUT) :: SPD, DCART + REAL, DIMENSION(:,:), INTENT(IN) :: UVEC, VVEC + LOGICAL, INTENT(IN) :: SMCGRD +! +!/T WRITE (NDSO,*) trim(myname), ' starts' +! + DO ISEA=1, NSEA, 1 + IF (.NOT. SMCGRD) THEN + IX = MAPSF(ISEA,1) + IY = MAPSF(ISEA,2) +!/SMC ELSE +!/SMC IX = 1 +!/SMC IY = ISEA + ENDIF +! + SPD(IY,IX) = SQRT( UVEC(IY,IX)**2 + VVEC(IY,IX)**2 ) + IF( SPD(IY,IX) .GT. 1.E-7) THEN + DCART = MOD( TPI+ATAN2(UVEC(IY,IX),VVEC(IY,IX)) , TPI ) + ELSE + DCART = 0 + END IF + SPD(IY,IX) = MAX( SPD(IY,IX) , 0.001 ) + END DO +! +!/T WRITE (NDSO,*) trim(myname), ' ends' + END SUBROUTINE UVTOCART +!/ +!/ ------------------------------------------------------------------- / +!/ + SUBROUTINE UPDTWSPEC(VATMP, PRCNTG, VAMAPWS) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | Andy Saulter | +!/ | FORTRAN 90 | +!/ | Original code : 24-Oct-2018 | +!/ | Last update : 05-Oct-2019 | +!/ +-----------------------------------+ +!/ +!/ 24-Oct-2018 : Original Code ( version 6.07 ) +!/ +!/ Copyright 2010 National Weather Service (NWS), +!/ National Oceanic and Atmospheric Administration. All rights +!/ reserved. WAVEWATCH III is a trademark of the NWS. +!/ No unauthorized use without permission. +!/ +! 1. Purpose : +! Updates the wind-sea part of the wave spectrum only +! 2. Method : +! +! 3. Parameters : +! +! Local parameters. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! ---------------------------------------------------------------- +! Internal Subroutines: +! +! 5. Called by : +! +! 6. Error messages : +! +! 7. Remarks : +! +! 8. Structure : +! +! 9. Switches : +! +! !/T +! +! 10. Source code : +! +!/ + REAL, DIMENSION(:), INTENT(INOUT) :: VATMP + INTEGER, DIMENSION(:), INTENT(IN) :: VAMAPWS + REAL, INTENT(IN) :: PRCNTG + CHARACTER(25),PARAMETER :: myname='UPDTWSPEC' +! +!/T WRITE (NDSO,*) trim(myname), ' starts' + DO IK=1, NK + DO ITH=1, NTH + IF ( VAMAPWS(ITH+(IK-1)*NTH) .EQ. 1 ) THEN + VATMP(ITH+(IK-1)*NTH) = VATMP(ITH+(IK-1)*NTH) * PRCNTG**2 + END IF + END DO + END DO +! +!/T WRITE (NDSO,*) trim(myname), ' ends' + END SUBROUTINE UPDTWSPEC +!/ +!/ ------------------------------------------------------------------- / +!/ + SUBROUTINE UPDTWSPECF(VATMP, PRCNTG, VAMAPWS, ISEA1p, ADJALL) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | Andy Saulter | +!/ | FORTRAN 90 | +!/ | Original code : 24-Oct-2018 | +!/ | Last update : 05-Oct-2019 | +!/ +-----------------------------------+ +!/ +!/ 24-Oct-2018 : Original Code ( version 6.07 ) +!/ +!/ Copyright 2010 National Weather Service (NWS), +!/ National Oceanic and Atmospheric Administration. All rights +!/ reserved. WAVEWATCH III is a trademark of the NWS. +!/ No unauthorized use without permission. +!/ +! 1. Purpose : +! Updates the wind-sea part of the wave spectrum and shifts in frequency +! space +! 2. Method : +! +! 3. Parameters : +! +! Local parameters. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! ---------------------------------------------------------------- +! Internal Subroutines: +! +! 5. Called by : +! +! 6. Error messages : +! +! 7. Remarks : +! +! 8. Structure : +! +! 9. Switches : +! +! !/T +! +! 10. Source code : +! +!/ + REAL, DIMENSION(:), INTENT(INOUT) :: VATMP + INTEGER, DIMENSION(:), INTENT(IN) :: VAMAPWS + REAL, INTENT(IN) :: PRCNTG + INTEGER, INTENT(IN) :: ISEA1p + LOGICAL, INTENT(IN) :: ADJALL + CHARACTER(25),PARAMETER :: myname='UPDTWSPECF' + REAL :: FFAC, SIGSHFT, FDM1, FDM2, WN1, CG1, WN2, CG2 + INTEGER :: LPF, M1, M2 + REAL, ALLOCATABLE :: VASHFT(:) +! +!/T WRITE (NDSO,*) trim(myname), ' starts' + DEPTH = MAX( DMIN , -ZB(ISEA1p)) + ALLOCATE(VASHFT(SIZE(VATMP))) + VASHFT(:) = 0.0 +! + ! 1st iteration shifts wind-sea energy in freq space + FFAC = (1. / PRCNTG**2)**(1.0/3.0) ! uses Toba's relationship + DO IK=1, NK + CALL WAVNU1(SIG(IK), DEPTH, WN, CG) + SIGSHFT = FFAC * SIG(IK) + DO ITH=1, NTH + IF ( VAMAPWS(ITH+(IK-1)*NTH) .EQ. 1 ) THEN + ! Interpolate frequency bin according to f-shift + LPF = 1 + DO WHILE (LPF < NK) + IF (SIG(LPF) >= SIGSHFT) THEN + IF (LPF .EQ. 1) THEN + CALL WAVNU1(SIG(LPF), DEPTH, WN1, CG1) + VASHFT(ITH+(LPF-1)*NTH) = VASHFT(ITH+(LPF-1)*NTH) + & + VATMP(ITH+(IK-1)*NTH) * & + (DSIP(IK)*SIG(IK)/CG) / & + (DSIP(LPF)*SIG(LPF)/CG1) + ELSE + M2 = LPF + M1 = LPF - 1 + FDM1 = SIGSHFT - SIG(M1) + FDM2 = SIG(M2) - SIG(M1) + CALL WAVNU1(SIG(M1), DEPTH, WN1, CG1) + CALL WAVNU1(SIG(M2), DEPTH, WN2, CG2) + VASHFT(ITH+(M1-1)*NTH) = VASHFT(ITH+(M1-1)*NTH) + & + (FDM1 / FDM2) * & + VATMP(ITH+(IK-1)*NTH) * & + (DSIP(IK)*SIG(IK)/CG) / & + (DSIP(M1)*SIG(M1)/CG1) + VASHFT(ITH+(M2-1)*NTH) = VASHFT(ITH+(M2-1)*NTH) + & + (1.0 - FDM1 / FDM2) * & + VATMP(ITH+(IK-1)*NTH) * & + (DSIP(IK)*SIG(IK)/CG) / & + (DSIP(M2)*SIG(M2)/CG2) + END IF + LPF = NK + 1 + ENDIF + LPF = LPF + 1 + END DO + IF (LPF .EQ. NK) THEN + CALL WAVNU1(SIG(LPF), DEPTH, WN1, CG1) + VASHFT(ITH+(LPF-1)*NTH) = VASHFT(ITH+(LPF-1)*NTH) + & + VATMP(ITH+(IK-1)*NTH) * & + (DSIP(IK)*SIG(IK)/CG) / & + (DSIP(LPF)*SIG(LPF)/CG1) + END IF + END IF + END DO + END DO + ! 2nd iteration scales wind-sea energy + DO IK=1, NK + DO ITH=1, NTH + IF ( VAMAPWS(ITH+(IK-1)*NTH) .EQ. 1 ) THEN + VASHFT(ITH+(IK-1)*NTH) = VASHFT(ITH+(IK-1)*NTH) * PRCNTG**2 + END IF + END DO + END DO + ! 3rd iteration combines wind-sea and swell energy + DO IK=1, NK + DO ITH=1, NTH + IF ( VAMAPWS(ITH+(IK-1)*NTH) .EQ. 1 ) THEN + VATMP(ITH+(IK-1)*NTH) = VASHFT(ITH+(IK-1)*NTH) + ELSE + IF ( ADJALL ) THEN + ! Swell components are also re-scaled + VATMP(ITH+(IK-1)*NTH) = VATMP(ITH+(IK-1)*NTH) * & + PRCNTG**2 + & + VASHFT(ITH+(IK-1)*NTH) + ELSE + ! Re-scaling wind-sea only + VATMP(ITH+(IK-1)*NTH) = VATMP(ITH+(IK-1)*NTH) + & + VASHFT(ITH+(IK-1)*NTH) + END IF + END IF + END DO + END DO +! + DEALLOCATE(VASHFT) +! +!/T WRITE (NDSO,*) trim(myname), ' ends' + END SUBROUTINE UPDTWSPECF +!/ +!/ ------------------------------------------------------------------- / !/ SUBROUTINE WRITEMATRIX(FILENAME, RDA_A) +!/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | Stelios Flampouris | @@ -1007,6 +1866,7 @@ WRITE(UNIT=IP_FID, FMT=*)'' END DO CLOSE(IP_FID) +! END SUBROUTINE WRITEMATRIX !/ !/ ------------------------------------------------------------------- / diff --git a/model/inp/ww3_uprstr.inp b/model/inp/ww3_uprstr.inp index 8b6c946c1..ad9012e5c 100644 --- a/model/inp/ww3_uprstr.inp +++ b/model/inp/ww3_uprstr.inp @@ -36,15 +36,28 @@ $ individual spectra; the map is used to determine the $ $ weighting surfaces. $ $ Expected input: the Analysis field, grbtxt format and the $ $ functions(frq,theta) of the update to be applied. $ +$ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ +$ applied to wind-sea parts of the spectrum only when $ +$ wind-sea is the dominant component, otherwise the whole $ +$ spectrum is corrected $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction $ +$ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ +$ wind-sea components are also shifted in frequency space $ +$ using Toba (1973) $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction $ UPD3 -$ $ -$ PRCNTG is input for option 1 and it is the percentage of correction $ -$ applied to all the gridpoints (e.g. 1.) $ -$ $ +$ +$ PRCNTG is input for option UPD0F and is the correction factor $ +$ applied to all the gridpoints (e.g. 1.) $ +$ 0.6754 -$ $ -$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap $ -$ on the maximum correction applied to all the gridpoints (e.g. 0.5) $ +$ +$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the gridpoints, as $ +$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ +$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ $ $ 10. $ $ diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 24de249a9..e2ea92428 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -1987,6 +1987,12 @@ echo "$rtst -s ST4 -w work_UPD3_O -i input_UPD3_O $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD3_U -i input_UPD3_U $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD3_U_cap -i input_UPD3_U_cap $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -w work_UPD5_O -i input_UPD5_O $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -w work_UPD5_U -i input_UPD5_U $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -w work_UPD5_U_cap -i input_UPD5_U_cap $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -w work_UPD6_O -i input_UPD6_O $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -w work_UPD6_U -i input_UPD6_U $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -w work_UPD6_U_cap -i input_UPD6_U_cap $ww3 ww3_ta1" >> matrix.body fi # --------------------------------------------------------------------------- # diff --git a/regtests/bin/matrix.comp b/regtests/bin/matrix.comp index 3f29c90db..ae780fef6 100755 --- a/regtests/bin/matrix.comp +++ b/regtests/bin/matrix.comp @@ -71,7 +71,7 @@ if [ "$ctest" = 'all' ] ; then - ctest=`ls -d ww3_tp1.? ww3_tp2.? ww3_ts? ww3_tbt1.? ww3_tbt2.? ww3_tic1.? ww3_tic2.? ww3_tig1.? ww3_tp2.1? mww3_test_0?` ; fi + ctest=`ls -d ww3_tp1.? ww3_tp2.? ww3_ts? ww3_tbt1.? ww3_tbt2.? ww3_tic1.? ww3_tic2.? ww3_tig1.? ww3_tp2.1? ww3_ta? mww3_test_0?` ; fi echo "base directory : $base_dir" >> $home_dir/header.tmp echo "comp directory : $comp_dir" >> $home_dir/header.tmp echo "test(s) : " >> $home_dir/header.tmp diff --git a/regtests/ww3_ta1/input_UPD5_O/HOMOGENEOUS.depth b/regtests/ww3_ta1/input_UPD5_O/HOMOGENEOUS.depth new file mode 100644 index 000000000..863a9b9d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/HOMOGENEOUS.depth @@ -0,0 +1,3 @@ +1 1 1 +1 1 1 +1 1 1 diff --git a/regtests/ww3_ta1/input_UPD5_O/anl.grbtxt b/regtests/ww3_ta1/input_UPD5_O/anl.grbtxt new file mode 100644 index 000000000..d8d518d78 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/anl.grbtxt @@ -0,0 +1,10 @@ +3 3 +0.000318825 +0.000318825 +0.000318825 +0.000318825 +1.123456789 +0.000318825 +0.000318825 +0.000318825 +0.000318825 diff --git a/regtests/ww3_ta1/input_UPD5_O/gx_outp.inp b/regtests/ww3_ta1/input_UPD5_O/gx_outp.inp new file mode 100644 index 000000000..324609e35 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/gx_outp.inp @@ -0,0 +1,8 @@ +$ WAVEWATCH III Point output post-processing (GrADS) +$ -------------------------------------------------- + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + T T T T T T diff --git a/regtests/ww3_ta1/input_UPD5_O/namelists_HOMOGENEOUS.nml b/regtests/ww3_ta1/input_UPD5_O/namelists_HOMOGENEOUS.nml new file mode 100644 index 000000000..9e72cbf6c --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/namelists_HOMOGENEOUS.nml @@ -0,0 +1,2 @@ +&MISC XP = 0.075 / +END OF NAMELISTS diff --git a/regtests/ww3_ta1/input_UPD5_O/points.list b/regtests/ww3_ta1/input_UPD5_O/points.list new file mode 100644 index 000000000..5ad8fde50 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/points.list @@ -0,0 +1 @@ +0.0 0.0 'The_point' diff --git a/regtests/ww3_ta1/input_UPD5_O/switch b/regtests/ww3_ta1/input_UPD5_O/switch new file mode 100644 index 000000000..5df405254 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/switch @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD5_O/switch_ST4 b/regtests/ww3_ta1/input_UPD5_O/switch_ST4 new file mode 100644 index 000000000..559900eba --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/switch_ST4 @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX0 LN1 ST4 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD5_O/switch_T b/regtests/ww3_ta1/input_UPD5_O/switch_T new file mode 100644 index 000000000..80c957834 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/switch_T @@ -0,0 +1 @@ +F90 T NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_grid.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_grid.inp new file mode 100644 index 000000000..b751549d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_grid.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'HOMOGENEOUS SOURCE TERM TEST ' +$ + 1.10 0.0485 36 24 0. +$ 1.07 0.042 40 36 0. +$ + F F F F F T +$ 900. 900. 900. 5. + 900. 900. 900. 15. +$ 900. 900. 900. 60. +$ +$ &MISC XP = 0.025 / +$ &FLX3 CDMAX = 2.5E-3, CTYPE = 1 / +$ &SLN1 RFPM = 1.0 RFHF = 0.33 / + &MISC XP = 0.075 / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 1. 1. 1.E-2 + -1. -1. 1.E-2 +$ + -5. 5.75 10 -2500. 3 1 '(....)' 'UNIT' 'input' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 1 1 '(....)' 'PART' 'input' +$ + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_grid.nml b/regtests/ww3_ta1/input_UPD5_O/ww3_grid.nml new file mode 100644 index 000000000..5868ef325 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_grid.nml @@ -0,0 +1,225 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0485 + SPECTRUM%NK = 36 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 900. + TIMESTEPS%DTXY = 900. + TIMESTEPS%DTKTH = 900. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'HOMOGENEOUS SOURCE TERM TEST' + GRID%NML = '../input_UPD3_O/namelists_HOMOGENEOUS.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input_UPD3_O/HOMOGENEOUS.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_ounf.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_ounf.inp new file mode 100644 index 000000000..6af079872 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_ounf.inp @@ -0,0 +1,41 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ Time, time increment and number of outputs +$ + 19680101 120000 10 8000 +$ +$ +$ Output request flags identifying fields as in ww3_shel.inp. See that +$ file for a full documentation of field output options. Namelist type +$ selection is used here (for alternative F/T flags, see ww3_shel.inp). +$ + N + DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ +$--------------------------------------------------------------------- $ +$ NetCDF version [3,4] and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ Output type 0 1 2 [0,1,2,3,4,5] (swell partition) +$ variables T [T] or not [F] in the same file +$ + 3 4 + 0 1 2 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date +$ IX, IY range +$ + ww3. + 6 + 2 2 2 2 +$ +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time idicator with S3 +$ characters, +$ and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD5_O/ww3_ounf.nml new file mode 100644 index 000000000..1d58e1dcb --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_ounf.nml @@ -0,0 +1,62 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '19680101 120000' + FIELD%TIMESTRIDE = '10' + FIELD%TIMECOUNT = '8000' + FIELD%LIST = 'DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS' + FIELD%PARTITION = '0 1 2' + FIELD%TYPE = 4 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%IX0 = 2 + FILE%IXN = 2 + FILE%IY0 = 2 + FILE%IYN = 2 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp new file mode 100644 index 000000000..5f2ba7528 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp @@ -0,0 +1,117 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III NETCDF Point output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 19680101 000000 3600. 1000 +$ +$ Points requested --------------------------------------------------- $ +$ +$ Define points index for which output is to be generated. +$ If no one defined, all points are selected +$ One index number per line, negative number identifies end of list. +$ 1 +$ 2 +$ mandatory end of list + -1 +$ +$--------------------------------------------------------------------- $ +$ file prefix +$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ netCDF version [3,4] +$ points in same file [T] or not [F] +$ and max number of points to be processed in one pass +$ output type ITYPE [0,1,2,3] +$ flag for global attributes WW3 [0] or variable version [1-2-3-4] +$ flag for dimensions order time,station [T] or station,time [F] +$ + ww3. + 4 + 3 + T 100 + 1 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, netCDF Spectra. +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D spectra +$ 3 : Transfer file. +$ 4 : Spectral partitioning. +$ - Scaling factors for 1-D and 2-D spectra Negative factor +$ disables, output, factor = 0. gives normalized spectrum. +$ + 3 1 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points. +$ grid name in quotes (for unformatted file C*21,3I,C*30). +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) | points | times +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, netCDF Tables of (mean) parameter +$ - Sub-type OTYPE : 1 : Depth, current, wind +$ 2 : Mean wave pars. +$ 3 : Nondimensional pars. (U*) +$ 4 : Nondimensional pars. (U10) +$ 5 : 'Validation table' +$ 6 : WMO standard output +$ 4 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, netCDF Source terms +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D S(f). +$ 3 : Table of 1-D inverse time scales +$ (1/T = S/F). +$ 4 : Transfer file +$ - Scaling factors for 1-D and 2-D source terms. Negative +$ factor disables print plots, factor = 0. gives normalized +$ print plots. +$ - Flags for spectrum, input, interactions, dissipation, +$ bottom and total source term. +$ - scale ISCALE for OTYPE=2,3 +$ 0 : Dimensional. +$ 1 : Nondimensional in terms of U10 +$ 2 : Nondimensional in terms of U* +$ 3-5: like 0-2 with f normalized with fp. +$ +$ 4 0 0 T T T T T T 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, nubmer of frequencies, directions and points, +$ flags for spectrum and source terms (C*21, 3I, 6L) +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), depth, wind speed and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) if requested | points | times +$ - Sin(f,theta) if requested | | +$ - Snl(f,theta) if requested | | +$ - Sds(f,theta) if requested | | +$ - Sbt(f,theta) if requested | | +$ - Stot(f,theta) if requested | | +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.nml b/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.nml new file mode 100644 index 000000000..edac93ddc --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.nml @@ -0,0 +1,188 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounp.nml - Point output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via POINT_NML namelist +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! POINT%TIMESTART = '19000101 000000' ! Stop date for the output field +! POINT%TIMESTRIDE = '0' ! Time stride for the output field +! POINT%TIMECOUNT = '1000000000' ! Number of time steps +! POINT%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! POINT%LIST = 'all' ! List of points index ['all'|'1 2 3'] +! POINT%SAMEFILE = T ! All the points in the same file +! POINT%BUFFER = 150 ! Number of points to process per pass +! POINT%TYPE = 1 ! [0=inventory | 1=spectra | 2=mean param | 3=source terms] +! POINT%DIMORDER = T ! [time,station=T | station,time=F] +! -------------------------------------------------------------------- ! +&POINT_NML + POINT%TIMESTART = '19680101 000000' + POINT%TIMESTRIDE = '3600.' + POINT%TIMECOUNT = '1000' + POINT%TIMESPLIT = 4 + POINT%BUFFER = 100 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 0, inventory of file +! +! * namelist must be terminated with / +! * definitions & defaults: +! No additional input, the above time range is ignored. +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the type 1, spectra via SPECTRA_NML namelist +! +! Table of 1-D spectra content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - ffp, f, th1m, sth1m, alpha : 1D spectral parameters +! - dpt, ust, wnd, wnddir : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(time,station,frequency,direction) : 2D spectral density +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! Spectral partitioning content : +! - time, station id, station name, longitude, latitude +! - npart : number of partitions +! - hs, tp, lm, th1m, sth1m, ws, tm10, t01, t02 : partitioned parameters +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRA%OUTPUT = 3 ! 1: Print plots +! ! 2: Table of 1-D spectra +! ! 3: Transfer file +! ! 4: Spectral partitioning +! SPECTRA%SCALE_FAC = 1 ! Scale factor (-1=disabled) +! SPECTRA%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! -------------------------------------------------------------------- ! +&SPECTRA_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 2, mean parameter via PARAM_NML namelist +! +! Forcing parameters content : +! - dpt, wnd, wnddir, cur, curdir +! +! Mean wave parameters content : +! - hs, lm, tr, th1p, sth1p, fp, th1m, sth1m +! +! Nondimensional parameters (U*) content : +! - ust, efst, fpst, cd, alpha +! +! Nondimensional parameters (U10) content : +! - wnd, efst, fpst, cd, alpha +! +! Validation table content : +! - wnd, wnddir, hs, hsst, cpu, cmu, ast +! +! WMO stantdard output content : +! - wnd, wnddir, hs, tp +! +! * namelist must be terminated with / +! * definitions & defaults: +! PARAM%OUTPUT = 4 ! 1: Forcing parameters +! ! 2: Mean wave parameters +! ! 3: Nondimensional pars. (U*) +! ! 4: Nondimensional pars. (U10) +! ! 5: Validation table +! ! 6: WMO standard output +! -------------------------------------------------------------------- ! +&PARAM_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 3, source terms via SOURCE_NML namelist +! +! Table of 1-D S(f) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - Sin(frequency) : input source term +! - Snl(frequency) : non linear interactions source term +! - Sds(frequency) : dissipation source term +! - Sbt(frequency) : bottom source term +! - Sice(frequency) : ice source term +! - Stot(frequency) : total source term +! - dpt, ust, wnd : mean parameters +! +! Table of 1-D inverse time scales (1/T = S/F) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - tini(frequency) : input inverse time scales source term +! - tnli(frequency) : non linear interactions inverse time scales source term +! - tdsi(frequency) : dissipation inverse time scales source term +! - tbti(frequency) : bottom inverse time scales source term +! - ticei(frequency) : ice inverse time scales source term +! - ttoti(frequency) : total inverse time scales source term +! - dpt, ust, wnd : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(frequency,direction) : 2D spectral density +! - Sin(frequency,direction) : input source term +! - Snl(frequency,direction) : non linear interactions source term +! - Sds(frequency,direction) : dissipation source term +! - Sbt(frequency,direction) : bottom source term +! - Sice(frequency,direction) : ice source term +! - Stot(frequency,direction) : total source term +! - dpt, wnd, wnddir, cur, curdir, ust : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SOURCE%OUTPUT = 4 ! 1: Print plots +! ! 2: Table of 1-D S(f) +! ! 3: Table of 1-D inverse time scales (1/T = S/F) +! ! 4: Transfer file +! SOURCE%SCALE_FAC = 0 ! Scale factor (-1=disabled) +! SOURCE%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! SOURCE%TABLE_FAC = 0 ! Table factor +! 0 : Dimensional. +! 1 : Nondimensional in terms of U10 +! 2 : Nondimensional in terms of U* +! 3-5: like 0-2 with f normalized with fp. +! SOURCE%SPECTRUM = T ! [T|F] +! SOURCE%INPUT = T ! [T|F] +! SOURCE%INTERACTIONS = T ! [T|F] +! SOURCE%DISSIPATION = T ! [T|F] +! SOURCE%BOTTOM = T ! [T|F] +! SOURCE%ICE = T ! [T|F] +! SOURCE%TOTAL = T ! [T|F] +! -------------------------------------------------------------------- ! +&SOURCE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_outp_spec.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_outp_spec.inp new file mode 100644 index 000000000..44f41c060 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_outp_spec.inp @@ -0,0 +1,10 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + 1 +$ + 1 0. 0. 33 T diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_outp_tab50.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_outp_tab50.inp new file mode 100644 index 000000000..fa823a9ea --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_outp_tab50.inp @@ -0,0 +1,11 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ +$ 19680606 000000 3600. 999 + 19680606 000000 60. 99999 +$ + 1 + -1 +$ + 2 +$ + 2 49 diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp new file mode 100644 index 000000000..cb19025f8 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III shell input file +$ ------------------------------ + F T + F T + T T + F + F + F + F +$ + 19680606 000000 + 19680607 120000 +$ + 1 +$ + 19680606 000000 3600 19680618 000000 +$ +N +$ +DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ + 19680606 000000 60 19680618 000000 + 0.0 0.0 'The_point' + 0.0 0.0 'STOPSTRING' + 19681207 000000 0 19681208 000000 + 19680607 120000 172600 19680608 000000 + 19681206 000000 0 19681208 000000 + 19681206 000000 0 19681208 000000 +$ + 'WND' 19680606 000000 12. 270. 0. + 'WND' 19680606 060000 12. 180. 0. + 'WND' 19680606 120000 12. 135. 0. + 'WND' 19680606 180000 12. 90. 0. + 'WND' 19680607 000000 12. 45. 0. + 'CUR' 19680606 000000 2. 90. 0. + 'STP' diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml b/regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml new file mode 100644 index 000000000..a5122e6f1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml @@ -0,0 +1,370 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%STOP = '19680607 120000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'H' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' + TYPE%POINT%FILE = '../input_UPD3_O/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '19680606 000000' '3600' '19680618 000000' + DATE%POINT = '19680606 000000' '60' '19680618 000000' + DATE%RESTART = '19680607 120000' '172600' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML + HOMOG_COUNT%N_CUR = 1 + HOMOG_COUNT%N_WND = 5 +/ + +&HOMOG_INPUT_NML + HOMOG_INPUT(1)%NAME = 'CUR' + HOMOG_INPUT(1)%VALUE1 = 2. + HOMOG_INPUT(1)%VALUE2 = 90. + + HOMOG_INPUT(2)%NAME = 'WND' + HOMOG_INPUT(2)%VALUE1 = 12. + HOMOG_INPUT(2)%VALUE2 = 270. + HOMOG_INPUT(2)%VALUE3 = 0. + + HOMOG_INPUT(3)%NAME = 'WND' + HOMOG_INPUT(3)%DATE = '19680606 060000' + HOMOG_INPUT(3)%VALUE1 = 12. + HOMOG_INPUT(3)%VALUE2 = 180. + HOMOG_INPUT(3)%VALUE3 = 0. + + HOMOG_INPUT(4)%NAME = 'WND' + HOMOG_INPUT(4)%DATE = '19680606 120000' + HOMOG_INPUT(4)%VALUE1 = 12. + HOMOG_INPUT(4)%VALUE2 = 135. + HOMOG_INPUT(4)%VALUE3 = 0. + + HOMOG_INPUT(5)%NAME = 'WND' + HOMOG_INPUT(5)%DATE = '19680606 180000' + HOMOG_INPUT(5)%VALUE1 = 12. + HOMOG_INPUT(5)%VALUE2 = 90. + HOMOG_INPUT(5)%VALUE3 = 0. + + HOMOG_INPUT(6)%NAME = 'WND' + HOMOG_INPUT(6)%DATE = '19680607 000000' + HOMOG_INPUT(6)%VALUE1 = 12. + HOMOG_INPUT(6)%VALUE2 = 45. + HOMOG_INPUT(6)%VALUE3 = 0. +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_strt.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_strt.inp new file mode 100644 index 000000000..d18f7cebd --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_strt.inp @@ -0,0 +1,7 @@ +$ WAVEWATCH III Initial conditions input file +$ ------------------------------------------- +$ 2 +$ 0.0 0.30 270. 3.3 0. 0. 0. 1. 0. 1. +$ 3 + 5 +$ diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp new file mode 100644 index 000000000..cef44a1a0 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp @@ -0,0 +1,72 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Update Restart input file $ +$ -------------------------------------------------------------------- $ +$ +$ Time of Assimilation ----------------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ +$ This is the assimilation starting time and has to be the same with +$ the time at the restart.ww3. +$ + 19680607 120000 +$ +$ Choose algorithm to update restart file $ +$ UPDN for the Nth approach $ +$ The UPDN*, with N<2 the same correction factor is applied at all $ +$ the grid points $ +$ UPD0C:: ELIMINATED $ +$ UPDOF:: Option 0F All the spectra are updated with a constant $ +$ fac=HsAnl/HsBckg. $ +$ Expected input: PRCNTG, as defined at fac $ +$ UPD1 :: ELIMINATED $ +$ UPDN, with N>1 each gridpoint has its own update factor. $ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ +$ applied to wind-sea parts of the spectrum only when $ +$ wind-sea is the dominant component, otherwise the whole $ +$ spectrum is corrected $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ +$ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ +$ wind-sea components are also shifted in frequency space $ +$ using Toba (1973) $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ + UPD5 +$ +$ PRCNTG is input for option UPD0F and is the correction factor $ +$ applied to all the gridpoints (e.g. 1.) $ +$ + 0.6754 +$ +$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the gridpoints, as $ +$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ +$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ +$ + 10.0 +$ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ + anl.grbtxt +$ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III EoF ww3_uprstr.inp +$ -------------------------------------------------------------------- $ + diff --git a/regtests/ww3_ta1/input_UPD5_U/HOMOGENEOUS.depth b/regtests/ww3_ta1/input_UPD5_U/HOMOGENEOUS.depth new file mode 100644 index 000000000..863a9b9d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/HOMOGENEOUS.depth @@ -0,0 +1,3 @@ +1 1 1 +1 1 1 +1 1 1 diff --git a/regtests/ww3_ta1/input_UPD5_U/anl.grbtxt b/regtests/ww3_ta1/input_UPD5_U/anl.grbtxt new file mode 100644 index 000000000..e8953d2cf --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/anl.grbtxt @@ -0,0 +1,10 @@ +3 3 +0.000318825 +0.000318825 +0.000318825 +0.000318825 +5.123456789 +0.000318825 +0.000318825 +0.000318825 +0.000318825 diff --git a/regtests/ww3_ta1/input_UPD5_U/gx_outp.inp b/regtests/ww3_ta1/input_UPD5_U/gx_outp.inp new file mode 100644 index 000000000..324609e35 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/gx_outp.inp @@ -0,0 +1,8 @@ +$ WAVEWATCH III Point output post-processing (GrADS) +$ -------------------------------------------------- + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + T T T T T T diff --git a/regtests/ww3_ta1/input_UPD5_U/namelists_HOMOGENEOUS.nml b/regtests/ww3_ta1/input_UPD5_U/namelists_HOMOGENEOUS.nml new file mode 100644 index 000000000..9e72cbf6c --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/namelists_HOMOGENEOUS.nml @@ -0,0 +1,2 @@ +&MISC XP = 0.075 / +END OF NAMELISTS diff --git a/regtests/ww3_ta1/input_UPD5_U/points.list b/regtests/ww3_ta1/input_UPD5_U/points.list new file mode 100644 index 000000000..5ad8fde50 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/points.list @@ -0,0 +1 @@ +0.0 0.0 'The_point' diff --git a/regtests/ww3_ta1/input_UPD5_U/switch b/regtests/ww3_ta1/input_UPD5_U/switch new file mode 100644 index 000000000..5df405254 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/switch @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD5_U/switch_ST4 b/regtests/ww3_ta1/input_UPD5_U/switch_ST4 new file mode 100644 index 000000000..559900eba --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/switch_ST4 @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX0 LN1 ST4 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD5_U/switch_T b/regtests/ww3_ta1/input_UPD5_U/switch_T new file mode 100644 index 000000000..80c957834 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/switch_T @@ -0,0 +1 @@ +F90 T NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_grid.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_grid.inp new file mode 100644 index 000000000..b751549d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_grid.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'HOMOGENEOUS SOURCE TERM TEST ' +$ + 1.10 0.0485 36 24 0. +$ 1.07 0.042 40 36 0. +$ + F F F F F T +$ 900. 900. 900. 5. + 900. 900. 900. 15. +$ 900. 900. 900. 60. +$ +$ &MISC XP = 0.025 / +$ &FLX3 CDMAX = 2.5E-3, CTYPE = 1 / +$ &SLN1 RFPM = 1.0 RFHF = 0.33 / + &MISC XP = 0.075 / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 1. 1. 1.E-2 + -1. -1. 1.E-2 +$ + -5. 5.75 10 -2500. 3 1 '(....)' 'UNIT' 'input' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 1 1 '(....)' 'PART' 'input' +$ + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_grid.nml b/regtests/ww3_ta1/input_UPD5_U/ww3_grid.nml new file mode 100644 index 000000000..1f3ea96cb --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_grid.nml @@ -0,0 +1,225 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0485 + SPECTRUM%NK = 36 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 900. + TIMESTEPS%DTXY = 900. + TIMESTEPS%DTKTH = 900. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'HOMOGENEOUS SOURCE TERM TEST' + GRID%NML = '../input_UPD3_U/namelists_HOMOGENEOUS.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input_UPD3_U/HOMOGENEOUS.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_ounf.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_ounf.inp new file mode 100644 index 000000000..6af079872 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_ounf.inp @@ -0,0 +1,41 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ Time, time increment and number of outputs +$ + 19680101 120000 10 8000 +$ +$ +$ Output request flags identifying fields as in ww3_shel.inp. See that +$ file for a full documentation of field output options. Namelist type +$ selection is used here (for alternative F/T flags, see ww3_shel.inp). +$ + N + DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ +$--------------------------------------------------------------------- $ +$ NetCDF version [3,4] and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ Output type 0 1 2 [0,1,2,3,4,5] (swell partition) +$ variables T [T] or not [F] in the same file +$ + 3 4 + 0 1 2 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date +$ IX, IY range +$ + ww3. + 6 + 2 2 2 2 +$ +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time idicator with S3 +$ characters, +$ and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD5_U/ww3_ounf.nml new file mode 100644 index 000000000..1d58e1dcb --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_ounf.nml @@ -0,0 +1,62 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '19680101 120000' + FIELD%TIMESTRIDE = '10' + FIELD%TIMECOUNT = '8000' + FIELD%LIST = 'DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS' + FIELD%PARTITION = '0 1 2' + FIELD%TYPE = 4 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%IX0 = 2 + FILE%IXN = 2 + FILE%IY0 = 2 + FILE%IYN = 2 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp new file mode 100644 index 000000000..5f2ba7528 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp @@ -0,0 +1,117 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III NETCDF Point output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 19680101 000000 3600. 1000 +$ +$ Points requested --------------------------------------------------- $ +$ +$ Define points index for which output is to be generated. +$ If no one defined, all points are selected +$ One index number per line, negative number identifies end of list. +$ 1 +$ 2 +$ mandatory end of list + -1 +$ +$--------------------------------------------------------------------- $ +$ file prefix +$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ netCDF version [3,4] +$ points in same file [T] or not [F] +$ and max number of points to be processed in one pass +$ output type ITYPE [0,1,2,3] +$ flag for global attributes WW3 [0] or variable version [1-2-3-4] +$ flag for dimensions order time,station [T] or station,time [F] +$ + ww3. + 4 + 3 + T 100 + 1 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, netCDF Spectra. +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D spectra +$ 3 : Transfer file. +$ 4 : Spectral partitioning. +$ - Scaling factors for 1-D and 2-D spectra Negative factor +$ disables, output, factor = 0. gives normalized spectrum. +$ + 3 1 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points. +$ grid name in quotes (for unformatted file C*21,3I,C*30). +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) | points | times +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, netCDF Tables of (mean) parameter +$ - Sub-type OTYPE : 1 : Depth, current, wind +$ 2 : Mean wave pars. +$ 3 : Nondimensional pars. (U*) +$ 4 : Nondimensional pars. (U10) +$ 5 : 'Validation table' +$ 6 : WMO standard output +$ 4 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, netCDF Source terms +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D S(f). +$ 3 : Table of 1-D inverse time scales +$ (1/T = S/F). +$ 4 : Transfer file +$ - Scaling factors for 1-D and 2-D source terms. Negative +$ factor disables print plots, factor = 0. gives normalized +$ print plots. +$ - Flags for spectrum, input, interactions, dissipation, +$ bottom and total source term. +$ - scale ISCALE for OTYPE=2,3 +$ 0 : Dimensional. +$ 1 : Nondimensional in terms of U10 +$ 2 : Nondimensional in terms of U* +$ 3-5: like 0-2 with f normalized with fp. +$ +$ 4 0 0 T T T T T T 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, nubmer of frequencies, directions and points, +$ flags for spectrum and source terms (C*21, 3I, 6L) +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), depth, wind speed and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) if requested | points | times +$ - Sin(f,theta) if requested | | +$ - Snl(f,theta) if requested | | +$ - Sds(f,theta) if requested | | +$ - Sbt(f,theta) if requested | | +$ - Stot(f,theta) if requested | | +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.nml b/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.nml new file mode 100644 index 000000000..edac93ddc --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.nml @@ -0,0 +1,188 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounp.nml - Point output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via POINT_NML namelist +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! POINT%TIMESTART = '19000101 000000' ! Stop date for the output field +! POINT%TIMESTRIDE = '0' ! Time stride for the output field +! POINT%TIMECOUNT = '1000000000' ! Number of time steps +! POINT%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! POINT%LIST = 'all' ! List of points index ['all'|'1 2 3'] +! POINT%SAMEFILE = T ! All the points in the same file +! POINT%BUFFER = 150 ! Number of points to process per pass +! POINT%TYPE = 1 ! [0=inventory | 1=spectra | 2=mean param | 3=source terms] +! POINT%DIMORDER = T ! [time,station=T | station,time=F] +! -------------------------------------------------------------------- ! +&POINT_NML + POINT%TIMESTART = '19680101 000000' + POINT%TIMESTRIDE = '3600.' + POINT%TIMECOUNT = '1000' + POINT%TIMESPLIT = 4 + POINT%BUFFER = 100 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 0, inventory of file +! +! * namelist must be terminated with / +! * definitions & defaults: +! No additional input, the above time range is ignored. +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the type 1, spectra via SPECTRA_NML namelist +! +! Table of 1-D spectra content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - ffp, f, th1m, sth1m, alpha : 1D spectral parameters +! - dpt, ust, wnd, wnddir : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(time,station,frequency,direction) : 2D spectral density +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! Spectral partitioning content : +! - time, station id, station name, longitude, latitude +! - npart : number of partitions +! - hs, tp, lm, th1m, sth1m, ws, tm10, t01, t02 : partitioned parameters +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRA%OUTPUT = 3 ! 1: Print plots +! ! 2: Table of 1-D spectra +! ! 3: Transfer file +! ! 4: Spectral partitioning +! SPECTRA%SCALE_FAC = 1 ! Scale factor (-1=disabled) +! SPECTRA%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! -------------------------------------------------------------------- ! +&SPECTRA_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 2, mean parameter via PARAM_NML namelist +! +! Forcing parameters content : +! - dpt, wnd, wnddir, cur, curdir +! +! Mean wave parameters content : +! - hs, lm, tr, th1p, sth1p, fp, th1m, sth1m +! +! Nondimensional parameters (U*) content : +! - ust, efst, fpst, cd, alpha +! +! Nondimensional parameters (U10) content : +! - wnd, efst, fpst, cd, alpha +! +! Validation table content : +! - wnd, wnddir, hs, hsst, cpu, cmu, ast +! +! WMO stantdard output content : +! - wnd, wnddir, hs, tp +! +! * namelist must be terminated with / +! * definitions & defaults: +! PARAM%OUTPUT = 4 ! 1: Forcing parameters +! ! 2: Mean wave parameters +! ! 3: Nondimensional pars. (U*) +! ! 4: Nondimensional pars. (U10) +! ! 5: Validation table +! ! 6: WMO standard output +! -------------------------------------------------------------------- ! +&PARAM_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 3, source terms via SOURCE_NML namelist +! +! Table of 1-D S(f) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - Sin(frequency) : input source term +! - Snl(frequency) : non linear interactions source term +! - Sds(frequency) : dissipation source term +! - Sbt(frequency) : bottom source term +! - Sice(frequency) : ice source term +! - Stot(frequency) : total source term +! - dpt, ust, wnd : mean parameters +! +! Table of 1-D inverse time scales (1/T = S/F) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - tini(frequency) : input inverse time scales source term +! - tnli(frequency) : non linear interactions inverse time scales source term +! - tdsi(frequency) : dissipation inverse time scales source term +! - tbti(frequency) : bottom inverse time scales source term +! - ticei(frequency) : ice inverse time scales source term +! - ttoti(frequency) : total inverse time scales source term +! - dpt, ust, wnd : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(frequency,direction) : 2D spectral density +! - Sin(frequency,direction) : input source term +! - Snl(frequency,direction) : non linear interactions source term +! - Sds(frequency,direction) : dissipation source term +! - Sbt(frequency,direction) : bottom source term +! - Sice(frequency,direction) : ice source term +! - Stot(frequency,direction) : total source term +! - dpt, wnd, wnddir, cur, curdir, ust : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SOURCE%OUTPUT = 4 ! 1: Print plots +! ! 2: Table of 1-D S(f) +! ! 3: Table of 1-D inverse time scales (1/T = S/F) +! ! 4: Transfer file +! SOURCE%SCALE_FAC = 0 ! Scale factor (-1=disabled) +! SOURCE%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! SOURCE%TABLE_FAC = 0 ! Table factor +! 0 : Dimensional. +! 1 : Nondimensional in terms of U10 +! 2 : Nondimensional in terms of U* +! 3-5: like 0-2 with f normalized with fp. +! SOURCE%SPECTRUM = T ! [T|F] +! SOURCE%INPUT = T ! [T|F] +! SOURCE%INTERACTIONS = T ! [T|F] +! SOURCE%DISSIPATION = T ! [T|F] +! SOURCE%BOTTOM = T ! [T|F] +! SOURCE%ICE = T ! [T|F] +! SOURCE%TOTAL = T ! [T|F] +! -------------------------------------------------------------------- ! +&SOURCE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_outp_spec.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_outp_spec.inp new file mode 100644 index 000000000..44f41c060 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_outp_spec.inp @@ -0,0 +1,10 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + 1 +$ + 1 0. 0. 33 T diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_outp_tab50.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_outp_tab50.inp new file mode 100644 index 000000000..fa823a9ea --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_outp_tab50.inp @@ -0,0 +1,11 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ +$ 19680606 000000 3600. 999 + 19680606 000000 60. 99999 +$ + 1 + -1 +$ + 2 +$ + 2 49 diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp new file mode 100644 index 000000000..cb19025f8 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III shell input file +$ ------------------------------ + F T + F T + T T + F + F + F + F +$ + 19680606 000000 + 19680607 120000 +$ + 1 +$ + 19680606 000000 3600 19680618 000000 +$ +N +$ +DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ + 19680606 000000 60 19680618 000000 + 0.0 0.0 'The_point' + 0.0 0.0 'STOPSTRING' + 19681207 000000 0 19681208 000000 + 19680607 120000 172600 19680608 000000 + 19681206 000000 0 19681208 000000 + 19681206 000000 0 19681208 000000 +$ + 'WND' 19680606 000000 12. 270. 0. + 'WND' 19680606 060000 12. 180. 0. + 'WND' 19680606 120000 12. 135. 0. + 'WND' 19680606 180000 12. 90. 0. + 'WND' 19680607 000000 12. 45. 0. + 'CUR' 19680606 000000 2. 90. 0. + 'STP' diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml b/regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml new file mode 100644 index 000000000..ffa4034d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml @@ -0,0 +1,370 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%STOP = '19680607 120000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'H' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' + TYPE%POINT%FILE = '../input_UPD3_U/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '19680606 000000' '3600' '19680618 000000' + DATE%POINT = '19680606 000000' '60' '19680618 000000' + DATE%RESTART = '19680607 120000' '172600' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML + HOMOG_COUNT%N_CUR = 1 + HOMOG_COUNT%N_WND = 5 +/ + +&HOMOG_INPUT_NML + HOMOG_INPUT(1)%NAME = 'CUR' + HOMOG_INPUT(1)%VALUE1 = 2. + HOMOG_INPUT(1)%VALUE2 = 90. + + HOMOG_INPUT(2)%NAME = 'WND' + HOMOG_INPUT(2)%VALUE1 = 12. + HOMOG_INPUT(2)%VALUE2 = 270. + HOMOG_INPUT(2)%VALUE3 = 0. + + HOMOG_INPUT(3)%NAME = 'WND' + HOMOG_INPUT(3)%DATE = '19680606 060000' + HOMOG_INPUT(3)%VALUE1 = 12. + HOMOG_INPUT(3)%VALUE2 = 180. + HOMOG_INPUT(3)%VALUE3 = 0. + + HOMOG_INPUT(4)%NAME = 'WND' + HOMOG_INPUT(4)%DATE = '19680606 120000' + HOMOG_INPUT(4)%VALUE1 = 12. + HOMOG_INPUT(4)%VALUE2 = 135. + HOMOG_INPUT(4)%VALUE3 = 0. + + HOMOG_INPUT(5)%NAME = 'WND' + HOMOG_INPUT(5)%DATE = '19680606 180000' + HOMOG_INPUT(5)%VALUE1 = 12. + HOMOG_INPUT(5)%VALUE2 = 90. + HOMOG_INPUT(5)%VALUE3 = 0. + + HOMOG_INPUT(6)%NAME = 'WND' + HOMOG_INPUT(6)%DATE = '19680607 000000' + HOMOG_INPUT(6)%VALUE1 = 12. + HOMOG_INPUT(6)%VALUE2 = 45. + HOMOG_INPUT(6)%VALUE3 = 0. +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_strt.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_strt.inp new file mode 100644 index 000000000..d18f7cebd --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_strt.inp @@ -0,0 +1,7 @@ +$ WAVEWATCH III Initial conditions input file +$ ------------------------------------------- +$ 2 +$ 0.0 0.30 270. 3.3 0. 0. 0. 1. 0. 1. +$ 3 + 5 +$ diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp new file mode 100644 index 000000000..cef44a1a0 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp @@ -0,0 +1,72 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Update Restart input file $ +$ -------------------------------------------------------------------- $ +$ +$ Time of Assimilation ----------------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ +$ This is the assimilation starting time and has to be the same with +$ the time at the restart.ww3. +$ + 19680607 120000 +$ +$ Choose algorithm to update restart file $ +$ UPDN for the Nth approach $ +$ The UPDN*, with N<2 the same correction factor is applied at all $ +$ the grid points $ +$ UPD0C:: ELIMINATED $ +$ UPDOF:: Option 0F All the spectra are updated with a constant $ +$ fac=HsAnl/HsBckg. $ +$ Expected input: PRCNTG, as defined at fac $ +$ UPD1 :: ELIMINATED $ +$ UPDN, with N>1 each gridpoint has its own update factor. $ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ +$ applied to wind-sea parts of the spectrum only when $ +$ wind-sea is the dominant component, otherwise the whole $ +$ spectrum is corrected $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ +$ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ +$ wind-sea components are also shifted in frequency space $ +$ using Toba (1973) $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ + UPD5 +$ +$ PRCNTG is input for option UPD0F and is the correction factor $ +$ applied to all the gridpoints (e.g. 1.) $ +$ + 0.6754 +$ +$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the gridpoints, as $ +$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ +$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ +$ + 10.0 +$ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ + anl.grbtxt +$ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III EoF ww3_uprstr.inp +$ -------------------------------------------------------------------- $ + diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/HOMOGENEOUS.depth b/regtests/ww3_ta1/input_UPD5_U_cap/HOMOGENEOUS.depth new file mode 100644 index 000000000..863a9b9d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/HOMOGENEOUS.depth @@ -0,0 +1,3 @@ +1 1 1 +1 1 1 +1 1 1 diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/anl.grbtxt b/regtests/ww3_ta1/input_UPD5_U_cap/anl.grbtxt new file mode 100644 index 000000000..e8953d2cf --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/anl.grbtxt @@ -0,0 +1,10 @@ +3 3 +0.000318825 +0.000318825 +0.000318825 +0.000318825 +5.123456789 +0.000318825 +0.000318825 +0.000318825 +0.000318825 diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/gx_outp.inp b/regtests/ww3_ta1/input_UPD5_U_cap/gx_outp.inp new file mode 100644 index 000000000..324609e35 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/gx_outp.inp @@ -0,0 +1,8 @@ +$ WAVEWATCH III Point output post-processing (GrADS) +$ -------------------------------------------------- + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + T T T T T T diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/namelists_HOMOGENEOUS.nml b/regtests/ww3_ta1/input_UPD5_U_cap/namelists_HOMOGENEOUS.nml new file mode 100644 index 000000000..9e72cbf6c --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/namelists_HOMOGENEOUS.nml @@ -0,0 +1,2 @@ +&MISC XP = 0.075 / +END OF NAMELISTS diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/points.list b/regtests/ww3_ta1/input_UPD5_U_cap/points.list new file mode 100644 index 000000000..5ad8fde50 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/points.list @@ -0,0 +1 @@ +0.0 0.0 'The_point' diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/switch b/regtests/ww3_ta1/input_UPD5_U_cap/switch new file mode 100644 index 000000000..5df405254 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/switch @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/switch_ST4 b/regtests/ww3_ta1/input_UPD5_U_cap/switch_ST4 new file mode 100644 index 000000000..559900eba --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/switch_ST4 @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX0 LN1 ST4 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/switch_T b/regtests/ww3_ta1/input_UPD5_U_cap/switch_T new file mode 100644 index 000000000..80c957834 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/switch_T @@ -0,0 +1 @@ +F90 T NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_grid.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_grid.inp new file mode 100644 index 000000000..b751549d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_grid.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'HOMOGENEOUS SOURCE TERM TEST ' +$ + 1.10 0.0485 36 24 0. +$ 1.07 0.042 40 36 0. +$ + F F F F F T +$ 900. 900. 900. 5. + 900. 900. 900. 15. +$ 900. 900. 900. 60. +$ +$ &MISC XP = 0.025 / +$ &FLX3 CDMAX = 2.5E-3, CTYPE = 1 / +$ &SLN1 RFPM = 1.0 RFHF = 0.33 / + &MISC XP = 0.075 / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 1. 1. 1.E-2 + -1. -1. 1.E-2 +$ + -5. 5.75 10 -2500. 3 1 '(....)' 'UNIT' 'input' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 1 1 '(....)' 'PART' 'input' +$ + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_grid.nml b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_grid.nml new file mode 100644 index 000000000..9d2843bf3 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_grid.nml @@ -0,0 +1,225 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0485 + SPECTRUM%NK = 36 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 900. + TIMESTEPS%DTXY = 900. + TIMESTEPS%DTKTH = 900. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'HOMOGENEOUS SOURCE TERM TEST' + GRID%NML = '../input_UPD3_U_cap/namelists_HOMOGENEOUS.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input_UPD3_U_cap/HOMOGENEOUS.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounf.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounf.inp new file mode 100644 index 000000000..6af079872 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounf.inp @@ -0,0 +1,41 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ Time, time increment and number of outputs +$ + 19680101 120000 10 8000 +$ +$ +$ Output request flags identifying fields as in ww3_shel.inp. See that +$ file for a full documentation of field output options. Namelist type +$ selection is used here (for alternative F/T flags, see ww3_shel.inp). +$ + N + DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ +$--------------------------------------------------------------------- $ +$ NetCDF version [3,4] and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ Output type 0 1 2 [0,1,2,3,4,5] (swell partition) +$ variables T [T] or not [F] in the same file +$ + 3 4 + 0 1 2 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date +$ IX, IY range +$ + ww3. + 6 + 2 2 2 2 +$ +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time idicator with S3 +$ characters, +$ and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounf.nml new file mode 100644 index 000000000..1d58e1dcb --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounf.nml @@ -0,0 +1,62 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '19680101 120000' + FIELD%TIMESTRIDE = '10' + FIELD%TIMECOUNT = '8000' + FIELD%LIST = 'DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS' + FIELD%PARTITION = '0 1 2' + FIELD%TYPE = 4 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%IX0 = 2 + FILE%IXN = 2 + FILE%IY0 = 2 + FILE%IYN = 2 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.inp new file mode 100644 index 000000000..5f2ba7528 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.inp @@ -0,0 +1,117 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III NETCDF Point output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 19680101 000000 3600. 1000 +$ +$ Points requested --------------------------------------------------- $ +$ +$ Define points index for which output is to be generated. +$ If no one defined, all points are selected +$ One index number per line, negative number identifies end of list. +$ 1 +$ 2 +$ mandatory end of list + -1 +$ +$--------------------------------------------------------------------- $ +$ file prefix +$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ netCDF version [3,4] +$ points in same file [T] or not [F] +$ and max number of points to be processed in one pass +$ output type ITYPE [0,1,2,3] +$ flag for global attributes WW3 [0] or variable version [1-2-3-4] +$ flag for dimensions order time,station [T] or station,time [F] +$ + ww3. + 4 + 3 + T 100 + 1 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, netCDF Spectra. +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D spectra +$ 3 : Transfer file. +$ 4 : Spectral partitioning. +$ - Scaling factors for 1-D and 2-D spectra Negative factor +$ disables, output, factor = 0. gives normalized spectrum. +$ + 3 1 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points. +$ grid name in quotes (for unformatted file C*21,3I,C*30). +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) | points | times +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, netCDF Tables of (mean) parameter +$ - Sub-type OTYPE : 1 : Depth, current, wind +$ 2 : Mean wave pars. +$ 3 : Nondimensional pars. (U*) +$ 4 : Nondimensional pars. (U10) +$ 5 : 'Validation table' +$ 6 : WMO standard output +$ 4 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, netCDF Source terms +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D S(f). +$ 3 : Table of 1-D inverse time scales +$ (1/T = S/F). +$ 4 : Transfer file +$ - Scaling factors for 1-D and 2-D source terms. Negative +$ factor disables print plots, factor = 0. gives normalized +$ print plots. +$ - Flags for spectrum, input, interactions, dissipation, +$ bottom and total source term. +$ - scale ISCALE for OTYPE=2,3 +$ 0 : Dimensional. +$ 1 : Nondimensional in terms of U10 +$ 2 : Nondimensional in terms of U* +$ 3-5: like 0-2 with f normalized with fp. +$ +$ 4 0 0 T T T T T T 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, nubmer of frequencies, directions and points, +$ flags for spectrum and source terms (C*21, 3I, 6L) +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), depth, wind speed and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) if requested | points | times +$ - Sin(f,theta) if requested | | +$ - Snl(f,theta) if requested | | +$ - Sds(f,theta) if requested | | +$ - Sbt(f,theta) if requested | | +$ - Stot(f,theta) if requested | | +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.nml b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.nml new file mode 100644 index 000000000..edac93ddc --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.nml @@ -0,0 +1,188 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounp.nml - Point output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via POINT_NML namelist +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! POINT%TIMESTART = '19000101 000000' ! Stop date for the output field +! POINT%TIMESTRIDE = '0' ! Time stride for the output field +! POINT%TIMECOUNT = '1000000000' ! Number of time steps +! POINT%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! POINT%LIST = 'all' ! List of points index ['all'|'1 2 3'] +! POINT%SAMEFILE = T ! All the points in the same file +! POINT%BUFFER = 150 ! Number of points to process per pass +! POINT%TYPE = 1 ! [0=inventory | 1=spectra | 2=mean param | 3=source terms] +! POINT%DIMORDER = T ! [time,station=T | station,time=F] +! -------------------------------------------------------------------- ! +&POINT_NML + POINT%TIMESTART = '19680101 000000' + POINT%TIMESTRIDE = '3600.' + POINT%TIMECOUNT = '1000' + POINT%TIMESPLIT = 4 + POINT%BUFFER = 100 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 0, inventory of file +! +! * namelist must be terminated with / +! * definitions & defaults: +! No additional input, the above time range is ignored. +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the type 1, spectra via SPECTRA_NML namelist +! +! Table of 1-D spectra content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - ffp, f, th1m, sth1m, alpha : 1D spectral parameters +! - dpt, ust, wnd, wnddir : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(time,station,frequency,direction) : 2D spectral density +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! Spectral partitioning content : +! - time, station id, station name, longitude, latitude +! - npart : number of partitions +! - hs, tp, lm, th1m, sth1m, ws, tm10, t01, t02 : partitioned parameters +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRA%OUTPUT = 3 ! 1: Print plots +! ! 2: Table of 1-D spectra +! ! 3: Transfer file +! ! 4: Spectral partitioning +! SPECTRA%SCALE_FAC = 1 ! Scale factor (-1=disabled) +! SPECTRA%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! -------------------------------------------------------------------- ! +&SPECTRA_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 2, mean parameter via PARAM_NML namelist +! +! Forcing parameters content : +! - dpt, wnd, wnddir, cur, curdir +! +! Mean wave parameters content : +! - hs, lm, tr, th1p, sth1p, fp, th1m, sth1m +! +! Nondimensional parameters (U*) content : +! - ust, efst, fpst, cd, alpha +! +! Nondimensional parameters (U10) content : +! - wnd, efst, fpst, cd, alpha +! +! Validation table content : +! - wnd, wnddir, hs, hsst, cpu, cmu, ast +! +! WMO stantdard output content : +! - wnd, wnddir, hs, tp +! +! * namelist must be terminated with / +! * definitions & defaults: +! PARAM%OUTPUT = 4 ! 1: Forcing parameters +! ! 2: Mean wave parameters +! ! 3: Nondimensional pars. (U*) +! ! 4: Nondimensional pars. (U10) +! ! 5: Validation table +! ! 6: WMO standard output +! -------------------------------------------------------------------- ! +&PARAM_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 3, source terms via SOURCE_NML namelist +! +! Table of 1-D S(f) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - Sin(frequency) : input source term +! - Snl(frequency) : non linear interactions source term +! - Sds(frequency) : dissipation source term +! - Sbt(frequency) : bottom source term +! - Sice(frequency) : ice source term +! - Stot(frequency) : total source term +! - dpt, ust, wnd : mean parameters +! +! Table of 1-D inverse time scales (1/T = S/F) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - tini(frequency) : input inverse time scales source term +! - tnli(frequency) : non linear interactions inverse time scales source term +! - tdsi(frequency) : dissipation inverse time scales source term +! - tbti(frequency) : bottom inverse time scales source term +! - ticei(frequency) : ice inverse time scales source term +! - ttoti(frequency) : total inverse time scales source term +! - dpt, ust, wnd : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(frequency,direction) : 2D spectral density +! - Sin(frequency,direction) : input source term +! - Snl(frequency,direction) : non linear interactions source term +! - Sds(frequency,direction) : dissipation source term +! - Sbt(frequency,direction) : bottom source term +! - Sice(frequency,direction) : ice source term +! - Stot(frequency,direction) : total source term +! - dpt, wnd, wnddir, cur, curdir, ust : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SOURCE%OUTPUT = 4 ! 1: Print plots +! ! 2: Table of 1-D S(f) +! ! 3: Table of 1-D inverse time scales (1/T = S/F) +! ! 4: Transfer file +! SOURCE%SCALE_FAC = 0 ! Scale factor (-1=disabled) +! SOURCE%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! SOURCE%TABLE_FAC = 0 ! Table factor +! 0 : Dimensional. +! 1 : Nondimensional in terms of U10 +! 2 : Nondimensional in terms of U* +! 3-5: like 0-2 with f normalized with fp. +! SOURCE%SPECTRUM = T ! [T|F] +! SOURCE%INPUT = T ! [T|F] +! SOURCE%INTERACTIONS = T ! [T|F] +! SOURCE%DISSIPATION = T ! [T|F] +! SOURCE%BOTTOM = T ! [T|F] +! SOURCE%ICE = T ! [T|F] +! SOURCE%TOTAL = T ! [T|F] +! -------------------------------------------------------------------- ! +&SOURCE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_outp_spec.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_outp_spec.inp new file mode 100644 index 000000000..44f41c060 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_outp_spec.inp @@ -0,0 +1,10 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + 1 +$ + 1 0. 0. 33 T diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_outp_tab50.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_outp_tab50.inp new file mode 100644 index 000000000..fa823a9ea --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_outp_tab50.inp @@ -0,0 +1,11 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ +$ 19680606 000000 3600. 999 + 19680606 000000 60. 99999 +$ + 1 + -1 +$ + 2 +$ + 2 49 diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.inp new file mode 100644 index 000000000..cb19025f8 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III shell input file +$ ------------------------------ + F T + F T + T T + F + F + F + F +$ + 19680606 000000 + 19680607 120000 +$ + 1 +$ + 19680606 000000 3600 19680618 000000 +$ +N +$ +DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ + 19680606 000000 60 19680618 000000 + 0.0 0.0 'The_point' + 0.0 0.0 'STOPSTRING' + 19681207 000000 0 19681208 000000 + 19680607 120000 172600 19680608 000000 + 19681206 000000 0 19681208 000000 + 19681206 000000 0 19681208 000000 +$ + 'WND' 19680606 000000 12. 270. 0. + 'WND' 19680606 060000 12. 180. 0. + 'WND' 19680606 120000 12. 135. 0. + 'WND' 19680606 180000 12. 90. 0. + 'WND' 19680607 000000 12. 45. 0. + 'CUR' 19680606 000000 2. 90. 0. + 'STP' diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.nml b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.nml new file mode 100644 index 000000000..06560c3c1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.nml @@ -0,0 +1,370 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%STOP = '19680607 120000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'H' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' + TYPE%POINT%FILE = '../input_UPD3_U_cap/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '19680606 000000' '3600' '19680618 000000' + DATE%POINT = '19680606 000000' '60' '19680618 000000' + DATE%RESTART = '19680607 120000' '172600' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML + HOMOG_COUNT%N_CUR = 1 + HOMOG_COUNT%N_WND = 5 +/ + +&HOMOG_INPUT_NML + HOMOG_INPUT(1)%NAME = 'CUR' + HOMOG_INPUT(1)%VALUE1 = 2. + HOMOG_INPUT(1)%VALUE2 = 90. + + HOMOG_INPUT(2)%NAME = 'WND' + HOMOG_INPUT(2)%VALUE1 = 12. + HOMOG_INPUT(2)%VALUE2 = 270. + HOMOG_INPUT(2)%VALUE3 = 0. + + HOMOG_INPUT(3)%NAME = 'WND' + HOMOG_INPUT(3)%DATE = '19680606 060000' + HOMOG_INPUT(3)%VALUE1 = 12. + HOMOG_INPUT(3)%VALUE2 = 180. + HOMOG_INPUT(3)%VALUE3 = 0. + + HOMOG_INPUT(4)%NAME = 'WND' + HOMOG_INPUT(4)%DATE = '19680606 120000' + HOMOG_INPUT(4)%VALUE1 = 12. + HOMOG_INPUT(4)%VALUE2 = 135. + HOMOG_INPUT(4)%VALUE3 = 0. + + HOMOG_INPUT(5)%NAME = 'WND' + HOMOG_INPUT(5)%DATE = '19680606 180000' + HOMOG_INPUT(5)%VALUE1 = 12. + HOMOG_INPUT(5)%VALUE2 = 90. + HOMOG_INPUT(5)%VALUE3 = 0. + + HOMOG_INPUT(6)%NAME = 'WND' + HOMOG_INPUT(6)%DATE = '19680607 000000' + HOMOG_INPUT(6)%VALUE1 = 12. + HOMOG_INPUT(6)%VALUE2 = 45. + HOMOG_INPUT(6)%VALUE3 = 0. +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_strt.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_strt.inp new file mode 100644 index 000000000..d18f7cebd --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_strt.inp @@ -0,0 +1,7 @@ +$ WAVEWATCH III Initial conditions input file +$ ------------------------------------------- +$ 2 +$ 0.0 0.30 270. 3.3 0. 0. 0. 1. 0. 1. +$ 3 + 5 +$ diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp new file mode 100644 index 000000000..889a8fa09 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp @@ -0,0 +1,72 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Update Restart input file $ +$ -------------------------------------------------------------------- $ +$ +$ Time of Assimilation ----------------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ +$ This is the assimilation starting time and has to be the same with +$ the time at the restart.ww3. +$ + 19680607 120000 +$ +$ Choose algorithm to update restart file $ +$ UPDN for the Nth approach $ +$ The UPDN*, with N<2 the same correction factor is applied at all $ +$ the grid points $ +$ UPD0C:: ELIMINATED $ +$ UPDOF:: Option 0F All the spectra are updated with a constant $ +$ fac=HsAnl/HsBckg. $ +$ Expected input: PRCNTG, as defined at fac $ +$ UPD1 :: ELIMINATED $ +$ UPDN, with N>1 each gridpoint has its own update factor. $ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ +$ applied to wind-sea parts of the spectrum only when $ +$ wind-sea is the dominant component, otherwise the whole $ +$ spectrum is corrected $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ +$ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ +$ wind-sea components are also shifted in frequency space $ +$ using Toba (1973) $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ + UPD5 +$ +$ PRCNTG is input for option UPD0F and is the correction factor $ +$ applied to all the gridpoints (e.g. 1.) $ +$ + 0.6754 +$ +$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the gridpoints, as $ +$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ +$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ +$ + 1.333 +$ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ + anl.grbtxt +$ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III EoF ww3_uprstr.inp +$ -------------------------------------------------------------------- $ + diff --git a/regtests/ww3_ta1/input_UPD6_O/HOMOGENEOUS.depth b/regtests/ww3_ta1/input_UPD6_O/HOMOGENEOUS.depth new file mode 100644 index 000000000..863a9b9d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/HOMOGENEOUS.depth @@ -0,0 +1,3 @@ +1 1 1 +1 1 1 +1 1 1 diff --git a/regtests/ww3_ta1/input_UPD6_O/anl.grbtxt b/regtests/ww3_ta1/input_UPD6_O/anl.grbtxt new file mode 100644 index 000000000..d8d518d78 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/anl.grbtxt @@ -0,0 +1,10 @@ +3 3 +0.000318825 +0.000318825 +0.000318825 +0.000318825 +1.123456789 +0.000318825 +0.000318825 +0.000318825 +0.000318825 diff --git a/regtests/ww3_ta1/input_UPD6_O/gx_outp.inp b/regtests/ww3_ta1/input_UPD6_O/gx_outp.inp new file mode 100644 index 000000000..324609e35 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/gx_outp.inp @@ -0,0 +1,8 @@ +$ WAVEWATCH III Point output post-processing (GrADS) +$ -------------------------------------------------- + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + T T T T T T diff --git a/regtests/ww3_ta1/input_UPD6_O/namelists_HOMOGENEOUS.nml b/regtests/ww3_ta1/input_UPD6_O/namelists_HOMOGENEOUS.nml new file mode 100644 index 000000000..9e72cbf6c --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/namelists_HOMOGENEOUS.nml @@ -0,0 +1,2 @@ +&MISC XP = 0.075 / +END OF NAMELISTS diff --git a/regtests/ww3_ta1/input_UPD6_O/points.list b/regtests/ww3_ta1/input_UPD6_O/points.list new file mode 100644 index 000000000..5ad8fde50 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/points.list @@ -0,0 +1 @@ +0.0 0.0 'The_point' diff --git a/regtests/ww3_ta1/input_UPD6_O/switch b/regtests/ww3_ta1/input_UPD6_O/switch new file mode 100644 index 000000000..5df405254 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/switch @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD6_O/switch_ST4 b/regtests/ww3_ta1/input_UPD6_O/switch_ST4 new file mode 100644 index 000000000..559900eba --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/switch_ST4 @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX0 LN1 ST4 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD6_O/switch_T b/regtests/ww3_ta1/input_UPD6_O/switch_T new file mode 100644 index 000000000..80c957834 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/switch_T @@ -0,0 +1 @@ +F90 T NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_grid.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_grid.inp new file mode 100644 index 000000000..b751549d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_grid.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'HOMOGENEOUS SOURCE TERM TEST ' +$ + 1.10 0.0485 36 24 0. +$ 1.07 0.042 40 36 0. +$ + F F F F F T +$ 900. 900. 900. 5. + 900. 900. 900. 15. +$ 900. 900. 900. 60. +$ +$ &MISC XP = 0.025 / +$ &FLX3 CDMAX = 2.5E-3, CTYPE = 1 / +$ &SLN1 RFPM = 1.0 RFHF = 0.33 / + &MISC XP = 0.075 / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 1. 1. 1.E-2 + -1. -1. 1.E-2 +$ + -5. 5.75 10 -2500. 3 1 '(....)' 'UNIT' 'input' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 1 1 '(....)' 'PART' 'input' +$ + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_grid.nml b/regtests/ww3_ta1/input_UPD6_O/ww3_grid.nml new file mode 100644 index 000000000..5868ef325 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_grid.nml @@ -0,0 +1,225 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0485 + SPECTRUM%NK = 36 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 900. + TIMESTEPS%DTXY = 900. + TIMESTEPS%DTKTH = 900. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'HOMOGENEOUS SOURCE TERM TEST' + GRID%NML = '../input_UPD3_O/namelists_HOMOGENEOUS.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input_UPD3_O/HOMOGENEOUS.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_ounf.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_ounf.inp new file mode 100644 index 000000000..6af079872 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_ounf.inp @@ -0,0 +1,41 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ Time, time increment and number of outputs +$ + 19680101 120000 10 8000 +$ +$ +$ Output request flags identifying fields as in ww3_shel.inp. See that +$ file for a full documentation of field output options. Namelist type +$ selection is used here (for alternative F/T flags, see ww3_shel.inp). +$ + N + DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ +$--------------------------------------------------------------------- $ +$ NetCDF version [3,4] and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ Output type 0 1 2 [0,1,2,3,4,5] (swell partition) +$ variables T [T] or not [F] in the same file +$ + 3 4 + 0 1 2 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date +$ IX, IY range +$ + ww3. + 6 + 2 2 2 2 +$ +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time idicator with S3 +$ characters, +$ and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD6_O/ww3_ounf.nml new file mode 100644 index 000000000..1d58e1dcb --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_ounf.nml @@ -0,0 +1,62 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '19680101 120000' + FIELD%TIMESTRIDE = '10' + FIELD%TIMECOUNT = '8000' + FIELD%LIST = 'DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS' + FIELD%PARTITION = '0 1 2' + FIELD%TYPE = 4 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%IX0 = 2 + FILE%IXN = 2 + FILE%IY0 = 2 + FILE%IYN = 2 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp new file mode 100644 index 000000000..5f2ba7528 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp @@ -0,0 +1,117 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III NETCDF Point output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 19680101 000000 3600. 1000 +$ +$ Points requested --------------------------------------------------- $ +$ +$ Define points index for which output is to be generated. +$ If no one defined, all points are selected +$ One index number per line, negative number identifies end of list. +$ 1 +$ 2 +$ mandatory end of list + -1 +$ +$--------------------------------------------------------------------- $ +$ file prefix +$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ netCDF version [3,4] +$ points in same file [T] or not [F] +$ and max number of points to be processed in one pass +$ output type ITYPE [0,1,2,3] +$ flag for global attributes WW3 [0] or variable version [1-2-3-4] +$ flag for dimensions order time,station [T] or station,time [F] +$ + ww3. + 4 + 3 + T 100 + 1 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, netCDF Spectra. +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D spectra +$ 3 : Transfer file. +$ 4 : Spectral partitioning. +$ - Scaling factors for 1-D and 2-D spectra Negative factor +$ disables, output, factor = 0. gives normalized spectrum. +$ + 3 1 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points. +$ grid name in quotes (for unformatted file C*21,3I,C*30). +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) | points | times +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, netCDF Tables of (mean) parameter +$ - Sub-type OTYPE : 1 : Depth, current, wind +$ 2 : Mean wave pars. +$ 3 : Nondimensional pars. (U*) +$ 4 : Nondimensional pars. (U10) +$ 5 : 'Validation table' +$ 6 : WMO standard output +$ 4 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, netCDF Source terms +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D S(f). +$ 3 : Table of 1-D inverse time scales +$ (1/T = S/F). +$ 4 : Transfer file +$ - Scaling factors for 1-D and 2-D source terms. Negative +$ factor disables print plots, factor = 0. gives normalized +$ print plots. +$ - Flags for spectrum, input, interactions, dissipation, +$ bottom and total source term. +$ - scale ISCALE for OTYPE=2,3 +$ 0 : Dimensional. +$ 1 : Nondimensional in terms of U10 +$ 2 : Nondimensional in terms of U* +$ 3-5: like 0-2 with f normalized with fp. +$ +$ 4 0 0 T T T T T T 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, nubmer of frequencies, directions and points, +$ flags for spectrum and source terms (C*21, 3I, 6L) +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), depth, wind speed and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) if requested | points | times +$ - Sin(f,theta) if requested | | +$ - Snl(f,theta) if requested | | +$ - Sds(f,theta) if requested | | +$ - Sbt(f,theta) if requested | | +$ - Stot(f,theta) if requested | | +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.nml b/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.nml new file mode 100644 index 000000000..edac93ddc --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.nml @@ -0,0 +1,188 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounp.nml - Point output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via POINT_NML namelist +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! POINT%TIMESTART = '19000101 000000' ! Stop date for the output field +! POINT%TIMESTRIDE = '0' ! Time stride for the output field +! POINT%TIMECOUNT = '1000000000' ! Number of time steps +! POINT%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! POINT%LIST = 'all' ! List of points index ['all'|'1 2 3'] +! POINT%SAMEFILE = T ! All the points in the same file +! POINT%BUFFER = 150 ! Number of points to process per pass +! POINT%TYPE = 1 ! [0=inventory | 1=spectra | 2=mean param | 3=source terms] +! POINT%DIMORDER = T ! [time,station=T | station,time=F] +! -------------------------------------------------------------------- ! +&POINT_NML + POINT%TIMESTART = '19680101 000000' + POINT%TIMESTRIDE = '3600.' + POINT%TIMECOUNT = '1000' + POINT%TIMESPLIT = 4 + POINT%BUFFER = 100 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 0, inventory of file +! +! * namelist must be terminated with / +! * definitions & defaults: +! No additional input, the above time range is ignored. +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the type 1, spectra via SPECTRA_NML namelist +! +! Table of 1-D spectra content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - ffp, f, th1m, sth1m, alpha : 1D spectral parameters +! - dpt, ust, wnd, wnddir : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(time,station,frequency,direction) : 2D spectral density +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! Spectral partitioning content : +! - time, station id, station name, longitude, latitude +! - npart : number of partitions +! - hs, tp, lm, th1m, sth1m, ws, tm10, t01, t02 : partitioned parameters +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRA%OUTPUT = 3 ! 1: Print plots +! ! 2: Table of 1-D spectra +! ! 3: Transfer file +! ! 4: Spectral partitioning +! SPECTRA%SCALE_FAC = 1 ! Scale factor (-1=disabled) +! SPECTRA%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! -------------------------------------------------------------------- ! +&SPECTRA_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 2, mean parameter via PARAM_NML namelist +! +! Forcing parameters content : +! - dpt, wnd, wnddir, cur, curdir +! +! Mean wave parameters content : +! - hs, lm, tr, th1p, sth1p, fp, th1m, sth1m +! +! Nondimensional parameters (U*) content : +! - ust, efst, fpst, cd, alpha +! +! Nondimensional parameters (U10) content : +! - wnd, efst, fpst, cd, alpha +! +! Validation table content : +! - wnd, wnddir, hs, hsst, cpu, cmu, ast +! +! WMO stantdard output content : +! - wnd, wnddir, hs, tp +! +! * namelist must be terminated with / +! * definitions & defaults: +! PARAM%OUTPUT = 4 ! 1: Forcing parameters +! ! 2: Mean wave parameters +! ! 3: Nondimensional pars. (U*) +! ! 4: Nondimensional pars. (U10) +! ! 5: Validation table +! ! 6: WMO standard output +! -------------------------------------------------------------------- ! +&PARAM_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 3, source terms via SOURCE_NML namelist +! +! Table of 1-D S(f) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - Sin(frequency) : input source term +! - Snl(frequency) : non linear interactions source term +! - Sds(frequency) : dissipation source term +! - Sbt(frequency) : bottom source term +! - Sice(frequency) : ice source term +! - Stot(frequency) : total source term +! - dpt, ust, wnd : mean parameters +! +! Table of 1-D inverse time scales (1/T = S/F) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - tini(frequency) : input inverse time scales source term +! - tnli(frequency) : non linear interactions inverse time scales source term +! - tdsi(frequency) : dissipation inverse time scales source term +! - tbti(frequency) : bottom inverse time scales source term +! - ticei(frequency) : ice inverse time scales source term +! - ttoti(frequency) : total inverse time scales source term +! - dpt, ust, wnd : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(frequency,direction) : 2D spectral density +! - Sin(frequency,direction) : input source term +! - Snl(frequency,direction) : non linear interactions source term +! - Sds(frequency,direction) : dissipation source term +! - Sbt(frequency,direction) : bottom source term +! - Sice(frequency,direction) : ice source term +! - Stot(frequency,direction) : total source term +! - dpt, wnd, wnddir, cur, curdir, ust : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SOURCE%OUTPUT = 4 ! 1: Print plots +! ! 2: Table of 1-D S(f) +! ! 3: Table of 1-D inverse time scales (1/T = S/F) +! ! 4: Transfer file +! SOURCE%SCALE_FAC = 0 ! Scale factor (-1=disabled) +! SOURCE%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! SOURCE%TABLE_FAC = 0 ! Table factor +! 0 : Dimensional. +! 1 : Nondimensional in terms of U10 +! 2 : Nondimensional in terms of U* +! 3-5: like 0-2 with f normalized with fp. +! SOURCE%SPECTRUM = T ! [T|F] +! SOURCE%INPUT = T ! [T|F] +! SOURCE%INTERACTIONS = T ! [T|F] +! SOURCE%DISSIPATION = T ! [T|F] +! SOURCE%BOTTOM = T ! [T|F] +! SOURCE%ICE = T ! [T|F] +! SOURCE%TOTAL = T ! [T|F] +! -------------------------------------------------------------------- ! +&SOURCE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_outp_spec.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_outp_spec.inp new file mode 100644 index 000000000..44f41c060 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_outp_spec.inp @@ -0,0 +1,10 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + 1 +$ + 1 0. 0. 33 T diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_outp_tab50.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_outp_tab50.inp new file mode 100644 index 000000000..fa823a9ea --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_outp_tab50.inp @@ -0,0 +1,11 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ +$ 19680606 000000 3600. 999 + 19680606 000000 60. 99999 +$ + 1 + -1 +$ + 2 +$ + 2 49 diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp new file mode 100644 index 000000000..cb19025f8 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III shell input file +$ ------------------------------ + F T + F T + T T + F + F + F + F +$ + 19680606 000000 + 19680607 120000 +$ + 1 +$ + 19680606 000000 3600 19680618 000000 +$ +N +$ +DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ + 19680606 000000 60 19680618 000000 + 0.0 0.0 'The_point' + 0.0 0.0 'STOPSTRING' + 19681207 000000 0 19681208 000000 + 19680607 120000 172600 19680608 000000 + 19681206 000000 0 19681208 000000 + 19681206 000000 0 19681208 000000 +$ + 'WND' 19680606 000000 12. 270. 0. + 'WND' 19680606 060000 12. 180. 0. + 'WND' 19680606 120000 12. 135. 0. + 'WND' 19680606 180000 12. 90. 0. + 'WND' 19680607 000000 12. 45. 0. + 'CUR' 19680606 000000 2. 90. 0. + 'STP' diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml b/regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml new file mode 100644 index 000000000..a5122e6f1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml @@ -0,0 +1,370 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%STOP = '19680607 120000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'H' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' + TYPE%POINT%FILE = '../input_UPD3_O/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '19680606 000000' '3600' '19680618 000000' + DATE%POINT = '19680606 000000' '60' '19680618 000000' + DATE%RESTART = '19680607 120000' '172600' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML + HOMOG_COUNT%N_CUR = 1 + HOMOG_COUNT%N_WND = 5 +/ + +&HOMOG_INPUT_NML + HOMOG_INPUT(1)%NAME = 'CUR' + HOMOG_INPUT(1)%VALUE1 = 2. + HOMOG_INPUT(1)%VALUE2 = 90. + + HOMOG_INPUT(2)%NAME = 'WND' + HOMOG_INPUT(2)%VALUE1 = 12. + HOMOG_INPUT(2)%VALUE2 = 270. + HOMOG_INPUT(2)%VALUE3 = 0. + + HOMOG_INPUT(3)%NAME = 'WND' + HOMOG_INPUT(3)%DATE = '19680606 060000' + HOMOG_INPUT(3)%VALUE1 = 12. + HOMOG_INPUT(3)%VALUE2 = 180. + HOMOG_INPUT(3)%VALUE3 = 0. + + HOMOG_INPUT(4)%NAME = 'WND' + HOMOG_INPUT(4)%DATE = '19680606 120000' + HOMOG_INPUT(4)%VALUE1 = 12. + HOMOG_INPUT(4)%VALUE2 = 135. + HOMOG_INPUT(4)%VALUE3 = 0. + + HOMOG_INPUT(5)%NAME = 'WND' + HOMOG_INPUT(5)%DATE = '19680606 180000' + HOMOG_INPUT(5)%VALUE1 = 12. + HOMOG_INPUT(5)%VALUE2 = 90. + HOMOG_INPUT(5)%VALUE3 = 0. + + HOMOG_INPUT(6)%NAME = 'WND' + HOMOG_INPUT(6)%DATE = '19680607 000000' + HOMOG_INPUT(6)%VALUE1 = 12. + HOMOG_INPUT(6)%VALUE2 = 45. + HOMOG_INPUT(6)%VALUE3 = 0. +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_strt.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_strt.inp new file mode 100644 index 000000000..d18f7cebd --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_strt.inp @@ -0,0 +1,7 @@ +$ WAVEWATCH III Initial conditions input file +$ ------------------------------------------- +$ 2 +$ 0.0 0.30 270. 3.3 0. 0. 0. 1. 0. 1. +$ 3 + 5 +$ diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp new file mode 100644 index 000000000..ca8dc3fe7 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp @@ -0,0 +1,72 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Update Restart input file $ +$ -------------------------------------------------------------------- $ +$ +$ Time of Assimilation ----------------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ +$ This is the assimilation starting time and has to be the same with +$ the time at the restart.ww3. +$ + 19680607 120000 +$ +$ Choose algorithm to update restart file $ +$ UPDN for the Nth approach $ +$ The UPDN*, with N<2 the same correction factor is applied at all $ +$ the grid points $ +$ UPD0C:: ELIMINATED $ +$ UPDOF:: Option 0F All the spectra are updated with a constant $ +$ fac=HsAnl/HsBckg. $ +$ Expected input: PRCNTG, as defined at fac $ +$ UPD1 :: ELIMINATED $ +$ UPDN, with N>1 each gridpoint has its own update factor. $ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ +$ applied to wind-sea parts of the spectrum only when $ +$ wind-sea is the dominant component, otherwise the whole $ +$ spectrum is corrected $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ +$ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ +$ wind-sea components are also shifted in frequency space $ +$ using Toba (1973) $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ + UPD6 +$ +$ PRCNTG is input for option UPD0F and is the correction factor $ +$ applied to all the gridpoints (e.g. 1.) $ +$ + 0.6754 +$ +$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the gridpoints, as $ +$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ +$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ +$ + 5.0 +$ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ + anl.grbtxt +$ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III EoF ww3_uprstr.inp +$ -------------------------------------------------------------------- $ + diff --git a/regtests/ww3_ta1/input_UPD6_U/HOMOGENEOUS.depth b/regtests/ww3_ta1/input_UPD6_U/HOMOGENEOUS.depth new file mode 100644 index 000000000..863a9b9d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/HOMOGENEOUS.depth @@ -0,0 +1,3 @@ +1 1 1 +1 1 1 +1 1 1 diff --git a/regtests/ww3_ta1/input_UPD6_U/anl.grbtxt b/regtests/ww3_ta1/input_UPD6_U/anl.grbtxt new file mode 100644 index 000000000..e8953d2cf --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/anl.grbtxt @@ -0,0 +1,10 @@ +3 3 +0.000318825 +0.000318825 +0.000318825 +0.000318825 +5.123456789 +0.000318825 +0.000318825 +0.000318825 +0.000318825 diff --git a/regtests/ww3_ta1/input_UPD6_U/gx_outp.inp b/regtests/ww3_ta1/input_UPD6_U/gx_outp.inp new file mode 100644 index 000000000..324609e35 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/gx_outp.inp @@ -0,0 +1,8 @@ +$ WAVEWATCH III Point output post-processing (GrADS) +$ -------------------------------------------------- + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + T T T T T T diff --git a/regtests/ww3_ta1/input_UPD6_U/namelists_HOMOGENEOUS.nml b/regtests/ww3_ta1/input_UPD6_U/namelists_HOMOGENEOUS.nml new file mode 100644 index 000000000..9e72cbf6c --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/namelists_HOMOGENEOUS.nml @@ -0,0 +1,2 @@ +&MISC XP = 0.075 / +END OF NAMELISTS diff --git a/regtests/ww3_ta1/input_UPD6_U/points.list b/regtests/ww3_ta1/input_UPD6_U/points.list new file mode 100644 index 000000000..5ad8fde50 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/points.list @@ -0,0 +1 @@ +0.0 0.0 'The_point' diff --git a/regtests/ww3_ta1/input_UPD6_U/switch b/regtests/ww3_ta1/input_UPD6_U/switch new file mode 100644 index 000000000..5df405254 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/switch @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD6_U/switch_ST4 b/regtests/ww3_ta1/input_UPD6_U/switch_ST4 new file mode 100644 index 000000000..559900eba --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/switch_ST4 @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX0 LN1 ST4 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD6_U/switch_T b/regtests/ww3_ta1/input_UPD6_U/switch_T new file mode 100644 index 000000000..80c957834 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/switch_T @@ -0,0 +1 @@ +F90 T NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_grid.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_grid.inp new file mode 100644 index 000000000..b751549d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_grid.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'HOMOGENEOUS SOURCE TERM TEST ' +$ + 1.10 0.0485 36 24 0. +$ 1.07 0.042 40 36 0. +$ + F F F F F T +$ 900. 900. 900. 5. + 900. 900. 900. 15. +$ 900. 900. 900. 60. +$ +$ &MISC XP = 0.025 / +$ &FLX3 CDMAX = 2.5E-3, CTYPE = 1 / +$ &SLN1 RFPM = 1.0 RFHF = 0.33 / + &MISC XP = 0.075 / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 1. 1. 1.E-2 + -1. -1. 1.E-2 +$ + -5. 5.75 10 -2500. 3 1 '(....)' 'UNIT' 'input' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 1 1 '(....)' 'PART' 'input' +$ + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_grid.nml b/regtests/ww3_ta1/input_UPD6_U/ww3_grid.nml new file mode 100644 index 000000000..1f3ea96cb --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_grid.nml @@ -0,0 +1,225 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0485 + SPECTRUM%NK = 36 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 900. + TIMESTEPS%DTXY = 900. + TIMESTEPS%DTKTH = 900. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'HOMOGENEOUS SOURCE TERM TEST' + GRID%NML = '../input_UPD3_U/namelists_HOMOGENEOUS.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input_UPD3_U/HOMOGENEOUS.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_ounf.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_ounf.inp new file mode 100644 index 000000000..6af079872 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_ounf.inp @@ -0,0 +1,41 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ Time, time increment and number of outputs +$ + 19680101 120000 10 8000 +$ +$ +$ Output request flags identifying fields as in ww3_shel.inp. See that +$ file for a full documentation of field output options. Namelist type +$ selection is used here (for alternative F/T flags, see ww3_shel.inp). +$ + N + DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ +$--------------------------------------------------------------------- $ +$ NetCDF version [3,4] and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ Output type 0 1 2 [0,1,2,3,4,5] (swell partition) +$ variables T [T] or not [F] in the same file +$ + 3 4 + 0 1 2 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date +$ IX, IY range +$ + ww3. + 6 + 2 2 2 2 +$ +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time idicator with S3 +$ characters, +$ and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD6_U/ww3_ounf.nml new file mode 100644 index 000000000..1d58e1dcb --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_ounf.nml @@ -0,0 +1,62 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '19680101 120000' + FIELD%TIMESTRIDE = '10' + FIELD%TIMECOUNT = '8000' + FIELD%LIST = 'DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS' + FIELD%PARTITION = '0 1 2' + FIELD%TYPE = 4 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%IX0 = 2 + FILE%IXN = 2 + FILE%IY0 = 2 + FILE%IYN = 2 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp new file mode 100644 index 000000000..5f2ba7528 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp @@ -0,0 +1,117 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III NETCDF Point output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 19680101 000000 3600. 1000 +$ +$ Points requested --------------------------------------------------- $ +$ +$ Define points index for which output is to be generated. +$ If no one defined, all points are selected +$ One index number per line, negative number identifies end of list. +$ 1 +$ 2 +$ mandatory end of list + -1 +$ +$--------------------------------------------------------------------- $ +$ file prefix +$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ netCDF version [3,4] +$ points in same file [T] or not [F] +$ and max number of points to be processed in one pass +$ output type ITYPE [0,1,2,3] +$ flag for global attributes WW3 [0] or variable version [1-2-3-4] +$ flag for dimensions order time,station [T] or station,time [F] +$ + ww3. + 4 + 3 + T 100 + 1 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, netCDF Spectra. +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D spectra +$ 3 : Transfer file. +$ 4 : Spectral partitioning. +$ - Scaling factors for 1-D and 2-D spectra Negative factor +$ disables, output, factor = 0. gives normalized spectrum. +$ + 3 1 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points. +$ grid name in quotes (for unformatted file C*21,3I,C*30). +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) | points | times +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, netCDF Tables of (mean) parameter +$ - Sub-type OTYPE : 1 : Depth, current, wind +$ 2 : Mean wave pars. +$ 3 : Nondimensional pars. (U*) +$ 4 : Nondimensional pars. (U10) +$ 5 : 'Validation table' +$ 6 : WMO standard output +$ 4 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, netCDF Source terms +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D S(f). +$ 3 : Table of 1-D inverse time scales +$ (1/T = S/F). +$ 4 : Transfer file +$ - Scaling factors for 1-D and 2-D source terms. Negative +$ factor disables print plots, factor = 0. gives normalized +$ print plots. +$ - Flags for spectrum, input, interactions, dissipation, +$ bottom and total source term. +$ - scale ISCALE for OTYPE=2,3 +$ 0 : Dimensional. +$ 1 : Nondimensional in terms of U10 +$ 2 : Nondimensional in terms of U* +$ 3-5: like 0-2 with f normalized with fp. +$ +$ 4 0 0 T T T T T T 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, nubmer of frequencies, directions and points, +$ flags for spectrum and source terms (C*21, 3I, 6L) +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), depth, wind speed and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) if requested | points | times +$ - Sin(f,theta) if requested | | +$ - Snl(f,theta) if requested | | +$ - Sds(f,theta) if requested | | +$ - Sbt(f,theta) if requested | | +$ - Stot(f,theta) if requested | | +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.nml b/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.nml new file mode 100644 index 000000000..edac93ddc --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.nml @@ -0,0 +1,188 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounp.nml - Point output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via POINT_NML namelist +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! POINT%TIMESTART = '19000101 000000' ! Stop date for the output field +! POINT%TIMESTRIDE = '0' ! Time stride for the output field +! POINT%TIMECOUNT = '1000000000' ! Number of time steps +! POINT%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! POINT%LIST = 'all' ! List of points index ['all'|'1 2 3'] +! POINT%SAMEFILE = T ! All the points in the same file +! POINT%BUFFER = 150 ! Number of points to process per pass +! POINT%TYPE = 1 ! [0=inventory | 1=spectra | 2=mean param | 3=source terms] +! POINT%DIMORDER = T ! [time,station=T | station,time=F] +! -------------------------------------------------------------------- ! +&POINT_NML + POINT%TIMESTART = '19680101 000000' + POINT%TIMESTRIDE = '3600.' + POINT%TIMECOUNT = '1000' + POINT%TIMESPLIT = 4 + POINT%BUFFER = 100 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 0, inventory of file +! +! * namelist must be terminated with / +! * definitions & defaults: +! No additional input, the above time range is ignored. +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the type 1, spectra via SPECTRA_NML namelist +! +! Table of 1-D spectra content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - ffp, f, th1m, sth1m, alpha : 1D spectral parameters +! - dpt, ust, wnd, wnddir : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(time,station,frequency,direction) : 2D spectral density +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! Spectral partitioning content : +! - time, station id, station name, longitude, latitude +! - npart : number of partitions +! - hs, tp, lm, th1m, sth1m, ws, tm10, t01, t02 : partitioned parameters +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRA%OUTPUT = 3 ! 1: Print plots +! ! 2: Table of 1-D spectra +! ! 3: Transfer file +! ! 4: Spectral partitioning +! SPECTRA%SCALE_FAC = 1 ! Scale factor (-1=disabled) +! SPECTRA%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! -------------------------------------------------------------------- ! +&SPECTRA_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 2, mean parameter via PARAM_NML namelist +! +! Forcing parameters content : +! - dpt, wnd, wnddir, cur, curdir +! +! Mean wave parameters content : +! - hs, lm, tr, th1p, sth1p, fp, th1m, sth1m +! +! Nondimensional parameters (U*) content : +! - ust, efst, fpst, cd, alpha +! +! Nondimensional parameters (U10) content : +! - wnd, efst, fpst, cd, alpha +! +! Validation table content : +! - wnd, wnddir, hs, hsst, cpu, cmu, ast +! +! WMO stantdard output content : +! - wnd, wnddir, hs, tp +! +! * namelist must be terminated with / +! * definitions & defaults: +! PARAM%OUTPUT = 4 ! 1: Forcing parameters +! ! 2: Mean wave parameters +! ! 3: Nondimensional pars. (U*) +! ! 4: Nondimensional pars. (U10) +! ! 5: Validation table +! ! 6: WMO standard output +! -------------------------------------------------------------------- ! +&PARAM_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 3, source terms via SOURCE_NML namelist +! +! Table of 1-D S(f) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - Sin(frequency) : input source term +! - Snl(frequency) : non linear interactions source term +! - Sds(frequency) : dissipation source term +! - Sbt(frequency) : bottom source term +! - Sice(frequency) : ice source term +! - Stot(frequency) : total source term +! - dpt, ust, wnd : mean parameters +! +! Table of 1-D inverse time scales (1/T = S/F) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - tini(frequency) : input inverse time scales source term +! - tnli(frequency) : non linear interactions inverse time scales source term +! - tdsi(frequency) : dissipation inverse time scales source term +! - tbti(frequency) : bottom inverse time scales source term +! - ticei(frequency) : ice inverse time scales source term +! - ttoti(frequency) : total inverse time scales source term +! - dpt, ust, wnd : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(frequency,direction) : 2D spectral density +! - Sin(frequency,direction) : input source term +! - Snl(frequency,direction) : non linear interactions source term +! - Sds(frequency,direction) : dissipation source term +! - Sbt(frequency,direction) : bottom source term +! - Sice(frequency,direction) : ice source term +! - Stot(frequency,direction) : total source term +! - dpt, wnd, wnddir, cur, curdir, ust : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SOURCE%OUTPUT = 4 ! 1: Print plots +! ! 2: Table of 1-D S(f) +! ! 3: Table of 1-D inverse time scales (1/T = S/F) +! ! 4: Transfer file +! SOURCE%SCALE_FAC = 0 ! Scale factor (-1=disabled) +! SOURCE%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! SOURCE%TABLE_FAC = 0 ! Table factor +! 0 : Dimensional. +! 1 : Nondimensional in terms of U10 +! 2 : Nondimensional in terms of U* +! 3-5: like 0-2 with f normalized with fp. +! SOURCE%SPECTRUM = T ! [T|F] +! SOURCE%INPUT = T ! [T|F] +! SOURCE%INTERACTIONS = T ! [T|F] +! SOURCE%DISSIPATION = T ! [T|F] +! SOURCE%BOTTOM = T ! [T|F] +! SOURCE%ICE = T ! [T|F] +! SOURCE%TOTAL = T ! [T|F] +! -------------------------------------------------------------------- ! +&SOURCE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_outp_spec.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_outp_spec.inp new file mode 100644 index 000000000..44f41c060 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_outp_spec.inp @@ -0,0 +1,10 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + 1 +$ + 1 0. 0. 33 T diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_outp_tab50.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_outp_tab50.inp new file mode 100644 index 000000000..fa823a9ea --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_outp_tab50.inp @@ -0,0 +1,11 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ +$ 19680606 000000 3600. 999 + 19680606 000000 60. 99999 +$ + 1 + -1 +$ + 2 +$ + 2 49 diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp new file mode 100644 index 000000000..cb19025f8 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III shell input file +$ ------------------------------ + F T + F T + T T + F + F + F + F +$ + 19680606 000000 + 19680607 120000 +$ + 1 +$ + 19680606 000000 3600 19680618 000000 +$ +N +$ +DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ + 19680606 000000 60 19680618 000000 + 0.0 0.0 'The_point' + 0.0 0.0 'STOPSTRING' + 19681207 000000 0 19681208 000000 + 19680607 120000 172600 19680608 000000 + 19681206 000000 0 19681208 000000 + 19681206 000000 0 19681208 000000 +$ + 'WND' 19680606 000000 12. 270. 0. + 'WND' 19680606 060000 12. 180. 0. + 'WND' 19680606 120000 12. 135. 0. + 'WND' 19680606 180000 12. 90. 0. + 'WND' 19680607 000000 12. 45. 0. + 'CUR' 19680606 000000 2. 90. 0. + 'STP' diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml b/regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml new file mode 100644 index 000000000..ffa4034d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml @@ -0,0 +1,370 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%STOP = '19680607 120000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'H' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' + TYPE%POINT%FILE = '../input_UPD3_U/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '19680606 000000' '3600' '19680618 000000' + DATE%POINT = '19680606 000000' '60' '19680618 000000' + DATE%RESTART = '19680607 120000' '172600' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML + HOMOG_COUNT%N_CUR = 1 + HOMOG_COUNT%N_WND = 5 +/ + +&HOMOG_INPUT_NML + HOMOG_INPUT(1)%NAME = 'CUR' + HOMOG_INPUT(1)%VALUE1 = 2. + HOMOG_INPUT(1)%VALUE2 = 90. + + HOMOG_INPUT(2)%NAME = 'WND' + HOMOG_INPUT(2)%VALUE1 = 12. + HOMOG_INPUT(2)%VALUE2 = 270. + HOMOG_INPUT(2)%VALUE3 = 0. + + HOMOG_INPUT(3)%NAME = 'WND' + HOMOG_INPUT(3)%DATE = '19680606 060000' + HOMOG_INPUT(3)%VALUE1 = 12. + HOMOG_INPUT(3)%VALUE2 = 180. + HOMOG_INPUT(3)%VALUE3 = 0. + + HOMOG_INPUT(4)%NAME = 'WND' + HOMOG_INPUT(4)%DATE = '19680606 120000' + HOMOG_INPUT(4)%VALUE1 = 12. + HOMOG_INPUT(4)%VALUE2 = 135. + HOMOG_INPUT(4)%VALUE3 = 0. + + HOMOG_INPUT(5)%NAME = 'WND' + HOMOG_INPUT(5)%DATE = '19680606 180000' + HOMOG_INPUT(5)%VALUE1 = 12. + HOMOG_INPUT(5)%VALUE2 = 90. + HOMOG_INPUT(5)%VALUE3 = 0. + + HOMOG_INPUT(6)%NAME = 'WND' + HOMOG_INPUT(6)%DATE = '19680607 000000' + HOMOG_INPUT(6)%VALUE1 = 12. + HOMOG_INPUT(6)%VALUE2 = 45. + HOMOG_INPUT(6)%VALUE3 = 0. +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_strt.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_strt.inp new file mode 100644 index 000000000..d18f7cebd --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_strt.inp @@ -0,0 +1,7 @@ +$ WAVEWATCH III Initial conditions input file +$ ------------------------------------------- +$ 2 +$ 0.0 0.30 270. 3.3 0. 0. 0. 1. 0. 1. +$ 3 + 5 +$ diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp new file mode 100644 index 000000000..17f31c90f --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp @@ -0,0 +1,72 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Update Restart input file $ +$ -------------------------------------------------------------------- $ +$ +$ Time of Assimilation ----------------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ +$ This is the assimilation starting time and has to be the same with +$ the time at the restart.ww3. +$ + 19680607 120000 +$ +$ Choose algorithm to update restart file $ +$ UPDN for the Nth approach $ +$ The UPDN*, with N<2 the same correction factor is applied at all $ +$ the grid points $ +$ UPD0C:: ELIMINATED $ +$ UPDOF:: Option 0F All the spectra are updated with a constant $ +$ fac=HsAnl/HsBckg. $ +$ Expected input: PRCNTG, as defined at fac $ +$ UPD1 :: ELIMINATED $ +$ UPDN, with N>1 each gridpoint has its own update factor. $ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ +$ applied to wind-sea parts of the spectrum only when $ +$ wind-sea is the dominant component, otherwise the whole $ +$ spectrum is corrected $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ +$ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ +$ wind-sea components are also shifted in frequency space $ +$ using Toba (1973) $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ + UPD6 +$ +$ PRCNTG is input for option UPD0F and is the correction factor $ +$ applied to all the gridpoints (e.g. 1.) $ +$ + 0.6754 +$ +$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the gridpoints, as $ +$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ +$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ +$ + 10.0 +$ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ + anl.grbtxt +$ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III EoF ww3_uprstr.inp +$ -------------------------------------------------------------------- $ + diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/HOMOGENEOUS.depth b/regtests/ww3_ta1/input_UPD6_U_cap/HOMOGENEOUS.depth new file mode 100644 index 000000000..863a9b9d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/HOMOGENEOUS.depth @@ -0,0 +1,3 @@ +1 1 1 +1 1 1 +1 1 1 diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/anl.grbtxt b/regtests/ww3_ta1/input_UPD6_U_cap/anl.grbtxt new file mode 100644 index 000000000..e8953d2cf --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/anl.grbtxt @@ -0,0 +1,10 @@ +3 3 +0.000318825 +0.000318825 +0.000318825 +0.000318825 +5.123456789 +0.000318825 +0.000318825 +0.000318825 +0.000318825 diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/gx_outp.inp b/regtests/ww3_ta1/input_UPD6_U_cap/gx_outp.inp new file mode 100644 index 000000000..324609e35 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/gx_outp.inp @@ -0,0 +1,8 @@ +$ WAVEWATCH III Point output post-processing (GrADS) +$ -------------------------------------------------- + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + T T T T T T diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/namelists_HOMOGENEOUS.nml b/regtests/ww3_ta1/input_UPD6_U_cap/namelists_HOMOGENEOUS.nml new file mode 100644 index 000000000..9e72cbf6c --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/namelists_HOMOGENEOUS.nml @@ -0,0 +1,2 @@ +&MISC XP = 0.075 / +END OF NAMELISTS diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/points.list b/regtests/ww3_ta1/input_UPD6_U_cap/points.list new file mode 100644 index 000000000..5ad8fde50 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/points.list @@ -0,0 +1 @@ +0.0 0.0 'The_point' diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/switch b/regtests/ww3_ta1/input_UPD6_U_cap/switch new file mode 100644 index 000000000..5df405254 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/switch @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/switch_ST4 b/regtests/ww3_ta1/input_UPD6_U_cap/switch_ST4 new file mode 100644 index 000000000..559900eba --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/switch_ST4 @@ -0,0 +1 @@ +F90 NOGRB SHRD PR0 FLX0 LN1 ST4 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/switch_T b/regtests/ww3_ta1/input_UPD6_U_cap/switch_T new file mode 100644 index 000000000..80c957834 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/switch_T @@ -0,0 +1 @@ +F90 T NOGRB SHRD PR0 FLX2 LN1 ST2 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 WRST O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_grid.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_grid.inp new file mode 100644 index 000000000..b751549d1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_grid.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'HOMOGENEOUS SOURCE TERM TEST ' +$ + 1.10 0.0485 36 24 0. +$ 1.07 0.042 40 36 0. +$ + F F F F F T +$ 900. 900. 900. 5. + 900. 900. 900. 15. +$ 900. 900. 900. 60. +$ +$ &MISC XP = 0.025 / +$ &FLX3 CDMAX = 2.5E-3, CTYPE = 1 / +$ &SLN1 RFPM = 1.0 RFHF = 0.33 / + &MISC XP = 0.075 / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 1. 1. 1.E-2 + -1. -1. 1.E-2 +$ + -5. 5.75 10 -2500. 3 1 '(....)' 'UNIT' 'input' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 1 1 '(....)' 'PART' 'input' +$ + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_grid.nml b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_grid.nml new file mode 100644 index 000000000..9d2843bf3 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_grid.nml @@ -0,0 +1,225 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0485 + SPECTRUM%NK = 36 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 900. + TIMESTEPS%DTXY = 900. + TIMESTEPS%DTKTH = 900. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'HOMOGENEOUS SOURCE TERM TEST' + GRID%NML = '../input_UPD3_U_cap/namelists_HOMOGENEOUS.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input_UPD3_U_cap/HOMOGENEOUS.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounf.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounf.inp new file mode 100644 index 000000000..6af079872 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounf.inp @@ -0,0 +1,41 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ Time, time increment and number of outputs +$ + 19680101 120000 10 8000 +$ +$ +$ Output request flags identifying fields as in ww3_shel.inp. See that +$ file for a full documentation of field output options. Namelist type +$ selection is used here (for alternative F/T flags, see ww3_shel.inp). +$ + N + DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ +$--------------------------------------------------------------------- $ +$ NetCDF version [3,4] and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ Output type 0 1 2 [0,1,2,3,4,5] (swell partition) +$ variables T [T] or not [F] in the same file +$ + 3 4 + 0 1 2 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date +$ IX, IY range +$ + ww3. + 6 + 2 2 2 2 +$ +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time idicator with S3 +$ characters, +$ and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounf.nml b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounf.nml new file mode 100644 index 000000000..1d58e1dcb --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounf.nml @@ -0,0 +1,62 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '19680101 120000' + FIELD%TIMESTRIDE = '10' + FIELD%TIMECOUNT = '8000' + FIELD%LIST = 'DPT WND ICE HS MSS MSD FAW WCC WCF WCH WCM FOC TAW CHA FWS' + FIELD%PARTITION = '0 1 2' + FIELD%TYPE = 4 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%IX0 = 2 + FILE%IXN = 2 + FILE%IY0 = 2 + FILE%IYN = 2 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.inp new file mode 100644 index 000000000..5f2ba7528 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.inp @@ -0,0 +1,117 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III NETCDF Point output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 19680101 000000 3600. 1000 +$ +$ Points requested --------------------------------------------------- $ +$ +$ Define points index for which output is to be generated. +$ If no one defined, all points are selected +$ One index number per line, negative number identifies end of list. +$ 1 +$ 2 +$ mandatory end of list + -1 +$ +$--------------------------------------------------------------------- $ +$ file prefix +$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ netCDF version [3,4] +$ points in same file [T] or not [F] +$ and max number of points to be processed in one pass +$ output type ITYPE [0,1,2,3] +$ flag for global attributes WW3 [0] or variable version [1-2-3-4] +$ flag for dimensions order time,station [T] or station,time [F] +$ + ww3. + 4 + 3 + T 100 + 1 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, netCDF Spectra. +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D spectra +$ 3 : Transfer file. +$ 4 : Spectral partitioning. +$ - Scaling factors for 1-D and 2-D spectra Negative factor +$ disables, output, factor = 0. gives normalized spectrum. +$ + 3 1 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points. +$ grid name in quotes (for unformatted file C*21,3I,C*30). +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) | points | times +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, netCDF Tables of (mean) parameter +$ - Sub-type OTYPE : 1 : Depth, current, wind +$ 2 : Mean wave pars. +$ 3 : Nondimensional pars. (U*) +$ 4 : Nondimensional pars. (U10) +$ 5 : 'Validation table' +$ 6 : WMO standard output +$ 4 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, netCDF Source terms +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D S(f). +$ 3 : Table of 1-D inverse time scales +$ (1/T = S/F). +$ 4 : Transfer file +$ - Scaling factors for 1-D and 2-D source terms. Negative +$ factor disables print plots, factor = 0. gives normalized +$ print plots. +$ - Flags for spectrum, input, interactions, dissipation, +$ bottom and total source term. +$ - scale ISCALE for OTYPE=2,3 +$ 0 : Dimensional. +$ 1 : Nondimensional in terms of U10 +$ 2 : Nondimensional in terms of U* +$ 3-5: like 0-2 with f normalized with fp. +$ +$ 4 0 0 T T T T T T 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, nubmer of frequencies, directions and points, +$ flags for spectrum and source terms (C*21, 3I, 6L) +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*10), depth, wind speed and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) if requested | points | times +$ - Sin(f,theta) if requested | | +$ - Snl(f,theta) if requested | | +$ - Sds(f,theta) if requested | | +$ - Sbt(f,theta) if requested | | +$ - Stot(f,theta) if requested | | +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.nml b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.nml new file mode 100644 index 000000000..edac93ddc --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.nml @@ -0,0 +1,188 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounp.nml - Point output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via POINT_NML namelist +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! POINT%TIMESTART = '19000101 000000' ! Stop date for the output field +! POINT%TIMESTRIDE = '0' ! Time stride for the output field +! POINT%TIMECOUNT = '1000000000' ! Number of time steps +! POINT%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! POINT%LIST = 'all' ! List of points index ['all'|'1 2 3'] +! POINT%SAMEFILE = T ! All the points in the same file +! POINT%BUFFER = 150 ! Number of points to process per pass +! POINT%TYPE = 1 ! [0=inventory | 1=spectra | 2=mean param | 3=source terms] +! POINT%DIMORDER = T ! [time,station=T | station,time=F] +! -------------------------------------------------------------------- ! +&POINT_NML + POINT%TIMESTART = '19680101 000000' + POINT%TIMESTRIDE = '3600.' + POINT%TIMECOUNT = '1000' + POINT%TIMESPLIT = 4 + POINT%BUFFER = 100 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 0, inventory of file +! +! * namelist must be terminated with / +! * definitions & defaults: +! No additional input, the above time range is ignored. +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the type 1, spectra via SPECTRA_NML namelist +! +! Table of 1-D spectra content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - ffp, f, th1m, sth1m, alpha : 1D spectral parameters +! - dpt, ust, wnd, wnddir : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(time,station,frequency,direction) : 2D spectral density +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! Spectral partitioning content : +! - time, station id, station name, longitude, latitude +! - npart : number of partitions +! - hs, tp, lm, th1m, sth1m, ws, tm10, t01, t02 : partitioned parameters +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRA%OUTPUT = 3 ! 1: Print plots +! ! 2: Table of 1-D spectra +! ! 3: Transfer file +! ! 4: Spectral partitioning +! SPECTRA%SCALE_FAC = 1 ! Scale factor (-1=disabled) +! SPECTRA%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! -------------------------------------------------------------------- ! +&SPECTRA_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 2, mean parameter via PARAM_NML namelist +! +! Forcing parameters content : +! - dpt, wnd, wnddir, cur, curdir +! +! Mean wave parameters content : +! - hs, lm, tr, th1p, sth1p, fp, th1m, sth1m +! +! Nondimensional parameters (U*) content : +! - ust, efst, fpst, cd, alpha +! +! Nondimensional parameters (U10) content : +! - wnd, efst, fpst, cd, alpha +! +! Validation table content : +! - wnd, wnddir, hs, hsst, cpu, cmu, ast +! +! WMO stantdard output content : +! - wnd, wnddir, hs, tp +! +! * namelist must be terminated with / +! * definitions & defaults: +! PARAM%OUTPUT = 4 ! 1: Forcing parameters +! ! 2: Mean wave parameters +! ! 3: Nondimensional pars. (U*) +! ! 4: Nondimensional pars. (U10) +! ! 5: Validation table +! ! 6: WMO standard output +! -------------------------------------------------------------------- ! +&PARAM_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 3, source terms via SOURCE_NML namelist +! +! Table of 1-D S(f) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - Sin(frequency) : input source term +! - Snl(frequency) : non linear interactions source term +! - Sds(frequency) : dissipation source term +! - Sbt(frequency) : bottom source term +! - Sice(frequency) : ice source term +! - Stot(frequency) : total source term +! - dpt, ust, wnd : mean parameters +! +! Table of 1-D inverse time scales (1/T = S/F) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - tini(frequency) : input inverse time scales source term +! - tnli(frequency) : non linear interactions inverse time scales source term +! - tdsi(frequency) : dissipation inverse time scales source term +! - tbti(frequency) : bottom inverse time scales source term +! - ticei(frequency) : ice inverse time scales source term +! - ttoti(frequency) : total inverse time scales source term +! - dpt, ust, wnd : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(frequency,direction) : 2D spectral density +! - Sin(frequency,direction) : input source term +! - Snl(frequency,direction) : non linear interactions source term +! - Sds(frequency,direction) : dissipation source term +! - Sbt(frequency,direction) : bottom source term +! - Sice(frequency,direction) : ice source term +! - Stot(frequency,direction) : total source term +! - dpt, wnd, wnddir, cur, curdir, ust : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SOURCE%OUTPUT = 4 ! 1: Print plots +! ! 2: Table of 1-D S(f) +! ! 3: Table of 1-D inverse time scales (1/T = S/F) +! ! 4: Transfer file +! SOURCE%SCALE_FAC = 0 ! Scale factor (-1=disabled) +! SOURCE%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! SOURCE%TABLE_FAC = 0 ! Table factor +! 0 : Dimensional. +! 1 : Nondimensional in terms of U10 +! 2 : Nondimensional in terms of U* +! 3-5: like 0-2 with f normalized with fp. +! SOURCE%SPECTRUM = T ! [T|F] +! SOURCE%INPUT = T ! [T|F] +! SOURCE%INTERACTIONS = T ! [T|F] +! SOURCE%DISSIPATION = T ! [T|F] +! SOURCE%BOTTOM = T ! [T|F] +! SOURCE%ICE = T ! [T|F] +! SOURCE%TOTAL = T ! [T|F] +! -------------------------------------------------------------------- ! +&SOURCE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_outp_spec.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_outp_spec.inp new file mode 100644 index 000000000..44f41c060 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_outp_spec.inp @@ -0,0 +1,10 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ + 19680606 000000 10800. 999 +$ + 1 + -1 +$ + 1 +$ + 1 0. 0. 33 T diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_outp_tab50.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_outp_tab50.inp new file mode 100644 index 000000000..fa823a9ea --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_outp_tab50.inp @@ -0,0 +1,11 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ +$ 19680606 000000 3600. 999 + 19680606 000000 60. 99999 +$ + 1 + -1 +$ + 2 +$ + 2 49 diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.inp new file mode 100644 index 000000000..cb19025f8 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.inp @@ -0,0 +1,36 @@ +$ WAVEWATCH III shell input file +$ ------------------------------ + F T + F T + T T + F + F + F + F +$ + 19680606 000000 + 19680607 120000 +$ + 1 +$ + 19680606 000000 3600 19680618 000000 +$ +N +$ +DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS +$ + 19680606 000000 60 19680618 000000 + 0.0 0.0 'The_point' + 0.0 0.0 'STOPSTRING' + 19681207 000000 0 19681208 000000 + 19680607 120000 172600 19680608 000000 + 19681206 000000 0 19681208 000000 + 19681206 000000 0 19681208 000000 +$ + 'WND' 19680606 000000 12. 270. 0. + 'WND' 19680606 060000 12. 180. 0. + 'WND' 19680606 120000 12. 135. 0. + 'WND' 19680606 180000 12. 90. 0. + 'WND' 19680607 000000 12. 45. 0. + 'CUR' 19680606 000000 2. 90. 0. + 'STP' diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.nml b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.nml new file mode 100644 index 000000000..06560c3c1 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.nml @@ -0,0 +1,370 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%STOP = '19680607 120000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'H' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' + TYPE%POINT%FILE = '../input_UPD3_U_cap/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '19680606 000000' '3600' '19680618 000000' + DATE%POINT = '19680606 000000' '60' '19680618 000000' + DATE%RESTART = '19680607 120000' '172600' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML + HOMOG_COUNT%N_CUR = 1 + HOMOG_COUNT%N_WND = 5 +/ + +&HOMOG_INPUT_NML + HOMOG_INPUT(1)%NAME = 'CUR' + HOMOG_INPUT(1)%VALUE1 = 2. + HOMOG_INPUT(1)%VALUE2 = 90. + + HOMOG_INPUT(2)%NAME = 'WND' + HOMOG_INPUT(2)%VALUE1 = 12. + HOMOG_INPUT(2)%VALUE2 = 270. + HOMOG_INPUT(2)%VALUE3 = 0. + + HOMOG_INPUT(3)%NAME = 'WND' + HOMOG_INPUT(3)%DATE = '19680606 060000' + HOMOG_INPUT(3)%VALUE1 = 12. + HOMOG_INPUT(3)%VALUE2 = 180. + HOMOG_INPUT(3)%VALUE3 = 0. + + HOMOG_INPUT(4)%NAME = 'WND' + HOMOG_INPUT(4)%DATE = '19680606 120000' + HOMOG_INPUT(4)%VALUE1 = 12. + HOMOG_INPUT(4)%VALUE2 = 135. + HOMOG_INPUT(4)%VALUE3 = 0. + + HOMOG_INPUT(5)%NAME = 'WND' + HOMOG_INPUT(5)%DATE = '19680606 180000' + HOMOG_INPUT(5)%VALUE1 = 12. + HOMOG_INPUT(5)%VALUE2 = 90. + HOMOG_INPUT(5)%VALUE3 = 0. + + HOMOG_INPUT(6)%NAME = 'WND' + HOMOG_INPUT(6)%DATE = '19680607 000000' + HOMOG_INPUT(6)%VALUE1 = 12. + HOMOG_INPUT(6)%VALUE2 = 45. + HOMOG_INPUT(6)%VALUE3 = 0. +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_strt.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_strt.inp new file mode 100644 index 000000000..d18f7cebd --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_strt.inp @@ -0,0 +1,7 @@ +$ WAVEWATCH III Initial conditions input file +$ ------------------------------------------- +$ 2 +$ 0.0 0.30 270. 3.3 0. 0. 0. 1. 0. 1. +$ 3 + 5 +$ diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp new file mode 100644 index 000000000..518469343 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp @@ -0,0 +1,72 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Update Restart input file $ +$ -------------------------------------------------------------------- $ +$ +$ Time of Assimilation ----------------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ +$ This is the assimilation starting time and has to be the same with +$ the time at the restart.ww3. +$ + 19680607 120000 +$ +$ Choose algorithm to update restart file $ +$ UPDN for the Nth approach $ +$ The UPDN*, with N<2 the same correction factor is applied at all $ +$ the grid points $ +$ UPD0C:: ELIMINATED $ +$ UPDOF:: Option 0F All the spectra are updated with a constant $ +$ fac=HsAnl/HsBckg. $ +$ Expected input: PRCNTG, as defined at fac $ +$ UPD1 :: ELIMINATED $ +$ UPDN, with N>1 each gridpoint has its own update factor. $ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ +$ applied to wind-sea parts of the spectrum only when $ +$ wind-sea is the dominant component, otherwise the whole $ +$ spectrum is corrected $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ +$ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ +$ wind-sea components are also shifted in frequency space $ +$ using Toba (1973) $ +$ Expected input: the Analysis Hs field plus background wind $ +$ speed and direction, in text format $ + UPD6 +$ +$ PRCNTG is input for option UPD0F and is the correction factor $ +$ applied to all the gridpoints (e.g. 1.) $ +$ + 0.6754 +$ +$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the gridpoints, as $ +$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ +$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ +$ + 1.333 +$ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ + anl.grbtxt +$ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III EoF ww3_uprstr.inp +$ -------------------------------------------------------------------- $ + From db2c7942580df8b7faca4666f0597bd489e4c77c Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Tue, 11 Feb 2020 09:21:02 -0500 Subject: [PATCH 27/84] BF OpenMp b4b (#160) OpenMP bugfix package * Including additional variables in PRIVATE OMP declaration in attempt to fix OMP b4b irreproducibility issue (Jim Abeles) * Adding changes to several modules with OpenMP loops to declare properly PRIVATE variables and avoid suprious assignment of values that lead to b4b reproducibility issues. Expanded matrix_ncep to run hybrid MPI/OMP cases * Modified w3adc.f to enable processing of multiple switches on a single line (to be continue as per #167 ) Co-authored-by: @JamesAbeles-NOAA and Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> and @CarstenHansen --- model/aux/w3adc.f | 137 +++++++++++++++++++++++++++------------ model/ftn/w3iogomd.ftn | 16 ++--- model/ftn/w3pro1md.ftn | 4 +- model/ftn/w3pro3md.ftn | 4 +- model/ftn/w3uno2md.ftn | 6 +- model/ftn/w3uqckmd.ftn | 2 + model/ftn/w3wavemd.ftn | 16 ++--- regtests/bin/matrix_ncep | 2 +- 8 files changed, 120 insertions(+), 67 deletions(-) diff --git a/model/aux/w3adc.f b/model/aux/w3adc.f index f83f6bc40..aa312b656 100644 --- a/model/aux/w3adc.f +++ b/model/aux/w3adc.f @@ -3,9 +3,12 @@ PROGRAM W3ADC C/ +-----------------------------------+ C/ | H. L. Tolman | C/ | FORTRAN 77 | -C/ | Last update : 05-Jan-2001 | +C/ | Last update : 03-Feb-2020 | C/ +-----------------------------------+ C/ +C/ 03-Feb-2020 : Added ability to process multiple ( version 7.00 ) +C/ switches on a single line. Chris Bunney, UKMO +C/ C/ Version to preprocess FORTRAN 90 free format code. C/ C 1. Purpose : @@ -77,7 +80,11 @@ PROGRAM W3ADC C 7. Remarks : C C - Switches are case-sensitive -C - Switch in code has to be followed by space. +C - Switch in code has to be followed by space, forward slash (/) or +C exclamation mark (!) +C - Multiple switches can appear on a single line, seperated by +C a forward slash or exclamation mark. In this case all switches +C need to be present in switch file for the line to be included. C - Switches can be used in include files, since include files are C are pre-processed before the actual file is processed. Includes C in include files, however, are not accepted. @@ -134,7 +141,7 @@ PROGRAM W3ADC CHARACTER*20 TEST0, TSTSTR CHARACTER*500 FNAMEI, FNAMEO, FNAMER CHARACTER*72 INSTR - CHARACTER*143 NEWLNE, OLDLNE + CHARACTER*176 NEWLNE, OLDLNE CHARACTER*200 SWTCHS CHARACTER*33 NOLINE CHARACTER SWITCH*8, SW0*8 @@ -253,30 +260,52 @@ PROGRAM W3ADC FLKEEP = .TRUE. FLSWTC = .FALSE. * - IF ( NEWLNE(1:2).EQ.'!/' ) THEN + ! Rewrite for multiple switches on single line + ! Chris Bunney, Feb 2020. + DO 140 + IF(NEWLNE(1:2) .EQ. '!/') THEN + ! Potential switch + FLSWTC = .FALSE. FLKEEP = .FALSE. +* + ! Check if just a comment IF ( NEWLNE(3:3) .EQ. ' ' ) THEN - FLSWTC = .TRUE. - GOTO 141 - ENDIF - DO 140, I=1, NSWTCH - SW0 = SWITCH(I) - J = LS(I) - IF ( NEWLNE( 3 :2+J) .EQ. SW0(1:J) ) THEN - IF ( NEWLNE(3+J:3+J) .EQ. ' ' ) THEN - NEWLNE(1:MMLOUT) = NEWLNE(3+J:MMLOUT+3+J-1) - FLSWTC = .TRUE. - GOTO 141 - ENDIF - IF ( NEWLNE(3+J:3+J) .EQ. '/' ) THEN - NEWLNE(1:MMLOUT) = NEWLNE(4+J:MMLOUT+4+J-1) - FLSWTC = .TRUE. - GOTO 141 - ENDIF + FLSWTC = .TRUE. + GOTO 142 ! Assumes no more switches + ENDIF +* + ! Check if is an activated switch: + DO 141, I=1, NSWTCH + SW0 = SWITCH(I) + J = LS(I) + IF(NEWLNE(3:2+J) .EQ. SW0(1:J)) THEN +* + IF(NEWLNE(3+J:3+J) .EQ. ' ' .OR. + & NEWLNE(3+J:3+J) .EQ. '!') THEN + NEWLNE(1:MMLOUT) = NEWLNE(3+J:MMLOUT+3+J-1) + FLSWTC = .TRUE. + GOTO 140 ENDIF - 140 CONTINUE - 141 CONTINUE +* + IF(NEWLNE(3+J:3+J) .EQ. '/' ) THEN + NEWLNE(1:MMLOUT) = NEWLNE(4+J:MMLOUT+4+J-1) + FLSWTC = .TRUE. + GOTO 140 + ENDIF +* + ENDIF + 141 CONTINUE ! ENDDO +* + ! No match found for switch - don't include line + FLSWTC = .FALSE. + GOTO 142 + ELSE + ! No more switches, break out of do loop + GOTO 142 ENDIF +* + 140 CONTINUE ! ENDDO + 142 CONTINUE ! ESCAPE * * keep line ... * @@ -368,30 +397,52 @@ PROGRAM W3ADC FLKEEP = .TRUE. FLSWTC = .FALSE. * - IF ( NEWLNE(1:2).EQ.'!/' ) THEN + ! Rewrite for multiple switches on single line + ! Chris Bunney, Feb 2020. + DO 310 + IF(NEWLNE(1:2) .EQ. '!/') THEN + ! Potential switch + FLSWTC = .FALSE. FLKEEP = .FALSE. +* + ! Check if just a comment IF ( NEWLNE(3:3) .EQ. ' ' ) THEN - FLSWTC = .TRUE. - GOTO 311 - ENDIF - DO 310, I=1, NSWTCH - SW0 = SWITCH(I) - J = LS(I) - IF ( NEWLNE( 3 :2+J) .EQ. SW0(1:J) ) THEN - IF ( NEWLNE(3+J:3+J) .EQ. ' ' ) THEN - NEWLNE(1:MMLOUT) = NEWLNE(3+J:MMLOUT+3+J-1) - FLSWTC = .TRUE. - GOTO 311 - ENDIF - IF ( NEWLNE(3+J:3+J) .EQ. '/' ) THEN - NEWLNE(1:MMLOUT) = NEWLNE(4+J:MMLOUT+4+J-1) - FLSWTC = .TRUE. - GOTO 311 - ENDIF + FLSWTC = .TRUE. + GOTO 312 ! Assumes no more switches + ENDIF +* + ! Check if is an activated switch: + DO 311, I=1, NSWTCH + SW0 = SWITCH(I) + J = LS(I) + IF(NEWLNE(3:2+J) .EQ. SW0(1:J)) THEN +* + IF(NEWLNE(3+J:3+J) .EQ. ' ' .OR. + & NEWLNE(3+J:3+J) .EQ. '!') THEN + NEWLNE(1:MMLOUT) = NEWLNE(3+J:MMLOUT+3+J-1) + FLSWTC = .TRUE. + GOTO 310 + ENDIF +* + IF(NEWLNE(3+J:3+J) .EQ. '/' ) THEN + NEWLNE(1:MMLOUT) = NEWLNE(4+J:MMLOUT+4+J-1) + FLSWTC = .TRUE. + GOTO 310 ENDIF - 310 CONTINUE - 311 CONTINUE +* + ENDIF + 311 CONTINUE ! ENDDO +* + ! No match found for switch - don't include line + FLSWTC = .FALSE. + GOTO 312 + ELSE + ! No more switches, break out of do loop + GOTO 312 ENDIF +* + 310 CONTINUE ! ENDDO + 312 CONTINUE ! ESCAPE * * include ??? * diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 6e04ada22..5fccb8c03 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -1462,7 +1462,7 @@ ! 2.c Finalize integration over band and update mean arrays ! ! -!/OMPG/!$OMP PARALLEL DO PRIVATE(JSEA,ISEA,FACTOR,FACTOR2,KD,FKD,USSCO,M1) +!/OMPG/!$OMP PARALLEL DO PRIVATE(JSEA,ISEA,FACTOR,FACTOR2,MA,MC,MB,KD,FKD,USSCO,M1,M2) ! DO JSEA=1, NSEAL CALL INIT_GET_ISEA(ISEA, JSEA) @@ -1680,7 +1680,7 @@ ! END DO -!/OMPG/!$OMP PARALLEL DO PRIVATE(JSEA,ISEA) +!/OMPG/!$OMP PARALLEL DO PRIVATE(JSEA,ISEA,IX,IY,STEX,STEY,STED,ITL,IK) ! DO JSEA=1, NSEAL !/DIST ISEA = IAPROC + (JSEA-1)*NAPROC @@ -2239,7 +2239,7 @@ ! ! 6.b Loop over local sea points ! -!/OMPG/!$OMP PARALLEL DO PRIVATE(ISEA,JSEA,IX,IY,I) +!/OMPG/!$OMP PARALLEL DO PRIVATE(ISEA,JSEA,IX,IY,I,J) ! DO JSEA=1, NSEAL CALL INIT_GET_ISEA(ISEA, JSEA) @@ -3679,8 +3679,7 @@ !/ Local parameters !/ INTEGER :: IK, ITH, ISEA, JSEA - INTEGER :: IKST, IKFI, IB, NB - INTEGER :: STKBND_INDEX + INTEGER :: IKST, IKFI, IB !/S INTEGER, SAVE :: IENT = 0 REAL :: FACTOR, FKD,KD REAL :: ABX(NSEAL), ABY(NSEAL), USSCO @@ -3730,7 +3729,7 @@ ! DO ITH=1, NTH ! -!/OMPG/!$OMP PARALLEL DO PRIVATE(JSEA,ISEA,FACTOR) +!/OMPG/!$OMP PARALLEL DO PRIVATE(JSEA,ISEA) ! DO JSEA=1, NSEAL !/DIST ISEA = IAPROC + (JSEA-1)*NAPROC @@ -3746,8 +3745,7 @@ ! 2.c Finalize integration over band and update mean arrays ! ! -!/OMPG/!$OMP PARALLEL DO -!PRIVATE(JSEA,ISEA,FACTOR,FACTOR2,KD,FKD,USSCO,M1) +!/OMPG/!$OMP PARALLEL DO PRIVATE(JSEA,ISEA,FACTOR,KD,FKD,USSCO,MINDIFF,IB) ! DO JSEA=1, NSEAL !/DIST ISEA = IAPROC + (JSEA-1)*NAPROC @@ -3786,11 +3784,11 @@ ENDDO MINDIFF=1.e8 !Put spectral energey into whichever band central wavenumber fits in - NB=NK!allocated to size2*NK! STKBND_IN(NK) USSP(JSEA,Spc2Bnd(IK)) = USSP(JSEA,Spc2Bnd(IK)) + ABX(JSEA)*USSCO USSP(JSEA,NK+Spc2BND(IK)) = USSP(JSEA,NK+Spc2Bnd(IK)) + ABY(JSEA)*USSCO ENDIF END DO +!/OMPG/!$OMP END PARALLEL DO END DO ! RETURN diff --git a/model/ftn/w3pro1md.ftn b/model/ftn/w3pro1md.ftn index 26dd80525..0365be5f2 100644 --- a/model/ftn/w3pro1md.ftn +++ b/model/ftn/w3pro1md.ftn @@ -583,7 +583,7 @@ NYMAX=NY-1 IF ( ICLOSE.EQ.ICLOSE_TRPL ) NYMAX=NY ! -!/OMPH/!$OMP PARALLEL DO PRIVATE (IX, IY, IXY) +!/OMPH/!$OMP PARALLEL DO PRIVATE (IX, IY, IXY, VCB) ! DO IX=1, NX DO IY=1, NYMAX @@ -627,7 +627,7 @@ IF ( ICLOSE.EQ.ICLOSE_TRPL ) THEN IY=NY ! -!/OMPH/!$OMP PARALLEL DO PRIVATE (IXY, VCB, IX, IY) +!/OMPH/!$OMP PARALLEL DO PRIVATE (IXY, VCB, IX) ! DO IX=1, NX IXY = IY +(IX-1)*NY diff --git a/model/ftn/w3pro3md.ftn b/model/ftn/w3pro3md.ftn index cc46dc526..1295e94c1 100644 --- a/model/ftn/w3pro3md.ftn +++ b/model/ftn/w3pro3md.ftn @@ -960,7 +960,7 @@ IF ( FLCUR ) THEN !/T WRITE (NDST,9022) ! -!/OMPH/!$OMP PARALLEL DO PRIVATE (IXY) +!/OMPH/!$OMP PARALLEL DO PRIVATE (ISEA,IXY) ! DO ISEA=1, NSEA IXY = MAPSF(ISEA,3) @@ -974,7 +974,7 @@ ! END IF ! -!/OMPH/!$OMP PARALLEL DO PRIVATE (IX, IY, IXY, CP, CQ) +!/OMPH/!$OMP PARALLEL DO PRIVATE (ISEA,IX, IY, IXY, CP, CQ) ! DO ISEA=1, NSEA IX = MAPSF(ISEA,1) diff --git a/model/ftn/w3uno2md.ftn b/model/ftn/w3uno2md.ftn index 4462e8583..ce2f1944f 100644 --- a/model/ftn/w3uno2md.ftn +++ b/model/ftn/w3uno2md.ftn @@ -815,7 +815,9 @@ !/T1 WRITE (NDST,9010) !/T1 WRITE (NDST,9011) NB0, 'CENTRAL' ! -!/OMPH/!$OMP PARALLEL DO PRIVATE (IP, IXY, CFL, IXYC, IXYD, QB) +!/OMPH/!$OMP PARALLEL DO PRIVATE (IP, IXY, CFL, & +!/OMPH/!/T1!$OMP QBO, IX, IY, IY2, IX2, QN & +!/OMPH/!$OMP IXYC, IXYD, QB) ! DO IP=1, NB0 ! @@ -910,7 +912,7 @@ !/C90/!DIR$ IVDEP !/NEC/!CDIR NODEP ! -!/OMPH/!$OMP PARALLEL DO PRIVATE (IP, IXY, JN, JP ) +!/OMPH/!$OMP PARALLEL DO PRIVATE (IP, IXY, JN, JP, QOLD ) ! DO IP=1, NACT ! diff --git a/model/ftn/w3uqckmd.ftn b/model/ftn/w3uqckmd.ftn index a1a9c7770..2512e3ba9 100644 --- a/model/ftn/w3uqckmd.ftn +++ b/model/ftn/w3uqckmd.ftn @@ -1,3 +1,4 @@ + #include "w3macros.h" !/ ------------------------------------------------------------------- / MODULE W3UQCKMD @@ -877,6 +878,7 @@ !/T1 WRITE (NDST,9011) NB0, 'CENTRAL' ! !/OMPH/!$OMP PARALLEL DO PRIVATE (IP, IXY, CFL, IXYC, QB, IXYU, IXYD, & +!/OMPH/!/T1!$OMP QBO, QN, IX, IY, IX2, IY2, & !/OMPH/!$OMP& DQ, DQNZ, QCN, QBN, QBR, CFAC ) ! DO IP=1, NB0 diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 92783b73d..f85ed5aa3 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -1490,7 +1490,7 @@ NKCFL=NK !/T NKCFL=1 ! -!/OMPG/!$OMP PARALLEL DO PRIVATE (JSEA,ISEA,IX,IY) SCHEDULE (DYNAMIC,1) +!/OMPG/!$OMP PARALLEL DO PRIVATE (JSEA,ISEA) SCHEDULE (DYNAMIC,1) ! DO JSEA=1, NSEAL CALL INIT_GET_ISEA(ISEA, JSEA) @@ -1585,7 +1585,7 @@ IF ( FLCTH .OR. FLCK ) THEN DO ITLOC=1, ITLOCH ! -!/OMPG/!$OMP PARALLEL PRIVATE (JSEA,ISEA,IX,IY,DEPTH) +!/OMPG/!$OMP PARALLEL PRIVATE (JSEA,ISEA,IX,IY,DEPTH,IXrel) !/OMPG/!$OMP DO SCHEDULE (DYNAMIC,1) ! !/DEBUGRUN WRITE(740+IAPROC,*) ' ITLOC=', ITLOC @@ -1725,14 +1725,14 @@ !/MPI CALL MPI_STARTALL (NRQSG1, IRQSG1(1,2), IERR_MPI) !/MPI END IF ! -!/OMPX/!$OMP PARALLEL PRIVATE (ISPEC,FIELD) +!!/OMPX/!$OMP PARALLEL PRIVATE (ISPEC,FIELD) ! !/DEBUGRUN WRITE(740+IAPROC,*) 'W3WAVE, step 6.14' !/DEBUGRUN FLUSH(740+IAPROC) IF ( FLOMP ) ALLOCATE ( FIELD(1-NY:NY*(NX+2)) ) ! -!/OMPX/!$OMP DO SCHEDULE (DYNAMIC,1) +!!/OMPX/!$OMP DO SCHEDULE (DYNAMIC,1) ! DO ISPEC=1, NSPEC IF ( IAPPRO(ISPEC) .EQ. IAPROC ) THEN @@ -1781,11 +1781,11 @@ !/MEMCHECK call printMallInfo(IAPROC,mallInfos) -!/OMPX/!$OMP END DO +!!/OMPX/!$OMP END DO IF ( FLOMP ) DEALLOCATE ( FIELD ) -!/OMPX/!$OMP END PARALLEL +!!/OMPX/!$OMP END PARALLEL !Li Initialise IK IX IY in case ARC option is not used to avoid warnings. IK=1 @@ -1873,7 +1873,7 @@ IF ( FLCTH .OR. FLCK ) THEN DO ITLOC=ITLOCH+1, NTLOC ! -!/OMPG/!$OMP PARALLEL PRIVATE (JSEA,ISEA,IX,IY,DEPTH) +!/OMPG/!$OMP PARALLEL PRIVATE (JSEA,ISEA,IX,IY,DEPTH,IXrel) !/OMPG/!$OMP DO SCHEDULE (DYNAMIC,1) ! !/DEBUGRUN WRITE(740+IAPROC,*) ' ITLOC=', ITLOC @@ -1964,7 +1964,7 @@ !/PDLIB!/DEBUGSRC END IF ! !/OMPG/!$OMP PARALLEL PRIVATE (JSEA,ISEA,IX,IY,DELA,DELX,DELY, & -!/OMPG/!$OMP& REFLEC,REFLED,D50,PSIC,TMP1,TMP2,TMP3) +!/OMPG/!$OMP& REFLEC,REFLED,D50,PSIC,TMP1,TMP2,TMP3,TMP4) !/OMPG/!$OMP DO SCHEDULE (DYNAMIC,1) ! DO JSEA=1, NSEAL diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index 60e0bfbd6..3c4f23b7e 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -121,7 +121,7 @@ fi export shrd='y' # Do shared architecture tests export dist='y' # Do distributed architecture (MPI) tests export omp='y' # Threaded (OpenMP) tests - export hybd='n' # Hybrid options + export hybd='y' # Hybrid options export prop1D='y' # 1-D propagation tests (ww3_tp1.X) export prop2D='y' # 2-D propagation tests (ww3_tp2.X) From 8c1df553e978c5e406a76c0acb1675ff2a93b7db Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Thu, 20 Feb 2020 21:10:38 +0000 Subject: [PATCH 28/84] Bug fix to OMP directive when using OMPH switch but not T2 switch. (#170) --- model/ftn/w3uno2md.ftn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/model/ftn/w3uno2md.ftn b/model/ftn/w3uno2md.ftn index ce2f1944f..32d4e9c5e 100644 --- a/model/ftn/w3uno2md.ftn +++ b/model/ftn/w3uno2md.ftn @@ -912,7 +912,9 @@ !/C90/!DIR$ IVDEP !/NEC/!CDIR NODEP ! -!/OMPH/!$OMP PARALLEL DO PRIVATE (IP, IXY, JN, JP, QOLD ) +!/OMPH/!$OMP PARALLEL DO & +!/OMPH/!/T2/!$OMP PRIVATE(QOLD), & +!/OMPH/!$OMP PRIVATE (IP, IXY, JN, JP) ! DO IP=1, NACT ! From bce0f1fafd90a978d37d86aac209ead929de0470 Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Thu, 20 Feb 2020 21:12:03 +0000 Subject: [PATCH 29/84] w3adc multi-switch updates (#168) * Added change comment * Updated w3adc to increase maximum input line length and limit number of switches on line to 4 * Updated all_switches script to handle multiple switches on a line * Update manual to document new multi switch feature of w3adc --- manual/sys/w3adc.tex | 24 ++++++++++++++++++++++-- model/aux/w3adc.f | 31 ++++++++++++++++++++++++++++--- model/bin/all_switches | 1 + 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/manual/sys/w3adc.tex b/manual/sys/w3adc.tex index 3057b00f0..28f51d93b 100644 --- a/manual/sys/w3adc.tex +++ b/manual/sys/w3adc.tex @@ -6,7 +6,7 @@ \subsection{~The preprocessor} \label{sec:w3adc} and optional program options still have to be selected, and test output may be activated\footnote{~Exceptions are some modules that are not originally part of \ws, like the exact interaction modules. Such modules with the extension - {\file .f} of {\file .f90} bypass the preprocessor and get copied to the + {\file .f} or {\file .f90} bypass the preprocessor and get copied to the work directory with the {\file .f} extension.}. Compile level options are activated using `switches'. The arbitrary switch '{\F swt}' is included in the \ws\ files as comment of the form {\F !/swt}, where the switch name {\F swt} @@ -15,10 +15,30 @@ \subsection{~The preprocessor} \label{sec:w3adc} source code line. If '{\F/}' follows the switch, it is also removed, thus allowing the selective inclusion of hardware-dependent compiler directives etc. The switches are case sensitive, and available switches are presented in -\para\ref{sec:switches}. Files which contain the switch {\F c/swt} can be +\para\ref{sec:switches}. + +Files which contain the switch {\F c/swt} can be found by typing \command{find\_switch '!/SWT'} A list of all switches included in the \ws\ files can be obtained by typing \command{all\_switches} +\pb +\noindent +Traditionally, only one switch can be used per line of source code. However, +as of {\ww} version 7.00, multiple switches (up to 4) can be set on a single +line. For the line to be included in the compilation step all switches must +be activated. Multiple switches must be chained together at the beginning of +the line, with no spaces in between. Each switch must start with '{\F !/}' and +may optionally be terminated with '{\F /}'. This allows for the handling of +circumstances where a source code line needs to be included only if a +particular combination of switches is set. For example, to enable a line only +if the '{\F /OMPH}' and '{\F /T1}' switches are set: + +\begin{footnotesize} +\begin{verbatim} +!/OMPH!/!T1 ! Line included only if OMPH and T1 activated +\end{verbatim} +\end{footnotesize} + \pb %\vspace{\baselineskip} \noindent diff --git a/model/aux/w3adc.f b/model/aux/w3adc.f index aa312b656..c1fcddf6d 100644 --- a/model/aux/w3adc.f +++ b/model/aux/w3adc.f @@ -6,6 +6,7 @@ PROGRAM W3ADC C/ | Last update : 03-Feb-2020 | C/ +-----------------------------------+ C/ +C/ 05-Jan-2001 : Origination C/ 03-Feb-2020 : Added ability to process multiple ( version 7.00 ) C/ switches on a single line. Chris Bunney, UKMO C/ @@ -13,8 +14,8 @@ PROGRAM W3ADC C/ C 1. Purpose : C -C Pre-processing of FORTRAN files by switching on and of of -C selected lines and by including COMMON's. +C Pre-processing of FORTRAN files by switching on and off of +C selected lines and by including COMMONs. C C - Based on ADCOM by N. Booij, C Delft University of Technology. @@ -48,6 +49,7 @@ PROGRAM W3ADC C ---------------------------------------------------------------- C MMLOUT Int. Line length of output. C MMSWTC Int. Maximum number of switches. +C MMSWLN Int. Maximum number of switches on a single line. C MMFILE Int. Maximum number of include files. C MMLINE Int. Maximum length of include files. C ---------------------------------------------------------------- @@ -131,9 +133,10 @@ PROGRAM W3ADC PARAMETER ( MMLOUT = 132 ) PARAMETER ( MMFILE = 30 ) PARAMETER ( MMSWTC = 52 ) + PARAMETER ( MMSWLN = 4 ) PARAMETER ( MMLINE = 200 ) * - INTEGER NSWTCH, IDLEN(MMFILE), NLINES(MMFILE), LL, + INTEGER NSWTCH, IDLEN(MMFILE), NLINES(MMFILE), LL, NSWLN, & LENGTH(MMFILE,MMLINE), NINCF(MMFILE), LS(MMSWTC) LOGICAL FLOLD, FLKEEP, FLINCL, FLSWTC, LSTEXC, NOWEXC, & QUOTES @@ -253,6 +256,7 @@ PROGRAM W3ADC LSTEXC = .FALSE. 130 CONTINUE READ (NDSINC,'(A)',END=190,ERR=190) NEWLNE + OLDLNE = NEWLNE ILINE1 = ILINE1 + 1 * * switches @@ -262,7 +266,12 @@ PROGRAM W3ADC * ! Rewrite for multiple switches on single line ! Chris Bunney, Feb 2020. + NSWLN = 0 DO 140 + IF(NSWLN .GT. MMSWLN) THEN + WRITE(*,9950) ILINE1, TRIM(FNAMER), TRIM(OLDLNE) + STOP + ENDIF IF(NEWLNE(1:2) .EQ. '!/') THEN ! Potential switch FLSWTC = .FALSE. @@ -284,12 +293,14 @@ PROGRAM W3ADC & NEWLNE(3+J:3+J) .EQ. '!') THEN NEWLNE(1:MMLOUT) = NEWLNE(3+J:MMLOUT+3+J-1) FLSWTC = .TRUE. + NSWLN = NSWLN + 1 GOTO 140 ENDIF * IF(NEWLNE(3+J:3+J) .EQ. '/' ) THEN NEWLNE(1:MMLOUT) = NEWLNE(4+J:MMLOUT+4+J-1) FLSWTC = .TRUE. + NSWLN = NSWLN + 1 GOTO 140 ENDIF * @@ -399,7 +410,12 @@ PROGRAM W3ADC * ! Rewrite for multiple switches on single line ! Chris Bunney, Feb 2020. + NSWLN = 0 DO 310 + IF(NSWLN .GT. MMSWLN) THEN + WRITE(*,9950) ILINE1, TRIM(FNAMEI), TRIM(OLDLNE) + STOP + ENDIF IF(NEWLNE(1:2) .EQ. '!/') THEN ! Potential switch FLSWTC = .FALSE. @@ -421,12 +437,14 @@ PROGRAM W3ADC & NEWLNE(3+J:3+J) .EQ. '!') THEN NEWLNE(1:MMLOUT) = NEWLNE(3+J:MMLOUT+3+J-1) FLSWTC = .TRUE. + NSWLN = NSWLN + 1 GOTO 310 ENDIF * IF(NEWLNE(3+J:3+J) .EQ. '/' ) THEN NEWLNE(1:MMLOUT) = NEWLNE(4+J:MMLOUT+4+J-1) FLSWTC = .TRUE. + NSWLN = NSWLN + 1 GOTO 310 ENDIF * @@ -593,6 +611,13 @@ PROGRAM W3ADC 9941 FORMAT ( ' |',A33,'| |',A33,'|') 9942 FORMAT ( ' +---------------------------------+ ', & ' +---------------------------------+') +* + 9950 FORMAT (/'*** ERROR: MAXIMUM NUMBER OF SWITCHES ON', + & ' INPUT LINE EXCEEDED ',/ + & ' LINE NUMBER: ', I5, / + & ' FILENAME: ', A, / + & ' LINE: ', A//) +* 9999 FORMAT ( ' TEST W3ADC/2 : PROGRAM ENDED DUE TO VALUE OF ITEST'/) * * End of W3ADC -------------------------------------------------------- diff --git a/model/bin/all_switches b/model/bin/all_switches index a232e2fbe..e9c56c011 100755 --- a/model/bin/all_switches +++ b/model/bin/all_switches @@ -41,6 +41,7 @@ cd $main_dir/ftn all=`sed -n '/^!\/[[:alpha:]]/'p *.ftn | awk '{print $1}' | \ + awk -F'!/' 'BEGIN{OFS="\n"}{$1=$1; print $0}' | \ sed 's/^!\///' | sed 's/[\/!].*$//' | sort -u` set $all From 5057bd335335a3636a7a6b7d1f3c94db2b75b131 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Tue, 3 Mar 2020 13:35:31 -0500 Subject: [PATCH 30/84] Bugfix for propagation sequencing to obtain b4b restart runs (#173) Changes to the behavior of YFIRST in W3PRO[23] for alternating X and Y propagation solution order as a function of TIME(2) in sec rather than ITIME. Solves bit reproducibility issues when restarting runs using identical forcing. Initialized variable FIELD in w3wavemd regardless of grid type. Added global parameter RSTYPE to make restart type available to all modeules. * Cleanup and adding ITEST = RSTYPE after W3IORS call for consistency * Changing logic for updating YFIRST and ITLOCH to match more closely previous dependency on ITME and its behavior/timing for alternating propagation solution in X/Y * Correcting typo to ensure profiling flag -p is only active for _prof compiler option * Fix alternating intraspectral split * Adding RWND switch for ESMF application --- model/bin/cmplr.env | 8 ++++---- model/esmf/switch | 1 + model/ftn/w3gdatmd.ftn | 4 ++++ model/ftn/w3initmd.ftn | 18 +++++++++--------- model/ftn/w3iorsmd.ftn | 27 +++++++++++++-------------- model/ftn/w3pro2md.ftn | 6 +++++- model/ftn/w3pro3md.ftn | 8 ++++++-- model/ftn/w3wavemd.ftn | 20 +++++++++++++------- model/ftn/ww3_strt.ftn | 5 ++--- model/ftn/ww3_uprstr.ftn | 12 ++++++------ 10 files changed, 63 insertions(+), 46 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 1982829f1..fdaf4621c 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -79,7 +79,7 @@ if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || [ "$cmplr" == "mpt_pr fi # profiling option - if [ -z "$(echo $cmplr | grep prof)" ] ; then + if [ ! -z "$(echo $cmplr | grep prof)" ] ; then optc="$optc -p" optl="$optl -p" fi @@ -164,7 +164,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c fi # profiling option - if [ -z "$(echo $cmplr | grep prof)" ] ; then + if [ ! -z "$(echo $cmplr | grep prof)" ] ; then optc="$optc -p" optl="$optl -p" fi @@ -230,7 +230,7 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || [ "$cmplr" == "gnu_pr fi # profiling option - if [ -z "$(echo $cmplr | grep prof)" ] ; then + if [ ! -z "$(echo $cmplr | grep prof)" ] ; then optc="$optc -p" optl="$optl -p" fi @@ -297,7 +297,7 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || [ "$cmplr" == "pgi_pr fi # profiling option - if [ -z "$(echo $cmplr | grep prof)" ] ; then + if [ ! -z "$(echo $cmplr | grep prof)" ] ; then optc="$optc -p" optl="$optl -p" fi diff --git a/model/esmf/switch b/model/esmf/switch index 8ed1abab2..e11a9df0f 100644 --- a/model/esmf/switch +++ b/model/esmf/switch @@ -22,6 +22,7 @@ MLIM TR0 BS0 XX0 +RWND WNX1 WNT1 CRX1 diff --git a/model/ftn/w3gdatmd.ftn b/model/ftn/w3gdatmd.ftn index 9231eb14e..141a810c9 100644 --- a/model/ftn/w3gdatmd.ftn +++ b/model/ftn/w3gdatmd.ftn @@ -138,6 +138,7 @@ ! RLGTYPE: Rectilinear grid ! CLGTYPE: Curvilinear grid ! UNGTYPE: Unstructured triangular grid +! RSTYPE Int. Public Integer identifyng restart type ! ICLOSE Int. Public Parameter indicating type of index closure of grid. ! ICLOSE_NONE: No grid closure ! ICLOSE_SMPL: Simple grid closure @@ -610,6 +611,7 @@ !/ Grid type TYPE GRID ! this is the geographical grid with all associated parameters INTEGER :: GTYPE + INTEGER :: RSTYPE = -1 INTEGER :: ICLOSE INTEGER :: NX, NY, NSEA, NSEAL, TRFLAG !/SEC1 INTEGER :: NITERSEC1 @@ -934,6 +936,7 @@ !/ Data aliases for structure GRID(S) !/ INTEGER, POINTER :: GTYPE + INTEGER, POINTER :: RSTYPE INTEGER, POINTER :: ICLOSE INTEGER, POINTER :: NX, NY, NSEA, NSEAL, TRFLAG INTEGER, POINTER :: E3DF(:,:), P2MSF(:), US3DF(:), USSPF(:) @@ -1919,6 +1922,7 @@ ! 3. Set pointers in structure GRID ! GTYPE => GRIDS(IMOD)%GTYPE + RSTYPE => GRIDS(IMOD)%RSTYPE ICLOSE => GRIDS(IMOD)%ICLOSE ! NX => GRIDS(IMOD)%NX diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 81cd23cf6..9e4a87474 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -327,7 +327,7 @@ USE CONSTANTS !/MEMCHECK USE MallocInfo_m !/ - USE W3GDATMD, ONLY: W3SETG, P2MSF, E3DF, US3DF, USSPF + 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 @@ -408,7 +408,7 @@ !/ integer :: IRANK, I, ISTAT INTEGER :: IE, IFL, IFT, IERR, NTTOT, NTLOC, & - NTTARG, IK, IP, ITH, INTYPE, IX, IY, & + NTTARG, IK, IP, ITH, IX, IY, & J, J0, TOUT(2), TLST(2), ISEA, IS, & K, I1, I2, JSEA, NTTMAX !/DIST INTEGER :: ISTEP, ISP, IW @@ -855,7 +855,7 @@ !/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), INTYPE, IMOD) + 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) @@ -868,13 +868,13 @@ !/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 = INTYPE.LE.1 .OR. INTYPE.EQ.4 + FLCOLD = RSTYPE.LE.1 .OR. RSTYPE.EQ.4 IF ( IAPROC .EQ. NAPLOG ) THEN - IF (INTYPE.EQ.0) THEN + IF (RSTYPE.EQ.0) THEN WRITE (NDSO,930) 'cold start (idealized).' - ELSE IF ( INTYPE .EQ. 1 ) THEN + ELSE IF ( RSTYPE .EQ. 1 ) THEN WRITE (NDSO,930) 'cold start (wind).' - ELSE IF ( INTYPE .EQ. 4 ) THEN + ELSE IF ( RSTYPE .EQ. 4 ) THEN WRITE (NDSO,930) 'cold start (calm).' ELSE WRITE (NDSO,930) 'full restart.' @@ -913,7 +913,7 @@ ! ! 3.c Initialization from wind fields ! - FLIWND = INTYPE.EQ.1 + FLIWND = RSTYPE.EQ.1 !/T IF ( FLIWND ) WRITE (NDST,9030) ! ! 3.d Initialization with calm conditions @@ -921,7 +921,7 @@ !/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 ( INTYPE .EQ. 4 ) THEN + IF ( RSTYPE .EQ. 4 ) THEN VA(:,:) = 0. !/T WRITE (NDST,9031) END IF diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index f8fe6ae3c..1ad581ef4 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -61,7 +61,7 @@ !/ CONTAINS !/ ------------------------------------------------------------------- / - SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, INTYPE, IMOD, FLRSTRT ) + SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -146,7 +146,7 @@ ! 'CALM' Starting from calm conditions. ! NDSR Int. I/O File unit number. ! DUMFPI Real I Dummy values for FPIS for cold start. -! INTYPE Int. O Type of input field, +! RSTYPE Int. O Type of input field, ! 0 : cold start, ! 1 : cold start with fetch-limited spectra, ! 2 : full restart, @@ -240,7 +240,7 @@ ! 10. Source code : ! !/ ------------------------------------------------------------------- / - USE W3GDATMD, ONLY: W3SETG, W3SETREF + USE W3GDATMD, ONLY: W3SETG, W3SETREF, RSTYPE USE W3ODATMD, ONLY: W3SETO !/ USE W3GDATMD, ONLY: NX, NY, NSEA, NSEAL, NSPEC, MAPSTA, MAPST2, & @@ -274,7 +274,6 @@ INTEGER :: NDSR ! INTEGER, INTENT(IN) :: NDSR INTEGER, INTENT(IN), OPTIONAL :: IMOD - INTEGER, INTENT(OUT) :: INTYPE REAL, INTENT(INOUT) :: DUMFPI CHARACTER, INTENT(IN) :: INXOUT*(*) LOGICAL, INTENT(IN),OPTIONAL :: FLRSTRT @@ -433,7 +432,7 @@ ! --- Replace zeros with data --- WRITE (NDSR,POS=1) IDSTR, VERINI, GNAME, TYPE, NSEA, NSPEC END IF - INTYPE = 3 + RSTYPE = 3 ! ELSE READ (NDSR,POS=1,ERR=802,IOSTAT=IERR) & @@ -465,13 +464,13 @@ CALL EXTCDE ( 13 ) END IF IF (TYPE.EQ.'FULL') THEN - INTYPE = 2 + RSTYPE = 2 ELSE IF (TYPE.EQ.'WIND') THEN - INTYPE = 1 + RSTYPE = 1 ELSE IF (TYPE.EQ.'CALM') THEN - INTYPE = 4 + RSTYPE = 4 ELSE - INTYPE = 0 + RSTYPE = 0 END IF ! END IF @@ -954,13 +953,13 @@ ! 800 CONTINUE !/LN0 TYPE = 'WIND' -!/LN0 INTYPE = 1 +!/LN0 RSTYPE = 1 !/SEED TYPE = 'CALM' -!/SEED INTYPE = 4 +!/SEED RSTYPE = 4 !/LN1 TYPE = 'CALM' -!/LN1 INTYPE = 4 +!/LN1 RSTYPE = 4 !/LNX TYPE = 'CALM' -!/LNX INTYPE = 4 +!/LNX RSTYPE = 4 IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,990) TYPE, IERR GOTO 100 ! @@ -1036,7 +1035,7 @@ !/T 9007 FORMAT (' TEST W3IORS : WATER LEVELS ETC. PROCESSED ') !/T 9008 FORMAT (' TEST W3IORS : WATER LEVELS ETC. PROCESSED (DUMMY)') ! -!/T 9020 FORMAT (' TEST W3IORS : INTYPE = ',A,', PERFORMED BY W3INIT') +!/T 9020 FORMAT (' TEST W3IORS : RSTYPE = ',A,', PERFORMED BY W3INIT') !/ !/ End of W3IORS ----------------------------------------------------- / !/ diff --git a/model/ftn/w3pro2md.ftn b/model/ftn/w3pro2md.ftn index 82d020af6..cecb1a366 100644 --- a/model/ftn/w3pro2md.ftn +++ b/model/ftn/w3pro2md.ftn @@ -627,6 +627,7 @@ !/ INTEGER :: ITH, IK, NTLOC, ITLOC, ISEA, IXY, & IX,IY, IY0, IP, IBI + INTEGER :: TTEST(2),DTTST !/S INTEGER, SAVE :: IENT = 0 REAL :: CG0, CGA, CGN, CGX, CGY, CXC, CYC, & CXMIN, CXMAX, CYMIN, CYMAX @@ -728,7 +729,10 @@ DFAC = 1. END IF ! - YFIRST = MOD(ITIME,2) .EQ. 0 + TTEST(1) = TIME(1) + TTEST(2) = 0 + DTTST = DSEC21(TTEST,TIME) + YFIRST = MOD(NINT(DTTST/DTG),2) .EQ. 0 ! !/T WRITE (NDST,9000) YFIRST !/T WRITE (NDST,9001) ISP, ITH, IK, ECOS(ITH), ESIN(ITH) diff --git a/model/ftn/w3pro3md.ftn b/model/ftn/w3pro3md.ftn index 1295e94c1..943ce7f36 100644 --- a/model/ftn/w3pro3md.ftn +++ b/model/ftn/w3pro3md.ftn @@ -730,6 +730,7 @@ INTEGER :: IX, IY, IXC, IYC, IBI INTEGER :: IIXY1(NSEA), IIXY2(NSEA), & IIXY3(NSEA), IIXY4(NSEA) + INTEGER :: TTEST(2),DTTST !/S INTEGER, SAVE :: IENT = 0 REAL :: CG0, CGA, CGN, CGX, CGY, CXC, CYC, & CXMIN, CXMAX, CYMIN, CYMAX @@ -812,7 +813,10 @@ DTRAD = DTLOC IF ( FLAGLL ) DTRAD=DTRAD/(DERA*RADIUS) ! - YFIRST = MOD(ITIME,2) .EQ. 0 + TTEST(1) = TIME(1) + TTEST(2) = 0 + DTTST = DSEC21(TTEST,TIME) + YFIRST = MOD(NINT(DTTST/DTG),2) .EQ. 0 ! !/T WRITE (NDST,9000) YFIRST !/T WRITE (NDST,9001) ISP, ITH, IK, ECOS(ITH), ESIN(ITH) @@ -1153,7 +1157,7 @@ ! !/OMPH/!$OMP END PARALLEL DO ! - IF ( YFIRST ) THEN + IF ( YFIRST ) THEN ! !/UQ IF ( FLCY ) CALL W3QCK3 & !/UQ (NX, NY, NX, NY, VLCFLY, ATRNY, VQ, & diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index f85ed5aa3..fc9cfc242 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -425,6 +425,7 @@ IX, IY, ISPEC, J, TOUT(2), TLST(2), & REFLED(6), IK, ITH, IS, NKCFL INTEGER :: ISP, IP_glob + INTEGER :: TTEST(2),DTTEST REAL :: ICEDAVE ! !/OASIS INTEGER :: OASISED @@ -580,8 +581,6 @@ ! !/SMC !!Li Otherwise use sea point only field !/SMC ALLOCATE ( FIELD(NCel) ) -! -! FIELD(:) = 0. ! LOCAL = IAPROC .LE. NAPROC UGDTUPDATE = .FALSE. @@ -1573,7 +1572,11 @@ !/DEBUGRUN WRITE(740+IAPROC,*) 'W3WAVE, NTLOC=', NTLOC !/DEBUGRUN FLUSH(740+IAPROC) FACK = DTG / REAL(NTLOC) - ITLOCH = ( NTLOC + 1 - MOD(ITIME,2) ) / 2 + + TTEST(1) = TIME(1) + TTEST(2) = 0 + DTTEST = DSEC21(TTEST,TIME) + ITLOCH = ( NTLOC + 1 - MOD(NINT(DTTEST/DTG),2) ) / 2 ! ! 3.6.2 Intra-spectral part 1 ! @@ -1732,6 +1735,9 @@ IF ( FLOMP ) ALLOCATE ( FIELD(1-NY:NY*(NX+2)) ) ! +! Initialize FIELD variable + FIELD = 0. +! !!/OMPX/!$OMP DO SCHEDULE (DYNAMIC,1) ! DO ISPEC=1, NSPEC @@ -2423,8 +2429,8 @@ ! CALL W3IOTR ( NDS(11), NDS(12), VA, IMOD ) ELSE IF ( J .EQ. 4 ) THEN - CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD,& - FLOUT(8) ) + CALL W3IORS ('HOT', NDS(6), XXX, IMOD, FLOUT(8) ) + ITEST = RSTYPE ELSE IF ( J .EQ. 5 ) THEN IF ( IAPROC .EQ. NAPBPT ) THEN !/MPI IF (NRQBP2.NE.0) CALL MPI_WAITALL & @@ -2481,8 +2487,8 @@ TOUT(:) = TONEXT(:,J) DTTST = DSEC21 ( TIME, TOUT ) IF ( DTTST .EQ. 0. ) THEN - CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD, & - FLOUT(8) ) + CALL W3IORS ('HOT', NDS(6), XXX, IMOD, FLOUT(8) ) + ITEST = RSTYPE CALL TICK21 ( TOUT, DTOUT(J) ) TONEXT(:,J) = TOUT TLST = TOLAST(:,J) diff --git a/model/ftn/ww3_strt.ftn b/model/ftn/ww3_strt.ftn index 90f976eb1..2484a9d9b 100644 --- a/model/ftn/ww3_strt.ftn +++ b/model/ftn/ww3_strt.ftn @@ -204,8 +204,7 @@ !/ INTEGER :: NDSI, NDSM, NDSR, NDSTRC, NTRACE, & NDSEN, IERR, ITYPE, NCOS, IKM, IK, & - ITHM, ITH, JSEA, ISEA, IX, IY, & - INTYPE, J + ITHM, ITH, JSEA, ISEA, IX, IY, J !/MPI INTEGER :: IERR_MPI !/S INTEGER, SAVE :: IENT = 0 !/O6 INTEGER :: NSX, NSY @@ -773,7 +772,7 @@ !/DEBUGINIT WRITE(740+IAPROC,*) 'Before call to W3IORS' !/DEBUGINIT WRITE(740+IAPROC,*) 'min/max/sum(VA)=', minval(VA), maxval(VA), sum(VA) !/DEBUGINIT FLUSH(740+IAPROC) - CALL W3IORS ( INXOUT, NDSR, SIG(NK), INTYPE ) + CALL W3IORS ( INXOUT, NDSR, SIG(NK) ) !/DEBUGINIT WRITE(740+IAPROC,*) 'Before call to W3IORS' !/DEBUGINIT WRITE(740+IAPROC,*) 'min/max/sum(VA)=', minval(VA), maxval(VA), sum(VA) !/DEBUGINIT DO ISEA=1,NSEA diff --git a/model/ftn/ww3_uprstr.ftn b/model/ftn/ww3_uprstr.ftn index f51e1a425..849a1b247 100644 --- a/model/ftn/ww3_uprstr.ftn +++ b/model/ftn/ww3_uprstr.ftn @@ -318,7 +318,7 @@ USE W3DISPMD, ONLY: WAVNU1 ! USE W3GDATMD, ONLY: GNAME, NX, NY, MAPSTA, SIG, NK, NTH, NSEA, & - NSEAL, MAPSF, DMIN, ZB, DSIP, DTH + NSEAL, MAPSF, DMIN, ZB, DSIP, DTH, RSTYPE USE W3WDATMD, ONLY: VA, TIME USE W3ADATMD, ONLY: NSEALM USE W3ODATMD, ONLY: IAPROC, NAPERR, NAPLOG, NDS, NAPOUT @@ -336,7 +336,7 @@ ! REAL, ALLOCATABLE :: BETAW(:) ! LOGICAL, ALLOCATABLE :: MASK(:) LOGICAL :: anl_exists, CORWSEA - INTEGER :: IMOD, INTYPE, NDSEN, IX, IY, IK, ITH, & + INTEGER :: IMOD, NDSEN, IX, IY, IK, ITH, & IXW, IYW REAL, ALLOCATABLE :: UPDPRCNT(:,:),VATMP(:), HSIG(:,:), & A(:), HS_ANAL(:,:), gues(:,:), & @@ -446,9 +446,9 @@ !/WRST ! Set the wind flag to true when reading restart wind !/WRST INFLAGS1(3) = .TRUE. !/WRST CALL W3DIMI ( 1, 6, 6 ) !Needs to be called after w3iogr to have correct dimensions? - CALL W3IORS ( 'READ', NDS(6), SIG(NK), INTYPE, IMOD )! + CALL W3IORS ( 'READ', NDS(6), SIG(NK), IMOD )! IF ( IAPROC .EQ. NAPLOG ) THEN - IF (INTYPE.EQ.0.OR.INTYPE.EQ.1.OR.INTYPE.EQ.4) THEN + IF (RSTYPE.EQ.0.OR.RSTYPE.EQ.1.OR.RSTYPE.EQ.4) THEN WRITE (NDSO,1004) 'Terminating ww3_uprstr: The restart ' // & 'file is not read' CALL EXTCDE ( 1 ) @@ -919,8 +919,8 @@ !/WRST WXN = WXNwrst !/WRST WYN = WYNwrst WRITE (NDSO,903) - INTYPE = 3 - CALL W3IORS ( 'HOT', NDS(6), SIG(NK), INTYPE, 1 ) + RSTYPE = 3 + CALL W3IORS ( 'HOT', NDS(6), SIG(NK), 1 ) !/T WRITE (NDST,*), MYNAME,' : Exporting VA at the end of the re-analysis' !/T CALL writeMatrix('VA02.txt', REAL(VA)) ! From 71380ea8d6ca93f0510b56caf764cd20a3e16a32 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Wed, 4 Mar 2020 23:42:29 -0500 Subject: [PATCH 31/84] Emergency fix for NCEP applications only: creating temporary WW3/exec directory to host ww3 utility programs prior to model directory cleanup. (#174) --- model/esmf/Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/model/esmf/Makefile b/model/esmf/Makefile index a899702b8..64b3aec96 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -3,6 +3,7 @@ ################################################################################ WW3_DIR := $(shell cd .. 1>/dev/null 2>&1 && pwd) +WW3_BASEDIR := $(shell cd ../.. 1>/dev/null 2>&1 && pwd) WW3_BINDIR := $(WW3_DIR)/bin WW3_TMPDIR := $(WW3_DIR)/tmp WW3_EXEDIR := $(WW3_DIR)/exe @@ -88,6 +89,7 @@ default: env setup gout switch ww3_nems: env setup gout switch $(WW3_BINDIR)/w3_make ww3_multi_esmf $(WW3_BINDIR)/w3_make ww3_multi + \cp -f $(WW3_EXEDIR)/ww3_multi $(WW3_BASEDIR)/exec ww3_nemslibonly: env setup switch $(WW3_BINDIR)/w3_make ww3_multi_esmf @@ -186,5 +188,8 @@ gout: $(WW3_BINDIR)/tempswitch > $(WW3_BINDIR)/switch \rm -f $(WW3_BINDIR)/tempswitch $(WW3_BINDIR)/w3_make ww3_grib + \rm -rf $(WW3_BASEDIR)/exec + \mkdir -p $(WW3_BASEDIR)/exec + \cp -f $(WW3_EXEDIR)/ww3_* $(WW3_BASEDIR)/exec # ------------------------------------------------------------------------------ From 59a1131d0255e55828ca9b718d6521deeefaad2b Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Fri, 10 Apr 2020 16:48:23 +0100 Subject: [PATCH 32/84] Hybrid OMP/MPI updates [ukmo-develop] (#183) * Added MPI_INIT_THREAD call for Hybrid MPI/OMP compilation. * Updates to SMC module for Hybrid OMP/MPI runs. Authored by ukmo-jianguo.li and ukmo-ccbunney. * MO hybrid features update to SMC module. * Fixes to w3psmcmd module: - Corrected OMPH switch (missing / between switch and proceeding !) - Rearranged the R.H.S. terms in two calcalutions to allow OMP ATMOIC access. * Added workaround for bit-reproducibility issues in SMC module (enabled using B4B flag). * Added Hybrid MPI/OMP test cases for SMC grid regtests. * Updated manual and compilation scripts for new B4B switch. * Updated run_test to remove B4B flag when compiling in serial mode. * Add two pairs of parentheses for single ATOMIC line update. Co-authored-by: ukmo-jianguo.li --- manual/impl/switch.tex | 7 + model/bin/make_makefile.sh | 15 +- model/bin/w3_new | 1 + model/ftn/w3psmcmd.ftn | 407 ++++++++++++++-------- model/ftn/ww3_multi.ftn | 13 + model/ftn/ww3_shel.ftn | 14 + regtests/bin/matrix.base | 5 + regtests/bin/run_test | 62 ++-- regtests/ww3_tp2.10/info | 2 + regtests/ww3_tp2.10/input/switch_MPI_OMPH | 1 + regtests/ww3_tp2.16/info | 1 + regtests/ww3_tp2.16/input/switch_MPI_OMPH | 1 + 12 files changed, 364 insertions(+), 165 deletions(-) create mode 100644 regtests/ww3_tp2.10/input/switch_MPI_OMPH create mode 100644 regtests/ww3_tp2.16/input/switch_MPI_OMPH diff --git a/manual/impl/switch.tex b/manual/impl/switch.tex index d3702595b..50f62e119 100644 --- a/manual/impl/switch.tex +++ b/manual/impl/switch.tex @@ -282,6 +282,13 @@ \subsubsection{~Optional switches} \label{sub:opt_switch} \sit{omph}{Idem, but for directives used only for hybrid MPI-OpenMP parallelization.} \sit{pdlib}{Domain Decomposition for Explicit and Implicit Solver on triangular unstructured grids. ({\code ParMetis} is required for this option)} +\sit{b4b}{Enforce bit-for-bit reproducibility of OpenMP enabled code. Certain +OpenMP operations (especially reductions like summations) can result in slightly +different results between runs due to floating point rounding errors. +This switch enables intermediate steps (such as scaling values to an integer +value) to ensure that results are bit-for-bit reproducible between runs. Useful +for running the regression tests where such reproducibility is required. +Currently only affects code compiled with the {\F smc} switch.} \end{slist} Note that these switches can only be used in certain combinations, as enforced in the model installation scripts (particularly {\file make\_makefile.sh}. A diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 4b8852196..ad90065c1 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -99,7 +99,7 @@ dstress s_ice s_is reflection s_xx \ wind windx wcor rwind curr currx mgwind mgprop mggse \ subsec tdyn dss0 pdif tide refrx ig rotag arctic nnt mprf \ - cou oasis agcm ogcm igcm trknc setup pdlib memck uost rstwind + cou oasis agcm ogcm igcm trknc setup pdlib memck uost rstwind b4b do case $type in #sort:mach: @@ -392,6 +392,11 @@ ID='unresolved obstacles source term' TS='UOST' OK='UOST' ;; +#sort:b4b: + b4b ) TY='upto1' + ID='bit-for-bit reproducability' + TS='B4B' + OK='B4B' ;; esac n_found='0' @@ -508,6 +513,7 @@ memck ) memck=$sw ;; setup ) setup=$sw ;; uost ) uost=$sw ;; + b4b ) b4b=$sw ;; * ) ;; esac done @@ -547,6 +553,13 @@ echo ' ' ; exit 9 fi + if [ -n "$b4b" ] && [ -z "$thread2" ] + then + echo ' ' + echo " *** !/B4B should be used in combination with !/OMPG, !/OMPH or !/OMPX" + echo ' ' ; exit 9 + fi + smco=$NULL case $g_switch in PR0) pr=$NULL ;; diff --git a/model/bin/w3_new b/model/bin/w3_new index ec346d3cf..e868c5b7a 100755 --- a/model/bin/w3_new +++ b/model/bin/w3_new @@ -457,6 +457,7 @@ touch w3srcemd.ftn touch w3wavemd.ftn touch ww3_grid.ftn ;; + 'b4b' ) cd $main_dir/ftn ; touch w3psmcmd.ftn ;; * ) echo "w3_new: keyword [$key] not recognized" ;; esac done diff --git a/model/ftn/w3psmcmd.ftn b/model/ftn/w3psmcmd.ftn index 6269ffcab..ecd56bfe2 100644 --- a/model/ftn/w3psmcmd.ftn +++ b/model/ftn/w3psmcmd.ftn @@ -7,7 +7,7 @@ !/ | Adv, GCT, Rfr, Dif subroutines. | !/ | Jian-Guo Li | !/ | First created: 8 Nov 2010 | -!/ | Last modified: 18 Apr 2018 | +!/ | Last modified: 23 Mar 2020 | !/ +------------------------------------+ !/ !/ 08-Nov-2010 : Coding started by adapting w3pro2md.ftn. @@ -33,6 +33,8 @@ !/ 14-Sep-2015 : Modify DHDX/Y for Arctic part refraction term. !/ 8-Aug-2017 : Update SMCGradn for 0 or 1 boundary conditions. !/ 9-Jan-2018 : Parallelization by adding OpenMP directives. +!/ 19-Feb-2020 : Additions for OMP bit-reproducability (C.Bunney) +!/ 23-Mar-2018 : Add extra parenthese for single ATOMIC line update. !/ ! 1. Purpose : ! @@ -359,31 +361,31 @@ VLCFLY = 0. !Li Pass spectral element VQ to CQ and define size-1 cell CFL -!/OMPG!$OMP Parallel DO Private(ISEA) +!/OMPG/!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA !Li Transported variable is divided by CG as in WW3 (???) CQ(ISEA) = VQ(ISEA)/CG(IK,ISEA) !Li Resetting NaNQ VQ to zero if any. JGLi18Mar2013 IF( .NOT. (CQ(ISEA) .EQ. CQ(ISEA)) ) CQ(ISEA) = 0.0 END DO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO !Li Add current components if any to wave velocity. IF ( FLCUR ) THEN -!/OMPG!$OMP Parallel DO Private(ISEA) +!/OMPG/!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA CXTOT(ISEA) = (CGCOS * CG(IK,ISEA) + CX(ISEA)) CYTOT(ISEA) = (CGSIN * CG(IK,ISEA) + CY(ISEA)) ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO ELSE !Li No current case use group speed only. -!/OMPG!$OMP Parallel DO Private(ISEA) +!/OMPG/!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA CXTOT(ISEA) = CGCOS * CG(IK,ISEA) CYTOT(ISEA) = CGSIN * CG(IK,ISEA) END DO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO !Li End of IF( FLCUR ) block. ENDIF @@ -404,12 +406,12 @@ !/ARC !Li Convert velocity components into CFL factors. -!/OMPG!$OMP Parallel DO Private(ISEA) +!/OMPG/!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA UCFL(ISEA) = DTLDX*CXTOT(ISEA)/CLATS(ISEA) VCFL(ISEA) = DTLDY*CYTOT(ISEA) ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO !Li Initialise boundary cell CQ and Velocity values. CQ(-9:0)=0.0 @@ -437,7 +439,7 @@ ENDIF ! Store conservative flux in FCNt advective one in AFCN -!/OMPG!$OMP Parallel DO Private(i, M, N, FUTRN) +!/OMPG/!$OMP Parallel DO Private(i, M, N, FUTRN) DO i=1, NUFc M=IJKUFc(5,i) N=IJKUFc(6,i) @@ -445,33 +447,56 @@ !! Add sub-grid transparency for input flux update. JGLi16May2011 !! Transparency is also applied on diffusion flux. JGLi12Mar2012 -!/OMPG!$OMP CRITICAL +!! Replace CRITICAL with ATOMIC. JGLi15Jan2019 +!! !$OMP CRITICAL +!! Remove boundary cell flux update or M N > 0. JGLi28Mar2019 + IF( M > 0 ) THEN IF( (CTRNX(M)+CTRNX(N)) .GE. 1.96 ) THEN +!/OMPG/!$OMP ATOMIC FCNt(M) = FCNt(M) - FUTRN - FCNt(N) = FCNt(N) + FUTRN ELSE IF( ULCFLX(i) .GE. 0.0 ) THEN +!/OMPG/!$OMP ATOMIC FCNt(M) = FCNt(M) - FUTRN*CTRNX(M) - FCNt(N) = FCNt(N) + FUTRN*CTRNX(M)*CTRNX(N) ELSE +!/OMPG/!$OMP ATOMIC FCNt(M) = FCNt(M) - FUTRN*CTRNX(N)*CTRNX(M) + ENDIF +! Also divided by another cell length as UCFL is in basic unit. +!/OMPG/!$OMP ATOMIC + ! ChrisB: Re-arranged the RHS term below to make it + ! valid for OMP ATMOIC directive. + AFCN(M) = AFCN(M) - (FUMD(i)*UCFL(M) - FUDIFX(i)) + ENDIF + + IF( N > 0 ) THEN + IF( (CTRNX(M)+CTRNX(N)) .GE. 1.96 ) THEN +!/OMPG/!$OMP ATOMIC + FCNt(N) = FCNt(N) + FUTRN + ELSE IF( ULCFLX(i) .GE. 0.0 ) THEN +!/OMPG/!$OMP ATOMIC + FCNt(N) = FCNt(N) + FUTRN*CTRNX(M)*CTRNX(N) + ELSE +!/OMPG/!$OMP ATOMIC FCNt(N) = FCNt(N) + FUTRN*CTRNX(N) ENDIF ! Also divided by another cell length as UCFL is in basic unit. - AFCN(M) = AFCN(M) - FUMD(i)*UCFL(M) + FUDIFX(i) - AFCN(N) = AFCN(N) + FUMD(i)*UCFL(N) - FUDIFX(i) -!/OMPG!$OMP END CRITICAL +!/OMPG/!$OMP ATOMIC + AFCN(N) = AFCN(N) + (FUMD(i)*UCFL(N) - FUDIFX(i)) + ENDIF +!! !$OMP END CRITICAL + ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO ! Store conservative update in CQA and advective update in CQ ! The side length in MF value has to be cancelled with cell length ! Note ULCFLX has been divided by the cell size inside SMCxUNO2. -!/OMPG!$OMP Parallel DO Private(n) +!/OMPG/!$OMP Parallel DO Private(n) DO n=1, NSEA CQA(n)=CQ(n) + FCNt(n)/FLOAT(IJKCel(3,n)) CQ (n)=CQ(n) + AFCN(n)/FLOAT(IJKCel(3,n)) ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO ! Call advection subs. IF( FUNO3 ) THEN @@ -482,7 +507,7 @@ CALL SMCyUNO2r(1, NVFc, CQ, VCFL, VLCFLY, DSSD, FVMD, FVDIFY) ENDIF -!/OMPG!$OMP Parallel DO Private(j, M, N, FVTRN) +!/OMPG/!$OMP Parallel DO Private(j, M, N, FVTRN) DO j=1, NVFc M=IJKVFc(5,j) N=IJKVFc(6,j) @@ -490,29 +515,45 @@ !! Add sub-grid transparency for input flux update. JGLi16May2011 !! Transparency is also applied on diffusion flux. JGLi12Mar2012 -!/OMPG!$OMP CRITICAL +!! Replace CRITICAL with ATOMIC. JGLi15Jan2019 +!! !$OMP CRITICAL +!! Remove boundary cell flux update or M N > 0. JGLi28Mar2019 + IF( M > 0 ) THEN IF( (CTRNY(M)+CTRNY(N)) .GE. 1.96 ) THEN +!/OMPG/!$OMP ATOMIC BCNt(M) = BCNt(M) - FVTRN - BCNt(N) = BCNt(N) + FVTRN ELSE IF( VLCFLY(j) .GE. 0.0 ) THEN +!/OMPG/!$OMP ATOMIC BCNt(M) = BCNt(M) - FVTRN*CTRNY(M) - BCNt(N) = BCNt(N) + FVTRN*CTRNY(M)*CTRNY(N) ELSE +!/OMPG/!$OMP ATOMIC BCNt(M) = BCNt(M) - FVTRN*CTRNY(N)*CTRNY(M) + ENDIF + ENDIF + IF( N > 0 ) THEN + IF( (CTRNY(M)+CTRNY(N)) .GE. 1.96 ) THEN +!/OMPG/!$OMP ATOMIC + BCNt(N) = BCNt(N) + FVTRN + ELSE IF( VLCFLY(j) .GE. 0.0 ) THEN +!/OMPG/!$OMP ATOMIC + BCNt(N) = BCNt(N) + FVTRN*CTRNY(M)*CTRNY(N) + ELSE +!/OMPG/!$OMP ATOMIC BCNt(N) = BCNt(N) + FVTRN*CTRNY(N) ENDIF -!/OMPG!$OMP END CRITICAL + ENDIF +!! !$OMP END CRITICAL ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO ! Store conservative update of CQA in CQ ! The v side length in MF value has to be cancelled with cell length !! One cosine factor is also needed to be divided for SMC grid -!/OMPG!$OMP Parallel DO Private(n) +!/OMPG/!$OMP Parallel DO Private(n) DO n=1, NSEA CQ(n)=CQA(n) + BCNt(n)/( CLATS(n)*FLOAT(IJKCel(3,n)) ) ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO !/ARC !Li Polar cell needs a special area factor, one-level case. !/ARC CQ(NSEA) = CQA(NSEA) + BCNt(NSEA)*PCArea @@ -552,40 +593,61 @@ ENDIF ! Store fineset level conservative flux in FCNt advective one in AFCN -!/OMPG!$OMP Parallel DO Private(i, L, M, FUTRN) +!/OMPG/!$OMP Parallel DO Private(i, L, M, FUTRN) DO i=iuf, juf L=IJKUFc(5,i) M=IJKUFc(6,i) FUTRN = FUMD(i)*ULCFLX(i) - FUDIFX(i) -!/OMPG!$OMP CRITICAL +!! Replace CRITICAL with ATOMIC. JGLi15Jan2019 +!! !$OMP CRITICAL +!! Remove boundary cell flux update or L M > 0. JGLi28Mar2019 + IF( L > 0 ) THEN !! Add sub-grid blocking for refined cells. JGLi18Apr2018 IF( (CTRNX(M)+CTRNX(L)) .GE. 1.96 ) THEN +!/OMPG/!$OMP ATOMIC FCNt(L) = FCNt(L) - FUTRN - FCNt(M) = FCNt(M) + FUTRN ELSE IF( ULCFLX(i) .GE. 0.0 ) THEN +!/OMPG/!$OMP ATOMIC FCNt(L) = FCNt(L) - FUTRN*CTRNX(L) - FCNt(M) = FCNt(M) + FUTRN*CTRNX(M)*CTRNX(L) ELSE +!/OMPG/!$OMP ATOMIC FCNt(L) = FCNt(L) - FUTRN*CTRNX(L)*CTRNX(M) + ENDIF +!/OMPG/!$OMP ATOMIC + ! ChrisB: Re-arranged the RHS term below to make it + ! valid for OMP ATMOIC directive. + AFCN(L) = AFCN(L) - (FUMD(i)*UCFL(L)*FMR - FUDIFX(i)) + ENDIF + IF( M > 0 ) THEN +!! Add sub-grid blocking for refined cells. JGLi18Apr2018 + IF( (CTRNX(M)+CTRNX(L)) .GE. 1.96 ) THEN +!/OMPG/!$OMP ATOMIC + FCNt(M) = FCNt(M) + FUTRN + ELSE IF( ULCFLX(i) .GE. 0.0 ) THEN +!/OMPG/!$OMP ATOMIC + FCNt(M) = FCNt(M) + FUTRN*CTRNX(M)*CTRNX(L) + ELSE +!/OMPG/!$OMP ATOMIC FCNt(M) = FCNt(M) + FUTRN*CTRNX(M) ENDIF - AFCN(L) = AFCN(L) - FUMD(i)*UCFL(L)*FMR + FUDIFX(i) - AFCN(M) = AFCN(M) + FUMD(i)*UCFL(M)*FMR - FUDIFX(i) -!/OMPG!$OMP END CRITICAL +!/OMPG/!$OMP ATOMIC + AFCN(M) = AFCN(M) + (FUMD(i)*UCFL(M)*FMR - FUDIFX(i)) + ENDIF +!! !$OMP END CRITICAL ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO ! Store conservative update in CQA and advective update in CQ ! The side length in MF value has to be cancelled with cell y-length. ! Also divided by another cell x-size as UCFL is in size-1 unit. -!/OMPG!$OMP Parallel DO Private(n) +!/OMPG/!$OMP Parallel DO Private(n) DO n=icl, jcl CQA(n)=CQ(n) + FCNt(n)/FLOAT( IJKCel(3, n)*IJKCel(4, n) ) CQ (n)=CQ(n) + AFCN(n)/FLOAT( IJKCel(3, n)*IJKCel(4, n) ) FCNt(n)=0.0 AFCN(n)=0.0 ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO ! ! Use 3rd order UNO3 scheme. JGLi03Sep2015 IF( FUNO3 ) THEN @@ -596,38 +658,55 @@ ENDIF ! ! Store conservative flux in BCNt -!/OMPG!$OMP Parallel DO Private(j, L, M, FVTRN) +!/OMPG/!$OMP Parallel DO Private(j, L, M, FVTRN) DO j=ivf, jvf L=IJKVFc(5,j) M=IJKVFc(6,j) FVTRN = FVMD(j)*VLCFLY(j) - FVDIFY(j) -!/OMPG!$OMP CRITICAL +!! Replace CRITICAL with ATOMIC. JGLi15Jan2019 +!! !$OMP CRITICAL +!! Remove boundary cell flux update or L M > 0. JGLi28Mar2019 + IF( L > 0 ) THEN !! Add sub-grid blocking for refined cells. JGLi18Apr2018 IF( (CTRNY(M)+CTRNY(L)) .GE. 1.96 ) THEN +!/OMPG/!$OMP ATOMIC BCNt(L) = BCNt(L) - FVTRN - BCNt(M) = BCNt(M) + FVTRN ELSE IF( VLCFLY(j) .GE. 0.0 ) THEN +!/OMPG/!$OMP ATOMIC BCNt(L) = BCNt(L) - FVTRN*CTRNY(L) - BCNt(M) = BCNt(M) + FVTRN*CTRNY(M)*CTRNY(L) ELSE +!/OMPG/!$OMP ATOMIC BCNt(L) = BCNt(L) - FVTRN*CTRNY(L)*CTRNY(M) + ENDIF + ENDIF + IF( M > 0 ) THEN +!! Add sub-grid blocking for refined cells. JGLi18Apr2018 + IF( (CTRNY(M)+CTRNY(L)) .GE. 1.96 ) THEN +!/OMPG/!$OMP ATOMIC + BCNt(M) = BCNt(M) + FVTRN + ELSE IF( VLCFLY(j) .GE. 0.0 ) THEN +!/OMPG/!$OMP ATOMIC + BCNt(M) = BCNt(M) + FVTRN*CTRNY(M)*CTRNY(L) + ELSE +!/OMPG/!$OMP ATOMIC BCNt(M) = BCNt(M) + FVTRN*CTRNY(M) ENDIF -!/OMPG!$OMP END CRITICAL + ENDIF +!! !$OMP END CRITICAL ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO ! Store conservative update of CQA in CQ ! The v side length in MF value has to be cancelled with x-size. ! Also divided by cell y-size as VCFL is in size-1 unit. !! One cosine factor is also needed to be divided for SMC grid. -!/OMPG!$OMP Parallel DO Private(n) +!/OMPG/!$OMP Parallel DO Private(n) DO n=icl, jcl CQ(n)=CQA(n) + BCNt(n)/( CLATS(n)* & & FLOAT( IJKCel(3, n)*IJKCel(4, n) ) ) BCNt(n)=0.0 ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO !/ARC !Li Polar cell needs a special area factor, multi-level case. !/ARC IF( jcl .EQ. NSEA ) THEN !/ARC CQ(NSEA) = CQA(NSEA) + BCNt(NSEA)*PCArea @@ -673,11 +752,11 @@ ! ! 4. Store results in VQ in proper format --------------------------- * ! -!/OMPG!$OMP Parallel DO Private(ISEA) +!/OMPG/!$OMP Parallel DO Private(ISEA) DO ISEA=1, NSEA VQ(ISEA) = MAX ( 0. , CQ(ISEA)*CG(IK,ISEA) ) END DO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO ! RETURN ! @@ -1030,14 +1109,14 @@ ! Uniform diffusion coefficient for all sizes. JGLi24Feb2012 ! CNST0=AKDif*MRFct*FTS -!/OMPG!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & -!/OMPG!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST8,CNST9) +!/OMPG/!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & +!/OMPG/!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST8,CNST9) ! Notice an extra side length L is multiplied to mid-flux to give correct ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!/OMPG!$OMP DO +!/OMPG/!$OMP DO DO i=NUA, NUB @@ -1105,9 +1184,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel ! 999 PRINT*, ' Sub SMCxUNO2 ended.' @@ -1142,10 +1221,10 @@ ! Uniform diffusion coefficient for all sizes. JGLi24Feb2012 ! CNST0=AKDif*MRFct*FTS -!/OMPG!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & -!/OMPG!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST8) +!/OMPG/!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & +!/OMPG/!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST8) -!/OMPG!$OMP DO +!/OMPG/!$OMP DO DO j=NVA, NVB @@ -1220,9 +1299,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel ! 999 PRINT*, ' Sub SMCyUNO2 ended.' @@ -1253,10 +1332,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!/OMPG!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & -!/OMPG!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6) +!/OMPG/!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & +!/OMPG/!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6) -!/OMPG!$OMP DO +!/OMPG/!$OMP DO DO i=NUA, NUB @@ -1317,9 +1396,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel ! 999 PRINT*, ' Sub SMCxUNO2r ended.' @@ -1346,10 +1425,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!/OMPG!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & -!/OMPG!$OMP& Private(CNST,CNST4,CNST5,CNST6,CNST8) +!/OMPG/!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & +!/OMPG/!$OMP& Private(CNST,CNST4,CNST5,CNST6,CNST8) -!/OMPG!$OMP DO +!/OMPG/!$OMP DO DO j=NVA, NVB @@ -1407,9 +1486,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel ! 999 PRINT*, ' Sub SMCyUNO2r ended.' @@ -1447,10 +1526,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!/OMPG!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & -!/OMPG!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) +!/OMPG/!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & +!/OMPG/!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) -!/OMPG!$OMP DO +!/OMPG/!$OMP DO DO i=NUA, NUB @@ -1547,9 +1626,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel ! 999 PRINT*, ' Sub SMCxUNO3 ended.' @@ -1585,10 +1664,10 @@ ! Uniform diffusion coefficient for all sizes. JGLi24Feb2012 ! CNST0=AKDif*MRFct*FTS -!/OMPG!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & -!/OMPG!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) +!/OMPG/!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & +!/OMPG/!$OMP& Private(CNST,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) -!/OMPG!$OMP DO +!/OMPG/!$OMP DO DO j=NVA, NVB @@ -1695,9 +1774,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel ! 999 PRINT*, ' Sub SMCyUNO3 ended.' @@ -1728,10 +1807,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!/OMPG!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & -!/OMPG!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) +!/OMPG/!$OMP Parallel Default(Shared), Private(i, ij, K, L, M, N), & +!/OMPG/!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) -!/OMPG!$OMP DO +!/OMPG/!$OMP DO DO i=NUA, NUB @@ -1811,9 +1890,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel ! 999 PRINT*, ' Sub SMCxUNO3r ended.' @@ -1841,10 +1920,10 @@ ! proportion of flux into the cells. This length will be removed by the ! cell length when the tracer concentration is updated. -!/OMPG!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & -!/OMPG!$OMP& Private(CNST,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) +!/OMPG/!$OMP Parallel Default(Shared), Private(j, K, L, M, N), & +!/OMPG/!$OMP& Private(CNST,CNST4,CNST5,CNST6,CNST7,CNST8,CNST9) -!/OMPG!$OMP DO +!/OMPG/!$OMP DO DO j=NVA, NVB @@ -1925,9 +2004,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel ! 999 PRINT*, ' Sub SMCyUNO3r ended.' @@ -1980,10 +2059,10 @@ DX0I = MRFct/ ( SX * DERA * RADIUS ) DY0I = MRFct/ ( SY * DERA * RADIUS ) -!/OMPG!$OMP Parallel Default(Shared), Private(i, j, K, L, M, N), & -!/OMPG!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6) +!/OMPG/!$OMP Parallel Default(Shared), Private(i, j, K, L, M, N), & +!/OMPG/!$OMP& Private(CNST,CNST0,CNST1,CNST2,CNST3,CNST4,CNST5,CNST6) -!/OMPG!$OMP DO +!/OMPG/!$OMP DO !! Calculate x-gradient by averaging U-face gradients. DO i=1, NUFc @@ -2005,23 +2084,36 @@ ! Side gradients over 2 cell lengths for central cell. ! Face size factor is also included for average. CNST5=CNST1*(CVF(M)-CVF(L))/(CNST2+CNST3) +!/B4B!/OMPG CNST5=INT(CNST5 * 1.0e6) ! CB: B4B -!/OMPG!$OMP CRITICAL +!! Replace CRITICAL with ATOMIC. JGLi15Jan2019 +!! !$OMP CRITICAL ! Store side gradient in two neighbouring cells - AUN(L) = AUN(L) + CNST5 - AUN(M) = AUN(M) + CNST5 -!/OMPG!$OMP END CRITICAL +!! Remove boundary cell flux update or L M > 0. JGLi28Mar2019 + IF( L > 0 ) THEN +!/OMPG/!$OMP ATOMIC + AUN(L) = AUN(L) + CNST5 + ENDIF + IF( M > 0 ) THEN +!/OMPG/!$OMP ATOMIC + AUN(M) = AUN(M) + CNST5 + ENDIF +!! !$OMP END CRITICAL ENDIF END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO + +!/B4B!/OMPG/!$OMP SINGLE +!/B4B!/OMPG AUN = AUN / 1.0e6 ! CB B4B +!/B4B!/OMPG/!$OMP END SINGLE ! Assign averaged side-gradient to GrdX, plus latitude factor ! Note averaging over 2 times of cell y-width factor but AUN ! has already been divied by two cell lengths. -!/OMPG!$OMP DO +!/OMPG/!$OMP DO DO n=1, NSEA ! Cell y-size IJKCel(4,i) is used to cancel the face size-factor in AUN. @@ -2031,9 +2123,9 @@ ENDDO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP DO +!/OMPG/!$OMP DO !! Calculate y-gradient by averaging V-face gradients. DO j=1, NVFc @@ -2055,19 +2147,32 @@ ! Side gradients over 2 cell lengths for central cell. ! Face size factor is also included for average. CNST6=CNST1*(CVF(M)-CVF(L))/(CNST2+CNST3) +!/B4B!/OMPG CNST6 = int(CNST6 * 1.0e6) ! CB B4B -!/OMPG!$OMP CRITICAL +!! Replace CRITICAL with ATOMIC. JGLi15Jan2019 +!! !$OMP CRITICAL +!! Remove boundary cell flux update or L M > 0. JGLi28Mar2019 + IF( L > 0 ) THEN ! Store side gradient in two neighbouring cells - AVN(L) = AVN(L) + CNST6 - AVN(M) = AVN(M) + CNST6 -!/OMPG!$OMP END CRITICAL +!/OMPG/!$OMP ATOMIC + AVN(L) = AVN(L) + CNST6 + ENDIF + IF( M > 0 ) THEN +!/OMPG/!$OMP ATOMIC + AVN(M) = AVN(M) + CNST6 + ENDIF +!! !$OMP END CRITICAL ENDIF END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP DO +!/B4B!/OMPG/!$OMP SINGLE +!/B4B!/OMPG AVN = AVN / 1.0e6 !CB B4B +!/B4B!/OMPG/!$OMP END SINGLE + +!/OMPG/!$OMP DO ! Assign averaged side-gradient to GrdY. DO n=1, NSEA @@ -2077,9 +2182,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel !/ARC !!Li Polar cell (if any) y-gradient is set to zero. !/ARC IF( NSEA .GT. NGLO ) GrdY(NSEA) = 0.0 @@ -2121,10 +2226,10 @@ !/ARC !!Li Save polar cell value !/ARC CNST0 = CVQ(NSEA) -!/OMPG!$OMP Parallel Default(Shared), Private(i, j, L, M, n), & -!/OMPG!$OMP& Private(CNST3,CNST4,CNST5,CNST6) +!/OMPG/!$OMP Parallel Default(Shared), Private(i, j, L, M, n), & +!/OMPG/!$OMP& Private(CNST3,CNST4,CNST5,CNST6) -!/OMPG!$OMP DO +!/OMPG/!$OMP DO !! Calculate x-gradient by averaging U-face gradients. DO i=1, NUFc @@ -2135,18 +2240,31 @@ ! Multi-resolution SMC grid requires flux multiplied by face factor. CNST5=Real( IJKUFc(3,i) )*(CVF(M)+CVF(L)) +!/B4B/!OMPG CNST5=int(CNST5 * 1.0e6) -!/OMPG!$OMP CRITICAL +!! Replace CRITICAL with ATOMIC. JGLi15Jan2019 +!! !$OMP CRITICAL ! Store side gradient in two neighbouring cells - AUN(L) = AUN(L) + CNST5 - AUN(M) = AUN(M) + CNST5 -!/OMPG!$OMP END CRITICAL +!! Remove boundary cell flux update or L M > 0. JGLi28Mar2019 + IF( L > 0 ) THEN +!/OMPG/!$OMP ATOMIC + AUN(L) = AUN(L) + CNST5 + ENDIF + IF( M > 0 ) THEN +!/OMPG/!$OMP ATOMIC + AUN(M) = AUN(M) + CNST5 + ENDIF +!! !$OMP END CRITICAL END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO + +!/B4B!/OMPG/!$OMP SINGLE +!/B4B!/OMPG AUN = AUN / 1.0e6 !CB B4B +!/B4B!/OMPG/!$OMP END SINGLE -!/OMPG!$OMP DO +!/OMPG/!$OMP DO !! Calculate y-gradient by averaging V-face gradients. DO j=1, NVFc @@ -2157,18 +2275,31 @@ ! Face size is required for multi-resolution grid. CNST6=Real( IJKVfc(3,j) )*(CVF(M)+CVF(L)) +!/B4B!/OMPG CNST6=INT(CNST6 * 1e6) -!/OMPG!$OMP CRITICAL +!! Replace CRITICAL with ATOMIC. JGLi15Jan2019 +!! !$OMP CRITICAL ! Store side gradient in two neighbouring cells - AVN(L) = AVN(L) + CNST6 - AVN(M) = AVN(M) + CNST6 -!/OMPG!$OMP END CRITICAL +!! Remove boundary cell flux update or L M > 0. JGLi28Mar2019 + IF( L > 0 ) THEN +!/OMPG/!$OMP ATOMIC + AVN(L) = AVN(L) + CNST6 + ENDIF + IF( M > 0 ) THEN +!/OMPG/!$OMP ATOMIC + AVN(M) = AVN(M) + CNST6 + ENDIF +!! !$OMP END CRITICAL END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO + +!/B4B!/OMPG/!$OMP SINGLE +!/B4B!/OMPG AVN = AVN / 1.0e6 !CB B4B +!/B4B!/OMPG/!$OMP END SINGLE -!/OMPG!$OMP DO +!/OMPG/!$OMP DO ! Assign averaged value back to CVQ. DO n=1, NSEA @@ -2181,9 +2312,9 @@ END DO -!/OMPG!$OMP END DO +!/OMPG/!$OMP END DO -!/OMPG!$OMP END Parallel +!/OMPG/!$OMP END Parallel !/ARC !!Li Polar cell (if any) keep original value. !/ARC IF( NSEA .GT. NGLO ) CVQ(NSEA) = CNST0 @@ -2391,11 +2522,11 @@ HCel(1:NSEA)= DW(1:NSEA) !! Reset shallow water depth with minimum depth -!/OMPG!$OMP Parallel DO Private(k) +!/OMPG/!$OMP Parallel DO Private(k) DO k=1, NSEA IF(DW(k) .LT. DMIN) HCel(k)=DMIN ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO !! Initialize full grid gradient arrays DDDX = 0. @@ -2412,7 +2543,7 @@ DHDY(1:NSEA) = GrHy !! Apply limiter to depth-gradient and copy to full grid. -!/OMPG!$OMP Parallel DO Private(i,j,k,m,n, CNST0, CNST1, CNST2) +!/OMPG/!$OMP Parallel DO Private(i,j,k,m,n, CNST0, CNST1, CNST2) DO n=1,NSEA ! A limiter of gradient <= 0.1 is applied. @@ -2438,12 +2569,12 @@ !/ARC ENDIF END DO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO !! Calculate the depth gradient limiter for refraction. - L = 0 +!/T L = 0 !CB - added T switch -!/OMPG!$OMP Parallel DO Private(i, n, CNST4, CNST6) +!/OMPG/!$OMP Parallel DO Private(i, n, CNST4, CNST6) DO n=1,NSEA !Li Work out magnitude of depth gradient @@ -2452,9 +2583,9 @@ !Li Directional depedent depth gradient limiter. JGLi16Jun2011 IF ( CNST4 .GT. 1.0E-5 ) THEN -!/OMPG!$OMP ATOMIC Update - L = L + 1 -!/OMPG!$OMP END ATOMIC +!/T!/OMPG/!$OMP ATOMIC Update !CB - added T switch +!/T L = L + 1 !CB - added T switch +!/T!/OMPG/!$OMP END ATOMIC !CB - added T switch DO i=1, NTH !Li Refraction is done only when depth gradient is non-zero. @@ -2472,9 +2603,9 @@ ENDIF ENDDO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO -!/T WRITE(NDST,*) ' No. Refraction points =', L +!/T WRITE(NDST,*) ' No. Refraction points =', L !/T 999 PRINT*, ' Sub SMCDHXY ended.' @@ -2516,7 +2647,7 @@ CALL SMCGradn(CXCY, GrHx, GrHy, L) !! Apply limiter to CX-gradient and copy to full grid. -!/OMPG!$OMP Parallel DO Private(i, j, k, m, n, CNST0, CNST1, CNST2) +!/OMPG/!$OMP Parallel DO Private(i, j, k, m, n, CNST0, CNST1, CNST2) DO n=1,NSEA ! A limiter of gradient <= 0.01 is applied. @@ -2542,7 +2673,7 @@ DCXDY(j:j+m-1,i:i+k-1) = GrHy(n) END DO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO !/DEBUGDCXDX WRITE(740+IAPROC,*) 'After non-trivial assination to DCXDX array' @@ -2560,7 +2691,7 @@ CALL SMCGradn(CXCY, GrHx, GrHy, L) !! Apply limiter to CX-gradient and copy to full grid. -!/OMPG!$OMP Parallel DO Private(i, j, k, m, n, CNST0, CNST1, CNST2) +!/OMPG/!$OMP Parallel DO Private(i, j, k, m, n, CNST0, CNST1, CNST2) DO n=1,NSEA ! A limiter of gradient <= 0.1 is applied. @@ -2586,7 +2717,7 @@ DCYDY(j:j+m-1,i:i+k-1) = GrHy(n) END DO -!/OMPG!$OMP END Parallel DO +!/OMPG/!$OMP END Parallel DO !/T 999 PRINT*, ' Sub SMCDCXY ended.' diff --git a/model/ftn/ww3_multi.ftn b/model/ftn/ww3_multi.ftn index e29b70c20..90134bb1a 100644 --- a/model/ftn/ww3_multi.ftn +++ b/model/ftn/ww3_multi.ftn @@ -92,6 +92,8 @@ INTEGER, ALLOCATABLE :: TEND(:,:) LOGICAL :: FLGNML !/MPI INTEGER :: IERR_MPI +!/MPI LOGICAL :: FLHYBR = .FALSE. +!/OMPH INTEGER :: THRLEV !/ !/ ------------------------------------------------------------------- / ! 0. Initialization necessary for driver @@ -99,7 +101,13 @@ ! ! 0.b MPI environment: Here, we use MPI_COMM_WORLD ! +!/OMPH FLHYBR = .TRUE. +!/OMPH ! For hybrid MPI-OpenMP specify required thread level: +!/OMPH IF( FLHYBR ) THEN +!/OMPH CALL MPI_INIT_THREAD(MPI_THREAD_FUNNELED, THRLEV, IERR_MPI) +!/OMPH ELSE !/MPI CALL MPI_INIT ( IERR_MPI ) +!/OMPH ENDIF !/MPI MPI_COMM = MPI_COMM_WORLD !/MPI CALL MPI_COMM_SIZE ( MPI_COMM, NMPROC, IERR_MPI ) !/MPI CALL MPI_COMM_RANK ( MPI_COMM, IMPROC, IERR_MPI ) @@ -108,6 +116,8 @@ ! 0.c Identifying output to "screen" unit ! IF ( IMPROC .EQ. NMPSCR ) WRITE (*,900) +!/OMPH IF ( IMPROC .EQ. NMPSCR ) WRITE (*,905) & +!/OMPH MPI_THREAD_FUNNELED, THRLEV ! !/ ------------------------------------------------------------------- / ! 1. Initialization of all wave models / grids @@ -167,6 +177,9 @@ ! 900 FORMAT (/15X,' *** WAVEWATCH III Multi-grid shell *** '/ & 15X,'================================================='/) +!/OMPH 905 FORMAT ( ' Hybrid MPI/OMP thread support level:'/ & +!/OMPH ' Requested: ', I2/ & +!/OMPH ' Provided: ', I2/ ) ! 999 FORMAT(//' End of program '/ & ' ========================================'/ & diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index c8ab524d8..d817f7e84 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -338,6 +338,8 @@ FLLST_ALL(-7:8) LOGICAL :: DEBUG_NCC = .FALSE. !/NCC LOGICAL :: CFLAG(10) +!/MPI LOGICAL :: FLHYBR = .FALSE. +!/OMPH INTEGER :: THRLEV !/OASIS LOGICAL :: L_MASTER ! !/ @@ -398,11 +400,18 @@ !/SHRD NAPROC = 1 !/SHRD IAPROC = 1 ! +!/OMPH FLHYBR = .TRUE. + !/OASIS IF (OASISED.EQ.1) THEN !/OASIS CALL CPL_OASIS_INIT(MPI_COMM) !/OASIS ELSE !/DEBUGINIT write(740+IAPROC,*), 'Before MPI_INIT, ww3_shel' +!/OMPH ! For hybrid MPI-OpenMP specify required thread level. JGLi06Sep2019 +!/OMPH IF( FLHYBR ) THEN +!/OMPH CALL MPI_INIT_THREAD( MPI_THREAD_FUNNELED, THRLEV, IERR_MPI) +!/OMPH ELSE !/MPI CALL MPI_INIT ( IERR_MPI ) +!/OMPH ENDIF !/DEBUGINIT write(740+IAPROC,*), 'After MPI_INIT, ww3_shel' !/MPI MPI_COMM = MPI_COMM_WORLD !/OASIS END IF @@ -490,6 +499,8 @@ ELSE NDSEN = -1 END IF +!/OMPH IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,905) & +!/OMPH MPI_THREAD_FUNNELED, THRLEV ! ! @@ -2435,6 +2446,9 @@ 15X,'==============================================='/) 901 FORMAT ( ' Comment character is ''',A,''''/) ! +!/OMPH 905 FORMAT ( ' Hybrid MPI/OMP thread support level:'/ & +!/OMPH ' Requested: ', I2/ & +!/OMPH ' Provided: ', I2/ ) 920 FORMAT (/' Input fields : '/ & ' --------------------------------------------------') 921 FORMAT ( ' ',A,2X,A,2X,A) diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index e2ea92428..b03596823 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -1856,6 +1856,11 @@ echo "$rtst -s MPI -w work_MPI -f -p $mpi -n $np $ww3 -o both ww3_tp2.16" >> matrix.body fi + if [ "$smcgr" = 'y' ] && [ "$hybd" = 'y' ]; then + echo "$rtst -s MPI_OMPH -w work_MPI_OMPH -f -p $mpi -n $nr -t $nth $ww3 -o both ww3_tp2.10" >> matrix.body + echo "$rtst -s MPI_OMPH -w work_MPI_OMPH -f -p $mpi -n $nr -t $nth $ww3 -o both ww3_tp2.16" >> matrix.body + fi + # mud/ice cases if [ "$mudice" = 'y' ] && [ "$shrd" = 'y' ] diff --git a/regtests/bin/run_test b/regtests/bin/run_test index 3f8d83ac8..ef132c50c 100755 --- a/regtests/bin/run_test +++ b/regtests/bin/run_test @@ -475,9 +475,10 @@ then if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch fi @@ -623,8 +624,9 @@ then if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch @@ -759,8 +761,9 @@ then if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch fi @@ -892,9 +895,10 @@ then if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch fi @@ -1025,9 +1029,10 @@ then if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch fi @@ -1166,9 +1171,10 @@ then if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch fi @@ -1543,8 +1549,9 @@ then if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch fi @@ -1684,9 +1691,10 @@ do if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch fi @@ -1898,9 +1906,10 @@ do if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only - cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch fi @@ -2059,8 +2068,9 @@ do if [ $force_shrd ] then # build pre- & post-processing programs with SHRD only cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ - sed 's/OMPG //' | sed 's/OMPX //'| \ - sed 's/OMPH //' | sed 's/PDLIB //' > $path_b/switch + sed 's/OMPG //' | sed 's/OMPX //' | \ + sed 's/OMPH //' | sed 's/PDLIB //' | \ + sed 's/B4B //' > $path_b/switch else \cp -f $file_c $path_b/switch fi diff --git a/regtests/ww3_tp2.10/info b/regtests/ww3_tp2.10/info index bb1b470b2..bacb7f64f 100644 --- a/regtests/ww3_tp2.10/info +++ b/regtests/ww3_tp2.10/info @@ -32,6 +32,8 @@ # (Note: mpirun commands differ by local system) # # ./bin/run_test ../model ww3_tp2.10 # # ./bin/run_test -s MPI -n 3 -p mpirun -f ../model ww3_tp2.10 # +# ./bin/run_test -s MPI_OMPH -n 3 -t 3 -p mpirun -f \ # +# ../model ww3_tp.2.10 # # # # Jian-Guo Li, Nov 2013 # # U. K. Met Office # diff --git a/regtests/ww3_tp2.10/input/switch_MPI_OMPH b/regtests/ww3_tp2.10/input/switch_MPI_OMPH new file mode 100644 index 000000000..281342cb8 --- /dev/null +++ b/regtests/ww3_tp2.10/input/switch_MPI_OMPH @@ -0,0 +1 @@ +F90 NOGRB DIST MPI OMPG OMPH B4B SMC FLX0 LN0 ST4 NL0 BT0 DB0 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_tp2.16/info b/regtests/ww3_tp2.16/info index 0ff82116a..d976513a3 100644 --- a/regtests/ww3_tp2.16/info +++ b/regtests/ww3_tp2.16/info @@ -29,6 +29,7 @@ # (Note: mpirun commands differ by local system) # # ./bin/run_test ../model ww3_tp2.16 # # ./bin/run_test -n 3 -p mpirun -f -s MPI ../model ww3_tp2.16 # +# ./bin/run_test -n 3 -t 3 -p mpirun -f -s MPI_OMPH ../model ww3_tp2.16 # # # # Jian-Guo Li, Aug 2017 # # U. K. Met Office # diff --git a/regtests/ww3_tp2.16/input/switch_MPI_OMPH b/regtests/ww3_tp2.16/input/switch_MPI_OMPH new file mode 100644 index 000000000..cca83ebbe --- /dev/null +++ b/regtests/ww3_tp2.16/input/switch_MPI_OMPH @@ -0,0 +1 @@ +F90 DIST MPI OMPG OMPH B4B NOGRB LRB4 SMC ARC ST0 NL0 BT0 DB0 TR0 BS0 XX0 WNT1 WNX1 CRT1 CRX1 FLX0 LN0 IC0 REF0 IS0 FLD0 NC4 From 7ca6e5a623c90a0c26f416e921c484f8acfabc5d Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Tue, 14 Apr 2020 13:51:18 -0400 Subject: [PATCH 33/84] Merging GFS.v16 production branch changes to develop (#184) * Adding OMP loop in wmgridmd for optimizing initialization time * Remove the excessive esmf field gather in wmesmfmd.ftn * Adding allocatable variables to WMUPDV in call to interpolation subroutine to speed up process. Adding OMP directives in more expensive interpolation loop for curvilinear grids. * Declaring WORDS as empty array and adding call nextline when 2nd line for restart exist (#166) * Merging #166 bugfix for WORDS array. Updating wcoss_cray intel build to use qopenmp flag. * Capitalizing for keeping with standards Co-authored-by: RobertoPadilla-NOAA <49441900+RobertoPadilla-NOAA@users.noreply.github.com> --- model/bin/cmplr.env | 2 +- model/ftn/wmesmfmd.ftn | 34 ++++++++++++++++++++++++---------- model/ftn/wmgridmd.ftn | 2 ++ model/ftn/wminitmd.ftn | 5 ++++- model/ftn/wmupdtmd.ftn | 32 ++++++++------------------------ model/ftn/ww3_shel.ftn | 6 +++--- 6 files changed, 42 insertions(+), 39 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index fdaf4621c..8041524f8 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -151,7 +151,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi # omp options - if [ "$cmplr" == "hera" ] || [ "$cmplr" == "wcoss_dell_p3" ]; then + if [ "$cmplr" == "hera" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ]; then optomp="-qopenmp" else optomp="-openmp" diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index a072a3cd1..7974a09fa 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -4730,9 +4730,9 @@ !/ character(ESMF_MAXSTR) :: cname character(500) :: msg - integer :: k, ir, ip, count + integer :: i, j, k, ir, ip, count real(ESMF_KIND_RX) :: floc(n1,n2) - real(ESMF_KIND_RX) :: floc1d(n1) + real(ESMF_KIND_RX) :: floc1d(n1), floc1dary(n1*n2) !/PDLIB real(ESMF_KIND_R8), pointer :: fldptr(:) ! ! -------------------------------------------------------------------- / @@ -4742,16 +4742,30 @@ ! call ESMF_FieldWrite(field,fileName="ww3_import_dump.nc",overwrite=.true.,rc=rc) if ( (GTYPE.eq.RLGTYPE).or.(GTYPE.eq.CLGTYPE) ) then - do k = 0,npet-1 - call ESMF_FieldGather( field, floc, rootPet=k, vm=vm, rc=rc ) - if (ESMF_LogFoundError(rc, PASSTHRU)) return + count = n1 * n2 + floc = 0. + floc1dary = 0. + call ESMF_FieldGather( field, floc, rootPet=0, vm=vm, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + do j=1,n2 + do i=1,n1 + floc1dary(i+(j-1)*n1) = floc(i,j) + enddo enddo - fout(1:n1,1:n2) = floc(1:n1,1:n2) - elseif (GTYPE.eq.UNGTYPE) then - do k = 0,npet-1 - call ESMF_FieldGather( field, floc1d, rootPet=k, vm=vm, rc=rc ) - if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_VMbroadcast( vm, bcstData=floc1dary, count=count, rootPet=0, rc=rc) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + do j=1,n2 + do i=1,n1 + fout(i,j) = floc1dary(i+(j-1)*n1) + enddo enddo + elseif (GTYPE.eq.UNGTYPE) then + count = n1 + floc1d = 0. + call ESMF_FieldGather( field, floc1d, rootPet=0, vm=vm, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_VMbroadcast( vm, bcstData=floc1d, count=count, rootPet=0, rc=rc) + if (ESMF_LogFoundError(rc, PASSTHRU)) return !/PDLIB if ( LPDLIB == .FALSE. ) then do k = 1, n1 fout(k,1) = floc1d(k) diff --git a/model/ftn/wmgridmd.ftn b/model/ftn/wmgridmd.ftn index 0a93386f2..365ada95e 100644 --- a/model/ftn/wmgridmd.ftn +++ b/model/ftn/wmgridmd.ftn @@ -1489,6 +1489,7 @@ DO JBND=1,NY IF ( ABS(MAPSTA(JBND,IBND)) .EQ. 2 ) THEN ! (boundary point) +!/OMPH/!$OMP PARALLEL DO PRIVATE(IDST,JDST,DD),SCHEDULE(DYNAMIC) DO IDST=NX_BEG(IMPROC), NX_END(IMPROC) DO JDST=1, NY IF (ABS(MAPSTA(JDST,IDST)) .EQ. 1) THEN @@ -1508,6 +1509,7 @@ ENDIF END DO ! DO JDST END DO ! DO IDST +!/OMPH/!$OMP END PARALLEL DO ENDIF ! (if BND point) END DO ! DO JBND diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index df68d27d4..73f379b06 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -1121,6 +1121,7 @@ CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) ! IF(J .LE. 2) THEN + WORDS(1:6)='' READ (MDSI,'(A)') LINEIN READ(LINEIN,*,iostat=ierr) WORDS ! @@ -1146,6 +1147,7 @@ END IF ! CHECKPOINT ELSE IF(J .EQ. 4) THEN + WORDS(1:6)='' READ (MDSI,'(A)') LINEIN READ(LINEIN,*,iostat=ierr) WORDS ! @@ -1155,6 +1157,7 @@ READ(WORDS( 4 ), * ) ODAT(19,1) READ(WORDS( 5 ), * ) ODAT(20,1) IF (WORDS(6) .EQ. 'T') THEN + CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(8-1)+1,5*8) END IF ELSE @@ -1450,7 +1453,7 @@ CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) IF(J .LE. 2) THEN OUTFF(J,I)=0 - WORDS(6) ='' + WORDS(1:6) ='' READ (MDSI,'(A)') LINEIN READ(LINEIN,*,iostat=ierr) WORDS IF(J .EQ. 1) THEN diff --git a/model/ftn/wmupdtmd.ftn b/model/ftn/wmupdtmd.ftn index 7d94ecacd..6406b7049 100644 --- a/model/ftn/wmupdtmd.ftn +++ b/model/ftn/wmupdtmd.ftn @@ -1177,6 +1177,7 @@ YGRDC(:,:), HPFACI(:,:), HQFACI(:,:) !RP INTEGER, POINTER :: ICLOSE + REAL, ALLOCATABLE :: XGRTMP(:),YGRTMP(:) !/T1 CHARACTER(LEN=17) :: FORMAT1 !/ !/ ------------------------------------------------------------------- / @@ -1185,7 +1186,6 @@ ! !/S CALL STRACE (IENT, 'WMUPDV') ! - IF ( GRIDS(IMOD)%GTYPE .EQ. UNGTYPE .OR. & GRIDS(JMOD)%GTYPE .EQ. UNGTYPE ) THEN WRITE (MDSE,'(/2A)') ' *** ERROR WMUPDV: ', & @@ -1313,40 +1313,24 @@ !IS THE TOLERANCE USED TO DETERMINE IF TWO VALUES ARE EQUAL IN LOCATION DTOLER = 1E-5 ! 2.a.1 running over the curvilinear grid + ALLOCATE (XGRTMP(NXI),YGRTMP(NYI)) + XGRTMP=XGRDI(1,:) + YGRTMP=YGRDI(:,1) +!/OMPH!$OMP PARALLEL DO PRIVATE(J,I,LONC,LATC,VALUEX,VALUEY) DO J=1,NY DO I=1,NX LONC=XGRDC(J,I) !LON FOR EVERY CURVL GRID POINT LATC=YGRDC(J,I) !LAT FOR EVERY CURVL GRID POINT - !SXC =HPFAC(J,I) !DELTA IN LON FOR CURVI GRID - !SYC =HQFAC(J,I) !DELTA IN LAT FOR CURVI GRID - !CHOOSING THE LARGEST DELTA - !!SXYC=MAX(SXC,SYC) - !!XDI=SXYC/SXI - !!IF(XDI .LT. 2.00) THEN - !! MXA=2 - !!ELSE - !! MXA=2+INT(XDI) - !!ENDIF - - !IF (MXA .EQ. 2) THEN - CALL INTERPOLATE2D(NXI,XGRDI(1,:),NYI,YGRDI(:,1), & + CALL INTERPOLATE2D(NXI,XGRTMP,NYI,YGRTMP, & VXI,VYI,LONC,LATC,DTOLER,VALUEX,VALUEY) - !ELSE - ! COMPUTING THE NUMBER OF POINTS IN THE REGULAR GRID THAT - ! SURROUND THE POINT IN THE CURVILINEAR GRID, COULD BE - ! DIFFERENT FOR LAT AND LONG, IN THE AVERAGING PROCESS. - !NPOIX=INT(SXC/SXI) - !NPOIY=INT(SYC/SYI) - !!VALUEX=AVERAGING(NXI,XGRDI(1,:),NYI,YGRDI(:,1), & - !! VARIN,LONC,LATC,NPOIX,NPOIY) - !ENDIF - VX(I,J)=VALUEX VY(I,J)=VALUEY END DO !END I END DO !END J +!/OMPH/!$OMP END PARALLEL DO + DEALLOCATE (XGRTMP, YGRTMP) ELSE ! diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index d817f7e84..62f33b311 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -1213,6 +1213,7 @@ ! CHECKPOINT IF(J .EQ. 4) THEN ODAT(38)=0 + WORDS(1:6)='' READ (NDSI,'(A)') LINEIN READ(LINEIN,*,iostat=ierr) WORDS READ(WORDS( 1 ), * ) ODAT(16) @@ -1221,6 +1222,7 @@ READ(WORDS( 4 ), * ) ODAT(19) READ(WORDS( 5 ), * ) ODAT(20) IF (WORDS(6) .EQ. 'T') THEN + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(8-1)+1,5*8) WRITE(*,*)(ODAT(I),I=5*(8-1)+1,5*8) END IF @@ -1230,12 +1232,10 @@ ! READ (NDSI,*) (ODAT(I),I=5*(J-1)+1,5*J) ! READ (NDSI,*,IOSTAT=IERR) (ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) IF(J .LE. 2) THEN + WORDS(1:6)='' ! READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) READ (NDSI,'(A)') LINEIN READ(LINEIN,*,iostat=ierr) WORDS - DO I=1,6 -! WRITE(*,*) I, WORDS(I) - END DO ! IF(J .EQ. 1) THEN READ(WORDS( 1 ), * ) ODAT(1) From 96ba41e04e22ca42f282abab52670c3c44d75eb9 Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Mon, 20 Apr 2020 14:58:58 +0100 Subject: [PATCH 34/84] Updated to version numbers (VERXXX variable) in output binary files to (#182) use consistent YYYY-MM-DD convention. --- model/ftn/w3iobcmd.ftn | 2 +- model/ftn/w3iogomd.ftn | 2 +- model/ftn/w3iopomd.ftn | 2 +- model/ftn/w3iorsmd.ftn | 2 +- model/ftn/w3iosfmd.ftn | 2 +- model/ftn/w3iotrmd.ftn | 2 +- model/ftn/w3src4md.ftn | 2 +- model/ftn/ww3_bounc.ftn | 2 +- model/ftn/ww3_bound.ftn | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/model/ftn/w3iobcmd.ftn b/model/ftn/w3iobcmd.ftn index 7e408d8b3..1664de58b 100644 --- a/model/ftn/w3iobcmd.ftn +++ b/model/ftn/w3iobcmd.ftn @@ -62,7 +62,7 @@ !/ !/ Public variables (ID strings) !/ - CHARACTER(LEN=10), PARAMETER :: VERBPTBC = 'III 1.03 ' + CHARACTER(LEN=10), PARAMETER :: VERBPTBC = '2018-03-01' CHARACTER(LEN=32), PARAMETER :: & IDSTRBC = 'WAVEWATCH III BOUNDARY DATA FILE' !/ diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 5fccb8c03..cb0709df1 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -136,7 +136,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VEROGR = 'III 3.00 ' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VEROGR = '2019-10-04' CHARACTER(LEN=30), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III GRID OUTPUT FILE' !/ diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index 6eb629560..a1de32f9e 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -100,7 +100,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VEROPT = 'III 2.01 ' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VEROPT = '2019-10-04' CHARACTER(LEN=31), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III POINT OUTPUT FILE' !/ diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index 1ad581ef4..a6cb704c0 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -55,7 +55,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERINI = 'III 5.10 ' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERINI = '2019-12-29' CHARACTER(LEN=26), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III RESTART FILE' !/ diff --git a/model/ftn/w3iosfmd.ftn b/model/ftn/w3iosfmd.ftn index 37f03641c..7c063bed4 100644 --- a/model/ftn/w3iosfmd.ftn +++ b/model/ftn/w3iosfmd.ftn @@ -78,7 +78,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERPRT = 'III 1.01 ' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERPRT = '2018-07-25' CHARACTER(LEN=35), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III PARTITIONED DATA FILE' !/ diff --git a/model/ftn/w3iotrmd.ftn b/model/ftn/w3iotrmd.ftn index d60b06a4c..78d4e989f 100644 --- a/model/ftn/w3iotrmd.ftn +++ b/model/ftn/w3iotrmd.ftn @@ -59,7 +59,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERTRK = 'III 1.02 ' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERTRK = '2018-06-08' CHARACTER(LEN=34), PARAMETER, PRIVATE :: & IDSTRI = 'WAVEWATCH III TRACK LOCATIONS DATA', & IDSTRO = 'WAVEWATCH III TRACK OUTPUT SPECTRA' diff --git a/model/ftn/w3src4md.ftn b/model/ftn/w3src4md.ftn index 46b2610b2..22c537840 100755 --- a/model/ftn/w3src4md.ftn +++ b/model/ftn/w3src4md.ftn @@ -1329,7 +1329,7 @@ INTEGER :: INIUSTAR, INIALPHA, INILEVTAIL, IERR CHARACTER(160) :: FNAMETAB LOGICAL :: NOFILE - CHARACTER(LEN=10), PARAMETER :: VERGRD = 'III 4.12 ' + CHARACTER(LEN=10), PARAMETER :: VERGRD = '2018-06-08' CHARACTER(LEN=35), PARAMETER :: IDSTR = 'WAVEWATCH III ST4 TABLE FOR STRESS ' CHARACTER(LEN=10) :: VERTST=' ' CHARACTER(LEN=35) :: IDTST=' ' diff --git a/model/ftn/ww3_bounc.ftn b/model/ftn/ww3_bounc.ftn index 48e7c3db1..55e1a0a1f 100644 --- a/model/ftn/ww3_bounc.ftn +++ b/model/ftn/ww3_bounc.ftn @@ -150,7 +150,7 @@ CHARACTER :: COMSTR*1, LINE*512, FILENAME*512, & INXOUT*5, FILE*128 CHARACTER*50 :: TIMEUNITS, CALENDAR - CHARACTER*10 :: VERTEST ! = 'III 1.03 ' + CHARACTER*10 :: VERTEST ! = '2018-03-01' CHARACTER*32 :: IDTST != 'WAVEWATCH III BOUNDARY DATA FILE' CHARACTER*512, ALLOCATABLE :: SPECFILES(:) CHARACTER, ALLOCATABLE :: STATION(:,:) diff --git a/model/ftn/ww3_bound.ftn b/model/ftn/ww3_bound.ftn index 496b7cd57..34df94682 100644 --- a/model/ftn/ww3_bound.ftn +++ b/model/ftn/ww3_bound.ftn @@ -114,7 +114,7 @@ INTEGER :: TIME1(2),TIME2(2) CHARACTER :: COMSTR*1, LINE*80 CHARACTER*5 :: INXOUT - CHARACTER*10 :: VERTEST ! = 'III 1.03 ' + CHARACTER*10 :: VERTEST ! = '2018-03-01' CHARACTER*32 :: IDTST != 'WAVEWATCH III BOUNDARY DATA FILE' CHARACTER*120, ALLOCATABLE :: SPECFILES(:) CHARACTER*120 :: FILENAME From 19f3126c832b26ae4c5b27bca6c1dcc676755602 Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Tue, 21 Apr 2020 14:28:44 -0400 Subject: [PATCH 35/84] Orion port (#190) * add orion to the list of machines and adapt matrix_ncep for orion environments * modify bin/matrix_ncep to include partion on Orion for regression test running in 8 hr wall time --- model/bin/cmplr.env | 4 ++-- model/bin/w3_setup | 4 ++-- model/esmf/Makefile | 2 +- regtests/bin/matrix_ncep | 20 +++++++++++++++++++- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 8041524f8..81a553bd2 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -110,7 +110,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || [ "$cmplr" == "so_intel_prof" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || [ "$cmplr" == "datarmor_intel_prof" ] || \ [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ - [ "$cmplr" == "theia" ] || [ "$cmplr" == "hera" ] ; then + [ "$cmplr" == "theia" ] || [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -151,7 +151,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi # omp options - if [ "$cmplr" == "hera" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ]; then + if [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ]; then optomp="-qopenmp" else optomp="-openmp" diff --git a/model/bin/w3_setup b/model/bin/w3_setup index 1c3a2c184..2010a62b2 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -415,7 +415,7 @@ then [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ - [ "$cmplr" == "hera" ] || \ + [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ @@ -441,7 +441,7 @@ then [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ - [ "$cmplr" == "hera" ] || \ + [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ diff --git a/model/esmf/Makefile b/model/esmf/Makefile index 64b3aec96..4043663fd 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -35,7 +35,7 @@ ifeq ($(WW3_COMP),Portland) else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","pgi" "datarmor_pgi" "datarmor_pgi_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -byteswapio # intel -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","theia" "Intel" "hera")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","theia" "Intel" "hera" "orion")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_phase2" "wcoss_cray" "wcoss_dell_p3")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index 3c4f23b7e..ab7d64913 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -40,6 +40,7 @@ # Set batchq queue, choose modules and other custom variables to fit system and # to define headers etc (default to original version if empty) ishera=`hostname | grep hfe` +isorion=`hostname | grep Orion` if [ $ishera ] then # If no other h, assuming Hera @@ -49,6 +50,14 @@ then modmpi='impi/2018.0.4' modnetcdf='netcdf/4.6.1' metispath='/scratch2/COASTAL/coastal/save/Ali.Abdolali/parmetis-4.0.3' +elif [ $isorion ] +then + cmplr=orion + batchq="slurm" + modcomp='intel/2018.4' + modmpi='impi/2018.4' + modnetcdf='netcdf/4.7.2' + metispath='/work/noaa/marine/ali.abdolali/Source/parmetis-4.0.3' else batchq= fi @@ -58,7 +67,16 @@ fi echo '#!/bin/sh --login' > matrix.head echo ' ' >> matrix.head -if [ $batchq = "slurm" ] +if [ $batchq = "slurm" ] && [ $isorion ] +then + echo '#SBATCH -n 24' >> matrix.head + echo '#SBATCH -q batch' >> matrix.head + echo '#SBATCH -t 08:00:00' >> matrix.head + echo '#SBATCH -A marine-cpu' >> matrix.head + echo '#SBATCH -J ww3_regtest' >> matrix.head + echo '#SBATCH -o matrix.out' >> matrix.head + echo '#SBATCH -p orion' >> matrix.head +elif [ $batchq = "slurm" ] then echo '#SBATCH -n 24' >> matrix.head echo '#SBATCH -q batch' >> matrix.head From 77f9291af3b6d2e8cf10dcc77e86e92dd809fd22 Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Thu, 23 Apr 2020 16:50:24 +0200 Subject: [PATCH 36/84] Feature/st4tail (#189) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * minor correction to fit to develop branch * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * keep updates from develop branch manually reintegrated development from Fabrice about ST4 * correct conflict in previous merge * set WW3 version to 7.XX until a milestone is assigned * update matrix datarmor with 2019 compilers * update matrix_datarmor * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * reduce matrix to 28 procs update SDSC1 to SDSBCHOICE in ST4 * update SDSC1 to SDSBCHOICE * remove ST4 namelist SDSBR2, SDSLFGEN, SDSHFGEN update netcdf version to 3 * RREF initialized just after allocation to get b4b with unst regtest ww3_tp2.7 RREF is not used for unst grid but it's written in mod_def anyway Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- model/ftn/gx_outp.ftn | 8 +- model/ftn/w3gdatmd.ftn | 28 +- model/ftn/w3iogomd.ftn | 20 +- model/ftn/w3iogrmd.ftn | 12 +- model/ftn/w3src4md.ftn | 604 +++++++++--------- model/ftn/w3srcemd.ftn | 15 +- model/ftn/w3triamd.ftn | 6 +- model/ftn/ww3_grid.ftn | 145 +++-- model/ftn/ww3_ounp.ftn | 32 +- model/ftn/ww3_outp.ftn | 12 +- regtests/bin/matrix_datarmor | 56 +- .../mww3_test_07/input/namelists_refug.nml | 2 +- .../mww3_test_07/input/ww3_grid_refug.inp | 2 +- .../ww3_tp1.8/input/namelists_VALIDATION.nml | 2 +- regtests/ww3_tp1.8/input/ww3_grid.inp | 2 +- regtests/ww3_tp2.15/input/namelists_5km.nml | 2 +- .../ww3_tp2.15/input/namelists_ADRIATIC.nml | 2 +- regtests/ww3_tp2.15/input/ww3_grid.inp | 2 +- regtests/ww3_tp2.15/input/ww3_grid_5km.inp | 2 +- regtests/ww3_tp2.17/input/namelists_a.nml | 6 +- regtests/ww3_tp2.17/input/namelists_b.nml | 6 +- regtests/ww3_tp2.17/input/namelists_c.nml | 6 +- regtests/ww3_tp2.17/input/namelists_inla.nml | 6 +- regtests/ww3_tp2.17/input/namelists_inlb.nml | 6 +- regtests/ww3_tp2.17/input/namelists_inlc.nml | 6 +- regtests/ww3_tp2.17/input/ww3_grid_a.inp | 6 +- regtests/ww3_tp2.17/input/ww3_grid_b.inp | 6 +- regtests/ww3_tp2.17/input/ww3_grid_c.inp | 6 +- regtests/ww3_tp2.17/input/ww3_grid_inla.inp | 6 +- regtests/ww3_tp2.17/input/ww3_grid_inlb.inp | 6 +- regtests/ww3_tp2.17/input/ww3_grid_inlc.inp | 6 +- regtests/ww3_tp2.5/input_REF/ww3_ounp.inp | 2 +- regtests/ww3_tp2.5/input_REF/ww3_ounp.nml | 1 - 33 files changed, 552 insertions(+), 477 deletions(-) diff --git a/model/ftn/gx_outp.ftn b/model/ftn/gx_outp.ftn index e95481f89..fa0056764 100644 --- a/model/ftn/gx_outp.ftn +++ b/model/ftn/gx_outp.ftn @@ -680,7 +680,7 @@ !/ST3 REAL :: FMEANS, FMEANWS, TAUWX, TAUWY, AMAX, & !/ST3 TAUWNX, TAUWNY !/ST4 REAL :: FMEANWS, TAUWX, TAUWY, AMAX, & -!/ST4 TAUWNX, TAUWNY, FMEAN1, WHITECAP(1:4) +!/ST4 TAUWNX, TAUWNY, FMEAN1, WHITECAP(1:4), DLWMEAN !/ST6 REAL :: AMAX, TAUWX, TAUWY, TAUWNX, TAUWNY !/BS1 REAL :: TAUSCX, TAUSCY !/BT3 REAL :: D50 @@ -928,7 +928,7 @@ !/ST3 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS) !/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & !/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD, & -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN) !/ST6 CALL W3SPR6 (A, CG, WN, EMEAN, FMEAN, WNMEAN, AMAX, FP) ! !/FLX1 CALL W3FLX1 ( ZWND, UABS, UDIRR, & @@ -956,7 +956,7 @@ !/ST4 TAUWNX, TAUWNY, XWI, DIA, LLWS, IX, IY, LAMBDA ) !/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & !/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD, & -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN) !/FLX2 CALL W3FLX2 ( ZWND, DEPTH, FP, UABS, UDIRR, & !/FLX2 USTAR, USTD, Z0, CD ) !/FLX3 CALL W3FLX3 ( ZWND, DEPTH, FP, UABS, UDIRR, & @@ -1002,7 +1002,7 @@ !/ST3 CALL W3SDS3 ( A, WN, CG, EMEAN, FMEANS, WNMEAN, & !/ST3 USTAR, USTD, DEPTH, XDS, DIA, IX, IY ) !/ST4 CALL W3SDS4 ( A, WN, CG, & -!/ST4 USTAR, USTD, DEPTH, XDS, DIA, IX, IY, LAMBDA, WHITECAP ) +!/ST4 USTAR, USTD, DEPTH, XDS, DIA, IX, IY, LAMBDA, WHITECAP , DLWMEAN) !/ST6 CALL W3SDS6 ( A, CG, WN, XDS, DIA ) !/ST6 IF (SWL6S6) CALL W3SWL6 ( A, CG, WN, XWL, DIA ) !/STX CALL W3SDSX diff --git a/model/ftn/w3gdatmd.ftn b/model/ftn/w3gdatmd.ftn index 141a810c9..d190e19c9 100644 --- a/model/ftn/w3gdatmd.ftn +++ b/model/ftn/w3gdatmd.ftn @@ -91,6 +91,7 @@ !/ (Q. Liu, UoM) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ 27-Aug-2018 : Add BTBETA parameter ( version 6.06 ) +!/ 22-Feb-2020 : Add AIRGB and AIRCMIN ( version 7.XX ) !/ !/ !/ Copyright 2009-2013 National Weather Service (NWS), @@ -630,7 +631,7 @@ DTMIN, DMIN, CTMAX, FICE0, FICEN, FICEL, & PFMOVE, STEXU, STEYU, STEDU, IICEHMIN, & IICEHINIT, ICESCALES(4), IICEHFAC, IICEHDISP, & - IICEDDISP, IICEFDISP, BTBETA + IICEDDISP, IICEFDISP, BTBETA, AAIRCMIN, AAIRGB REAL(8) :: GRIDSHIFT ! see notes in WMGHGH @@ -792,13 +793,13 @@ !/ST4 REAL, POINTER :: DCKI(:,:), SATWEIGHTS(:,:),CUMULW(:,:),QBI(:,:) !/ST4 REAL :: AALPHA, BBETA, ZZ0MAX, ZZ0RAT, ZZALP,& !/ST4 SSINTHP, TTAUWSHELTER, SSWELLF(1:7), & -!/ST4 SSDSC(1:11), SSDSBR, & +!/ST4 SSDSC(1:21), SSDSBR, & !/ST4 SSDSP, WWNMEANP, SSTXFTF, SSTXFTWN, & -!/ST4 FFXPM, FFXFM, FFXFA, FFXFI, FFXFD, & +!/ST4 FFXPM, FFXFM, FFXFA, & !/ST4 SSDSBRF1, SSDSBRF2, SSDSBINT,SSDSBCK,& !/ST4 SSDSHCK, SSDSABK, SSDSPBK, SSINBR !/ST4 REAL :: ZZWND -!/ST4 REAL :: SSDSCOS, SSDSDTH, SSDSBR2, SSDSBM(0:4) +!/ST4 REAL :: SSDSCOS, SSDSDTH, SSDSBT, SSDSBM(0:4) ! !/ST6 REAL :: SIN6A0, SDS6A1, SDS6A2, SWL6B1, & !/ST6 SIN6WS, SIN6FC @@ -997,7 +998,7 @@ FICEL, PFMOVE, STEXU, STEYU, STEDU, & IICEHMIN, IICEHINIT, ICESCALES(:), & IICEHFAC, IICEHDISP, IICEDDISP, IICEFDISP, & - BTBETA + BTBETA, AAIRCMIN, AAIRGB REAL(8),POINTER :: GRIDSHIFT ! see notes in WMGHGH !/RTD REAL, POINTER :: PoLat, PoLon !/RTD REAL, POINTER :: AnglD(:) @@ -1091,20 +1092,20 @@ !/ST3 SSINTHP, TTAUWSHELTER, SSWELLF(:), & !/ST3 SSDSC1, SSDSC2, SSDSC3, SSDSBR, & !/ST3 SSDSP, WWNMEANP, SSTXFTF, SSTXFTWN, & -!/ST3 SSDSC4, SSDSC5, SSDSC6, SSDSBR2, & +!/ST3 SSDSC4, SSDSC5, SSDSC6, SSDSBT, & !/ST3 DDELTA1, DDELTA2, & !/ST3 SSDSCOS, SSDSDTH, SSDSBM(:) !/ST4 INTEGER, POINTER :: SSWELLFPAR, SSDSISO,SSDSBRFDF, & !/ST4 IKTAB(:,:), SATINDICES(:,:),SSDSDIK !/ST4 REAL, POINTER :: DCKI(:,:), SATWEIGHTS(:,:),CUMULW(:,:),QBI(:,:) !/ST4 REAL, POINTER :: ZZWND, AALPHA, BBETA, ZZ0MAX, ZZ0RAT,& -!/ST4 ZZALP, FFXFA, FFXFI, FFXFD, & +!/ST4 ZZALP, FFXFA, & !/ST4 FFXFM, FFXPM, SSDSBRF1, SSDSBRF2, & !/ST4 SSDSBINT, SSDSBCK, SSDSHCK, SSDSABK, & !/ST4 SSDSPBK, SSINBR,SSINTHP,TTAUWSHELTER,& !/ST4 SSWELLF(:), SSDSC(:), SSDSBR, & !/ST4 SSDSP, WWNMEANP, SSTXFTF, SSTXFTWN, & -!/ST4 SSDSBR2, SSDSCOS, SSDSDTH, SSDSBM(:) +!/ST4 SSDSBT, SSDSCOS, SSDSDTH, SSDSBM(:) !/ST6 REAL, POINTER :: SIN6A0, SDS6A1, SDS6A2, SWL6B1, & !/ST6 SIN6WS, SIN6FC !/ST6 INTEGER, POINTER :: SDS6P1, SDS6P2 @@ -1508,6 +1509,10 @@ !/REF1 GRIDS(IMOD)%REFPARS(10), & !/REF1 STAT=ISTAT ) !/REF1 CHECK_ALLOC_STATUS ( ISTAT ) +! +!/REF1 GRIDS(IMOD)%RREF(:)=.FALSE. +!/REF1 GRIDS(IMOD)%REFPARS(:)=0. +! !/REF1! Memory footprint can be reduced by defining REFLC and REFLD only over nodes !/REF1! where reflection can occur. !/REF1 ALLOCATE ( GRIDS(IMOD)%REFLC(4,0:NSEA), & @@ -1993,6 +1998,8 @@ STEYU => GRIDS(IMOD)%STEYU STEDU => GRIDS(IMOD)%STEDU BTBETA => GRIDS(IMOD)%BTBETA + AAIRGB => GRIDS(IMOD)%AAIRGB + AAIRCMIN => GRIDS(IMOD)%AAIRCMIN ! GINIT => GRIDS(IMOD)%GINIT GUGINIT => GRIDS(IMOD)%GUGINIT @@ -2257,7 +2264,7 @@ !/ST4 SSWELLF => MPARS(IMOD)%SRCPS%SSWELLF !/ST4 SSDSC => MPARS(IMOD)%SRCPS%SSDSC !/ST4 SSDSBR => MPARS(IMOD)%SRCPS%SSDSBR -!/ST4 SSDSBR2 => MPARS(IMOD)%SRCPS%SSDSBR2 +!/ST4 SSDSBT => MPARS(IMOD)%SRCPS%SSDSBT !/ST4 SSDSBRF1 => MPARS(IMOD)%SRCPS%SSDSBRF1 !/ST4 SSDSBRF2 => MPARS(IMOD)%SRCPS%SSDSBRF2 !/ST4 SSDSBRFDF => MPARS(IMOD)%SRCPS%SSDSBRFDF @@ -2271,8 +2278,6 @@ !/ST4 WWNMEANP => MPARS(IMOD)%SRCPS%WWNMEANP !/ST4 FFXFM => MPARS(IMOD)%SRCPS%FFXFM !/ST4 FFXFA => MPARS(IMOD)%SRCPS%FFXFA -!/ST4 FFXFI => MPARS(IMOD)%SRCPS%FFXFI -!/ST4 FFXFD => MPARS(IMOD)%SRCPS%FFXFD !/ST4 FFXPM => MPARS(IMOD)%SRCPS%FFXPM !/ST4 SSDSDTH => MPARS(IMOD)%SRCPS%SSDSDTH !/ST4 SSTXFTF => MPARS(IMOD)%SRCPS%SSTXFTF @@ -2906,7 +2911,6 @@ ! ! 1. Preparations --------------------------------------------------- * ! -!/REF1 RREF=.FALSE. !JDM initializing to false helps with b4b mod_defs !/REF1 IF (REFPARS(2).GT.0) RREF(2)=.TRUE. !/REF1 IF (REFPARS(3).GT.0) RREF(3)=.TRUE. !/REF1 IF (REFPARS(4).GT.0) RREF(4)=.TRUE. diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index cb0709df1..055b4720f 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -198,7 +198,7 @@ ! !/ ------------------------------------------------------------------- / USE CONSTANTS - USE W3GDATMD, ONLY: E3DF, P2MSF, US3DF, USSPF, STEXU, STEYU, STEDU + USE W3GDATMD, ONLY: E3DF, P2MSF, US3DF, USSPF USE W3ODATMD, ONLY: NOGRP, NGRPP !/S USE W3SERVMD, ONLY: STRACE ! @@ -361,7 +361,7 @@ !/ ------------------------------------------------------------------- / !/ Local parameters !/ - INTEGER :: I, IFI, IFJ, IOUT + INTEGER :: IFI, IFJ, IOUT !/S INTEGER, SAVE :: IENT = 0 CHARACTER(LEN=1) :: AFLG LOGICAL :: FLT, NAMES @@ -803,7 +803,7 @@ ! !/ ------------------------------------------------------------------- / USE CONSTANTS - USE W3ODATMD, ONLY: NOGRP, NGRPP, NOGE, IDOUT + USE W3ODATMD, ONLY: NOGRP, NGRPP, IDOUT USE W3SERVMD, ONLY: STRSPLIT, STR_TO_UPPER USE W3GDATMD, ONLY: US3DF, USSPF !/S USE W3SERVMD, ONLY: STRACE @@ -1268,6 +1268,7 @@ EBD(NK,NSEAL), EC(NSEAL), & ABR(NSEAL), UBR(NSEAL), UBS(NSEAL), & ABX2(NSEAL), ABY2(NSEAL), & + AB2X(NSEAL), AB2Y(NSEAL), & ABST(NSEAL), ABXX(NSEAL), & ABYY(NSEAL), ABXY(NSEAL), & ABYX(NSEAL), EET1(NSEAL), & @@ -1420,6 +1421,8 @@ ABY = 0. ABX2 = 0. ABY2 = 0. + AB2X = 0. + AB2Y = 0. ABXX = 0. ABYY = 0. ABXY = 0. @@ -1438,9 +1441,12 @@ AB (JSEA) = AB (JSEA) + A(ITH,IK,JSEA) ABX(JSEA) = ABX(JSEA) + A(ITH,IK,JSEA)*ECOS(ITH) ABY(JSEA) = ABY(JSEA) + A(ITH,IK,JSEA)*ESIN(ITH) +! These are the integrals with cos^2 and sin^2 + ABX2(JSEA) = ABX2(JSEA) + A(ITH,IK,JSEA)*EC2(ITH) + ABY2(JSEA) = ABY2(JSEA) + A(ITH,IK,JSEA)*ES2(ITH) ! Using trig identities to represent cos2theta and sin2theta. - ABX2(JSEA) = ABX2(JSEA) + A(ITH,IK,JSEA)*(2*EC2(ITH) - 1) - ABY2(JSEA) = ABY2(JSEA) + A(ITH,IK,JSEA)*(2*ESC(ITH)) + AB2X(JSEA) = AB2X(JSEA) + A(ITH,IK,JSEA)*(2*EC2(ITH) - 1) + AB2Y(JSEA) = AB2Y(JSEA) + A(ITH,IK,JSEA)*(2*ESC(ITH)) ABYX(JSEA) = ABYX(JSEA) + A(ITH,IK,JSEA)*ESC(ITH) IF (ITH.LE.NTH/2) THEN ABST(JSEA) = ABST(JSEA) + & @@ -1590,8 +1596,8 @@ IF ( FLOLOC( 3, 3).AND.(IK.GE.E3DF(2,3).AND.IK.LE.E3DF(3,3))) & STH1M(JSEA,IK)= SQRT(ABS(2.*(1-M1)))*RADE IF ( FLOLOC( 3, 4).AND.(IK.GE.E3DF(2,4).AND.IK.LE.E3DF(3,4))) & - TH2M(JSEA,IK)= MOD ( 270. - RADE*0.5*ATAN2(ABY2(JSEA),ABX2(JSEA)) , 180. ) - M2 = SQRT(ABX2(JSEA)**2+ABY2(JSEA)**2)/MAX(1E-20,AB(JSEA)) + TH2M(JSEA,IK)= MOD ( 270. - RADE*0.5*ATAN2(ABY2(JSEA),AB2X(JSEA)) , 180. ) + M2 = SQRT(AB2X(JSEA)**2+AB2Y(JSEA)**2)/MAX(1E-20,AB(JSEA)) IF ( FLOLOC( 3, 5).AND.(IK.GE.E3DF(2,5).AND.IK.LE.E3DF(3,5))) & STH2M(JSEA,IK)= SQRT(ABS(0.5*(1-M2)))*RADE END DO diff --git a/model/ftn/w3iogrmd.ftn b/model/ftn/w3iogrmd.ftn index dc365c92e..f369561c3 100644 --- a/model/ftn/w3iogrmd.ftn +++ b/model/ftn/w3iogrmd.ftn @@ -1077,12 +1077,12 @@ !/ST4 ZZWND, AALPHA, ZZ0MAX, BBETA, SSINTHP, ZZALP, & !/ST4 TTAUWSHELTER, SSWELLFPAR, SSWELLF, SSINBR, & !/ST4 ZZ0RAT, SSDSC, & -!/ST4 SSDSISO, SSDSBR, SSDSBR2, SSDSBM, SSDSP, & +!/ST4 SSDSISO, SSDSBR, SSDSBT, SSDSBM, SSDSP, & !/ST4 SSDSCOS, SSDSDTH, WWNMEANP, WWNMEANPTAIL,SSTXFTF,& !/ST4 SSTXFTFTAIL, SSTXFTWN, SSTXFTF, SSTXFTWN, & !/ST4 SSDSBRF1, SSDSBRF2, SSDSBRFDF,SSDSBCK, SSDSABK, & -!/ST4 SSDSPBK, SSDSBINT, FFXPM, FFXFM, FFXFA, FFXFI, & -!/ST4 FFXFD, SSDSHCK, DELUST, DELTAIL, DELTAUW, & +!/ST4 SSDSPBK, SSDSBINT, FFXPM, FFXFM, FFXFA, & +!/ST4 SSDSHCK, DELUST, DELTAIL, DELTAUW, & !/ST4 DELU, DELALP, TAUT, TAUHFT, TAUHFT2, & !/ST4 IKTAB, DCKI, QBI, SATINDICES, SATWEIGHTS, & !/ST4 DIKCUMUL, CUMULW @@ -1091,12 +1091,12 @@ !/ST4 ZZWND, AALPHA, ZZ0MAX, BBETA, SSINTHP, ZZALP, & !/ST4 TTAUWSHELTER, SSWELLFPAR, SSWELLF, SSINBR, & !/ST4 ZZ0RAT, SSDSC, & -!/ST4 SSDSISO, SSDSBR, SSDSBR2, SSDSBM, SSDSP, & +!/ST4 SSDSISO, SSDSBR, SSDSBT, SSDSBM, SSDSP, & !/ST4 SSDSCOS, SSDSDTH, WWNMEANP, WWNMEANPTAIL,SSTXFTF,& !/ST4 SSTXFTFTAIL, SSTXFTWN, SSTXFTF, SSTXFTWN, & !/ST4 SSDSBRF1, SSDSBRF2, SSDSBRFDF,SSDSBCK, SSDSABK, & -!/ST4 SSDSPBK, SSDSBINT, FFXPM, FFXFM, FFXFA, FFXFI, & -!/ST4 FFXFD, SSDSHCK, DELUST, DELTAIL, DELTAUW, & +!/ST4 SSDSPBK, SSDSBINT, FFXPM, FFXFM, FFXFA, & +!/ST4 SSDSHCK, DELUST, DELTAIL, DELTAUW, & !/ST4 DELU, DELALP, TAUT, TAUHFT, TAUHFT2, & !/ST4 IKTAB, DCKI, QBI, SATINDICES, SATWEIGHTS, & !/ST4 DIKCUMUL, CUMULW diff --git a/model/ftn/w3src4md.ftn b/model/ftn/w3src4md.ftn index 22c537840..269ef392e 100755 --- a/model/ftn/w3src4md.ftn +++ b/model/ftn/w3src4md.ftn @@ -76,27 +76,28 @@ REAL, PARAMETER :: TAUWMAX = 2.2361 !SQRT(5.) INTEGER :: DIKCUMUL ! Size of wave height table for integrating the PDF of wave heights - INTEGER, PARAMETER :: NKHI=100 - REAL, PARAMETER :: FAC_KD1=1.01, FAC_KD2=1000., KHSMAX=2., KHMAX=2. + INTEGER, PARAMETER :: NKHI=100, FAC_KD2=1000 + REAL, PARAMETER :: FAC_KD1=1.01, KHSMAX=2., KHMAX=2. REAL, PARAMETER ::KDMAX=200000. !/ CONTAINS !/ ------------------------------------------------------------------- / SUBROUTINE W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, WNMEAN, & AMAX, U, UDIR, USTAR, USDIR, TAUWX, TAUWY, CD, Z0,& - CHARN, LLWS, FMEANWS) + CHARN, LLWS, FMEANWS, DLWMEAN) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III SHOM | !/ ! F. Ardhuin ! !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 08-Jun-2018 | +!/ | Last update : 22-Feb-2020 | !/ +-----------------------------------+ !/ !/ 03-Oct-2007 : Origination. ( version 3.13 ) !/ 13-Jun-2011 : Adds f_m0,-1 as FMEAN in the outout ( version 4.04 ) !/ 08-Jun-2018 : use STRACE and FLUSH ( version 6.04 ) +!/ 22-Feb-2020 : Merge Romero (2019) and cleanup ( version 7.XX ) !/ ! 1. Purpose : ! @@ -129,6 +130,7 @@ ! CHARN Real O Corresponding Charnock coefficient ! LLWS L.A. I Wind sea true/false array for each component ! FMEANWS Real O Mean frequency of wind sea, used for tail +! DLWMEAN Real O Mean Long wave direction (L. Romero 2019) ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -161,7 +163,8 @@ USE CONSTANTS, ONLY: TPIINV USE W3GDATMD, ONLY: NK, NTH, NSPEC, SIG, DTH, DDEN, WWNMEANP, & WWNMEANPTAIL, FTE, FTF, SSTXFTF, SSTXFTWN,& - SSTXFTFTAIL, SSWELLF + SSTXFTFTAIL, SSWELLF, ESIN, ECOS, AAIRCMIN, & + AAIRGB !/S USE W3SERVMD, ONLY: STRACE !/T USE W3ODATMD, ONLY: NDST !/T USE W3ODATMD, ONLY: NDST @@ -176,7 +179,7 @@ LOGICAL, INTENT(IN) :: LLWS(NSPEC) REAL, INTENT(INOUT) :: USTAR ,USDIR REAL, INTENT(OUT) :: EMEAN, FMEAN, FMEAN1, WNMEAN, AMAX, & - CD, Z0, CHARN, FMEANWS + CD, Z0, CHARN, FMEANWS, DLWMEAN !/ !/ ------------------------------------------------------------------- / !/ Local parameters @@ -185,7 +188,7 @@ !/S INTEGER, SAVE :: IENT = 0 REAL :: TAUW, EBAND, EMEANWS,UNZ, & - EB(NK),EB2(NK),ALFA(NK) + EB(NK),EB2(NK),ELCS, ELSN !/ !/ ------------------------------------------------------------------- / !/ @@ -201,6 +204,9 @@ FMEAN1 = 0. WNMEAN = 0. AMAX = 0. + DLWMEAN =0. + ELCS =0. + ELSN =0. ! ! 1. Integral over directions and maximum --------------------------- * ! @@ -210,15 +216,18 @@ DO ITH=1, NTH IS=ITH+(IK-1)*NTH EB(IK) = EB(IK) + A(ITH,IK) + ELCS = ELCS + A(ITH,IK)*ECOS(IS)*DDEN(IK) / CG(IK) + ELSN = ELSN + A(ITH,IK)*ESIN(IS)*DDEN(IK) / CG(IK) IF (LLWS(IS)) EB2(IK) = EB2(IK) + A(ITH,IK) AMAX = MAX ( AMAX , A(ITH,IK) ) END DO END DO + + DLWMEAN=ATAN2(ELSN,ELCS); ! ! 2. Integrate over directions -------------------------------------- * ! DO IK=1, NK - ALFA(IK) = 2. * DTH * SIG(IK) * EB(IK) * WN(IK)**3 EB(IK) = EB(IK) * DDEN(IK) / CG(IK) EB2(IK) = EB2(IK) * DDEN(IK) / CG(IK) EMEAN = EMEAN + EB(IK) @@ -369,7 +378,7 @@ USE CONSTANTS, ONLY: GRAV,nu_air,KAPPA,TPI,FWTABLE,SIZEFWTABLE, & !/T RADE, & DELAB,ABMIN - USE W3GDATMD, ONLY: NK, NTH, NSPEC, XFR, DDEN, SIG, SIG2, TH, & + USE W3GDATMD, ONLY: NK, NTH, NSPEC, DDEN, SIG, SIG2, TH, & ESIN, ECOS, EC2, ZZWND, AALPHA, BBETA, ZZALP,& TTAUWSHELTER, SSWELLF, DDEN2, DTH, SSINTHP, & ZZ0RAT, SSINBR @@ -464,8 +473,6 @@ UORB = 2*SQRT(UORB) ! significant orbital amplitude AORB1 = 2*AORB**(1-0.5*SSWELLF(6)) ! half the significant wave height ... if SWELLF(6)=1 - !WRITE(740+IAPROC,*) EB, EBX, EBY, UORB, AORB1, NU_AIR, 4*UORB*AORB1/NU_AIR - !CALL FLUSH(740+IAPROC) RE = 4*UORB*AORB1 / NU_AIR ! Reynolds number ! ! Defines the swell dissipation based on the "Reynolds number" @@ -1147,7 +1154,7 @@ !/ ------------------------------------------------------------------- / USE CONSTANTS, ONLY: KAPPA, GRAV !/S USE W3SERVMD, ONLY: STRACE - USE W3GDATMD, ONLY: AALPHA, BBETA, ZZALP, XFR, FACHFE, ZZ0MAX + USE W3GDATMD, ONLY: AALPHA, BBETA, ZZALP, FACHFE, ZZ0MAX !/T USE W3ODATMD, ONLY: NDST ! IMPLICIT NONE @@ -1221,7 +1228,7 @@ ZMU = MIN(GRAV*ZZ0/CM**2*EXP(ZARG),1.) ZLOG = MIN(ALOG(ZMU),0.) ZBETA = CONST1*ZMU*ZLOG**4 - ! Power of Y in denominator should be FACHFE-4 + ! Power of Y in denominator should be FACHFE-4 tail applied here TAUHFT(K,L) = TAUHFT(K,L)+W(J)*ZBETA/Y*DELY END DO !/T WRITE (NDST,9000) L,K,AALPHA+FLOAT(L)*DELALP,UST,TAUHFT(K,L) @@ -1290,7 +1297,7 @@ !/ ------------------------------------------------------------------- / USE CONSTANTS, ONLY: KAPPA, GRAV !/S USE W3SERVMD, ONLY: STRACE - USE W3GDATMD, ONLY: AALPHA, BBETA, ZZALP, XFR, FACHFE, & + USE W3GDATMD, ONLY: AALPHA, BBETA, ZZALP, FACHFE, & TTAUWSHELTER, ZZ0MAX USE W3ODATMD, ONLY: NDSE !/T USE W3ODATMD, ONLY: NDST @@ -1545,19 +1552,20 @@ END SUBROUTINE CALC_USTAR !/ ------------------------------------------------------------------- / SUBROUTINE W3SDS4 (A, K, CG, USTAR, USDIR, DEPTH, SRHS, & - DDIAG, IX, IY, BRLAMBDA, WHITECAP ) + DDIAG, IX, IY, BRLAMBDA, WHITECAP, DLWMEAN ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | -!/ ! F. Ardhuin ! +!/ ! F. Ardhuin, F. Leckler, L. Romero ! !/ | FORTRAN 90 | -!/ | Last update : 06-Jun-2018 | +!/ | Last update : 22-Feb-2020 | !/ +-----------------------------------+ !/ !/ 30-Aug-2010 : Clean up from common ST3-ST4 routine( version 3.14-Ifremer ) !/ 23-Jan-2012 : Add output of lambdas to be used in SIN !/ 13-Nov-2013 : Reduced frequency range with IG1 switch !/ 06-Jun-2018 : Add optional DEBUGSRC ( version 6.04 ) +!/ 22-Feb-2020 : Option to use Romero (GRL 2019) ( version 7.XX ) !/ ! 1. Purpose : ! @@ -1617,15 +1625,15 @@ ! !/ ------------------------------------------------------------------- / USE CONSTANTS,ONLY: GRAV, DAIR, DWAT, PI, TPI, RADE, DEBUG_NODE - USE W3GDATMD, ONLY: NSPEC, NTH, NK, SSDSBR, DDEN, & + USE W3GDATMD, ONLY: NSPEC, NTH, NK, SSDSBR, SSDSBT, DDEN, & SSDSC, EC2, ES2, ESC, & - SIG, SSDSP, ECOS, ESIN, DTH, DSIP, & - SSDSISO, SSDSDTH, SSDSBR2, SSDSBM, & - SSDSBRFDF, SSDSBCK, SSDSBINT, IKTAB, DCKI, & + SIG, SSDSP, ECOS, ESIN, DTH, AAIRGB, & + SSDSISO, SSDSDTH, SSDSBM, AAIRCMIN, & + SSDSBRFDF, SSDSBCK, IKTAB, DCKI, & SATINDICES, SATWEIGHTS, CUMULW, NKHS, NKD, & NDTAB, QBI !/IG1 USE W3GDATMD, ONLY: IGPARS - USE W3ODATMD, ONLY: UNDEF, FLOGRD + USE W3ODATMD, ONLY: FLOGRD !/S USE W3SERVMD, ONLY: STRACE !/T USE W3ODATMD, ONLY: NDST !/T0 USE W3ODATMD, ONLY: NDST @@ -1639,7 +1647,7 @@ !/ INTEGER, OPTIONAL, INTENT(IN) :: IX, IY REAL, INTENT(IN) :: A(NSPEC), K(NK), CG(NK), & - DEPTH, USTAR, USDIR + DEPTH, USTAR, USDIR, DLWMEAN REAL, INTENT(OUT) :: SRHS(NSPEC), DDIAG(NSPEC), BRLAMBDA(NSPEC) REAL, INTENT(OUT) :: WHITECAP(1:4) !/ @@ -1651,9 +1659,11 @@ INTEGER :: IK, IK1, ITH, IK2, JTH, ITH2, & IKHS, IKD, SDSNTH, IT, IKM, NKM INTEGER :: NSMOOTH(NK) - REAL :: COSWIND, ASUM, SDIAGISO - REAL :: COEF1, COEF2, COEF3, COEF4(NK) - REAL :: FACTURB, DTURB, BREAKFRACTION + REAL :: C, COSWIND, ASUM, SDIAGISO + REAL :: COEF1, COEF2, COEF4(NK), & + COEF5(NK) + + REAL :: FACTURB, FACTURB2, DTURB, DVISC, DIAG2, BREAKFRACTION REAL :: RENEWALFREQ, EPSR REAL :: S1(NK), E1(NK) INTEGER :: NTIMES(NK) @@ -1661,22 +1671,22 @@ REAL :: DK(NK), HS(NK), KBAR(NK), DCK(NK) REAL :: EFDF(NK) ! Energy integrated over a spectral band INTEGER :: IKSUP(NK) - REAL :: FACSAT, DKHS, FACSTRAIN + REAL :: FACSAT, DKHS, FACSTRAINB, FACSTRAINL REAL :: BTH0(NK) !saturation spectrum REAL :: BTH(NSPEC) !saturation spectrum REAL :: BTH0S(NK) !smoothed saturation spectrum REAL :: BTHS(NSPEC) !smoothed saturation spectrum - REAL :: SBK(NSPEC) INTEGER :: IMSSMAX(NK), NTHSUM - REAL :: SBKT(NK), MSSSUM(NK,5), WTHSUM(NTH), FACHF + REAL :: MSSSUM(NK,5), WTHSUM(NTH), FACHF REAL :: MSSSUM2(NK,NTH) REAL :: MSSLONG(NK,NTH) REAL :: MSSPCS, MSSPC2, MSSPS2, MSSP, MSSD, MSSTH - REAL :: MICHE, X -!/T0 REAL :: DOUT(NK,NTH) + REAL :: MICHE, X, KLOC +!/T0 REAL :: DOUT(NK,NTH) REAL :: QB(NK), S2(NK) REAL :: TSTR, TMAX, DT, T, MFT - REAL :: PB(NSPEC), PB2(NSPEC) + REAL :: PB(NSPEC), PB2(NSPEC), BRM12(NK), BTOVER + REAL :: KO, LMODULATION(NTH) !/ !/ ------------------------------------------------------------------- / !/ @@ -1693,19 +1703,18 @@ NTIMES=0;IKSUP=0;IMSSMAX=0 DK=0.; HS=0.; KBAR=0.; DCK=0.; EFDF=0. BTH0=0.; BTH=0.; BTH0S=0.; DDIAG=0.; SRHS=0.; PB=0. - BTHS=0.; SBK=0.; SBKT=0.; MSSSUM(:,:)=0. + BTHS=0.; MSSSUM(:,:)=0. !/T0 DOUT=0. QB=0.; S2=0.;PB=0.; PB2=0. - + BRM12(:)=0. +! ! 1. Initialization and numerical factors ! FACTURB=SSDSC(5)*USTAR**2/GRAV*DAIR/DWAT BREAKFRACTION=0. RENEWALFREQ=0. IK1=1 - - !IF (IX == DEBUG_NODE) WRITE(*,'(A20,4F20.10)') 'ST4 DISSIP ANFANG', SUM(SRHS), SUM(DDIAG) -!/IG1 IK1=NINT(IGPARS(5))+1 +!/IG1 IK1=NINT(IGPARS(5))+1 NTHSUM=MIN(FLOOR(SSDSC(10)+0.5),NTH-1) ! number of angular bins for enhanced modulation IF (NTHSUM.GT.0) THEN WTHSUM(1:NTHSUM)=1 @@ -1714,19 +1723,67 @@ WTHSUM(1)=2*SSDSC(10) END IF ! -! 2. Estimation of spontaneous breaking +! 1.b MSS parameters used for Modulation factors for B or lambda +! + IF (SSDSC(8).GT.0.OR.SSDSC(11).GT.0.OR.SSDSC(18).GT.0) THEN + MSSSUM2(:,:)=0. + DO IK=1,NK + IMSSMAX (IK) = 1 + MSSP = 0. + MSSPC2 = 0. + MSSPS2 = 0. + MSSPCS = 0. +! +! Sums the contributions to the directional MSS for all ITH +! + DO ITH=1,NTH + IS=ITH+(IK-1)*NTH + MSSLONG(IK,ITH) = K(IK)**SSDSC(20) * A(IS) * DDEN(IK) / CG(IK) ! contribution to MSS + END DO + DO ITH=1,NTH + DO JTH=-NTHSUM,NTHSUM + ITH2 = 1+MOD(ITH-1+JTH+NTH,NTH) + MSSSUM2(IK,ITH) = MSSSUM2(IK,ITH)+MSSLONG(IK,ITH2)*WTHSUM(ABS(JTH)+1) + END DO + MSSPC2 = MSSPC2 +MSSLONG(IK,ITH)*EC2(ITH) + MSSPS2 = MSSPS2 +MSSLONG(IK,ITH)*ES2(ITH) + MSSPCS = MSSPCS +MSSLONG(IK,ITH)*ESC(ITH) + MSSP = MSSP +MSSLONG(IK,ITH) + END DO +! +! Now sums over IK +! + MSSSUM (IK:NK,1) = MSSSUM (IK:NK,1) +MSSP + MSSSUM (IK:NK,3) = MSSSUM (IK:NK,3) +MSSPC2 + MSSSUM (IK:NK,4) = MSSSUM (IK:NK,4) +MSSPS2 + MSSSUM (IK:NK,5) = MSSSUM (IK:NK,5) +MSSPCS +! +! Direction of long wave mss summed up to IK +! + MSSD=0.5*(ATAN2(2*MSSSUM(IK,5),MSSSUM(IK,3)-MSSSUM(IK,4))) + IF (MSSD.LT.0) MSSD = MSSD + PI + IMSSMAX (IK)=1+NINT(MSSD *NTH/TPI) +! +! mss along perpendicular direction +! + MSSSUM (IK,2) = MAX(0.,MSSSUM(IK,4)*COS(MSSD)**2 & + -2*MSSSUM(IK,5)*SIN(MSSD)*COS(MSSD)+ & + MSSSUM(IK,3)*SIN(MSSD)**2 ) + END DO + END IF ! SSDSC(8).GT.0) THEN +! +! 2. Estimation of spontaneous breaking from local saturation ! - IF ( (SSDSBCK-SSDSC(1)).LE.0 ) THEN + SELECT CASE (NINT(SSDSC(1))) + CASE (1) ! -! 2.a Case of a direction-dependent breaking term (TEST441) +! 2.a Case of a direction-dependent breaking term following Ardhuin et al. 2010 ! EPSR = SQRT(SSDSBR) ! ! 2.a.1 Computes saturation ! SDSNTH = MIN(NINT(SSDSDTH/(DTH*RADE)),NTH/2-1) - MSSLONG(:,:) = 0. - MSSSUM2(:,:) = 0. ! SSDSDIK is the integer difference in frequency bands ! between the "large breakers" and short "wiped-out waves" ! @@ -1739,102 +1796,42 @@ BTH(IS0+1)=0. ASUM = SUM(A(IS0+1:IS0+NTH)) BTH0(IK)=ASUM*FACSAT - + IKC = MAX(1,IK-DIKCUMUL) + KLOC=K(IK)**(2-SSDSC(20)) ! local wavenumber factor, if mss not used. + IF (SSDSDTH.GE.180) THEN ! integrates around full circle BTH(IS0+1:IS0+NTH)=BTH0(IK) - ELSE - -!/DEBUGSRC IF(IX == DEBUG_NODE) THEN -!/DEBUGSRC WRITE(*,'(A10,I10,5F20.10)') 'ST4 D1', IK, K(IK), BTH0(IK), SUM(BTH(IS0+1:IS0+NTH)), FACSAT, ASUM -!/DEBUGSRC WRITE(*,'(A10,10F20.10)') 'SSDSC', SSDSC -!/DEBUGSRC ENDIF - -! -! straining effect: first finds the mean direction of mss, then applies cos^2 -! straining -! - IF (SSDSC(8).GT.0.OR.SSDSC(11).GT.0) THEN - IKC = MAX(1,IK-DIKCUMUL) - IMSSMAX (IK) = 1 - MSSP = 0. - MSSPC2 = 0. - MSSPS2 = 0. - MSSPCS = 0. -! -! Sums the contributions to the directional MSS for all ITH -! - DO ITH=1,NTH - IS=ITH+(IK-1)*NTH - MSSLONG(IK,ITH) = K(IK)**2 * A(IS) * DDEN(IK) / CG(IK) ! contribution to MSS - DO JTH=-NTHSUM,NTHSUM - ITH2 = 1+MOD(ITH-1+JTH+NTH,NTH) - MSSSUM2(IK:NK,ITH2) = MSSSUM2(IK:NK,ITH2)+MSSLONG(IK,ITH)*WTHSUM(ABS(JTH)+1) - END DO - MSSPC2 = MSSPC2 +MSSLONG(IK,ITH)*EC2(ITH) - MSSPS2 = MSSPS2 +MSSLONG(IK,ITH)*ES2(ITH) - MSSPCS = MSSPCS +MSSLONG(IK,ITH)*ESC(ITH) - MSSP = MSSP +MSSLONG(IK,ITH) - END DO -! -! Now sums over IK -! - MSSSUM (IK:NK,1) = MSSSUM (IK:NK,1) +MSSP - MSSSUM (IK:NK,3) = MSSSUM (IK:NK,3) +MSSPC2 - MSSSUM (IK:NK,4) = MSSSUM (IK:NK,4) +MSSPS2 - MSSSUM (IK:NK,5) = MSSSUM (IK:NK,5) +MSSPCS -! -! Direction of long wave mss summed up to IK -! - MSSD=0.5*(ATAN2(2*MSSSUM(IK,5),MSSSUM(IK,3)-MSSSUM(IK,4))) - IF (MSSD.LT.0) MSSD = MSSD + PI - IMSSMAX (IK)=1+NINT(MSSD *NTH/TPI) -! -! mss along perpendicular direction -! - MSSSUM (IK,2) = MAX(0.,MSSSUM(IK,4)*COS(MSSD)**2 & - -2*MSSSUM(IK,5)*SIN(MSSD)*COS(MSSD)+MSSSUM(IK,3)*SIN(MSSD)**2) - - END IF ! SSDSC(8).GT.0) THEN - - - DO ITH=1,NTH ! partial integration + ELSE + DO ITH=1,NTH ! partial integration + IS=ITH+(IK-1)*NTH - IS=ITH+(IK-1)*NTH -! -! Testing straining effect of long waves on short waves +! straining effect of long waves on short waves ! extended from Longuet-Higgins and Stewart (JFM 1960, eq. 2.27) the amplitude modulation ! in deep water is equal to the long wave slope k*a cos(theta1-theta2) -! Here we assume that the saturation is modulated as (1 + 2*SSDSC(8) * sqrt(mss_theta) ) +! Here we assume that the saturation is modulated as (1 + SSDSC(8) * sqrt(mss) ) ! where mss_theta is the mss in direction ITH. ! -! Note: SSDSC(8) is 2 times the MTF: close to 4x2=8 for very small ka but can be 20 or larger for ak~0.1 +! Note: SSDSC(8) is sqrt(2)*times the mss MTF: equal to 4*sqrt(2) according to Longuet-Higgins and Stewart ! - IF (SSDSC(8).GT.0) THEN + IF (SSDSC(8).GT.0.OR.SSDSC(11).GT.0) THEN ! MSSTH=(MSSSUM(IKC,1)-MSSSUM(IKC,2))*EC2(1+ABS(ITH-IMSSMAX (IKC))) & - +MSSSUM(IKC,2)*ES2(1+ABS(ITH-IMSSMAX (IKC))) + +MSSSUM(IKC,2)*ES2(1+ABS(ITH-IMSSMAX (IKC)))*KLOC ! - FACSTRAIN=1+SSDSC(8)*SQRT(MSSTH)+SSDSC(11)*SQRT(MSSSUM2(IKC,ITH)) - FACSAT=SIG(IK)*K(IK)**3*DTH*FACSTRAIN + FACSTRAINB=1+SSDSC(8)*SQRT(MSSTH)+SSDSC(11)*SQRT(MSSSUM2(IKC,ITH)*KLOC) + ELSE + FACSTRAINB=1 END IF - - BTH(IS)=DOT_PRODUCT(SATWEIGHTS(:,ITH), & - A(IS0+SATINDICES(:,ITH)) )*FACSAT -! BTH(IS)=SUM( SATWEIGHTS(:,ITH)* & -! A(IS0+SATINDICES(:,ITH)) )*FACSAT +! + BTH(IS)=DOT_PRODUCT(SATWEIGHTS(:,ITH), A(IS0+SATINDICES(:,ITH)) ) & + *FACSAT*FACSTRAINB END DO - IF (SSDSISO.EQ.1) THEN - BTH0(IK)=SUM(A(IS0+1:IS0+NTH))*FACSAT - ELSE + IF (SSDSISO.NE.1) THEN BTH0(IK)=MAXVAL(BTH(IS0+1:IS0+NTH)) END IF END IF - -!/DEBUGSRC IF(IX == DEBUG_NODE) THEN -!/DEBUGSRC WRITE(*,'(A10,I10,10F20.10)') 'ST4 D2', IK, BTH0(IK), SUM(BTH(IS0+1:IS0+NTH)) -!/DEBUGSRC ENDIF - +! END DO !NK END ! ! Optional smoothing of B and B0 over frequencies @@ -1885,15 +1882,13 @@ BTHS(IS)=BTHS(IS-NTH)-BTH(IS-(SSDSBRFDF+1)*NTH) END DO END DO -! -! final division by NSMOOTH -! - BTH0(:)=MAX(0.,BTH0S(:)/NSMOOTH(:)) +! division by NSMOOTH + BTH0(:)=MAX(0.,BTH0S(:)/NSMOOTH(:)) DO IK=IK1,NK IS0=(IK-1)*NTH BTH(IS0+1:IS0+NTH)=MAX(0.,BTHS(IS0+1:IS0+NTH)/NSMOOTH(IK)) END DO - END IF + END IF ! end of optional smoothing ! ! 2.a.2 Computes spontaneous breaking dissipation rate ! @@ -1916,182 +1911,229 @@ ! Computes anisotropic part and sums isotropic part ! COEF2=SSDSC(2) * SIG(IK)*(1-SSDSC(6))/(COEF1*COEF1) - COEF3=-2.*SIG(IK)*K(IK)*FACTURB DDIAG((IK-1)*NTH+1:IK*NTH) = SDIAGISO + & COEF2*((MAX(0.,BTH((IK-1)*NTH+1:IK*NTH)-COEF1))**SSDSP) -! IF (IX == DEBUG_NODE) THEN -! WRITE(*,'(A10,I10,10F15.6)') 'ST4 D3',IK,BTH0(IK),SUM(BTH((IK-1)*NTH+1:IK*NTH)),COEF1,COEF2,COEF3,SSDSP,SDIAGISO -! ENDIF END DO - - !IF(IX == DEBUG_NODE) WRITE(*,'(A20,4F15.6)') 'ST4 DISSIP 1', SUM(SRHS), SUM(DDIAG), SUM(BTH) - ! ! Computes Breaking probability ! - PB = (MAX(SQRT(BTH)-EPSR,0.))**2 + PB = (MAX(SQRT(BTH)-EPSR,0.))**2 ! ! Multiplies by 28.16 = 22.0 * 1.6² * 1/2 with ! 22.0 (Banner & al. 2000, figure 6) ! 1.6 the coefficient that transforms SQRT(B) to Banner et al. (2000)'s epsilon ! 1/2 factor to correct overestimation of Banner et al. (2000)'s breaking probability due to zero-crossing analysis ! - PB = PB * 28.16 -!/ - END IF ! End of test for (Ardhuin et al. 2010)'s spontaneous dissipation source term + PB = PB * 28.16 +! Compute Lambda = PB* l(k,th) +! with l(k,th)=1/(2*pi²)= the breaking crest density + BRLAMBDA = PB / (2.*PI**2.) + SRHS = DDIAG * A + +! + CASE(2) ! -! 2.b Computes spontaneous breaking for T500 ////////////// +! 2.b Computes spontaneous breaking for T500 (Filipot et al. JGR 2010) ! - IF (SSDSBCK.GT.0) THEN ! test for (Filipot et al. 2010)'s disspation source term - E1 = 0. - HS = 0. - SRHS = 0. - DDIAG = 0. - PB2 = 0. + E1 = 0. + HS = 0. + SRHS = 0. + DDIAG = 0. + PB2 = 0. ! ! Computes Wavenumber spectrum E1 integrated over direction and computes dk ! - DO IK=IK1, NK - E1(IK)=0. - DO ITH=1,NTH - IS=ITH+(IK-1)*NTH - E1(IK)=E1(IK)+(A(IS)*SIG(IK))*DTH - END DO - DK(IK)=DDEN(IK)/(DTH*SIG(IK)*CG(IK)) + DO IK=IK1, NK + E1(IK)=0. + DO ITH=1,NTH + IS=ITH+(IK-1)*NTH + E1(IK)=E1(IK)+(A(IS)*SIG(IK))*DTH END DO + DK(IK)=DDEN(IK)/(DTH*SIG(IK)*CG(IK)) + END DO ! ! Gets windows indices of IKTAB ! - ID=MIN(NINT(DEPTH),NDTAB) - IF (ID < 1) THEN - ID = 1 - ELSE IF(ID > NDTAB) THEN - ID = NDTAB - END IF + ID=MIN(NINT(DEPTH),NDTAB) + IF (ID < 1) THEN + ID = 1 + ELSE IF(ID > NDTAB) THEN + ID = NDTAB + END IF ! ! loop over wave scales ! - HS=0. - EFDF=0. - KBAR=0. - EFDF=0. - NKL=0. !number of windows - DO IKL=1,NK - IKSUP(IKL)=IKTAB(IKL,ID) - IF (IKSUP(IKL) .LE. NK) THEN - EFDF(IKL) = DOT_PRODUCT(E1(IKL:IKSUP(IKL)-1),DK(IKL:IKSUP(IKL)-1)) - IF (EFDF(IKL) .NE. 0) THEN - KBAR(IKL) = DOT_PRODUCT(K(IKL:IKSUP(IKL)-1)*E1(IKL:IKSUP(IKL)-1), & - DK(IKL:IKSUP(IKL)-1)) / EFDF(IKL) - ELSE - KBAR(IKL)=0. - END IF -! estimation of Significant wave height of a given scale - HS(IKL) = 4*SQRT(EFDF(IKL)) - NKL = NKL+1 + HS=0. + EFDF=0. + KBAR=0. + NKL=0. !number of windows + DO IKL=1,NK + IKSUP(IKL)=IKTAB(IKL,ID) + IF (IKSUP(IKL) .LE. NK) THEN + EFDF(IKL) = DOT_PRODUCT(E1(IKL:IKSUP(IKL)-1),DK(IKL:IKSUP(IKL)-1)) + IF (EFDF(IKL) .NE. 0) THEN + KBAR(IKL) = DOT_PRODUCT(K(IKL:IKSUP(IKL)-1)*E1(IKL:IKSUP(IKL)-1), & + DK(IKL:IKSUP(IKL)-1)) / EFDF(IKL) + ELSE + KBAR(IKL)=0. END IF - END DO +! estimation of Significant wave height of a given scale + HS(IKL) = 4*SQRT(EFDF(IKL)) + NKL = NKL+1 + END IF + END DO ! ! Computes Dissipation and breaking probability in each scale ! - DCK=0. - QB =0. - DKHS = KHSMAX/NKHS - DO IKL=1, NKL - IF (HS(IKL) .NE. 0. .AND. KBAR(IKL) .NE. 0.) THEN -! + DCK=0. + QB =0. + DKHS = KHSMAX/NKHS + DO IKL=1, NKL + IF (HS(IKL) .NE. 0. .AND. KBAR(IKL) .NE. 0.) THEN ! gets indices for tabulated dissipation DCKI and breaking probability QBI ! - IKD = FAC_KD2+ANINT(LOG(KBAR(IKL)*DEPTH)/LOG(FAC_KD1)) - IKHS= 1+ANINT(KBAR(IKL)*HS(IKL)/DKHS) - IF (IKD > NKD) THEN ! Deep water - IKD = NKD - ELSE IF (IKD < 1) THEN ! Shallow water - IKD = 1 - END IF - IF (IKHS > NKHS) THEN - IKHS = NKHS - ELSE IF (IKHS < 1) THEN - IKHS = 1 - END IF - XT = TANH(KBAR(IKL)*DEPTH) + IKD = FAC_KD2+ANINT(LOG(KBAR(IKL)*DEPTH)/LOG(FAC_KD1)) + IKHS= 1+ANINT(KBAR(IKL)*HS(IKL)/DKHS) + IF (IKD > NKD) THEN ! Deep water + IKD = NKD + ELSE IF (IKD < 1) THEN ! Shallow water + IKD = 1 + END IF + IF (IKHS > NKHS) THEN + IKHS = NKHS + ELSE IF (IKHS < 1) THEN + IKHS = 1 + END IF + XT = TANH(KBAR(IKL)*DEPTH) ! -! Gamma corrected for water depth +! Gamma corrected for water depth ! - GAM=1.0314*(XT**3)-1.9958*(XT**2)+1.5522*XT+0.1885 + GAM=1.0314*(XT**3)-1.9958*(XT**2)+1.5522*XT+0.1885 ! ! Computes the energy dissipated for the scale IKL ! using DCKI which is tabulated in INSIN4 ! - DCK(IKL)=((KBAR(IKL)**(-2.5))*(KBAR(IKL)/(2*PI)))*DCKI(IKHS,IKD) + DCK(IKL)=((KBAR(IKL)**(-2.5))*(KBAR(IKL)/(2*PI)))*DCKI(IKHS,IKD) ! ! Get the breaking probability for the scale IKL ! - QB(IKL) = QBI(IKHS,IKD) ! QBI is tabulated in INSIN4 - ELSE - DCK(IKL)=0. - QB(IKL) =0. - END IF - END DO + QB(IKL) = QBI(IKHS,IKD) ! QBI is tabulated in INSIN4 + ELSE + DCK(IKL)=0. + QB(IKL) =0. + END IF + END DO ! ! Distributes scale dissipation over the frequency spectrum ! - S1 = 0. - S2 = 0. - NTIMES = 0 - DO IKL=1, NKL - IF (EFDF(IKL) .GT. 0.) THEN - S1(IKL:IKSUP(IKL)) = S1(IKL:IKSUP(IKL)) + & - DCK(IKL)*E1(IKL:IKSUP(IKL)) / EFDF(IKL) - S2(IKL:IKSUP(IKL)) = S2(IKL:IKSUP(IKL)) + & - QB(IKL) *E1(IKL:IKSUP(IKL)) / EFDF(IKL) - NTIMES(IKL:IKSUP(IKL)) = NTIMES(IKL:IKSUP(IKL)) + 1 - END IF - END DO + S1 = 0. + S2 = 0. + NTIMES = 0 + DO IKL=1, NKL + IF (EFDF(IKL) .GT. 0.) THEN + S1(IKL:IKSUP(IKL)) = S1(IKL:IKSUP(IKL)) + & + DCK(IKL)*E1(IKL:IKSUP(IKL)) / EFDF(IKL) + S2(IKL:IKSUP(IKL)) = S2(IKL:IKSUP(IKL)) + & + QB(IKL) *E1(IKL:IKSUP(IKL)) / EFDF(IKL) + NTIMES(IKL:IKSUP(IKL)) = NTIMES(IKL:IKSUP(IKL)) + 1 + END IF + END DO ! ! Finish the average ! - WHERE (NTIMES .GT. 0) - S1 = S1 / NTIMES - S2 = S2 / NTIMES - ELSEWHERE - S1 = 0. - S2 = 0. - END WHERE + WHERE (NTIMES .GT. 0) + S1 = S1 / NTIMES + S2 = S2 / NTIMES + ELSEWHERE + S1 = 0. + S2 = 0. + END WHERE ! goes back to action for dissipation source term - S1(1:NK) = S1(1:NK) / SIG(1:NK) + S1(1:NK) = S1(1:NK) / SIG(1:NK) ! ! Makes Isotropic distribution ! - ASUM = 0. - DO IK = 1, NK - ASUM = (SUM(A(((IK-1)*NTH+1):(IK*NTH)))*DTH) - IF (ASUM.GT.1.E-8) THEN - FORALL (IS=1+(IK-1)*NTH:IK*NTH) DDIAG(IS) = S1(IK)/ASUM - FORALL (IS=1+(IK-1)*NTH:IK*NTH) PB2(IS) = S2(IK)/ASUM - ELSE - FORALL (IS=1+(IK-1)*NTH:IK*NTH) DDIAG(IS) = 0. - FORALL (IS=1+(IK-1)*NTH:IK*NTH) PB2(IS) = 0. - END IF - IF (PB2(1+(IK-1)*NTH).GT.0.001) THEN - BTH0(IK) = 2.*SSDSBR - ELSE - BTH0(IK) = 0. - END IF - END DO + ASUM = 0. + DO IK = 1, NK + ASUM = (SUM(A(((IK-1)*NTH+1):(IK*NTH)))*DTH) + IF (ASUM.GT.1.E-8) THEN + FORALL (IS=1+(IK-1)*NTH:IK*NTH) DDIAG(IS) = S1(IK)/ASUM + FORALL (IS=1+(IK-1)*NTH:IK*NTH) PB2(IS) = S2(IK)/ASUM + ELSE + FORALL (IS=1+(IK-1)*NTH:IK*NTH) DDIAG(IS) = 0. + FORALL (IS=1+(IK-1)*NTH:IK*NTH) PB2(IS) = 0. + END IF + IF (PB2(1+(IK-1)*NTH).GT.0.001) THEN + BTH0(IK) = 2.*SSDSBR + ELSE + BTH0(IK) = 0. + END IF + END DO ! - PB = (1-SSDSC(1))*PB2*A + SSDSC(1)*PB + PB = (1-SSDSC(1))*PB2*A + SSDSC(1)*PB +! Compute Lambda = PB* l(k,th) +! with l(k,th)=1/(2*pi²)= the breaking crest density + BRLAMBDA = PB / (2.*PI**2.) ! - END IF ! END OF TEST ON SSDSBCK + CASE(3) ! +! 2c Romero (GRL 2019) ! +! directional saturation I +! integrate in azimuth + KO=(GRAV/(1E-6+USTAR**2))/(28./SSDSC(16))**2 + DO IK=1,NK + IS0=(IK-1)*NTH + KLOC=K(IK)**(2-SSDSC(20)) ! local wavenumber factor, if mss not used. + BTH(1:NTH)=MAX(A(IS0+1:IS0+NTH)*SIG(IK)*K(IK)**3,.00000000000001) ! -! 3. Computes Lambda from breaking probability + IF (SSDSC(8).GT.0) THEN ! Applies modulation factor on B + DO ITH=1,NTH + MSSTH=(MSSSUM(IK,1)-MSSSUM(IK,2))*EC2(1+ABS(ITH-IMSSMAX (IK))) & + +MSSSUM(IK,2)*ES2(1+ABS(ITH-IMSSMAX (IK)))*KLOC + FACSTRAINB=(1.+SSDSC(8)*SQRT(MSSTH)+SSDSC(11)*SQRT(MSSSUM2(IK,ITH))*KLOC) + BTH(ITH)=BTH(ITH)*FACSTRAINB + END DO + END IF +! + C=SIG(IK)/K(IK) + BTH0(IK)=sum(BTH(1:NTH)*DTH) + IF (SSDSC(18).GT.0) THEN ! Applies modulation factor on Lambda + DO ITH=1,NTH + IF (SSDSC(11).GT.0) THEN + MSSTH=(MSSSUM(IK,1)-MSSSUM(IK,2))*EC2(1+ABS(ITH-IMSSMAX (IK))) & + +MSSSUM(IK,2)*ES2(1+ABS(ITH-IMSSMAX (IK)))*KLOC + FACSTRAINL=1.+SSDSC(18)*SQRT(MSSTH)+SSDSC(11)*SQRT(MSSSUM2(IK,ITH)*KLOC) + ELSE + FACSTRAINL=1.+SSDSC(18)*((MSSSUM(IK,1)*KLOC)**SSDSC(14) * & ! Romero + (ECOS(ITH)*COS(DLWMEAN)+ESIN(ITH)*SIN(DLWMEAN))**2) + ENDIF + LMODULATION(ITH)= FACSTRAINL**SSDSC(19) + END DO + ELSE + LMODULATION(:)= 1. + END IF + +! Lambda + BRLAMBDA(IS0+1:IS0+NTH)=SSDSC(9)*EXP(-SSDSBR/BTH(1:NTH)) & + *( 1.0+SSDSC(13)*MAX(1.,(K(IK)/KO))**SSDSC(15) ) & + /(SSDSC(13)+1)*LMODULATION(1:NTH) +! Breaking strength : generalisation of Duncan's b parameter + BTOVER = SQRT(BTH0(IK))-SQRT(SSDSBT) + BRM12(IK)=SSDSC(2)*(MAX(0.,BTOVER))**(2.5)/SIG(IK) ! not function of direction +! For consistency set BRLAMBDA set to zero if b is zero + BRLAMBDA(IS0+1:IS0+NTH)= MAX(0.,SIGN(BRLAMBDA(IS0+1:IS0+NTH),BTOVER)) +! Source term / sig2 (action dissipation) + SRHS(IS0+1:IS0+NTH)= BRM12(IK)/GRAV**2*BRLAMBDA(IS0+1:IS0+NTH)*C**5 +! diagonal + DDIAG(IS0+1:IS0+NTH) = SRHS(IS0+1:IS0+NTH)*SSDSBR/MAX(1.e-20,BTH(1:NTH))/MAX(1e-20,A(IS0+1:IS0+NTH)) ! + END DO +! Breaking probability (Is actually the breaking rate) + PB = BRLAMBDA *C +! + END SELECT ! -! Compute Lambda = PB* l(k,th) -! with l(k,th)=1/(2*pi²)= the breaking crest density ! - BRLAMBDA = PB / (2.*PI**2.) ! !/ ------------------------------------------------------------------- / ! WAVE-TURBULENCE INTERACTION AND CUMULATIVE EFFECT @@ -2100,8 +2142,11 @@ ! ! loop over spectrum ! - SBKT(:)=0. + IF ( (SSDSC(3).NE.0.) .OR. (SSDSC(5).NE.0.) .OR. (SSDSC(21).NE.0.) ) THEN DO IK=IK1, NK + FACTURB2=-2.*SIG(IK)*K(IK)*FACTURB + DVISC=-4.*SSDSC(21)*K(IK)*K(IK) +! DO ITH=1,NTH IS=ITH+(IK-1)*NTH ! @@ -2113,58 +2158,23 @@ IF (BTH0(IK2).GT.SSDSBR) THEN IS2=(IK2-1)*NTH RENEWALFREQ=RENEWALFREQ+DOT_PRODUCT(CUMULW(IS2+1:IS2+NTH,IS),BRLAMBDA(IS2+1:IS2+NTH)) - !DO ITH2=1,NTH - ! IS2=ITH2+(IK2-1)*NTH - ! RENEWALFREQ=RENEWALFREQ+CUMULW(IS2,IS)*BRLAMBDA(IS2) - ! END DO END IF END DO END IF ! ! Computes wave turbulence interaction ! - COSWIND=(ECOS(IS)*COS(USDIR)+ESIN(IS)*SIN(USDIR)) - DTURB=-2.*SIG(IK)*K(IK)*FACTURB*COSWIND ! Theory -> stress direction + COSWIND=(ECOS(ITH)*COS(USDIR)+ESIN(ITH)*SIN(USDIR)) + DTURB=FACTURB2*MAX(0.,COSWIND) ! Theory -> stress direction ! ! Add effects ! - SBK(IS) = DDIAG(IS)*A(IS) - SBKT(IK) = SBKT(IK) + SBK(IS) - DDIAG(IS) = DDIAG(IS) + (SSDSC(3)*RENEWALFREQ+DTURB) + DIAG2 = (SSDSC(3)*RENEWALFREQ+DTURB+DVISC) + DDIAG(IS) = DDIAG(IS) + DIAG2 + SRHS(IS) = SRHS(IS) + A(IS)* DIAG2 END DO END DO -! -! COMPUTES SOURCES TERM from diagonal term -! - SRHS = DDIAG * A - !IF(IX == DEBUG_NODE) WRITE(*,'(A10,4F20.10)') 'ST4 DISSIP 2', SUM(SRHS), SUM(DDIAG), SSDSC(3)*RENEWALFREQ, DTURB -! -! Adds non-diagonal part: high and low frequency generation -! - IF (SSDSC(1).GT.0) THEN - DO IK2 = IK1+DIKCUMUL, NK - DO IK = IK2-DIKCUMUL, IK2-1 - DO ITH=1,NTH - IS2=ITH+(IK2-1)*NTH - IS=ITH+(IK-1)*NTH - SRHS(IS) = SRHS(IS) + SSDSC(1)*ABS(SBK(IS2))/DIKCUMUL - END DO - END DO - END DO - END IF -! - IF (SSDSC(9).GT.0) THEN - DO IK2 = IK1, NK-DIKCUMUL - IKM= MIN(NK,IK2+2*DIKCUMUL) - NKM=IKM-(IK2+DIKCUMUL)+1 - FACHF=SSDSC(9)/FLOAT(NKM*NTH) - DO IK = IK2+DIKCUMUL, IKM - SRHS((IK-1)*NTH+1:IK*NTH) = SRHS((IK-1)*NTH+1:IK*NTH) + ABS(SBKT(IK2))*FACHF - END DO - END DO - END IF - - !IF(IX == DEBUG_NODE) WRITE(*,'(A10,4F20.10)') 'ST4 DISSIP 3', SUM(SRHS), SUM(DDIAG), SUM(A) + END IF ! ! COMPUTES WHITECAP PARAMETERS ! @@ -2177,9 +2187,17 @@ ! precomputes integration of Lambda over direction ! times wavelength times a (a=5 in Reul&Chapron JGR 2003) times dk ! - DO IK=1,NK - COEF4(IK) = SUM(BRLAMBDA((IK-1)*NTH+1:IK*NTH) * DTH) *(2*PI/K(IK)) * & - SSDSC(7) * DDEN(IK)/(DTH*SIG(IK)*CG(IK)) + DO IK=1,MIN(FLOOR(AAIRCMIN),NK) +! Need to extrapolate above NK if necessary ... to be added later. + C=SIG(IK)/K(IK) + IS0=(IK-1)*NTH + COEF4(IK) = C*C*SUM(BRLAMBDA(IS0+1:IS0+NTH)) & + *2.*PI/GRAV*SSDSC(7) * DDEN(IK)/(SIG(IK)*CG(IK)) + COEF5(IK) = C**3*SUM(BRLAMBDA(IS0+1:IS0+NTH) & + *BRM12(IK)) & + *AAIRGB/GRAV * DDEN(IK)/(SIG(IK)*CG(IK)) +! COEF4(IK) = SUM(BRLAMBDA((IK-1)*NTH+1:IK*NTH) * DTH) *(2*PI/K(IK)) * & +! SSDSC(7) * DDEN(IK)/(DTH*SIG(IK)*CG(IK)) ! NB: SSDSC(7) is WHITECAPWIDTH END DO !/ @@ -2187,14 +2205,16 @@ ! ! Computes the Total WhiteCap Coverage (a=5. ; Reul and Chapron, 2003) ! - DO IK=IK1,NK + DO IK=IK1,MIN(FLOOR(AAIRCMIN),NK) WHITECAP(1) = WHITECAP(1) + COEF4(IK) * (1-WHITECAP(1)) + WHITECAP(4) = WHITECAP(4) + COEF5(IK) END DO END IF !/ IF ( FLOGRD(5,8) ) THEN ! ! Calculates the Mean Foam Thickness for component K(IK) => Fig.3, Reul and Chapron, 2003 +! ( Copied from ST4 - not yet tested/validated with Romero 2019 (Lambda model) ! DO IK=IK1,NK ! Duration of active breaking (TAU*) diff --git a/model/ftn/w3srcemd.ftn b/model/ftn/w3srcemd.ftn index 62e488483..d9f90e173 100644 --- a/model/ftn/w3srcemd.ftn +++ b/model/ftn/w3srcemd.ftn @@ -383,7 +383,7 @@ !/ST3 USE W3SRC3MD !/ST3 USE W3GDATMD, ONLY : ZZWND, FFXFM, FFXPM !/ST4 USE W3SRC4MD, ONLY : W3SPR4, W3SIN4, W3SDS4 -!/ST4 USE W3GDATMD, ONLY : ZZWND, FFXFM, FFXPM, FFXFA, FFXFI, FFXFD +!/ST4 USE W3GDATMD, ONLY : ZZWND, FFXFM, FFXPM, FFXFA !/ST6 USE W3SRC6MD !/ST6 USE W3SWLDMD, ONLY : W3SWL6 !/ST6 USE W3GDATMD, ONLY : SWL6S6 @@ -470,7 +470,7 @@ !/ST1 REAL :: FH1, FH2 !/ST2 REAL :: FHTRAN, DFH, FACDIA, FACPAR !/ST3 REAL :: FMEANS, FH1, FH2 -!/ST4 REAL :: FMEANS, FH1, FH2, FAGE +!/ST4 REAL :: FMEANS, FH1, FH2, FAGE, DLWMEAN REAL :: QCERR = 0. !/XNL2 and !/NNT !/SEED REAL :: UC, SLEV !/MLIM REAL :: HM, EM @@ -683,7 +683,7 @@ !/ST4 ELSE !/ST4 CALL W3SPR4 (SPEC, CG1, WN1, EMEAN, FMEAN, FMEAN1, WNMEAN, & !/ST4 AMAX, U10ABS, U10DIR, USTAR, USTDIR, & -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN) !/DEBUGSRC!/ST4 IF (IX == DEBUG_NODE) THEN !/DEBUGSRC!/ST4 WRITE(740+IAPROC,*) '1: out value USTAR=', USTAR, ' USTDIR=', USTDIR @@ -710,7 +710,7 @@ !/ST4 CALL W3SPR4 (SPEC, CG1, WN1, EMEAN, FMEAN, FMEAN1, WNMEAN, & !/ST4 AMAX, U10ABS, U10DIR, USTAR, USTDIR, & -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN) !/ST4 TWS = 1./FMEANWS !/ST6 CALL W3SPR6 (SPEC, CG1, WN1, EMEAN, FMEAN, WNMEAN, AMAX, FP) ! @@ -815,7 +815,7 @@ !/ST3 CALL W3SDS3 ( SPEC, WN1, CG1, EMEAN, FMEANS, WNMEAN, & !/ST3 USTAR, USTDIR, DEPTH, VSDS, VDDS, IX, IY ) !/ST4 CALL W3SDS4 ( SPEC, WN1, CG1, USTAR, USTDIR, DEPTH, VSDS, & -!/ST4 VDDS, IX, IY, BRLAMBDA, WHITECAP ) +!/ST4 VDDS, IX, IY, BRLAMBDA, WHITECAP, DLWMEAN ) !/DEBUGSRC!/ST4 IF (IX == DEBUG_NODE) THEN !/DEBUGSRC!/ST4 WRITE(740+IAPROC,*) '2 : W3SDS4(min/max/sum)VSDS=', minval(VSDS), maxval(VSDS), sum(VSDS) @@ -918,9 +918,6 @@ VDDS(1:NSPECH) = ICESCALEDS * VDDS(1:NSPECH) END IF ! -!/ST4 NKI = MAX ( 2 , MIN ( NKH1 , & -!/ST4 INT ( FACTI2 + FACTI1*LOG(MAX(1.E-7,FFXFI* FMEAN1)) ) ) ) - VS = 0 VD = 0 DO IS=IS1, NSPECH @@ -1157,7 +1154,7 @@ !/ST3 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS) !/ST4 CALL W3SPR4 (SPEC, CG1, WN1, EMEAN, FMEAN, FMEAN1, WNMEAN,& !/ST4 AMAX, U10ABS, U10DIR, USTAR, USTDIR, & -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN) !/ST6 CALL W3SPR6 (SPEC, CG1, WN1, EMEAN, FMEAN, WNMEAN, AMAX, FP) ! !/FLX2 CALL W3FLX2 ( ZWND, DEPTH, FP, U10ABS, U10DIR, & diff --git a/model/ftn/w3triamd.ftn b/model/ftn/w3triamd.ftn index 57b8250cb..d3a0e56f7 100755 --- a/model/ftn/w3triamd.ftn +++ b/model/ftn/w3triamd.ftn @@ -730,6 +730,8 @@ CONTAINS !/ ------------------------------------------------------------------- / USE W3GDATMD !/S USE W3SERVMD, ONLY: STRACE + USE W3ODATMD, ONLY: NDSE + IMPLICIT NONE ! !local parameters @@ -764,7 +766,9 @@ CONTAINS I2 = TRIGP(K,2) I3 = TRIGP(K,3) TRIA(K) = -1.d0*TRIA(K) - STOP 'WRONG TRIANGLE' + WRITE(NDSE,*) 'WRONG TRIANGLE',TRIA(K),K,I1,I2,I3, XYB(I2,2)-XYB(I1,2), & + XYB(I1,1)-XYB(I3,1),XYB(I3,2)-XYB(I1,2), XYB(I2,1)-XYB(I1,1) + STOP END IF END DO END SUBROUTINE diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 253396612..23012f560 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -103,6 +103,7 @@ !/ 20-Jun-2018 : Update of ST6 (Q. Liu) ( version 6.06 ) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ 27-Aug-2018 : Add WBT parameter ( version 6.06 ) +!/ 20-Feb-2020 : Include Romero's dissipation in ST4 ( version 7.XX ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -423,7 +424,8 @@ ! !/ST1 WAM-3 physics package. ! !/ST2 Tolman and Chalikov (1996) physics package. ! !/ST3 WAM 4+ source terms from P.A.E.M. Janssen and J-R. Bidlot -! !/ST4 Ardhuin et al. (2009,2010) input and dissipation +! !/ST4 Input and dissipation using saturation following Ardhuin et al. (2009,2010) +! Filipot & Ardhuin (2010) or Romero (2019) ! !/ST6 BYDRZ source term package featuring Donelan et al. ! (2006) input and Babanin et al. (2001,2010) dissipation. ! !/STX Open slot. @@ -706,6 +708,7 @@ LOGICAL :: FLC, ICEDISP, TRCKCMPR INTEGER :: PTM ! Partitioning method REAL :: PTFC ! Part. cut off freq (for method 5) + REAL :: AIRCMIN, AIRGB CHARACTER :: PMNAME*45, PMNAM2*45 ! Part. method desc. !/FLD1 INTEGER :: TAILTYPE !/FLD1 REAL :: TAILLEV, TAILT1, TAILT2 @@ -724,23 +727,23 @@ !/ST3 REAL :: STXFTFTAIL, SDSC1, & !/ST3 SDSDELTA1, SDSDELTA2 ! -!/ST4 INTEGER :: SWELLFPAR,SDSISO,SDSBRFDF +!/ST4 INTEGER :: SWELLFPAR, SDSISO, SDSBRFDF +!/ST4 REAL :: SDSBCHOICE !/ST4 REAL :: ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP,& !/ST4 ZALP, Z0RAT, TAUWSHELTER, SWELLF, & !/ST4 SWELLF2,SWELLF3,SWELLF4, SWELLF5, & !/ST4 SWELLF6, SWELLF7, FXPM3, FXFM3, & -!/ST4 WNMEANPTAIL, WNMEANP, STXFTF, & -!/ST4 STXFTWN, SINBR, FXFMAGE, FXINCUT, & -!/ST4 FXDSCUT -!/ST4 REAL :: STXFTFTAIL, SDSC1, SDSC2, SDSCUM, & -!/ST4 SDSC4, SDSC5, SDSC6, WHITECAPWIDTH, & +!/ST4 WNMEANPTAIL, WNMEANP, STXFTF, STXFTFTAIL, & +!/ST4 STXFTWN, SINBR, FXFMAGE, & +!/ST4 SDSC2, SDSCUM, SDSC4, SDSC5, SDSC6, WHITECAPWIDTH, WHITECAPDUR, & !/ST4 SDSSTRAIN, SDSSTRAINA, SDSSTRAIN2, & -!/ST4 SDSBR, SDSP, & +!/ST4 SDSBR, SDSP, SDSBT, SDS4A, SDKOF, & !/ST4 SDSCOS, SDSDTH, SDSBCK, SDSABK, & !/ST4 SDSPBK, SDSBINT, SDSHCK, & -!/ST4 SDSBR2, SDSBRF1, & +!/ST4 SDSBRF1, & !/ST4 SDSBM0, SDSBM1, SDSBM2, SDSBM3, & -!/ST4 SDSBM4, SDSLFGEN, SDSHFGEN +!/ST4 SDSBM4, SDSFACMTF, SDSCUMP, SDSNUW, & +!/ST4 SDSL, SDSMWD, SDSMWPOW, SPMSS, SDSNMTF ! !/ST6 REAL :: SINA0, SINWS, SINFC, & !/ST6 SDSA1, SDSA2, SWLB1 @@ -836,14 +839,15 @@ !/ST2 NAMELIST /SDS2/ SDSA0, SDSA1, SDSA2, SDSB0, SDSB1, PHIMIN !/ST3 NAMELIST /SDS3/ SDSC1, WNMEANP, FXPM3, FXFM3, SDSDELTA1, & !/ST3 SDSDELTA2 -!/ST4 NAMELIST /SDS4/ SDSC1, WNMEANP, WNMEANPTAIL, FXPM3, FXFM3, & +!/ST4 NAMELIST /SDS4/ SDSBCHOICE, WNMEANP, WNMEANPTAIL, FXPM3, FXFM3, & !/ST4 FXFMAGE, SDSC2, SDSCUM, SDSSTRAIN, SDSSTRAINA, & -!/ST4 SDSSTRAIN2, SDSC4, & -!/ST4 SDSC5, SDSC6, SDSBR, SDSBR2, SDSP, SDSISO, & +!/ST4 SDSSTRAIN2, SDSC4, SDSFACMTF, SDSNMTF,SDSCUMP, & +!/ST4 SDSC5, SDSC6, SDSBR, SDSBT, SDSP, SDSISO, & !/ST4 SDSBCK, SDSABK, SDSPBK, SDSBINT, SDSHCK, & -!/ST4 SDSDTH, SDSCOS, SDSBRF1, SDSBRFDF, & +!/ST4 SDSDTH, SDSCOS, SDSBRF1, SDSBRFDF, SDSNUW, & !/ST4 SDSBM0, SDSBM1, SDSBM2, SDSBM3, SDSBM4, & -!/ST4 SDSHFGEN, SDSLFGEN, WHITECAPWIDTH, FXINCUT, FXDSCUT +!/ST4 WHITECAPWIDTH, WHITECAPDUR, SDSMWD, SDSMWPOW, SDKOF + !/ST6 NAMELIST /SIN6/ SINA0, SINWS, SINFC !/ST6 NAMELIST /SDS6/ SDSET, SDSA1, SDSA2, SDSP1, SDSP2 !/ST6 NAMELIST /SWL6/ SWLB1, CSTB1 @@ -1675,20 +1679,19 @@ !/ST3 SDSDELTA1 = 0.4 !! This is Bidlot et al. 2005, Otherwise WAM4 uses 0.5 !/ST3 SDSDELTA2 = 0.6 !! This is Bidlot et al. 2005, Otherwise WAM4 uses 0.5 ! -!/ST4 SDSC1 = 0.0 ! not used in ST4, should be cleaned up !/ST4 WNMEANP = 0.5 ! taken from Bidlot et al. 2005 !/ST4 FXFM3 = 2.5 !/ST4 FXFMAGE = 0. -!/ST4 FXINCUT = 0. -!/ST4 FXDSCUT = 0. !/ST4 FXPM3 = 4. -!/ST4 WNMEANPTAIL = -0.5 -!/ST4 SDSC2 = -2.2E-5 -!/ST4 SDSCUM = -0.40344 +!/ST4 WNMEANPTAIL = -0.5 +!/ST4 SDSBCHOICE =1 ! 1: Ardhuin et al., 2: Filipot & Ardhuin, 3: Romero +!/ST4 SDSC2 = -2.2E-5 ! -3.8 for Romero +!/ST4 SDSCUM = -0.40344 !/ST4 SDSC4 = 1. !/ST4 SDSC5 = 0. +!/ST4 SDSNUW = 0. !/ST4 SDSC6 = 0.3 -!/ST4 SDSBR = 0.90E-3 +!/ST4 SDSBR = 0.90E-3 ! 0.005 for Romero !/ST4 SDSBRFDF = 0 !/ST4 SDSBRF1 = 0.5 !/ST4 SDSP = 2. ! this is now fixed in w3sds4, should be cleaned up @@ -1700,18 +1703,29 @@ !/ST4 SDSBM2 = 0. !/ST4 SDSBM3 = 0. !/ST4 SDSBM4 = 0. -!/ST4 SDSBR2 = 0.8 !/ST4 SDSBCK = 0. !/ST4 SDSABK = 1.5 !/ST4 SDSPBK = 4. !/ST4 SDSBINT = 0.3 !/ST4 SDSHCK = 1.5 !/ST4 WHITECAPWIDTH = 0.3 -!/ST4 SDSSTRAIN = 0. -!/ST4 SDSSTRAINA = 0. +!/ST4 SDSSTRAIN = 0. +!/ST4 SDSFACMTF = 400 ! MTF factor for Lambda , Romero (2019) +!/ST4 SDSSTRAINA = 15. !/ST4 SDSSTRAIN2 = 0. -!/ST4 SDSHFGEN = 0. -!/ST4 SDSLFGEN = 0. +!/ST4 WHITECAPDUR = 0.56 ! breaking duration factor +!/ST4! b (strength of breaking) +!/ST4 SDSBT = 1.100E-3 ! B_T (sturation threshold for dissipation rate b) +!/ST4! Lambda parameters +!/ST4 SDSL = 3.5000e-05 ! L scaling +!/ST4! MTF +!/ST4 SPMSS = 0.5 ! cmss^SPMSS +!/ST4 SDSNMTF = 1.5 ! MTF power +!/ST4 SDSCUMP = 2. +!/ST4! MW +!/ST4 SDSMWD = .9 ! new AFo +!/ST4 SDSMWPOW = 1. ! (k )^pow +!/ST4 SDKOF = 3. ! ko factor such that ko= g (SDKOF/(28 us))^2 ! !/ST6 SDSET = .TRUE. !/ST6 SDSA1 = 4.75E-06 @@ -1770,17 +1784,28 @@ !/ST4 CALL READNL ( NDSS, 'SDS4', STATUS ) !/ST4 WRITE (NDSO,924) STATUS !/ST4 WRITE (NDSO,925) SDSC2, SDSBCK, SDSCUM, WNMEANP -!/ST4 SSDSC(1) = SDSLFGEN +!/ST4 SSDSC(1) = REAL(SDSBCHOICE) !/ST4 SSDSC(2) = SDSC2 !/ST4 SSDSC(3) = SDSCUM !/ST4 SSDSC(4) = SDSC4 !/ST4 SSDSC(5) = SDSC5 !/ST4 SSDSC(6) = SDSC6 !/ST4 SSDSC(7) = WHITECAPWIDTH -!/ST4 SSDSC(8) = SDSSTRAIN ! Straining constant ... -!/ST4 SSDSC(9) = SDSHFGEN -!/ST4 SSDSC(10) = SDSSTRAINA*NTH/360. ! angle for enhanced straining -!/ST4 SSDSC(11) = SDSSTRAIN2 ! enhanced straining constant ... +!/ST4 SSDSC(8) = SDSSTRAIN ! Straining constant ... +!/ST4 SSDSC(9) = SDSL +!/ST4 SSDSC(10) = SDSSTRAINA*NTH/360. ! angle Aor enhanced straining +!/ST4 SSDSC(11) = SDSSTRAIN2 ! straining constant for directional part +!/ST4 SSDSC(12) = SDSBT +!/ST4 SSDSC(13) = SDSMWD +!/ST4 SSDSC(14) = SPMSS +!/ST4 SSDSC(15) = SDSMWPOW +!/ST4 SSDSC(16) = SDKOF +!/ST4 SSDSC(17) = WHITECAPDUR +!/ST4 SSDSC(18) = SDSFACMTF +!/ST4 SSDSC(19) = SDSNMTF +!/ST4 SSDSC(20) = SDSCUMP +!/ST4 SSDSC(21) = SDSNUW +! !/ST4 SSDSBR = SDSBR !/ST4 SSDSBRF1 = SDSBRF1 !/ST4 SSDSBRFDF= SDSBRFDF @@ -1789,7 +1814,7 @@ !/ST4 SSDSBM(2) = SDSBM2 !/ST4 SSDSBM(3) = SDSBM3 !/ST4 SSDSBM(4) = SDSBM4 -!/ST4 SSDSBR2 = SDSBR2 +!/ST4 SSDSBT = SDSBT !/ST4 SSDSISO = SDSISO !/ST4 SSDSCOS = SDSCOS !/ST4 SSDSP = SDSP @@ -1797,8 +1822,6 @@ !/ST4 WWNMEANP = WNMEANP !/ST4 FFXFM = FXFM3 * TPI !/ST4 FFXFA = FXFMAGE * TPI -!/ST4 FFXFI = FXINCUT * TPI -!/ST4 FFXFD = FXDSCUT * TPI !/ST4 FFXPM = FXPM3 * GRAV / 28. !/ST4 WWNMEANPTAIL = WNMEANPTAIL !/ST4 SSDSBCK = SDSBCK @@ -2190,6 +2213,12 @@ FLC = .TRUE. TRCKCMPR = .TRUE. NOSW = 5 +! +! Gas fluxes +! + AIRCMIN = 2.0 ! cmin for whitecap coverage and entrained air + AIRGB = 0.2 ! volume of entrained air constant (Deike et al. 2017) +! !/NCO/! NCEP operations retains first three swell systems. !/NCO NOSW=3 PTM = 1 ! Default to standard WW3 partitioning. C. Bunney @@ -2212,11 +2241,11 @@ I1E3D=1 I2E3D=NK P2SF = 0 - I1P2SF = 1 + I1P2SF = 1 I2P2SF = 15 - US3D=0 - I1US3D=1 - I2US3D=NK + US3D = 0 + I1US3D = 1 + I2US3D = NK USSP=0 IUSSP=1 STK_WN(:)=0.0 @@ -2448,6 +2477,8 @@ PFMOVE = PMOVE ! BTBETA = MIN(MAX (1., BTBET), 2.) + AAIRCMIN = ALOG(GRAV/AIRCMIN/SIG(1))/ALOG(XFR)+1 ! goes from phase speed C=g/sig to index + AAIRGB = AIRGB ! ! Notes: Presently, if we select CICE0.ne.CICEN requires an obstruction ! grid, that is initialized with zeros as default. @@ -2627,14 +2658,16 @@ !/ST2 WRITE (NDSO,2924) SDSA0, SDSA1, SDSA2, SDSB0, SDSB1, PHIMIN !/ST3 WRITE (NDSO,2924) SDSC1, WNMEANP, FXPM3, FXFM3, SDSDELTA1, & !/ST3 SDSDELTA2 -!/ST4 WRITE (NDSO,2924) SDSC1, SDSC2, SDSCUM, SDSC4, SDSC5, SDSC6, & -!/ST4 WNMEANP, FXPM3, FXFM3, FXFMAGE, FXINCUT, FXDSCUT, & + +!/ST4 WRITE (NDSO,2924) SDSBCHOICE, SDSC2, SDSCUM, SDSC4, & +!/ST4 SDSC5, SDSC6, & +!/ST4 WNMEANP, FXPM3, FXFM3, FXFMAGE, & !/ST4 SDSBINT, SDSBCK, SDSABK, SDSPBK, SDSHCK, & !/ST4 SDSBR, SDSSTRAIN, SDSSTRAINA, SDSSTRAIN2, & -!/ST4 SDSBR2, SDSP, SDSISO, SDSCOS, & -!/ST4 SDSDTH, SDSBRF1, SDSBRFDF, & -!/ST4 SDSBM0, SDSBM1, SDSBM2, SDSBM3, SDSBM4, & -!/ST4 WHITECAPWIDTH, SDSLFGEN, SDSHFGEN +!/ST4 SDSBT, SDSP, SDSISO, SDSCOS, SDSDTH, SDSBRF1, & +!/ST4 SDSBRFDF, SDSBM0, SDSBM1, SDSBM2, SDSBM3, SDSBM4, & +!/ST4 SPMSS, SDKOF, SDSMWD, SDSFACMTF, SDSNMTF,SDSMWPOW,& +!/ST4 SDSCUMP, SDSNUW, WHITECAPWIDTH, WHITECAPDUR !/ST6 WRITE (NDSO,2924) SDSET, SDSA1, SDSA2, SDSP1, SDSP2 !/ST6 WRITE (NDSO,2937) SWLB1, CSTB1 !/BT1 WRITE (NDSO,2926) GAMMA @@ -5397,31 +5430,35 @@ !/ST3 ' SDSDELTA1 =', F5.2,', SDSDELTA2 =',F5.2, & !/ST3 ' /') ! -!/ST4 924 FORMAT (/' Dissipation (Ardhuin et al. 2010) ',A/ & +!/ST4 924 FORMAT (/' Dissipation (Ardhuin / Filipot / Romero ) ',A/ & !/ST4 ' --------------------------------------------------') !/ST4 925 FORMAT ( ' SDSC2, SDSBCK, SDSCUM :',3E11.3/ & !/ST4 ' Power of k in mean k :',F8.2/) -!/ST4 2924 FORMAT ( ' &SDS4 SDSC1 =',E12.4,', SDSC2 =',E12.4, & -!/ST4 ', SDSCUM =',F6.2,', '/ & + + +!/ST4 2924 FORMAT ( ' &SDS4 SDSBCHOICE = ',F3.1, & +!/ST4 ', SDSC2 =',E12.4,', SDSCUM =',F6.2,', '/ & !/ST4 ' SDSC4 =',F6.2,', SDSC5 =',E12.4, & !/ST4 ', SDSC6 =',E12.4,','/ & !/ST4 ' WNMEANP =',F4.2,', FXPM3 =', F4.2, & -!/ST4 ', FXFM3 =',F4.2,', FXFMAGE =',F6.3, & -!/ST4 ', FXINCUT =',F6.3,', FXDSCUT =',F6.3,', '/ & +!/ST4 ', FXFM3 =',F4.1,', FXFMAGE =',F6.3, ', '/ & !/ST4 ' SDSBINT =',E12.4,', SDSBCK =',E12.4, & !/ST4 ', SDSABK =',F6.3,', SDSPBK =',F6.3,', '/ & !/ST4 ' SDSHCK =',F5.2,', SDSBR = ',E12.4, & -!/ST4 ', SDSSTRAIN =',F4.1,', SDSSTRAINA =',F4.1, & +!/ST4 ', SDSSTRAIN =',F5.1,', SDSSTRAINA =',F4.1, & !/ST4 ', SDSSTRAIN2 =',F5.1,', '/ & -!/ST4 ' SDSBR2 =',F5.2,', SDSP =',F5.2, & +!/ST4 ' SDSBT =',F5.2,', SDSP =',F5.2, & !/ST4 ', SDSISO =',I2, & !/ST4 ', SDSCOS =',F3.1,', SDSDTH =',F5.1,', '/ & !/ST4 ' SDSBRF1 = ',F5.2,', SDSBRFDF =',I2,', '/ & !/ST4 ' SDSBM0 = ',F5.2, ', SDSBM1 =',F5.2, & !/ST4 ', SDSBM2 =',F5.2,', SDSBM3 =',F5.2,', SDSBM4 =', & !/ST4 F5.2,', '/, & -!/ST4 ' WHITECAPWIDTH =',F5.2,', SDSLFGEN = ', & -!/ST4 F5.2,', SDSHFGEN = ',F5.2,' /') +!/ST4 ' SPMSS = ',F5.2, ', SDKOF =',F5.2, & +!/ST4 ', SDSMWD =',F5.2,', SDSFACMTF =',F5.1,', '/ & +!/ST4 ' SDSMWPOW =',F3.1,', SDSNMTF =', F5.2, & +!/ST4 ', SDSCUMP =', F3.1,', SDSNUW =', E8.3,', '/, & +!/ST4 ' WHITECAPWIDTH =',F5.2, ' WHITECAPDUR =',F5.2,' /') ! !/ST6 924 FORMAT (/' Dissipation (Rogers et al. 2012) ',A/ & !/ST6 ' --------------------------------------------------') diff --git a/model/ftn/ww3_ounp.ftn b/model/ftn/ww3_ounp.ftn index 111b9b591..be2e50294 100644 --- a/model/ftn/ww3_ounp.ftn +++ b/model/ftn/ww3_ounp.ftn @@ -1470,7 +1470,7 @@ !/ST3 TAUWNX, TAUWNY !/ST4 REAL :: AMAX, FMEANS, FMEANWS, TAUWX, TAUWY, & !/ST4 TAUWNX, TAUWNY, FMEAN1, WHITECAP(1:4) -!/ST4 REAL :: LAMBDA(NSPEC) +!/ST4 REAL :: LAMBDA(NSPEC), DLWMEAN !/ST6 REAL :: AMAX, TAUWX, TAUWY, TAUWNX, TAUWNY !/BS1 REAL :: TAUSCX, TAUSCY !/BT4 REAL :: D50, PSIC, BEDFORM(3), TAUBBL(2) @@ -1853,7 +1853,7 @@ !/ST3 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) !/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & !/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD,& -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN ) !/ST6 CALL W3SPR6 (A, CG, WN, EMEAN, FMEAN, WNMEAN, AMAX, FP) ! !/FLX1 CALL W3FLX1 ( ZWND, UABS, UDIRR, & @@ -1880,18 +1880,14 @@ !/ST3 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) !/ST4 IX=1 !/ST4 IY=1 +!/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & +!/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD,& +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS,DLWMEAN ) !/ST4 CALL W3SDS4 ( A, WN, CG, USTAR, USTD, DEPTH, XDS, & -!/ST4 DIA, IX, IY, LAMBDA, WHITECAP ) -!/ST4 CALL W3SDS4 ( A, WN, CG, USTAR, USTD, DEPTH, XDS, & -!/ST4 DIA, IX, IY, LAMBDA, WHITECAP ) -!/ST4 CALL W3SDS4 ( A, WN, CG, USTAR, USTD, DEPTH, XDS, & -!/ST4 DIA, IX, IY, LAMBDA, WHITECAP ) +!/ST4 DIA, IX, IY, LAMBDA, WHITECAP, DLWMEAN ) !/ST4 CALL W3SIN4 (A, CG, WN2, UABS, USTAR, DAIR/DWAT, & !/ST4 ASO(J), UDIRR, Z0, CD, TAUWX, TAUWY, TAUWNX, & !/ST4 TAUWNY, XIN, DIA, LLWS, IX, IY, LAMBDA ) -!/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & -!/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD,& -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) !/FLX2 CALL W3FLX2 ( ZWND, DEPTH, FP, UABS, UDIRR, & !/FLX2 USTAR, USTD, Z0, CD ) !/FLX3 CALL W3FLX3 ( ZWND, DEPTH, FP, UABS, UDIRR, & @@ -1972,9 +1968,9 @@ !/ST3 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) !/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & !/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD,& -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN ) !/ST4 CALL W3SDS4 ( A, WN, CG, USTAR, USTD, DEPTH, XDS, & -!/ST4 DIA, IX, IY, LAMBDA, WHITECAP ) +!/ST4 DIA, IX, IY, LAMBDA, WHITECAP, DLWMEAN ) !/ST6 CALL W3SPR6 (A, CG, WN, EMEAN, FMEAN, WNMEAN, AMAX, FP) !/ST6 FHIGH = SIG(NK) !/STX CALL W3SPRX @@ -2001,7 +1997,7 @@ !/ST3 TAUWNX, TAUWNY, ICE, XIN, DIA, LLWS, IX, IY ) !/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & !/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD, & -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN ) !/ST4 CALL W3SIN4 (A, CG, WN2, UABS, USTAR, DAIR/DWAT, & !/ST4 ASO(J), UDIRR, Z0, CD, TAUWX, TAUWY,TAUWNX,& !/ST4 TAUWNY, XIN, DIA, LLWS, IX, IY, LAMBDA ) @@ -2025,8 +2021,11 @@ !/ST3 Z0, CD, TAUWX, TAUWY,TAUWNX, TAUWNY, & !/ST3 ICE, XIN, DIA, LLWS, IX, IY ) ! +!/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & +!/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD, & +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN ) !/ST4 CALL W3SDS4 ( A, WN, CG, USTAR, USTD, DEPTH, XDS, & -!/ST4 DIA, IX, IY, LAMBDA, WHITECAP ) +!/ST4 DIA, IX, IY, LAMBDA, WHITECAP, DLWMEAN ) !/ST4 CALL W3SIN4 (A, CG, WN2, UABS, USTAR, DAIR/DWAT, & !/ST4 ASO(J), UDIRR, Z0, CD, TAUWX, TAUWY, TAUWNX, & !/ST4 TAUWNY, XIN, DIA, LLWS, IX, IY, LAMBDA ) @@ -2050,8 +2049,11 @@ !/ST2 ALPHA, XDS, DIA ) !/ST3 CALL W3SDS3 ( A, WN, CG, EMEAN, FMEANS, WNMEAN, & !/ST3 USTAR, USTD, DEPTH, XDS, DIA, IX, IY ) +!/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & +!/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD, & +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN ) !/ST4 CALL W3SDS4 ( A, WN, CG, USTAR, USTD, DEPTH, XDS, & -!/ST4 DIA, IX, IY, LAMBDA, WHITECAP ) +!/ST4 DIA, IX, IY, LAMBDA, WHITECAP , DLWMEAN) !/ST6 CALL W3SDS6 ( A, CG, WN, XDS, DIA ) !/ST6 IF (SWL6S6) CALL W3SWL6 ( A, CG, WN, XWL, DIA ) !/STX CALL W3SDSX diff --git a/model/ftn/ww3_outp.ftn b/model/ftn/ww3_outp.ftn index 46821d45f..9c7694e1f 100644 --- a/model/ftn/ww3_outp.ftn +++ b/model/ftn/ww3_outp.ftn @@ -1123,7 +1123,7 @@ !/ST3 REAL :: AMAX, FMEANS, FMEANWS, TAUWX, TAUWY, & !/ST3 TAUWNX, TAUWNY !/ST4 REAL :: AMAX, FMEANS, FMEANWS, TAUWX, TAUWY, & -!/ST4 TAUWNX, TAUWNY, FMEAN1, WHITECAP(1:4) +!/ST4 TAUWNX, TAUWNY, FMEAN1, WHITECAP(1:4), DLWMEAN !/ST6 REAL :: AMAX, TAUWX, TAUWY, TAUWNX, TAUWNY !/BS1 REAL :: TAUSCX, TAUSCY !/BT4 REAL :: D50, PSIC, BEDFORM(3), TAUBBL(2) @@ -1461,7 +1461,7 @@ !/ST3 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) !/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & !/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD,& -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN ) !/ST6 CALL W3SPR6 (A, CG, WN, EMEAN, FMEAN, WNMEAN, AMAX, FP) ! !/FLX1 CALL W3FLX1 ( ZWND, UABS, UDIRR, & @@ -1493,7 +1493,7 @@ !/ST4 TAUWNX, TAUWNY, XIN, DIA, LLWS, IX, IY, LAMBDA ) !/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & !/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD,& -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN ) !/FLX2 CALL W3FLX2 ( ZWND, DEPTH, FP, UABS, UDIRR, & !/FLX2 USTAR, USTD, Z0, CD ) !/FLX3 CALL W3FLX3 ( ZWND, DEPTH, FP, UABS, UDIRR, & @@ -1573,7 +1573,7 @@ !/ST3 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) !/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & !/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD,& -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN ) !/ST6 CALL W3SPR6 (A, CG, WN, EMEAN, FMEAN, WNMEAN, AMAX, FP) !/ST6 FHIGH = SIG(NK) !/STX CALL W3SPRX @@ -1600,7 +1600,7 @@ !/ST3 TAUWNX, TAUWNY, ICE, XIN, DIA, LLWS, IX, IY ) !/ST4 CALL W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, & !/ST4 WNMEAN, AMAX, UABS, UDIRR, USTAR, USTD,& -!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS ) +!/ST4 TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN ) !/ST4 CALL W3SIN4 ( A, CG, WN2, UABS, USTAR, DAIR/DWAT,& !/ST4 ASO(J), UDIRR, Z0, CD,TAUWX, TAUWY, & !/ST4 TAUWNX, TAUWNY, XIN, DIA, LLWS, IX, IY, LAMBDA ) @@ -1648,7 +1648,7 @@ !/ST3 CALL W3SDS3 ( A, WN, CG, EMEAN, FMEANS, WNMEAN, & !/ST3 USTAR, USTD, DEPTH, XDS, DIA, IX, IY ) !/ST4 CALL W3SDS4 ( A, WN, CG, USTAR, USTD, DEPTH, XDS, & -!/ST4 DIA, IX, IY, LAMBDA, WHITECAP ) +!/ST4 DIA, IX, IY, LAMBDA, WHITECAP, DLWMEAN ) !/ST6 CALL W3SDS6 ( A, CG, WN, XDS, DIA ) !/ST6 IF (SWL6S6) CALL W3SWL6 ( A, CG, WN, XWL, DIA ) !/STX CALL W3SDSX diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index 1f000c8ab..5f82b910d 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -37,7 +37,7 @@ echo '#!/bin/bash' > matrix.head echo ' ' >> matrix.head - echo '#PBS -q mpi_2' >> matrix.head + echo '#PBS -q mpi_1' >> matrix.head echo '#PBS -l mem=20G' >> matrix.head echo '#PBS -l walltime=48:00:00' >> matrix.head echo '#PBS -N ww3_regtest' >> matrix.head @@ -50,44 +50,50 @@ # Netcdf modules - cmplr=datarmor_mpt_debug + cmplr=datarmor_intel echo ' source /usr/share/Modules/3.2.10/init/bash' >> matrix.head echo ' module purge' >> matrix.head echo ' export WWATCH3_NETCDF=NC4' >> matrix.head echo " export WW3_PARCOMPN=4" >> matrix.head - if [ $cmplr = "datarmor_intel_debug" ] + if [ $cmplr = "datarmor_intel_debug" ] || [ $cmplr = "datarmor_intel" ] then echo ' module load intel-comp/18' >> matrix.head echo ' module load impi/2018.1.163' >> matrix.head - echo ' export PATH=/home/datawork-wave/NETCDF-FINAL/INTEL/bin::${PATH}' >> matrix.head - echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/INTEL/bin/nf-config'>> matrix.head - echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/INTEL' >> matrix.head + echo ' export PATH=/home/datawork-wave/NETCDF2019/INTEL/bin:${PATH}' >> matrix.head + echo ' export CPATH=/home/datawork-wave/NETCDF2019/INTEL/include:${CPATH}' >> matrix.head + echo ' export LD_LIBRARY_PATH=/home/datawork-wave/NETCDF2019/INTEL/lib:${LD_LIBRARY_PATH}' >> matrix.head + echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF2019/INTEL/bin/nf-config' >> matrix.head + echo ' export METIS_PATH=/home/datawork-wave/PARMETIS2019/INTEL' >> matrix.head - elif [ $cmplr = "datarmor_mpt_debug" ] + elif [ $cmplr = "datarmor_mpt_debug" ] || [ $cmplr = "datarmor_mpt" ] then echo ' module load intel-comp/18' >> matrix.head - echo ' module load mpt/2.15' >> matrix.head - echo ' export PATH=/home/datawork-wave/NETCDF-FINAL/MPT/bin::${PATH}' >> matrix.head - echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/MPT/bin/nf-config' >> matrix.head - echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/MPT' >> matrix.head - - elif [ $cmplr = "datarmor_gnu_debug" ] + echo ' module load mpt/2.18' >> matrix.head + echo ' export PATH=/home/datawork-wave/NETCDF2019/MPT/bin:${PATH}' >> matrix.head + echo ' export CPATH=/home/datawork-wave/NETCDF2019/MPT/include:${CPATH}' >> matrix.head + echo ' export LD_LIBRARY_PATH=/home/datawork-wave/NETCDF2019/MPT/lib:${LD_LIBRARY_PATH}' >> matrix.head + echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF2019/MPT/bin/nf-config' >> matrix.head + echo ' export METIS_PATH=/home/datawork-wave/PARMETIS2019/MPT' >> matrix.head + + elif [ $cmplr = "datarmor_gnu_debug" ] || [ $cmplr = "datarmor_gnu" ] then echo ' module load impi/2018.1.163' >> matrix.head - echo ' export PATH=/home/datawork-wave/NETCDF-FINAL/GNU/bin::${PATH}' >> matrix.head - echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/GNU/bin/nf-config' >> matrix.head - echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/GNU' >> matrix.head + echo ' export PATH=/home/datawork-wave/NETCDF2019/GNU/bin:${PATH}' >> matrix.head + echo ' export CPATH=/home/datawork-wave/NETCDF2019/GNU/include:${CPATH}' >> matrix.head + echo ' export LD_LIBRARY_PATH=/home/datawork-wave/NETCDF2019/GNU/lib:${LD_LIBRARY_PATH}' >> matrix.head + echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF2019/GNU/bin/nf-config' >> matrix.head + echo ' export METIS_PATH=/home/datawork-wave/PARMETIS2019/GNU' >> matrix.head - elif [ $cmplr = "datarmor_pgi_debug" ] + elif [ $cmplr = "datarmor_pgi_debug" ] || [ $cmplr = "datarmor_pgi" ] then - echo ' module load pgi/17.10' >> matrix.head - echo ' module load mpt/2.17' >> matrix.head - echo ' export PATH=/home/datawork-wave/NETCDF-FINAL/PGI/bin::${PATH}' >> matrix.head - echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF-FINAL/PGI/bin/nf-config' >> matrix.head - echo ' export METIS_PATH=/home/datawork-wave/PARMETIS/PGI' >> matrix.head - + echo ' module load pgi/17.10' >> matrix.head + echo ' export PATH=/home/datawork-wave/NETCDF2019/PGI/bin:${PATH}' >> matrix.head + echo ' export CPATH=/home/datawork-wave/NETCDF2019/PGI/include:${CPATH}' >> matrix.head + echo ' export LD_LIBRARY_PATH=/home/datawork-wave/NETCDF2019/PGI/lib:${LD_LIBRARY_PATH}' >> matrix.head + echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF2019/PGI/bin/nf-config' >> matrix.head + echo ' export METIS_PATH=/home/datawork-wave/PARMETIS2019/PGI' >> matrix.head fi echo ' ' @@ -98,8 +104,8 @@ export cmplOption='y' export mpi='$MPI_LAUNCH' - export np='56' - export nr='28' + export np='28' + export nr='14' export nth='2' if [ "$cmplOption" = 'y' ] diff --git a/regtests/mww3_test_07/input/namelists_refug.nml b/regtests/mww3_test_07/input/namelists_refug.nml index 09bb220d5..4fd9feffc 100644 --- a/regtests/mww3_test_07/input/namelists_refug.nml +++ b/regtests/mww3_test_07/input/namelists_refug.nml @@ -2,7 +2,7 @@ Z0MAX = 0.0020, SINTHP=2.0, SWELLFPAR = 3, SWELLF = 0.80, TAUWSHELTER = 0.0, SWELLF2=-0.018, SWELLF3= 0.015, Z0RAT = 0.04, SWELLF4 = 100000, SWELLF5 = 1.2 / -&SDS4 SDSC1 = -4.2, SDSBR = 0.00085, +&SDS4 SDSBCHOICE = 1, SDSBR = 0.00085, SDSC2 = -2.2E-5, SDSC3 = 0.000, SDSC4 = 1. , SDSC5 = 0., SDSC6 = 0.30, SDSDTH = 80., FXFM3= 2.5, SDSCOS = 2., SDSISO = 2 / diff --git a/regtests/mww3_test_07/input/ww3_grid_refug.inp b/regtests/mww3_test_07/input/ww3_grid_refug.inp index fd32d2678..c1c93d379 100644 --- a/regtests/mww3_test_07/input/ww3_grid_refug.inp +++ b/regtests/mww3_test_07/input/ww3_grid_refug.inp @@ -45,7 +45,7 @@ $ Z0MAX = 0.0020, SINTHP=2.0, SWELLFPAR = 3, SWELLF = 0.80, TAUWSHELTER = 0.0, SWELLF2=-0.018, SWELLF3= 0.015, Z0RAT = 0.04, SWELLF4 = 100000, SWELLF5 = 1.2 / -&SDS4 SDSC1 = -4.2, SDSBR = 0.00085, +&SDS4 SDSBCHOICE = 1, SDSBR = 0.00085, SDSC2 = -2.2E-5, SDSC3 = 0.000, SDSC4 = 1. , SDSC5 = 0., SDSC6 = 0.30, SDSDTH = 80., FXFM3= 2.5, SDSCOS = 2., SDSISO = 2 / diff --git a/regtests/ww3_tp1.8/input/namelists_VALIDATION.nml b/regtests/ww3_tp1.8/input/namelists_VALIDATION.nml index f5141cf00..5611a0ffb 100644 --- a/regtests/ww3_tp1.8/input/namelists_VALIDATION.nml +++ b/regtests/ww3_tp1.8/input/namelists_VALIDATION.nml @@ -1,7 +1,7 @@ &PRO3 WDTHCG = 1.50, WDTHTH = 1.50 / & Unified breaking term by Filipot & Ardhuin (JGR 2012) &SIN4 TAUWSHELTER= 0. / -&SDS4 SDSC1 = 1.0, SDSC2 = 0.0, SDSBCK =0.185, SDSHCK = 1.5 / +&SDS4 SDSBCHOICE = 2, SDSC2 = 0.0, SDSBCK =0.185, SDSHCK = 1.5 / &DB1 BJALFA = 0. / &OUTS US3D = 1 , I1US3D = 1 , I2US3D = 30 / END OF NAMELISTS diff --git a/regtests/ww3_tp1.8/input/ww3_grid.inp b/regtests/ww3_tp1.8/input/ww3_grid.inp index c9771fd62..c67d6ecab 100644 --- a/regtests/ww3_tp1.8/input/ww3_grid.inp +++ b/regtests/ww3_tp1.8/input/ww3_grid.inp @@ -39,7 +39,7 @@ $ Propagation schemes - - - - - - - - - - - - - - - - - - - - - - - - -$ &PRO3 WDTHCG = 1.50, WDTHTH = 1.50 / & Unified breaking term by Filipot & Ardhuin (JGR 2012) &SIN4 TAUWSHELTER= 0. / - &SDS4 SDSC1 = 1.0, SDSC2 = 0.0, SDSBCK =0.185, SDSHCK = 1.5 / + &SDS4 SDSBCHOICE = 2, SDSC2 = 0.0, SDSBCK =0.185, SDSHCK = 1.5 / &DB1 BJALFA = 0. / $ Output of Stokes drift spectrum &OUTS US3D = 1 , I1US3D = 1 , I2US3D = 30 / diff --git a/regtests/ww3_tp2.15/input/namelists_5km.nml b/regtests/ww3_tp2.15/input/namelists_5km.nml index 177945fdc..f28f4cc6d 100644 --- a/regtests/ww3_tp2.15/input/namelists_5km.nml +++ b/regtests/ww3_tp2.15/input/namelists_5km.nml @@ -1,5 +1,5 @@ &SIN4 BETAMAX = 1.33, Z0MAX = 0.002 / -&SDS4 SDSC1 = 0.0, FXFM3=2.5, SDSBR = 0.00085, SDSCUM = 0.0 / +&SDS4 SDSBCHOICE = 1, FXFM3=2.5, SDSBR = 0.00085, SDSCUM = 0.0 / &SNL1 NLPROP = 2.7E7 / &MISC STDX = 11.2, STDY = 11.2, STDT = 1800., FLAGTR = 4 / END OF NAMELISTS diff --git a/regtests/ww3_tp2.15/input/namelists_ADRIATIC.nml b/regtests/ww3_tp2.15/input/namelists_ADRIATIC.nml index 177945fdc..f28f4cc6d 100644 --- a/regtests/ww3_tp2.15/input/namelists_ADRIATIC.nml +++ b/regtests/ww3_tp2.15/input/namelists_ADRIATIC.nml @@ -1,5 +1,5 @@ &SIN4 BETAMAX = 1.33, Z0MAX = 0.002 / -&SDS4 SDSC1 = 0.0, FXFM3=2.5, SDSBR = 0.00085, SDSCUM = 0.0 / +&SDS4 SDSBCHOICE = 1, FXFM3=2.5, SDSBR = 0.00085, SDSCUM = 0.0 / &SNL1 NLPROP = 2.7E7 / &MISC STDX = 11.2, STDY = 11.2, STDT = 1800., FLAGTR = 4 / END OF NAMELISTS diff --git a/regtests/ww3_tp2.15/input/ww3_grid.inp b/regtests/ww3_tp2.15/input/ww3_grid.inp index abbc62c3e..81d275963 100644 --- a/regtests/ww3_tp2.15/input/ww3_grid.inp +++ b/regtests/ww3_tp2.15/input/ww3_grid.inp @@ -9,7 +9,7 @@ $ 900. 450. 450. 5. $ &SIN4 BETAMAX = 1.33, Z0MAX = 0.002 / - &SDS4 SDSC1 = 0.0, FXFM3=2.5, SDSBR = 0.00085, SDSCUM = 0.0 / + &SDS4 SDSBCHOICE = 1, FXFM3=2.5, SDSBR = 0.00085, SDSCUM = 0.0 / &SNL1 NLPROP = 2.7E7 / &MISC STDX = 11.2, STDY = 11.2, STDT = 1800., FLAGTR = 4 / END OF NAMELISTS diff --git a/regtests/ww3_tp2.15/input/ww3_grid_5km.inp b/regtests/ww3_tp2.15/input/ww3_grid_5km.inp index 044407a89..5c1750e65 100644 --- a/regtests/ww3_tp2.15/input/ww3_grid_5km.inp +++ b/regtests/ww3_tp2.15/input/ww3_grid_5km.inp @@ -9,7 +9,7 @@ $ 900. 300. 450. 5. $ &SIN4 BETAMAX = 1.33, Z0MAX = 0.002 / - &SDS4 SDSC1 = 0.0, FXFM3=2.5, SDSBR = 0.00085, SDSCUM = 0.0 / + &SDS4 SDSBCHOICE = 1, FXFM3=2.5, SDSBR = 0.00085, SDSCUM = 0.0 / &SNL1 NLPROP = 2.7E7 / &MISC STDX = 11.2, STDY = 11.2, STDT = 1800., FLAGTR = 4 / END OF NAMELISTS diff --git a/regtests/ww3_tp2.17/input/namelists_a.nml b/regtests/ww3_tp2.17/input/namelists_a.nml index 4727ab14b..b099a9af6 100644 --- a/regtests/ww3_tp2.17/input/namelists_a.nml +++ b/regtests/ww3_tp2.17/input/namelists_a.nml @@ -31,15 +31,15 @@ JGS_LIMITER = F, JGS_NORM_THR = 1.E-20 / &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, -SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, +SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, -WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / +WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/namelists_b.nml b/regtests/ww3_tp2.17/input/namelists_b.nml index 4964da872..245ba944c 100644 --- a/regtests/ww3_tp2.17/input/namelists_b.nml +++ b/regtests/ww3_tp2.17/input/namelists_b.nml @@ -42,15 +42,15 @@ JGS_LIMITER = F, JGS_NORM_THR = 1.E-6 / &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, -SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, +SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, -WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / +WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/namelists_c.nml b/regtests/ww3_tp2.17/input/namelists_c.nml index d3af172fd..6b2eed137 100644 --- a/regtests/ww3_tp2.17/input/namelists_c.nml +++ b/regtests/ww3_tp2.17/input/namelists_c.nml @@ -41,15 +41,15 @@ JGS_LIMITER = F, JGS_NORM_THR = 1.E-20 / &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, -SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, +SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, -WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / +WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/namelists_inla.nml b/regtests/ww3_tp2.17/input/namelists_inla.nml index 4727ab14b..b099a9af6 100644 --- a/regtests/ww3_tp2.17/input/namelists_inla.nml +++ b/regtests/ww3_tp2.17/input/namelists_inla.nml @@ -31,15 +31,15 @@ JGS_LIMITER = F, JGS_NORM_THR = 1.E-20 / &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, -SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, +SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, -WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / +WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/namelists_inlb.nml b/regtests/ww3_tp2.17/input/namelists_inlb.nml index 4964da872..245ba944c 100644 --- a/regtests/ww3_tp2.17/input/namelists_inlb.nml +++ b/regtests/ww3_tp2.17/input/namelists_inlb.nml @@ -42,15 +42,15 @@ JGS_LIMITER = F, JGS_NORM_THR = 1.E-6 / &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, -SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, +SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, -WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / +WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/namelists_inlc.nml b/regtests/ww3_tp2.17/input/namelists_inlc.nml index d3af172fd..6b2eed137 100644 --- a/regtests/ww3_tp2.17/input/namelists_inlc.nml +++ b/regtests/ww3_tp2.17/input/namelists_inlc.nml @@ -41,15 +41,15 @@ JGS_LIMITER = F, JGS_NORM_THR = 1.E-20 / &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, -SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, +SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, -WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / +WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/ww3_grid_a.inp b/regtests/ww3_tp2.17/input/ww3_grid_a.inp index e0f3eded3..9d7926330 100755 --- a/regtests/ww3_tp2.17/input/ww3_grid_a.inp +++ b/regtests/ww3_tp2.17/input/ww3_grid_a.inp @@ -130,15 +130,15 @@ $ $ &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, - SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, + SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, - WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / + WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/ww3_grid_b.inp b/regtests/ww3_tp2.17/input/ww3_grid_b.inp index 60bac469c..2eec9dce9 100755 --- a/regtests/ww3_tp2.17/input/ww3_grid_b.inp +++ b/regtests/ww3_tp2.17/input/ww3_grid_b.inp @@ -141,15 +141,15 @@ $ $ &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, - SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, + SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, - WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / + WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/ww3_grid_c.inp b/regtests/ww3_tp2.17/input/ww3_grid_c.inp index a6ee40e93..1c6e6a98f 100755 --- a/regtests/ww3_tp2.17/input/ww3_grid_c.inp +++ b/regtests/ww3_tp2.17/input/ww3_grid_c.inp @@ -140,15 +140,15 @@ $ $ &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, - SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, + SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, - WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / + WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/ww3_grid_inla.inp b/regtests/ww3_tp2.17/input/ww3_grid_inla.inp index e0f3eded3..9d7926330 100755 --- a/regtests/ww3_tp2.17/input/ww3_grid_inla.inp +++ b/regtests/ww3_tp2.17/input/ww3_grid_inla.inp @@ -130,15 +130,15 @@ $ $ &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, - SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, + SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, - WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / + WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/ww3_grid_inlb.inp b/regtests/ww3_tp2.17/input/ww3_grid_inlb.inp index 60bac469c..2eec9dce9 100755 --- a/regtests/ww3_tp2.17/input/ww3_grid_inlb.inp +++ b/regtests/ww3_tp2.17/input/ww3_grid_inlb.inp @@ -141,15 +141,15 @@ $ $ &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, - SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, + SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, - WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / + WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.17/input/ww3_grid_inlc.inp b/regtests/ww3_tp2.17/input/ww3_grid_inlc.inp index 2d64d9817..43a2d27fc 100755 --- a/regtests/ww3_tp2.17/input/ww3_grid_inlc.inp +++ b/regtests/ww3_tp2.17/input/ww3_grid_inlc.inp @@ -140,15 +140,15 @@ $ $ &SNL1 LAMBDA = 0.250, NLPROP = 0.250E+08, KDCONV = 0.750, KDMIN = 0.500, SNLCS1 = 5.500, SNLCS2 = 0.833, SNLCS3 = -1.250 / -&SDS4 SDSC1 = 0.0000E+00, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, +&SDS4 SDSBCHOICE = 1, SDSC2 = -0.2200E-04, SDSCUM = -0.4034E+00, SDSC4 = 0.1000E+01, SDSC5 = 0.0000E+00, SDSC6 = 0.3000E+00, WNMEANP =0.50, FXPM3 =4.00,FXFM3 =9.90, SDSBINT = 0.3000E+00, SDSBCK = 0.0000E+00, SDSABK = 1.500, SDSPBK = 4.000, SDSHCK = 1.50, SDSBR = 0.9000E-03, SDSSTRAIN = 0.000, - SDSBR2 = 0.80, SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, + SDSP = 2.00, SDSISO = 2, SDSCOS =2.0, SDSDTH = 80.0, SDSBRF1 = 0.50, SDSBRFDF = 0, SDSBM0 = 1.00, SDSBM1 = 0.00, SDSBM2 = 0.00, SDSBM3 = 0.00, SDSBM4 = 0.00, - WHITECAPWIDTH = 0.30, SDSLFGEN = 0.00, SDSHFGEN = 0.00 / + WHITECAPWIDTH = 0.30 / &SBT1 GAMMA = -0.6700E-01 / &SDB1 BJALFA = 1.000, BJGAM = 0.730, BJFLAG = .TRUE. / &PRO3 CFLTM = 0.70, WDTHCG = 1.50, WDTHTH = 1.50 / diff --git a/regtests/ww3_tp2.5/input_REF/ww3_ounp.inp b/regtests/ww3_tp2.5/input_REF/ww3_ounp.inp index a7d2cf362..6cdea6b83 100644 --- a/regtests/ww3_tp2.5/input_REF/ww3_ounp.inp +++ b/regtests/ww3_tp2.5/input_REF/ww3_ounp.inp @@ -28,7 +28,7 @@ $ flag for dimensions order time,station [T] or station,time [F] $ ww3. 6 - 4 + 3 F 100 1 0 diff --git a/regtests/ww3_tp2.5/input_REF/ww3_ounp.nml b/regtests/ww3_tp2.5/input_REF/ww3_ounp.nml index b009df1c3..bdb824c37 100644 --- a/regtests/ww3_tp2.5/input_REF/ww3_ounp.nml +++ b/regtests/ww3_tp2.5/input_REF/ww3_ounp.nml @@ -35,7 +35,6 @@ ! FILE%NETCDF = 3 ! Netcdf version [3|4] ! -------------------------------------------------------------------- ! &FILE_NML - FILE%NETCDF = 4 / ! -------------------------------------------------------------------- ! From 1d318eacee3800ef2addc19464dd1de0a0f507c6 Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Sun, 26 Apr 2020 21:57:31 +0200 Subject: [PATCH 37/84] Feature/is2update (#188) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct minor changes from old develop branch * update default IS2 param - see Ardhuin et al 2020 * integrate updates from Fabrice * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * set ww3 version to 7.xx * update nml in ww3_tic1.4 * update matrix datarmor to 2019 compilers * update matrix datarmor compiler and environment * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * correct output date for point output * set netcdf version to 3 * explicitly set the array range to get b4b outputs * RREF initialized just after allocation to get b4b with unst regtest ww3_tp2.7 RREF is not used for unst grid but it's written in mod_def anyway Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- manual/eqs/IS2.tex | 88 +++++++++++++------------- model/ftn/w3sis2md.ftn | 30 ++++----- model/ftn/ww3_grid.ftn | 12 ++-- regtests/ww3_tic1.4/input/ww3_ounf.inp | 2 +- regtests/ww3_tic1.4/input/ww3_ounf.nml | 2 +- regtests/ww3_tic1.4/input/ww3_shel.inp | 14 ++-- regtests/ww3_tic1.4/input/ww3_shel.nml | 24 ++++--- regtests/ww3_tic1.4/input/ww3_strt.inp | 4 +- regtests/ww3_tic2.1/info | 2 +- 9 files changed, 91 insertions(+), 87 deletions(-) diff --git a/manual/eqs/IS2.tex b/manual/eqs/IS2.tex index f911331dc..8024c7560 100644 --- a/manual/eqs/IS2.tex +++ b/manual/eqs/IS2.tex @@ -104,21 +104,8 @@ \subsubsection{~$S_{is}$: Floe-size dependent scattering and dissipation} \label -Inelastic dissipation was added in this routine, following \cite{art:Wad73}, because it critically -depends on the floe size. It assumes that the floes deformation is not fully elastic, and that the secondary creep under the wave-induced cyclic causes the dissipation of wave energy into heat. -We use the ice floe law -\begin{equation} -%\left(\frac{d\varepsilon}{dt}\right)_{ij}=\frac{\tau^{n-1}}{B^n}\sigma_{i,j}' -\left(\frac{d\varepsilon}{dt}\right)_{ij}=\frac{\tau^2}{B^3}\sigma_{i,j}', -\end{equation} -$B$ is the floe law constant and is a function of ice temperature. Using the normalized parameter estimated by \cite{art:Cea98} from -laboratory experiments, $A=10^{11}$, and a uniform ice temperature of 270~K gives a value -of $B=10^7$~s$^{1/3}$. The volumic dissipation rate is -\begin{equation} -%\frac{de}{dt}= | \sigma_{xx}^{n+1}/(2B)^{n} |. -\frac{de}{dt}= | \sigma_{xx}^{4}/(2B)^3 |. -\end{equation} -Also, the cyclic deformation of the ice can require a much larger elastic energy than the gravity potential +Anelastic or inelastic dissipation was inclued in this routine instead of ICn, because it critically +depends on the floe size. Following \cite{art:Bea18}, it is assumed that the floes deformation is not fully elastic, and that the wave-induced cyclic strain and stress cause the dissipation of wave energy into heat. The cyclic deformation of the ice can require a much larger elastic energy than the gravity potential energy, but this is only true if the ice is not broken. As a result, working with a wave elevation spectrum $E(k)$ could introduce large changes in $E(k)$ when the ice is broken or reformed. Instead we prefer to work with an energy spectrum $ R C_g E(k)/C_{g,\mathrm{ice}}$, using the coefficient $R$ introduced by \cite{art:Wad73}, which @@ -136,47 +123,62 @@ \subsubsection{~$S_{is}$: Floe-size dependent scattering and dissipation} \label R=1+C_R\frac{4Y^*h^3\pi^4}{3\rho g \lambda^4(1-\nu^2)}, \label{R} \end{equation} -where we have been careful that \cite{art:Wad73} used $2h$ for the ice thickness, +where we have been careful that \cite{art:Wad73} used $2h$ for the ice thickness, and $C_R$ is by default set to 1.0 using the namelist parameter {\code IS2BREAKE}, but it can be set to zero to work with the true elevation spectrum instead. This factor $R$ is also applied in the calculation of ice breakup by the waves.\\ - -The inelastic dissipation is linearized as $S_{\mathrm{ine}}=-\alpha_{\mathrm{ine}} E_{ice}$. -The coefficient $\alpha_{\mathrm{creep}}$ was adapted from the -\cite{art:Wad73} monochromatic formula and is equal to +By default, the anelastic dissipation term is used, activated by the namelist parameter {\code IS2ANDISB} set to {\code TRUE}. +Anelastic dissipation corresponds to the energy dissipated into heat during the oscillatory motion of the dislocations induced by the cyclic stress associated to waves. This behaviour results in a hysteresis that can be seen in stress-strain diagrams when sea ice is submitted to a sinusoidal stress as presented in Fig.~4 of \cite{art:Cea98} study. This latter article also suggests a model for the anelastic behaviour of sea ice, with a stress-strain relationship that enables to compute the area within the ellipse which results from the hysteresis. Anelastic dissipation is linearized as $S_{\mathrm{ane}}=-\alpha_{\mathrm{ane}} E_{ice}$. +\cite{art:Bea18} have derived $\alpha_{\mathrm{ane}}$ from \cite{art:Cea98} model for a monochromatic stress, \begin{equation} -%\alpha_{\mathrm{ine}}=0.05 B h^5 \left(\frac{Y^*}{2B(1-\nu^2)}\right)^{(n+1)} I_n k^{n+1} \frac{C_g^2}{\rho g C_{g_{ice}}R^2} F \int_{k_1}^{k_2} k_{ice}^4 E(k)dk -\alpha_{\mathrm{ine}}=0.05 B h^5 \left(\frac{Y^*}{2B(1-\nu^2)}\right)^{4} I_3 k^4 \frac{C_g^2}{\rho g C_{g_{ice}}R^2} F_{\rm broken} \int_{k_1}^{k_2} k_{ice}^4 E(k)dk, -\label{eq:alpha_creep} -\end{equation} -where $I_3=\frac{1}{\pi} \int_0^\pi \sin^{4}\beta d\beta$. Details of the computation are given in \cite{art:Bea18}. -$F_{\rm broken}$ is a heuristic smooth transition from unbroken to broken ice, so that the dissipation +\alpha_{\mathrm{ane}}= \dfrac{A}{6}\left(k_i^{2}\dfrac{Y^*}{(1-\nu^{2})\rho gG}\right)^{2}h^{3}\frac{C_g}{GC_{g,i}} F_{\rm broken}, +\label{eq:alpha_ane} +\end{equation} +where $F_{\rm broken}$ is a heuristic smooth transition from unbroken to broken ice, so that the dissipation gradually goes to zero for waves much longer than the floe sizes, because in that case the ice does not deform and produces no dissipation of wave energy, \begin{equation} -F_{\rm broken}=\tanh \left( {\frac{D_{\max}-C_{\lambda}\lambda_{ice}} {D_{\max}C_{smooth} } }\right) . +F_{\rm broken}=\tanh \left( {\frac{D_{\max}-C_{\lambda}\lambda_{ice}} {D_{\max}C_{smooth} } }\right). \label{smooth} \end{equation} -Inelastic dissipation is computed after updating $D_{\max}$. +Anelastic or inelastic dissipation is computed after updating $D_{\max}$. %dissipation is full for %$\lambda_{ice}\leq D_{\max}$ and disappears for $C_{\lambda}\lambda_{ice}< D_{\max}$. The two parameters in this smooth transition $C_{\lambda}$ and $C_{smooth}$ are -set to $0.4$ and $0.2$ by the adjustable namelist parameters {\code IS2CREEPD} and {\code IS2CREEPC}.\\ - -Possibility of subsituting this inelastic dissipation by an anelastic dissipation term has also been added. It is activated by setting the namelist parameter {\code IS2ANDISB} to {\code TRUE}. -Anelastic dissipation corresponds to the energy dissipated into heat during the oscillatory motion of the dislocations induced by the cyclic stress associated to waves. This behaviour results in a hysteresis that can be seen in stress-strain diagrams when sea ice is submitted to a sinusoidal stress as presented in Fig.~4 of \cite{art:Cea98} study. This latter article also suggests a model for the anelastic behaviour of sea ice, with a stress-strain relationship that enables to compute the area within the ellipse which results from the hysteresis. Similarly to what has been done for inelastic dissipation, anelastic dissipation is linearized as $S_{\mathrm{ane}}=-\alpha_{\mathrm{ane}} E_{ice}$. -\cite{art:Bea18} have derived $\alpha_{\mathrm{ane}}$ from \cite{art:Cea98} model for a monochromatic stress. They obtained the following coefficient: -\begin{equation} -\alpha_{\mathrm{ane}}= \dfrac{A}{6}\left(k_i^{2}\dfrac{Y^*}{(1-\nu^{2})\rho gG}\right)^{2}h^{3}\frac{C_g}{GC_{g,i}} F_{\rm broken}, -\label{eq:alpha_ane} -\end{equation} -where $F_{\rm broken}$ is the same as for inelastic dissipation and $A$ is equal to: +set to $0.5$ and $0.4$ by default, as adujsted to Southern Ocean wave data. They can be modified by the namelist parameters {\code IS2CREEPD} and {\code IS2CREEPC}. +FInally, $A$ is given by \begin{equation} A=\dfrac{4}{3}\sigma \alpha_{d}~\delta D^{d}~\dfrac{1}{\exp(\alpha_{d}s)+\exp(-\alpha_{d}s)}, \label{eq:A_ane} \end{equation} -in which terms are detailed in the table at the end of this section.\\ +in which terms are detailed in the table at the end of this section. The magnitude of the dissipation is controlled by the dislocation relaxation parameter $\delta D^{d}$ .\\ + + +An alternative inelastic dissipation can be activated by setting {\code IS2ANDISB} to {\code FALSE}. In this case the following dissipation is used: + +We use the ice floe law +\begin{equation} +%\left(\frac{d\varepsilon}{dt}\right)_{ij}=\frac{\tau^{n-1}}{B^n}\sigma_{i,j}' +\left(\frac{d\varepsilon}{dt}\right)_{ij}=\frac{\tau^2}{B^3}\sigma_{i,j}', +\end{equation} +$B$ is the floe law constant and is a function of ice temperature. Using the normalized parameter estimated by \cite{art:Cea98} from +laboratory experiments, $A=10^{11}$, and a uniform ice temperature of 270~K gives a value +of $B=10^7$~s$^{1/3}$. The volumic dissipation rate is +\begin{equation} +%\frac{de}{dt}= | \sigma_{xx}^{n+1}/(2B)^{n} |. +\frac{de}{dt}= | \sigma_{xx}^{4}/(2B)^3 |. +\end{equation} +The inelastic dissipation is linearized as $S_{\mathrm{ine}}=-\alpha_{\mathrm{ine}} E_{ice}$. +The coefficient $\alpha_{\mathrm{creep}}$ was adapted from the +\cite{art:Wad73} monochromatic formula and is equal to +\begin{equation} +%\alpha_{\mathrm{ine}}=0.05 B h^5 \left(\frac{Y^*}{2B(1-\nu^2)}\right)^{(n+1)} I_n k^{n+1} \frac{C_g^2}{\rho g C_{g_{ice}}R^2} F \int_{k_1}^{k_2} k_{ice}^4 E(k)dk +\alpha_{\mathrm{ine}}=0.05 B h^5 \left(\frac{Y^*}{2B(1-\nu^2)}\right)^{4} I_3 k^4 \frac{C_g^2}{\rho g C_{g_{ice}}R^2} F_{\rm broken} \int_{k_1}^{k_2} k_{ice}^4 E(k)dk, +\label{eq:alpha_creep} +\end{equation} +where $I_3=\frac{1}{\pi} \int_0^\pi \sin^{4}\beta d\beta$, and $F_{\rm broken}$ was defined above. + Details of the computation are given in \cite{art:Bea18}. Finally we recall the various model parameters used in IS2 in the following table. Some are defined as constants in the {\code W3IS2MD} module, others can be adjusted with the {\F SIS2} namelist. @@ -195,10 +197,10 @@ \subsubsection{~$S_{is}$: Floe-size dependent scattering and dissipation} \label Flow law parameter &$n$ & {\code IS2CREEPN} & 3\\ Flow law parameter &$B$ & {\code IS2CREEPB} & 10$^7$~s$^{1/3}$\\ Elastic energy correction & $C_R$ & {\code IS2BREAKE} & 1.0 \\ -Relax. of disloc. compliance & $\delta D^{d}$& {\code IS2ANDISD} & $\Delta_d \Omega b^2/K$ (Pa$^{-1}$)\\ -Dislocation density & $\Delta_d$ & N. A. & 1.8$\times10^{9}$ (m$^{-2}$)\\ -Restoring stress term & $K$ & N. A. & 0.07 (Pa) \\ -Orientation factor & $\Omega$ & N. A. & $\pi^{-1}$ \\ +Relax. of disloc. compliance & $\delta D^{d}$& {\code IS2ANDISD} & $2 \times 10^{-9}$~(Pa$^{-1}$)\\ +%Dislocation density & $\Delta_d$ & N. A. & 1.8$\times10^{9}$ (m$^{-2}$)\\ +%Restoring stress term & $K$ & N. A. & 0.07 (Pa) \\ +%Orientation factor & $\Omega$ & N. A. & $\pi^{-1}$ \\ Burgers vector & $b$ & N. A. & 4.52$\times10^{-10}$ (m) \\ Drag term & $B$ & N. A. & $B_0 \exp(Q_v/(k_bT_K)$ (Pa.s)\\ - & $B_0$ & N. A. & 1.205$\times10^{-9}$ (Pa.s)\\ diff --git a/model/ftn/w3sis2md.ftn b/model/ftn/w3sis2md.ftn index c039171d7..f01d945d6 100644 --- a/model/ftn/w3sis2md.ftn +++ b/model/ftn/w3sis2md.ftn @@ -575,7 +575,7 @@ ELSE END SUBROUTINE INSIS2 !/ ------------------------------------------------------------------- / SUBROUTINE W3SIS2 (A, DEPTH, CICE, ICEH, ICEF, ICEDMAX, IX, IY, & - S, D, DCREEP, WN, CG, WN_R, CG_ICE, R) + S, D, DISSIP, WN, CG, WN_R, CG_ICE, R) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -619,7 +619,7 @@ ELSE ! IX,IY Int I Not used ! S R.A. O Source term (1-D version) ! D R.A. O Diagonal part of scattering (1-D version) -! DCREEP R.A. O Diagonal creep term (1-D version) +! DISSIP R.A. O Diagonal dissipation term (1-D version) ! WN R.A. I Wave number ! CG R.A. I Group speed ! WN_R R.A. I Wave number in ice @@ -680,7 +680,7 @@ ELSE !/ Parameter list REAL, INTENT(IN) :: A(NSPEC), DEPTH, CICE, ICEH, ICEDMAX INTEGER, INTENT(IN) :: IX, IY - REAL, INTENT(OUT) :: S(NSPEC), D(NSPEC), DCREEP(NSPEC), R(NK) + REAL, INTENT(OUT) :: S(NSPEC), D(NSPEC), DISSIP(NSPEC), R(NK) REAL, INTENT(INOUT) :: ICEF REAL, INTENT(IN) :: WN(NK), CG(NK), WN_R(NK), CG_ICE(NK) @@ -701,8 +701,6 @@ ELSE REAL, PARAMETER :: YOUNG = 5.49E+9 ! Young modulus REAL, PARAMETER :: POISSON = 0.3 ! Poisson Ratio REAL :: SIGMA_C -! REAL, PARAMETER :: SIGMA_C = 2.7414E+05 ! Flexural strenght in Pa - ! this is now a parametrer IS2PARS(19) REAL, PARAMETER :: DENS = 1025.0 ! ice density REAL :: GAMMA_TOY REAL, DIMENSION(NK) :: WN_I, WN_RP, WSQ, WLG, WLG_I, CG_I, & @@ -717,7 +715,7 @@ ELSE ! S = 0. D = 0. - DCREEP = 0. + DISSIP = 0. DUMMY = WN WN_I = 0. WN_RP = 0. @@ -731,11 +729,9 @@ ELSE !B_COLE=1.205E-9 * EXP(0.55*1.60218E-19/(1.38064852e-23*263.15)) B_COLE=1.205E-9 * EXP(IS2PARS(24)*1.60218E-19/(1.38064852e-23*268.15)) TAU_D=B_COLE/0.07 - S_D=LOG(SIG(:)*TAU_D) - !IF ((IX.EQ.50).AND.(IY.EQ.20)) WRITE(*,*) 'B', B_COLE, 'SD1' ,S_D(1), 'SD5', S_D(5), 'TAU_D', TAU_D + S_D=LOG(SIG(1:NK)*TAU_D) DELTA_D=IS2PARS(21) - !SIGMA_RATIO =1. - ! +! IF (IS2PARS(9).GT.0) ICEDMIN = IS2PARS(9) IF (IS2PARS(12).GT.0) THEN B=IS2PARS(12) @@ -951,29 +947,29 @@ ELSE END IF END IF !end of test (IS2PARS(3).GT.0.5) ! -! 5. creep dissipation +! 5. inelastic or anelastic dissipation ! IF (IS2PARS(12).GT.0) THEN DO IK = 1, NK ! ! The TANH((DMAX-D*WLG_I(IK))/DMAX*C) ! is an ad hoc factor that goes to zero for WLG << DMAX and 1 for WLG >> DMAX -! this should probably be adjusted... +! this should probably be adjusted. ! IF (IS2PARS(14)*WLG_I(IK).LT.DMAX) THEN SMOOTHD=TANH((DMAX-IS2PARS(14)*WLG_I(IK))/(DMAX*IS2PARS(13))) - IF (IS2PARS(23).LE.0.5) THEN - DCREEP(1+(IK-1)*NTH:IK*NTH)=CREEPFAC*4*CURV(IK) & + IF (IS2PARS(23).LE.0.5) THEN ! this is the inelastic option + DISSIP(1+(IK-1)*NTH:IK*NTH)=CREEPFAC*4*CURV(IK) & *((2*PI)/WLG_I(IK))**(IS2PARS(15)+1) & /(CGRATIO(IK)**1*R(IK)**2) & *SMOOTHD - ELSE - DCREEP(1+(IK-1)*NTH:IK*NTH) =-4*4/3*SIG(IK)* DELTA_D*ALPHA_D *WN_I(IK)**4 * (YOUNG/MP2)**2 & + ELSE ! this is the inelastic option + DISSIP(1+(IK-1)*NTH:IK*NTH) =-4*4/3*SIG(IK)* DELTA_D*ALPHA_D *WN_I(IK)**4 * (YOUNG/MP2)**2 & * (ICEH/2)**3/3 * 1/( EXP(ALPHA_D*S_D(IK)) + EXP(-ALPHA_D*S_D(IK))) & * SMOOTHD /(R(IK)**2*CGRATIO(IK)) / (DWAT*GRAV) *TPIINV END IF END IF - S=S+DCREEP*CICE*A + S=S+DISSIP*CICE*A END DO ! end of loop on IK ENDIF ! end of test (IS2PARS(12).GT.0) ! diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 23012f560..e73c8861b 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -103,6 +103,7 @@ !/ 20-Jun-2018 : Update of ST6 (Q. Liu) ( version 6.06 ) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ 27-Aug-2018 : Add WBT parameter ( version 6.06 ) +!/ 22-Jan-2020 : Update default values for IS2 ( version 7.XX ) !/ 20-Feb-2020 : Include Romero's dissipation in ST4 ( version 7.XX ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), @@ -2279,7 +2280,7 @@ !/IS2 IS2BACKSCAT = 1. !/IS2 IS2BREAK = .FALSE. !/IS2 IS2BREAKF = 3.6 -!/IS2 IS2FLEXSTR=2.7414E+05 ! value used in Boutin et al. JGR 2018. +!/IS2 IS2FLEXSTR=6.00E+05 ! value used in Ardhuin et al. 2020 !/IS2 IS2ISOSCAT=.TRUE. ! uses isotropic back-scatter !/IS2 IS2DISP=.FALSE. !not dispersion only attenuation following Liu disp. eq. !/IS2 IS2DUPDATE=.TRUE. @@ -2287,14 +2288,15 @@ !/IS2 IS2DMIN=20 !/IS2 IS2DAMP=0. !/IS2 IS2CREEPB=0. -!/IS2 IS2CREEPC=0.2 -!/IS2 IS2CREEPD=0.4 +!/IS2 IS2CREEPC=0.4 ! This gives an impact of break-up over a wider freq. range +! ! compared to the 0.2 value in Boutin et al. 2018 +!/IS2 IS2CREEPD=0.5 !/IS2 IS2CREEPN=3.0 !/IS2 IS2BREAKE=1. !/IS2 IS2WIM1=1. -!/IS2 IS2ANDISB=.FALSE. !anelastic instead of inelastic dissipation if IS2CREEPB>0 +!/IS2 IS2ANDISB=.TRUE. !anelastic instead of inelastic dissipation if IS2CREEPB>0 !/IS2 IS2ANDISE=0.55 !energy of activation -!/IS2 IS2ANDISD=1.672E-9! +!/IS2 IS2ANDISD=2.0E-9 !see Ardhuin et al. 2020 !/IS2 IS2ANDISN=1. !dependency on stress. Equal to 1 normally? !/IS2 CALL READNL ( NDSS, 'SIS2', STATUS ) !/IS2 WRITE (NDSO,947) STATUS diff --git a/regtests/ww3_tic1.4/input/ww3_ounf.inp b/regtests/ww3_tic1.4/input/ww3_ounf.inp index fd9ab4d08..6e1a2b838 100755 --- a/regtests/ww3_tic1.4/input/ww3_ounf.inp +++ b/regtests/ww3_tic1.4/input/ww3_ounf.inp @@ -4,7 +4,7 @@ $--------------------------------------------------------------------- $ $ First output time (yyyymmdd hhmmss), increment of output (s), $ and number of output times. $ - 19680606 000000 3600. 1000 + 20120101 000000 3600. 1000 $ $ Fields requested --------------------------------------------------- $ $ diff --git a/regtests/ww3_tic1.4/input/ww3_ounf.nml b/regtests/ww3_tic1.4/input/ww3_ounf.nml index a559cdbbb..ec5a382b6 100644 --- a/regtests/ww3_tic1.4/input/ww3_ounf.nml +++ b/regtests/ww3_tic1.4/input/ww3_ounf.nml @@ -30,7 +30,7 @@ ! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] ! -------------------------------------------------------------------- ! &FIELD_NML - FIELD%TIMESTART = '19680606 000000' + FIELD%TIMESTART = '20120101 000000' FIELD%TIMESTRIDE = '3600.' FIELD%TIMECOUNT = '1000' FIELD%LIST = 'ICE DPT SPR WLV HS TWI FIC IC1 IC5 CGE FP T02 LM WN' diff --git a/regtests/ww3_tic1.4/input/ww3_shel.inp b/regtests/ww3_tic1.4/input/ww3_shel.inp index cc51feee8..902d5432a 100755 --- a/regtests/ww3_tic1.4/input/ww3_shel.inp +++ b/regtests/ww3_tic1.4/input/ww3_shel.inp @@ -1,10 +1,10 @@ $ WAVEWATCH III shell input file $ ------------------------------ - T F Ice parameter 1 + T T Ice parameter 1 T T Ice parameter 2 F F Ice parameter 3 F F Ice parameter 4 - T F Ice parameter 5 + F F Ice parameter 5 F F Mud parameter 1 F F Mud parameter 2 F F Mud parameter 3 @@ -16,12 +16,12 @@ $ ------------------------------ F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. $ - 20120101 000000 - 20120102 120000 + 20120103 180000 + 20120105 120000 $ 1 $ - 20120101 000000 900 20120102 120000 + 20120101 000000 900 20120108 120000 N $ Options : DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 HS LM T02 T0M1 T01 FP DIR SPR $ DP HIG EF TH1M STH1M TH2M STH2M WN PHS PTP PLP PDIR PSPR PWS PDP @@ -31,7 +31,7 @@ $ FBB TBB MSS MSC DTD FC CFX CFD CFK U1 U2 $ ICE DPT SPR WLV HS TWI FIC IC1 IC5 CGE FP T02 LM WN $ - 20120101 000000 900 20120102 120000 + 20120101 000000 900 20120108 120000 0.00 0. 'Point1' 1.00E4 0. 'Point2' 2.00E4 0. 'Point3' @@ -64,7 +64,7 @@ $ Homogeneous field data --------------------------------------------- $ $ ICE1 ice thickness, e.g. 1 m $ ICE2 eddy viscosity parameter of Liu et al. $ constant case: -$ 'IC1' 20120101 000000 0.1 + 'IC1' 20120101 000000 0.8 'IC2' 20120101 000000 1536.0e-4 $ 'IC5' 20120101 000000 30. 'LEV' 20120101 000000 1.1 diff --git a/regtests/ww3_tic1.4/input/ww3_shel.nml b/regtests/ww3_tic1.4/input/ww3_shel.nml index 0e45078a0..4aba43aea 100644 --- a/regtests/ww3_tic1.4/input/ww3_shel.nml +++ b/regtests/ww3_tic1.4/input/ww3_shel.nml @@ -22,8 +22,8 @@ ! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model ! -------------------------------------------------------------------- ! &DOMAIN_NML - DOMAIN%START = '20120101 000000' - DOMAIN%STOP = '20120102 120000' + DOMAIN%START = '20120103 180000' + DOMAIN%STOP = '20120105 120000' / ! -------------------------------------------------------------------- ! @@ -58,9 +58,8 @@ ! INPUT%ASSIM%SPEC2D = 'F' ! -------------------------------------------------------------------- ! &INPUT_NML - INPUT%FORCING%ICE_PARAM1 = 'T' + INPUT%FORCING%ICE_PARAM1 = 'H' INPUT%FORCING%ICE_PARAM2 = 'H' - INPUT%FORCING%ICE_PARAM5 = 'T' INPUT%FORCING%WATER_LEVELS = 'H' INPUT%FORCING%ICE_CONC = 'T' / @@ -280,8 +279,8 @@ ! DATE%RESTART = '19680606 000000' '0' '19680607 000000' ! -------------------------------------------------------------------- ! &OUTPUT_DATE_NML - DATE%FIELD = '20120101 000000' '900' '20120102 120000' - DATE%POINT = '20120101 000000' '900' '20120102 120000' + DATE%FIELD = '20120101 000000' '900' '20120108 120000' + DATE%POINT = '20120101 000000' '900' '20120108 120000' / ! -------------------------------------------------------------------- ! @@ -330,18 +329,23 @@ ! HOMOG_INPUT(I)%VALUE3 = 0 ! -------------------------------------------------------------------- ! &HOMOG_COUNT_NML + HOMOG_COUNT%N_IC1 = 1 HOMOG_COUNT%N_IC2 = 1 HOMOG_COUNT%N_LEV = 1 / &HOMOG_INPUT_NML - HOMOG_INPUT(1)%NAME = 'IC2' + HOMOG_INPUT(1)%NAME = 'IC1' HOMOG_INPUT(1)%DATE = '20120101 000000' - HOMOG_INPUT(1)%VALUE1 = 1536.0e-4 + HOMOG_INPUT(1)%VALUE1 = 0.8 - HOMOG_INPUT(2)%NAME = 'LEV' + HOMOG_INPUT(2)%NAME = 'IC2' HOMOG_INPUT(2)%DATE = '20120101 000000' - HOMOG_INPUT(2)%VALUE1 = 1.1 + HOMOG_INPUT(2)%VALUE1 = 1536.0e-4 + + HOMOG_INPUT(3)%NAME = 'LEV' + HOMOG_INPUT(3)%DATE = '20120101 000000' + HOMOG_INPUT(3)%VALUE1 = 1.1 / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tic1.4/input/ww3_strt.inp b/regtests/ww3_tic1.4/input/ww3_strt.inp index d7a74fc51..30798c5ac 100755 --- a/regtests/ww3_tic1.4/input/ww3_strt.inp +++ b/regtests/ww3_tic1.4/input/ww3_strt.inp @@ -5,8 +5,8 @@ $ 0.1 0.0001 225. 12 0. -5.E3 0. 5.E3 1.0 $ 0.1 0.0001 315. 12 0. -5.E3 0. 5.E3 1.0 $ 0.1 0.0001 240. 2 0. -5.E3 0. 5.E3 1.0 $ fp sip thm ncos xm six ym siy hmax -$ 0.07 0.05 270. 100 0. -5.E3 0. 5.E3 3.0 - 0.1 0.03 270. 100 0. -5.E3 0. 5.E3 3.0 +$ 0.07 0.05 270. 100 0. -5.E3 0. 5.E3 2.0 + 0.1 0.02 270. 100 0. -5.E3 0. 5.E3 3.0 $ 0.1 0.0001 270. 100 0. -5.E3 0. 5.E3 3.0 $ 0.1 0.0001 270. 2 0. -5.E3 0. 5.E3 1.0 $ 0.1 0.0001 300. 2 0. -5.E3 0. 5.E3 1.0 diff --git a/regtests/ww3_tic2.1/info b/regtests/ww3_tic2.1/info index bc05790fa..61602ad21 100644 --- a/regtests/ww3_tic2.1/info +++ b/regtests/ww3_tic2.1/info @@ -46,7 +46,7 @@ # Example run_test command(s): # # (some details will vary by local system and configuration) # # ./bin/run_test -w work_IC1 -i input_IC1 ../model ww3_tic2.1 # -# ./bin/run_test -w work_IC2IS2 -c gnu_debug -i input_IC2IS2 # +# ./bin/run_test -w work_IC2IS2 -c gnu_debug -i input_IC2IS2 -o netcdf # # ../model ww3_tic2.1 # # ./bin/run_test -p mpirun -n 3 -w work_IC4 -i input_IC4 # # ../model ww3_tic2.1 # From a81804bf2469efe455659d10302f33ae1b1a199a Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Sun, 10 May 2020 18:18:45 +0200 Subject: [PATCH 38/84] Bugfix/spconv : spectral discretization conversion (#194) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct minor changes from old develop branch * update default IS2 param - see Ardhuin et al 2020 * Created test case folder for SPCONV / W3CSPC * Added input files for regtest that will test W3CSPC bug Also modified run_test to allow input files in CDL format... * ww3_bounc is now calling the spectral interpolation W3CSPC ... is the result ay good? .. to be checked * I had forgotten the input file for spectra, using CDL format * That is it. W3CSPC now works with ww3_bounc. * integrate updates from Fabrice * move all developments about is in feature/IS2update * remove all dev about is2 (they are into IS2update) * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * update path for matrix add datarmor for OMP * set version to 7.XX * manually merge from develop add regtest to matrix.base Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- model/bin/cmplr.env | 2 +- model/ftn/w3iobcmd.ftn | 3 +- model/ftn/ww3_bounc.ftn | 171 +- regtests/bin/matrix.base | 1 + regtests/bin/matrix_datarmor | 24 +- regtests/bin/run_test | 15 +- regtests/ww3_tp1.10/info | 4 +- regtests/ww3_tp1.11/info | 32 + regtests/ww3_tp1.11/input/1-D.depth | 1 + regtests/ww3_tp1.11/input/namelists_1-D.nml | 3 + regtests/ww3_tp1.11/input/points.list | 6 + regtests/ww3_tp1.11/input/spec.list | 1 + regtests/ww3_tp1.11/input/switch | 1 + .../input/ww3.Point0_196806_spec.cdl | 4372 +++++++++++++++++ regtests/ww3_tp1.11/input/ww3_bounc.nml | 22 + regtests/ww3_tp1.11/input/ww3_grid.nml | 267 + regtests/ww3_tp1.11/input/ww3_ounf.nml | 58 + regtests/ww3_tp1.11/input/ww3_ounp.nml | 133 + regtests/ww3_tp1.11/input/ww3_shel.nml | 108 + regtests/ww3_tp1.11/input/ww3_strt.inp | 5 + 20 files changed, 5104 insertions(+), 125 deletions(-) create mode 100644 regtests/ww3_tp1.11/info create mode 100644 regtests/ww3_tp1.11/input/1-D.depth create mode 100644 regtests/ww3_tp1.11/input/namelists_1-D.nml create mode 100644 regtests/ww3_tp1.11/input/points.list create mode 100644 regtests/ww3_tp1.11/input/spec.list create mode 100644 regtests/ww3_tp1.11/input/switch create mode 100644 regtests/ww3_tp1.11/input/ww3.Point0_196806_spec.cdl create mode 100644 regtests/ww3_tp1.11/input/ww3_bounc.nml create mode 100644 regtests/ww3_tp1.11/input/ww3_grid.nml create mode 100644 regtests/ww3_tp1.11/input/ww3_ounf.nml create mode 100644 regtests/ww3_tp1.11/input/ww3_ounp.nml create mode 100644 regtests/ww3_tp1.11/input/ww3_shel.nml create mode 100644 regtests/ww3_tp1.11/input/ww3_strt.inp diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 81a553bd2..a70d604c7 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -151,7 +151,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi # omp options - if [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ]; then + if [ ! -z "$(echo $cmplr | grep datarmor)" ] || [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ]; then optomp="-qopenmp" else optomp="-openmp" diff --git a/model/ftn/w3iobcmd.ftn b/model/ftn/w3iobcmd.ftn index 1664de58b..9f6f9c94d 100644 --- a/model/ftn/w3iobcmd.ftn +++ b/model/ftn/w3iobcmd.ftn @@ -93,7 +93,7 @@ !/ TH1I to W3ODATMD. ( version 3.14.3 ) !/ 31-Oct-2010 : Implementing unstructured grid ( version 3.14.3 ) !/ (A. Roland and F. Ardhuin) -!/ 05-Apr-2011 : Moved the SPCONV call into loop ( version 3.14.3 ) +!/ 05-Apr-2011 : Moved the W3CSPC call into loop ( version 3.14.3 ) !/ 12-Jun-2012 : Add /RTD option or rotated grid option. !/ (Jian-Guo Li) ( version 4.06 ) !/ 03-Jul-2013 : Corrected ABPIN indices ( version 4.11 ) @@ -580,6 +580,7 @@ ! ! In this case the spectral resolution is not compatible and ! the spectrum TMPSPC in nest file must be re-gridded into ABPIN to fit the model run +! spectral conversion is done by W3CSPC in w3cspcmd.ftn ! ALLOCATE ( TMPSPC(NKI*NTHI,NBI2) ) DO IP=1, NBI2 diff --git a/model/ftn/ww3_bounc.ftn b/model/ftn/ww3_bounc.ftn index 55e1a0a1f..9fbbad6fb 100644 --- a/model/ftn/ww3_bounc.ftn +++ b/model/ftn/ww3_bounc.ftn @@ -7,7 +7,7 @@ !/ | F. Ardhuin | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 04-May-2020 | !/ +-----------------------------------+ !/ !/ 24-May-2013 : Adaptation from ww3_bound.ftn ( version 4.08 ) @@ -17,6 +17,7 @@ !/ 20-Oct-2016 : Error statement updates ( version 5.15 ) !/ 20-Mar-2018 : Improve netcdf file reading ( version 6.02 ) !/ 15-May-2018 : Add namelist feature ( version 6.05 ) +!/ 04-May-2020 : Update spectral conversion ( version 7.XX ) !/ !/ Copyright 2012-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -97,9 +98,12 @@ USE CONSTANTS USE W3WDATMD, ONLY: W3NDAT, W3SETW USE W3ADATMD, ONLY: W3NAUX, W3SETA - USE W3ODATMD, ONLY: W3NOUT, W3SETO, FNMPRE + USE W3ODATMD, ONLY: W3NOUT, W3SETO, FNMPRE, NDST, NDSE + USE W3CSPCMD, ONLY: W3CSPC - USE W3GDATMD, ONLY: NK, NTH, XFR, FR1, GNAME, W3NMOD, W3SETG, & + + USE W3GDATMD, ONLY: NK, NTH, XFR, FR1, DTH, TH, FACHFE, & + GNAME, W3NMOD, W3SETG,& NSEA, MAPSTA, XYB, GTYPE, XGRD, YGRD, X0, Y0, & SX, SY, MAPSF, UNGTYPE, CLGTYPE, RLGTYPE, FLAGLL USE W3ODATMD, ONLY: NDSO, NDSE @@ -135,7 +139,7 @@ INTEGER, ALLOCATABLE :: IPBPI(:,:), IPBPO(:,:), NCID(:), & DIMID(:,:), DIMLN(:,:) ! - REAL :: FR1I, TH1I, FACTOR, OFFSET, DMIN, & + REAL :: FR1I, XFRI, TH1I, FACTOR, OFFSET, DMIN,& DIST, DMIN2, COS1, DLON, DLAT, DLO ! REAL, ALLOCATABLE :: SPEC2D(:,:,:,:), LATS(:), LONS(:), & @@ -143,6 +147,9 @@ XBPI(:), YBPI(:), RDBPI(:,:), & XBPO(:), YBPO(:), RDBPO(:,:), & ABPIN(:,:), ABPIN2(:,:,:) +! + REAL, ALLOCATABLE :: TMPSPCI(:,:),TMPSPCO(:,:) + ! DOUBLE PRECISION :: REFJULDAY, CURJULDAY DOUBLE PRECISION, ALLOCATABLE :: TIMES(:) @@ -155,7 +162,7 @@ CHARACTER*512, ALLOCATABLE :: SPECFILES(:) CHARACTER, ALLOCATABLE :: STATION(:,:) ! - LOGICAL :: FLGNML + LOGICAL :: FLGNML, SPCONV ! !/ !/ ------------------------------------------------------------------- / @@ -419,7 +426,7 @@ ALLOCATE(TIMES(NT1)) ALLOCATE (FREQ(NK1),THETA(NTH1)) ALLOCATE (SPEC2D(NTH1,NK1,NT1,NBO2)) - ALLOCATE (ABPIN2(NK*NTH1,NT1,NBO2)) + ALLOCATE (ABPIN2(NK*NTH,NT1,NBO2)) ! instanciates time REFDATE(:)=0. @@ -439,7 +446,8 @@ CALL D2J(REFDATE,REFJULDAY,IERR) ELSE - IF (NKI.NE.NK1.OR.NTHI.NE.NTH1) GOTO 805 + IF (NKI.NE.NK1.OR.NTHI.NE.NTH1.OR.NT1.NE.NTI & + ) GOTO 805 END IF ! position variables : lon/lat or x/y @@ -472,7 +480,7 @@ CALL CHECK_ERR(IRET) IRET=NF90_GET_VAR(NCID(IP),VARID(5),THETA) CALL CHECK_ERR(IRET) - THETA=(PI/180)*THETA + THETA=MOD(2.5*PI-(PI/180)*THETA,TPI) ! 2D spectra depending on station name or lat/lon IRET=NF90_INQ_VARID(NCID(IP),"efth",VARID(7)) @@ -501,93 +509,63 @@ IRET=NF90_CLOSE(NCID(IP)) CALL CHECK_ERR(IRET) ! - END DO ! IP=1,NBO2 + END DO ! IP=1,NBO2 ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 6. Defines frequency range in spectra -! - - ! Checks consistency of NK - IF (NKI.GT.NK) GOTO 806 -! - ! HERE we define IFMIN IFMIN2 IFMAX and IFMAX2 frequency indices - ! such that source spec SPEC (read in input) links with output spec - ! APBIN2 with APBIN2(IFMIN2:IFMAX2) = SPEC(IFMIN:IFMAX) - ! Then APBIN2(1:IFMIN2) = 0 and APBIN2(IFMAX2:end) = 0 - IFMIN=1 ! index of first freq. in source spectrum - IFMIN2=1 ! index of first freq. in output spectrum - IFMAX=NK1 ! index of last freq. in source spectrum -! IFMAX2=NK ! index of last freq. in output spectrum -! - ! Checks consistency of XFR - IF (ABS((FREQ(IFMIN+1)/FREQ(IFMIN))-XFR).GT.0.005) GOTO 807 -! - ! Checks consistency of NTH - ! WARNING: check is only done on number of directions, no check - ! is done on the relative offset of first direction in terms of - ! the directional increment [-0.5,0.5] (last parameter of the - ! spectral definition in ww3_grid.inp, on second active line) - IF (NTHI.NE.NTH) GOTO 808 -! - IF ((FR1-FREQ(1))/FR1.GT. 0.03) THEN - DO J=1,MIN(NK1,NK) - IF (ABS(FREQ(J)-FR1) .LT. ABS(FREQ(IFMIN)-FR1)) THEN - IFMIN=J - END IF - END DO - END IF -! - IF ((FREQ(1)-FR1)/FR1.GT. 0.03) THEN - DO J=1,MIN(NK,NK1) - IF (ABS(FREQ(J)-FR1*XFR**(J-1)) .LT. ABS(FREQ(IFMIN2)-FR1)) THEN - IFMIN2=J - END IF - END DO - END IF -! - IF ((FREQ(NK1)-FR1*XFR**(NK-1))/FREQ(NK1) .GT.0.03) THEN - DO J=1,NK - IF (ABS(FREQ(J)-FR1*XFR**(NK1-1)) .LT. & - ABS(FREQ(IFMAX)-FR1*XFR**(NK1-1))) THEN - IFMAX=J - END IF - END DO - END IF +! 6. Checks on spectral discretization +! reminder: fr(NK)=fr1*XFR**(NK-1) +! + FR1I=FREQ(1) + XFRI=EXP(ALOG(FREQ(NKI)/FREQ(1))/(NKI-1)) + TH1I=THETA(1) + + SPCONV = NKI.NE.NK .OR. NTHI.NE.NTH .OR. & + ABS(XFRI/XFR-1.).GT.0.01 .OR. & + ABS(FR1I/FR1-1.).GT.0.01 .OR. & + ABS(TH1I-TH(1)).GT.0.01*DTH + IF (VERBOSE.GE.1) WRITE(NDSO,*) 'SPCONV:', SPCONV, NKI, NK, NTHI, NTH ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 7. Loops on files and instanciate ABPIN2 ! - DO IP=1,NBO2 -! Fills in the low frequency end of the spectrum - IF (IFMIN2.GT.1) THEN - ABPIN2(1:(IFMIN2-1)*NTH,:,IP)=0. - END IF + IF ( .NOT. SPCONV ) THEN -! Copies spectrum in frequency and direction ranges - DO I=IFMIN,IFMAX - DO J=1,NTH - ABPIN2((I-IFMIN+(IFMIN2-1))*NTH+J,:,IP)=SPEC2D(J,I,:,IP)*tpiinv + DO IP=1,NBO2 +! Copies spectrum in frequency and direction ranges + DO I=1,NK + DO J=1,NTH + ABPIN2((I-1)*NTH+J,:,IP)=SPEC2D(J,I,:,IP)*tpiinv + END DO + END DO + END DO ! IP=1,NBO2 +! + ELSE + ALLOCATE(TMPSPCI(NKI*NTHI,NTI)) + ALLOCATE(TMPSPCO(NK*NTH, NTI)) + DO IP=1,NBO2 + DO I=1,NKI + DO J=1,NTHI + TMPSPCI((I-1)*NTHI+J,:)=SPEC2D(J,I,:,IP)*tpiinv + END DO + END DO + CALL W3CSPC ( TMPSPCI, NKI, NTHI, XFRI, FR1I, TH1I, & + TMPSPCO, NK, NTH, XFR, FR1, TH(1),& + NTI, NDST, NDSE, FACHFE ) + ABPIN2(:,:,IP)=TMPSPCO(:,:) END DO - END DO - -! Fills tail of spectrum - IF (IFMAX-IFMIN+IFMIN2.LT.NK1) THEN - IF (VERBOSE.GE.2) WRITE(NDSO,*) 'FILLING TAIL',IFMAX-IFMIN,NK1,IFMAX-IFMIN+(IFMIN2-1) - ABPIN2((IFMAX-IFMIN+IFMIN2)*NTH+1:NK1*NTH,:,IP)=0. - END IF - END DO ! IP=1,NBO2 - +! + END IF ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 8. Writes header ! ! Writes header in nest.ww3 file - WRITE(NDSB) IDSTRBC, VERBPTBC, NK1, NTH1, XFR, FREQ(1), & - MOD(2.5*PI-THETA(1),TPI), NBO + WRITE(NDSB) IDSTRBC, VERBPTBC, NK, NTH, XFR, FR1, & + TH(1), NBO IPBPO(:,:)=1 RDBPO(:,1)=1. RDBPO(:,2:4)=0. @@ -691,7 +669,8 @@ CALL D2T(CURDATE,TIME,IERR) ! write to output file nest.ww3 - WRITE(NDSO,'(A,2I9,A,I6,A)') 'Writing boundary data for time:', TIME, ' at ',NBO2,' points' + WRITE(NDSO,'(A,2I9,A,I6,A,G16.5)') 'Writing boundary data for time:', & + TIME, ' at ',NBO2,' points. Max.: ', MAXVAL(ABPIN2(:,IT,:)) WRITE(NDSB,IOSTAT=IERR) TIME, NBO2 DO IP=1, NBO2 WRITE(NDSB) ABPIN2(:,IT,IP) @@ -724,23 +703,11 @@ CALL EXTCDE ( 64 ) ! 805 CONTINUE - WRITE (NDSE,1005) TRIM(SPECFILES(IP)), NKI, NK1, NTHI, NTH1 + WRITE (NDSE,1005) TRIM(SPECFILES(IP)), NKI, NK1, NTHI, NTH1, NTI, NT1 CALL EXTCDE ( 65 ) -! - 806 CONTINUE - WRITE (NDSE,1006) NK, NKI - CALL EXTCDE ( 66 ) -! - 807 CONTINUE - WRITE (NDSE,1007) XFR - CALL EXTCDE ( 67 ) -! - 808 CONTINUE - WRITE (NDSE,1008) NTH, NTHI - CALL EXTCDE ( 68 ) ! 809 CONTINUE - WRITE (NDSE,1009) IERR + WRITE (NDSE,1009) FILE, IERR CALL EXTCDE ( 69 ) ! 888 CONTINUE @@ -789,22 +756,12 @@ ! 1005 FORMAT (/' *** WAVEWATCH III ERROR IN W3BOUNC: '/ & ' INCONSISTENT SPECTRAL DIMENSION FOR FILE ',A/ & - ' ILLEGAL NKI =',I3,' DIFFERS FROM NK1 =',I3/ & - ' ILLEGAL NTHI =',I3,' DIFFERS FROM NTH1 =',I3/) -! - 1006 FORMAT (/' *** WAVEWATCH III ERROR IN W3BOUNC: '/ & - ' ILLEGAL NK, NK =',I3,' DIFFERS FROM NKI =',I3/ & - ' IT WILL BE MANAGED SOON BY SPCONV') -! - 1007 FORMAT (/' *** WAVEWATCH III ERROR IN W3BOUNC: '/ & - ' ILLEGAL XFR CALCULATED FROM FREQ(2)/FREQ(1)'/ & - ' XFR DEFINED FROM MOD_DEF.WW3 =',F12.6/) -! - 1008 FORMAT (/' *** WAVEWATCH III ERROR IN W3BOUNC: '/ & - ' ILLEGAL NTH, NTH =',I3,' DIFFERS FROM NTHI =',I3/) + ' NKI =',I3,' DIFFERS FROM NK1 =',I3/ & + ' OR NTHI =',I3,' DIFFERS FROM NTH1 =',I3/ & + ' OR NTI =',I5,' DIFFERS FROM NT1 =',I5 /) ! 1009 FORMAT (/' *** WAVEWATCH III ERROR IN W3BOUNC : '/ & - ' ERROR IN OPENING SPEC FILE'/ & + ' ERROR IN OPENING SPEC FILE: ', A/ & ' IOSTAT =',I5/) ! 1010 FORMAT (/' *** WAVEWATCH III ERROR IN W3BOUNC : '/ & diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index b03596823..7d2d74a88 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -667,6 +667,7 @@ echo "$rtst -w work_PR3_UQ $ww3 ww3_tp1.8" >> matrix.body echo "$rtst -i input_BJ -w work_BJ_PR3_UQ $ww3 ww3_tp1.8" >> matrix.body echo "$rtst -w work_PR3_UQ $ww3 ww3_tp1.9" >> matrix.body + echo "$rtst -o netcdf -w work_PR3_UQ $ww3 ww3_tp1.11" >> matrix.body fi if [ "$unstr" = 'y' ] diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index 5f82b910d..f8b68daf6 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -61,9 +61,9 @@ then echo ' module load intel-comp/18' >> matrix.head echo ' module load impi/2018.1.163' >> matrix.head - echo ' export PATH=/home/datawork-wave/NETCDF2019/INTEL/bin:${PATH}' >> matrix.head - echo ' export CPATH=/home/datawork-wave/NETCDF2019/INTEL/include:${CPATH}' >> matrix.head - echo ' export LD_LIBRARY_PATH=/home/datawork-wave/NETCDF2019/INTEL/lib:${LD_LIBRARY_PATH}' >> matrix.head + echo ' export PATH=${PATH}:/home/datawork-wave/NETCDF2019/INTEL/bin' >> matrix.head + echo ' export CPATH=${CPATH}:/home/datawork-wave/NETCDF2019/INTEL/include' >> matrix.head + echo ' export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/datawork-wave/NETCDF2019/INTEL/lib' >> matrix.head echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF2019/INTEL/bin/nf-config' >> matrix.head echo ' export METIS_PATH=/home/datawork-wave/PARMETIS2019/INTEL' >> matrix.head @@ -71,27 +71,27 @@ then echo ' module load intel-comp/18' >> matrix.head echo ' module load mpt/2.18' >> matrix.head - echo ' export PATH=/home/datawork-wave/NETCDF2019/MPT/bin:${PATH}' >> matrix.head - echo ' export CPATH=/home/datawork-wave/NETCDF2019/MPT/include:${CPATH}' >> matrix.head - echo ' export LD_LIBRARY_PATH=/home/datawork-wave/NETCDF2019/MPT/lib:${LD_LIBRARY_PATH}' >> matrix.head + echo ' export PATH=${PATH}:/home/datawork-wave/NETCDF2019/MPT/bin' >> matrix.head + echo ' export CPATH=${CPATH}:/home/datawork-wave/NETCDF2019/MPT/include' >> matrix.head + echo ' export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/datawork-wave/NETCDF2019/MPT/lib' >> matrix.head echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF2019/MPT/bin/nf-config' >> matrix.head echo ' export METIS_PATH=/home/datawork-wave/PARMETIS2019/MPT' >> matrix.head elif [ $cmplr = "datarmor_gnu_debug" ] || [ $cmplr = "datarmor_gnu" ] then echo ' module load impi/2018.1.163' >> matrix.head - echo ' export PATH=/home/datawork-wave/NETCDF2019/GNU/bin:${PATH}' >> matrix.head - echo ' export CPATH=/home/datawork-wave/NETCDF2019/GNU/include:${CPATH}' >> matrix.head - echo ' export LD_LIBRARY_PATH=/home/datawork-wave/NETCDF2019/GNU/lib:${LD_LIBRARY_PATH}' >> matrix.head + echo ' export PATH=${PATH}:/home/datawork-wave/NETCDF2019/GNU/bin' >> matrix.head + echo ' export CPATH=${CPATH}:/home/datawork-wave/NETCDF2019/GNU/include' >> matrix.head + echo ' export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/datawork-wave/NETCDF2019/GNU/lib' >> matrix.head echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF2019/GNU/bin/nf-config' >> matrix.head echo ' export METIS_PATH=/home/datawork-wave/PARMETIS2019/GNU' >> matrix.head elif [ $cmplr = "datarmor_pgi_debug" ] || [ $cmplr = "datarmor_pgi" ] then echo ' module load pgi/17.10' >> matrix.head - echo ' export PATH=/home/datawork-wave/NETCDF2019/PGI/bin:${PATH}' >> matrix.head - echo ' export CPATH=/home/datawork-wave/NETCDF2019/PGI/include:${CPATH}' >> matrix.head - echo ' export LD_LIBRARY_PATH=/home/datawork-wave/NETCDF2019/PGI/lib:${LD_LIBRARY_PATH}' >> matrix.head + echo ' export PATH=${PATH}:/home/datawork-wave/NETCDF2019/PGI/bin' >> matrix.head + echo ' export CPATH=${CPATH}:/home/datawork-wave/NETCDF2019/PGI/include' >> matrix.head + echo ' export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/datawork-wave/NETCDF2019/PGI/lib' >> matrix.head echo ' export NETCDF_CONFIG=/home/datawork-wave/NETCDF2019/PGI/bin/nf-config' >> matrix.head echo ' export METIS_PATH=/home/datawork-wave/PARMETIS2019/PGI' >> matrix.head fi diff --git a/regtests/bin/run_test b/regtests/bin/run_test index ef132c50c..df983680c 100755 --- a/regtests/bin/run_test +++ b/regtests/bin/run_test @@ -3,10 +3,11 @@ # # # Script for running WW-III tests. # # # -# Last update : 27-Jan-2014 # +# Last update : 04-May-2020 # # --------------------------------------------------------------------------- # # Modification history -# 27-Jan-2014 : Adapts ww3_ounf section for multigrid ( version 4.18 ) +# 27-Jan-2014 : Adapts ww3_ounf section for multigrid ( version 4.18 ) +# 04-May-2020 : F. Ardhuin added step 3.b2 for CDL input files ( version 7.XX ) # # Limitations: # - For each ww3_grid_*.inp, run_test process *all* ww3_prep_*.inp files. @@ -461,6 +462,16 @@ then exit 0 fi +# 3.b2 Preprocess cdl files into nc files ----------------------------------- # + +filescdl=$path_i/*.cdl +for f in $filescdl +do + echo "Converting $f to NetCDF" + # take action on each file. Note that converted file is in $path_w + ncgen -b $f +done + # 3.c Grid pre-processor ---------------------------------------------------- # prog=ww3_grid diff --git a/regtests/ww3_tp1.10/info b/regtests/ww3_tp1.10/info index dd0a7294c..f10acb3fa 100644 --- a/regtests/ww3_tp1.10/info +++ b/regtests/ww3_tp1.10/info @@ -1,7 +1,7 @@ ############################################################################# # # # ww3_tp1.10 Test script for WW-III, one-dimensional propagation. # -# Bottom scattering beach œ # +# Bottom scattering beach # # # # Model should be compiled with the switches : # # # @@ -19,7 +19,7 @@ # * input options : # # # # Example run_test commands: # -# ./bin/run_test -o netcdf ../model ww3_tp2.10 # +# ./bin/run_test -o netcdf ../model ww3_tp1.10 # # # # Fabrice Ardhuin, Aug 2018 # # Last Mod : Nov 2018 # diff --git a/regtests/ww3_tp1.11/info b/regtests/ww3_tp1.11/info new file mode 100644 index 000000000..2d84ae0d9 --- /dev/null +++ b/regtests/ww3_tp1.11/info @@ -0,0 +1,32 @@ +############################################################################# +# # +# ww3_tp1.11 Test script for WW-III, one-dimensional propagation. # +# nesting with spectral interpolation # +# # +# Model should be compiled with the switches : # +# # +# !/LN0 !/ST0 !/NL0 !/BT0 !/DB0 !/TR0 !/BS1 !/XX0 # +# Select bottom scattering option. # +# !/PRn Selecting one of the propagation schemes. # +# 1: First order. # +# 2: Representative for all UQ schemes # +# 3: Switch smoothing off to reproduce 2. # +# !/WNX1 !/WNT1 !/CRX1 !/CRT1 Wind and current interpolation. # +# !/O0 !/O1 !/O2 !/O3 !/O4 !/O5 !/O6 !/O7 Sdt out output options. # +# # +# Remarks : # +# # +# * input options : # +# # +# Example run_test commands: # +# ./bin/run_test -N -o netcdf ../model ww3_tp1.11 # +# # +# Fabrice Ardhuin, Jan 2020 # +# Last Mod : Feb 2020 # +# # +# Copyright 2020 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. # +# # +############################################################################# diff --git a/regtests/ww3_tp1.11/input/1-D.depth b/regtests/ww3_tp1.11/input/1-D.depth new file mode 100644 index 000000000..ba2b0f181 --- /dev/null +++ b/regtests/ww3_tp1.11/input/1-D.depth @@ -0,0 +1 @@ +153*1 diff --git a/regtests/ww3_tp1.11/input/namelists_1-D.nml b/regtests/ww3_tp1.11/input/namelists_1-D.nml new file mode 100644 index 000000000..4b5eaafbf --- /dev/null +++ b/regtests/ww3_tp1.11/input/namelists_1-D.nml @@ -0,0 +1,3 @@ +&PRO3 WDTHCG = 0., WDTHTH = 0. / +&PRO4 RNFAC = 0., RSFAC = 0. / +END OF NAMELISTS diff --git a/regtests/ww3_tp1.11/input/points.list b/regtests/ww3_tp1.11/input/points.list new file mode 100644 index 000000000..eace0467a --- /dev/null +++ b/regtests/ww3_tp1.11/input/points.list @@ -0,0 +1,6 @@ +100000 0.0 'Point1' +80000 0.0 'Point2' +60000 0.0 'Point3' +40000 0.0 'Point4' +20000 0.0 'Point5' +00000 0.0 'Point6' diff --git a/regtests/ww3_tp1.11/input/spec.list b/regtests/ww3_tp1.11/input/spec.list new file mode 100644 index 000000000..5c2940d43 --- /dev/null +++ b/regtests/ww3_tp1.11/input/spec.list @@ -0,0 +1 @@ +ww3.Point0_196806_spec.nc diff --git a/regtests/ww3_tp1.11/input/switch b/regtests/ww3_tp1.11/input/switch new file mode 100644 index 000000000..858c0d850 --- /dev/null +++ b/regtests/ww3_tp1.11/input/switch @@ -0,0 +1 @@ +F90 NOGRB SHRD PR3 UQ FLX2 LN0 ST0 NL0 BT0 DB0 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_tp1.11/input/ww3.Point0_196806_spec.cdl b/regtests/ww3_tp1.11/input/ww3.Point0_196806_spec.cdl new file mode 100644 index 000000000..27b12fa3f --- /dev/null +++ b/regtests/ww3_tp1.11/input/ww3.Point0_196806_spec.cdl @@ -0,0 +1,4372 @@ +netcdf ww3.Point0_196806_spec { +dimensions: + time = UNLIMITED ; // (55 currently) + station = 1 ; + string16 = 16 ; + frequency = 24 ; + direction = 24 ; +variables: + double time(time) ; + time:long_name = "julian day (UT)" ; + time:standard_name = "time" ; + time:calendar = "standard" ; + time:units = "days since 1990-01-01 00:00:00" ; + time:conventions = "Relative julian days with decimal part (as parts of the day)" ; + time:axis = "T" ; + int station(station) ; + station:long_name = "station id" ; + station:_FillValue = -2147483647 ; + station:axis = "X" ; + int string16(string16) ; + string16:long_name = "station_name number of characters" ; + string16:_FillValue = -2147483647 ; + string16:axis = "W" ; + char station_name(station, string16) ; + station_name:long_name = "station name" ; + station_name:content = "XW" ; + station_name:associates = "station string16" ; + float x(time, station) ; + x:long_name = "x" ; + x:standard_name = "x" ; + x:globwave_name = "x" ; + x:units = "m" ; + x:scale_factor = 1.f ; + x:add_offset = 0.f ; + x:valid_min = 0.f ; + x:valid_max = 10000.f ; + x:_FillValue = 9.96921e+36f ; + x:content = "TX" ; + x:associates = "time station" ; + float y(time, station) ; + y:long_name = "y" ; + y:standard_name = "y" ; + y:globwave_name = "y" ; + y:units = "m" ; + y:scale_factor = 1.f ; + y:add_offset = 0.f ; + y:valid_min = 0.f ; + y:valid_max = 10000.f ; + y:_FillValue = 9.96921e+36f ; + y:content = "TX" ; + y:associates = "time station" ; + float frequency(frequency) ; + frequency:long_name = "frequency of center band" ; + frequency:standard_name = "sea_surface_wave_frequency" ; + frequency:globwave_name = "frequency" ; + frequency:units = "s-1" ; + frequency:scale_factor = 1.f ; + frequency:add_offset = 0.f ; + frequency:valid_min = 0.f ; + frequency:valid_max = 10.f ; + frequency:_FillValue = 9.96921e+36f ; + frequency:axis = "Y" ; + float frequency1(frequency) ; + frequency1:long_name = "frequency of lower band" ; + frequency1:standard_name = "frequency_of_lower_band" ; + frequency1:globwave_name = "frequency_lower_band" ; + frequency1:units = "s-1" ; + frequency1:scale_factor = 1.f ; + frequency1:add_offset = 0.f ; + frequency1:valid_min = 0.f ; + frequency1:valid_max = 10.f ; + frequency1:_FillValue = 9.96921e+36f ; + frequency1:content = "Y" ; + frequency1:associates = "frequency" ; + float frequency2(frequency) ; + frequency2:long_name = "frequency of upper band" ; + frequency2:standard_name = "frequency_of_upper_band" ; + frequency2:globwave_name = "frequency_upper_band" ; + frequency2:units = "s-1" ; + frequency2:scale_factor = 1.f ; + frequency2:add_offset = 0.f ; + frequency2:valid_min = 0.f ; + frequency2:valid_max = 10.f ; + frequency2:_FillValue = 9.96921e+36f ; + frequency2:content = "Y" ; + frequency2:associates = "frequency" ; + float direction(direction) ; + direction:long_name = "sea surface wave to direction" ; + direction:standard_name = "sea_surface_wave_to_direction" ; + direction:globwave_name = "direction" ; + direction:units = "degree" ; + direction:scale_factor = 1.f ; + direction:add_offset = 0.f ; + direction:valid_min = 0.f ; + direction:valid_max = 360.f ; + direction:_FillValue = 9.96921e+36f ; + direction:axis = "Z" ; + float efth(time, station, frequency, direction) ; + efth:long_name = "sea surface wave directional variance spectral density" ; + efth:standard_name = "sea_surface_wave_directional_variance_spectral_density" ; + efth:globwave_name = "directional_variance_spectral_density" ; + efth:units = "m2 s rad-1" ; + efth:scale_factor = 1.f ; + efth:add_offset = 0.f ; + efth:valid_min = 0.f ; + efth:valid_max = 1.e+20f ; + efth:_FillValue = 9.96921e+36f ; + efth:content = "TXYZ" ; + efth:associates = "time station frequency direction" ; + float dpt(time, station) ; + dpt:long_name = "depth" ; + dpt:standard_name = "depth" ; + dpt:globwave_name = "depth" ; + dpt:units = "m" ; + dpt:scale_factor = 1.f ; + dpt:add_offset = 0.f ; + dpt:valid_min = -100.f ; + dpt:valid_max = 10000.f ; + dpt:_FillValue = 9.96921e+36f ; + dpt:content = "TX" ; + dpt:associates = "time station" ; + float wnd(time, station) ; + wnd:long_name = "wind speed at 10m" ; + wnd:standard_name = "wind_speed" ; + wnd:globwave_name = "wind_speed" ; + wnd:units = "m s-1" ; + wnd:scale_factor = 1.f ; + wnd:add_offset = 0.f ; + wnd:valid_min = 0.f ; + wnd:valid_max = 100.f ; + wnd:_FillValue = 9.96921e+36f ; + wnd:content = "TX" ; + wnd:associates = "time station" ; + float wnddir(time, station) ; + wnddir:long_name = "wind direction" ; + wnddir:standard_name = "wind_from_direction" ; + wnddir:globwave_name = "wind_from_direction" ; + wnddir:units = "degree" ; + wnddir:scale_factor = 1.f ; + wnddir:add_offset = 0.f ; + wnddir:valid_min = 0.f ; + wnddir:valid_max = 360.f ; + wnddir:_FillValue = 9.96921e+36f ; + wnddir:content = "TX" ; + wnddir:associates = "time station" ; + float cur(time, station) ; + cur:long_name = "sea water speed" ; + cur:standard_name = "sea_water_speed" ; + cur:globwave_name = "sea_water_speed" ; + cur:units = "m s-1" ; + cur:scale_factor = 1.f ; + cur:add_offset = 0.f ; + cur:valid_min = 0.f ; + cur:valid_max = 100.f ; + cur:_FillValue = 9.96921e+36f ; + cur:content = "TX" ; + cur:associates = "time station" ; + float curdir(time, station) ; + curdir:long_name = "direction from of sea water velocity" ; + curdir:standard_name = "direction_of_sea_water_velocity" ; + curdir:globwave_name = "direction_of_sea_water_velocity" ; + curdir:units = "degree" ; + curdir:scale_factor = 1.f ; + curdir:add_offset = 0.f ; + curdir:valid_min = 0.f ; + curdir:valid_max = 360.f ; + curdir:_FillValue = 9.96921e+36f ; + curdir:content = "TX" ; + curdir:associates = "time station" ; + +// global attributes: + :product_name = "ww3.Point1_196806_spec.nc" ; + :area = "1-D PROP. USING W3CSPC" ; + :data_type = "OCO spectra 2D" ; + :format_version = "1.1" ; + :southernmost_latitude = "n/a" ; + :northernmost_latitude = "n/a" ; + :latitude_resolution = "n/a" ; + :westernmost_longitude = "n/a" ; + :easternmost_longitude = "n/a" ; + :longitude_resolution = "n/a" ; + :minimum_altitude = "n/a" ; + :maximum_altitude = "n/a" ; + :altitude_resolution = "n/a" ; + :start_date = "1968-06-01 00:00:00" ; + :stop_date = "1968-06-01 18:00:00" ; + :field_type = "n/a" ; +data: + + time = -7884, -7883.98611111111, -7883.97222222222, -7883.95833333333, + -7883.94444444444, -7883.93055555556, -7883.91666666667, + -7883.90277777778, -7883.88888888889, -7883.875, -7883.86111111111, + -7883.84722222222, -7883.83333333333, -7883.81944444444, + -7883.80555555556, -7883.79166666667, -7883.77777777778, + -7883.76388888889, -7883.75, -7883.73611111111, -7883.72222222222, + -7883.70833333333, -7883.69444444444, -7883.68055555556, + -7883.66666666667, -7883.65277777778, -7883.63888888889, -7883.625, + -7883.61111111111, -7883.59722222222, -7883.58333333333, + -7883.56944444444, -7883.55555555556, -7883.54166666667, + -7883.52777777778, -7883.51388888889, -7883.5, -7883.48611111111, + -7883.47222222222, -7883.45833333333, -7883.44444444444, + -7883.43055555556, -7883.41666666667, -7883.40277777778, + -7883.38888888889, -7883.375, -7883.36111111111, -7883.34722222222, + -7883.33333333333, -7883.31944444444, -7883.30555555556, + -7883.29166666667, -7883.27777777778, -7883.26388888889, -7883.25 ; + + station = 1 ; + + string16 = _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ ; + + station_name = + "Point1" ; + + x = + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 ; + + y = + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 ; + + frequency = 0.04, 0.044, 0.0484, 0.05324, 0.058564, 0.06442041, 0.07086245, + 0.0779487, 0.08574356, 0.09431793, 0.1037497, 0.1141247, 0.1255372, + 0.1380909, 0.1519, 0.16709, 0.183799, 0.2021789, 0.2223968, 0.2446365, + 0.2691001, 0.2960101, 0.3256111, 0.3581723 ; + + frequency1 = 0.04, 0.042, 0.0462, 0.05082, 0.055902, 0.06149221, 0.06764143, + 0.07440557, 0.08184613, 0.09003074, 0.09903383, 0.1089372, 0.1198309, + 0.131814, 0.1449954, 0.159495, 0.1754445, 0.1929889, 0.2122878, + 0.2335166, 0.2568683, 0.2825551, 0.3108106, 0.3418917 ; + + frequency2 = 0.042, 0.0462, 0.05082, 0.055902, 0.0614922, 0.06764143, + 0.07440557, 0.08184613, 0.09003074, 0.09903383, 0.1089372, 0.1198309, + 0.131814, 0.1449954, 0.159495, 0.1754445, 0.1929889, 0.2122878, + 0.2335166, 0.2568683, 0.2825551, 0.3108106, 0.3418917, 0.3581723 ; + + direction = 90, 75, 60, 45, 30, 15, 0, 345, 330, 315, 300, 285, 270, 255, + 240, 225, 210, 195, 180, 165, 150, 135, 120, 105 ; + + efth = + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604497, 0.521013, 0.2604497, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.000896766, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.000896766, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327485, + 0.5616872, 1.12362, 0.5616872, 0.06327485, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255859e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255859e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116914e-07, 3.654561e-06, 7.310716e-06, 3.654561e-06, 4.116914e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7.072087e-13, 3.70699e-07, 0.0003795956, 0.0218894, + 0.1943109, 0.3887066, 0.1943109, 0.0218894, 0.0003795956, 3.70699e-07, + 7.072087e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.175612e-13, 4.285427e-07, 0.0004388275, 0.02530501, + 0.2246311, 0.4493602, 0.2246311, 0.02530501, 0.0004388275, 4.285427e-07, + 8.175612e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.479257e-13, 4.968762e-07, 0.0005088008, 0.02934003, + 0.2604498, 0.521013, 0.2604498, 0.02934003, 0.0005088008, 4.968762e-07, + 9.479257e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.099978e-12, 5.765777e-07, 0.0005904153, 0.03404632, + 0.3022272, 0.6045863, 0.3022272, 0.03404632, 0.0005904153, 5.765777e-07, + 1.099978e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.273828e-12, 6.677049e-07, 0.0006837294, 0.03942729, + 0.3499937, 0.7001401, 0.3499937, 0.03942729, 0.0006837294, 6.677049e-07, + 1.273828e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.466641e-12, 7.687722e-07, 0.0007872221, 0.0453952, + 0.4029705, 0.806117, 0.4029705, 0.0453952, 0.0007872221, 7.687722e-07, + 1.466641e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.670727e-12, 8.757486e-07, 0.0008967661, 0.05171206, + 0.4590449, 0.9182901, 0.4590449, 0.05171206, 0.0008967661, 8.757486e-07, + 1.670727e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.871264e-12, 9.808646e-07, 0.001004405, 0.05791905, + 0.514144, 1.028512, 0.514144, 0.05791905, 0.001004405, 9.808646e-07, + 1.871264e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.044301e-12, 1.071566e-06, 0.001097283, 0.06327486, + 0.5616872, 1.12362, 0.5616872, 0.06327486, 0.001097283, 1.071566e-06, + 2.044301e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.156488e-12, 1.130371e-06, 0.001157499, 0.06674725, + 0.5925114, 1.185281, 0.5925114, 0.06674725, 0.001157499, 1.130371e-06, + 2.156488e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.168806e-12, 1.136827e-06, 0.00116411, 0.06712849, + 0.5958956, 1.192051, 0.5958956, 0.06712849, 0.00116411, 1.136827e-06, + 2.168806e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.046691e-12, 1.072819e-06, 0.001098566, 0.06334882, + 0.5623438, 1.124933, 0.5623438, 0.06334882, 0.001098566, 1.072819e-06, + 2.046691e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.77673e-12, 9.313122e-07, 0.0009536633, 0.05499304, + 0.48817, 0.9765529, 0.48817, 0.05499304, 0.0009536633, 9.313122e-07, + 1.77673e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.384251e-12, 7.255858e-07, 0.0007429995, 0.0428451, + 0.3803335, 0.7608328, 0.3803335, 0.0428451, 0.0007429995, 7.255858e-07, + 1.384251e-12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9.387728e-13, 4.920785e-07, 0.0005038881, 0.02905673, + 0.2579349, 0.5159823, 0.2579349, 0.02905673, 0.0005038881, 4.920785e-07, + 9.387728e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5.336513e-13, 2.797251e-07, 0.0002864383, 0.01651748, + 0.1466247, 0.2933134, 0.1466247, 0.01651748, 0.0002864383, 2.797251e-07, + 5.336513e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.427098e-13, 1.272217e-07, 0.000130275, 0.007512312, + 0.06668635, 0.1334018, 0.06668635, 0.007512312, 0.000130275, + 1.272217e-07, 2.427098e-13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8.340111e-14, 4.371654e-08, 4.476571e-05, 0.002581417, + 0.02291509, 0.04584017, 0.02291509, 0.002581417, 4.476571e-05, + 4.371654e-08, 8.340111e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.018162e-14, 1.057864e-08, 1.083252e-05, 0.000624658, + 0.005545052, 0.01109252, 0.005545052, 0.000624658, 1.083252e-05, + 1.057864e-08, 2.018162e-14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3.154778e-15, 1.653646e-09, 1.693333e-06, + 9.764611e-05, 0.0008667989, 0.001733976, 0.0008667989, 9.764611e-05, + 1.693333e-06, 1.653646e-09, 3.154778e-15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2.866296e-16, 1.502432e-10, 1.53849e-07, 8.87171e-06, + 7.875364e-05, 0.0001575417, 7.875364e-05, 8.87171e-06, 1.53849e-07, + 1.502432e-10, 2.866296e-16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1.330104e-17, 6.972034e-12, 7.139358e-09, + 4.116915e-07, 3.65456e-06, 7.310716e-06, 3.65456e-06, 4.116915e-07, + 7.139358e-09, 6.972034e-12, 1.330104e-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + dpt = + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000 ; + + wnd = + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 ; + + wnddir = + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270 ; + + cur = + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 ; + + curdir = + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270, + 270 ; +} diff --git a/regtests/ww3_tp1.11/input/ww3_bounc.nml b/regtests/ww3_tp1.11/input/ww3_bounc.nml new file mode 100644 index 000000000..e5d399256 --- /dev/null +++ b/regtests/ww3_tp1.11/input/ww3_bounc.nml @@ -0,0 +1,22 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_bounc.nml - Boundary input post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the input boundaries to preprocess via BOUND_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! BOUND%MODE = 'WRITE' ! ['WRITE'|'READ'] +! BOUND%INTERP = 2 ! interpolation [1(nearest),2(linear)] +! BOUND%VERBOSE = 1 ! [0|1|2] +! BOUND%FILE = 'spec.list' ! input _spec.nc listing file +! -------------------------------------------------------------------- ! +&BOUND_NML +BOUND%FILE = '../input/spec.list' +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp1.11/input/ww3_grid.nml b/regtests/ww3_tp1.11/input/ww3_grid.nml new file mode 100644 index 000000000..64fc75c20 --- /dev/null +++ b/regtests/ww3_tp1.11/input/ww3_grid.nml @@ -0,0 +1,267 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.07 + SPECTRUM%FREQ1 = 0.04 + SPECTRUM%NK = 24 + SPECTRUM%NTH = 36 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLCX = T + RUN%FLSOU = F +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 400. + TIMESTEPS%DTXY = 80. + TIMESTEPS%DTKTH = 80. + TIMESTEPS%DTMIN = 1. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = '1-D PROP. USING W3CSPC ' + GRID%NML = '../input/namelists_1-D.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'CART' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 51 + RECT%NY = 3 + RECT%SX = 2000. + RECT%SY = 2000. + RECT%Y0 = -2000. +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -1000. + DEPTH%FILENAME = '../input/1-D.depth' + DEPTH%IDLA = 2 +/ + +! -------------------------------------------------------------------- ! +! Define the input boundary points via INBND_COUNT_NML and +! INBND_POINT_NML namelist +! - for RECT, CURV and UNST grids - +! +! * If no mask defined, INBOUND can be used +! +! * If the actual input data is not defined in the actual wave model run +! the initial conditions will be applied as constant boundary conditions. +! +! * The number of points is defined by INBND_COUNT +! +! * The points must start from index 1 to N +! +! * Each line contains: +! Discrete grid counters (IX,IY) of the active point and a +! connect flag. If this flag is true, and the present and previous +! point are on a grid line or diagonal, all intermediate points +! are also defined as boundary points. +! +! * Included point : +! grid points from segment data +! Defines as lines identifying points at which +! input boundary conditions are to be defined. +! +! * namelist must be terminated with / +! * definitions & defaults: +! INBND_COUNT%N_POINT = 0 ! number of segments +! +! INBND_POINT(I)%X_INDEX = 0 ! x index included point +! INBND_POINT(I)%Y_INDEX = 0 ! y index included point +! INBND_POINT(I)%CONNECT = F ! connect flag +! +! OR +! INBND_POINT(I) = 0 0 F ! included point +! -------------------------------------------------------------------- ! +&INBND_COUNT_NML + INBND_COUNT%N_POINT = 1 +/ + +&INBND_POINT_NML + INBND_POINT(1) = 51 2 F +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp1.11/input/ww3_ounf.nml b/regtests/ww3_tp1.11/input/ww3_ounf.nml new file mode 100644 index 000000000..8c982e9f3 --- /dev/null +++ b/regtests/ww3_tp1.11/input/ww3_ounf.nml @@ -0,0 +1,58 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '19680601 000000' + FIELD%TIMESTRIDE = '1200.' + FIELD%TIMECOUNT = '1000' + FIELD%LIST = 'HS DIR SPR' + FIELD%PARTITION = '0 1 2' + FIELD%TYPE = 4 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp1.11/input/ww3_ounp.nml b/regtests/ww3_tp1.11/input/ww3_ounp.nml new file mode 100644 index 000000000..781df4f28 --- /dev/null +++ b/regtests/ww3_tp1.11/input/ww3_ounp.nml @@ -0,0 +1,133 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounp.nml - Point output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via POINT_NML namelist +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! POINT%TIMESTART = '19000101 000000' ! Stop date for the output field +! POINT%TIMESTRIDE = '0' ! Time stride for the output field +! POINT%TIMECOUNT = '1000000000' ! Number of time steps +! POINT%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! POINT%LIST = 'all' ! List of points index ['all'|'1 2 3'] +! POINT%SAMEFILE = T ! All the points in the same file +! POINT%BUFFER = 150 ! Number of points to process per pass +! POINT%TYPE = 1 ! [0=inventory | 1=spectra | 2=mean param | 3=source terms] +! POINT%DIMORDER = T ! [time,station=T | station,time=F] +! -------------------------------------------------------------------- ! +&POINT_NML + POINT%TIMESTART = '19680600 000000' + POINT%TIMESTRIDE = '1200.' + POINT%TIMECOUNT = '1000' + POINT%SAMEFILE = F + POINT%LIST = '1 2 3 4 5 6' +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 0, inventory of file +! +! * namelist must be terminated with / +! * definitions & defaults: +! No additional input, the above time range is ignored. +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the type 1, spectra via SPECTRA_NML namelist +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(time,station,frequency,direction) : 2D spectral density +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRA%OUTPUT = 3 ! 1: Print plots +! ! 2: Table of 1-D spectra +! ! 3: Transfer file +! ! 4: Spectral partitioning +! SPECTRA%SCALE_FAC = 1 ! Scale factor (-1=disabled) +! SPECTRA%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! -------------------------------------------------------------------- ! +&SPECTRA_NML +/ + +&PARAM_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 3, source terms via SOURCE_NML namelist +! +! Table of 1-D S(f) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - Sin(frequency) : input source term +! - Snl(frequency) : non linear interactions source term +! - Sds(frequency) : dissipation source term +! - Sbt(frequency) : bottom source term +! - Sice(frequency) : ice source term +! - Stot(frequency) : total source term +! - dpt, ust, wnd : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(frequency,direction) : 2D spectral density +! - Sin(frequency,direction) : input source term +! - Snl(frequency,direction) : non linear interactions source term +! - Sds(frequency,direction) : dissipation source term +! - Sbt(frequency,direction) : bottom source term +! - Sice(frequency,direction) : ice source term +! - Stot(frequency,direction) : total source term +! - dpt, wnd, wnddir, cur, curdir, ust : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SOURCE%OUTPUT = 4 ! 1: Print plots +! ! 2: Table of 1-D S(f) +! ! 3: Table of 1-D inverse time scales (1/T = S/F) +! ! 4: Transfer file +! SOURCE%SCALE_FAC = 0 ! Scale factor (-1=disabled) +! SOURCE%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! SOURCE%TABLE_FAC = 0 ! Table factor +! 0 : Dimensional. +! 1 : Nondimensional in terms of U10 +! 2 : Nondimensional in terms of U* +! 3-5: like 0-2 with f normalized with fp. +! SOURCE%SPECTRUM = T ! [T|F] +! SOURCE%INPUT = T ! [T|F] +! SOURCE%INTERACTIONS = T ! [T|F] +! SOURCE%DISSIPATION = T ! [T|F] +! SOURCE%BOTTOM = T ! [T|F] +! SOURCE%ICE = T ! [T|F] +! SOURCE%TOTAL = T ! [T|F] +! -------------------------------------------------------------------- ! +&SOURCE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp1.11/input/ww3_shel.nml b/regtests/ww3_tp1.11/input/ww3_shel.nml new file mode 100644 index 000000000..baaf0a835 --- /dev/null +++ b/regtests/ww3_tp1.11/input/ww3_shel.nml @@ -0,0 +1,108 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '19680601 000000' + DOMAIN%STOP = '19680601 180000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS DIR SPR' + TYPE%POINT%FILE = '../input/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '19680601 000000' '1200' '19680625 000000' + DATE%POINT = '19680601 000000' '1200' '19680625 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp1.11/input/ww3_strt.inp b/regtests/ww3_tp1.11/input/ww3_strt.inp new file mode 100644 index 000000000..55f66d8bb --- /dev/null +++ b/regtests/ww3_tp1.11/input/ww3_strt.inp @@ -0,0 +1,5 @@ +$ WAVEWATCH III Initial conditions input file +$ ------------------------------------------- + 1 +$ fp sip thm ncos xm six ym siy hmax + 0.1 0.02 90. 20 100000 10. 0. 100000 1. From 2f57030eb3e0781c509bbfceb5bc6ca182b901b8 Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Mon, 11 May 2020 16:03:31 +0200 Subject: [PATCH 39/84] Bugfix/spconv (#197) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct minor changes from old develop branch * update default IS2 param - see Ardhuin et al 2020 * Created test case folder for SPCONV / W3CSPC * Added input files for regtest that will test W3CSPC bug Also modified run_test to allow input files in CDL format... * ww3_bounc is now calling the spectral interpolation W3CSPC ... is the result ay good? .. to be checked * I had forgotten the input file for spectra, using CDL format * That is it. W3CSPC now works with ww3_bounc. * integrate updates from Fabrice * move all developments about is in feature/IS2update * remove all dev about is2 (they are into IS2update) * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * update path for matrix add datarmor for OMP * set version to 7.XX * manually merge from develop add regtest to matrix.base * add namelist to matrix for ww3_tp1.11 update previous milestone in headers Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- model/ftn/w3gdatmd.ftn | 2 +- model/ftn/w3src4md.ftn | 4 ++-- model/ftn/ww3_grid.ftn | 4 ++-- regtests/bin/matrix.base | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/model/ftn/w3gdatmd.ftn b/model/ftn/w3gdatmd.ftn index d190e19c9..8b2484657 100644 --- a/model/ftn/w3gdatmd.ftn +++ b/model/ftn/w3gdatmd.ftn @@ -91,7 +91,7 @@ !/ (Q. Liu, UoM) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ 27-Aug-2018 : Add BTBETA parameter ( version 6.06 ) -!/ 22-Feb-2020 : Add AIRGB and AIRCMIN ( version 7.XX ) +!/ 22-Feb-2020 : Add AIRGB and AIRCMIN ( version 7.06 ) !/ !/ !/ Copyright 2009-2013 National Weather Service (NWS), diff --git a/model/ftn/w3src4md.ftn b/model/ftn/w3src4md.ftn index 269ef392e..992f40f47 100755 --- a/model/ftn/w3src4md.ftn +++ b/model/ftn/w3src4md.ftn @@ -97,7 +97,7 @@ !/ 03-Oct-2007 : Origination. ( version 3.13 ) !/ 13-Jun-2011 : Adds f_m0,-1 as FMEAN in the outout ( version 4.04 ) !/ 08-Jun-2018 : use STRACE and FLUSH ( version 6.04 ) -!/ 22-Feb-2020 : Merge Romero (2019) and cleanup ( version 7.XX ) +!/ 22-Feb-2020 : Merge Romero (2019) and cleanup ( version 7.06 ) !/ ! 1. Purpose : ! @@ -1565,7 +1565,7 @@ !/ 23-Jan-2012 : Add output of lambdas to be used in SIN !/ 13-Nov-2013 : Reduced frequency range with IG1 switch !/ 06-Jun-2018 : Add optional DEBUGSRC ( version 6.04 ) -!/ 22-Feb-2020 : Option to use Romero (GRL 2019) ( version 7.XX ) +!/ 22-Feb-2020 : Option to use Romero (GRL 2019) ( version 7.06 ) !/ ! 1. Purpose : ! diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index e73c8861b..2c8e393d6 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -103,8 +103,8 @@ !/ 20-Jun-2018 : Update of ST6 (Q. Liu) ( version 6.06 ) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ 27-Aug-2018 : Add WBT parameter ( version 6.06 ) -!/ 22-Jan-2020 : Update default values for IS2 ( version 7.XX ) -!/ 20-Feb-2020 : Include Romero's dissipation in ST4 ( version 7.XX ) +!/ 22-Jan-2020 : Update default values for IS2 ( version 7.05 ) +!/ 20-Feb-2020 : Include Romero's dissipation in ST4 ( version 7.06 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 7d2d74a88..6586543fe 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -667,7 +667,7 @@ echo "$rtst -w work_PR3_UQ $ww3 ww3_tp1.8" >> matrix.body echo "$rtst -i input_BJ -w work_BJ_PR3_UQ $ww3 ww3_tp1.8" >> matrix.body echo "$rtst -w work_PR3_UQ $ww3 ww3_tp1.9" >> matrix.body - echo "$rtst -o netcdf -w work_PR3_UQ $ww3 ww3_tp1.11" >> matrix.body + echo "$rtst -o netcdf -N -w work_PR3_UQ $ww3 ww3_tp1.11" >> matrix.body fi if [ "$unstr" = 'y' ] From c53063c39752081e588e0ff55265f244148f41a2 Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Mon, 11 May 2020 18:35:01 -0400 Subject: [PATCH 40/84] Updates for wave coupling in NUOPC (#196) * Updates for wave coupling in NUOPC * add exports of PSTOKES for WW3->MOM6 coupling * add ice value for surface roughness and FLD2 to switch * add FieldFill and FieldGather to the timings of wmesmf * Updates to compile wmesmf after PR#189 * Updating Stokes partitions calculation to make sure there are default values * for wcoss-phase2 open -> qopen --- model/bin/comp.wcoss_phase2 | 2 +- model/bin/link.wcoss_phase2 | 2 +- model/esmf/switch | 1 + model/ftn/w3iogomd.ftn | 8 +- model/ftn/wmesmfmd.ftn | 340 +++++++++++++++++++++++++++++++++--- 5 files changed, 324 insertions(+), 29 deletions(-) diff --git a/model/bin/comp.wcoss_phase2 b/model/bin/comp.wcoss_phase2 index c8f3c6246..afb5a6043 100755 --- a/model/bin/comp.wcoss_phase2 +++ b/model/bin/comp.wcoss_phase2 @@ -106,7 +106,7 @@ # open mpi implementation if [ "$omp_mod" = 'yes' ] then - opt="$opt -openmp" + opt="$opt -qopenmp" fi # oasis coupler include dir diff --git a/model/bin/link.wcoss_phase2 b/model/bin/link.wcoss_phase2 index 3d5abaf36..57b258d95 100755 --- a/model/bin/link.wcoss_phase2 +++ b/model/bin/link.wcoss_phase2 @@ -109,7 +109,7 @@ # open mpi implementation if [ "$omp_mod" = 'yes' ] then - opt="$opt -openmp" + opt="$opt -qopenmp" fi # oasis coupler archive diff --git a/model/esmf/switch b/model/esmf/switch index e11a9df0f..c1f8b6e86 100644 --- a/model/esmf/switch +++ b/model/esmf/switch @@ -19,6 +19,7 @@ NL1 BT1 DB1 MLIM +FLD2 TR0 BS0 XX0 diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 055b4720f..242c85356 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -3689,7 +3689,7 @@ !/S INTEGER, SAVE :: IENT = 0 REAL :: FACTOR, FKD,KD REAL :: ABX(NSEAL), ABY(NSEAL), USSCO - REAL :: MINDIFF=1.e8 + REAL :: MINDIFF INTEGER :: Spc2Bnd(NK) !/ !/ ------------------------------------------------------------------- / @@ -3782,13 +3782,15 @@ ENDIF ELSEIF (USS_SWITCH==2) THEN ! Match each spectral component to the nearest partition - DO IB=1,USSPF(2) + MINDIFF=1.e8 + Spc2BND(IK) = 1 + MINDIFF=abs(USSP_WN(1)-WN(IK,ISEA)) + DO IB=2,USSPF(2) IF (MinDiff .gt. abs(USSP_WN(IB)-WN(IK,ISEA))) then Spc2BND(IK) = IB MinDiff = abs(USSP_WN(IB)-WN(IK,ISEA)) ENDIF ENDDO - MINDIFF=1.e8 !Put spectral energey into whichever band central wavenumber fits in USSP(JSEA,Spc2Bnd(IK)) = USSP(JSEA,Spc2Bnd(IK)) + ABX(JSEA)*USSCO USSP(JSEA,NK+Spc2BND(IK)) = USSP(JSEA,NK+Spc2Bnd(IK)) + ABY(JSEA)*USSCO diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index 7974a09fa..284559707 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -37,6 +37,7 @@ #define TEST_WMESMFMD_BOTCUR___disabled #define TEST_WMESMFMD_RADSTR2D___disabled #define TEST_WMESMFMD_STOKES3D___disabled +#define TEST_WMESMFMD_PSTOKES___disabled !/ !/ ------------------------------------------------------------------- / module WMESMFMD @@ -108,6 +109,7 @@ ! CalcBotcur Subr. Private Calculate wave-bottom currents for export ! CalcRadstr2D Subr. Private Calculate 2D radiation stresses for export ! CalcStokes3D Subr. Private Calculate 3D Stokes drift current for export +! CalcPStokes Subr. Private Calculate partitioned Stokes drift for export ! ---------------------------------------------------------------- ! ! 4. Subroutines and functions used : @@ -196,7 +198,7 @@ real(ESMF_KIND_RX) :: missingValue ! ! --- Timing - integer, parameter :: numwt=8 + integer, parameter :: numwt=10 character(32) :: wtnam(numwt) integer :: wtcnt(numwt) real(8) :: wtime(numwt) @@ -353,6 +355,8 @@ wtnam( 6) = 'Finalize' wtnam( 7) = 'GetImport' wtnam( 8) = 'SetExport' + wtnam( 9) = 'FieldGather' + wtnam(10) = 'FieldFill' wtcnt( :) = 0 wtime( :) = 0d0 ! @@ -976,6 +980,48 @@ expFieldDim(i) = 3 endif + i = i + 1 + if ( istep.eq.2 ) then + expFieldName(i) = 'x1pstk' + expFieldStdName(i) = 'eastward_partitioned_stokes_drift_1' + expFieldDim(i) = 2 + endif + + i = i + 1 + if ( istep.eq.2 ) then + expFieldName(i) = 'y1pstk' + expFieldStdName(i) = 'northward_partitioned_stokes_drift_1' + expFieldDim(i) = 2 + endif + + i = i + 1 + if ( istep.eq.2 ) then + expFieldName(i) = 'x2pstke' + expFieldStdName(i) = 'eastward_partitioned_stokes_drift_2' + expFieldDim(i) = 2 + endif + + i = i + 1 + if ( istep.eq.2 ) then + expFieldName(i) = 'y2pstk' + expFieldStdName(i) = 'northward_partitioned_stokes_drift_2' + expFieldDim(i) = 2 + endif + + i = i + 1 + if ( istep.eq.2 ) then + expFieldName(i) = 'x3pstk' + expFieldStdName(i) = 'eastward_partitioned_stokes_drift_3' + expFieldDim(i) = 2 + endif + + i = i + 1 + if ( istep.eq.2 ) then + expFieldName(i) = 'y3pstk' + expFieldStdName(i) = 'northward_partitioned_stokes_drift_3' + expFieldDim(i) = 2 + endif + i = i + 1 if ( istep.eq.2 ) then expFieldName(i) = 'wbcuru' @@ -2399,7 +2445,7 @@ character(ESMF_MAXSTR) :: cname integer, parameter :: iwt=8 real(8) :: wstime, wftime - integer :: i1, i2, i3 + integer :: i1, i2, i3, i4, i5, i6 logical :: flpart = .false., floutg = .false., floutg2 = .true. #if defined(TEST_WMESMFMD) || defined(TEST_WMESMFMD_SETEXPORT) type(ESMF_State) :: dumpState @@ -2464,6 +2510,32 @@ endif ! ! -------------------------------------------------------------------- / +! Partitioned Stokes Drift 3 2D fields +! + i1 = FieldIndex( expFieldName, 'x1pstk', rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + i2 = FieldIndex( expFieldName, 'y1pstk', rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + i3 = FieldIndex( expFieldName, 'x2pstk', rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + i4 = FieldIndex( expFieldName, 'y2pstk', rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + i5 = FieldIndex( expFieldName, 'x3pstk', rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + i6 = FieldIndex( expFieldName, 'y3pstk', rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + if ( expFieldActive(i1) .and. & + expFieldActive(i2) .and. & + expFieldActive(i3) .and. & + expFieldActive(i4) .and. & + expFieldActive(i5) .and. & + expFieldActive(i6) ) then + call CalcPStokes( va, expField(i1), expField(i2), expField(i3), & + expField(i4), expField(i5), expField(i6), rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + endif +! +! -------------------------------------------------------------------- / ! Bottom Currents ! i1 = FieldIndex( expFieldName, 'wbcuru', rc ) @@ -4617,12 +4689,16 @@ real(ESMF_KIND_RX), pointer :: dptr1(:) real(ESMF_KIND_RX), pointer :: dptr2(:,:) real(ESMF_KIND_RX), pointer :: dptr3(:,:,:) + integer, parameter :: iwt=10 + real(8) :: wstime, wftime ! ! -------------------------------------------------------------------- / ! Fill Field ! if (present(rc)) rc = ESMF_SUCCESS + call ESMF_VMWtime(wstime) + call ESMF_FieldGet(field, localDECount=ldecnt, rank=rank, rc=rc) if (ESMF_LogFoundError(rc, PASSTHRU)) return ! bail out if (rank.ne.1.and.rank.ne.2.and.rank.ne.3) then @@ -4656,6 +4732,10 @@ endif enddo + + call ESMF_VMWtime(wftime) + wtime(iwt) = wtime(iwt) + wftime - wstime + wtcnt(iwt) = wtcnt(iwt) + 1 !/ !/ End of FieldFill ------------------------------------------------- / !/ @@ -4734,12 +4814,16 @@ real(ESMF_KIND_RX) :: floc(n1,n2) real(ESMF_KIND_RX) :: floc1d(n1), floc1dary(n1*n2) !/PDLIB real(ESMF_KIND_R8), pointer :: fldptr(:) + integer, parameter :: iwt=9 + real(8) :: wstime, wftime ! ! -------------------------------------------------------------------- / ! Gather Field ! if (present(rc)) rc = ESMF_SUCCESS + call ESMF_VMWtime(wstime) + ! call ESMF_FieldWrite(field,fileName="ww3_import_dump.nc",overwrite=.true.,rc=rc) if ( (GTYPE.eq.RLGTYPE).or.(GTYPE.eq.CLGTYPE) ) then count = n1 * n2 @@ -4792,6 +4876,11 @@ !/PDLIB! enddo endif + + call ESMF_VMWtime(wftime) + wtime(iwt) = wtime(iwt) + wftime - wstime + wtcnt(iwt) = wtcnt(iwt) + 1 + !/ !/ End of FieldGather ------------------------------------------------ / !/ @@ -5356,7 +5445,7 @@ logical, save :: firstCall = .true. integer :: isea, jsea real :: emean, fmean, fmean1, wnmean, amax, ustar, ustdr, & - tauwx, tauwy, cd, z0, fmeanws + tauwx, tauwy, cd, z0, fmeanws, dlwmean logical :: llws(nspec) type(ESMF_Field) :: chknField real(ESMF_KIND_RX), pointer :: chkn(:) @@ -5396,7 +5485,8 @@ !/ST4 call w3spr4( va(:,jsea), cg(1:nk,isea), wn(1:nk,isea), & !/ST4 emean, fmean, fmean1, wnmean, amax, & !/ST4 u10(isea), u10d(isea), ustar, ustdr, tauwx, & -!/ST4 tauwy, cd, z0, charn(jsea), llws, fmeanws ) +!/ST4 tauwy, cd, z0, charn(jsea), llws, fmeanws, & +!/ST4 dlwmean ) endif !firstCall chkn(jsea) = charn(jsea) enddo jsea_loop @@ -5482,9 +5572,9 @@ !/ real , parameter :: zero = 0.0 logical, save :: firstCall = .true. - integer :: isea, jsea + integer :: isea, jsea, ix, iy real :: emean, fmean, fmean1, wnmean, amax, ustar, ustdr, & - tauwx, tauwy, cd, z0, fmeanws + tauwx, tauwy, cd, z0, fmeanws, dlwmean logical :: llws(nspec) type(ESMF_Field) :: wrlnField real(ESMF_KIND_RX), pointer :: wrln(:) @@ -5509,24 +5599,32 @@ jsea_loop: do jsea = 1,nseal !/DIST isea = iaproc + (jsea-1)*naproc !/SHRD isea = jsea - if ( firstCall ) then - charn(jsea) = zero -!/ST3 llws(:) = .true. -!/ST3 ustar = zero -!/ST3 ustdr = zero -!/ST3 call w3spr3( va(:,jsea), cg(1:nk,isea), wn(1:nk,isea), & -!/ST3 emean, fmean, fmean1, wnmean, amax, & -!/ST3 u10(isea), u10d(isea), ustar, ustdr, tauwx, & -!/ST3 tauwy, cd, z0, charn(jsea), llws, fmeanws ) -!/ST4 llws(:) = .true. -!/ST4 ustar = zero -!/ST4 ustdr = zero -!/ST4 call w3spr4( va(:,jsea), cg(1:nk,isea), wn(1:nk,isea), & -!/ST4 emean, fmean, fmean1, wnmean, amax, & -!/ST4 u10(isea), u10d(isea), ustar, ustdr, tauwx, & -!/ST4 tauwy, cd, z0, charn(jsea), llws, fmeanws ) - endif !firstCall - wrln(jsea) = charn(jsea)*ust(isea)**2/grav + IX = MAPSF(ISEA,1) + IY = MAPSF(ISEA,2) + IF ( MAPSTA(IY,IX) .EQ. 1 ) THEN + if ( firstCall ) then + charn(jsea) = zero +!/ST3 llws(:) = .true. +!/ST3 ustar = zero +!/ST3 ustdr = zero +!/ST3 call w3spr3( va(:,jsea), cg(1:nk,isea), wn(1:nk,isea), & +!/ST3 emean, fmean, fmean1, wnmean, amax, & +!/ST3 u10(isea), u10d(isea), ustar, ustdr, tauwx, & +!/ST3 tauwy, cd, z0, charn(jsea), llws, fmeanws ) +!/ST4 llws(:) = .true. +!/ST4 ustar = zero +!/ST4 ustdr = zero +!/ST4 call w3spr4( va(:,jsea), cg(1:nk,isea), wn(1:nk,isea), & +!/ST4 emean, fmean, fmean1, wnmean, amax, & +!/ST4 u10(isea), u10d(isea), ustar, ustdr, tauwx, & +!/ST4 tauwy, cd, z0, charn(jsea), llws, fmeanws, & +!/ST4 dlwmean ) + endif !firstCall + wrln(jsea) = charn(jsea)*ust(isea)**2/grav + else + !ice value + wrln(jsea) = 0.00001d0 + endif enddo jsea_loop endif !natGridIsLocal @@ -6257,6 +6355,200 @@ !/ end subroutine CalcStokes3D !/ ------------------------------------------------------------------- / +#undef METHOD +#define METHOD "CalcPStokes" + subroutine CalcPStokes ( a, p1xField, p1yField, p2xField, & + p2yField, p3xField, p3yField, rc ) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | J. Meixner | +!/ | FORTRAN 90 | +!/ | Last update : 29-Oct-2019 | +!/ +-----------------------------------+ +!/ +!/ DD-MMM-YYYY : Origination. ( version 7.XX ) +!/ +! 1. Purpose : +! +! Calculate partitioned Stokes drift for export +! +! 2. Method : +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! a Real I Input spectra (in par list to change shape) +! p1Field Type I/O +! p2Field Type I/O +! p3Field Type I/O +! rc Int O Return code +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! NONE +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! 6. Error messages : +! +! 7. Remarks : +! +! 8. Structure : +! +! 9. Switches : +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / +!/ + USE W3ADATMD, ONLY: USSP + USE W3IOGOMD, ONLY: CALC_U3STOKES + IMPLICIT NONE +!/ ------------------------------------------------------------------- / +!/ Parameter list +!/ + real :: a(nth,nk,0:nseal) + type(ESMF_Field) :: p1xField,p2xField,p3xField + type(ESMF_Field) :: p1yField,p2yField,p3yField + integer :: rc +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + !real(8) :: sxxs, sxys, syys + type(ESMF_Field) :: p1xnField, p2xnField, p3xnField + type(ESMF_Field) :: p1ynField, p2ynField, p3ynField + real(ESMF_KIND_RX), pointer :: p1xn(:), p2xn(:), p3xn(:) + real(ESMF_KIND_RX), pointer :: p1yn(:), p2yn(:), p3yn(:) + integer, save :: timeSlice = 1 + integer :: isea,jsea +! +! -------------------------------------------------------------------- / +! + rc = ESMF_SUCCESS + + + p1xnField = ESMF_FieldCreate( natGrid, natArraySpec2D, & + staggerLoc=natStaggerLoc, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + p1ynField = ESMF_FieldCreate( natGrid, natArraySpec2D, & + staggerLoc=natStaggerLoc, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + p2xnField = ESMF_FieldCreate( natGrid, natArraySpec2D, & + staggerLoc=natStaggerLoc, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + p2ynField = ESMF_FieldCreate( natGrid, natArraySpec2D, & + staggerLoc=natStaggerLoc, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + p3xnField = ESMF_FieldCreate( natGrid, natArraySpec2D, & + staggerLoc=natStaggerLoc, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + p3ynField = ESMF_FieldCreate( natGrid, natArraySpec2D, & + staggerLoc=natStaggerLoc, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + + call FieldFill( p1xnField, zeroValue, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call FieldFill( p1ynField, zeroValue, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call FieldFill( p2xnField, zeroValue, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call FieldFill( p2ynField, zeroValue, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call FieldFill( p3xnField, zeroValue, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call FieldFill( p3ynField, zeroValue, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + + if ( natGridIsLocal ) then + + call ESMF_FieldGet( p1xnField, farrayPtr=p1xn, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldGet( p1ynField, farrayPtr=p1yn, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldGet( p2xnField, farrayPtr=p2xn, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldGet( p2ynField, farrayPtr=p2yn, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldGet( p3xnField, farrayPtr=p3xn, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldGet( p3ynField, farrayPtr=p3yn, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + + call CALC_U3STOKES ( a , 2 ) + + jsea_loop: do jsea = 1,nseal +!/DIST isea = iaproc + (jsea-1)*naproc +!/SHRD isea = jsea + + p1xn(jsea)=ussp(jsea,1) + p1yn(jsea)=ussp(jsea,nk+1) + p2xn(jsea)=ussp(jsea,2) + p2yn(jsea)=ussp(jsea,nk+2) + p3xn(jsea)=ussp(jsea,3) + p3yn(jsea)=ussp(jsea,nk+3) + enddo jsea_loop + + endif !natGridIsLocal + + call ESMF_FieldRedist( p1xnField, p1xField, n2eRH, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldRedist( p1ynField, p1yField, n2eRH, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldRedist( p2xnField, p2xField, n2eRH, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldRedist( p2ynField, p2yField, n2eRH, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldRedist( p3xnField, p3xField, n2eRH, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldRedist( p3ynField, p3yField, n2eRH, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + + call ESMF_FieldDestroy( p1xnField, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldDestroy( p2xnField, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldDestroy( p3xnField, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldDestroy( p1ynField, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldDestroy( p2ynField, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldDestroy( p3ynField, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + +#ifdef TEST_WMESMFMD_PSTOKES + call ESMF_FieldWrite( p1xField, "wmesmfmd_pstokes_1x.nc", & + overwrite=.true., timeSlice=timeSlice, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldWrite( p1yField, "wmesmfmd_pstokes_1y.nc", & + overwrite=.true., timeSlice=timeSlice, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldWrite( p2xField, "wmesmfmd_pstokes_2x.nc", & + overwrite=.true., timeSlice=timeSlice, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldWrite( p2yField, "wmesmfmd_pstokes_2y.nc", & + overwrite=.true., timeSlice=timeSlice, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldWrite( p3xField, "wmesmfmd_pstokes_3x.nc", & + overwrite=.true., timeSlice=timeSlice, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_FieldWrite( p3yField, "wmesmfmd_pstokes_3y.nc", & + overwrite=.true., timeSlice=timeSlice, rc=rc ) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + timeSlice = timeSlice + 1 +#endif +!/ +!/ End of CalcPStokes ----------------------------------------------- / +!/ + end subroutine CalcPStokes +!/ ------------------------------------------------------------------- / !/ !/ End of module WMESMFMD -------------------------------------------- / !/ From 46bcb868b65da4789c5a004ce19261f2a8e08480 Mon Sep 17 00:00:00 2001 From: wx20ha Date: Mon, 11 May 2020 23:24:52 +0000 Subject: [PATCH 41/84] Updating WW3 version in ww3_from_ftp.sh, adding curlev.nc file required in ww3_tp2.18 --- model/bin/ww3_from_ftp.sh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index 33daa927e..1dcec258a 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -7,6 +7,9 @@ curr_dir=`pwd` +# Set WW3 code version +ww3ver=v7.06 + #Get top level directory of ww3 from user: echo -e "\n\n This script will download data from the ftp for WAVEWATCH III " echo -e "Enter the relative path to the main/top level directory, this would " @@ -19,8 +22,8 @@ cd $ww3dir #Download from ftp and uptar: echo -e "Downloading and untaring file from ftp:" -wget ftp://polar.ncep.noaa.gov/tempor/ww3ftp/ww3_from_ftp.v6.07.tar.gz -tar -xvzf ww3_from_ftp.v6.07.tar.gz +wget ftp://polar.ncep.noaa.gov/tempor/ww3ftp/ww3_from_ftp.${ww3ver}.tar.gz +tar -xvzf ww3_from_ftp.${ww3ver}.tar.gz #Move regtest info from data_regtests to regtests: echo -e "Moving data from data_regtests to regtests" @@ -43,12 +46,12 @@ cp -r data_regtests/ww3_tp2.17/input/* regtests/ww3_tp2.17/input/ #Do you want to clean up (aka delete tar file, delete the data_regtests directory) -echo -e "\n\n Do you want to delete the tar file ww3_from_ftp.v6.07.tar.gz [y|n]: " +echo -e "\n\n Do you want to delete the tar file ww3_from_ftp.${ww3ver}.tar.gz [y|n]: " read wnew if [ "${wnew}" = "Y" ] || [ "${wnew}" = "y" ] then - echo -e '\n Deleting tar file ww3_from_ftp.v6.07.tar.gz' - rm ww3_from_ftp.v6.07.tar.gz + echo -e '\n Deleting tar file ww3_from_ftp.${ww3ver}.tar.gz' + rm ww3_from_ftp.${ww3ver}.tar.gz else echo -e ' Not deleting tar file.' fi From 7620443e9c2d6401c49cdc97dcbad3ed78550f46 Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Thu, 14 May 2020 15:14:31 +0200 Subject: [PATCH 42/84] Feature/tide : tide update and MPI implementation (#195) * mpi implementation in ww3_prtide clean up and bug fix applied * clean up the tidal analysis code and add tests to avoid NaN values due to non-linear effects between specific tidal components * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * correction for tidal constituents ww3_prnc/ww3_prtide add a regtest ww3_tp2.18 * correct bug in scale factor in ww3_prnc * undo TIDE switch * add WCOR to switch list * add check on array index * undo TIDE switch * correct how to manage fillvalue to zero * update regtest ww3_tp2.18 to have it working with tide remove 0.5d in w3updtmd and prtide compile ww3_prnc in mpi with tide switch correct reference date in time units attribute * version working correctly with original tidal harmonics * correct flag status to read time with new CF convention when month and day are written on only one character : YYYY-M-D * set log message into SCRIP comment to avoid misleading error detection with gnu compiler * correct bug due to misuse of NAME instead of UNIT for reading data in input file * remove linking inp file in conversion scripts minor typing change in ww3_multi.nml and ww3_bounc.nml * clean up * update namelist * update make_makefile.sh to compile prnc without TIDE switch correct ww3_prnc to not use TIDE switch (conflict with MPI switch on the same lines) update w3_automake to compile ww3_prnc in SEQ and PAR if TIDE * remove TIDE switch in switch files than should not have it update ww3_tp2.8 without TIDE since it is not doing it update ww3_tp2.18 with TIDE since it does tidal harmonics update matrix.base with regtests for TIDE (shrd and mpi) update run_test to compute ww3_prtide in mpi * correct bug in character array size update matrix.base to add ww3_tp2.18 check the results with SHRD/MPI and inp/nml : ok * readd tidecode to prep for linking * initialize pointer to avoid random value assignement * remove exit statement to display full list of output boundaries * add check on NDSEN to avoid print on wrong IAPROC * when creating new points file from input file, add relative to points file instead of filename * revert to version number to 7.00 * trim the output name string * update matrix_datarmor * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * update date and version * cmplr.env: add test on openmp for datarmor run_test: create tmp variable runprog * remove not necessary namelist * update path for matrix * force shared for prnc Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- model/aux/bash/ww3_prnc_inp2nml.sh | 1 + model/bin/make_makefile.sh | 2 +- model/bin/sort_switch | 2 +- model/bin/w3_automake | 28 +- model/bin/ww3_from_ftp.sh | 1 + model/ftn/w3fldsmd.ftn | 16 +- model/ftn/w3nmlprncmd.ftn | 4 +- model/ftn/w3servmd.ftn | 34 +- model/ftn/w3tidemd.ftn | 106 +-- model/ftn/ww3_prnc.ftn | 644 +++++++++--------- model/ftn/ww3_prtide.ftn | 589 ++++++++++------ regtests/bin/matrix.base | 5 +- regtests/bin/run_test | 207 +++++- regtests/ww3_tp2.14/input/switch_OASACM | 2 +- regtests/ww3_tp2.14/input/switch_OASICM | 2 +- regtests/ww3_tp2.14/input/switch_OASOCM | 2 +- regtests/ww3_tp2.18/info | 33 + regtests/ww3_tp2.18/input/iro1k.bot | 3 + regtests/ww3_tp2.18/input/iro1k.mask | 3 + .../ww3_tp2.18/input/namelists_IROISE.nml | 2 + regtests/ww3_tp2.18/input/switch_TIDE | 1 + regtests/ww3_tp2.18/input/switch_TIDE_MPI | 1 + regtests/ww3_tp2.18/input/ww3_grid.inp | 275 ++++++++ regtests/ww3_tp2.18/input/ww3_grid.nml | 272 ++++++++ regtests/ww3_tp2.18/input/ww3_ounf.inp | 45 ++ regtests/ww3_tp2.18/input/ww3_ounf.nml | 55 ++ regtests/ww3_tp2.18/input/ww3_prnc.inp | 48 ++ regtests/ww3_tp2.18/input/ww3_prnc.nml | 78 +++ .../ww3_tp2.18/input/ww3_prtide_current.inp | 31 + regtests/ww3_tp2.18/input/ww3_shel.inp | 119 ++++ regtests/ww3_tp2.18/input/ww3_shel.nml | 334 +++++++++ regtests/ww3_tp2.8/info | 18 +- regtests/ww3_tp2.8/input/switch_TIDE | 1 - regtests/ww3_tp2.8/input/switch_TIDE_NC4 | 1 - regtests/ww3_tp2.8/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.8/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.8/input/ww3_outf.inp | 2 +- regtests/ww3_tp2.8/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.8/input/ww3_shel.nml | 3 +- regtests/ww3_ts4/input_rg_multi/switch | 2 +- regtests/ww3_ts4/input_rg_multi/switch_MPI | 2 +- regtests/ww3_ts4/input_rg_shel/switch | 2 +- regtests/ww3_ts4/input_rg_shel/switch_MPI | 2 +- regtests/ww3_ts4/input_ug/switch | 2 +- regtests/ww3_ts4/input_ug/switch_MPI | 2 +- 45 files changed, 2335 insertions(+), 655 deletions(-) create mode 100644 regtests/ww3_tp2.18/info create mode 100644 regtests/ww3_tp2.18/input/iro1k.bot create mode 100644 regtests/ww3_tp2.18/input/iro1k.mask create mode 100644 regtests/ww3_tp2.18/input/namelists_IROISE.nml create mode 100755 regtests/ww3_tp2.18/input/switch_TIDE create mode 100755 regtests/ww3_tp2.18/input/switch_TIDE_MPI create mode 100644 regtests/ww3_tp2.18/input/ww3_grid.inp create mode 100644 regtests/ww3_tp2.18/input/ww3_grid.nml create mode 100644 regtests/ww3_tp2.18/input/ww3_ounf.inp create mode 100644 regtests/ww3_tp2.18/input/ww3_ounf.nml create mode 100644 regtests/ww3_tp2.18/input/ww3_prnc.inp create mode 100644 regtests/ww3_tp2.18/input/ww3_prnc.nml create mode 100644 regtests/ww3_tp2.18/input/ww3_prtide_current.inp create mode 100644 regtests/ww3_tp2.18/input/ww3_shel.inp create mode 100644 regtests/ww3_tp2.18/input/ww3_shel.nml delete mode 100755 regtests/ww3_tp2.8/input/switch_TIDE delete mode 100755 regtests/ww3_tp2.8/input/switch_TIDE_NC4 diff --git a/model/aux/bash/ww3_prnc_inp2nml.sh b/model/aux/bash/ww3_prnc_inp2nml.sh index 801b79048..aabfa642f 100755 --- a/model/aux/bash/ww3_prnc_inp2nml.sh +++ b/model/aux/bash/ww3_prnc_inp2nml.sh @@ -202,6 +202,7 @@ if [ "$format" = "LL" ]; then echo " FORCING%GRID%LATLON = T" >> $nmlf if [ "$format" = "AT" ] then + if [ "$format" = "AT" ]; then echo " FORCING%GRID%ASIS = T" >> $nmlfile; fi if [ "$field" = "CUR" ] || [ "$field" = "LEV" ] ; then echo " FORCING%TIDAL = '$tide'" >> $nmlfile; fi fi diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index ad90065c1..15545e493 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -922,7 +922,7 @@ prop= source="$pdlibcode $pdlibyow $db $bt $setupcode w3triamd $stx $nlx $btx $is w3parall $uostmd" IO="w3iogrmd $oasismd $agcmmd $ogcmmd $igcmmd" - aux="constants w3servmd w3timemd w3arrymd w3dispmd w3gsrumd $tidecode w3nmlprncmd" ;; + aux="constants w3servmd w3timemd w3arrymd w3dispmd w3gsrumd w3tidemd w3nmlprncmd" ;; ww3_prtide) IDstring='Tide prediction' core='w3fldsmd' data="wmmdatmd $memcode w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd" diff --git a/model/bin/sort_switch b/model/bin/sort_switch index dda7f5024..602b9f009 100755 --- a/model/bin/sort_switch +++ b/model/bin/sort_switch @@ -508,7 +508,7 @@ EOF done # --------------------------------------------------------------------------- # -# 5. Processing done, last checsk and output # +# 5. Processing done, last checks and output # # --------------------------------------------------------------------------- # if [ "$i_lft" != '0' ] diff --git a/model/bin/w3_automake b/model/bin/w3_automake index ae312067b..42bc0825e 100755 --- a/model/bin/w3_automake +++ b/model/bin/w3_automake @@ -142,13 +142,13 @@ # PRTIDE - if [ -n "`grep TIDE $switch_file`" ] + if [ -n "$(grep TIDE $switch_file)" ] then cdf_programs="$cdf_programs ww3_prtide" fi # MULTI MULTI_ESMF SBS1 - if [ -n "`grep SCRIPNC $switch_file`" ] || [ -n "`grep OASIS $switch_file`" ] + if [ -n "$(grep SCRIPNC $switch_file)" ] || [ -n "$(grep OASIS $switch_file)" ] then cdf_programs="$cdf_programs ww3_multi" cdf_programs="$cdf_programs ww3_sbs1" @@ -166,12 +166,12 @@ fi # SYSTRK - if [ -n "`grep TRKNC $switch_file`" ] + if [ -n "$(grep TRKNC $switch_file)" ] then cdf_programs="$cdf_programs ww3_systrk" systrck_nc4notrknc=0 else - if [ -n "`grep NC4 $switch_file`" ] + if [ -n "$(grep NC4 $switch_file)" ] then systrck_nc4notrknc=1 else @@ -181,7 +181,7 @@ fi # SHEL PREP GSPL - if [ -n "`grep OASIS $switch_file`" ] + if [ -n "$(grep OASIS $switch_file)" ] then cdf_programs="$cdf_programs ww3_shel" cdf_programs="$cdf_programs ww3_prep" @@ -192,7 +192,7 @@ reg_programs="$reg_programs ww3_gspl" fi - if [ -n "`grep -nri fPIC $comp_file`" ] + if [ -n "$(grep -nri fPIC $comp_file)" ] then reg_programs="$reg_programs libww3.so" else @@ -225,11 +225,15 @@ # sort in seq or mpi programs par_programs="ww3_shel ww3_multi ww3_sbs1" + if [ -n "$(grep TIDE $switch_file)" ] + then + par_programs="$par_programs ww3_prtide ww3_prnc" + fi if [ $ESMFMKFILE ] then par_programs="$par_programs ww3_multi_esmf" fi - if [ -n "`grep OASIS $switch_file`" ] + if [ -n "$(grep OASIS $switch_file)" ] then par_programs="$par_programs ww3_prnc ww3_prep ww3_prtide" fi @@ -241,6 +245,11 @@ else seq_progs="$seq_progs $prog" fi + # add seq compilation of ww3_prnc if already compiled in par for TIDE + if [ "$(echo $prog)" == "ww3_prnc" ] && [ -n "$(grep TIDE $switch_file)" ] + then + seq_progs="$seq_progs ww3_prnc" + fi else seq_progs="$seq_progs $prog" fi @@ -376,6 +385,11 @@ rm -rf ${temp_dir}_$MODE mv $temp_dir ${temp_dir}_$MODE + # add seq compilation of ww3_prnc if already compiled in par for TIDE + if [ "$MODE" == "MPI" ] && [ "$(ls $main_dir/exe_$MODE | grep "ww3_prnc")" == "ww3_prnc" ] && [ -n "$(grep TIDE $main_dir/exe_$MODE/switch.$MODE)" ] + then + mv $main_dir/exe_$MODE/ww3_prnc $main_dir/exe_$MODE/ww3_prnc.$MODE + fi done diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index 1dcec258a..f17d3c6e0 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -27,6 +27,7 @@ tar -xvzf ww3_from_ftp.${ww3ver}.tar.gz #Move regtest info from data_regtests to regtests: echo -e "Moving data from data_regtests to regtests" +cp -r data_regtests/ww3_tp2.18/input/*.nc regtests/ww3_tp2.18/input/ cp -r data_regtests/ww3_tp2.15/input/*.nc regtests/ww3_tp2.15/input/ cp -r data_regtests/ww3_tp2.13/*.png regtests/ww3_tp2.13/ cp -r data_regtests/ww3_tic1.4/input/*.nc regtests/ww3_tic1.4/input/ diff --git a/model/ftn/w3fldsmd.ftn b/model/ftn/w3fldsmd.ftn index 01d51297f..0f59832b1 100644 --- a/model/ftn/w3fldsmd.ftn +++ b/model/ftn/w3fldsmd.ftn @@ -677,16 +677,16 @@ ! ! Formats ! - 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE : '/ & + 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ & ' ILLEGAL INXOUT STRING : ',A/) - 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE : '/ & + 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ & ' ILLEGAL FIELD ID STRING : ',A/) - 1004 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE : '/ & + 1004 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ & ' ERROR IN WRITING TO ',A,' FILE, IOSTAT =',I6/) - 1005 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE : '/ & + 1005 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ & ' ERROR IN READING ',A,' FILE, IOSTAT =',I6/) - 1006 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE : '/ & + 1006 FORMAT (/' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ & ' PREMATURE END OF ',A,' FILE'/) !/ !/ End of W3FLDO ---------------------------------------------------- / @@ -710,7 +710,7 @@ !/ ! 1. Purpose : ! -! Reads and writes tidal consituents +! Reads and writes tidal constituents ! ! 2. Method : ! @@ -818,7 +818,7 @@ !/TIDE ELSE !/TIDE IF (.NOT. ALLOCATED(TIDAL_CONST)) ALLOCATE(TIDAL_CONST(NX,NY,TIDE_MF,2,2)) !/TIDE IF (.NOT. ALLOCATED(TIDE_FREQC)) ALLOCATE(TIDE_FREQC(TIDE_MF)) -!/TIDE IF (.NOT. ALLOCATED(TIDECON_NAME)) ALLOCATE(TIDECON_NAMEI(TIDE_MF)) +!/TIDE IF (.NOT. ALLOCATED(TIDECON_NAMEI)) ALLOCATE(TIDECON_NAMEI(TIDE_MF)) !/TIDE READ (NDS,END=806,ERR=805,IOSTAT=IERR) & !/TIDE TIDE_FREQC,TIDECON_NAMEI(:),TIDAL_CONST(:,:,:,:,:) !/TIDE LIST(:)='' @@ -845,7 +845,7 @@ !/TIDET '##',TIDAL_CONST(2,1,I,2,1),TIDAL_CONST(2,1,I,2,2) !/TIDET END DO !/TIDET DO IX=1,NX -!/TIDET IF (IDFLD.EQ.'CUR') WRITE (989,'(I10,X,176F10.3)'),IX,CXTIDE(IX,1,:,1),CYTIDE(IX,1,:,1), & +!/TIDET IF (IDFLD.EQ.'CUR') WRITE (989,'(I10,X,176F10.3)') IX,CXTIDE(IX,1,:,1),CYTIDE(IX,1,:,1), & !/TIDET CXTIDE(IX,1,:,2),CYTIDE(IX,1,:,2) !/TIDET END DO !/TIDET IF (IDFLD.EQ.'CUR') WRITE(988,'(F10.3,/)') CXTIDE(:,1,15,1) diff --git a/model/ftn/w3nmlprncmd.ftn b/model/ftn/w3nmlprncmd.ftn index 1c81617fb..9a6ce89a0 100644 --- a/model/ftn/w3nmlprncmd.ftn +++ b/model/ftn/w3nmlprncmd.ftn @@ -54,7 +54,7 @@ CHARACTER(15) :: TIMESTOP TYPE(NML_FIELD_T) :: FIELD TYPE(NML_GRID_T) :: GRID - CHARACTER(64) :: TIDAL + CHARACTER(256) :: TIDAL END TYPE NML_FORCING_T ! file structure @@ -516,7 +516,7 @@ WRITE (NDSN,13) TRIM(MSG),'GRID % ASIS = ', NML_FORCING%GRID%ASIS WRITE (NDSN,13) TRIM(MSG),'GRID % LATLON = ', NML_FORCING%GRID%LATLON - WRITE (NDSN,10) TRIM(MSG),'TIDAL = ', NML_FORCING%TIDAL + WRITE (NDSN,10) TRIM(MSG),'TIDAL = ', TRIM(NML_FORCING%TIDAL) 10 FORMAT (A,2X,A,A) diff --git a/model/ftn/w3servmd.ftn b/model/ftn/w3servmd.ftn index 472f7f549..589f5ac4b 100644 --- a/model/ftn/w3servmd.ftn +++ b/model/ftn/w3servmd.ftn @@ -861,31 +861,31 @@ !/MPI IF ( PRESENT(COMM) ) CALL MPI_BARRIER ( COMM, IERR_MPI ) !/MPI CALL MPI_FINALIZE (IERR_MPI ) !/MPI ELSE ! error state -!/MPI WRITE(*,*) 'w3servmd MPI_ABORT, IEXIT=', IEXIT +!/MPI WRITE(*,'(/A,I6/)') 'EXTCDE MPI_ABORT, IEXIT=', IEXIT !/MPI IF (PRESENT(UNIT)) THEN -!/MPI WRITE(*,*) 'w3servmd UNIT=', UNIT -!/MPI ELSE -!/MPI WRITE(*,*) 'w3servmd UNIT missing' +!/MPI WRITE(*,'(/A,I6/)') 'EXTCDE UNIT=', UNIT +!!/MPI ELSE +!!/MPI WRITE(*,'(A)') 'EXTCDE UNIT missing' !/MPI END IF !/MPI IF (PRESENT(MSG)) THEN -!/MPI WRITE(*,*) 'w3servmd MSG=', MSG -!/MPI ELSE -!/MPI WRITE(*,*) 'w3servmd MSG missing' +!/MPI WRITE(*,'(/2A/)') 'EXTCDE MSG=', MSG +!!/MPI ELSE +!!/MPI WRITE(*,'(A)') 'EXTCDE MSG missing' !/MPI END IF !/MPI IF (PRESENT(FILE)) THEN -!/MPI WRITE(*,*) 'w3servmd FILE=', FILE -!/MPI ELSE -!/MPI WRITE(*,*) 'w3servmd FILE missing' +!/MPI WRITE(*,'(/2A/)') 'EXTCDE FILE=', FILE +!!/MPI ELSE +!!/MPI WRITE(*,'(A)') 'EXTCDE FILE missing' !/MPI END IF !/MPI IF (PRESENT(LINE)) THEN -!/MPI WRITE(*,*) 'w3servmd LINE=', LINE -!/MPI ELSE -!/MPI WRITE(*,*) 'w3servmd LINE missing' +!/MPI WRITE(*,'(/A,I8/)') 'EXTCDE LINE=', LINE +!!/MPI ELSE +!!/MPI WRITE(*,'(A)') 'EXTCDE LINE missing' !/MPI END IF !/MPI IF (PRESENT(COMM)) THEN -!/MPI WRITE(*,*) 'w3servmd COMM=', COMM -!/MPI ELSE -!/MPI WRITE(*,*) 'w3servmd COMM missing' +!/MPI WRITE(*,'(/A,I6/)') 'EXTCDE COMM=', COMM +!!/MPI ELSE +!!/MPI WRITE(*,'(A)') 'EXTCDE COMM missing' !/MPI END IF !/MPI CALL MPI_ABORT ( MPI_COMM_WORLD, IEXIT, IERR_MPI ) !/MPI END IF @@ -1506,7 +1506,7 @@ - CHARACTER(LEN=1024), intent(IN) :: STRING + CHARACTER(LEN=*), intent(IN) :: STRING CHARACTER(LEN=100), intent(INOUT) :: TAB(*) INTEGER :: cnt, I CHARACTER(LEN=1024) :: tmp_str, ori_str diff --git a/model/ftn/w3tidemd.ftn b/model/ftn/w3tidemd.ftn index a322ce1c1..da4e527a5 100644 --- a/model/ftn/w3tidemd.ftn +++ b/model/ftn/w3tidemd.ftn @@ -6,11 +6,12 @@ !/ | WAVEWATCH III | !/ ! M. Foreman, IOS ! !/ | FORTRAN 90 | -!/ | Last update : 04-Mar-2013 | +!/ | Last update : 21-Apr-2020 | !/ +-----------------------------------+ !/ !/ 01-Sep-2012 : Origination. ( version 4.07 ) !/ 04-Mar-2013 : Correction of FAST and new VFAST ( version 4.08 ) +!/ 21-Apr-2020 : Correction of time and implicit none( version 7.XX ) !/ ! 1. Purpose : ! @@ -287,6 +288,8 @@ ! ! 10. Source code : ! + USE W3ODATMD, ONLY: IAPROC, NAPROC, NAPERR, NAPOUT + USE W3ODATMD, ONLY: NDSE, NDSO !/S USE W3SERVMD, ONLY: STRACE !/ ------------------------------------------------------------------- / IMPLICIT NONE @@ -303,13 +306,13 @@ !/S CALL STRACE (IENT, 'TIDE_FIND_INDICES_PREDICTION') ! TIDE_PRMF=0 - IF (TRIM(LIST(1)).EQ.'ALL') THEN + IF (TRIM(LIST(1)).EQ.'VFAST' .OR. TRIM(LIST(1)).EQ.'FAST') THEN DO J=1,TIDE_MF INDS(J)=J - END DO + END DO TIDE_PRMF = TIDE_MF RETURN - END IF + END IF ! DO WHILE (len_trim(LIST(TIDE_PRMF+1)).NE.0) TIDE_PRMF=TIDE_PRMF+1 @@ -318,11 +321,13 @@ IF (TRIM(TIDECON_NAME(J)).EQ.TRIM(LIST(TIDE_PRMF))) THEN INDS(TIDE_PRMF)=J FOUND=1 - WRITE(6,*) 'Tidal constituent to be used in pre:',TRIM(LIST(TIDE_PRMF)),TIDE_FREQC(J) - END IF - END DO - IF (FOUND.EQ.0) WRITE(6,*) 'Tidal constituent ',TRIM(LIST(TIDE_PRMF)),' not available.' + IF (IAPROC.EQ.NAPOUT) WRITE(NDSO,'(A,A,E12.2)') 'Tidal constituent to be used in pre:', & + TRIM(LIST(TIDE_PRMF)),TIDE_FREQC(J) + END IF END DO + IF (FOUND.EQ.0 .AND. IAPROC.EQ.NAPOUT) WRITE(NDSO,'(3A)') 'Tidal constituent ',TRIM(LIST(TIDE_PRMF)), & + ' not available.' + END DO ! END SUBROUTINE TIDE_FIND_INDICES_PREDICTION @@ -332,10 +337,11 @@ !/ +-----------------------------------+ !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 28-Feb-2013 | +!/ | Last update : 21-Apr-2020 | !/ +-----------------------------------+ !/ !/ 29-Jun-2013 : Creation ( version 4.11 ) +!/ 21-Apr-2020 : Add 5 additional tidal const. ( version 7.XX ) !/ ! 1. Purpose : ! @@ -373,6 +379,9 @@ ! !/T Enable test output. ! ! 10. Source code : +! + USE W3ODATMD, ONLY: IAPROC, NAPROC, NAPERR, NAPOUT + USE W3ODATMD, ONLY: NDSE, NDSO !/S USE W3SERVMD, ONLY: STRACE ! !/ ------------------------------------------------------------------- / @@ -384,9 +393,9 @@ CHARACTER(LEN=100), INTENT(IN) :: LIST(70) ! INTEGER TIDE_MF_ALL - CHARACTER(LEN=5) :: TIDECON_NAME_ALL(60) ! array of names of tidal constituents - REAL :: TIDE_FREQC_ALL(60) ! array of freq. of tidal constituents - INTEGER :: INDS(60), J, FOUND, NTIDES + CHARACTER(LEN=5) :: TIDECON_NAME_ALL(65) ! array of names of tidal constituents + REAL :: TIDE_FREQC_ALL(65) ! array of freq. of tidal constituents + INTEGER :: INDS(65), J, FOUND, NTIDES !/S INTEGER, SAVE :: IENT = 0 ! !/S CALL STRACE (IENT, 'TIDE_FIND_INDICES_PREDICTION') @@ -397,9 +406,10 @@ 'J1 ', 'SO1 ', 'OO1 ', 'UPS1 ', 'OQ2 ', 'EPS2 ', '2N2 ', 'MU2 ', 'N2 ', 'NU2 ', & 'M2 ', 'MKS2 ', 'LDA2 ', 'L2 ', 'S2 ', 'K2 ', 'MSN2 ', 'ETA2 ', 'MO3 ', 'M3 ', & 'SO3 ', 'MK3 ', 'SK3 ', 'MN4 ', 'M4 ', 'SN4 ', 'MS4 ', 'MK4 ', 'S4 ', 'SK4 ', & - '2MK5 ', '2SK5 ', '2MN6 ', 'M6 ', '2MS6 ', '2MK6 ', '2SM6 ', 'MSK6 ', '3MK7 ', 'M8 ' /) + '2MK5 ', '2SK5 ', '2MN6 ', 'M6 ', '2MS6 ', '2MK6 ', '2SM6 ', 'MSK6 ', '3MK7 ', 'M8 ', & + 'N4 ', 'R2 ', 'S1 ', 'SA ', 'T2 ' /) ! - TIDE_FREQC_ALL(:)=(/0.0000000000, 0.0002281591, 0.0013097807, 0.0015121520, 0.0028219327, 0.0030500918, & + TIDE_FREQC_ALL(:)=(/0.0000000000, 0.0002281591, 0.0013097807, 0.0015121520, 0.0028219327, 0.0030500918, & 0.0343965698, 0.0357063505, 0.0359087218, 0.0372185025, 0.0374208738, & 0.0387306544, 0.0389588136, 0.0400404351, 0.0402685943, 0.0404709655, & 0.0415525871, 0.0417807462, 0.0420089053, 0.0430905269, 0.0432928982, & @@ -410,13 +420,10 @@ 0.1222921469, 0.1251140796, 0.1595106494, 0.1610228013, 0.1623325820, & 0.1638447340, 0.1640728931, 0.1666666667, 0.1668948258, 0.2028035476, & 0.2084474129, 0.2400220500, 0.2415342020, 0.2443561347, 0.2445842938, & - 0.2471780673, 0.2474062264, 0.2833149482, 0.3220456027 /) + 0.2471780673, 0.2474062264, 0.2833149482, 0.3220456027, & + 0.157998497 , 0.083447407 , 0.041666667 , 0.000114080 , 0.083219259 /) INDS(:) = 0 - IF (TRIM(LIST(1)).EQ.'ALL') THEN - WRITE(6,*) 'Tidal constituent ALL not available anymore.' - RETURN - END IF ! IF (TRIM(LIST(1)).EQ.'FAST') THEN TIDE_MF = 44 @@ -436,30 +443,33 @@ ! TIDE_MF=TIDE_MF+1 FOUND = 0 - DO J=1,60 + DO J=1,65 IF (TRIM(TIDECON_NAME_ALL(J)).EQ.TRIM(LIST(TIDE_MF))) THEN NTIDES=NTIDES+1 INDS(NTIDES)=J FOUND = 1 - WRITE(6,*) 'Tidal constituent in analysis:',J,TRIM(TIDECON_NAME_ALL(J)),TIDE_FREQC_ALL(J) - END IF - END DO - IF (FOUND.EQ.0) WRITE(6,*) 'Tidal constituent ',TIDE_MF,TRIM(LIST(TIDE_MF)),' not available.' -! + IF (IAPROC.EQ.NAPOUT) WRITE(NDSO,'(A,I4,2A,E12.2)') & + 'Tidal constituent in analysis:', J, ' ', & + TRIM(TIDECON_NAME_ALL(J)),TIDE_FREQC_ALL(J) + END IF END DO + IF (FOUND.EQ.0 .AND. IAPROC.EQ.NAPOUT) WRITE(NDSO,'(A,I4,A,A)') & + 'Tidal constituent ',TIDE_MF,TRIM(LIST(TIDE_MF)),' not available.' +! + END DO ! TIDE_MF=NTIDES - END IF + END IF ! ! Defines names and frequencies ! - IF (ALLOCATED(TIDE_FREQC)) DEALLOCATE(TIDE_FREQC) - ALLOCATE(TIDE_FREQC(TIDE_MF),TIDECON_NAME(TIDE_MF)) + IF (ALLOCATED(TIDE_FREQC)) DEALLOCATE(TIDE_FREQC) + ALLOCATE(TIDE_FREQC(TIDE_MF),TIDECON_NAME(TIDE_MF)) - DO J=1,TIDE_MF - TIDECON_NAME(J) = TIDECON_NAME_ALL(INDS(J)) - TIDE_FREQC(J) = TIDE_FREQC_ALL(INDS(J)) - END DO + DO J=1,TIDE_MF + TIDECON_NAME(J) = TIDECON_NAME_ALL(INDS(J)) + TIDE_FREQC(J) = TIDE_FREQC_ALL(INDS(J)) + END DO CALL TIDE_SET_INDICES ! @@ -1210,7 +1220,7 @@ ! See numerical recipes 2nd ed. The order of month and day have been swapped! !********************************************************************* IMPLICIT NONE - INTEGER id,mm,iyyy + INTEGER id,mm,iyyy INTEGER IGREG INTEGER*4 ja,jm,jy INTEGER*4 JULDAYT @@ -1238,7 +1248,7 @@ ! Should be removed : same is now in W3TIMEMD !********************************************************************* IMPLICIT NONE - INTEGER(KIND=4), INTENT(in) :: julian + INTEGER(KIND=4), INTENT(in) :: julian INTEGER(KIND=4), INTENT(out) :: id,mm,iyyy INTEGER(KIND=4), PARAMETER :: IGREG=2299161 INTEGER(KIND=4) ja,jalpha,jb,jc,jd,je @@ -1315,8 +1325,9 @@ real, intent(IN) :: toler real, intent(INOUT) :: q(mm,N2), ssq, res integer, intent(INOUT) :: jc + double precision, intent(INOUT) :: sig(mm) double precision, intent(OUT) :: u(mm,N2),v(N2,N2),cov(N2,N2), & - w(N2),b(mm),p(N2),sig(mm) + w(N2),b(mm),p(N2) ! LOCAL VARIABLES double precision :: wti(nwt) @@ -1325,7 +1336,6 @@ double precision :: eps, sum, resi jc=0 - sig(:)=1. do i=1,mm b(i)=q(i,N2) enddo @@ -1375,7 +1385,7 @@ resi=abs(b(i)-sum) ! TIDE_MF addition q(i,N2)=b(i)-sum - res=max(res,REAL(resi)) + res=max(res,resi) ssq=ssq+resi**2 enddo ! compute variances, covariances, these may need to be given dimension @@ -1408,7 +1418,7 @@ IMPLICIT NONE - integer :: JLM + INTEGER :: JLM NTIDAL_CON = 45 NTOTAL_CON = 45+101 @@ -1841,18 +1851,25 @@ !/ ------------------------------------------------------------------- / SUBROUTINE SETVUF(hr,XLAT,ITIME) ! setvuf calculates the V,u,f values at time hr for all constituents - REAL, INTENT(IN) :: XLAT + + IMPLICIT NONE + REAL(KIND=8), INTENT(IN) :: hr + REAL, INTENT(IN) :: XLAT + INTEGER, INTENT(IN) :: ITIME + ! ! Local variables ! - INTEGER :: ITIME, KD0, INT24, INTDYS, & + INTEGER :: KD0, INT24, INTDYS, & JBASE, J, K, L, J1, K1, JL, LK, iflag + INTEGER :: IV, IUU +! REAL(KIND=4), PARAMETER :: PI=3.1415926536 REAL(KIND=4), PARAMETER :: TWOPI=2.*3.1415926536 - - REAL :: SLAT, VDBL, IV, VV, SUMC, SUMS, RR, & - UUDBL, IUU, UU +! + REAL :: SLAT, VDBL, VV, SUMC, SUMS, RR, & + UUDBL, UU REAL(KIND=8) :: d1,h,pp,s,p,enp,dh,dpp,ds,dp,dnp,hh,tau INTEGER :: indx(170) @@ -1872,7 +1889,8 @@ ! KD0= 693961 !KD0=JULDAYT(31,12,1899) ! JULDAYT(id,mm,iyyy) KD0= 2415020 - d1=d1-dfloat(KD0)-0.5d0 + ! substracting 0.5day is not necessary anymore with new time functions + d1=d1-dfloat(KD0) call astr(d1,h,pp,s,p,enp,dh,dpp,ds,dp,dnp) INT24=24 INTDYS=int((hr+0.00001)/INT24) diff --git a/model/ftn/ww3_prnc.ftn b/model/ftn/ww3_prnc.ftn index 2fa2d6ad7..6d2fb9d2e 100644 --- a/model/ftn/ww3_prnc.ftn +++ b/model/ftn/ww3_prnc.ftn @@ -7,7 +7,7 @@ !/ | M. Accensi | !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 04-Jan-2018 | +!/ | Last update : 21-Apr-2020 | !/ +-----------------------------------+ !/ !/ 01-Jan-2011 : Creation ( version 4.01 ) @@ -24,6 +24,8 @@ !/ 14-Oct-2015 : Add a check for latitude reversed ( version 5.11 ) !/ 20-Jan-2017 : Update to new W3GSRUMD APIs ( version 6.02 ) !/ 04-Jan-2018 : Add namelist feature ( version 6.04 ) +!/ 21-Apr-2020 : Correction in MPI for tide ( version 7.XX ) +!/ 21-Apr-2020 : Correction in scale factor ( version 7.XX ) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -188,7 +190,7 @@ USE W3GSRUMD USE W3ODATMD, ONLY: NDSE, NDST, NDSO, FNMPRE -!/TIDE USE W3TIDEMD + USE W3TIDEMD USE W3TIMEMD USE W3NMLPRNCMD USE NETCDF @@ -204,51 +206,45 @@ TYPE(NML_FILE_T) :: NML_FILE TYPE(T_GSU) :: GSI ! - INTEGER :: NTI, NDSEN, IND - INTEGER :: NIDIMS, NFIELDS - INTEGER :: JPC - INTEGER :: IX, IY, JX, NXLM - INTEGER :: NDSI, NDSM, NDSDAT, NDSTRC, NTRACE, & + INTEGER :: NTI, NDSEN, NIDIMS, NFIELDS, ICLO, & + NDSI, NDSM, NDSDAT, NDSTRC, NTRACE, & IERR, IFLD, ITYPE, J, NFCOMP, & - TIME(2), TIMESTART(2), TIMESTOP(2), & - TIMESHIFT(2), & - NXI, NYI, NXJ(2), NYJ(2), & - NDSLL, IDLALL, IDFMLL, NDSF(2), & - IDLAF(2), IDFMF(2), & + IX, IY, JX, NXI, NYI, NDAT, JJ, & + NDSLL, IDLALL, IDFMLL, NCID, IRET, & MXM, MYM, DATTYP, RECLDT, IDAT, & - NDAT, JJ, IS(4), JS(4) + NDIMSGRID, NDIMSVAR, VARIDTMP, & + NUMDIMS, I, ITIME INTEGER :: ILAND = -999 - INTEGER :: ICLO INTEGER :: GTYPEDUM = 0 - INTEGER :: NCID, IRET, & - NDIMSGRID, NDIMSVAR, VARIDTMP, VARIDF(50) - INTEGER :: NUMDIMS - INTEGER :: DIMSVAR(4) - INTEGER :: DIMLN(5) - INTEGER :: I,ITIME - INTEGER :: REFDATE(8),CURDATE(8),STARTDATE(8),STPDATE(8) -!/MPI INTEGER :: IERR_MPI + +! + INTEGER :: TIME(2), TIMESTART(2), TIMESTOP(2), & + TIMESHIFT(2), NXJ(2), NYJ(2), & + NDSF(2), IDLAF(2), IDFMF(2), & + IS(4), JS(4), VARIDF(50), DIMSVAR(4),& + DIMLN(5), REFDATE(8),CURDATE(8), & + STARTDATE(8),STPDATE(8) +!/MPI INTEGER :: IERR_MPI, IND, REST, SLICE !/O15 INTEGER :: NDSTIME !/S INTEGER, SAVE :: IENT = 0 !/T2 INTEGER :: IXP0, IXPN, IXPWDT = 60 !/T3 INTEGER :: IX0, IXN, IXWDT = 60 ! - INTEGER, ALLOCATABLE :: NXL(:) INTEGER, ALLOCATABLE :: IX21(:,:), IX22(:,:), & IY21(:,:), IY22(:,:), & JX21(:,:), JX22(:,:), & - JY21(:,:), JY22(:,:), MAPOVR(:,:) - INTEGER, ALLOCATABLE :: MASK(:,:) + JY21(:,:), JY22(:,:), & + MAPOVR(:,:), MASK(:,:), & + NELEM(:), CUMUL(:) !/T3 INTEGER, ALLOCATABLE :: MAPOUT(:,:) ! - - - REAL :: X0I, XNI, Y0I, YNI, SXI, SYI, & - X, Y, FACTOR, EFAC, NODATA, RW(4) + X, Y, FACTOR, EFAC, NODATA, & + XCFAC, XCOFF, YCFAC, YCOFF, & + FILLVALUE, TIMEDELAY REAL :: ACC = 0.05 - REAL :: XCFAC, XCOFF, YCFAC, YCOFF - REAL :: FILLVALUE, TIMEDELAY +! + REAL :: SCFAC(2), ADDOFF(2), RW(4) ! REAL, ALLOCATABLE :: RD11(:,:), RD21(:,:), & RD12(:,:), RD22(:,:), & @@ -285,33 +281,29 @@ ! ! Variables used in tidal analysis ! - INTEGER :: TIDESIZ, K, L - INTEGER :: TIDALSTUFF - INTEGER :: TIDEFLAG + INTEGER :: K, L, TIDEFLAG, & + TIDE_NDEF, TIDE_ITREND !/MPI INTEGER :: STAT_MPI(MPI_STATUS_SIZE) -!/TIDE INTEGER :: TIDE_NDEF, TIDE_ITREND -!/TIDET INTEGER, PARAMETER :: LRB = 4 -!/TIDET INTEGER(KIND=8) :: RPOS -!/TIDET INTEGER :: LRECL, NREC +!/T INTEGER, PARAMETER :: LRB = 4 +!/T INTEGER(KIND=8) :: RPOS +!/T INTEGER :: LRECL, NREC ! -!/TIDE INTEGER, ALLOCATABLE :: IMAX(:) + INTEGER, ALLOCATABLE :: IMAX(:) ! -!/TIDE REAL :: TIDE_LAT + REAL :: TIDE_LAT ! - REAL, ALLOCATABLE :: TIDALSTUFFA(:) - REAL, ALLOCATABLE :: TIDE_DATA_ALL(:,:,:) -!/TIDE REAL, ALLOCATABLE :: SSQ(:), RES(:) -!/TIDET REAL(KIND=LRB), ALLOCATABLE :: NULLBUFF(:) + REAL, ALLOCATABLE :: TIDE_DATA_ALL(:,:,:), & + SSQ(:), RES(:) +!/MPI REAL, ALLOCATABLE :: TIDE1DL(:), TIDE1D(:) +!/T REAL(KIND=LRB), ALLOCATABLE :: NULLBUFF(:) ! - DOUBLE PRECISION, ALLOCATABLE :: ALLTIMES(:) -!/TIDE DOUBLE PRECISION, ALLOCATABLE :: SDEV0(:), SDEV(:), RMSR(:), & -!/TIDE RMSR0(:), RMSRP(:), RESMAX(:) + DOUBLE PRECISION, ALLOCATABLE :: ALLTIMES(:), & + SDEV0(:), SDEV(:), RMSR(:), & + RMSR0(:), RMSRP(:), RESMAX(:) ! - CHARACTER*1024 :: TIDECONSTNAMES + CHARACTER*256 :: TIDECONSTNAMES CHARACTER*100 :: LIST(70) -!/TIDET CHARACTER*21 :: FNAMETXT -! - LOGICAL :: TIDESWITCH, DISTSWITCH +!/T CHARACTER*21 :: FNAMETXT ! EQUIVALENCE ( NXI , NXJ(1) ) , ( NYI , NYJ(1) ) !/ @@ -810,7 +802,7 @@ ! -! ... type 1: "As Is" (AI) +! ... type 1 or 6 : "As Is" (AI) or "As Is with tide" (AT) ! IF (ITYPE.EQ.1.OR.ITYPE.EQ.6) THEN ! @@ -835,7 +827,7 @@ IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,2933) RW(1),RW(2),RW(3),RW(4) END IF ! -! ... type 2 +! ... type 2 : "Lat/Lon" (LL) ! ELSE IF (ITYPE.EQ.2) THEN ! @@ -861,7 +853,7 @@ FACTOR*Y0I, FACTOR*YNI END IF ! -! ... type 5 +! ... type 5 : "Data" (DAT) ! ELSE IF (ITYPE.EQ.5) THEN CALL NEXTLN ( COMSTR , NDSI , NDSE ) @@ -974,14 +966,14 @@ IF (IX21(IX,1).LE.1 .AND. RW(1).LT.ACC) THEN IF (RW(1).LT.0.) THEN RW(1) = 0. - WRITE (NDSO,1043) X + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,1043) X !/T FLMOD = .TRUE. END IF END IF ! IF (IX21(IX,1).GE.(NXI-1) .AND. RW(1).GT.1.-ACC) THEN IF (RW(1).GT.1.) THEN - WRITE (NDSO,1043) X + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,1043) X RW(1) = 1. !/T FLMOD = .TRUE. END IF @@ -989,7 +981,7 @@ ! IF (IY21(IX,1).LE.1 .AND. RW(2).LT.ACC) THEN IF (RW(2).LT.0.) THEN - WRITE (NDSO,1044) Y + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,1044) Y RW(2) = 0. !/T FLMOD = .TRUE. END IF @@ -997,7 +989,7 @@ ! IF (IY21(IX,1).GE.NYI .AND. RW(2).GT.1.-ACC) THEN IF (RW(2).GT.1) THEN - WRITE (NDSO,1044) Y + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,1044) Y RW(2) = 1. !/T FLMOD = .TRUE. END IF @@ -1011,6 +1003,7 @@ RD21(IX,1) = EFAC * RW(1) * (1.-RW(2)) RD12(IX,1) = EFAC * (1.-RW(1)) * RW(2) RD22(IX,1) = EFAC * RW(1) * RW(2) + END DO ! IX=1, NX END IF ! GTYPE .NE. UNGTYPE ! @@ -1247,33 +1240,41 @@ ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,971) J = LEN_TRIM(FNMPRE) + + ! define tidal constituents for analysis + IF (ITYPE.EQ.6) THEN + CALL VUF_SET_PARAMETERS + TIDE_NDEF = NFIELDS + IF (TRIM(LIST(1)).EQ.'ALL') THEN + WRITE(NDSE,'(A)') 'Tidal constituent ALL not available anymore' + CALL EXTCDE(29) + END IF + CALL TIDE_FIND_INDICES_ANALYSIS(LIST) + END IF + + ! Create output binary file IF ( ITYPE .LE. 4 .OR. ITYPE.EQ.6 ) THEN -!/TIDE IF (ITYPE.EQ.6) THEN -!/TIDE CALL VUF_SET_PARAMETERS -!/TIDE TIDE_NDEF = NFIELDS -!/TIDE CALL TIDE_FIND_INDICES_ANALYSIS(LIST) -!/TIDE END IF - IF ( IAPROC .EQ. NAPOUT ) & - CALL W3FLDO ( 'WRITE', IDFLD, NDSDAT, NDST, NDSE, & - NX, NY, GTYPE, IERR, FPRE=FNMPRE(:J), & - FHDR=FLHDR, TIDEFLAGIN=TIDEFLAG) + IF ( IAPROC .EQ. NAPOUT ) & + CALL W3FLDO ( 'WRITE', IDFLD, NDSDAT, NDST, NDSE, & + NX, NY, GTYPE, IERR, FPRE=FNMPRE(:J), & + FHDR=FLHDR, TIDEFLAGIN=TIDEFLAG) ELSE IF ( IAPROC .EQ. NAPOUT ) & CALL W3FLDO ( 'WRITE', IDFLD, NDSDAT, NDST, NDSE, & RECLDT, 0, GTYPEDUM, IERR, FPRE=FNMPRE(:J) ) END IF -!/TIDET IF (TIDEFLAG.GT.0) THEN -!/TIDET LRECL = TIDE_MF*LRB*NFIELDS*2 -!/TIDET NREC = LRECL / LRB -!/TIDET ALLOCATE(NULLBUFF(NREC)) -!/TIDET NULLBUFF(1:NREC) = 0. - -!/TIDET OPEN (990,FILE='tidana.dat',FORM='UNFORMATTED', & -!/TIDET ACCESS='STREAM') -!/TIDET FNAMETXT = 'tidanaNNN.txt' -!/TIDET WRITE (FNAMETXT(7:9),'(I3.3)') IAPROC -!/TIDET OPEN (989,FILE=FNAMETXT,status='unknown') -!/TIDET ENDIF + +!/T IF (TIDEFLAG.GT.0) THEN +!/T LRECL = TIDE_MF*LRB*NFIELDS*2 +!/T NREC = LRECL / LRB +!/T ALLOCATE(NULLBUFF(NREC)) +!/T NULLBUFF(1:NREC) = 0. +!/T OPEN (990,FILE='tidana.dat',FORM='UNFORMATTED', ACCESS='STREAM') +!/T FNAMETXT = 'tidanaNNN.txt' +!/T WRITE (FNAMETXT(7:9),'(I3.3)') IAPROC +!/T OPEN (989,FILE=FNAMETXT,status='unknown') +!/T ENDIF + ! ! 7.c Initialize fields ! @@ -1293,12 +1294,15 @@ AC = 0. END IF ! -! For ITYPE.LE.5 time steps are read one by one. -! Otherwise points are read one by one for tidal analysis +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! +! Dedicated section to ITYPE.EQ.6 ! - TIDESWITCH=.FALSE. -!/TIDE TIDESWITCH=.TRUE. - IF (ITYPE.GE.6.AND.TIDESWITCH) THEN +! points are read one by one for tidal analysis +! For other ITYPE, time steps are read one by one. +! + + IF (ITYPE.GE.6.AND.TIDEFLAG.GT.0) THEN ! ! Reads in the full time vector ! @@ -1321,253 +1325,243 @@ IRET=NF90_GET_VAR(NCID,VARIDTMP,ALLTIMES,start=(/1/)) CALL CHECK_ERR(IRET) IF (INDEX(TIMEUNITS, "seconds").NE.0) ALLTIMES=ALLTIMES/86400. - IF (INDEX(TIMEUNITS, "minutes").NE.0) ALLTIMES=ALLTIMES/3600. + IF (INDEX(TIMEUNITS, "minutes").NE.0) ALLTIMES=ALLTIMES/1440. IF (INDEX(TIMEUNITS, "hours").NE.0) ALLTIMES=ALLTIMES/24. ALLTIMES=REFJULDAY+ALLTIMES ! ! Performs tidal analysis ! -!/TIDE TIDE_NTI = NTI -!/TIDE TIDE_NDEF = NFIELDS -!/TIDE ALLOCATE(SDEV0(TIDE_NDEF),SDEV(TIDE_NDEF), RMSR(TIDE_NDEF), & -!/TIDE RES(TIDE_NDEF), SSQ(TIDE_NDEF),RMSR0(TIDE_NDEF), & -!/TIDE RMSRP(TIDE_NDEF), IMAX(TIDE_NDEF), RESMAX(TIDE_NDEF)) - -!/TIDE ALLOCATE( TIDE_DATA(TIDE_NTI,TIDE_NDEF) ) -!/TIDE ALLOCATE( TIDE_DAYS(TIDE_NTI), TIDE_SECS(TIDE_NTI), TIDE_HOURS(TIDE_NTI) ) -!/TIDE ALLOCATE(V_ARG(170,TIDE_NTI),F_ARG(170,TIDE_NTI),U_ARG(170,TIDE_NTI)) -!/TIDE TIDE_NX=NX -!/TIDE TIDE_NY=NY -!/TIDE ALLOCATE(TIDAL_CONST(NX,NY,TIDE_MF,2,2)) -!/TIDE TIDAL_CONST(:,:,:,:,:)=0. -!/TIDE DO I=1,NFIELDS -!/TIDE IRET=NF90_INQ_VARID(NCID,FIELDSNAME(I),VARIDF(I)) -!/TIDE END DO -!/TIDE IRET=NF90_GET_ATT(NCID,VARIDTMP,"_FillValue", FILLVALUE) - -!/TIDE IRET = NF90_INQUIRE_ATTRIBUTE(NCID,VARIDF(1),'scale_factor') -!/TIDE IF ( IRET .EQ. NF90_NOERR ) THEN -!/TIDE IRET = NF90_GET_ATT(NCID,VARIDF(1),'scale_factor',XCFAC) -!/TIDE ENDIF -!/TIDE IRET = NF90_INQUIRE_ATTRIBUTE(NCID,VARIDF(1),'add_offset') -!/TIDE IF ( IRET .EQ. NF90_NOERR) THEN -!/TIDE IRET = NF90_GET_ATT(NCID,VARIDF(1),'add_offset',XCOFF) -!/TIDE END IF -!/TIDE IF ( NFCOMP.EQ.2 .OR. IFLD.GE.3 .OR. FLBERG ) THEN -!/TIDE IRET = NF90_INQUIRE_ATTRIBUTE(NCID,VARIDF(2),'scale_factor') -!/TIDE IF (IRET .EQ. NF90_NOERR) THEN -!/TIDE IRET = NF90_GET_ATT(NCID,VARIDF(2),'scale_factor',YCFAC) -!/TIDE ENDIF -!/TIDE IRET = NF90_INQUIRE_ATTRIBUTE(NCID,VARIDF(2),'add_offset') -!/TIDE IF (IRET .EQ. NF90_NOERR) THEN -!/TIDE IRET = NF90_GET_ATT(NCID,VARIDF(2),'add_offset',YCOFF) -!/TIDE END IF -!/TIDE END IF - -! -! Loop on grid points: reads all points for same IY to limit I/O time -! this may require too much memory -! Modified on 12-Feb-2013: now reads one block from IX to IX+NXLM-1 -! NSEAL = 1 + (NSEA-IAPROC)/NAPROC - ALLOCATE(NXL(NAPROC)) - DO JPC=1,NAPROC - NXL(JPC) = 1 + (NX-JPC)/NAPROC + TIDE_NTI = NTI + TIDE_NDEF = NFIELDS + ALLOCATE(SDEV0(TIDE_NDEF),SDEV(TIDE_NDEF), RMSR(TIDE_NDEF), & + RES(TIDE_NDEF), SSQ(TIDE_NDEF),RMSR0(TIDE_NDEF), & + RMSRP(TIDE_NDEF), IMAX(TIDE_NDEF), RESMAX(TIDE_NDEF)) + + ALLOCATE( TIDE_DATA(TIDE_NTI,TIDE_NDEF) ) + ALLOCATE( TIDE_DAYS(TIDE_NTI), TIDE_SECS(TIDE_NTI), TIDE_HOURS(TIDE_NTI) ) + ALLOCATE(V_ARG(170,TIDE_NTI),F_ARG(170,TIDE_NTI),U_ARG(170,TIDE_NTI)) + TIDE_NX=NX + TIDE_NY=NY + ALLOCATE(TIDAL_CONST(NX,NY,TIDE_MF,2,2)) + TIDAL_CONST(:,:,:,:,:)=0. + DO I=1,NFIELDS + IRET=NF90_INQ_VARID(NCID,FIELDSNAME(I),VARIDF(I)) END DO - NXLM=NXL(1) ! this is the max value of NXL - NXL(1:NAPROC-1) = NXLM - NXL(NAPROC)=NX-(NAPROC-1)*NXLM + IRET=NF90_GET_ATT(NCID,VARIDTMP,"_FillValue", FILLVALUE) + + IRET = NF90_GET_ATT(NCID,VARIDF(1),'scale_factor',SCFAC(1)) + IF (IRET .NE. 0) SCFAC(1) = 1.0 + IRET = NF90_GET_ATT(NCID,VARIDF(1),'add_offset',ADDOFF(1)) + IF (IRET .NE. 0) ADDOFF(1) = 0.0 + IF ( NFCOMP.EQ.2 .OR. IFLD.GE.3 .OR. FLBERG ) THEN + IRET = NF90_GET_ATT(NCID,VARIDF(2),'scale_factor',SCFAC(2)) + IF (IRET .NE. 0) SCFAC(2) = 1.0 + IRET = NF90_GET_ATT(NCID,VARIDF(2),'add_offset',ADDOFF(1)) + IF (IRET .NE. 0) ADDOFF(1) = 0.0 + END IF + + +! +! Set arrays for MPI exchanges +! + IF (NX .LT. NAPROC) THEN + WRITE(NDSE,*) 'NUMBER OF NX POINTS LESS THAN NUMBER OF PROC' + CALL EXTCDE (30) + END IF + +!/MPI SLICE=NX/NAPROC +!/MPI REST=MOD(NX,NAPROC) +!/MPI IF(REST.GE.IAPROC) SLICE=SLICE+1 + +!/MPI ! set total 1D array (nx) +!/MPI ALLOCATE (TIDE1D(NX * TIDE_MF * NFIELDS * 2)) +!/MPI TIDE1D(:)=0. + +!/MPI ! set local 1D array (slice) +!/MPI ALLOCATE(TIDE1DL(SLICE * TIDE_MF * NFIELDS * 2)) +!/MPI TIDE1DL(:)=0. + + ! set arrays for number of elements per MPI proc + ALLOCATE(CUMUL(NAPROC)) + ALLOCATE(NELEM(NAPROC)) + CUMUL(1) = 0 + NELEM(1) = NX / NAPROC +!/MPI IF (REST .GT. 0) NELEM(1) = NELEM(1) + 1 +!/MPI DO I=2,NAPROC +!/MPI CUMUL(I)=CUMUL(I-1)+NELEM(I-1) +!/MPI NELEM(I) = NX / NAPROC +!/MPI IF (REST .GT. I-1) NELEM(I) = NELEM(I) + 1 +!/MPI END DO + +!/MPIT WRITE(100+IAPROC,*) "Number of points for this processor ", IAPROC, " : ", NELEM(IAPROC), ' / ', NX +!/MPIT WRITE(100+IAPROC,*) "Cumul of points for this processor ", IAPROC, " : ", CUMUL(IAPROC), ' / ', NX + + ALLOCATE(TIDE_DATA_ALL(NELEM(IAPROC),NTI,NFIELDS)) + + - ALLOCATE(TIDE_DATA_ALL(NXL(IAPROC),NTI,NFIELDS)) - WRITE(NDSE,*) "Number of points for this processor :", IAPROC,NXL(IAPROC) - DISTSWITCH = .FALSE. -!/DIST DISTSWITCH = .TRUE. -!/TIDE IF (DISTSWITCH) THEN -!/TIDE TIDESIZ = MAXVAL(NXL) * TIDE_MF * NFIELDS * 2 -!/MPI!/TIDE CALL MPI_TYPE_VECTOR ( TIDESIZ, 1, 1, MPI_REAL, TIDALSTUFF, IERR_MPI ) -!/MPI!/TIDE CALL MPI_TYPE_COMMIT ( TIDALSTUFF, IERR_MPI ) -!/TIDE ALLOCATE(TIDALSTUFFA(TIDESIZ)) -!/TIDE TIDALSTUFFA(:)=0. -!/TIDE END IF ! ! Loops on Y dimension ! DO IY=1,NY - IND=0 +!/MPI IND=0 ! -! big data read split in small data read ... IF (NDIMSGRID.EQ.1) THEN - DO I=1,NFIELDS - IRET=NF90_GET_VAR(NCID,VARIDF(I),TIDE_DATA_ALL(:,:,I), & - start=(/1+(IAPROC-1)*NXLM,1/),count=(/NXL(IAPROC),NTI/)) - CALL CHECK_ERR(IRET) - if (i.eq.1) TIDE_DATA_ALL(:,:,I)=TIDE_DATA_ALL(:,:,I)*XCFAC+XCOFF - if (i.eq.2) TIDE_DATA_ALL(:,:,I)=TIDE_DATA_ALL(:,:,I)*YCFAC+YCOFF - END DO - ELSE DO I=1,NFIELDS IRET=NF90_GET_VAR(NCID,VARIDF(I),TIDE_DATA_ALL(:,:,I), & - start=(/1+(IAPROC-1)*NXLM,IY,1/),count=(/NXL(IAPROC),1,NTI/)) + start=(/CUMUL(IAPROC)+1,1/),count=(/NELEM(IAPROC),NTI/)) CALL CHECK_ERR(IRET) - if (i.eq.1) TIDE_DATA_ALL(:,:,I)=TIDE_DATA_ALL(:,:,I)*XCFAC+XCOFF - if (i.eq.2) TIDE_DATA_ALL(:,:,I)=TIDE_DATA_ALL(:,:,I)*YCFAC+YCOFF + WHERE (TIDE_DATA_ALL(:,:,I).NE.FILLVALUE) TIDE_DATA_ALL(:,:,I)=TIDE_DATA_ALL(:,:,I)*SCFAC(I)+ADDOFF(I) + END DO + ELSE IF (NDIMSGRID.EQ.2) THEN + IF (NDIMSVAR.EQ.3) THEN + DO I=1,NFIELDS + IRET=NF90_GET_VAR(NCID,VARIDF(I),TIDE_DATA_ALL(:,:,I), & + start=(/CUMUL(IAPROC)+1,IY,1/),count=(/NELEM(IAPROC),1,NTI/)) + CALL CHECK_ERR(IRET) + WHERE (TIDE_DATA_ALL(:,:,I).NE.FILLVALUE) TIDE_DATA_ALL(:,:,I)=TIDE_DATA_ALL(:,:,I)*SCFAC(I)+ADDOFF(I) END DO - END IF + ELSE IF (NDIMSVAR.EQ.4) THEN + DO I=1,NFIELDS + IRET=NF90_GET_VAR(NCID,VARIDF(I),TIDE_DATA_ALL(:,:,I), & + start=(/CUMUL(IAPROC)+1,IY,1,1/),count=(/NELEM(IAPROC),1,1,NTI/)) + CALL CHECK_ERR(IRET) + WHERE (TIDE_DATA_ALL(:,:,I).NE.FILLVALUE) TIDE_DATA_ALL(:,:,I)=TIDE_DATA_ALL(:,:,I)*SCFAC(I)+ADDOFF(I) + END DO + END IF ! NDIMSVAR + END IF ! NDIMSGRID + + ! - DO JX=1,NXL(IAPROC) ! This loop is parallelized with MPI -!/DIST IX = JX + (IAPROC-1)*NXLM ! IAPROC + (JX-1)*NAPROC -!/SHRD IX = JX + DO JX=1,NELEM(IAPROC) +!/MPI IX=CUMUL(IAPROC)+JX +!/SHRD IX=JX + ! -!/TIDE TIDE_NTI=0 -!/TIDE DO I=1,NTI + TIDE_NTI=0 + DO I=1,NTI ! ! Defines usable timesteps ... criteria could be improved ! remove the times when the point IX,IY is dry ... ! and redefine TIDE_NTI based on wet times only ! -!/TIDE IF (TIDE_DATA_ALL(JX,I,1).NE.FILLVALUE & -!/TIDE .AND.TIDE_DATA_ALL(JX,I,NFIELDS).NE.FILLVALUE & -!/TIDE .AND.TIDE_DATA_ALL(JX,I,1).NE.0.0) THEN -!/TIDE TIDE_NTI=TIDE_NTI+1 -!/TIDE TIDE_DATA(TIDE_NTI,:)=TIDE_DATA_ALL(JX,I,:) -!/TIDE TIDE_DAYS(TIDE_NTI)=INT(ALLTIMES(I)) -!/TIDE TIDE_SECS(TIDE_NTI)=(ALLTIMES(I)-TIDE_DAYS(TIDE_NTI))*86400 -!/TIDE END IF -!/TIDE END DO -! -!/TIDE TIDE_HOURS(1:TIDE_NTI)=24.d0*dfloat(TIDE_DAYS(1:TIDE_NTI)) & -!/TIDE +dfloat(TIDE_SECS(1:TIDE_NTI))/3600.d0 -! -!/TIDE IF (TIDE_NTI.GT.(TIDE_MF*3)) THEN -!/TIDE TIDE_LAT= YGRD(IY,IX) -!/TIDE IF (ABS(TIDE_LAT).LT.5.) TIDE_LAT=SIGN(5.,TIDE_LAT) -!/TIDE DO I=1,TIDE_NTI -!/TIDE CALL SETVUF(TIDE_HOURS(I),TIDE_LAT,I) -!/TIDE END DO -!/TIDE CALL flex_tidana_webpage(IX,IY,XGRD(IY,IX),TIDE_LAT,TIDE_DAYS(1),TIDE_DAYS(TIDE_NTI), & -!/TIDE TIDE_NDEF, TIDE_ITREND, RES, SSQ, RMSR0, & -!/TIDE SDEV0, RMSR, RESMAX, IMAX, 0) - -!/TIDE TIDAL_CONST(IX,IY,1:TIDE_MF,1:NFIELDS,1)=TIDE_AMPC(1:TIDE_MF,1:NFIELDS) -!/TIDE TIDAL_CONST(IX,IY,1:TIDE_MF,1:NFIELDS,2)=TIDE_PHG(1:TIDE_MF,1:NFIELDS) -!/TIDET WRITE (989,'(2I10,X,176F10.3)'),IX,TIDE_NTI,TIDE_AMPC(1:TIDE_MF,1:NFIELDS) !,TIDE_PHG(1:TIDE_MF,1:NFIELDS) -!/TIDET WRITE (989,'(2I10,X,176F10.3)'),IX,TIDE_NTI,TIDE_PHG(1:TIDE_MF,1:NFIELDS) -!/TIDET RPOS = 1_8 + LRECL*(IX-1_8) -!/TIDET WRITE (990,POS=RPOS),NULLBUFF(1:NREC) -!/TIDET WRITE (990,POS=RPOS),TIDE_AMPC(1:TIDE_MF,1:NFIELDS),TIDE_PHG(1:TIDE_MF,1:NFIELDS) -! -! Only keeps constituents with high enough SNR ? (T-TEST > 2 : not a very good test ...) -! -! DO J=1,TIDE_MF -! DO I=1,NFIELDS -! WRITE(990+IAPROC,*) IX,IY,J,I,TIDE_TTEST(J,I),TIDE_AMPC(J,I),TIDE_PHG(J,I) -! IF (TIDE_TTEST(J,I).GT.1.) THEN -! TIDAL_CONST(IX,IY,J,I,1)=TIDE_AMPC(J,I) -! TIDAL_CONST(IX,IY,J,I,2)=TIDE_PHG(J,I) -! END IF -! END DO -! END DO - -! Fills 1-D array for MPI communication - IF (DISTSWITCH) THEN -!/TIDE DO J=1,TIDE_MF -!/TIDE DO K=1,NFIELDS -!/TIDE DO L=1,2 -!/TIDE IND=IND+1 -!/TIDE TIDALSTUFFA(IND)=TIDAL_CONST(IX,IY,J,K,L) -!/TIDE END DO -!/TIDE END DO -!/TIDE END DO -!/TIDE IF (IAPROC.EQ.NAPOUT) WRITE(6,'(A,I6,A,I6,A,I6)') 'IY, JX = ', & -!/TIDE IY,',',JX, ' out of ', NXL(IAPROC) + IF (TIDE_DATA_ALL(JX,I,1).NE.FILLVALUE & + .AND.TIDE_DATA_ALL(JX,I,NFIELDS).NE.FILLVALUE & + .AND.TIDE_DATA_ALL(JX,I,1).NE.0.0) THEN + TIDE_NTI=TIDE_NTI+1 + TIDE_DATA(TIDE_NTI,:)=TIDE_DATA_ALL(JX,I,:) + TIDE_DAYS(TIDE_NTI)=INT(ALLTIMES(I)) + TIDE_SECS(TIDE_NTI)=(ALLTIMES(I)-TIDE_DAYS(TIDE_NTI))*86400 END IF -!/TIDE ELSE -!/TIDE WRITE(NDSE,*) 'WARNING NOT ENOUGH DATA AT POINT:',IX,IY, & -!/TIDE NTI, TIDE_NTI -!/TIDE TIDAL_CONST(IX,IY,1:TIDE_MF,1:NFIELDS,1)=0. -!/TIDE TIDAL_CONST(IX,IY,1:TIDE_MF,1:NFIELDS,2)=0. -!/TIDE IND=IND+TIDE_MF*NFIELDS*2 -!/TIDE END IF ! end of test on TIDE_NTI -!/TIDET DO J=1,TIDE_MF -!/TIDET DO K=1,NFIELDS -!/TIDET DO L=1,2 -!/TIDET WRITE(990+IAPROC,'(6I5,F10.4)') IAPROC,NAPOUT,IX,J,K,L,TIDAL_CONST(IX,1,J,K,L) -!/TIDET END DO -!/TIDET END DO -!/TIDET END DO - - END DO ! JX=1,NXL - End of parallization -!/TIDET CLOSE(990+IAPROC) - -! -! We need to send and receive the bits of TIDAL_CONST(:,IY,:,:,:) -! -!/TIDE IF (DISTSWITCH) THEN -!/TIDE IF (IAPROC.NE.NAPOUT) THEN -!/DIST!/TIDE CALL MPI_SEND ( TIDALSTUFFA, 1, TIDALSTUFF, NAPOUT-1, 0, & -!/DIST!/TIDE MPI_COMM_WORLD, IERR_MPI ) -!/TIDE ELSE -!/TIDET DO JX=1,NXL(IAPROC) -!/TIDET IX = JX + (IAPROC-1)*NXLM ! IAPROC + (JX-1)*NAPROC -!/TIDET DO J=1,TIDE_MF -!/TIDET DO K=1,NFIELDS -!/TIDET DO L=1,2 -!/TIDET WRITE(987,'(6I5,F10.4)') IAPROC,IAPROC,IX,J,K,L,TIDAL_CONST(IX,1,J,K,L) -!/TIDET END DO -!/TIDET END DO -!/TIDET END DO -!/TIDET END DO ! JX=1,NXL -!/TIDE DO JPC=1,NAPROC -!/TIDE IF (JPC .NE. NAPOUT ) THEN -!/DIST!/TIDE CALL MPI_RECV ( TIDALSTUFFA, 1, TIDALSTUFF, JPC-1, MPI_ANY_TAG, & -!/DIST!/TIDE MPI_COMM_WORLD, STAT_MPI, IERR_MPI ) -!/TIDE ! Now unpacks the 1-D array -!/TIDE IND=0 -!/TIDE DO JX=1,NXL(JPC) -!/TIDE IX = JX + (JPC-1)*NXLM ! JPC + (JX-1)*NAPROC -!/TIDE! -!/TIDE DO J=1,TIDE_MF -!/TIDE DO K=1,NFIELDS -!/TIDE DO L=1,2 -!/TIDE IND=IND+1 -!/TIDE TIDAL_CONST(IX,IY,J,K,L)=TIDALSTUFFA(IND) -!/TIDE END DO -!/TIDE END DO -!/TIDE END DO -!/TIDE END DO ! JX=1,NXL -!/TIDE END IF ! JPC .NE. NAPOUT -!/TIDE END DO ! JPC=0,NAPROC-1 -!/TIDET WRITE(NDSE,*) "IY = ", IY, "on ", NY -!/TIDE END IF -!/TIDE END IF + END DO ! NTI +! + TIDE_HOURS(1:TIDE_NTI)=24.d0*dfloat(TIDE_DAYS(1:TIDE_NTI)) & + +dfloat(TIDE_SECS(1:TIDE_NTI))/3600.d0 + +! +! Compute amplitude and phase +! + IF (TIDE_NTI.GT.(TIDE_MF*3)) THEN + TIDE_LAT= YGRD(IY,IX) + IF (ABS(TIDE_LAT).LT.5.) TIDE_LAT=SIGN(5.,TIDE_LAT) + DO I=1,TIDE_NTI + CALL SETVUF(TIDE_HOURS(I),TIDE_LAT,I) + END DO + TIDE_ITREND=0 + CALL flex_tidana_webpage(IX,IY,XGRD(IY,IX),TIDE_LAT,TIDE_DAYS(1),TIDE_DAYS(TIDE_NTI), & + TIDE_NDEF, TIDE_ITREND, RES, SSQ, RMSR0, & + SDEV0, RMSR, RESMAX, IMAX, 0) + +!/T WRITE (989,'(2I10,X,176F10.3)'),IX,TIDE_NTI,TIDE_AMPC(1:TIDE_MF,1:NFIELDS) +!/T WRITE (989,'(2I10,X,176F10.3)'),IX,TIDE_NTI,TIDE_PHG(1:TIDE_MF,1:NFIELDS) +!/T RPOS = 1_8 + LRECL*(IX-1_8) +!/T WRITE (990,POS=RPOS),NULLBUFF(1:NREC) +!/T WRITE (990,POS=RPOS),TIDE_AMPC(1:TIDE_MF,1:NFIELDS),TIDE_PHG(1:TIDE_MF,1:NFIELDS) + + ELSE ! TIDE_NTI.GT.(TIDE_MF*3) + WRITE(NDSE,*) 'WARNING NOT ENOUGH DATA AT POINT:',IX,IY, NTI, TIDE_NTI + TIDE_AMPC(1:TIDE_MF,1:NFIELDS)=0. + TIDE_PHG(1:TIDE_MF,1:NFIELDS)=0. + END IF ! end of test on TIDE_NTI + + +! +! Save tidal amplitude and phase +! + +!/MPI IF (IAPROC.EQ.NAPOUT) WRITE(NDSO,'(A,I6,A,I6,A,I6)') 'IY, JX = ', & +!/MPI IY,',',JX, ' out of ', NELEM(IAPROC) +!/MPI DO J=1,TIDE_MF +!/MPI DO K=1,NFIELDS +!/MPI IND=IND+1 +!/MPI TIDE1DL(IND)=TIDE_AMPC(J,K) +!/MPI IND=IND+1 +!/MPI TIDE1DL(IND)=TIDE_PHG(J,K) +!/MPI END DO +!/MPI END DO + +!/SHRD TIDAL_CONST(IX,IY,1:TIDE_MF,1:NFIELDS,1)=TIDE_AMPC(1:TIDE_MF,1:NFIELDS) +!/SHRD TIDAL_CONST(IX,IY,1:TIDE_MF,1:NFIELDS,2)=TIDE_PHG(1:TIDE_MF,1:NFIELDS) + + END DO ! JX=1,NELEM(IAPROC) + +! +! Gather from other MPI tasks +! + +!/MPI IF (NAPROC.GT.1) THEN +!/MPI CALL MPI_GATHERV(TIDE1DL, SLICE * TIDE_MF * NFIELDS * 2, MPI_REAL, & +!/MPI TIDE1D, NELEM * TIDE_MF * NFIELDS * 2, CUMUL * TIDE_MF * NFIELDS * 2, & +!/MPI MPI_REAL, NAPOUT-1, MPI_COMM_WORLD, IERR_MPI) +!/MPI ELSE +!/MPI TIDE1D = TIDE1DL +!/MPI END IF + +! +! Convert from 1D to 2D array +! +!/MPI IF (IAPROC .EQ. NAPOUT) THEN +!/MPI IND=0 +!/MPI DO IX=1,NX +!/MPI DO J=1,TIDE_MF +!/MPI DO K=1,NFIELDS +!/MPI DO L=1,2 +!/MPI IND=IND+1 +!/MPI TIDAL_CONST(IX,IY,J,K,L)=TIDE1D(IND) +!/MPI END DO +!/MPI END DO +!/MPI END DO +!/MPI END DO +!/MPI END IF + + END DO ! IY=1,NY -!/TIDET CLOSE (990) -!/TIDET CLOSE (989) -!/TIDET IF (IDFLD.EQ.'CUR') WRITE(986,'(F10.3,/)') TIDAL_CONST(:,1,15,1,1) -!/TIDET IF (IDFLD.EQ.'CUR') WRITE(986,'(F10.3,/)') TIDAL_CONST(:,1,15,1,1) - -!/TIDE IF (DISTSWITCH) THEN -!/DIST!/TIDE CALL MPI_TYPE_FREE(TIDALSTUFF, IERR_MPI) -!/TIDE DEALLOCATE(TIDALSTUFFA) -!/TIDE END IF - -!/MPI IF (IAPROC .EQ. NAPOUT ) THEN -!/MPI WRITE(NDSE,*) "parallelization done" -!/MPI ELSE -!/MPI GOTO 888 -!/MPI END IF -!/TIDE! -!/TIDE! After loop on points, write tidal constituents to file. -!/TIDE! -!/TIDE IF ( IAPROC .EQ. NAPOUT.AND.TIDEFLAG.GE.1) & -!/TIDE CALL W3FLDTIDE1 ( 'WRITE', NDSDAT, NDST, NDSE, NX, NY, IDFLD, IERR ) -!/TIDE CALL W3FLDTIDE2 ( 'WRITE', NDSDAT, NDST, NDSE, NX, NY, IDFLD, 0, IERR ) -!/TIDE! -!/TIDE GOTO 880 - END IF ! end of test IF (ITYPE.GE.6.AND.TIDESWITCH) + +!/T CLOSE (990) +!/T CLOSE (989) +!/T IF (IDFLD.EQ.'CUR') WRITE(986,'(F10.3,/)') TIDAL_CONST(:,1,15,1,1) +!/T IF (IDFLD.EQ.'CUR') WRITE(986,'(F10.3,/)') TIDAL_CONST(:,1,15,2,1) + +!/MPI IF (IAPROC .EQ. NAPOUT ) THEN +!/MPI WRITE(NDSO,*) "parallelization done" +!/MPI ELSE +!/MPI GOTO 888 +!/MPI END IF + +! +! After loop on points, write tidal constituents to file. +! + IF ( IAPROC .EQ. NAPOUT.AND.TIDEFLAG.GE.1) & + CALL W3FLDTIDE1 ( 'WRITE', NDSDAT, NDST, NDSE, NX, NY, IDFLD, IERR ) + CALL W3FLDTIDE2 ( 'WRITE', NDSDAT, NDST, NDSE, NX, NY, IDFLD, 0, IERR ) +! + GOTO 880 + + END IF ! end of test IF (ITYPE.GE.6.AND.TIDEFLAG.GT.0) ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1580,23 +1574,15 @@ YCOFF = 0.0 ! IF ( ITYPE .LE. 4 .OR. ITYPE.EQ.6 ) THEN - IRET = NF90_INQUIRE_ATTRIBUTE(NCID,VARIDF(1),'scale_factor') - IF ( IRET .EQ. NF90_NOERR ) THEN - IRET = NF90_GET_ATT(NCID,VARIDF(1),'scale_factor',XCFAC) - ENDIF - IRET = NF90_INQUIRE_ATTRIBUTE(NCID,VARIDF(1),'add_offset') - IF ( IRET .EQ. NF90_NOERR) THEN - IRET = NF90_GET_ATT(NCID,VARIDF(1),'add_offset',XCOFF) - END IF + IRET = NF90_GET_ATT(NCID,VARIDF(1),'scale_factor',XCFAC) + IF (IRET.NE.0 ) XCFAC = 1.0 + IRET = NF90_GET_ATT(NCID,VARIDF(1),'add_offset',XCOFF) + IF (IRET.NE.0 ) XCOFF = 0.0 IF ( NFCOMP.EQ.2 .OR. IFLD.GE.3 .OR. FLBERG ) THEN - IRET = NF90_INQUIRE_ATTRIBUTE(NCID,VARIDF(2),'scale_factor') - IF (IRET .EQ. NF90_NOERR) THEN - IRET = NF90_GET_ATT(NCID,VARIDF(2),'scale_factor',YCFAC) - ENDIF - IRET = NF90_INQUIRE_ATTRIBUTE(NCID,VARIDF(2),'add_offset') - IF (IRET .EQ. NF90_NOERR) THEN - IRET = NF90_GET_ATT(NCID,VARIDF(2),'add_offset',YCOFF) - END IF + IRET = NF90_GET_ATT(NCID,VARIDF(2),'scale_factor',YCFAC) + IF (IRET.NE.0 ) YCFAC = 1.0 + IRET = NF90_GET_ATT(NCID,VARIDF(2),'add_offset',YCOFF) + IF (IRET.NE.0 ) YCOFF = 0.0 END IF END IF ! @@ -1659,11 +1645,12 @@ IRET=NF90_GET_VAR(NCID,VARIDF(1),XC,start=(/1,1,1,ITIME/),count=(/MXM,MYM,1,1/)) END IF END IF - ! forces to 0 values that are undefined - WHERE(XC.NE.XC) XC = 0. - WHERE(XC.EQ.FILLVALUE) XC = 0. CALL CHECK_ERR(IRET) - XC = XC * XCFAC + XCOFF + ! forces to 0 values that are undefined + WHERE(XC.NE.XC) XC = FILLVALUE + WHERE (XC.NE.FILLVALUE) XC=XC*XCFAC+XCOFF + WHERE (XC.EQ.FILLVALUE) XC=0. + ! !/T2 WRITE (NDST,9060) 1 !/T2 IXP0 = 1 @@ -1693,10 +1680,10 @@ END IF END IF ! The following line forces to 0 values that are undefine - WHERE(YC.NE.YC) YC = 0. - WHERE(YC.EQ.FILLVALUE) YC = 0. CALL CHECK_ERR(IRET) - YC = YC * YCFAC + YCOFF + WHERE(YC.NE.YC) YC = FILLVALUE + WHERE (YC.NE.FILLVALUE) YC=YC*YCFAC+YCOFF + WHERE (YC.EQ.FILLVALUE) YC=0. ! !/T2 WRITE (NDST,9060) 2 !/T2 IXP0 = 1 @@ -1988,7 +1975,7 @@ END IF IF (IERR.NE.0) CALL EXTCDE ( 30 ) ! - END DO + END DO ! NTI ! DEALLOCATE(XC,YC,AC) IF (ASSOCIATED(ALA)) DEALLOCATE(ALA,ALO) @@ -1996,7 +1983,7 @@ ! End loop over input fields !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! -!/TIDE 880 CONTINUE + 880 CONTINUE GOTO 888 ! ! Error escape locations @@ -2187,6 +2174,11 @@ ' ILLEGAL SIZE OF INPUT GRID : ',I5,1X,I5/) 1038 FORMAT (/' *** WAVEWATCH III WARNING IN W3PRNC : '/ & ' DATA READ FROM INPUT FILE') + 1039 FORMAT (/' *** WAVEWATCH III WARNING IN W3PRNC : '/ & + ' NAN VALUES IN HARMONICS '/ & + ' REMOVE NON-LINEAR TIDAL COMPONENTS '/ & + ' 2MS2 2MN2 2NK2 MNS2 MSN2 2SM2 3MSN2 ' & + ' M4 MS4 MN4 M6 2MS6 2MN6'/) ! 1042 FORMAT (/' *** WAVEWATCH-III WARNING W3PRNC : '/ & ' GRID POINT ',2I6,2F7.2,/ & diff --git a/model/ftn/ww3_prtide.ftn b/model/ftn/ww3_prtide.ftn index ca0b97283..8d4aeb865 100644 --- a/model/ftn/ww3_prtide.ftn +++ b/model/ftn/ww3_prtide.ftn @@ -6,13 +6,15 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 06-Jun-2018 | +!/ | Last update : 21-Apr-2020 | !/ +-----------------------------------+ !/ !/ 29-Mar-2013 : Creation ( version 4.11 ) !/ 17-Oct-2013 : Manages missing data for UNST grids ( version 4.12 ) !/ 06-Jun-2018 : COMPUTE VNEIGH: calculate the number of connected !/ triangles for a given point ( version 6.04 ) +!/ 21-Apr-2020 : MPI implementation ( version 7.XX ) +!/ 21-Apr-2020 : bug fix for rectilinear grid ( version 7.XX ) !/ !/ Copyright 2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -32,7 +34,7 @@ ! ! Local parameters. ! ---------------------------------------------------------------- -! NDSI Int. Input unit number ("ww3_prep.inp"). +! NDSI Int. Input unit number ("ww3_prtide.inp"). ! NDSLL Int. Unit number(s) of long-lat file(s) ! NDSF I.A. Unit number(s) of input file(s). ! NDSDAT Int. Unit number for output data file. @@ -107,6 +109,7 @@ !/ ! USE W3GDATMD, ONLY: W3NMOD, W3SETG !/NL1 USE W3ADATMD,ONLY: W3NAUX, W3SETA + USE W3ODATMD, ONLY: IAPROC, NAPROC, NAPERR, NAPOUT USE W3ODATMD, ONLY: W3NOUT, W3SETO USE W3SERVMD, ONLY : ITRACE, NEXTLN, EXTCDE, STRSPLIT !/S USE W3SERVMD, ONLY : STRACE @@ -122,38 +125,58 @@ USE W3IDATMD ! IMPLICIT NONE +! +!/MPI INCLUDE "mpif.h" !/ !/ ------------------------------------------------------------------- / !/ Local parameters !/ - INTEGER :: NDSI, NDSF, NDSM, NDSDAT, NDSTRC, NTRACE, & - IERR, IFLD, ITYPE, I, JJ, J, IX, IY, NFCOMP, & - TIME(2), DTTST, JX, & - NXI, NYI, NXJ(2), NYJ(2), & - TIDE_START(2), PRTIDE_DT, TIDE_END(2) - INTEGER :: TIDE_PRMF, FLAGTIDE, TINDEX, & - TIDEOK, TIDE_MAX, TIDE_MAXI, INDMAX(70) + INTEGER :: NDSI, NDSF, NDSM, NDSDAT, NDSTRC, NTRACE + INTEGER :: IERR, IFLD, I, JJ, J, IX, IY + INTEGER :: DTTST, NDSEN, PRTIDE_DT + INTEGER :: TIDE_PRMF, FLAGTIDE, TINDEX + INTEGER :: TIDEOK, TIDE_MAX, TIDE_MAXI + INTEGER :: K, ICON, IX2, SUMOK, NBAD, ITER + INTEGER :: IE, IP, IP2, II, IFOUND, ALREADYFOUND + INTEGER :: TIDE_KD0, INT24, INTDYS ! "Gregorian day constant" +!/MPI INTEGER :: IERR_MPI, IND, REST, SLICE + INTEGER :: TIME(2), TIDE_START(2), TIDE_END(2) + INTEGER :: INDMAX(70), PR_INDS(70) +! + INTEGER, ALLOCATABLE :: BADPOINTS(:,:), VNEIGH(:,:), CONN(:) +!/MPI INTEGER, ALLOCATABLE :: NELEM(:), CUMUL(:) +! + REAL :: WCURTIDEX, WCURTIDEY, TIDE_ARGX, TIDE_ARGY + REAL :: AMPCOS, AMPSIN +! + REAL :: TIDE_FX(44),UX(44),VX(44), MAXVALCON(70) +! + REAL, ALLOCATABLE :: FX(:,:), FY(:,:), FA(:,:) +!/MPI REAL, ALLOCATABLE :: FX1D(:), FY1D(:), FA1D(:) +!/MPI REAL, ALLOCATABLE :: FX1DL(:), FY1DL(:), FA1DL(:) +! + DOUBLE PRECISION :: d1,h,TIDE_HOUR,HH,pp,s,p,enp,dh,dpp,ds,dp,dnp,tau +! CHARACTER*256 :: FILENAMEXT CHARACTER :: TIDECONSTNAMES*1024 - CHARACTER(LEN=100) :: TIDECON_PRNAMES(70), TIDECON_MAXNAMES(70), & - TIDECON_MAXVALS(70) - INTEGER :: PR_INDS(70), K, IND, IX2, SUMOK, NBAD, ITER CHARACTER*23 :: IDTIME CHARACTER :: COMSTR*1, IDFLD*3 - REAL, ALLOCATABLE :: FX(:,:), FY(:,:), FA(:,:) - INTEGER, ALLOCATABLE :: BADPOINTS(:,:) - REAL :: MAXVALCON(70) - REAL :: WCURTIDEX, WCURTIDEY, TIDE_ARGX, TIDE_ARGY - INTEGER(KIND=4) :: TIDE_KD0, INT24, INTDYS ! "Gregorian day constant" - REAL :: WLEVTIDE, TIDE_ARG, WLEVTIDE2(1) - REAL(KIND=8) :: d1,h,TIDE_HOUR,HH,pp,s,p,enp,dh,dpp,ds,dp,dnp,tau - REAL :: TIDE_FX(44),UX(44),VX(44), AMPCOS, AMPSIN - INTEGER :: IE, NI(3), IP, IP2, II, IFOUND, ALREADYFOUND - INTEGER, ALLOCATABLE :: VNEIGH(:,:), CONN(:) - LOGICAL :: TIDEFILL +! + CHARACTER(LEN=100) :: TIDECON_PRNAMES(70), TIDECON_MAXNAMES(70) + CHARACTER(LEN=100) :: TIDECON_MAXVALS(70) +! + LOGICAL :: TIDEFILL +! !/ !/ ------------------------------------------------------------------- / !/ + +!========================================================== +! +! Initialization +! +!========================================================== + ! ! 1.a Set number of models ! @@ -189,65 +212,82 @@ !/NCO NDSM = 12 !/NCO NDSDAT = 51 !/NCO NDSTRC = NDSO + +!/S CALL STRACE (IENT, 'W3PRTIDE') + +! +! 1.c MPP initializations ! -! 1.c Print header +!/SHRD NAPROC = 1 +!/SHRD IAPROC = 1 ! - WRITE (NDSO,900) -!/S CALL STRACE (IENT, 'W3PREP') +!/MPI CALL MPI_INIT ( IERR_MPI ) +!/MPI CALL MPI_COMM_SIZE ( MPI_COMM_WORLD, NAPROC, IERR_MPI ) +!/MPI CALL MPI_COMM_RANK ( MPI_COMM_WORLD, IAPROC, IERR_MPI ) +!/MPI IAPROC = IAPROC + 1 ! this is to have IAPROC between 1 and NAPROC ! - J = LEN_TRIM(FNMPRE) - OPEN (NDSI,FILE=FNMPRE(:J)//'ww3_prtide.inp',STATUS='OLD', & + IF ( IAPROC .EQ. NAPERR ) THEN + NDSEN = NDSE + ELSE + NDSEN = -1 + END IF +! + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,900) +! + OPEN (NDSI,FILE=TRIM(FNMPRE)//'ww3_prtide.inp',STATUS='OLD', & ERR=800,IOSTAT=IERR) REWIND (NDSI) READ (NDSI,'(A)',END=801,ERR=802,IOSTAT=IERR) COMSTR IF (COMSTR.EQ.' ') COMSTR = '$' - WRITE (NDSO,901) COMSTR + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,901) COMSTR + +!========================================================== ! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 2. Read model definition file. +! Read model definition file. ! +!========================================================== + CALL W3IOGR ( 'READ', NDSM ) - WRITE (NDSO,902) GNAME + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,902) GNAME ALLOCATE ( FX(NX,NY), FY(NX,NY), FA(NX,NY), BADPOINTS(NX,NY) ) + +!========================================================== ! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 3.a Read types from input file. +! Read types from input file. ! - CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!========================================================== + + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=801,ERR=802,IOSTAT=IERR) IDFLD ! -! 3.b Check types. -! - IF ( IDFLD.EQ.'LEV' ) THEN - IFLD = 2 - ELSE IF ( IDFLD.EQ.'CUR' ) THEN - IFLD = 4 - ELSE - WRITE (NDSE,1030) IDFLD - CALL EXTCDE ( 1 ) - END IF + IF ( IDFLD.EQ.'LEV' ) THEN + IFLD = 2 + ELSE IF ( IDFLD.EQ.'CUR' ) THEN + IFLD = 4 + ELSE + WRITE (NDSE,1030) IDFLD + CALL EXTCDE ( 1 ) + END IF ! -! 3.c Additional input for constituents and time -! - CALL NEXTLN ( COMSTR , NDSI , NDSE ) + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,'(A)',END=801,ERR=802,IOSTAT=IERR) TIDECONSTNAMES CALL NEXTLN ( COMSTR , NDSI , NDSE ) TIDECON_PRNAMES(:)='' CALL STRSPLIT(TIDECONSTNAMES,TIDECON_PRNAMES) ! - CALL NEXTLN ( COMSTR , NDSI , NDSE ) + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,'(A)',END=801,ERR=802,IOSTAT=IERR) TIDECONSTNAMES TIDECON_MAXNAMES(:)='' CALL STRSPLIT(TIDECONSTNAMES,TIDECON_MAXNAMES) ! - CALL NEXTLN ( COMSTR , NDSI , NDSE ) + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) TIDECON_MAXVALS(:)='' READ (NDSI,'(A)',END=801,ERR=802,IOSTAT=IERR) TIDECONSTNAMES CALL STRSPLIT(TIDECONSTNAMES,TIDECON_MAXVALS) ! - CALL NEXTLN ( COMSTR , NDSI , NDSE ) + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=801,ERR=802,IOSTAT=IERR) TIDE_START,PRTIDE_DT,TIDE_END - CALL NEXTLN ( COMSTR , NDSI , NDSE ) + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=801,ERR=802,IOSTAT=IERR) FILENAMEXT ! CALL W3FLDO ('READ', IDFLD, NDSF, NDST, & @@ -257,16 +297,21 @@ IF (FLAGTIDE.NE.1) GOTO 803 ! CALL VUF_SET_PARAMETERS - ALLOCATE(V_ARG(170,1),F_ARG(170,1),U_ARG(170,1)) ! to be removed later ... + +!========================================================== ! -! Reads tidal amplitudes and phases -! +! Read tidal amplitudes and phases ! +!========================================================== + CALL W3FLDTIDE1 ( 'READ', NDSF, NDST, NDSE, NX, NY, IDFLD, IERR ) CALL W3FLDTIDE2 ( 'READ', NDSF, NDST, NDSE, NX, NY, IDFLD, 0, IERR ) CLOSE(NDSF) ! + + IF (GTYPE.EQ.UNGTYPE) THEN + COUNTRI = MAXVAL(CCON) ALLOCATE(VNEIGH(NX,2*COUNTRI)) ALLOCATE(CONN(NX)) @@ -322,20 +367,24 @@ ! CCON, it will enable to spot whether a point belong to the contour ! CONN(IP)=IFOUND - do I=2,IFOUND - do JJ=1,i-1 - if (VNEIGH(IP,JJ).EQ. VNEIGH(IP,I)) THEN - COUNTCON(IP)=COUNTCON(IP)-1 - VNEIGH(IP,I:IFOUND)=VNEIGH(IP,I+1:IFOUND+1) ! removes the double point - ! WRITE(993,*) 'ERROR:',IP,I,J,VNEIGH(IP,JJ),VNEIGH(IP,I) - END IF - enddo - enddo + DO I=2,IFOUND + DO JJ=1,i-1 + IF (VNEIGH(IP,JJ).EQ. VNEIGH(IP,I)) THEN + COUNTCON(IP)=COUNTCON(IP)-1 + VNEIGH(IP,I:IFOUND)=VNEIGH(IP,I+1:IFOUND+1) ! removes the double point + END IF + END DO + END DO END DO !NX + END IF ! UNGTYPE + +!========================================================== ! -! Counts the number of tidal constituents +! Apply the maximum threshold value to tidal constituents ! +!========================================================== + CALL TIDE_FIND_INDICES_PREDICTION(TIDECON_PRNAMES,PR_INDS,TIDE_PRMF) TIDE_MAX=0 TIDE_MAXI=0 @@ -346,20 +395,69 @@ TIDE_MAX=TIDE_MAX+1 INDMAX(TIDE_MAX)=J READ(TIDECON_MAXVALS(TIDE_MAXI),*) MAXVALCON(TIDE_MAX) - WRITE(6,*) 'Maximum allowed value for amplitude:',J,TRIM(TIDECON_NAME(J)),MAXVALCON(TIDE_MAX) - END IF - END DO + IF (IAPROC.EQ.NAPOUT) WRITE(NDSO,*) 'Maximum allowed value for amplitude:',J,TRIM(TIDECON_NAME(J)),MAXVALCON(TIDE_MAX) + END IF END DO + END DO + +!========================================================== ! -! Now writes new file +! Create the binary output file ! +!========================================================== + FLAGTIDE = 0 - CALL W3FLDO ('WRITE', IDFLD, NDSDAT, NDST, & - NDSE, NX, NY, GTYPE, & - IERR, 'ww3', TIDEFLAGIN=FLAGTIDE) + IF (IAPROC .EQ. NAPOUT) THEN + CALL W3FLDO ('WRITE', IDFLD, NDSDAT, NDST, NDSE, NX, NY, & + GTYPE, IERR, 'ww3', TIDEFLAGIN=FLAGTIDE) + END IF + +!========================================================== +! +! Set arrays for MPI exchanges +! +!========================================================== + +!/MPI SLICE=NX/NAPROC +!/MPI REST=MOD(NX,NAPROC) +!/MPI IF(REST.GE.IAPROC) SLICE=SLICE+1 + +!/MPI ! set total 1D array (nx) +!/MPI ALLOCATE ( FX1D(NX), FY1D(NX), FA1D(NX)) +!/MPI FX1D(:)=0. +!/MPI FY1D(:)=0. +!/MPI FA1D(:)=0. + +!/MPI ! set local 1D array (slice) +!/MPI ALLOCATE(FX1DL(SLICE)) +!/MPI ALLOCATE(FY1DL(SLICE)) +!/MPI ALLOCATE(FA1DL(SLICE)) +!/MPI FX1DL(:)=0. +!/MPI FY1DL(:)=0. +!/MPI FA1DL(:)=0. + + +!/MPI ! set arrays for number of elements per MPI proc +!/MPI ALLOCATE(NELEM(NAPROC)) +!/MPI ALLOCATE(CUMUL(NAPROC)) +!/MPI NELEM(1) = NX / NAPROC +!/MPI IF (REST .GT. 0) NELEM(1) = NELEM(1) + 1 +!/MPI CUMUL(1) = 0 +!/MPI DO I=2,NAPROC +!/MPI CUMUL(I)=CUMUL(I-1)+NELEM(I-1) +!/MPI NELEM(I) = NX / NAPROC +!/MPI IF (REST .GT. I-1) NELEM(I) = NELEM(I) + 1 +!/MPI END DO + +!/MPIT WRITE(100+IAPROC,*) "Number of points for this processor ", IAPROC, " : ", NELEM(IAPROC), ' / ', NX +!/MPIT WRITE(100+IAPROC,*) "Cumul of points for this processor ", IAPROC, " : ", CUMUL(IAPROC), ' / ', NX + +!========================================================== ! ! Loop on time steps ! +!========================================================== + DTTST = DSEC21 ( TIDE_START , TIDE_END ) IF ( DTTST .LE. 0. .OR. PRTIDE_DT .LT. 1 ) GOTO 888 TIME = TIDE_START @@ -372,7 +470,7 @@ IF ( DTTST .LT. 0. ) GOTO 888 ! CALL STME21 ( TIME , IDTIME ) - WRITE (NDSO,973) IDTIME + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,973) IDTIME TIDE_HOUR = TIME2HOURS(TIME) ! @@ -386,170 +484,264 @@ HH=TIDE_HOUR-dfloat(INTDYS*INT24) TAU=HH/24.D0+H-S +!========================================================== ! -! Treatment of 'bad points' +! Treatment of 'bad points' at first time step ! +!========================================================== + BADPOINTS(:,:)=0 NBAD =0 - DO IY = 1, NY - DO IX = 1, NX - CALL SETVUF_FAST(h,pp,s,p,enp,dh,dpp,ds,dp,dnp,tau,YGRD(IY,IX),TIDE_FX,UX,VX) - IF (TINDEX.EQ.1) THEN + + IF (TINDEX.EQ.1) THEN + DO IY = 1, NY + DO IX=1, NX TIDEOK=1 DO I=1,TIDE_MAX - IF (ABS(TIDAL_CONST(IX,IY,INDMAX(I),1,1)) .GT.MAXVALCON(I) & - .OR.ABS(TIDAL_CONST(IX,IY,INDMAX(I),2,1)) .GT.MAXVALCON(I)) & + IF (ABS(TIDAL_CONST(IX,IY,INDMAX(I),1,1)) .GT.MAXVALCON(I) .OR. & + ABS(TIDAL_CONST(IX,IY,INDMAX(I),2,1)) .GT.MAXVALCON(I)) THEN TIDEOK = 0 - BADPOINTS(IX,IY) = BADPOINTS(IX,IY) + (1-TIDEOK) - END DO - IF (BADPOINTS(IX,IY).GT.0) THEN - NBAD = NBAD +1 - WRITE(NDSE,*) 'BAD POINT:',IX,IY,NBAD, & - TIDAL_CONST(IX,IY,:,1,1),'##',TIDAL_CONST(IX,IY,:,2,1) - END IF - END IF + WRITE(NDSO,*) 'BAD: ', INDMAX(I), MAXVALCON(I), '/', ABS(TIDAL_CONST(IX,IY,INDMAX(I),1:2,1)) + END IF + BADPOINTS(IX,IY) = BADPOINTS(IX,IY) + (1-TIDEOK) + END DO + + IF (BADPOINTS(IX,IY).GT.0) THEN + NBAD = NBAD +1 + WRITE(NDSE,*) 'BAD POINT:',IX,IY,NBAD, & + TIDAL_CONST(IX,IY,:,1,1),'##',TIDAL_CONST(IX,IY,:,2,1) + END IF END DO END DO ! - DO ITER=1,2 - DO IY = 1, NY - DO IX = 1, NX - IF (TINDEX.EQ.1) THEN - IF (BADPOINTS(IX,IY).GT.0) THEN - TIDAL_CONST(IX,IY,:,1,1)=0 - TIDAL_CONST(IX,IY,:,2,1)=0 - IF (TIDEFILL.AND.(GTYPE.EQ.UNGTYPE)) THEN + DO ITER=1,2 + DO IY = 1, NY + DO IX= 1, NX + IF (BADPOINTS(IX,IY).GT.0) THEN + TIDAL_CONST(IX,IY,:,1,1)=0 + TIDAL_CONST(IX,IY,:,2,1)=0 + + + IF (TIDEFILL.AND.(GTYPE.EQ.UNGTYPE)) THEN + ! ! Performs a vector sum of tidal constituents over neighbor nodes ! - DO J=1, TIDE_MF - DO K=1, 2 - AMPCOS = 0 - AMPSIN = 0 - SUMOK = 0 - DO IND=1,COUNTCON(IX) - IX2=VNEIGH(IX,IND) - IF (BADPOINTS(IX2,IY).EQ.0) THEN - SUMOK = SUMOK + 1 - AMPCOS = AMPCOS+TIDAL_CONST(IX2,IY,J,K,1)*COS(TIDAL_CONST(IX2,IY,J,K,2)*DERA) - AMPSIN = AMPSIN+TIDAL_CONST(IX2,IY,J,K,1)*SIN(TIDAL_CONST(IX2,IY,J,K,2)*DERA) + DO J=1, TIDE_MF + DO K=1, 2 + AMPCOS = 0 + AMPSIN = 0 + SUMOK = 0 + DO ICON=1,COUNTCON(IX) + IX2=VNEIGH(IX,ICON) + IF (BADPOINTS(IX2,IY).EQ.0) THEN + SUMOK = SUMOK + 1 + AMPCOS = AMPCOS+TIDAL_CONST(IX2,IY,J,K,1)*COS(TIDAL_CONST(IX2,IY,J,K,2)*DERA) + AMPSIN = AMPSIN+TIDAL_CONST(IX2,IY,J,K,1)*SIN(TIDAL_CONST(IX2,IY,J,K,2)*DERA) END IF END DO - IF (SUMOK.GT.1) THEN + IF (SUMOK.GT.1) THEN ! ! Finalizes the amplitude and phase calculation from COS and SIN. Special case for mean value Z0. ! - IF (TIDECON_NAME(J).NE.'Z0 ') THEN - TIDAL_CONST(IX,IY,J,K,1) = SQRT(AMPCOS**2+AMPSIN**2)/SUMOK - TIDAL_CONST(IX,IY,J,K,2) = ATAN2(AMPSIN,AMPCOS)/DERA - ELSE - TIDAL_CONST(IX,IY,J,K,1) = AMPCOS/SUMOK - TIDAL_CONST(IX,IY,J,K,2) = 0. - END IF - IF(K.EQ.2.AND.J.EQ.TIDE_MF) THEN - NBAD=NBAD-1 - BADPOINTS(IX,IY) = 0 + IF (TIDECON_NAME(J).NE.'Z0 ') THEN + TIDAL_CONST(IX,IY,J,K,1) = SQRT(AMPCOS**2+AMPSIN**2)/SUMOK + TIDAL_CONST(IX,IY,J,K,2) = ATAN2(AMPSIN,AMPCOS)/DERA + ELSE + TIDAL_CONST(IX,IY,J,K,1) = AMPCOS/SUMOK + TIDAL_CONST(IX,IY,J,K,2) = 0. + END IF + IF(K.EQ.2.AND.J.EQ.TIDE_MF) THEN + NBAD=NBAD-1 + BADPOINTS(IX,IY) = 0 END IF - - ENDIF - END DO - END DO - END IF - END IF - END IF + ENDIF + END DO + END DO + END IF + END IF + END DO END DO END DO - END DO - - IF (TINDEX.EQ.1) WRITE(NDSE,*) 'Number of remaining bad points:',NBAD + IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSE,*) 'Number of remaining bad points:',NBAD + END IF +!========================================================== ! ! For currents: 2 components ! +!========================================================== + IF (IFLD.EQ.4) THEN - DO IY = 1, NY - DO IX = 1, NX - WCURTIDEX = 0. - WCURTIDEY = 0. - DO I=1,TIDE_PRMF - J=PR_INDS(I) - IF (TRIM(TIDECON_NAME(J)).EQ.'Z0') THEN - WCURTIDEX = WCURTIDEX+TIDAL_CONST(IX,IY,J,1,1) - WCURTIDEY = WCURTIDEY+TIDAL_CONST(IX,IY,J,2,1) - ELSE - TIDE_ARGX=(VX(J)+UX(J))*twpi-TIDAL_CONST(IX,IY,J,1,2)*DERA - TIDE_ARGY=(VX(J)+UX(J))*twpi-TIDAL_CONST(IX,IY,J,2,2)*DERA - WCURTIDEX = WCURTIDEX+TIDE_FX(J)*TIDAL_CONST(IX,IY,J,1,1)*COS(TIDE_ARGX) - WCURTIDEY = WCURTIDEY+TIDE_FX(J)*TIDAL_CONST(IX,IY,J,2,1)*COS(TIDE_ARGY) + DO IY = 1, NY +!/MPI IND=0 +!/MPI DO IX=CUMUL(IAPROC)+1,CUMUL(IAPROC)+NELEM(IAPROC) +!/SHRD DO IX=1,NX + CALL SETVUF_FAST(h,pp,s,p,enp,dh,dpp,ds,dp,dnp,tau,YGRD(IY,IX),TIDE_FX,UX,VX) + WCURTIDEX = 0. + WCURTIDEY = 0. + DO I=1,TIDE_PRMF + J=PR_INDS(I) + IF (TRIM(TIDECON_NAME(J)).EQ.'Z0') THEN + WCURTIDEX = WCURTIDEX+TIDAL_CONST(IX,IY,J,1,1) + WCURTIDEY = WCURTIDEY+TIDAL_CONST(IX,IY,J,2,1) + ELSE + TIDE_ARGX=(VX(J)+UX(J))*twpi-TIDAL_CONST(IX,IY,J,1,2)*DERA + TIDE_ARGY=(VX(J)+UX(J))*twpi-TIDAL_CONST(IX,IY,J,2,2)*DERA + WCURTIDEX = WCURTIDEX+TIDE_FX(J)*TIDAL_CONST(IX,IY,J,1,1)*COS(TIDE_ARGX) + WCURTIDEY = WCURTIDEY+TIDE_FX(J)*TIDAL_CONST(IX,IY,J,2,1)*COS(TIDE_ARGY) END IF END DO - IF (ABS(WCURTIDEX).GT.10..OR.ABS(WCURTIDEY).GT.10.) & - WRITE(NDSE,*) & - 'WARNING: VERY STRONG CURRENT... BAD CONSTITUENTS?', & - IX, WCURTIDEX, WCURTIDEY , TIDAL_CONST(IX,IY,:,1,1),'##',TIDAL_CONST(IX,IY,:,2,1) - FX(IX,IY) = WCURTIDEX - FY(IX,IY) = WCURTIDEY - FA(IX,IY) = 0. - END DO - END DO - END IF + IF (ABS(WCURTIDEX).GT.10..OR.ABS(WCURTIDEY).GT.10.) THEN + WRITE(NDSE,*) 'WARNING: VERY STRONG CURRENT... BAD CONSTITUENTS?', & + IX, WCURTIDEX, WCURTIDEY , TIDAL_CONST(IX,IY,:,1,1),'##',TIDAL_CONST(IX,IY,:,2,1) + STOP + END IF +!/MPI IND=IND+1 +!/MPI FX1DL(IND) = WCURTIDEX +!/MPI FY1DL(IND) = WCURTIDEY +!/MPI FA1DL(IND) = 0. +!/SHRD FX(IX,IY) = WCURTIDEX +!/SHRD FY(IX,IY) = WCURTIDEY +!/SHRD FA(IX,IY) = 0. + END DO ! NX + +! +! Gather from other MPI tasks +! + +!/MPI IF (NAPROC.GT.1) THEN +!/MPI CALL MPI_GATHERV(FX1DL, SLICE, MPI_REAL, FX1D, NELEM, CUMUL, MPI_REAL, NAPOUT-1, MPI_COMM_WORLD, IERR_MPI) +!/MPI CALL MPI_GATHERV(FY1DL, SLICE, MPI_REAL, FY1D, NELEM, CUMUL, MPI_REAL, NAPOUT-1, MPI_COMM_WORLD, IERR_MPI) +!/MPI CALL MPI_GATHERV(FA1DL, SLICE, MPI_REAL, FA1D, NELEM, CUMUL, MPI_REAL, NAPOUT-1, MPI_COMM_WORLD, IERR_MPI) +!/MPI ELSE +!/MPI FX1D = FX1DL +!/MPI FY1D = FY1DL +!/MPI FA1D = FA1DL +!/MPI END IF + +! +! Convert from 1D to 2D array +! +!/MPI IF (IAPROC .EQ. NAPOUT) THEN +!/MPI IND=0 +!/MPI DO IX=1,NX +!/MPI IND=IND+1 +!/MPI FX(IX,IY)=FX1D(IND) +!/MPI FY(IX,IY)=FY1D(IND) +!/MPI FA(IX,IY)=FA1D(IND) +!/MPI END DO +!/MPI END IF + + END DO ! NY + END IF ! IFLD.EQ.4 + + +!========================================================== ! ! For water levels: only 1 component ! - IF (IFLD.EQ.2) THEN - DO IY = 1, NY - DO IX = 1, NX +!========================================================== - CALL SETVUF_FAST(h,pp,s,p,enp,dh,dpp,ds,dp,dnp,tau,YGRD(IY,IX),TIDE_FX,UX,VX) + IF (IFLD.EQ.2) THEN + DO IY = 1, NY +!/MPI IND=0 +!/MPI DO IX=CUMUL(IAPROC)+1,CUMUL(IAPROC)+NELEM(IAPROC) +!/SHRD DO IX=1,NX + CALL SETVUF_FAST(h,pp,s,p,enp,dh,dpp,ds,dp,dnp,tau,YGRD(IY,IX),TIDE_FX,UX,VX) ! ! Removes unlikely values ... ! - IF (TINDEX.EQ.1) THEN - TIDEOK=1 - DO I=1,TIDE_MAX - IF (ABS(TIDAL_CONST(IX,IY,INDMAX(I),1,1)) .GT.MAXVALCON(I)) & - TIDEOK = 0 + IF (TINDEX.EQ.1) THEN + TIDEOK=1 + DO I=1,TIDE_MAX + IF (ABS(TIDAL_CONST(IX,IY,INDMAX(I),1,1)) .GT.MAXVALCON(I)) & + TIDEOK = 0 END DO - IF (TIDEOK.EQ.0) THEN - WRITE(NDSE,*) 'BAD POINT:',IX,IY, & - TIDAL_CONST(IX,IY,:,1,1) - TIDAL_CONST(IX,IY,:,1,1)=0 + IF (TIDEOK.EQ.0) THEN + WRITE(NDSE,*) 'BAD POINT:',IX,IY, TIDAL_CONST(IX,IY,:,1,1) + TIDAL_CONST(IX,IY,:,1,1)=0 END IF END IF - WCURTIDEX = 0. - DO I=1,TIDE_PRMF - J=PR_INDS(I) - IF (TRIM(TIDECON_NAME(J)).EQ.'Z0') THEN - WCURTIDEX = WCURTIDEX+TIDAL_CONST(IX,IY,J,1,1) - ELSE - TIDE_ARGX=(VX(J)+UX(J))*twpi-TIDAL_CONST(IX,IY,J,1,2)*DERA - WCURTIDEX = WCURTIDEX+TIDE_FX(J)*TIDAL_CONST(IX,IY,J,1,1)*COS(TIDE_ARGX) + WCURTIDEX = 0. + DO I=1,TIDE_PRMF + J=PR_INDS(I) + IF (TRIM(TIDECON_NAME(J)).EQ.'Z0') THEN + WCURTIDEX = WCURTIDEX+TIDAL_CONST(IX,IY,J,1,1) + ELSE + TIDE_ARGX=(VX(J)+UX(J))*twpi-TIDAL_CONST(IX,IY,J,1,2)*DERA + WCURTIDEX = WCURTIDEX+TIDE_FX(J)*TIDAL_CONST(IX,IY,J,1,1)*COS(TIDE_ARGX) END IF END DO +!/MPI IND=IND+1 +!/MPI FX1DL(IND) = 0. +!/MPI FY1DL(IND) = 0. +!/MPI FA1DL(IND) = WCURTIDEX +!/SHRD FX(IX,IY) = 0. +!/SHRD FY(IX,IY) = 0. +!/SHRD FA(IX,IY) = WCURTIDEX - FX(IX,IY) = 0. - FY(IX,IY) = 0. - FA(IX,IY) = WCURTIDEX - END DO - END DO - END IF + END DO ! NX +! +! Gather from other MPI tasks +! + +!/MPI IF (NAPROC.GT.1) THEN +!/MPI CALL MPI_GATHERV(FX1DL, SLICE, MPI_REAL, FX1D, NELEM, CUMUL, MPI_REAL, NAPOUT-1, MPI_COMM_WORLD, IERR_MPI) +!/MPI CALL MPI_GATHERV(FY1DL, SLICE, MPI_REAL, FY1D, NELEM, CUMUL, MPI_REAL, NAPOUT-1, MPI_COMM_WORLD, IERR_MPI) +!/MPI CALL MPI_GATHERV(FA1DL, SLICE, MPI_REAL, FA1D, NELEM, CUMUL, MPI_REAL, NAPOUT-1, MPI_COMM_WORLD, IERR_MPI) +!/MPI ELSE +!/MPI FX1D = FX1DL +!/MPI FY1D = FY1DL +!/MPI FA1D = FA1DL +!/MPI END IF + +! +! Convert from 1D to 2D array +! +!/MPI IF (IAPROC .EQ. NAPOUT) THEN +!/MPI IND=0 +!/MPI DO IX=1,NX +!/MPI IND=IND+1 +!/MPI FX(IX,IY)=FX1D(IND) +!/MPI FY(IX,IY)=FY1D(IND) +!/MPI FA(IX,IY)=FA1D(IND) +!/MPI END DO +!/MPI END IF - WHERE(FX.NE.FX) FX = 0. - WHERE(FY.NE.FY) FY = 0. - WHERE(FA.NE.FA) FA = 0. + END DO ! NY + END IF ! IFLD.EQ.2 - CALL W3FLDG ('WRITE', IDFLD, NDSDAT, NDST, NDSE, NX, NY, & - NX, NY, TIME, TIME, TIME, FX, FY, FA, TIME, & - FX, FY, FA, IERR) +!========================================================== ! -! Increments the clock +! Write into binary output file ! +!========================================================== + + IF (IAPROC .EQ. NAPOUT) THEN + +! WHERE(FX.NE.FX) FX = 0. +! WHERE(FY.NE.FY) FY = 0. +! WHERE(FA.NE.FA) FA = 0. + + CALL W3FLDG ('WRITE', IDFLD, NDSDAT, NDST, NDSE, NX, NY, & + NX, NY, TIME, TIME, TIME, FX, FY, FA, TIME, & + FX, FY, FA, IERR) + END IF + +!========================================================== +! +! Increment the clock +! +!========================================================== + CALL TICK21 ( TIME, FLOAT(PRTIDE_DT) ) TINDEX = TINDEX +1 - END DO + + END DO ! GOTO 888 ! @@ -572,36 +764,37 @@ CALL EXTCDE ( 43 ) ! 888 CONTINUE - WRITE (NDSO,999) + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,999) +!/MPI CALL MPI_FINALIZE ( IERR_MPI ) ! ! Formats ! - 900 FORMAT (/15X,' *** WAVEWATCH III tide prediction *** '/ & + 900 FORMAT (/15X,' *** WAVEWATCH III tide prediction *** '/ & 15X,'==============================================='/) 901 FORMAT ( ' Comment character is ''',A,''''/) 902 FORMAT ( ' Grid name : ',A/) 973 FORMAT ( ' Time : ',A) ! - 999 FORMAT(//' End of program '/ & - ' ========================================='/ & + 999 FORMAT(/' End of program '/ & + ' ========================================='/ & ' WAVEWATCH III Input preprocessing '/) ! - 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & - ' ERROR IN OPENING INPUT FILE'/ & + 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & + ' ERROR IN OPENING INPUT FILE'/ & ' IOSTAT =',I5/) ! - 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & + 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & ' PREMATURE END OF INPUT FILE'/) ! - 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & - ' ERROR IN READING FROM INPUT FILE'/ & + 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & + ' ERROR IN READING FROM INPUT FILE'/ & ' IOSTAT =',I5/) ! - 1003 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & + 1003 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & ' THE INPUT FILE DOES NOT CONTAIN TIDAL DATA'/) ! - 1030 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & + 1030 FORMAT (/' *** WAVEWATCH III ERROR IN W3PRTIDE : '/ & ' ILLEGAL FIELD ID -->',A,'<--'/) ! !/ diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 6586543fe..f424e85b0 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -700,10 +700,10 @@ echo "$rtst -s PR3_UQ -w work_PR3_UQ_a -g a $ww3 ww3_tp2.9" >> matrix.body echo "$rtst -s PR3_UQ -w work_PR3_UQ_b -g b $ww3 ww3_tp2.9" >> matrix.body echo "$rtst -w work_PR3_UQ -o netcdf $ww3 ww3_tp2.8" >> matrix.body - echo "$rtst -s TIDE -w work_TIDE -o netcdf $ww3 ww3_tp2.8" >> matrix.body echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.13" >> matrix.body echo "$rtst -o netcdf -w work_PR3_UQ $ww3 ww3_tp2.15" >> matrix.body echo "$rtst -o netcdf -w work_5km -g 5km $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -s TIDE -w work_TIDE -o netcdf $ww3 ww3_tp2.18" >> matrix.body fi if [ "$multi01" = 'y' ] @@ -792,7 +792,8 @@ echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_b_MPI -g b -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.13" >> matrix.body echo "$rtst -s MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body - echo "$rtst -s MPI -w work_MPI_5km -g 5km -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -s MPI -w work_MPI_5km -g 5km -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -s TIDE_MPI -w work_TIDE_MPI -o netcdf -f -p $mpi -n $np $ww3 ww3_tp2.18" >> matrix.body fi if [ "$multi01" = 'y' ] diff --git a/regtests/bin/run_test b/regtests/bin/run_test index df983680c..cdc02dfb0 100755 --- a/regtests/bin/run_test +++ b/regtests/bin/run_test @@ -128,6 +128,7 @@ ARGS=$args # 2.b Process command-line options exit_p=none exec_p=none +batchq=none multi=0 dist=0 inpdir=input @@ -160,7 +161,7 @@ do -N) nml_input=1 ;; -o) shift; outopt="$1" ;; -O) pomp=1 ;; - -p) shift; runcmd="$1" ; runcmd1=$runcmd ; pmpi=1 ;; + -p) shift; runcmd="$1" ; pmpi=1 ;; -q) shift; exit_p="$1" ;; -r) shift; exec_p="$1" ;; -s) shift; swtstr="$1" ;; @@ -1180,7 +1181,7 @@ then echo '+-------------------------------+' echo ' ' - if [ $force_shrd ] + if [ $force_shrd ] && [ -z "$(grep TIDE $file_c)" ] then # build pre- & post-processing programs with SHRD only cat $file_c | sed 's/DIST/SHRD/' | sed 's/MPI //' | \ sed 's/OMPG //' | sed 's/OMPX //' | \ @@ -1195,7 +1196,175 @@ then cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch rm $path_b/switch_noST fi + + runprog=$runcmd + if [ $pmpi ] + then + if [ $nproc ] + then + if [ $batchq = "slurm" ] + then + runprog="$runprog -n $nproc" + + else + runprog="$runprog -np $nproc" + fi + fi + fi + if [ -n "$(grep SHRD $path_b/switch)" ] + then + runprog='' + fi + + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $path_b/w3_make $prog + then : + else + errmsg "Error occured during WW3 $prog build" + exit 1 + fi + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + printf "\n $prog \n %8.2f sec compile time" $Maketime >> time_count.txt + cumult_comp=`echo "$Maketime + $cumult_comp" | bc` + fi + + if [ ! -f $path_e/$prog ] + then + errmsg "$path_e/$prog not found" + exit 1 + fi + + for g in $input_grids + do + + if [ $multi -eq 2 ] + then + gu="_$g" + fi + + for ifile in $inputs + do + +# link conf file + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + \rm -f $prog.nml + \ln -s $ifile $prog.nml + otype="`basename $ifile .nml | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .nml`.out" + else + \rm -f $prog.inp + \ln -s $ifile $prog.inp + otype="`basename $ifile .inp | sed s/^${prog}_//`" + ofile="$path_w/`basename $ifile .inp`.out" + fi + + echo " Processing $ifile" + echo " Screen output routed to $ofile" + + if [ $multi -eq 2 ] + then + \rm -f mod_def.ww3 + \ln -s mod_def.$g mod_def.ww3 + fi + if [ $time_count ] + then # Add time counter if -T + Tstart=`date +"%s.%2N"` + fi + + if $runprog $path_e/$prog > $ofile + then + \rm -f $prog.inp + \rm -f $prog.nml + if [ $multi -eq 2 ] + then + \rm -f mod_def.ww3 + mv $otype.ww3 $otype.$g + if [ $nml_input ] && [ ! -z "`echo ${ifile} | grep -o nml`" ] + then + mv $prog.nml.log ${prog}_$g.nml.log + fi + fi + else + errmsg "Error occured during $path_e/$prog execution" + exit 1 + fi + + + if [ $time_count ] + then # Add time counter if -T + Tend=`date +"%s.%2N"` + Maketime=`echo "$Tend - $Tstart" | bc` + cumult_run=`echo "$Maketime + $cumult_run" | bc` + printf "\n %8.2f sec run time \n" $Maketime >> time_count.txt + fi + + done + + done + + fi + +fi + +if [ $exit_p = $prog ] +then + exit +fi + +# 3.e.2 Prtide forcing fields ------------------------------------------------- # + +prog=ww3_prtide +if [ $exec_p = $prog -o $exec_p = "none" ] +then + +# select inp/nml files + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}*.nml 2>/dev/null`" ] + then + inputs="`ls ${path_i}/${prog}*.nml 2>/dev/null`" + else + inputs="`ls $path_i/$prog*.inp 2>/dev/null`" + fi + + if [ $? = 0 ] + then + echo ' ' + echo '+---------------------------------+' + echo '| Prtide of NetCDF forcing fields |' + echo '+---------------------------------+' + echo ' ' + + \cp -f $file_c $path_b/switch + if [ $testST ] + then #add S T switches + \cp -f $path_b/switch $path_b/switch_noST + cat $path_b/switch_noST | sed 's/F90/F90 S T /' > $path_b/switch + rm $path_b/switch_noST + fi + + runprog=$runcmd + if [ $pmpi ] + then + if [ $nproc ] + then + if [ $batchq = "slurm" ] + then + runprog="$runprog -n $nproc" + else + runprog="$runprog -np $nproc" + fi + fi + fi + if [ $time_count ] then # Add time counter if -T Tstart=`date +"%s.%2N"` @@ -1255,13 +1424,15 @@ then \rm -f mod_def.ww3 \ln -s mod_def.$g mod_def.ww3 fi + + mv $otype.ww3 $otype.ww3_tide if [ $time_count ] then # Add time counter if -T Tstart=`date +"%s.%2N"` fi - if $path_e/$prog > $ofile + if $runprog $path_e/$prog > $ofile then \rm -f $prog.inp \rm -f $prog.nml @@ -1450,24 +1621,26 @@ then echo " Processing $ifile" echo " Screen output copied to $ofile" + + runprog=$runcmd if [ $pmpi ] then if [ $nproc ] then if [ -z $batchq ] && [ $batchq = "slurm" ] then - runcmd="$runcmd -n $nproc" + runprog="$runprog -n $nproc" else - runcmd="$runcmd -np $nproc" + runprog="$runprog -np $nproc" fi fi if [ $nthrd ] then if ( which omplace ) ; then - runcmd="$runcmd omplace -nt $nthrd" + runprog="$runprog omplace -nt $nthrd" else - runcmd="$runcmd /usr/bin/env OMP_NUM_THREADS=$nthrd" + runprog="$runprog /usr/bin/env OMP_NUM_THREADS=$nthrd" fi fi fi @@ -1487,7 +1660,7 @@ then if [ $multi -eq 0 ] && [ $coupl = "OASIS" ] then halfnproc=$(($nproc / 2)) - if $runcmd1 -np $halfnproc $path_e/$prgb : -np $halfnproc $path_w/toy_model | tee $ofile + if $runcmd -np $halfnproc $path_e/$prgb : -np $halfnproc $path_w/toy_model | tee $ofile then \rm -f track_i.ww3 \rm -f $prog.inp @@ -1496,7 +1669,7 @@ then exit 1 fi else - if $runcmd $path_e/$prgb | tee $ofile + if $runprog $path_e/$prgb | tee $ofile then \rm -f track_i.ww3 \rm -f $prog.inp @@ -2295,16 +2468,17 @@ then echo " Processing $ifile" echo " Screen output copied to $ofile" + runprog=$runcmd if [ $pmpi ] then if [ $nproc ] then if [ $batchq = "slurm" ] then - runcmd="$runcmd -n $nproc" + runprog="$runprog -n $nproc" else - runcmd="$runcmd -np $nproc" + runprog="$runprog -np $nproc" fi fi fi @@ -2312,7 +2486,7 @@ then then # Add time counter if -T Tstart=`date +"%s.%2N"` fi - if $runcmd $path_e/$prog | tee $ofile + if $runprog $path_e/$prog | tee $ofile then \rm -f $prog.inp \rm -f $prog.nml @@ -2437,16 +2611,17 @@ then \ln -s "$path_i/anl.grbtxt" anl.grbtxt mv -f restart001.ww3 restart.ww3 - + + runprog=$runcmd if [ $pmpi ] then if [ $nproc ] then if [ $batchq = "slurm" ] then - runcmd="$runcmd -n $nproc" + runprog="$runprog -n $nproc" else - runcmd="$runcmd -np $nproc" + runprog="$runprog -np $nproc" fi fi fi @@ -2455,7 +2630,7 @@ then Tstart=`date +"%s.%2N"` fi - if $runcmd $path_e/$prog | tee $ofile + if $runprog $path_e/$prog | tee $ofile then \rm -f $prog.inp \rm -f $prog.nml diff --git a/regtests/ww3_tp2.14/input/switch_OASACM b/regtests/ww3_tp2.14/input/switch_OASACM index 72d4406b7..9fff33b21 100755 --- a/regtests/ww3_tp2.14/input/switch_OASACM +++ b/regtests/ww3_tp2.14/input/switch_OASACM @@ -1 +1 @@ -F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 TIDE COU OASIS OASACM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 COU OASIS OASACM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.14/input/switch_OASICM b/regtests/ww3_tp2.14/input/switch_OASICM index 6d2aff02a..4790b8e9e 100755 --- a/regtests/ww3_tp2.14/input/switch_OASICM +++ b/regtests/ww3_tp2.14/input/switch_OASICM @@ -1 +1 @@ -F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS2 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 TIDE COU OASIS OASICM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS2 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 COU OASIS OASICM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.14/input/switch_OASOCM b/regtests/ww3_tp2.14/input/switch_OASOCM index ab234e3d8..7cb93b56c 100755 --- a/regtests/ww3_tp2.14/input/switch_OASOCM +++ b/regtests/ww3_tp2.14/input/switch_OASOCM @@ -1 +1 @@ -F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT2 WNX1 RWND CRT0 CRX1 TIDE COU OASIS OASOCM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT2 WNX1 RWND CRT0 CRX1 COU OASIS OASOCM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.18/info b/regtests/ww3_tp2.18/info new file mode 100644 index 000000000..164e2febe --- /dev/null +++ b/regtests/ww3_tp2.18/info @@ -0,0 +1,33 @@ +############################################################################# +# # +# ww3_tp2.18 Tidal harmonics on a regular grid # +# # +# Model should be compiled with the switches : # +# # +# F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST4 STAB0 NL0 BT0 DB0 # +# MLIM TR0 BS0 IC0 IS0 REF1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE # +# O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 # +# # +# Remarks : # +# - TIDE switch must be used for tidal harmonics # +# - ww3_prnc run first to create tidal constituents in current.ww3 # +# - current.ww3 must be renamed as current.ww3_tide # +# - ww3_prtide run then to create the current field on the defined date # +# # +# - ww3_prnc and ww3_prtide can be launched with MPI # +# # +# Sample run_test commands : # +# (Note: mpirun commands differ by local system) # +# ./bin/run_test -s TIDE -o netcdf -N ../model ww3_tp2.18 # +# ./bin/run_test -s TIDE_MPI -n 3 -p mpirun -f -o netcdf -N ../model # +# ww3_tp2.18 # +# # +# Mickael Accensi, Apr 2020 # +# Last Mod : Apr 2020 # +# # +# Copyright 2009-2019 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. # +# # +############################################################################# diff --git a/regtests/ww3_tp2.18/input/iro1k.bot b/regtests/ww3_tp2.18/input/iro1k.bot new file mode 100644 index 000000000..0c47a2f5c --- /dev/null +++ b/regtests/ww3_tp2.18/input/iro1k.bot @@ -0,0 +1,3 @@ +-113417 -112542 -111625 -111125 -110958 -109563 -108708 -108542 -107719 -108083 -109250 -110188 -110333 -110583 -110625 -109417 -109083 -108625 -108250 -107708 -108563 -109000 -108417 -107031 -107250 -106708 -105958 -105781 -105875 -106542 -106750 -106792 -106333 -104656 -103042 -102125 -102031 -101542 -100125 -100250 -100250 -101500 -102688 -102792 -103375 -103500 -102333 -102500 -102688 -102667 -102417 -102281 -101583 -101042 -101000 -100917 -100583 -99938 -99458 -99542 -98594 -97375 -98375 -99375 -100719 -100792 -100833 -101563 -101417 -100542 -100938 -100875 -100167 -98938 -98208 -97833 -98031 -98000 -98042 -97813 -96958 -96292 -96375 -96042 -95167 -95188 -94625 -94750 -94094 -92625 -92792 -92406 -92167 -91792 -91469 -90625 -90042 -89583 -89063 -88625 -88292 -87500 -86958 +-113444 -112500 -111833 -111333 -110667 -109875 -109667 -108889 -107542 -107000 -108056 -109667 -110167 -110611 -110083 -109444 -109222 -108292 -108222 -108611 -108250 -107833 -107333 -106083 -107111 -107056 -106222 -106125 -105056 -105167 -106042 -106500 -106111 -105833 -105167 -103833 -103167 -102611 -101667 -100458 -100056 -100389 -101167 -102556 -103444 -103083 -101889 -101444 -102250 -102889 -102500 -102292 -101611 -101000 -100917 -100667 -99944 -99667 -99722 -99167 -97792 -98000 -97889 -97611 -99667 -100389 -101389 -101625 -101833 -100833 -100625 -100778 -100556 -99083 -98278 -98111 -98167 -98444 -98167 -97208 -96944 -97444 -96833 -95444 -95667 -95375 -94833 -95278 -94125 -94056 -93833 -93333 -92778 -92611 -91583 -91389 -91000 -91389 -90875 -90833 -90389 -89083 -87667 +-115444 -113167 -111458 -110889 -109833 -109083 -108722 -108556 -107375 -106944 -108444 -109292 -109056 -109500 -109708 -108944 -108722 -108542 -108278 -108111 -107375 -107222 -107556 -106875 -106667 -106778 -106056 -105833 -105278 -105722 -105583 -106167 -106000 -105875 -105556 -105222 -105042 -103722 -102056 -101208 -100333 -100611 -100792 -101333 -101500 -101917 -101000 -101167 -102292 -102056 -101778 -101917 -101500 -101000 -100667 -100222 -99833 -99750 -99278 -98722 -98375 -98667 -98722 -96833 -98583 -100611 -100667 -100917 -101278 -101278 -100208 -100722 -100389 -99292 -98833 -99000 -98458 -98389 -97778 -96958 -97833 -97778 -96375 -96222 -96389 -95375 -95333 -94833 -94375 -95278 -94833 -94500 -94222 -94056 -92417 -92111 -92056 -92056 -91375 -91500 -90667 -89208 -88222 diff --git a/regtests/ww3_tp2.18/input/iro1k.mask b/regtests/ww3_tp2.18/input/iro1k.mask new file mode 100644 index 000000000..e5dbcf26e --- /dev/null +++ b/regtests/ww3_tp2.18/input/iro1k.mask @@ -0,0 +1,3 @@ +2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 diff --git a/regtests/ww3_tp2.18/input/namelists_IROISE.nml b/regtests/ww3_tp2.18/input/namelists_IROISE.nml new file mode 100644 index 000000000..0a7f5d0c9 --- /dev/null +++ b/regtests/ww3_tp2.18/input/namelists_IROISE.nml @@ -0,0 +1,2 @@ +&MISC FLAGTR = 0 / +END OF NAMELISTS diff --git a/regtests/ww3_tp2.18/input/switch_TIDE b/regtests/ww3_tp2.18/input/switch_TIDE new file mode 100755 index 000000000..11fbbf5a9 --- /dev/null +++ b/regtests/ww3_tp2.18/input/switch_TIDE @@ -0,0 +1 @@ +F90 NOGRB NC4 TRKNC SHRD PR3 UQ FLX0 LN0 ST4 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC0 IS0 REF1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.18/input/switch_TIDE_MPI b/regtests/ww3_tp2.18/input/switch_TIDE_MPI new file mode 100755 index 000000000..b41c333ea --- /dev/null +++ b/regtests/ww3_tp2.18/input/switch_TIDE_MPI @@ -0,0 +1 @@ +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST4 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC0 IS0 REF1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.18/input/ww3_grid.inp b/regtests/ww3_tp2.18/input/ww3_grid.inp new file mode 100644 index 000000000..5bb7d9338 --- /dev/null +++ b/regtests/ww3_tp2.18/input/ww3_grid.inp @@ -0,0 +1,275 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ Grid name (C*30, in quotes) +$ + 'IROISE 1KM' +$ +$ Frequency increment factor and first frequency (Hz) ---------------- $ +$ number of frequencies (wavenumbers) and directions +$ + 1.1 0.0373 32 24 0. +$ +$ Set model flags ---------------------------------------------------- $ +$ - FLDRY Dry run (input/output only, no calculation). +$ - FLCX, FLCY Activate X and Y component of propagation. +$ - FLCTH, FLCK Activate direction and wavenumber shifts. +$ - FLSOU Activate source terms. +$ + F T T T T T +$ +$ Set time steps ----------------------------------------------------- $ +$ - Time step information (this information is always read) +$ maximum global time step, maximum CFL time step for x-y and +$ k-theta, minimum source term time step (all in seconds). +$ + 600. 25. 25. 1. +$ +$ Start of namelist input section ------------------------------------ $ +$ Starting with WAVEWATCH III version 2.00, the tunable parameters +$ for source terms, propagation schemes, and numerics are read using +$ namelists. Any namelist found in the folowing sections up to the +$ end-of-section identifier string (see below) is temporarily written +$ to ww3_grid.scratch, and read from there if necessary. Namelists +$ not needed for the given switch settings will be skipped +$ automatically, and the order of the namelists is immaterial. +$ As an example, namelist input to change SWELLF and ZWND in the +$ Tolman and Chalikov input would be +$ +$ &SIN2 SWELLF = 0.1, ZWND = 15. / +$ +$ Define constants in source terms ----------------------------------- $ +$ +$ Input - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +$ WAM-3 : Namelist SIN1 +$ CINP : Proportionality constant. +$ &SIN1 CINP= 0.25 / +$ +$ Tolman and Chalikov : Namelist SIN2 +$ ZWND : Height of wind (m). +$ SWELLF : swell factor in (2.48). +$ STABSH, STABOF, CNEG, CPOS, FNEG : +$ c0, ST0, c1, c2 and f1 in . (2.63) +$ through (2.65) for definition of +$ effective wind speed (!/STAB2). +$ +$ Nonlinear interactions - - - - - - - - - - - - - - - - - - - - - - - +$ Discrete I.A. : Namelist SNL1 +$ LAMBDA : Lambda in source term. +$ NLPROP : C in sourc term. NOTE : default +$ value depends on other source +$ terms selected. +$ KDCONV : Factor before kd in Eq. (2.24). +$ KDMIN, SNLCS1, SNLCS2, SNLCS3 : +$ Minimum kd, and constants c1-3 +$ in depth scaling function. +$ Exact interactions : Namelist SNL2 +$ IQTYPE : Type of depth treatment +$ 1 : Deep water +$ 2 : Deep water / WAM scaling +$ 3 : Shallow water +$ TAILNL : Parametric tail power. +$ NDEPTH : Number of depths in for which +$ integration space is established. +$ Used for IQTYPE = 3 only +$ Namelist ANL2 +$ DEPTHS : Array with depths for NDEPTH = 3 +$ +$ Dissipation - - - - - - - - - - - - - - - - - - - - - - - - - - - - +$ WAM-3 : Namelist SDS1 +$ CDIS, APM : As in source term. +$ +$ Tolman and Chalikov : Namelist SDS2 +$ SDSA0, SDSA1, SDSA2, SDSB0, SDSB1, PHIMIN : +$ Constants a0, a1, a2, b0, b1 and +$ PHImin. +$ +$ BAJ (adjusted) +$ +$&SIN3 BETAMAX = 1.25 / +$ +$ TEST441b +$ +$&SIN4 BETAMAX = 1.33 / +&SNL1 NLPROP=2.5E7 / +$ +$ &UG EXPFSN = T, UGOBCAUTO = F / +$ +$ Bottom friction - - - - - - - - - - - - - - - - - - - - - - - - - - +$ JONSWAP : Namelist SBT1 +$ GAMMA : As it says. +$ &SBT1 GAMMA = 0.15 / +$ +$ Propagation schemes ------------------------------------------------ $ +$ First order : Namelist PRO1 +$ CFLTM : Maximum CFL number for refraction. +$ +$ UQ with diffusion : Namelist PRO2 +$ CFLTM : Maximum CFL number for refraction. +$ FLSOFT : Flag for 'soft' land boundaries. +$ DTIME : Swell age (s) in garden sprinkler +$ correction. If 0., all diffusion +$ switched off. If small non-zero +$ (DEFAULT !!!) only wave growth +$ diffusion. +$ LATMIN : Maximum latitude used in calc. of +$ strength of diffusion for prop. +$ +$ UQ with averaging : Namelist PRO3 +$ CFLTM : Maximum CFL number for refraction. +$ FLSOFT : Flag for 'soft' land boundaries. +$ WDTHCG : Tuning factor propag. direction. +$ WDTHTH : Tuning factor normal direction. +$ +$ UQ with divergence : Namelist PRO4 +$ CFLTM : Maximum CFL number for refraction. +$ FLSOFT : Flag for 'soft' land boundaries. +$ QTFAC : Tuning factor Eq. (3.41). +$ RSFAC : Tuning factor Eq. (3.42). +$ RNFAC : Tuning factor Eq. (3.43). +$ +$ Miscellaneous ------------------------------------------------------ $ +$ Misc. parameters : Namelist MISC +$ CICE0 : Ice concentration cut-off. +$ CICEN : Ice concentration cut-off. +$ XSEED : Xseed in seeding alg. (!/SEED). +$ FLAGTR : Indicating presence and type of +$ subgrid information : +$ 0 : No subgrid information. +$ 1 : Transparancies at cell boun- +$ daries between grid points. +$ 2 : Transp. at cell centers. +$ 3 : Like 1 with cont. ice. +$ 4 : Like 2 with cont. ice. +$ XP, XR, XFILT +$ Xp, Xr and Xf for the dynamic +$ integration scheme. +$ +$ In the 'Out of the box' test setup we run with sub-grid obstacles +$ and with continuous ice treatment. +$ +&MISC FLAGTR = 0 / +$ +$ Mandatory string to identify end of namelist input section. +$ +END OF NAMELISTS +$ +$ Define grid -------------------------------------------------------- $ +$ Four records containing : +$ 1 NX, NY. As the outer grid lines are always defined as land +$ points, the minimum size is 3x3. +$ 2 Grid increments SX, SY (degr.or m) and scaling (division) factor. +$ If NX*SX = 360., latitudinal closure is applied. +$ 3 Coordinates of (1,1) (degr.) and scaling (division) factor. +$ 4 Limiting bottom depth (m) to discriminate between land and sea +$ points, minimum water depth (m) as allowed in model, unit number +$ of file with bottom depths, scale factor for bottom depths (mult.), +$ IDLA, IDFM, format for formatted read, FROM and filename. +$ IDLA : Layout indicator : +$ 1 : Read line-by-line bottom to top. +$ 2 : Like 1, single read statement. +$ 3 : Read line-by-line top to bottom. +$ 4 : Like 3, single read statement. +$ IDFM : format indicator : +$ 1 : Free format. +$ 2 : Fixed format with above format descriptor. +$ 3 : Unformatted. +$ FROM : file type parameter +$ 'UNIT' : open file by unit number only. +$ 'NAME' : open file by name and assign to unit. +$ +$ Example for longitude-latitude grid (switch !/LLG), for Cartesian +$ grid the unit is meters (NOT km). +$ + 'RECT' T 'NONE' + 103 3 + 0.90 0.60 60.00 + -6.0300 47.6000 1.00 + -0.10 0.30 20 0.001000 1 1 '(....)' NAME '../input/iro1k.bot' +$ Sub-grid information + 25 1 1 '(....)' 'NAME' '../input/iro1k.mask' +$ +$ +$ *** NOTE if this unit number is the same as the previous bottom +$ depth unit number, it is assumed that this is the same file +$ without further checks. *** +$ +$ If the above unit number equals 10, the bottom data is read from +$ this file and follows below (no intermediate comment lines allowed, +$ except between the two fields). +$ +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 5 0 0 0 0 0 +$ 0 0 0 0 0 0 5 0 0 0 0 0 +$ 0 0 0 0 0 0 4 0 0 0 0 0 +$ 0 0 0 0 0 0 4 0 0 0 0 0 +$ 0 0 0 0 0 0 5 0 0 0 0 0 +$ 0 0 0 0 0 0 5 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 5 5 5 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ +$ *** NOTE size of fields is always NX * NY *** +$ +$ Input boundary points ---------------------------------------------- $ +$ An unlimited number of lines identifying points at which input +$ boundary conditions are to be defined. If the actual input data is +$ not defined in the actual wave model run, the initial conditions +$ will be applied as constant boundary conditions. Each line contains: +$ Discrete grid counters (IX,IY) of the active point and a +$ connect flag. If this flag is true, and the present and previous +$ point are on a grid line or diagonal, all intermediate points +$ are also defined as boundary points. +$ +$ 142 86 F +$ 142 130 T +$ 2 130 T +$ 2 2 T +$ 142 2 T +$ 142 6 T +$ +$ Close list by defining point (0,0) (mandatory) +$ +$ 0 0 F +$ Excluded grid points from segment data ( FROM != PART ) +$ First defined as lines, identical to the definition of the input +$ boundary points, and closed the same way. +$ +$ 0 0 F +$ +$ Second, define a point in a closed body of sea points to remove +$ the entire body os sea points. Also close by point (0,0) +$ +$ 0 0 +$ +$ Output boundary points --------------------------------------------- $ +$ Output boundary points are defined as a number of straight lines, +$ defined by its starting point (X0,Y0), increments (DX,DY) and number +$ of points. A negative number of points starts a new output file. +$ Note that this data is only generated if requested by the actual +$ program. Example again for spherical grid in degrees. +$ +$ Pour le finistere +$ +$ Close list by defining line with 0 points (mandatory) +$ + 0. 0. 0. 0. 0 +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.18/input/ww3_grid.nml b/regtests/ww3_tp2.18/input/ww3_grid.nml new file mode 100644 index 000000000..5c60f8bf2 --- /dev/null +++ b/regtests/ww3_tp2.18/input/ww3_grid.nml @@ -0,0 +1,272 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.1 + SPECTRUM%FREQ1 = 0.0373 + SPECTRUM%NK = 32 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLCX = T + RUN%FLCY = T + RUN%FLCTH = T + RUN%FLCK = T + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 600. + TIMESTEPS%DTXY = 25. + TIMESTEPS%DTKTH = 25. + TIMESTEPS%DTMIN = 1. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'IROISE 1KM' + GRID%NML = '../input/namelists_IROISE.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.10 + GRID%DMIN = 0.30 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 103 + RECT%NY = 3 + RECT%SX = 0.90 + RECT%SY = 0.60 + RECT%SF = 60.00 + RECT%X0 = -6.0300 + RECT%Y0 = 47.6000 + RECT%SF0 = 1.00 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = 0.001000 + DEPTH%FILENAME = '../input/iro1k.bot' +/ + +! -------------------------------------------------------------------- ! +! Define the point status map via MASK_NML namelist +! - only for RECT and CURV grids - +! +! * If no mask defined, INBOUND can be used to set active boundaries +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF IDLA IDFM FORMAT FILENAME +! 60 1 1 '(....)' 'GLOB-30M.mask' +! +! * The legend for the input map is : +! -2 : Excluded boundary point (covered by ice) +! -1 : Excluded sea point (covered by ice) +! 0 : Excluded land point +! 1 : Sea point +! 2 : Active boundary point +! 3 : Excluded grid point +! 7 : Ice point +! +! * namelist must be terminated with / +! * definitions & defaults: +! MASK%FILENAME = 'unset' ! filename +! MASK%IDF = 60 ! file unit number +! MASK%IDLA = 1 ! layout indicator +! MASK%IDFM = 1 ! format indicator +! MASK%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&MASK_NML + MASK%FILENAME = '../input/iro1k.mask' +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.18/input/ww3_ounf.inp b/regtests/ww3_tp2.18/input/ww3_ounf.inp new file mode 100644 index 000000000..adfeac6cc --- /dev/null +++ b/regtests/ww3_tp2.18/input/ww3_ounf.inp @@ -0,0 +1,45 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$ -------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 20190201 000000 1800 10000000 +$ +$ Fields requested --------------------------------------------------- $ +$ +$ Output request flags identifying fields as in ww3_shel.inp and +$ section 2.4 of the manual. If the first flag is 'N' then a namelist +$ is read. +$ + N + DPT CUR +$ +$ -------------------------------------------------------------------- $ +$ netCDF version [3,4] +$ and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ swell partitions [0 1 2 3 4 5] +$ variables in the same file [T] or not [F] +$ + 3 3 + 0 1 2 3 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +$ IX and IY ranges. Note that for UNST grids, the IX range +$ is the node range and the IY range is normally [1 1] +$ (but in practice, [1 any number] is accepted as well) +$ + ww3. + 6 + 1 1000000 1 1000000 +$ +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time indicator with S3 +$ characters, and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.18/input/ww3_ounf.nml b/regtests/ww3_tp2.18/input/ww3_ounf.nml new file mode 100644 index 000000000..2a141b910 --- /dev/null +++ b/regtests/ww3_tp2.18/input/ww3_ounf.nml @@ -0,0 +1,55 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '20190201 000000' + FIELD%TIMESTRIDE = '1800' + FIELD%LIST = 'DPT CUR' +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.18/input/ww3_prnc.inp b/regtests/ww3_tp2.18/input/ww3_prnc.inp new file mode 100644 index 000000000..622d8bc2a --- /dev/null +++ b/regtests/ww3_tp2.18/input/ww3_prnc.inp @@ -0,0 +1,48 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Field preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ Mayor types of field and time flag +$ Field types : ICE Ice concentrations. +$ LEV Water levels. +$ WND Winds. +$ WNS Winds (including air-sea temp. dif.) +$ CUR Currents. +$ DAT Data for assimilation. +$ +$ Format types : AI Transfer field 'as is'. (ITYPE 1) +$ LL Field defined on regular longitude-latitude +$ or Cartesian grid. (ITYPE 2) +$ AT AI + tidal analysis +$ +$ - Format type not used for field type 'DAT'. +$ +$ Time flag : If true, time is included in file. +$ Header flag : If true, header is added to file. +$ (necessary for reading, FALSE is used only for +$ incremental generation of a data file.) +$ + 'CUR' 'AT' T T + Z0 SSA MSM MSF MF 2N2 MU2 N2 NU2 M2 S2 K2 MSN2 MN4 M4 MS4 S4 M6 2MS6 M8 +$ +$ +$ +$ Variables to use --------------------------------------------------- $ +$ + latitude longitude + ucur vcur +$ +$ +$ Additional time input ---------------------------------------------- $ +$ If time flag is .FALSE., give time of field in yyyymmdd hhmmss format. +$ +$ 19680606 053000 +$ +$ Define data files -------------------------------------------------- $ +$ The input line identifies the filename using for the forcing field. +$ + '../input/curlev.nc' +$ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.18/input/ww3_prnc.nml b/regtests/ww3_tp2.18/input/ww3_prnc.nml new file mode 100644 index 000000000..382e4e602 --- /dev/null +++ b/regtests/ww3_tp2.18/input/ww3_prnc.nml @@ -0,0 +1,78 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_prnc.nml - Field preprocessor ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the forcing fields to preprocess via FORCING_NML namelist +! +! * only one FORCING%FIELD can be set at true +! * only one FORCING%grid can be set at true +! * tidal constituents FORCING%tidal is only available on grid%asis with FIELD%level or FIELD%current +! +! * namelist must be terminated with / +! * definitions & defaults: +! FORCING%TIMESTART = '19000101 000000' ! Start date for the forcing field +! FORCING%TIMESTOP = '29001231 000000' ! Stop date for the forcing field +! +! FORCING%FIELD%ICE_PARAM1 = F ! Ice thickness (1-component) +! FORCING%FIELD%ICE_PARAM2 = F ! Ice viscosity (1-component) +! FORCING%FIELD%ICE_PARAM3 = F ! Ice density (1-component) +! FORCING%FIELD%ICE_PARAM4 = F ! Ice modulus (1-component) +! FORCING%FIELD%ICE_PARAM5 = F ! Ice floe mean diameter (1-component) +! FORCING%FIELD%MUD_DENSITY = F ! Mud density (1-component) +! FORCING%FIELD%MUD_THICKNESS = F ! Mud thickness (1-component) +! FORCING%FIELD%MUD_VISCOSITY = F ! Mud viscosity (1-component) +! FORCING%FIELD%WATER_LEVELS = F ! Level (1-component) +! FORCING%FIELD%CURRENTS = F ! Current (2-components) +! FORCING%FIELD%WINDS = F ! Wind (2-components) +! FORCING%FIELD%WIND_AST = F ! Wind and air-sea temp. dif. (3-components) +! FORCING%FIELD%ICE_CONC = F ! Ice concentration (1-component) +! FORCING%FIELD%ICE_BERG = F ! Icebergs and sea ice concentration (2-components) +! FORCING%FIELD%DATA_ASSIM = F ! Data for assimilation (1-component) +! +! FORCING%GRID%ASIS = F ! Transfert field 'as is' on the model grid +! FORCING%GRID%LATLON = F ! Define field on regular lat/lon or cartesian grid +! +! FORCING%TIDAL = 'unset' ! Set the tidal constituents [FAST | VFAST | 'M2 S2 N2'] +! -------------------------------------------------------------------- ! +&FORCING_NML + FORCING%FIELD%CURRENTS = T + FORCING%GRID%ASIS = T + FORCING%TIDAL = 'Z0 SSA MSM MSF MF 2N2 MU2 N2 NU2 M2 S2 K2 MSN2 MN4 M4 MS4 S4 M6 2MS6 M8' +/ + +! -------------------------------------------------------------------- ! +! Define the content of the input file via FILE_NML namelist +! +! * input file must respect netCDF format and CF conventions +! * input file must contain : +! -dimension : time, name expected to be called time +! -dimension : longitude/latitude, names can defined in the namelist +! -variable : time defined along time dimension +! -attribute : time with attributes units written as ISO8601 convention +! -attribute : time with attributes calendar set to standard as CF convention +! -variable : longitude defined along longitude dimension +! -variable : latitude defined along latitude dimension +! -variable : field defined along time,latitude,longitude dimensions +! * FILE%VAR(I) must be set for each field component +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%FILENAME = 'unset' ! relative path input file name +! FILE%LONGITUDE = 'unset' ! longitude/x dimension name +! FILE%LATITUDE = 'unset' ! latitude/y dimension name +! FILE%VAR(I) = 'unset' ! field component +! FILE%TIMESHIFT = '00000000 000000' ! shift the time value to 'YYYYMMDD HHMMSS' +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%FILENAME = '../input/curlev.nc' + FILE%LONGITUDE = 'latitude' + FILE%LATITUDE = 'longitude' + FILE%VAR(1) = 'ucur' + FILE%VAR(2) = 'vcur' +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.18/input/ww3_prtide_current.inp b/regtests/ww3_tp2.18/input/ww3_prtide_current.inp new file mode 100644 index 000000000..86df22f50 --- /dev/null +++ b/regtests/ww3_tp2.18/input/ww3_prtide_current.inp @@ -0,0 +1,31 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Field preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ types of field +$ Field types : LEV Water levels. +$ CUR Currents. +$ +$ + 'CUR' +$ +$ List of tidal constituents------------------------------------------ $ +$ + M2 S2 N2 +$ +$ Maximum allowed values ------------------------------------------ $ +$ + Z0 SSA MSF + 1.0 0.5 0.5 +$ +$ Start time step end time + 20190201 000000 1800 20190201 020000 +$ +$ Define data files -------------------------------------------------- $ +$ The input line identifies the filename using for the forcing field. +$ + 'ww3_tide' +$ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.18/input/ww3_shel.inp b/regtests/ww3_tp2.18/input/ww3_shel.inp new file mode 100644 index 000000000..dfaf7c4ad --- /dev/null +++ b/regtests/ww3_tp2.18/input/ww3_shel.inp @@ -0,0 +1,119 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shell input file $ +$ -------------------------------------------------------------------- $ +$ Define input to be used with flag for use and flag for definition +$ as a homogeneous field (first three only); seven input lines. +$ + F F Water levels + T F Currents + F F Winds + F F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ +$ Time frame of calculations ----------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ - Ending time in yyyymmdd hhmmss format. +$ + 20190201 000000 + 20190201 020000 +$ IOSTYP = 0 : No data server processes, direct access output from +$ each process (requirese true parallel file system). +$ 1 : No data server process. All output for each type +$ performed by process that performes computations too. +$ 2 : Last process is reserved for all output, and does no +$ computing. +$ 3 : Multiple dedicated output processes. +$ +$--------------------------------------------------------- + 1 +$-------------------------------------------------------- +$ +$ Define output data ------------------------------------------------- $ +$ Five output types are available (see below). All output types share +$ a similar format for the first input line: +$ - first time in yyyymmdd hhmmss format, output interval (s), and +$ last time in yyyymmdd hhmmss format (all integers). +$ Output is disabled by setting the output interval to 0. +$ +$ Type 1 : Fields of mean wave parameters +$ Standard line and line with flags to activate output fields +$ as defined in section 2.4 of the manual. The second line is +$ not supplied if no output is requested. +$ The raw data file is out_grd.ww3, +$ see w3iogo.ftn for additional doc. +$ +$ + 20190201 000000 1800 20190201 020000 +$ +N +DPT CUR +$ +$ Type 2 : Point output +$ Standard line and a number of lines identifying the +$ longitude, latitude and name (C*10) of output points. +$ The list is closed by defining a point with the name +$ 'STOPSTRING'. No point info read if no point output is +$ requested (i.e., no 'STOPSTRING' needed). +$ The raw data file is out_pnt.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 000000 0 20110903 000000 +$ +$ +$ Type 3 : Output along track. +$ Flags for formatted input files. +$ The data files are track_i.ww3 and +$ track_o.ww3, see w3iotr.ftn for ad. doc. +$ + 20110902 120000 0 20110903 000000 +$ T +$ +$ Type 4 : Restart files (no additional data required). +$ The data file is restartN.ww3, see +$ w3iors.ftn for additional doc. +$ + 20110902 000000 0 20110903 120000 +$ +$ Type 5 : Boundary data (no additional data required). +$ The data file is nestN.ww3, see +$ w3iobp.ftn for additional doc. +$ + 20110902 120000 0 20110903 000000 +$ Type 6 : Partitionned data + 20110902 120000 0 20110903 000000 +$ Type 7 : Coupling +$ 20110902 000000 0 20110903 000000 +$ +$N +$ CHA DPT CUR WND UST HS LM DIR SPR FP DP PHS PTP PDIR PWS TWS WLV ABR UBR TAW CGE WCC T02 T01 TWA FAW TWO USS TUS FOC MSS +$ +$ - Sent fields by ww3: +$ - Ocean model : T0M1 HS DIR BHD TWO UBR FOC TAW LM DRY +$ - Atmospheric model : CUR CHA HS FP +$ +$ CUR CHA HS FP +$ +$ - Received fields by ww3: +$ - Ocean model : SSH CUR DRY +$ - Atmospheric model : WND +$ +$ WND +$ +$ Homogeneous field data --------------------------------------------- $ +$ Homogeneous fields can be defined by a list of lines containing an ID +$ string 'LEV' 'CUR' 'WND', date and time information (yyyymmdd +$ hhmmss), value (S.I. units), direction (current and wind, oceanographic +$ convention degrees)) and air-sea temparature difference (degrees C). +$ 'STP' is mandatory stop string. +$ +$ 'LEV' 20080310 060000 1.0 +$ 'CUR' 20080310 060000 2.0 25. +$ 'WND' 20010701 000000 20. 145. 2.0 +$ 'WND' 19680606 030000 2. 270. -10.0 + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.18/input/ww3_shel.nml b/regtests/ww3_tp2.18/input/ww3_shel.nml new file mode 100644 index 000000000..d79ca00a0 --- /dev/null +++ b/regtests/ww3_tp2.18/input/ww3_shel.nml @@ -0,0 +1,334 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '20190201 000000' + DOMAIN%STOP = '20190201 020000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%CURRENTS = 'T' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'DPT CUR' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '20190201 000000' '1800' '20190201 020000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.8/info b/regtests/ww3_tp2.8/info index 3882c8fc0..5fb140eca 100755 --- a/regtests/ww3_tp2.8/info +++ b/regtests/ww3_tp2.8/info @@ -1,36 +1,22 @@ ############################################################################# # # -# ww3_tp2.8 Test for WW-III, two-dimensional propagation. # +# ww3_tp2.8 Test for WW-III, two-dimensional propagation with current. # # Forcing by boundary conditons on regular lat/lon grid # # This is a very coarse grid of the sea around Brest, France. # -# when using the TIDE switch and changing ww3_shel.inp to activate current # # # # Model should be compiled with the switches : # # # -# !/LN0 !/ST0 !/NL0 !/BT0 !/DB0 !/TR0 !/BS0 !/XX0 # -# Select the 'no source terms' option. # -# !/PRn Selecting one of the propagation schemes. # -# 1: First order. # -# 2: UQ with diffusion term. # -# 3: UQ with averaging (set to zero here). # # !/WNX1 !/WNT1 !/CRX1 !/CRT1 Wind and current interpolation. # -# !/O0 !/O1 !/O2 !/O3 !/O4 !/O5 !/O6 !/O7 Sdt out output options. # # # -# Remarks : # -# # -# - User must select one of available switch inputs: # -# switch_PRn : where n=1,2,3 indicating the propagation scheme # -# switch_PRn_MPI : for parallel run with MPI # # # # Example run_test commands: # # ./bin/run_test -o netcdf ../model ww3_tp2.8 # # ./bin/run_test -o netcdf -N ../model ww3_tp2.8 # -# ./bin/run_test -o netcdf -s TIDE ../model ww3_tp2.8 # # (Note : This regtest recquires NETCDF capability. See w3_make in the # # bin directory for details on required variables) # # # # F. Ardhuin, Aug 2012 # # Ifremer # -# Last Mod : Apr 2015 # +# Last Mod : Apr 2020 # # # ############################################################################# diff --git a/regtests/ww3_tp2.8/input/switch_TIDE b/regtests/ww3_tp2.8/input/switch_TIDE deleted file mode 100755 index 4df6a5932..000000000 --- a/regtests/ww3_tp2.8/input/switch_TIDE +++ /dev/null @@ -1 +0,0 @@ -F90 NOGRB SHRD PR3 UQ FLX2 LN0 ST0 NL0 BT0 DB0 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 TIDE O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_tp2.8/input/switch_TIDE_NC4 b/regtests/ww3_tp2.8/input/switch_TIDE_NC4 deleted file mode 100755 index 4df6a5932..000000000 --- a/regtests/ww3_tp2.8/input/switch_TIDE_NC4 +++ /dev/null @@ -1 +0,0 @@ -F90 NOGRB SHRD PR3 UQ FLX2 LN0 ST0 NL0 BT0 DB0 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 TIDE O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_tp2.8/input/ww3_ounf.inp b/regtests/ww3_tp2.8/input/ww3_ounf.inp index 0f78cc437..16fe2e6fc 100644 --- a/regtests/ww3_tp2.8/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.8/input/ww3_ounf.inp @@ -13,7 +13,7 @@ $ file for a full documentation of field output options. Namelist type $ selection is used here (for alternative F/T flags, see ww3_shel.inp). $ N - DPT HS FP DIR SPR + DPT CUR HS FP DIR SPR $ $--------------------------------------------------------------------- $ $ netCDF version [3,4] diff --git a/regtests/ww3_tp2.8/input/ww3_ounf.nml b/regtests/ww3_tp2.8/input/ww3_ounf.nml index 3c0ab164b..a3768056f 100644 --- a/regtests/ww3_tp2.8/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.8/input/ww3_ounf.nml @@ -34,7 +34,7 @@ FIELD%TIMESTRIDE = '600' FIELD%TIMECOUNT = '100' FIELD%TIMESPLIT = 10 - FIELD%LIST = 'DPT HS FP DIR SPR' + FIELD%LIST = 'DPT CUR HS FP DIR SPR' FIELD%PARTITION = '0 1 2' FIELD%TYPE = 4 / diff --git a/regtests/ww3_tp2.8/input/ww3_outf.inp b/regtests/ww3_tp2.8/input/ww3_outf.inp index b64ef5f9e..b05cdd18a 100755 --- a/regtests/ww3_tp2.8/input/ww3_outf.inp +++ b/regtests/ww3_tp2.8/input/ww3_outf.inp @@ -10,7 +10,7 @@ $ Request flags identifying fields as in ww3_shel input and section 2.4 of the m $ N $ -DPT HS FP DIR SPR +DPT CUR HS FP DIR SPR $ $ Output type ITYPE [0,1,2,3] 3 0 diff --git a/regtests/ww3_tp2.8/input/ww3_shel.inp b/regtests/ww3_tp2.8/input/ww3_shel.inp index eaeb1964f..49dd913f1 100755 --- a/regtests/ww3_tp2.8/input/ww3_shel.inp +++ b/regtests/ww3_tp2.8/input/ww3_shel.inp @@ -9,7 +9,7 @@ $ 3) Winds $ 4) Ice concentrations (cannot be homogeneous). $ F F - F F + T F T T F F Assimilation data : Mean parameters @@ -45,7 +45,7 @@ $ 20080310 000000 600 20080525 000000 $ N -DPT HS FP DIR SPR +DPT CUR HS FP DIR SPR $ $ Type 2 : Point output $ Standard line and a number of lines identifying the diff --git a/regtests/ww3_tp2.8/input/ww3_shel.nml b/regtests/ww3_tp2.8/input/ww3_shel.nml index 15de3a62b..0917236b5 100644 --- a/regtests/ww3_tp2.8/input/ww3_shel.nml +++ b/regtests/ww3_tp2.8/input/ww3_shel.nml @@ -58,6 +58,7 @@ ! INPUT%ASSIM%SPEC2D = 'F' ! -------------------------------------------------------------------- ! &INPUT_NML + INPUT%FORCING%CURRENTS = 'T' INPUT%FORCING%WINDS = 'H' / @@ -238,7 +239,7 @@ ! ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML - TYPE%FIELD%LIST = 'DPT HS FP DIR SPR' + TYPE%FIELD%LIST = 'DPT CUR HS FP DIR SPR' TYPE%POINT%FILE = '../input/points.list' / diff --git a/regtests/ww3_ts4/input_rg_multi/switch b/regtests/ww3_ts4/input_rg_multi/switch index 7f147845c..b54829fa9 100644 --- a/regtests/ww3_ts4/input_rg_multi/switch +++ b/regtests/ww3_ts4/input_rg_multi/switch @@ -1 +1 @@ -F90 NOGRB NC4 TRKNC SHRD PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST +F90 NOGRB NC4 TRKNC SHRD PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST diff --git a/regtests/ww3_ts4/input_rg_multi/switch_MPI b/regtests/ww3_ts4/input_rg_multi/switch_MPI index 87ae57a5c..e72a2112b 100644 --- a/regtests/ww3_ts4/input_rg_multi/switch_MPI +++ b/regtests/ww3_ts4/input_rg_multi/switch_MPI @@ -1 +1 @@ -F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST +F90 NOGRB NOPA NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST diff --git a/regtests/ww3_ts4/input_rg_shel/switch b/regtests/ww3_ts4/input_rg_shel/switch index 7f147845c..b54829fa9 100644 --- a/regtests/ww3_ts4/input_rg_shel/switch +++ b/regtests/ww3_ts4/input_rg_shel/switch @@ -1 +1 @@ -F90 NOGRB NC4 TRKNC SHRD PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST +F90 NOGRB NC4 TRKNC SHRD PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST diff --git a/regtests/ww3_ts4/input_rg_shel/switch_MPI b/regtests/ww3_ts4/input_rg_shel/switch_MPI index 87ae57a5c..ae9b5f8de 100644 --- a/regtests/ww3_ts4/input_rg_shel/switch_MPI +++ b/regtests/ww3_ts4/input_rg_shel/switch_MPI @@ -1 +1 @@ -F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST diff --git a/regtests/ww3_ts4/input_ug/switch b/regtests/ww3_ts4/input_ug/switch index 7f147845c..b54829fa9 100644 --- a/regtests/ww3_ts4/input_ug/switch +++ b/regtests/ww3_ts4/input_ug/switch @@ -1 +1 @@ -F90 NOGRB NC4 TRKNC SHRD PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST +F90 NOGRB NC4 TRKNC SHRD PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST diff --git a/regtests/ww3_ts4/input_ug/switch_MPI b/regtests/ww3_ts4/input_ug/switch_MPI index 87ae57a5c..ae9b5f8de 100644 --- a/regtests/ww3_ts4/input_ug/switch_MPI +++ b/regtests/ww3_ts4/input_ug/switch_MPI @@ -1 +1 @@ -F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 TIDE O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN0 ST0 STAB0 NL0 BT0 DB0 MLIM TR0 BS0 IC2 IS2 REF1 IG1 XX0 WNT2 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST From 3085d9f146cf5150ec11fe2a6cddce5fa8fa180c Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Mon, 25 May 2020 15:45:09 +0200 Subject: [PATCH 43/84] Feature/cflbound (#202) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * Adds optional opt-out for CFL on Boundary Condition * update version for w3iogr * update PATH for matrix add test on openmp for datarmor * manually correct merge conflict * update headers to version 7.08 Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- model/ftn/w3gdatmd.ftn | 7 +++++-- model/ftn/w3iogrmd.ftn | 11 ++++++----- model/ftn/w3profsmd.ftn | 15 ++++++++++----- model/ftn/ww3_grid.ftn | 14 +++++++++----- 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/model/ftn/w3gdatmd.ftn b/model/ftn/w3gdatmd.ftn index 8b2484657..477cd6afc 100644 --- a/model/ftn/w3gdatmd.ftn +++ b/model/ftn/w3gdatmd.ftn @@ -21,7 +21,7 @@ !/ ! J. H. Alves ! !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 05-Jun-2018 | +!/ | Last update : 15-Apr-2020 | !/ +-----------------------------------+ !/ !/ 24-Jun-2005 : Origination. ( version 3.07 ) @@ -92,6 +92,7 @@ !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ 27-Aug-2018 : Add BTBETA parameter ( version 6.06 ) !/ 22-Feb-2020 : Add AIRGB and AIRCMIN ( version 7.06 ) +!/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) !/ !/ !/ Copyright 2009-2013 National Weather Service (NWS), @@ -891,6 +892,7 @@ LOGICAL :: FSREFRACTION = .FALSE. LOGICAL :: FSFREQSHIFT = .FALSE. LOGICAL :: FSSOURCE = .FALSE. + LOGICAL :: FSBCCFL = .FALSE. LOGICAL :: DO_CHANGE_WLV REAL(8) :: SOLVERTHR_STP REAL(8) :: CRIT_DEP_STP @@ -1150,7 +1152,7 @@ !/ !/ Data aliasing for structure SCHM(S) LOGICAL, POINTER :: FSN,FSPSI,FSFCT,FSNIMP,FSTOTALIMP,FSTOTALEXP - LOGICAL, POINTER :: FSREFRACTION, FSFREQSHIFT, FSSOURCE + LOGICAL, POINTER :: FSREFRACTION, FSFREQSHIFT, FSSOURCE, FSBCCFL LOGICAL, POINTER :: DO_CHANGE_WLV REAL(8), POINTER :: SOLVERTHR_STP REAL(8), POINTER :: CRIT_DEP_STP @@ -2381,6 +2383,7 @@ !/IS1 IS1C2 => MPARS(IMOD)%SICPS%IS1C2 ! ! Structure SCHM + FSBCCFL => MPARS(IMOD)%SCHMS%FSBCCFL FSN => MPARS(IMOD)%SCHMS%FSN FSPSI => MPARS(IMOD)%SCHMS%FSPSI FSFCT => MPARS(IMOD)%SCHMS%FSFCT diff --git a/model/ftn/w3iogrmd.ftn b/model/ftn/w3iogrmd.ftn index f369561c3..b325a7a77 100644 --- a/model/ftn/w3iogrmd.ftn +++ b/model/ftn/w3iogrmd.ftn @@ -7,7 +7,7 @@ !/ | H. L. Tolman | !/ ! F. Ardhuin ! !/ | FORTRAN 90 | -!/ | Last update : 20-Aug-2016 | +!/ | Last update : 15-Apr-2020 | !/ +-----------------------------------+ !/ !/ For updates see W3IOGR documentation. @@ -67,7 +67,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERGRD = '2018-09-20' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERGRD = '2020-04-15' CHARACTER(LEN=35), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III MODEL DEFINITION FILE' !/ @@ -83,7 +83,7 @@ !/ | H. L. Tolman | !/ ! F. Ardhuin ! !/ | FORTRAN 90 | -!/ | Last update : 05-Jun-2018 | +!/ | Last update : 15-Apr-2020 | !/ +-----------------------------------+ !/ !/ 14-Jan-1999 : Distributed FORTRAN 77 version. ( version 1.18 ) @@ -145,6 +145,7 @@ !/ (C. Bunney, UKMO) !/ 18-Aug-2018 : S_{ice} IC5 (Q. Liu) ( version 6.06 ) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) +!/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -594,7 +595,7 @@ CASE (UNGTYPE) WRITE (NDSM) & FSN, FSPSI,FSFCT,FSNIMP,FSTOTALIMP,FSTOTALEXP, & - FSREFRACTION, FSFREQSHIFT, FSSOURCE, & + FSBCCFL, FSREFRACTION, FSFREQSHIFT, FSSOURCE, & DO_CHANGE_WLV, SOLVERTHR_STP, CRIT_DEP_STP, & NTRI,COUNTOT, COUNTRI, NNZ, & B_JGS_TERMINATE_MAXITER, & @@ -691,7 +692,7 @@ !/DEBUGIOGR FLUSH(740+IAPROC) READ (NDSM,END=801,ERR=802,IOSTAT=IERR) & FSN, FSPSI,FSFCT,FSNIMP,FSTOTALIMP,FSTOTALEXP, & - FSREFRACTION, FSFREQSHIFT, FSSOURCE, & + FSBCCFL, FSREFRACTION, FSFREQSHIFT, FSSOURCE, & DO_CHANGE_WLV, SOLVERTHR_STP, CRIT_DEP_STP, & NTRI,COUNTOT, COUNTRI, NNZ, & B_JGS_TERMINATE_MAXITER, & diff --git a/model/ftn/w3profsmd.ftn b/model/ftn/w3profsmd.ftn index 36d915317..bc2b6fe42 100644 --- a/model/ftn/w3profsmd.ftn +++ b/model/ftn/w3profsmd.ftn @@ -7,7 +7,7 @@ !/ | Aron Roland | !/ | Fabrice Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 18-Aug-2016 | +!/ | Last update : 15-Apr-2020 | !/ +-----------------------------------+ !/ !/ XX-Nov-2007 : Origination. ( version 3.10 ) @@ -17,6 +17,7 @@ !/ 17-Oct-2013 : Removes boundary nodes from CFL ( version 4.12 ) !/ 15-Dec-2013 : Bug fix for implicit scheme ( version 4.16 ) !/ 18-Aug-2016 : Corrected boundary treatment ( version 4.16 ) +!/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) ! ! 1. Purpose : ! @@ -458,12 +459,13 @@ !/ | and Fabrice Ardhuin | !/ | for use in WWIII | !/ | GPL License | -!/ | Last update : 03-Nov-2011 | +!/ | Last update : 15-Apr-2020 | !/ +-----------------------------------+ !/ !/ 19-Dec-2007 : Origination. ( version 3.13 ) !/ 25-Aug-2011 : Change of method for IOBPD ( version 4.04 ) !/ 03-Nov-2011 : Addition of shoreline reflection ( version 4.04 ) +!/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) !/ !/ ! 1. Purpose : @@ -506,7 +508,8 @@ !/ ------------------------------------------------------------------- / !/ USE W3GDATMD, ONLY : NK, NTH, NTRI, NX, CCON, IE_CELL,POS_CELL, SI, & - IEN, TRIGP, CLATS, MAPSF, IOBPD, IOBP, IOBDP, IOBPA, XYB + IEN, TRIGP, CLATS, MAPSF, IOBPD, IOBP, IOBDP, & + IOBPA, XYB, FSBCCFL !/REF1 USE W3GDATMD, ONLY : REFPARS USE W3WDATMD, ONLY: TIME USE W3ADATMD, ONLY: CG, ITER @@ -610,8 +613,10 @@ END DO ! IE DTMAXEXP = 1E10 ! initialize to large number DO IP = 1, NX - DTMAXEXP = SI(IP)/MAX(DBLE(10.E-10),KKSUM(IP)*IOBDP(IP)) - DTMAXGL = MIN( DTMAXGL, DTMAXEXP) + IF (IOBP(IP) .EQ. 1.OR.FSBCCFL) THEN + DTMAXEXP = SI(IP)/MAX(DBLE(10.E-10),KKSUM(IP)*IOBDP(IP)) + DTMAXGL = MIN( DTMAXGL, DTMAXEXP) + END IF END DO ! IP CFLXY = DBLE(DT)/DTMAXGL REST = ABS(MOD(CFLXY,1.0d0)) diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 2c8e393d6..501ec4c54 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -8,7 +8,7 @@ !/ | J. H. Alves | !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 06-Jun-2018 | +!/ | Last update : 15-Apr-2020 | !/ +-----------------------------------+ !/ !/ 14-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -105,6 +105,7 @@ !/ 27-Aug-2018 : Add WBT parameter ( version 6.06 ) !/ 22-Jan-2020 : Update default values for IS2 ( version 7.05 ) !/ 20-Feb-2020 : Include Romero's dissipation in ST4 ( version 7.06 ) +!/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -774,6 +775,7 @@ LOGICAL :: JGS_USE_JACOBI = .TRUE. LOGICAL :: JGS_SOURCE_NONLINEAR = .FALSE. LOGICAL :: UGOBCAUTO = .FALSE. + LOGICAL :: UGBCCFL = .FALSE. LOGICAL :: EXPFSN = .TRUE. LOGICAL :: EXPFSPSI = .FALSE. LOGICAL :: EXPFSFCT = .FALSE. @@ -867,7 +869,7 @@ ! !/PR3 NAMELIST /PRO3/ CFLTM, WDTHCG, WDTHTH NAMELIST /UNST/ UGOBCAUTO, UGOBCDEPTH, UGOBCFILE, & - EXPFSN, EXPFSPSI, EXPFSFCT, & + UGBCCFL, EXPFSN, EXPFSPSI, EXPFSFCT, & IMPFSN, IMPTOTAL, EXPTOTAL, & IMPREFRACTION, IMPFREQSHIFT, & IMPSOURCE, & @@ -1970,6 +1972,7 @@ ! 6.l Read unstructured data ! initialisation of logical related to unstructured grid UGOBCAUTO = .TRUE. + UGBCCFL = .TRUE. UGOBCDEPTH= -10. UGOBCOK = .FALSE. UGOBCFILE = 'unset' @@ -2687,7 +2690,7 @@ !/SMC AVERG, LvSMC, NBISMC, ISHFT, JEQT, SEAWND !/PR3 WRITE (NDSO,2953) CFLTM, WDTHCG, WDTHTH ! - WRITE (NDSO,2956) UGOBCAUTO, UGOBCDEPTH, TRIM(UGOBCFILE), & + WRITE (NDSO,2956) UGBCCFL, UGOBCAUTO, UGOBCDEPTH,TRIM(UGOBCFILE), & EXPFSN, EXPFSPSI, EXPFSFCT, IMPFSN, EXPTOTAL,& IMPTOTAL, IMPREFRACTION, IMPFREQSHIFT, & IMPSOURCE, SETUP_APPLY_WLV, & @@ -2956,6 +2959,7 @@ END IF END DO + FSBCCFL = UGBCCFL SELECT CASE (UNSTSCHEME) CASE (1) FSN = EXPFSN @@ -5634,8 +5638,8 @@ !/PR3 2953 FORMAT ( ' &PRO3 CFLTM =',F5.2, & !/PR3 ', WDTHCG = ',F4.2,', WDTHTH = ',F4.2,' /') ! - 2956 FORMAT ( ' &UNST UGOBCAUTO =',L3,', UGOBCDEPTH =', F8.3, & - ', UGOBCFILE=',A,','/ & + 2956 FORMAT ( ' &UNST UGBCCFL =',L3,', UGOBCAUTO =',L3, & + ', UGOBCDEPTH =', F8.3,', UGOBCFILE=',A,','/ & ', EXPFSN =',L3,',EXPFSPSI =',L3, & ', EXPFSFCT =', L3,',IMPFSN =',L3,',EXPTOTAL=',L3, & ', IMPTOTAL=',L3,',IMPREFRACTION=', L3, & From 10208f1b430a484458c2ee1c670b573bece8d3e9 Mon Sep 17 00:00:00 2001 From: Dusan Jovic <48258889+DusanJovic-NOAA@users.noreply.github.com> Date: Thu, 16 Jul 2020 08:33:06 -0400 Subject: [PATCH 44/84] Add support for building ww3_multi_esmf library using cmake (#215) * Add support for building ww3_multi_esmf library using cmake. * Change VERSION to 7.00 --- model/esmf/CMakeLists.txt | 107 ++++++++++ model/esmf/cmake/FindESMF.cmake | 105 ++++++++++ model/esmf/cmake/FindNetCDF.cmake | 337 ++++++++++++++++++++++++++++++ model/esmf/run_w3adc.sh | 29 +++ 4 files changed, 578 insertions(+) create mode 100644 model/esmf/CMakeLists.txt create mode 100644 model/esmf/cmake/FindESMF.cmake create mode 100644 model/esmf/cmake/FindNetCDF.cmake create mode 100755 model/esmf/run_w3adc.sh diff --git a/model/esmf/CMakeLists.txt b/model/esmf/CMakeLists.txt new file mode 100644 index 000000000..57d87d038 --- /dev/null +++ b/model/esmf/CMakeLists.txt @@ -0,0 +1,107 @@ +cmake_minimum_required(VERSION 3.15) + +project(ww3nemslib VERSION 7.00 LANGUAGES Fortran) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) + +find_package(NetCDF REQUIRED Fortran) +find_package(MPI REQUIRED) +find_package(ESMF MODULE REQUIRED) + +if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + set(CMAKE_Fortran_FLAGS "-fno-second-underscore -ffree-line-length-none -fconvert=big-endian -O3 -march=native") +elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + set(CMAKE_Fortran_FLAGS "-no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox -xhost -O3") +endif() + +set(SRCS + constants.ftn + w3adatmd.ftn + w3arrymd.ftn + w3cspcmd.ftn + w3dispmd.ftn + w3fldsmd.ftn + w3flx1md.ftn + w3gdatmd.ftn + w3gsrumd.ftn + w3idatmd.ftn + w3initmd.ftn + w3iobcmd.ftn + w3iogomd.ftn + w3iogrmd.ftn + w3iopomd.ftn + w3iorsmd.ftn + w3iosfmd.ftn + w3iotrmd.ftn + w3nmlmultimd.ftn + w3odatmd.ftn + w3parall.ftn + w3partmd.ftn + w3pro3md.ftn + w3profsmd.ftn + w3sbt1md.ftn + w3sdb1md.ftn + w3servmd.ftn + w3snl1md.ftn + w3src4md.ftn + w3srcemd.ftn + w3timemd.ftn + w3triamd.ftn + w3updtmd.ftn + w3uqckmd.ftn + w3wavemd.ftn + w3wdasmd.ftn + w3wdatmd.ftn + wmesmfmd.ftn + wmfinlmd.ftn + wmgridmd.ftn + wminiomd.ftn + wminitmd.ftn + wmiopomd.ftn + wmmdatmd.ftn + wmscrpmd.ftn + wmunitmd.ftn + wmupdtmd.ftn + wmwavemd.ftn + SCRIP/scrip_constants.f + SCRIP/scrip_errormod.f90 + SCRIP/scrip_grids.f + SCRIP/scrip_interface.ftn + SCRIP/scrip_iounitsmod.f90 + SCRIP/scrip_kindsmod.f90 + SCRIP/scrip_netcdfmod.f90 + SCRIP/scrip_remap_conservative.f + SCRIP/scrip_remap_read.f + SCRIP/scrip_remap_vars.f + SCRIP/scrip_remap_write.f + SCRIP/scrip_timers.f +) + +get_filename_component(aux_dir "${CMAKE_CURRENT_SOURCE_DIR}/../aux" ABSOLUTE) +get_filename_component(ftn_dir "${CMAKE_CURRENT_SOURCE_DIR}/../ftn" ABSOLUTE) + +message(STATUS "aux_dir ${aux_dir}") +message(STATUS "ftn_dir ${ftn_dir}") + +add_executable(w3adc ../aux/w3adc.f) + +foreach(src_file ${SRCS}) + STRING(REGEX REPLACE ".ftn" ".F90" gen_src_file ${src_file}) + STRING(REGEX REPLACE "/" "_" gen_log_file ${gen_src_file}) + add_custom_command( + OUTPUT ${gen_src_file} + DEPENDS w3adc ${ftn_dir}/${src_file} + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/run_w3adc.sh ${ftn_dir} ${src_file} > ${gen_log_file}.w3adc.log 2>&1 + COMMENT "Running w3adc ${src_file}") + list(APPEND SRCS_F90 ${gen_src_file}) +endforeach() + +add_library(ww3_multi_esmf STATIC ${SRCS_F90}) + +set(mod_dir ${CMAKE_CURRENT_BINARY_DIR}/mod) +set_target_properties(ww3_multi_esmf PROPERTIES Fortran_MODULE_DIRECTORY ${mod_dir}) + +target_include_directories(ww3_multi_esmf PUBLIC ${mod_dir}) +target_include_directories(ww3_multi_esmf PRIVATE ${ftn_dir} ${ESMF_MOD}) + +target_link_libraries(ww3_multi_esmf PUBLIC esmf NetCDF::NetCDF_Fortran MPI::MPI_Fortran) diff --git a/model/esmf/cmake/FindESMF.cmake b/model/esmf/cmake/FindESMF.cmake new file mode 100644 index 000000000..82b648e08 --- /dev/null +++ b/model/esmf/cmake/FindESMF.cmake @@ -0,0 +1,105 @@ +# - Try to find ESMF +# +# Requires setting ESMFMKFILE to the filepath of esmf.mk. If this is NOT set, +# then ESMF_FOUND will always be FALSE. If ESMFMKFILE exists, then ESMF_FOUND=TRUE +# and all ESMF makefile variables will be set in the global scope. Optionally, +# set ESMF_MKGLOBALS to a string list to filter makefile variables. For example, +# to globally scope only ESMF_LIBSDIR and ESMF_APPSDIR variables, use this CMake +# command in CMakeLists.txt: +# +# set(ESMF_MKGLOBALS "LIBSDIR" "APPSDIR") + + +# Add the ESMFMKFILE path to the cache if defined as system env variable +if (DEFINED ENV{ESMFMKFILE} AND NOT DEFINED ESMFMKFILE) + set(ESMFMKFILE $ENV{ESMFMKFILE} CACHE FILEPATH "Path to ESMF mk file") +endif () + +# Found the mk file and ESMF exists on the system +if (EXISTS ${ESMFMKFILE}) + set(ESMF_FOUND TRUE CACHE BOOL "ESMF mk file found" FORCE) + # Did not find the ESMF mk file +else() + set(ESMF_FOUND FALSE CACHE BOOL "ESMF mk file NOT found" FORCE) + # Best to warn users that without the mk file there is no way to find ESMF + if (NOT DEFINED ESMFMKFILE) + message(FATAL_ERROR "ESMFMKFILE not defined. This is the path to esmf.mk file. \ +Without this filepath, ESMF_FOUND will always be FALSE.") + endif () +endif() + +# Only parse the mk file if it is found +if (ESMF_FOUND) + # Read the mk file + file(STRINGS "${ESMFMKFILE}" esmfmkfile_contents) + # Parse each line in the mk file + foreach(str ${esmfmkfile_contents}) + # Only consider uncommented lines + string(REGEX MATCH "^[^#]" def ${str}) + # Line is not commented + if (def) + # Extract the variable name + string(REGEX MATCH "^[^=]+" esmf_varname ${str}) + # Extract the variable's value + string(REGEX MATCH "=.+$" esmf_vardef ${str}) + # Only for variables with a defined value + if (esmf_vardef) + # Get rid of the assignment string + string(SUBSTRING ${esmf_vardef} 1 -1 esmf_vardef) + # Remove whitespace + string(STRIP ${esmf_vardef} esmf_vardef) + # A string or single-valued list + if(NOT DEFINED ESMF_MKGLOBALS) + # Set in global scope + set(${esmf_varname} ${esmf_vardef}) + # Don't display by default in GUI + mark_as_advanced(esmf_varname) + else() # Need to filter global promotion + foreach(m ${ESMF_MKGLOBALS}) + string(FIND ${esmf_varname} ${m} match) + # Found the string + if(NOT ${match} EQUAL -1) + # Promote to global scope + set(${esmf_varname} ${esmf_vardef}) + # Don't display by default in the GUI + mark_as_advanced (esmf_varname) + # No need to search for the current string filter + break() + endif() + endforeach() + endif() + endif() + endif() + endforeach() + + separate_arguments(ESMF_F90COMPILEPATHS NATIVE_COMMAND ${ESMF_F90COMPILEPATHS}) + foreach (ITEM ${ESMF_F90COMPILEPATHS}) + string(REGEX REPLACE "^-I" "" ITEM "${ITEM}") + list(APPEND tmp ${ITEM}) + endforeach() + set(ESMF_F90COMPILEPATHS ${tmp}) + + add_library(esmf UNKNOWN IMPORTED) + # Look for static library, if not found try dynamic library + find_library(esmf_lib NAMES libesmf.a PATHS ${ESMF_LIBSDIR}) + if(esmf_lib MATCHES "esmf_lib-NOTFOUND") + message(STATUS "Static ESMF library not found, searching for dynamic library instead") + find_library(esmf_lib NAMES esmf_fullylinked PATHS ${ESMF_LIBSDIR}) + if(esmf_lib MATCHES "esmf_lib-NOTFOUND") + message(FATAL_ERROR "Neither the dynamic nor the static ESMF library was found") + else() + message(STATUS "Found ESMF library: ${esmf_lib}") + endif() + set(ESMF_INTERFACE_LINK_LIBRARIES "") + else() + # When linking the static library, also need the ESMF linker flags; strip any leading/trailing whitespaces + string(STRIP "${ESMF_F90ESMFLINKRPATHS} ${ESMF_F90ESMFLINKPATHS} ${ESMF_F90LINKLIBS} ${ESMF_F90LINKOPTS}" ESMF_INTERFACE_LINK_LIBRARIES) + message(STATUS "Found ESMF library: ${esmf_lib}") + endif() + + set_target_properties(esmf PROPERTIES + IMPORTED_LOCATION ${esmf_lib} + INTERFACE_INCLUDE_DIRECTORIES "${ESMF_F90COMPILEPATHS}" + INTERFACE_LINK_LIBRARIES "${ESMF_INTERFACE_LINK_LIBRARIES}") + +endif() diff --git a/model/esmf/cmake/FindNetCDF.cmake b/model/esmf/cmake/FindNetCDF.cmake new file mode 100644 index 000000000..1439ae848 --- /dev/null +++ b/model/esmf/cmake/FindNetCDF.cmake @@ -0,0 +1,337 @@ +# (C) Copyright 2011- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation nor +# does it submit to any jurisdiction. + +# Try to find NetCDF includes and library. +# Supports static and shared libaries and allows each component to be found in sepearte prefixes. +# +# This module defines +# +# - NetCDF_FOUND - System has NetCDF +# - NetCDF_INCLUDE_DIRS - the NetCDF include directories +# - NetCDF_VERSION - the version of NetCDF +# - NetCDF_CONFIG_EXECUTABLE - the netcdf-config executable if found +# - NetCDF_PARALLEL - Boolean True if NetCDF4 has parallel IO support via hdf5 and/or pnetcdf +# - NetCDF_HAS_PNETCDF - Boolean True if NetCDF4 has pnetcdf support +# +# Deprecated Defines +# - NetCDF_LIBRARIES - [Deprecated] Use NetCDF::NetCDF_ targets instead. +# +# +# Following components are available: +# +# - C - C interface to NetCDF (netcdf) +# - CXX - CXX4 interface to NetCDF (netcdf_c++4) +# - Fortran - Fortran interface to NetCDF (netcdff) +# +# For each component the following are defined: +# +# - NetCDF__FOUND - whether the component is found +# - NetCDF__LIBRARIES - the libraries for the component +# - NetCDF__LIBRARY_SHARED - Boolean is true if libraries for component are shared +# - NetCDF__INCLUDE_DIRS - the include directories for specified component +# - NetCDF::NetCDF_ - target of component to be used with target_link_libraries() +# +# The following paths will be searched in order if set in CMake (first priority) or environment (second priority) +# +# - NetCDF_ROOT - root of NetCDF installation +# - NetCDF_PATH - root of NetCDF installation +# +# The search process begins with locating NetCDF Include headers. If these are in a non-standard location, +# set one of the following CMake or environment variables to point to the location: +# +# - NetCDF_INCLUDE_DIR or NetCDF_${comp}_INCLUDE_DIR +# - NetCDF_INCLUDE_DIRS or NetCDF_${comp}_INCLUDE_DIR +# +# Notes: +# +# - Use "NetCDF::NetCDF_" targets only. NetCDF_LIBRARIES exists for backwards compatibility and should not be used. +# - These targets have all the knowledge of include directories and library search directories, and a single +# call to target_link_libraries will provide all these transitive properties to your target. Normally all that is +# needed to build and link against NetCDF is, e.g.: +# target_link_libraries(my_c_tgt PUBLIC NetCDF::NetCDF_C) +# - "NetCDF" is always the preferred naming for this package, its targets, variables, and environment variables +# - For compatibility, some variables are also set/checked using alternate names NetCDF4, NETCDF, or NETCDF4 +# - Environments relying on these older environment variable names should move to using a "NetCDF_ROOT" environment variable +# - Preferred component capitalization follows the CMake LANGUAGES variables: i.e., C, Fortran, CXX +# - For compatibility, alternate capitalizations are supported but should not be used. +# - If no components are defined, all components will be searched +# + +list( APPEND _possible_components C CXX Fortran ) + +## Include names for each component +set( NetCDF_C_INCLUDE_NAME netcdf.h ) +set( NetCDF_CXX_INCLUDE_NAME netcdf ) +set( NetCDF_Fortran_INCLUDE_NAME netcdf.mod ) + +## Library names for each component +set( NetCDF_C_LIBRARY_NAME netcdf ) +set( NetCDF_CXX_LIBRARY_NAME netcdf_c++4 ) +set( NetCDF_Fortran_LIBRARY_NAME netcdff ) + +## Enumerate search components +foreach( _comp ${_possible_components} ) + string( TOUPPER "${_comp}" _COMP ) + set( _arg_${_COMP} ${_comp} ) + set( _name_${_COMP} ${_comp} ) +endforeach() + +set( _search_components C) +foreach( _comp ${${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS} ) + string( TOUPPER "${_comp}" _COMP ) + set( _arg_${_COMP} ${_comp} ) + list( APPEND _search_components ${_name_${_COMP}} ) + if( NOT _name_${_COMP} ) + message(SEND_ERROR "Find${CMAKE_FIND_PACKAGE_NAME}: COMPONENT ${_comp} is not a valid component. Valid components: ${_possible_components}" ) + endif() +endforeach() +list( REMOVE_DUPLICATES _search_components ) + +## Search hints for finding include directories and libraries +foreach( _comp IN ITEMS "_" "_C_" "_Fortran_" "_CXX_" ) + foreach( _name IN ITEMS NetCDF4 NetCDF NETCDF4 NETCDF ) + foreach( _var IN ITEMS ROOT PATH ) + list(APPEND _search_hints ${${_name}${_comp}${_var}} $ENV{${_name}${_comp}${_var}} ) + list(APPEND _include_search_hints + ${${_name}${_comp}INCLUDE_DIR} $ENV{${_name}${_comp}INCLUDE_DIR} + ${${_name}${_comp}INCLUDE_DIRS} $ENV{${_name}${_comp}INCLUDE_DIRS} ) + endforeach() + endforeach() +endforeach() +#Old-school HPC module env variable names +foreach( _name IN ITEMS NetCDF4 NetCDF NETCDF4 NETCDF ) + foreach( _comp IN ITEMS "_C" "_Fortran" "_CXX" ) + list(APPEND _search_hints ${${_name}} $ENV{${_name}}) + list(APPEND _search_hints ${${_name}${_comp}} $ENV{${_name}${_comp}}) + endforeach() +endforeach() + +## Find headers for each component +set(NetCDF_INCLUDE_DIRS) +set(_new_search_components) +foreach( _comp IN LISTS _search_components ) + if(NOT ${PROJECT_NAME}_NetCDF_${_comp}_FOUND) + list(APPEND _new_search_components ${_comp}) + endif() + find_file(NetCDF_${_comp}_INCLUDE_FILE + NAMES ${NetCDF_${_comp}_INCLUDE_NAME} + DOC "NetCDF ${_comp} include directory" + HINTS ${_include_search_hints} ${_search_hints} + PATH_SUFFIXES include include/netcdf + ) + mark_as_advanced(NetCDF_${_comp}_INCLUDE_FILE) + message(DEBUG "NetCDF_${_comp}_INCLUDE_FILE: ${NetCDF_${_comp}_INCLUDE_FILE}") + if( NetCDF_${_comp}_INCLUDE_FILE ) + get_filename_component(NetCDF_${_comp}_INCLUDE_FILE ${NetCDF_${_comp}_INCLUDE_FILE} ABSOLUTE) + get_filename_component(NetCDF_${_comp}_INCLUDE_DIR ${NetCDF_${_comp}_INCLUDE_FILE} DIRECTORY) + list(APPEND NetCDF_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIR}) + endif() +endforeach() +if(NetCDF_INCLUDE_DIRS) + list(REMOVE_DUPLICATES NetCDF_INCLUDE_DIRS) +endif() +set(NetCDF_INCLUDE_DIRS "${NetCDF_INCLUDE_DIRS}" CACHE STRING "NetCDF Include directory paths" FORCE) + +## Find n*-config executables for search components +foreach( _comp IN LISTS _search_components ) + if( _comp MATCHES "^(C)$" ) + set(_conf "c") + elseif( _comp MATCHES "^(Fortran)$" ) + set(_conf "f") + elseif( _comp MATCHES "^(CXX)$" ) + set(_conf "cxx4") + endif() + find_program( NetCDF_${_comp}_CONFIG_EXECUTABLE + NAMES n${_conf}-config + HINTS ${NetCDF_INCLUDE_DIRS} ${_include_search_hints} ${_search_hints} + PATH_SUFFIXES bin Bin ../bin ../../bin + DOC "NetCDF n${_conf}-config helper" ) + message(DEBUG "NetCDF_${_comp}_CONFIG_EXECUTABLE: ${NetCDF_${_comp}_CONFIG_EXECUTABLE}") +endforeach() + +set(_C_libs_flag --libs) +set(_Fortran_libs_flag --flibs) +set(_CXX_libs_flag --libs) +set(_C_includes_flag --includedir) +set(_Fortran_includes_flag --includedir) +set(_CXX_includes_flag --includedir) +function(netcdf_config exec flag output_var) + set(${output_var} False PARENT_SCOPE) + if( exec ) + execute_process( COMMAND ${exec} ${flag} RESULT_VARIABLE _ret OUTPUT_VARIABLE _val) + if( _ret EQUAL 0 ) + string( STRIP ${_val} _val ) + set( ${output_var} ${_val} PARENT_SCOPE ) + endif() + endif() +endfunction() + +## Find libraries for each component +set( NetCDF_LIBRARIES ) +foreach( _comp IN LISTS _search_components ) + string( TOUPPER "${_comp}" _COMP ) + + find_library( NetCDF_${_comp}_LIBRARY + NAMES ${NetCDF_${_comp}_LIBRARY_NAME} + DOC "NetCDF ${_comp} library" + HINTS ${NetCDF_${_comp}_INCLUDE_DIRS} ${_search_hints} + PATH_SUFFIXES lib64 lib ../lib64 ../lib ../../lib64 ../../lib ) + mark_as_advanced( NetCDF_${_comp}_LIBRARY ) + get_filename_component(NetCDF_${_comp}_LIBRARY ${NetCDF_${_comp}_LIBRARY} ABSOLUTE) + set(NetCDF_${_comp}_LIBRARY ${NetCDF_${_comp}_LIBRARY} CACHE STRING "NetCDF ${_comp} library" FORCE) + message(DEBUG "NetCDF_${_comp}_LIBRARY: ${NetCDF_${_comp}_LIBRARY}") + + if( NetCDF_${_comp}_LIBRARY ) + if( NetCDF_${_comp}_LIBRARY MATCHES ".a$" ) + set( NetCDF_${_comp}_LIBRARY_SHARED FALSE ) + set( _library_type STATIC) + else() + list( APPEND NetCDF_LIBRARIES ${NetCDF_${_comp}_LIBRARY} ) + set( NetCDF_${_comp}_LIBRARY_SHARED TRUE ) + set( _library_type SHARED) + endif() + endif() + + #Use nc-config to set per-component LIBRARIES variable if possible + netcdf_config( ${NetCDF_${_comp}_CONFIG_EXECUTABLE} ${_${_comp}_libs_flag} _val ) + if( _val ) + set( NetCDF_${_comp}_LIBRARIES ${_val} ) + if(NOT NetCDF_${_comp}_LIBRARY_SHARED AND NOT NetCDF_${_comp}_FOUND) #Static targets should use nc_config to get a proper link line with all necessary static targets. + list( APPEND NetCDF_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + endif() + else() + set( NetCDF_${_comp}_LIBRARIES ${NetCDF_${_comp}_LIBRARY} ) + if(NOT NetCDF_${_comp}_LIBRARY_SHARED) + message(SEND_ERROR "Unable to properly find NetCDF. Found static libraries at: ${NetCDF_${_comp}_LIBRARY} but could not run nc-config: ${NetCDF_CONFIG_EXECUTABLE}") + endif() + endif() + + #Use nc-config to set per-component INCLUDE_DIRS variable if possible + netcdf_config( ${NetCDF_${_comp}_CONFIG_EXECUTABLE} ${_${_comp}_includes_flag} _val ) + if( _val ) + string( REPLACE " " ";" _val ${_val} ) + set( NetCDF_${_comp}_INCLUDE_DIRS ${_val} ) + else() + set( NetCDF_${_comp}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIR} ) + endif() + + if( NetCDF_${_comp}_LIBRARIES AND NetCDF_${_comp}_INCLUDE_DIRS ) + set( ${CMAKE_FIND_PACKAGE_NAME}_${_arg_${_COMP}}_FOUND TRUE ) + if (NOT TARGET NetCDF::NetCDF_${_comp}) + add_library(NetCDF::NetCDF_${_comp} ${_library_type} IMPORTED) + set_target_properties(NetCDF::NetCDF_${_comp} PROPERTIES + IMPORTED_LOCATION ${NetCDF_${_comp}_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES "${NetCDF_${_comp}_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + endif() + endif() +endforeach() +if(NetCDF_LIBRARIES AND NetCDF_${_comp}_LIBRARY_SHARED) + list(REMOVE_DUPLICATES NetCDF_LIBRARIES) +endif() +set(NetCDF_LIBRARIES "${NetCDF_LIBRARIES}" CACHE STRING "NetCDF library targets" FORCE) + +## Find version via netcdf-config if possible +if (NetCDF_INCLUDE_DIRS) + if( NetCDF_C_CONFIG_EXECUTABLE ) + netcdf_config( ${NetCDF_C_CONFIG_EXECUTABLE} --version _vers ) + if( _vers ) + string(REGEX REPLACE ".* ((([0-9]+)\\.)+([0-9]+)).*" "\\1" NetCDF_VERSION "${_vers}" ) + endif() + else() + foreach( _dir IN LISTS NetCDF_INCLUDE_DIRS) + if( EXISTS "${_dir}/netcdf_meta.h" ) + file(STRINGS "${_dir}/netcdf_meta.h" _netcdf_version_lines + REGEX "#define[ \t]+NC_VERSION_(MAJOR|MINOR|PATCH|NOTE)") + string(REGEX REPLACE ".*NC_VERSION_MAJOR *\([0-9]*\).*" "\\1" _netcdf_version_major "${_netcdf_version_lines}") + string(REGEX REPLACE ".*NC_VERSION_MINOR *\([0-9]*\).*" "\\1" _netcdf_version_minor "${_netcdf_version_lines}") + string(REGEX REPLACE ".*NC_VERSION_PATCH *\([0-9]*\).*" "\\1" _netcdf_version_patch "${_netcdf_version_lines}") + string(REGEX REPLACE ".*NC_VERSION_NOTE *\"\([^\"]*\)\".*" "\\1" _netcdf_version_note "${_netcdf_version_lines}") + set(NetCDF_VERSION "${_netcdf_version_major}.${_netcdf_version_minor}.${_netcdf_version_patch}${_netcdf_version_note}") + unset(_netcdf_version_major) + unset(_netcdf_version_minor) + unset(_netcdf_version_patch) + unset(_netcdf_version_note) + unset(_netcdf_version_lines) + endif() + endforeach() + endif() +endif () + +## Detect additional package properties +netcdf_config(${NetCDF_C_CONFIG_EXECUTABLE} --has-parallel4 _val) +if( NOT _val MATCHES "^(yes|no)$" ) + netcdf_config(${NetCDF_C_CONFIG_EXECUTABLE} --has-parallel _val) +endif() +if( _val MATCHES "^(yes)$" ) + set(NetCDF_PARALLEL TRUE CACHE STRING "NetCDF has parallel IO capability via pnetcdf or hdf5." FORCE) +else() + set(NetCDF_PARALLEL FALSE CACHE STRING "NetCDF has no parallel IO capability." FORCE) +endif() + +## Finalize find_package +include(FindPackageHandleStandardArgs) + +if(NOT NetCDF_FOUND OR _new_search_components) + find_package_handle_standard_args( ${CMAKE_FIND_PACKAGE_NAME} + REQUIRED_VARS NetCDF_INCLUDE_DIRS NetCDF_LIBRARIES + VERSION_VAR NetCDF_VERSION + HANDLE_COMPONENTS ) +endif() + +foreach( _comp IN LISTS _search_components ) + if( NetCDF_${_comp}_FOUND ) + #Record found components to avoid duplication in NetCDF_LIBRARIES for static libraries + set(NetCDF_${_comp}_FOUND ${NetCDF_${_comp}_FOUND} CACHE BOOL "NetCDF ${_comp} Found" FORCE) + #Set a per-package, per-component found variable to communicate between multiple calls to find_package() + set(${PROJECT_NAME}_NetCDF_${_comp}_FOUND True) + endif() +endforeach() + +if( ${CMAKE_FIND_PACKAGE_NAME}_FOUND AND NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY AND _new_search_components) + message( STATUS "Find${CMAKE_FIND_PACKAGE_NAME} defines targets:" ) + message( STATUS " - NetCDF_VERSION [${NetCDF_VERSION}]") + message( STATUS " - NetCDF_PARALLEL [${NetCDF_PARALLEL}]") + foreach( _comp IN LISTS _new_search_components ) + string( TOUPPER "${_comp}" _COMP ) + message( STATUS " - NetCDF_${_comp}_CONFIG_EXECUTABLE [${NetCDF_${_comp}_CONFIG_EXECUTABLE}]") + if( ${CMAKE_FIND_PACKAGE_NAME}_${_arg_${_COMP}}_FOUND ) + get_filename_component(_root ${NetCDF_${_comp}_INCLUDE_DIR}/.. ABSOLUTE) + if( NetCDF_${_comp}_LIBRARY_SHARED ) + message( STATUS " - NetCDF::NetCDF_${_comp} [SHARED] [Root: ${_root}] Lib: ${NetCDF_${_comp}_LIBRARY} ") + else() + message( STATUS " - NetCDF::NetCDF_${_comp} [STATIC] [Root: ${_root}] Lib: ${NetCDF_${_comp}_LIBRARY} ") + endif() + endif() + endforeach() +endif() + +foreach( _prefix NetCDF NetCDF4 NETCDF NETCDF4 ${CMAKE_FIND_PACKAGE_NAME} ) + set( ${_prefix}_INCLUDE_DIRS ${NetCDF_INCLUDE_DIRS} ) + set( ${_prefix}_LIBRARIES ${NetCDF_LIBRARIES}) + set( ${_prefix}_VERSION ${NetCDF_VERSION} ) + set( ${_prefix}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_FOUND} ) + set( ${_prefix}_CONFIG_EXECUTABLE ${NetCDF_CONFIG_EXECUTABLE} ) + set( ${_prefix}_PARALLEL ${NetCDF_PARALLEL} ) + + foreach( _comp ${_search_components} ) + string( TOUPPER "${_comp}" _COMP ) + set( _arg_comp ${_arg_${_COMP}} ) + set( ${_prefix}_${_comp}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_${_arg_comp}_FOUND} ) + set( ${_prefix}_${_COMP}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_${_arg_comp}_FOUND} ) + set( ${_prefix}_${_arg_comp}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_${_arg_comp}_FOUND} ) + + set( ${_prefix}_${_comp}_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + set( ${_prefix}_${_COMP}_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + set( ${_prefix}_${_arg_comp}_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + + set( ${_prefix}_${_comp}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIRS} ) + set( ${_prefix}_${_COMP}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIRS} ) + set( ${_prefix}_${_arg_comp}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIRS} ) + endforeach() +endforeach() diff --git a/model/esmf/run_w3adc.sh b/model/esmf/run_w3adc.sh new file mode 100755 index 000000000..bef344bf4 --- /dev/null +++ b/model/esmf/run_w3adc.sh @@ -0,0 +1,29 @@ +#!/bin/bash +set -eux + +if [ $# -ne 2 ]; then + echo "Error in run_w3adc.sh" + exit 1 +fi + +ftn_dir=$1 +filename=$2 + +switches=$(cat ${ftn_dir}/../esmf/switch | tr '\n' ' ') + +extension="${filename##*.}" +basename="${filename%.*}" +inputname="${filename//\//_}.input" + +mkdir -p $( dirname ${filename} ) + +if [[ $extension == "ftn" ]]; then + echo "0 0" > ${inputname} + echo "'${ftn_dir}/${filename}' '${basename}.F90'" >> ${inputname} + echo "'${switches}'" >> ${inputname} + ./w3adc < ${inputname} +else + cp ${ftn_dir}/${filename} ${filename} +fi + +echo "Done running w3adc for ${filename}" From ca406df833c2af10cfeab8ca5343c27af6e8e8f9 Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Mon, 3 Aug 2020 23:09:14 -0400 Subject: [PATCH 45/84] Remove old NCEP platforms (#233) * removing old NCEP platforms * remove old NCEP platforms from cmplr.env * removing theia and phase2 from esmf makefile and w3_setup --- model/bin/cmplr.env | 4 +- model/bin/comp.theia | 211 ----------------------------------- model/bin/comp.wcoss_phase2 | 211 ----------------------------------- model/bin/link.theia | 214 ----------------------------------- model/bin/link.wcoss_phase2 | 216 ------------------------------------ model/bin/w3_setup | 6 +- model/esmf/Makefile | 4 +- 7 files changed, 6 insertions(+), 860 deletions(-) delete mode 100755 model/bin/comp.theia delete mode 100755 model/bin/comp.wcoss_phase2 delete mode 100755 model/bin/link.theia delete mode 100755 model/bin/link.wcoss_phase2 diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index a70d604c7..ab30e9f12 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -109,8 +109,8 @@ fi if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$cmplr" == "intel_prof" ] || \ [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || [ "$cmplr" == "so_intel_prof" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || [ "$cmplr" == "datarmor_intel_prof" ] || \ - [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ - [ "$cmplr" == "theia" ] || [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] ; then + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ + [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/model/bin/comp.theia b/model/bin/comp.theia deleted file mode 100755 index afb5a6043..000000000 --- a/model/bin/comp.theia +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 12 on Xeon Westmere # -# - On zeus the -list option slows down the compilation time by an order # -# of magnitude. For this section 1.c is added. # -# # -# Hendrik L. Tolman # -# June 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list=' -list' - list= - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - opt="-c $list -O3 -assume byterecl -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" -# opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" - - if [ "$name" != 'ww3_gspl' ] - then - opt="$opt -convert big_endian" - fi - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp=ifort - fi - - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -qopenmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.wcoss_phase2 b/model/bin/comp.wcoss_phase2 deleted file mode 100755 index afb5a6043..000000000 --- a/model/bin/comp.wcoss_phase2 +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 12 on Xeon Westmere # -# - On zeus the -list option slows down the compilation time by an order # -# of magnitude. For this section 1.c is added. # -# # -# Hendrik L. Tolman # -# June 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list=' -list' - list= - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - opt="-c $list -O3 -assume byterecl -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" -# opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" - - if [ "$name" != 'ww3_gspl' ] - then - opt="$opt -convert big_endian" - fi - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp=ifort - fi - - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -qopenmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/link.theia b/model/bin/link.theia deleted file mode 100755 index c29f0275b..000000000 --- a/model/bin/link.theia +++ /dev/null @@ -1,214 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 12 on nehalem. # -# processor. # -# # -# Hendrik L. Tolman # -# February 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-O3 -ip -o $prog" -# opt="-O3 -xSSE4.2 -ip -o $prog" -# opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" -# opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp='ifort -lmpi' - fi -# opt="-O3 -o $prog" - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -qopenmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - case $prog in - 'ww3_grib' ) libs="${libs} ${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" ;; - * ) libs="${libs}" ;; - esac - - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.wcoss_phase2 b/model/bin/link.wcoss_phase2 deleted file mode 100755 index 57b258d95..000000000 --- a/model/bin/link.wcoss_phase2 +++ /dev/null @@ -1,216 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 12 on nehalem. # -# processor. # -# # -# Hendrik L. Tolman # -# February 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-O3 -ip -o $prog" -# opt="-O3 -xSSE4.2 -ip -o $prog" -# opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" -# opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp='ifort -lmpi' - fi -# opt="-O3 -o $prog" - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -qopenmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - -# NCEP grib creation - if [ "$ncep_grib_compile" = 'yes' ] - then -# GRIB libraries for this one - opt="$opt -convert big_endian -assume byterecl -prec-div -prec-sqrt -ip" - libs="$libs ${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/w3_setup b/model/bin/w3_setup index 2010a62b2..9a36057b4 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -414,9 +414,8 @@ then [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ - [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || \ @@ -440,9 +439,8 @@ then [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "theia" ] || [ "$cmplr" == "wcoss_cray" ] || \ [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ - [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || \ diff --git a/model/esmf/Makefile b/model/esmf/Makefile index 4043663fd..d86cfb22f 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -35,9 +35,9 @@ ifeq ($(WW3_COMP),Portland) else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","pgi" "datarmor_pgi" "datarmor_pgi_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -byteswapio # intel -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","theia" "Intel" "hera" "orion")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","Intel" "hera" "orion")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_phase2" "wcoss_cray" "wcoss_dell_p3")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_cray" "wcoss_dell_p3")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","intel" "datarmor_intel" "datarmor_intel_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian From b3eec25a90d6ba16b87f5cdb3c03938f895175dd Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Tue, 4 Aug 2020 05:11:30 +0200 Subject: [PATCH 46/84] Manual/st4 romero (#234) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * update manual for ST4 and add a regtest T700 Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- manual/eqs/ST4.tex | 173 +++++++++----- manual/manual.bib | 12 + model/ftn/w3sis2md.ftn | 2 - model/ftn/w3src4md.ftn | 3 +- regtests/bin/matrix.base | 1 + regtests/ww3_ts1/info | 50 ++-- regtests/ww3_ts1/input/namelists_ST4_T700.nml | 4 + regtests/ww3_ts1/input/ww3_grid_ST4_T700.nml | 225 ++++++++++++++++++ 8 files changed, 382 insertions(+), 88 deletions(-) create mode 100644 regtests/ww3_ts1/input/namelists_ST4_T700.nml create mode 100644 regtests/ww3_ts1/input/ww3_grid_ST4_T700.nml diff --git a/manual/eqs/ST4.tex b/manual/eqs/ST4.tex index 0904ca2f9..624ac6af8 100644 --- a/manual/eqs/ST4.tex +++ b/manual/eqs/ST4.tex @@ -1,23 +1,26 @@ \vsssub -\subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \label{sec:ST4} +\subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Saturation-based dissipation} \label{sec:ST4} \vsssub -\opthead{ST4}{\ws}{F. Ardhuin} +\opthead{ST4}{\ws}{F. Ardhuin, J.-F. Filipot \& L. Romero} \noindent This family of parameterizations uses a positive part of the wind input taken from WAM cycle 4 with an ad hoc reduction of $u_\star$, implemented in order to allow a balance with a saturation-based dissipation that uses different options for -a cumulative term. This correction -also reduces the drag coefficient at high winds. This is done by reducing the -wind input for high frequencies and high winds. -Many different adjustments can be made by changing the namelist parameters. A few successful combinations +a cumulative term. There are three main options for defining the saturation and the cumulative term. Chosing one or the other is done with the {\F SDSBCHOICE} parameter, with {\F SDSBCHOICE=1} for \cite{art:Aea10}, {\F SDSBCHOICE=2} for \cite{Filipot&Ardhuin2012}, and {\F SDSBCHOICE=3} for \cite{Romero2019}. That last options uses a saturation that is defined from the local spectral density, and thus gives zero dissipation for directions where the threshold is not reached, leading to much broader directional spectra. Also the stronger bimodality is achieved by having a strong modulation effect as a cumulative term. + +Many other adjustments can be made by changing the namelist parameters. A few successful combinations are given by tables \ref{tab:ST4_parSIN} and \ref{tab:ST4_parSDS}, with results described by \citep{art:RA13,art:SAG16}. Further calibration to any particular wind field should be done for best performance. Guidance for this is given by \cite{Stopa2018}. %We also note that the particular %set of parameters T400 corresponds to setting IPHYS=1 in the ECWAM code cycle 45R2, with a few differences %related to the fact that precomputed stress tables have now been removed from ECWAM. +\vsssub +\textbf{Wind input and swell dissipation} +\vsssub + The reduction of $u_\star$ in eq. (\ref{eq:SinWAM4}) is obtained by replacing it with $u_\star '(k)$ defined for each @@ -182,17 +185,27 @@ \subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \l $s_3 > 0$, $\cS_{out}$ is applied to the entire spectrum and not just the swell. -The dissipation term is parameterized from the wave spectrum saturation, following the general ideas of \cite{art:Phi85}, -which were initially explored in a numerical modeling framework by \cite{art:AB03}. However, using a saturation parameterization -only makes sense when the spectrum is smooth. In general, going from the spectral space to the physical space requires + +\vsssub +\textbf{Wave breaking and ocean turbulence effects} +\vsssub + + +The dissipation term is parameterized from the wave spectrum saturation, following the general ideas of \cite{art:Phi85}. +%which were initially explored in a numerical modeling framework by \cite{art:AB03}. +The saturation spectrum is +\begin{equation} +B\left(k,\theta\right)= \sigma k^3 N(k,\theta) \label{defB}, +\end{equation} +and corresponds to a dimensionless form of the surface elevation spectrum. In general, going from the spectral space to the physical space requires integrating the saturation over a finite spectral band in wavenumber and direction to compute the breaking probability and then deconvolve this integral to obtain a spectral dissipation rate. Because such operations would be too time consuming we have -implemented two approaches. One uses on integration over directions only \citep{art:Aea10}, while the other uses an integration over frequency -bands \citep{Filipot&Ardhuin2012}. These are activated by different namelist parameters, see e.g. T471 for the first approach and T500 for the second. +implemented three approaches. One uses on integration over directions only \citep{art:Aea10}, while the second uses an integration over frequency +bands \citep{Filipot&Ardhuin2012}, and the last actually uses the local value of $B$ without integration at all. Using one or the other version activated by the namelist parameter {\F SDSBCHOICE }. Because the directional wave spectra were too narrow when using a saturation spectrum integrated over the full circle \citep{art:AL06}, -\citep{art:Aea10} restricted over a sector of half-width $\Delta_\theta$, +\citet{art:Aea10} restricted over a sector of half-width $\Delta_\theta$, \begin{equation} B'\left(k,\theta\right)= \int_{\theta-\Delta_\theta}^{\theta+\Delta_\theta} \sigma k^3 cos^{\mathrm{sB}}\left(\theta- @@ -203,16 +216,16 @@ \subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \l direction will typically produce less dissipation than a sea state with all the energy radiated in the same direction. -Based on recent analysis by \cite{Guimaraes2018} and \cite{Peureux&al.2019}, this saturation is enhanced by a factor that represents +Based on recent analysis by \cite{Guimaraes2018} and \cite{Peureux&al.2019}, this saturation is enhanced by a factor $M_L$ that represents the effect of long waves on short waves \begin{equation} -1+M_\theta \sqrt{\mathrm{mss}_\theta} + N_\theta \sqrt{\mathrm{nss}_\theta} \label{defFACSAT}. +M_l(k,\theta)=1+M_\theta \sqrt{\mathrm{mss}(k,\theta)} + N_\theta \sqrt{\mathrm{nss}(k,\theta)} \label{defFACSAT}. \end{equation} where $M_\theta$ is twice the modulation transfer function for short wave steepness, with $M_\theta=8$ when following the simplified theory by \cite{art:LHS60} and using the root mean square enhancement of $B$ over a long wave cycle. $N_\theta$ is an additional straining factor due to the instability of the wave action envelope of short waves -propagating in the direction close to that of the long wave \citep{Peureux&al.2019}. The squared slopes $\mathrm{mss}_\theta$ is -the mean square slope in direction $\theta$, wheras $\mathrm{nss}_\theta$ is a slope of long waves propagating in a narrow window $\pm \delta_\theta$, +propagating in the direction close to that of the long wave \citep{Peureux&al.2019}. The squared slopes $\mathrm{mss}(k,\theta)$ is +the mean square slope in direction $\theta$, wheras $\mathrm{nss}(k,\theta)$ is a slope of long waves propagating in a narrow window $\pm \delta_\theta$, around the short wave direction $\theta$. We finally define our dissipation term as the sum of the saturation-based term @@ -220,10 +233,10 @@ \subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \l \begin{eqnarray} \cS_{ds}(k,\theta)& =& \sigma \frac{C_{\mathrm{ds}}^{\mathrm{sat}}}{B^2_r} \left[ \delta_d -\max\left\{ B\left(k\right) - +\max\left\{ M_l(k,\theta) B\left(k\right) - B_r,0\right\}^2 \right. \nonumber \\ - & & + \left(1-\delta_d \right) \left. \max\left\{B'\left(k,\theta \right)- B_r + & & + \left(1-\delta_d \right) \left. \max\left\{ M_L(k,\theta) B'\left(k,\theta \right)- B_r ,0\right\}^2\right]N(k,\theta) \nonumber \\ & & + \cS_{\mathrm{bk,cu}}(k,\theta) + \cS_{\mathrm{turb}}(k,\theta) \label{Sds_all}. \end{eqnarray} @@ -264,6 +277,7 @@ \subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \l considered that several waves (of different scales) may be present at the same place and time. This effect is corrected simply dividing $P$ by 2. + With this approach the spectral density of crest length (breaking or not) per unit surface $l(\mathbf{k})$ such that $\int l(\mathbf{k}) \mathrm{d}k_x \mathrm{d}k_y$, we take @@ -271,11 +285,43 @@ \subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \l l(\mathbf{k})= 1/(2\pi^2 k), \end{equation} and the spectral density of breaking crest length per unit surface is -$\Lambda(\mathbf{k})=l(\mathbf{k})P(\mathbf{k})$. Assuming that any breaking +$\Lambda(\mathbf{k})=l(\mathbf{k})P(\mathbf{k})$. + + +Finally the last option for the ST4 implementation of a saturation-based dissipation is as generalization +of the parameterization by \citet{Romero2019}, giving some flexibility in the definition of the modulation +term, this is activated by setting {\F SDSBCHOICE = 3}. In this case the breaking crest density for wavenumber vector +$\mathbf{k}$ is a function of the saturation only for the same wavenumber, $B(\mathbf{k})$, with no integration in direction +or frequency (which would be problematic if applied ot monochromatic wave spectra), but a strong modulation $M_L$ by long waves +and a wind-dependent correction $M_W$ +\begin{equation} +\Lambda (\mathbf{k}) = \frac{1}{k} \exp \left(-\frac{B_{\mathbf{r}}}{M_l(\mathbf{k}) B(\mathbf{k})}\right) M_L(\mathbf{k}) M_W(k). +\end{equation} +where the wind factor is, +\begin{equation} + M_W(k)=\left( 1+ D_W \max(1,k/k_0) \right) / (1+D_W), +\end{equation} +where $k_0=g (3/ 28 u_\star)^2$, and $D_W$ was adjusted to 0.9 when using the DIA, and $D_W=2$ for the exact nonlinear interaction. +The long wave modulation is either applied to $B$ (if $N_\theta > 0$) and takes the form $ M_l(k,\theta)$ given above, +or, as done in \cite{Romero2019} the modulation is applied to $\Lambda$ and takes the form, +\begin{equation} + M_L(k,\theta)=\left( 1+ M_\Lambda \sqrt{\mathrm{mss}'(k,\theta)} \right)^{1.5}. +\end{equation} +In that expression, the cumulated slope $\mathrm{mss}'$ is either $\mathrm{mss}(k,\theta)$ or, if $N_\theta=0$, it is forced to have a $\cos^2 (\theta-\theta_w)$ variation, +with $\theta_w$ the direction of the mean dominant waves (which is independant of $k$). In \cite{Romero2019} this strong $\cos^2$ directional dependency of $\Lambda$ is key for producing +strong bimodal spectra, and it may be a compensation for the isotropic dissipation rate. Indeed, the full source term for {\F SDSBCHOICE = 3} reads +\begin{eqnarray} +\cS_{ds}(k,\theta)= \frac{C_{\mathrm{ds}}^{\mathrm{sat}} (\sqrt{B(k)}-\sqrt{B_T} )^2.5}{g^2} \Lambda (k,\theta) c^5 + \cS_{\mathrm{bk,cu}}(k,\theta) + \cS_{\mathrm{turb}}(k,\theta) \label{Sds_all}. \nonumber \\ +\end{eqnarray} +where it should be noted that the saturation used in the dissipation rate $b=C_{\mathrm{ds}}^{\mathrm{sat}} (\sqrt{B(k)}-\sqrt{B_T} )^2.5/{g^2}$ is integrated over direcitons. and uses a true threshold $B_T$ that is different from the $B_r$ in the expression of $\Lambda$. +Also, the generalization of \cite{Romero2019} allows to use a modulation of $B$ or $\Lambda$ and offers different options for the directional distribution of this modulation. Also, this breaking term can be combined with the cumulative term of \cite{art:Aea10} and the wave-turbulence interaction term of \citet{art:AJ06}. + +For all three choices of {\F SDSBCHOICE}, the additional cumulative and wave-turbulence interaction terms are computed in the same way. +Assuming that any breaking wave instantly dissipates all the energy of all waves with frequencies higher than a factor $r_{\mathrm{cu}}$ or more, the cumulative dissipation rate is simply given by the rate at which these shorter waves are taken over by larger -breaking waves, times the spectral density, namely +breaking waves, times the spectral density, namely \begin{equation} \cS_{\mathrm{bk,cu}}(k,\theta) = -C_{\mathrm{cu}} N \left(k,\theta\right) \int_{f' < r_{\mathrm{cu}} f } \Delta_C \Lambda(\mathbf{k'}) \mathrm{d\mathbf{k'}}, \label{Sds_cu1} @@ -317,57 +363,62 @@ \subsubsection{~$S_{\mathrm{in}} + S_{\mathrm{ds}}$: Ardhuin et al. 2010 ...} \l \begin{landscape} \begin{table} \begin{center} -%\begin{tabular}{|l|c|c|c|c|c|c|c|} \hline \hline -%Par. & WWATCH var. & namelist & T471 & T400/$I_{\mathrm{phys}}=1$& T405 & T500 & T601 \\ +%\begin{tabular}{|l|c|c|c|c|c|c|c|c|} \hline \hline +%Par. & WWATCH var. & namelist & T471 & T400/$I_{\mathrm{phys}}=1$& T405 & T500 & T601 & T700 \\ %\hline -%% $p$ & WNMEANP & SDS4 & 0.5 & 0.5 & 0.5 & 0.5 \\ -%% $p_{\mathrm{tail}}$ & WNMEANPTAIL & SDS4 & 0.5 & 0.5 & 0.5 & 0.5 \\ -% $f_{\mathrm{FM}}$ & FXFM3 & SDS4 & 2.5 & 2.5 & 2.5 &\textbf{9.9} & 5 \\ -% & SDSC1 & SDS4 & 0 & 0 & 0 &\textbf{1.0} & 0 \\ -% $C_{\mathrm{ds}}^{\mathrm{sat}}$ & SDSC2 & SDS4 &$-2.2\X^{-5}$&$-2.2\X^{-5}$ &$-2.2\X^{-5}$ &\textbf{0.0} &$-2.2\X^{-5}$ \\ -% $C_{\mathrm{ds}}^{\mathrm{BCK}}$ & SDSBCK & SDS4 & 0 & 0 & 0 &\textbf{0.185}& 0 \\ -% $C_{\mathrm{ds}}^{\mathrm{HCK}}$ & SDSHCK & SDS4 & 0 & 0 & 0 &\textbf{1.5} & 0 \\ -% $\Delta_\theta$ & SDSDTH & SDS4 & 80 & 80 & 80 & 80 & 80 \\ -% $\delta_\theta$ & SDSSTRAINA & SDS4 & 0 & 0 & 0 & 0 & \textbf{15} \\ -% $M_\theta$ & SDSSTRAIN & SDS4 & 0 & 0 & 0 & 0 & \textbf{10} \\ -% $N_\theta$ & SDSSTRAIN2 & SDS4 & 0 & 0 & 0 & 0 & \textbf{20} \\ -% $B_r$ & SDSBR & SDS4 & 0.0009 & 0.0009 &\textbf{0.00085} & 0.0009 & 0.0009 \\ -% $C_{\mathrm{cu}}$ & SDSCUM & SDS4 & -0.40344 & \textbf{0.0} & \textbf{0.0} &-0.40344 &-0.40344 \\ -% ${\mathrm{s_B}}$ & SDSCOS &SDS4 & 2.0 & 2.0 & \textbf{0.0} & 2.0 & 2.0 \\ -% $B_0$ & SDSC4 & SDS4 & 1.0 & 1.0 & 1.0 & 1.0 & 1.0 \\ -% $p^{\mathrm{sat}}$ & SDSP & SDS4 & 2.0 & 2.0 & 2.0 & 2.0 & 2.0 \\ -% $C_{\mathrm{turb}}$ & SDSC5 & SDS4 & 0.0 & 0.0 & 0.0 & 0.0 & \textbf{1.0} \\ -% $\delta_d$ & SDSC6 & SDS4 & 0.3 & 0.3 & 0.3 & 0.3 &0.3 \\ -% $C$ & NLPROP & SNL1 & $2.5\X^7$ & $\mathbf{2.7\X^7}$ &$\mathbf{2.7\X^7}$& $2.5\X^7$ & $2.5\X^7$ \\ +% & SDSBCHOICE & SDS4 & 1 & 1 & 1 & \textbf{2} & 1 & \textbf{3} \\ +%% $p$ & WNMEANP & SDS4 & 0.5 & 0.5 & 0.5 & 0.5 \\ +%% $p_{\mathrm{tail}}$ & WNMEANPTAIL & SDS4 & 0.5 & 0.5 & 0.5 & 0.5 \\ +% $f_{\mathrm{FM}}$ & FXFM3 & SDS4 & 2.5 & 2.5 & 2.5 &\textbf{9.9} & 5 & \textbf{20} \\ +% & SDSC1 & SDS4 & 0 & 0 & 0 &\textbf{1.0} & 0 & \\ +% $C_{\mathrm{ds}}^{\mathrm{sat}}$ & SDSC2 & SDS4 &$-2.2\X^{-5}$&$-2.2\X^{-5}$ &$-2.2\X^{-5}$ &\textbf{0.0} &$-2.2\X^{-5}$& \textbf{-3.8} \\ +% $C_{\mathrm{ds}}^{\mathrm{BCK}}$ & SDSBCK & SDS4 & 0 & 0 & 0 &\textbf{0.185}& 0 & \\ +% $C_{\mathrm{ds}}^{\mathrm{HCK}}$ & SDSHCK & SDS4 & 0 & 0 & 0 &\textbf{1.5} & 0 & \\ +% $\Delta_\theta$ & SDSDTH & SDS4 & 80 & 80 & 80 & 80 & 80 & \\ +% $\delta_\theta$ & SDSSTRAINA & SDS4 & 0 & 0 & 0 & 0 & \textbf{15} & \\ +% $M_\theta$ & SDSSTRAIN & SDS4 & 0 & 0 & 0 & 0 & \textbf{10} & \\ +% $N_\theta$ & SDSSTRAIN2 & SDS4 & 0 & 0 & 0 & 0 & \textbf{20} & \textbf{0} \\ +% $B_r$ & SDSBR & SDS4 & 0.0009 & 0.0009 &\textbf{0.00085} & 0.0009 & 0.0009 & \\ +% $C_{\mathrm{cu}}$ & SDSCUM & SDS4 & -0.40344 & \textbf{0.0} & \textbf{0.0} &-0.40344 &-0.40344 & \\ +% ${\mathrm{s_B}}$ & SDSCOS &SDS4 & 2.0 & 2.0 & \textbf{0.0} & 2.0 & 2.0 & \\ +% $B_0$ & SDSC4 & SDS4 & 1.0 & 1.0 & 1.0 & 1.0 & 1.0 & \\ +% $p^{\mathrm{sat}}$ & SDSP & SDS4 & 2.0 & 2.0 & 2.0 & 2.0 & 2.0 & \\ +% $C_{\mathrm{turb}}$ & SDSC5 & SDS4 & 0.0 & 0.0 & 0.0 & 0.0 & \textbf{1.0}& \\ +% $\delta_d$ & SDSC6 & SDS4 & 0.3 & 0.3 & 0.3 & 0.3 &0.3 & \\ +% $C$ & NLPROP & SNL1 & $2.5\X^7$ & $\mathbf{2.7\X^7}$ &$\mathbf{2.7\X^7}$& $2.5\X^7$ & $2.5\X^7$ & \\ % \hline \hline %\end{tabular} -\begin{tabular}{|l|c|c|c|c|c|c|} \hline \hline -Par. & WWATCH var. & namelist & T471 & T405 & T500 & T601 \\ +\begin{tabular}{|l|c|c|c|c|c|c|c|} \hline \hline +Par. & WWATCH var. & namelist & T471 & T405 & T500 & T601 & T700 \\ \hline - $f_{\mathrm{FM}}$ & FXFM3 & SDS4 & 2.5 & 2.5 &\textbf{9.9} & 5 \\ - & SDSC1 & SDS4 & 0 & 0 &\textbf{1.0} & 0 \\ - $C_{\mathrm{ds}}^{\mathrm{sat}}$ & SDSC2 & SDS4 &$-2.2\X^{-5}$&$-2.2\X^{-5}$ &\textbf{0.0} &$-2.2\X^{-5}$ \\ - $C_{\mathrm{ds}}^{\mathrm{BCK}}$ & SDSBCK & SDS4 & 0 & 0 &\textbf{0.185}& 0 \\ - $C_{\mathrm{ds}}^{\mathrm{HCK}}$ & SDSHCK & SDS4 & 0 & 0 &\textbf{1.5} & 0 \\ - $\Delta_\theta$ & SDSDTH & SDS4 & 80 & 80 & 80 & 80 \\ - $\delta_\theta$ & SDSSTRAINA & SDS4 & 0 & 0 & 0 & \textbf{15} \\ - $M_\theta$ & SDSSTRAIN & SDS4 & 0 & 0 & 0 & \textbf{10} \\ - $N_\theta$ & SDSSTRAIN2 & SDS4 & 0 & 0 & 0 & \textbf{20} \\ - $B_r$ & SDSBR & SDS4 & 0.0009 &\textbf{0.00085} & 0.0009 & 0.0009 \\ - $C_{\mathrm{cu}}$ & SDSCUM & SDS4 & -0.40344 & \textbf{0.0} &-0.40344 &-0.40344 \\ - ${\mathrm{s_B}}$ & SDSCOS &SDS4 & 2.0 & \textbf{0.0} & 2.0 & 2.0 \\ - $B_0$ & SDSC4 & SDS4 & 1.0 & 1.0 & 1.0 & 1.0 \\ - $p^{\mathrm{sat}}$ & SDSP & SDS4 & 2.0 & 2.0 & 2.0 & 2.0 \\ - $C_{\mathrm{turb}}$ & SDSC5 & SDS4 & 0.0 & 0.0 & 0.0 & \textbf{1.0} \\ - $\delta_d$ & SDSC6 & SDS4 & 0.3 & 0.3 & 0.3 &0.3 \\ - $C$ & NLPROP & SNL1 & $2.5\X^7$ &$\mathbf{2.7\X^7}$& $2.5\X^7$ & $2.5\X^7$ \\ + & SDSBCHOICE & SDS4 & 1 & 1 & \textbf{2} & 1 & \textbf{3} \\ + $f_{\mathrm{FM}}$ & FXFM3 & SDS4 & 2.5 & 2.5 &\textbf{9.9} & 5 & \textbf{20} \\ +% & SDSC1 & SDS4 & 0 & 0 &\textbf{1.0} & 0 & \\ + $C_{\mathrm{ds}}^{\mathrm{sat}}$ & SDSC2 & SDS4 &$-2.2\X^{-5}$&$-2.2\X^{-5}$ &\textbf{0.0} &$-2.2\X^{-5}$& \textbf{-3.8} \\ + $C_{\mathrm{ds}}^{\mathrm{BCK}}$ & SDSBCK & SDS4 & & & 0.185 & & \\ + $C_{\mathrm{ds}}^{\mathrm{HCK}}$ & SDSHCK & SDS4 & & & 1.5 & & \\ + $\Delta_\theta$ & SDSDTH & SDS4 & 80 & 80 & 80 & 80 & \\ + $\delta_\theta$ & SDSSTRAINA & SDS4 & 0 & 0 & 0 & \textbf{15} & 0 \\ + $M_\theta$ & SDSSTRAIN & SDS4 & 0 & 0 & 0 & \textbf{10} & 0 \\ + $N_\theta$ & SDSSTRAIN2 & SDS4 & 0 & 0 & 0 & \textbf{20} & \textbf{0} \\ + $B_r$ & SDSBR & SDS4 & 0.0009 &\textbf{0.00085} & 0.0009 & 0.0009 & \textbf{0.005} \\ + $B_r$ & SDSBT & SDS4 & & & & & 0.0011 \\ + $C_{\mathrm{cu}}$ & SDSCUM & SDS4 & -0.40344 & \textbf{0.0} &-0.40344 &-0.40344 & \textbf{0.0} \\ + ${\mathrm{s_B}}$ & SDSCOS &SDS4 & 2.0 & \textbf{0.0} & 2.0 & 2.0 & \\ + $p^{\mathrm{sat}}$ & SDSP & SDS4 & 2.0 & 2.0 & 2.0 & 2.0 & \\ + $C_{\mathrm{turb}}$ & SDSC5 & SDS4 & 0.0 & 0.0 & 0.0 & \textbf{1.0}& 0.0 \\ + $\delta_d$ & SDSC6 & SDS4 & 0.3 & 0.3 & 0.3 &0.3 & \\ + $ M_W$ & SDSMWD & SDS4 & & & & & 0.9 \\ + $ M_\Lambda$ & SDSFACMTF & SDS4 & & & & & 400 \\ + $C$ & NLPROP & SNL1 & $2.5\X^7$ &$\mathbf{2.7\X^7}$& $2.5\X^7$ & $2.5\X^7$ & $2.5\X^7$ \\ + % $p_{\mathrm{mss}}$ & SPMSS & SDS4 & & & & & 0.5 \\ \hline \hline \end{tabular} \end{center} \caption{Same as Table \ref{tab:ST4_parSIN}, for the {\F SDS4} and {\F SNL1} namelists. Bold values are different from the default values set by - ww3\_grid.} \label{tab:ST4_parSDS} + ww3\_grid. Values are omitted when the SDSBCHOICE makes them not used. Note that \cite{Romero2019} suggests using $ M_W=2$ when NL2 is used. } \label{tab:ST4_parSDS} %\botline \end{table} \end{landscape} diff --git a/manual/manual.bib b/manual/manual.bib index 05f3f82dc..4e3eb8523 100644 --- a/manual/manual.bib +++ b/manual/manual.bib @@ -3510,6 +3510,18 @@ @ARTICLE{Guimaraes&al.2018 keywords={measurement technique; waves and sea ice}, } + +@ARTICLE{Romero2019, + author = "Leonel Romero", + title = "Distribution of Surface Wave Breaking Fronts", + journal = GRL, + volume=46, + year = 2019, + pages = "10463--10474", + doi = "/10.1029/2019GL083408", + keywords={whitecap coverage;wave model validation}, +} + @ARTICLE{Stopa2018, author = "Justin E. Stopa", title = "Wind forcing calibration and wave hindcast comparison using multiple reanalysis and merged satellite wind datasets", diff --git a/model/ftn/w3sis2md.ftn b/model/ftn/w3sis2md.ftn index f01d945d6..25288357c 100644 --- a/model/ftn/w3sis2md.ftn +++ b/model/ftn/w3sis2md.ftn @@ -726,12 +726,10 @@ ELSE GAMMA_TOY = 2 + log(0.9)/log(2.) ! Variables from Cole et al. 1995 ALPHA_D=0.54 - !B_COLE=1.205E-9 * EXP(0.55*1.60218E-19/(1.38064852e-23*263.15)) B_COLE=1.205E-9 * EXP(IS2PARS(24)*1.60218E-19/(1.38064852e-23*268.15)) TAU_D=B_COLE/0.07 S_D=LOG(SIG(1:NK)*TAU_D) DELTA_D=IS2PARS(21) -! IF (IS2PARS(9).GT.0) ICEDMIN = IS2PARS(9) IF (IS2PARS(12).GT.0) THEN B=IS2PARS(12) diff --git a/model/ftn/w3src4md.ftn b/model/ftn/w3src4md.ftn index 992f40f47..a9a79d5b6 100755 --- a/model/ftn/w3src4md.ftn +++ b/model/ftn/w3src4md.ftn @@ -1576,7 +1576,8 @@ ! This codes does either one or the other of ! Ardhuin et al. (JPO 2010) ! Filipot & Ardhuin (JGR 2012) -! the choice depends on SDSBCK +! Romero (GRL 2009) +! the choice depends on SDSBCHOICE ! ! 3. Parameters : ! diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index f424e85b0..411a3674b 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -887,6 +887,7 @@ echo "$rtst -s ST2 -w work_ST2 $ww3 ww3_ts1" >> matrix.body echo "$rtst -s ST3 -w work_ST3 $ww3 ww3_ts1" >> matrix.body echo "$rtst -s ST4 -w work_ST4 $ww3 ww3_ts1" >> matrix.body + echo "$rtst -s ST4 -w work_ST4_T700 -g ST4_T700 -N $ww3 ww3_ts1" >> matrix.body echo "$rtst -s ST4_WRT -w work_ST4_WRT $ww3 ww3_ts1" >> matrix.body echo "$rtst -s ST4_GMD -w work_ST4_GMD $ww3 ww3_ts1" >> matrix.body echo "$rtst -s ST4_TSA -w work_ST4_TSA $ww3 ww3_ts1" >> matrix.body diff --git a/regtests/ww3_ts1/info b/regtests/ww3_ts1/info index c05b01bf5..c6e569c8f 100644 --- a/regtests/ww3_ts1/info +++ b/regtests/ww3_ts1/info @@ -22,29 +22,31 @@ # + switch_ST1_RWND : WAM 3 physics + wind dorrection. # # + switch_ST2 : Tolman and Chalikov (default). # # + switch_ST3 : WAM 4 physics. # -# + switch_ST4 : Ardhuin et al. (2010). # +# + switch_ST4 : Ardhuin et al. (2010), Romero (2019) # # + switch_ST6 : BYDRZ physics (2013). # # # -# Example run_test commands: # -# (some details will vary by local system and configuration) # -# ./bin/run_test -s ST1 -w work_ST1 ../model ww3_ts1 # -# ./bin/run_test -s ST2 -w work_ST2 ../model ww3_ts1 # -# ./bin/run_test -s ST6 -o netcdf -w work_ST6 ../model ww3_ts1 # -# ./bin/run_test -c gnu -o netcdf ../model ww3_ts1 # -# # -# ./bin/run_test -i input_icesct_IC0 -o both ../model ww3_ts1 # -# ./bin/run_test -i input_icesct_IC1 -w work_IC1 ../model ww3_ts1 # -# ./bin/run_test -i input_icesct_IC2 -w work_IC2 ../model ww3_ts1 # -# ./bin/run_test -i input_icesct_IC3 -w work_IC3 ../model ww3_ts1 # -# ./bin/run_test -i input_icesct_IC4 -w work_IC4 ../model ww3_ts1 # -# # -# # -# Hendrik Tolman, Jun 2002 # -# Last Mod : Dec 2013 # -# # -# 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. # -# # -############################################################################# +# Example run_test commands: # +# (some details will vary by local system and configuration) # +# ./bin/run_test -s ST1 -w work_ST1 ../model ww3_ts1 # +# ./bin/run_test -s ST2 -w work_ST2 ../model ww3_ts1 # +# ./bin/run_test -s ST4 -o netcdf -N -w work_ST4 ../model ww3_ts1 # +# ./bin/run_test -s ST4 -o netcdf -N -w work_ST4_T700 -g ST4_T700 ../model ww3_ts1 # +# ./bin/run_test -s ST6 -o netcdf -w work_ST6 ../model ww3_ts1 # +# ./bin/run_test -c gnu -o netcdf ../model ww3_ts1 # +# # +# ./bin/run_test -i input_icesct_IC0 -o both ../model ww3_ts1 # +# ./bin/run_test -i input_icesct_IC1 -w work_IC1 ../model ww3_ts1 # +# ./bin/run_test -i input_icesct_IC2 -w work_IC2 ../model ww3_ts1 # +# ./bin/run_test -i input_icesct_IC3 -w work_IC3 ../model ww3_ts1 # +# ./bin/run_test -i input_icesct_IC4 -w work_IC4 ../model ww3_ts1 # +# # +# # +# Hendrik Tolman, Jun 2002 # +# Last Mod : Jun 2020 # +# # +# 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. # +# # +################################################################################ diff --git a/regtests/ww3_ts1/input/namelists_ST4_T700.nml b/regtests/ww3_ts1/input/namelists_ST4_T700.nml new file mode 100644 index 000000000..aa6ecdf70 --- /dev/null +++ b/regtests/ww3_ts1/input/namelists_ST4_T700.nml @@ -0,0 +1,4 @@ + &SDS4 SDSBCHOICE=3, SDSC2 = -3.8, SDSBR = 0.005, + SDSSTRAIN =0., SDSSTRAIN2 = 0., FXFM3 = 20., SDSFACMTF = 400., + SDSCUM=0., SDSC5 =0. / +END OF NAMELISTS diff --git a/regtests/ww3_ts1/input/ww3_grid_ST4_T700.nml b/regtests/ww3_ts1/input/ww3_grid_ST4_T700.nml new file mode 100644 index 000000000..583e4a373 --- /dev/null +++ b/regtests/ww3_ts1/input/ww3_grid_ST4_T700.nml @@ -0,0 +1,225 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0485 + SPECTRUM%NK = 36 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 900. + TIMESTEPS%DTXY = 900. + TIMESTEPS%DTKTH = 900. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'HOMOGENEOUS SOURCE TERM TEST' + GRID%NML = '../input/namelists_ST4_T700.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input/HOMOGENEOUS.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! From 60f0fdffdaa7b818c2d9064535fde43715a7270d Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Mon, 10 Aug 2020 10:53:28 -0400 Subject: [PATCH 47/84] UKMO staging [develop] #237 (#241) * Added boundary checks to the SMC grid input files for ww3_grid, to ensure they comply with the limits of the nameslist. * Fb 360 calendar (#8) Changes to add support to 360-day and 365-day (no leap year) calendar - see ticket #209 * Additional CALTYPE namelist parameter in MISC section * New ww3_tc1 regtest. * RTD support for ww3_boun[dc] (#10) * Updated ww3_bound and ww3_bounc to handle model grids formulated on a rotated pole. * Manual and nml/inp files to updated clarify that ww3_bound/ww3_bounc only accept input spectra formulated on a standard pole grid. * Fb coupling time (#9) Updates to allow a coupling time step that is different from the model time step. * Includes new regtest (in ww3_tp2.14) for non-default oasis time step. * ww3_tp2.14 regtest added to matrix.base. * bug fix for ukmet development Co-authored-by: lewis.sampson Co-authored-by: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Co-authored-by: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> --- manual/num/rotagrid.tex | 7 +- manual/run/ww3_bounc.tex | 3 + manual/run/ww3_bound.tex | 3 + model/bin/ww3_from_ftp.sh | 4 + model/ftn/w3gdatmd.ftn | 2 +- model/ftn/w3iogrmd.ftn | 9 +- model/ftn/w3timemd.ftn | 97 +++-- model/ftn/ww3_bounc.ftn | 27 +- model/ftn/ww3_bound.ftn | 33 +- model/ftn/ww3_grid.ftn | 50 ++- model/ftn/ww3_ounf.ftn | 14 +- model/ftn/ww3_ounp.ftn | 16 +- model/ftn/ww3_shel.ftn | 38 +- model/ftn/ww3_trnc.ftn | 12 +- model/inp/ww3_bounc.inp | 3 + model/inp/ww3_bound.inp | 3 + model/inp/ww3_grid.inp | 3 + model/nml/namelists.nml | 147 ++++++++ model/nml/ww3_bounc.nml | 2 + regtests/bin/matrix.base | 25 +- regtests/bin/matrix.comp | 10 +- regtests/bin/matrix_datarmor | 2 + regtests/bin/matrix_ncep | 2 + regtests/bin/matrix_ukmo_cray | 9 +- regtests/bin/matrix_zeus_HLT | 2 + regtests/ww3_tc1/info | 37 ++ regtests/ww3_tc1/input/STANDARD.depth | 3 + regtests/ww3_tc1/input/namelists_360_day.nml | 2 + regtests/ww3_tc1/input/namelists_365_day.nml | 2 + regtests/ww3_tc1/input/namelists_standard.nml | 2 + regtests/ww3_tc1/input/points.list | 1 + regtests/ww3_tc1/input/switch | 1 + regtests/ww3_tc1/input/ww3_grid_C360.inp | 30 ++ regtests/ww3_tc1/input/ww3_grid_C360.nml | 227 ++++++++++++ regtests/ww3_tc1/input/ww3_grid_C365.inp | 30 ++ regtests/ww3_tc1/input/ww3_grid_C365.nml | 227 ++++++++++++ regtests/ww3_tc1/input/ww3_grid_STD.inp | 30 ++ regtests/ww3_tc1/input/ww3_grid_STD.nml | 227 ++++++++++++ regtests/ww3_tc1/input/ww3_ounf.inp | 41 +++ regtests/ww3_tc1/input/ww3_ounf.nml | 60 +++ regtests/ww3_tc1/input/ww3_shel.inp | 29 ++ regtests/ww3_tc1/input/ww3_shel.nml | 345 ++++++++++++++++++ regtests/ww3_tc1/input/ww3_strt.inp | 47 +++ .../ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 | 14 + .../ww3_tp2.14/input/TOYNAMELIST.nam.OASICM | 2 +- regtests/ww3_tp2.14/input/namcouple.OASACM2 | 135 +++++++ .../input/oasis3-mct/util/make_dir/cmplr.tmpl | 2 +- regtests/ww3_tp2.14/input/prep_env.sh | 10 +- regtests/ww3_tp2.14/input/switch_OASACM2 | 1 + .../ww3_tp2.14/input/toy/function_sent.F90 | 8 +- .../ww3_tp2.14/input/toy/read_dimgrid.F90 | 14 +- regtests/ww3_tp2.14/input/toy/read_grid.F90 | 46 ++- .../ww3_tp2.14/input/toy/read_namelist.F90 | 40 +- regtests/ww3_tp2.14/input/toy/toy_model.F90 | 108 +++--- .../ww3_tp2.14/input/ww3_shel_OASACM2.inp | 152 ++++++++ .../ww3_tp2.14/input/ww3_shel_OASACM2.nml | 337 +++++++++++++++++ 56 files changed, 2568 insertions(+), 165 deletions(-) create mode 100644 model/nml/namelists.nml create mode 100644 regtests/ww3_tc1/info create mode 100644 regtests/ww3_tc1/input/STANDARD.depth create mode 100644 regtests/ww3_tc1/input/namelists_360_day.nml create mode 100644 regtests/ww3_tc1/input/namelists_365_day.nml create mode 100644 regtests/ww3_tc1/input/namelists_standard.nml create mode 100644 regtests/ww3_tc1/input/points.list create mode 100644 regtests/ww3_tc1/input/switch create mode 100644 regtests/ww3_tc1/input/ww3_grid_C360.inp create mode 100644 regtests/ww3_tc1/input/ww3_grid_C360.nml create mode 100644 regtests/ww3_tc1/input/ww3_grid_C365.inp create mode 100644 regtests/ww3_tc1/input/ww3_grid_C365.nml create mode 100644 regtests/ww3_tc1/input/ww3_grid_STD.inp create mode 100644 regtests/ww3_tc1/input/ww3_grid_STD.nml create mode 100644 regtests/ww3_tc1/input/ww3_ounf.inp create mode 100644 regtests/ww3_tc1/input/ww3_ounf.nml create mode 100644 regtests/ww3_tc1/input/ww3_shel.inp create mode 100644 regtests/ww3_tc1/input/ww3_shel.nml create mode 100644 regtests/ww3_tc1/input/ww3_strt.inp create mode 100755 regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 create mode 100755 regtests/ww3_tp2.14/input/namcouple.OASACM2 create mode 100755 regtests/ww3_tp2.14/input/switch_OASACM2 create mode 100755 regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp create mode 100644 regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml diff --git a/manual/num/rotagrid.tex b/manual/num/rotagrid.tex index 60b58ef6d..c44c6f387 100644 --- a/manual/num/rotagrid.tex +++ b/manual/num/rotagrid.tex @@ -40,7 +40,12 @@ \subsubsection{~Rotated grids} \label{sub:num_space_rotagrid} has been used. Gridded netCDF files generated by {\bf ww3\_ounf} also include \emph{standard\_latitude} and \emph{standard\_longitude} two-dimensional arrays that describe location of the rotated model cell centres in the standard lat-lon -reference frame. +reference frame. + +If the user wishes to generate boundary conditions for a rotated pole grid using +the {\bf ww3\_bound} or {\bf ww3\_bounc} boundary processing programs, then it +should be noted that the input spectra for these programs are always expected +to be formulated on a \emph{standard pole}. Six subroutines are provided in module {\bf w3servmd.ftn} for rotated grid conversion: diff --git a/manual/run/ww3_bounc.tex b/manual/run/ww3_bounc.tex index 5814ba141..b75a1fca1 100644 --- a/manual/run/ww3_bounc.tex +++ b/manual/run/ww3_bounc.tex @@ -10,4 +10,7 @@ \subsubsection{The NetCDF boundary conditions program} \label{sub:ww3bounc} \proddeff{Output}{standard out}{Formatted output of program.}{6} \proddefa{nest.ww3}{Boundary conditions file.}{33} +\vspace{\baselineskip} \noindent +Note: When using this program to produce boundary inputs for a model formulated on rotated pole grid, the input spectra are always assumed to be formulated on a standard pole. + \pb diff --git a/manual/run/ww3_bound.tex b/manual/run/ww3_bound.tex index 310ceda61..6dd5b059e 100644 --- a/manual/run/ww3_bound.tex +++ b/manual/run/ww3_bound.tex @@ -9,4 +9,7 @@ \subsubsection{The boundary conditions program} \label{sub:ww3bound} \proddeff{Output}{standard out}{Formatted output of program.}{6} \proddefa{nest.ww3}{Boundary conditions file.}{33} +\vspace{\baselineskip} \noindent +Note: When using this program to produce boundary inputs for a model formulated on rotated pole grid, the input spectra are always assumed to be formulated on a standard pole. + \pb diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index f17d3c6e0..b7723efc5 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -36,12 +36,16 @@ cp -r data_regtests/ww3_tp2.12/input/* regtests/ww3_tp2.12/input/ cp -r data_regtests/ww3_tp2.12/input_be/* regtests/ww3_tp2.12/input_be/ cp -r data_regtests/ww3_tp2.12/input_le/* regtests/ww3_tp2.12/input_le/ cp -r data_regtests/ww3_tp2.14/input/r-ww3.nc.OAS*CM regtests/ww3_tp2.14/input/ +cp -r data_regtests/ww3_tp2.14/input/r-ww3.nc.OASACM regtests/ww3_tp2.14/input/OASACM2 +cp -r data_regtests/ww3_tp2.14/input/r-ww3.nc.OASACM regtests/ww3_tp2.14/input/r-ww3.nc.OASACM2 if [ ! -d regtests/ww3_tp2.14/input/oasis3-mct/doc ] then mkdir regtests/ww3_tp2.14/input/oasis3-mct/doc fi cp -r data_regtests/ww3_tp2.14/input/oasis3-mct/doc/* regtests/ww3_tp2.14/input/oasis3-mct/doc/ cp -r data_regtests/ww3_tp2.14/input/toy/*.nc.OAS*CM regtests/ww3_tp2.14/input/toy/ +cp -r data_regtests/ww3_tp2.14/input/toy/r-toy.nc.OASACM regtests/ww3_tp2.14/input/toy/r-toy.nc.OASACM2 +cp -r data_regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM2 cp -r data_regtests/ww3_tp2.14/input/toy/*.nc regtests/ww3_tp2.14/input/toy/ cp -r data_regtests/ww3_tp2.17/input/* regtests/ww3_tp2.17/input/ diff --git a/model/ftn/w3gdatmd.ftn b/model/ftn/w3gdatmd.ftn index 477cd6afc..b03ec803b 100644 --- a/model/ftn/w3gdatmd.ftn +++ b/model/ftn/w3gdatmd.ftn @@ -220,7 +220,7 @@ ! FLDRY Log. Public Flag for 'dry' run (IO and data ! processing only). ! FLCx Log. Public Flags for prop. is different spaces. -! FLSOU Log. Public Flag for source term calcualtion. +! FLSOU Log. Public Flag for source term calculation. ! FUNO3 Log. Public Flag for 3rd order UNO3 scheme on SMC grid. ! FVERG Log. Public Flag for 1-2-1 averaging smoothing on SMC grid. ! FSWND Log. Public Flag for sea-point only wind input on SMC grid. diff --git a/model/ftn/w3iogrmd.ftn b/model/ftn/w3iogrmd.ftn index b325a7a77..4808b1a0b 100644 --- a/model/ftn/w3iogrmd.ftn +++ b/model/ftn/w3iogrmd.ftn @@ -67,7 +67,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERGRD = '2020-04-15' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERGRD = '2020-06-18' CHARACTER(LEN=35), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III MODEL DEFINITION FILE' !/ @@ -146,6 +146,7 @@ !/ 18-Aug-2018 : S_{ice} IC5 (Q. Liu) ( version 6.06 ) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) +!/ 18-Jun-2020 : Adds 360-day calendar option ( version 7.08 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -234,7 +235,7 @@ !/NLX USE W3SNLXMD, ONLY: INSNLX !/NLS USE W3SNLSMD, ONLY: INSNLS !/IS2 USE W3SIS2MD, ONLY: INSIS2 - USE W3TIMEMD, ONLY: NOLEAP + USE W3TIMEMD, ONLY: CALTYPE USE W3SERVMD, ONLY: EXTCDE !/S USE W3SERVMD, ONLY: STRACE USE W3DISPMD @@ -640,7 +641,7 @@ FICE0, FICEN, FICEL, PFMOVE, FLDRY, FLCX, FLCY, FLCTH, & FLCK, FLSOU, FLBPI, FLBPO, CLATS, CLATIS, CTHG0S, & STEXU, STEYU, STEDU, IICEHMIN, IICEHINIT, IICEDISP, & - ICESCALES(1:4), NOLEAP, CMPRTRCK, IICEHFAC, IICEHDISP, & + ICESCALES(1:4), CALTYPE, CMPRTRCK, IICEHFAC, IICEHDISP,& IICEDDISP, IICEFDISP, BTBETA WRITE(NDSM)GRIDSHIFT @@ -780,7 +781,7 @@ FICE0, FICEN, FICEL, PFMOVE, FLDRY, FLCX, FLCY, & FLCTH, FLCK, FLSOU, FLBPI, FLBPO, CLATS, CLATIS, & CTHG0S, STEXU, STEYU, STEDU, IICEHMIN, IICEHINIT, & - IICEDISP, ICESCALES(1:4), NOLEAP, CMPRTRCK, IICEHFAC, & + IICEDISP, ICESCALES(1:4), CALTYPE, CMPRTRCK, IICEHFAC, & IICEDDISP, IICEHDISP, IICEFDISP, BTBETA !/DEBUGIOGR WRITE(740+IAPROC,*) 'W3IOGR, step 7.14' !/DEBUGIOGR FLUSH(740+IAPROC) diff --git a/model/ftn/w3timemd.ftn b/model/ftn/w3timemd.ftn index e5760264b..75a5aef32 100644 --- a/model/ftn/w3timemd.ftn +++ b/model/ftn/w3timemd.ftn @@ -72,7 +72,7 @@ ! INTEGER, PRIVATE :: PRFTB(8) LOGICAL, PRIVATE :: FLPROF = .FALSE. - LOGICAL, PUBLIC :: NOLEAP + CHARACTER, PUBLIC :: CALTYPE*8 ! CONTAINS !/ ------------------------------------------------------------------- / @@ -192,13 +192,14 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 29-Nov-1999 | +!/ | Last update : 18-Jun-2020 | !/ +-----------------------------------+ !/ Based on INCYMD of the GLA GCM. !/ !/ 18-Oct-1998 : Final FORTRAN 77 ( version 1.18 ) !/ 29-Nov-1999 : Upgrade to FORTRAN 90 ( version 2.00 ) !/ 10-Jan-2017 : Add NOLEAP option, 365 day calendar ( version 6.00 ) +!/ 18-Jun-2020 : Add 360-day calendar option ( version 7.08 ) !/ ! 1. Purpose : ! @@ -247,7 +248,6 @@ !/ INTEGER :: NY, NM, ND INTEGER, SAVE :: NDPM(12) - DATA NDPM / 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 / !/S INTEGER, SAVE :: IENT = 0 LOGICAL :: LEAP !/ @@ -255,18 +255,27 @@ !/ !/S CALL STRACE (IENT, 'IYMD21') ! +! Declare the number of days in month depending on calendar +! + IF (TRIM(CALTYPE) .EQ. '360_day' ) THEN + NDPM=(/ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 /) + ELSE + NDPM=(/ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 /) + END IF +! ! "Unpack" and increment date : ! NY = NYMD / 10000 NM = MOD(NYMD,10000) / 100 NM = MIN ( 12 , MAX(1,NM) ) ND = MOD(NYMD,100) + M - LEAP = MOD(NY,400).EQ.0 .OR. & - ( MOD(NY,4).EQ.0 .AND. MOD(NY,100).NE.0 ) ! Add override for simulations with no leap years - IF (NOLEAP) then + IF (TRIM(CALTYPE) .EQ. 'standard' ) THEN + LEAP = MOD(NY,400).EQ.0 .OR. & + ( MOD(NY,4).EQ.0 .AND. MOD(NY,100).NE.0 ) + ELSE LEAP = .false. - ENDIF + END IF ! ! M = -1, change month if necessary : ! @@ -314,12 +323,13 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 05-Jan-2001 | +!/ | Last update : 18-Jun-2020 | !/ +-----------------------------------+ !/ !/ 23-Mar-1993 : Final FORTRAN 77 ( version 1.18 ) !/ 29-Nov-1999 : Upgrade to FORTRAN 90 ( version 2.00 ) !/ 05-Jan-2001 : Y2K leap year error correction. ( version 2.05 ) +!/ 18-Jun-2020 : Add 360-day calendar support ( version 7.08 ) !/ !/ ! 1. Purpose : @@ -401,9 +411,17 @@ IF (NY1.EQ.NY2) GOTO 200 IF (NST.GT.0) THEN NY2 = NY2 - 1 - ND = ND + MYMD21 ( NY2*10000 + 1231 ) + IF (TRIM(CALTYPE) .EQ. '360_day' ) THEN + ND = ND + MYMD21 ( NY2*10000 + 1230 ) + ELSE + ND = ND + MYMD21 ( NY2*10000 + 1231 ) + END IF ELSE - ND = ND - MYMD21 ( NY2*10000 + 1231 ) + IF (TRIM(CALTYPE) .EQ. '360_day' ) THEN + ND = ND - MYMD21 ( NY2*10000 + 1230 ) + ELSE + ND = ND - MYMD21 ( NY2*10000 + 1231 ) + END IF NY2 = NY2 + 1 ENDIF GOTO 100 @@ -428,13 +446,14 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 29-Nov-1999 | +!/ | Last update : 18-Jun-2020 | !/ +-----------------------------------+ !/ Based on MODYMD of the GLA GCM. !/ !/ 19-Oct-1998 : Final FORTRAN 77 ( version 1.18 ) !/ 29-Nov-1999 : Upgrade to FORTRAN 90 ( version 2.00 ) !/ 10-Jan-2017 : Add NOLEAP option, 365 day calendar ( version 6.01 ) +!/ 18-Jun-2020 : Add 360-day calendar support ( version 7.08 ) !/ ! 1. Purpose : ! @@ -482,7 +501,6 @@ !/ INTEGER :: NY, NM, ND INTEGER, SAVE :: NDPM(12) - DATA NDPM / 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 / !/S INTEGER, SAVE :: IENT = 0 LOGICAL :: LEAP !/ @@ -490,15 +508,24 @@ !/ !/S CALL STRACE (IENT, 'MYMD21') ! +! Declare the number of days in month depending on calendar +! + IF (TRIM(CALTYPE) .EQ. '360_day' ) THEN + NDPM=(/ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 /) + ELSE + NDPM=(/ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 /) + END IF +! ! "Unpack" and increment date : ! NY = NYMD / 10000 NM = MOD(NYMD,10000) / 100 ND = MOD(NYMD,100) - LEAP = MOD(NY,400).EQ.0 .OR. & - ( MOD(NY,4).EQ.0 .AND. MOD(NY,100).NE.0 ) !Allow override for NoLeap simulations - IF (NOLEAP) THEN + IF (TRIM(CALTYPE) .EQ. 'standard' ) THEN + LEAP = MOD(NY,400).EQ.0 .OR. & + ( MOD(NY,4).EQ.0 .AND. MOD(NY,100).NE.0 ) + ELSE LEAP=.false. ENDIF ! @@ -1431,10 +1458,11 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 18-Jun-2020 | !/ +-----------------------------------+ !/ !/ 15-May-2018 : Origination ( version 6.05 ) +!/ 18-Jun-2020 : Addition of 360-day calendar ( version 7.08 ) !/ ! 1. Purpose : ! @@ -1484,19 +1512,34 @@ ! ! Convert dates and times : ! - A1 = (14-T1(2))/12 - B1 = T1(1) + 4800 - A1 - C1 = T1(2) + 12*A1 - 3 - D1 = T1(3) + (153*C1 + 2)/5 + 365*B1 + B1/4 -B1/100 + B1/400 - E1 = 3600.0*T1(5) + 60.0*(T1(6)-T1(4)) + T1(7) + T1(8)/1000.0 + IF (TRIM(CALTYPE) .EQ. '360_day' ) THEN + A1 = (T2(1)-T1(1))*360 + (T2(2)-T1(2))*30 + (T2(3)-T1(3)) + + E1 = 3600.0*T1(5) + 60.0*(T1(6)-T1(4)) + T1(7) + T1(8)/1000.0 + E2 = 3600.0*T2(5) + 60.0*(T2(6)-T2(4)) + T2(7) + T2(8)/1000.0 ! - A2 = (14-T2(2))/12 - B2 = T2(1) + 4800 - A2 - C2 = T2(2) + 12*A2 - 3 - D2 = T2(3) + (153*C2 + 2)/5 + 365*B2 + B2/4 -B2/100 + B2/400 - E2 = 3600.0*T2(5) + 60.0*(T2(6)-T2(4)) + T2(7) + T2(8)/1000.0 + TSUB = DBLE(A1) + (E2-E1)/86400.0d0 + ELSE + A1 = (14-T1(2))/12 + B1 = T1(1) + 4800 - A1 + C1 = T1(2) + 12*A1 - 3 + D1 = T1(3) + (153*C1 + 2)/5 + 365*B1 + IF (TRIM(CALTYPE) .EQ. 'standard' ) THEN + D1 = D1 + B1/4 -B1/100 + B1/400 + ENDIF + E1 = 3600.0*T1(5) + 60.0*(T1(6)-T1(4)) + T1(7) + T1(8)/1000.0 +! + A2 = (14-T2(2))/12 + B2 = T2(1) + 4800 - A2 + C2 = T2(2) + 12*A2 - 3 + D2 = T2(3) + (153*C2 + 2)/5 + 365*B2 + IF (TRIM(CALTYPE) .EQ. 'standard' ) THEN + D2 = D2 + B2/4 -B2/100 + B2/400 + ENDIF + E2 = 3600.0*T2(5) + 60.0*(T2(6)-T2(4)) + T2(7) + T2(8)/1000.0 ! - TSUB = DBLE(D2-D1) + (E2-E1)/86400.0d0 + TSUB = DBLE(D2-D1) + (E2-E1)/86400.0d0 + ENDIF ! RETURN !/ diff --git a/model/ftn/ww3_bounc.ftn b/model/ftn/ww3_bounc.ftn index 9fbbad6fb..8d28008af 100644 --- a/model/ftn/ww3_bounc.ftn +++ b/model/ftn/ww3_bounc.ftn @@ -7,7 +7,7 @@ !/ | F. Ardhuin | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 04-May-2020 | +!/ | Last update : 21-Jul-2020 | !/ +-----------------------------------+ !/ !/ 24-May-2013 : Adaptation from ww3_bound.ftn ( version 4.08 ) @@ -18,6 +18,8 @@ !/ 20-Mar-2018 : Improve netcdf file reading ( version 6.02 ) !/ 15-May-2018 : Add namelist feature ( version 6.05 ) !/ 04-May-2020 : Update spectral conversion ( version 7.XX ) +!/ 21-Jul-2020 : Support rotated pole grid ( version 7.11 ) +!/ !/ !/ Copyright 2012-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -53,6 +55,7 @@ ! EXTCDE Subr. Id. Abort program as graceful as possible. ! WAVNU1 Subr. W3DISPMD Solve dispersion relation. ! W3IOGR Subr. W3IOGRMD Reading/writing model definition file. +! W3EQTOLL Subr W3SERVMD Convert coordinates from rotated pole. ! ---------------------------------------------------------------- ! ! 5. Called by : @@ -66,6 +69,9 @@ ! - Can be used also to diagnose contents of nest.ww3 file ! in read mode ! +! - Input spectra are assumed to be formulated on a standard +! pole. However, the model grid can be on a rotated pole. +! ! 8. Structure : ! ! ---------------------------------------------------- @@ -106,11 +112,13 @@ GNAME, W3NMOD, W3SETG,& NSEA, MAPSTA, XYB, GTYPE, XGRD, YGRD, X0, Y0, & SX, SY, MAPSF, UNGTYPE, CLGTYPE, RLGTYPE, FLAGLL +!/RTD USE W3GDATMD, ONLY : POLAT, POLON USE W3ODATMD, ONLY: NDSO, NDSE USE W3IOBCMD, ONLY: VERBPTBC, IDSTRBC USE W3IOGRMD, ONLY: W3IOGR USE W3TIMEMD USE W3SERVMD, ONLY: ITRACE, NEXTLN, EXTCDE, DIST_SPHERE +!/RTD USE W3SERVMD, ONLY: W3EQTOLL USE W3NMLBOUNCMD USE NETCDF !/S USE W3SERVMD, ONLY : STRACE @@ -147,6 +155,8 @@ XBPI(:), YBPI(:), RDBPI(:,:), & XBPO(:), YBPO(:), RDBPO(:,:), & ABPIN(:,:), ABPIN2(:,:,:) +!/RTD REAL, ALLOCATABLE :: XTMP(:), YTMP(:), ANGTMP(:) +!/RTD LOGICAL :: ISRTD ! REAL, ALLOCATABLE :: TMPSPCI(:,:),TMPSPCO(:,:) @@ -204,6 +214,9 @@ ! CALL W3IOGR ( 'READ', NDSM ) WRITE (NDSO,920) GNAME +!/RTD! +!/RTD ISRTD = POLAT .LT. 90.0 +!/RTD! ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 3. Read requests from input file. @@ -359,6 +372,7 @@ END IF END DO ALLOCATE(XBPO(NBO),YBPO(NBO)) +!/RTD IF (ISRTD) ALLOCATE(XTMP(NBO), YTMP(NBO), ANGTMP(NBO)) ALLOCATE (IPBPO(NBO,4),RDBPO(NBO,4)) IBO=0 DO ISEA=1,NSEA @@ -379,7 +393,16 @@ END SELECT !GTYPE END IF END DO - +!/RTD! +!/RTD IF (ISRTD) THEN +!/RTD ! Convert grid boundary cell locations to standard pole +!/RTD XTMP = XBPO +!/RTD YTMP = YBPO +!/RTD CALL W3EQTOLL(YTMP, XTMP, YBPO, XBPO, ANGTMP, POLAT, POLON, NBO) +!/RTD DEALLOCATE(XTMP, YTMP, ANGTMP) +!/RTD ENDIF +!/RTD! +! OPEN(NDSB,FILE='nest.ww3',FORM='UNFORMATTED',status='unknown') ALLOCATE(DIMID(NBO2,3),DIMLN(NBO2,3),NCID(NBO2)) diff --git a/model/ftn/ww3_bound.ftn b/model/ftn/ww3_bound.ftn index 34df94682..14cf3535d 100644 --- a/model/ftn/ww3_bound.ftn +++ b/model/ftn/ww3_bound.ftn @@ -6,12 +6,14 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 20-Oct-2016 | +!/ | Last update : 21-Jul-2020 | !/ +-----------------------------------+ !/ !/ 28-Aug-2012 : adaptation from SHOM/Ifremer code ( version 4.08 ) !/ 01-Nov-2012 : Bug correction for NKI != NK ( version 4.08 ) !/ 20-Oct-2016 : Error statement updates ( version 5.15 ) +!/ 21-Jul-2020 : Support rotated pole grid ( version 7.06 ) +!/ Chris Bunney, UKMO. !/ !/ Copyright 2012-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -47,6 +49,7 @@ ! EXTCDE Subr. Id. Abort program as graceful as possible. ! WAVNU1 Subr. W3DISPMD Solve dispersion relation. ! W3IOGR Subr. W3IOGRMD Reading/writing model definition file. +! W3EQTOLL Subr W3SERVMD Convert coordinates from rotated pole. ! ---------------------------------------------------------------- ! ! 5. Called by : @@ -60,6 +63,9 @@ ! - Can be used also to diagnose contents of nest.ww3 file ! in read mode ! +! - Input spectra are assumed to be formulated on a standard +! pole. However, the model grid can be on a rotated pole. +! ! 8. Structure : ! ! ---------------------------------------------------- @@ -97,11 +103,13 @@ USE W3GDATMD, ONLY: NK, NTH, XFR, FR1, GNAME, W3NMOD, W3SETG, & NSEA, MAPSTA, XYB, GTYPE, XGRD, YGRD, X0, Y0, & SX, SY, MAPSF, UNGTYPE, CLGTYPE, RLGTYPE +!/RTD USE W3GDATMD, ONLY : POLAT, POLON USE W3ODATMD, ONLY: NDSO, NDSE USE W3IOBCMD, ONLY: VERBPTBC, IDSTRBC USE W3IOGRMD, ONLY: W3IOGR USE W3TIMEMD USE W3SERVMD, ONLY: ITRACE, NEXTLN, EXTCDE +!/RTD USE W3SERVMD, ONLY: W3EQTOLL !/S USE W3SERVMD, ONLY : STRACE !/ IMPLICIT NONE @@ -134,6 +142,8 @@ REAL, ALLOCATABLE :: XBPI(:), YBPI(:), RDBPI(:,:), & XBPO(:), YBPO(:), RDBPO(:,:), & ABPIN(:,:) +!/RTD REAL, ALLOCATABLE :: XTMP(:), YTMP(:), ANGTMP(:) +!/RTD LOGICAL :: ISRTD INTEGER, ALLOCATABLE :: IPBPI(:,:), IPBPO(:,:) @@ -174,6 +184,9 @@ ! CALL W3IOGR ( 'READ', NDSM ) WRITE (NDSO,920) GNAME +!/RTD! +!/RTD ISRTD = POLAT .LT. 90.0 +!/RTD! ! ! 3. Read input file ! @@ -288,6 +301,7 @@ END IF END DO ALLOCATE(XBPO(NBO),YBPO(NBO)) +!/RTD IF (ISRTD) ALLOCATE(XTMP(NBO), YTMP(NBO), ANGTMP(NBO)) ALLOCATE (IPBPO(NBO,4),RDBPO(NBO,4)) IBO=0 DO ISEA=1,NSEA @@ -308,7 +322,15 @@ END SELECT !GTYPE END IF END DO - +!/RTD! +!/RTD ! Convert grid boundary cell locations to standard pole +!/RTD IF( ISRTD ) THEN +!/RTD XTMP = XBPO +!/RTD YTMP = YBPO +!/RTD CALL W3EQTOLL(YTMP, XTMP, YBPO, XBPO, ANGTMP, POLAT, POLON, NBO) +!/RTD DEALLOCATE(XTMP, YTMP, ANGTMP) +!/RTD ENDIF +!/RTD! OPEN(NDSB,FILE='nest.ww3',FORM='UNFORMATTED',status='unknown') ALLOCATE(LATS(NBO2),LONS(NBO2)) DO IP=1,NBO2 @@ -411,6 +433,13 @@ ! READ(200+IP,'(A1,A10,A1,2F7.2,F10.1,F7.2,F6.1,F7.2,F6.1)') & space,buoyname,space,LATS(IP),LONS(IP),depth,U10,Udir,Curr,Currdir +!/RTD! +!/RTD IF (ISRTD) THEN +!/RTD ! Rotated coordinates are scaled in range 0 - 360 +!/RTD IF(LONS(IP) .LT. 0) LONS(IP) = LONS(IP) + 360.0 +!/RTD IF(LONS(IP) .GT. 360) LONS(IP) = LONS(IP) - 360.0 +!/RTD ENDIF +!/RTD! READ(200+IP,*,IOSTAT=IERR) SPEC2D IF (IFMIN2.GT.1) THEN ! diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 501ec4c54..ee1964b73 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -106,6 +106,7 @@ !/ 22-Jan-2020 : Update default values for IS2 ( version 7.05 ) !/ 20-Feb-2020 : Include Romero's dissipation in ST4 ( version 7.06 ) !/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) +!/ 18-Jun-2020 : Adds 360-day calendar option ( version 7.08 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -519,7 +520,7 @@ IPBPO, ISBPO, XBPO, YBPO, RDBPO, FNMPRE, & IHMAX, HSPMIN, WSMULT, WSCUT, FLCOMB, & NOSWLL, PTMETH, PTFCUT - USE W3TIMEMD, ONLY: NOLEAP + USE W3TIMEMD, ONLY: CALTYPE USE W3NMLGRIDMD ! !/NL3 USE W3SNL3MD, ONLY: LAMMAX, DELTHM @@ -892,8 +893,8 @@ RWNDC, FACBERG, NOSW, GSHIFT, WCOR1, WCOR2, & STDX, STDY, STDT, ICEHMIN, ICEHINIT, ICEDISP, & ICESLN, ICEWIND, ICESNL, ICESDS, ICEHFAC, & - ICEHDISP, ICEDDISP, ICEFDISP, NOLEAP, TRCKCMPR, & - PTM, PTFC, BTBET + ICEHDISP, ICEDDISP, ICEFDISP, CALTYPE, & + TRCKCMPR, PTM, PTFC, BTBET NAMELIST /OUTS/ P2SF, I1P2SF, I2P2SF, & US3D, I1US3D, I2US3D, & USSP, IUSSP, STK_WN, & @@ -2239,7 +2240,7 @@ STDY = -1. STDT = -1. ICEDISP = .FALSE. - NOLEAP = .FALSE. + CALTYPE = 'standard' ! Variables for 3D array output E3D=0 I1E3D=1 @@ -2582,6 +2583,11 @@ !/MLIM J = 1 WRITE (NDSO,967) FHMAX, FHMAX/SQRT(2.), YESXNO(J) IF ( FHMAX.LT.0.50 .AND. J.EQ.1 ) WRITE (NDST,968) +! + IF (TRIM(CALTYPE) .NE. 'standard' .AND. & + TRIM(CALTYPE) .NE. '360_day' .AND. & + TRIM(CALTYPE) .NE. '365_day' ) GOTO 2003 + WRITE (NDST,1973) CALTYPE WRITE (NDSO,*) ! ! 6.x Read values for FLD stress calculation @@ -2761,7 +2767,7 @@ STDX, STDY, STDT, ICEHMIN, ICEHFAC, & ICEHINIT, ICEDISP, ICEHDISP, & ICESLN, ICEWIND, ICESNL, ICESDS, & - ICEDDISP,ICEFDISP, NOLEAP, TRCKCMPR, & + ICEDDISP,ICEFDISP, CALTYPE, TRCKCMPR, & BTBETA ELSE WRITE (NDSO,2966) CICE0, CICEN, LICE, PMOVE, XSEED, FLAGTR, & @@ -2771,7 +2777,7 @@ STDX, STDY, STDT, ICEHMIN, ICEHFAC, & ICEHINIT, ICEDISP, ICEHDISP, & ICESLN, ICEWIND, ICESNL, ICESDS, & - ICEDDISP, ICEFDISP, NOLEAP, TRCKCMPR, & + ICEDDISP, ICEFDISP, CALTYPE, TRCKCMPR,& BTBETA END IF ! @@ -4414,7 +4420,18 @@ !/SMC JS=MAX(1, IJKCel(4,ISEA)/MRFct) !/ARC ENDIF !/ARC -!/SMC !!Li Minimum DMIN depth is used as well for SMC. +!/SMC ! Check that IX, IY are in the bound of [1,NX] and [1,NY] respec. +!/SMC IF ((IX+IK-1 .GT. NX) .OR. (IX .LE. 0)) THEN +!/SMC WRITE (NDSE,1014) ISEA, IX, IX+IK-1, NX +!/SMC CALL EXTCDE(65) +!/SMC END IF +!/SMC +!/SMC IF ((IY+JS-1 .GT. NY) .OR. (IY .LE. 0)) THEN +!/SMC WRITE (NDSE,1015) ISEA, IY, IY+JS-1, NY +!/SMC CALL EXTCDE(65) +!/SMC END IF +!/SMC +!/SMC !Li Minimum DMIN depth is used as well for SMC. !/SMC ZB(ISEA)= - MAX( DMIN, FLOAT( IJKCel(5, ISEA) ) ) !/SMC MAPFS(IY:IY+JS-1,IX:IX+IK-1) = ISEA !/SMC MAPSTA(IY:IY+JS-1,IX:IX+IK-1) = 1 @@ -5188,6 +5205,10 @@ 2002 CONTINUE WRITE (NDSE,1002) IERR CALL EXTCDE ( 62 ) +! + 2003 CONTINUE + WRITE (NDSE,1003) + CALL EXTCDE ( 64 ) ! 2222 CONTINUE IF ( GTYPE .NE. UNGTYPE) THEN @@ -5689,6 +5710,7 @@ ' Hrms,max/d factor (-) :',F9.3/ & ' Limiter activated : ',A) 968 FORMAT ( ' *** FACTOR DANGEROUSLY LOW ***') + 1973 FORMAT (/' Calendar type : ',A) ! !/REF1 969 FORMAT (/' Shoreline reflection ',A/ & !/REF1 ' --------------------------------------------------') @@ -5781,7 +5803,7 @@ ' ICESLN = ',F6.2,', ICEWIND = ',F6.2, & ', ICESNL = ',F6.2,', ICESDS = ',F5.2,','/ & ' ICEDDISP = ',F5.2,', ICEFDISP = ',F5.2, & - ', NOLEAP = ',L3,' , TRCKCMPR = ', L3,','/ & + ', CALTYPE = ',A8,' , TRCKCMPR = ', L3,','/ & ' BTBET = ', F6.2, ' /') ! 2976 FORMAT ( ' &OUTS P2SF =',I2,', I1P2SF =',I2,', I2P2SF =',I3,','/& @@ -5964,6 +5986,10 @@ 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & ' ERROR IN READING FROM INPUT FILE'/ & ' IOSTAT =',I5/) +! + 1003 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & + ' INVALID CALENDAR TYPE: SELECT ONE OF:', & + ' standard, 360_day, or 365_day '/) ! 1004 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & ' CANNOT READ UNFORMATTED (IDFM = 3) FROM UNIT', & @@ -6003,6 +6029,14 @@ ' AND REPLACED WITH A STRING INDICATING THE TYPE'/ & ' OF GRID INDEX CLOSURE (NONE, SMPL or TRPL).'/ & ' *** PLEASE UPDATE YOUR GRID INPUT FILE ACCORDINGLY ***'/) +! + 1014 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & + ' SMC CELL LONGITUDE RANGE OUTSIDE BASE GRID RANGE:'/& + ' ISEA =', I6, '; IX =', I4, ':', I4,'; NX =', I4/) +! + 1015 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & + ' SMC CELL LATITUDE RANGE OUTSIDE BASE GRID RANGE: '/& + ' ISEA =', I6, '; IY =', I4, ':', I4,'; NY =', I4/) ! 1020 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & ' SOURCE TERMS REQUESTED BUT NOT SELECTED'/) diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 26650f84e..66dd41d97 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -32,6 +32,7 @@ !/ 12-Sep-2018 : Added extra partitioned fields ( version 6.06 ) !/ 25-Sep-2018 : Add WBT parameter ( version 6.06 ) !/ 28-Mar-2019 : Bugfix to NBIPART check. ( version 6.07 ) +!/ 18-Jun-2020 : Support for 360-day calendar. ( version 7.08 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -4969,18 +4970,25 @@ IRET = NF90_DEF_VAR(NCID, 'time', NF90_DOUBLE, DIMID(4+EXTRADIM), VARID(3+EXTRADIM)) !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(3+EXTRADIM), 1, 1, DEFLATE) CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'long_name','julian day (UT)') + SELECT CASE (TRIM(CALTYPE)) + CASE ('360_day') + IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'long_name','time in 360 day calendar') + CASE ('365_day') + IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'long_name','time in 365 day calendar') + CASE ('standard') + IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'long_name','julian day (UT)') + END SELECT CALL CHECK_ERR(IRET) IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'standard_name','time') CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'calendar','standard') - CALL CHECK_ERR(IRET) IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'units','days since 1990-01-01 00:00:00') CALL CHECK_ERR(IRET) IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'conventions', & 'relative julian days with decimal part (as parts of the day )') IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'axis','T') CALL CHECK_ERR(IRET) + IRET=NF90_PUT_ATT(NCID,VARID(3+extradim),'calendar',TRIM(CALTYPE)) + CALL CHECK_ERR(IRET) ! ! triangles for irregular grids ! diff --git a/model/ftn/ww3_ounp.ftn b/model/ftn/ww3_ounp.ftn index be2e50294..e3b737a95 100644 --- a/model/ftn/ww3_ounp.ftn +++ b/model/ftn/ww3_ounp.ftn @@ -52,6 +52,7 @@ !/ (in source terms) !/ 15-May-2018 : Add namelist feature ( version 6.05 ) !/ 18-Aug-2018 : S_{ice} IC5 (Q. Liu) ( version 6.06 ) +!/ 18-Jun-2020 : Support for 360-day calendar. ( version 7.08 ) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -160,7 +161,7 @@ USE W3IOPOMD, ONLY: W3IOPO USE W3SERVMD, ONLY : ITRACE, NEXTLN, EXTCDE, STRSPLIT !/S USE W3SERVMD, ONLY : STRACE - USE W3TIMEMD, ONLY: STME21, TICK21, DSEC21, T2D, TSUB, U2D + USE W3TIMEMD, ONLY: CALTYPE, STME21, TICK21, DSEC21, T2D, TSUB, U2D !/ USE W3GDATMD USE W3WDATMD, ONLY: TIME @@ -2665,12 +2666,19 @@ IRET=NF90_DEF_VAR(NCID, 'time', NF90_DOUBLE, DIMID(1), VARID(1)) CALL CHECK_ERR(IRET) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(1), 1, 1, DEFLATE) - IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','julian day (UT)') + SELECT CASE (TRIM(CALTYPE)) + CASE ('360_day') + IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','time in 360 day calendar') + CASE ('365_day') + IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','time in 365 day calendar') + CASE ('standard') + IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','julian day (UT)') + END SELECT IRET=NF90_PUT_ATT(NCID,VARID(1),'standard_name','time') - IRET=NF90_PUT_ATT(NCID,VARID(1),'calendar','standard') IRET=NF90_PUT_ATT(NCID,VARID(1),'units','days since 1990-01-01 00:00:00') IRET=NF90_PUT_ATT(NCID,VARID(1),'conventions','Relative julian days with decimal part (as parts of the day)') - IRET=NF90_PUT_ATT(NCID,VARID(1),'axis','T') + IRET=NF90_PUT_ATT(NCID,VARID(1),'axis','T') + IRET=NF90_PUT_ATT(NCID,VARID(1),'calendar',TRIM(CALTYPE)) ! station IRET=NF90_DEF_VAR(NCID, 'station', NF90_INT, (/DIMID(2)/), VARID(27)) diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 62f33b311..65a971191 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -53,6 +53,7 @@ !/ 14-Sep-2018 : Remove PALM implementation ( version 6.06 ) !/ 04-Oct-2019 : Inline Output implementation ( version 6.07 ) !/ (Roberto Padilla-Hernandez) +!/ 16-Jul-2020 : Variable coupling time step ( version 7.08 ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -797,6 +798,17 @@ ODAT(28) = MAX ( 0 , ODAT(28) ) ODAT(33) = MAX ( 0 , ODAT(33) ) ODAT(38) = MAX ( 0 , ODAT(38) ) +! +!/COU ! Test the validity of the coupling time step +!/COU IF (ODAT(33) == 0) THEN +!/COU IF ( IAPROC .EQ. NAPOUT ) THEN +!/COU WRITE(NDSO,1010) ODAT(33), INT(DTMAX) +!/COU END IF +!/COU ODAT(33) = INT(DTMAX) +!/COU ELSE IF (MOD(ODAT(33),INT(DTMAX)) .NE. 0) THEN +!/COU GOTO 2009 +!/COU END IF +! ! 2.5 Output types NPTS = 0 @@ -1638,14 +1650,6 @@ TTIME(1) = 0 TTIME(2) = 0 DTTST = REAL ( ODAT(5*(J-1)+3) ) -!/COU ! Force coupling time step to model time step -!/COU IF ( J .EQ. 7 .AND. DTTST.NE.DTMAX ) THEN -!/COU IF ( IAPROC .EQ. NAPOUT ) THEN -!/COU WRITE (NDSO,1009) DTTST, DTMAX -!/COU END IF -!/COU ODAT(5*(J-1)+3) = INT(DTMAX) -!/COU DTTST = DTMAX -!/COU END IF CALL TICK21 ( TTIME , DTTST ) CALL STME21 ( TTIME , DTME21 ) IF ( ( ODAT(5*(J-1)+1) .NE. ODAT(5*(J-1)+4) .OR. & @@ -2411,6 +2415,10 @@ 2008 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1008) IERR CALL EXTCDE ( 1008 ) +! +!/COU 2009 CONTINUE +!/COU IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1009) ODAT(33), NINT(DTMAX) +!/COU CALL EXTCDE ( 1009 ) ! 2054 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1054) @@ -2550,10 +2558,16 @@ 1008 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : *** '/ & ' ERROR IN OPENING OUTPUT FILE'/ & ' IOSTAT =',I5/) - 1009 FORMAT (/' *** WAVEWATCH III WARNING IN W3SHEL : *** '/ & - ' COUPLING AND MODEL TIME STEPS NOT CONSISTENT'/ & - ' IT WILL OVERWRITE COUPLING TIME STEP'/ & - ' FROM ',F4.1, ' TO ',F4.1/) +! +!/COU 1009 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : *** '/ & +!/COU ' COUPLING TIME STEP NOT MULTIPLE OF'/ & +!/COU ' MODEL TIME STEP: ',I6, I6/) +! +!/COU 1010 FORMAT (/' *** WAVEWATCH III WARNING IN W3SHEL : *** '/ & +!/COU ' COUPLING TIME STEP NOT DEFINED, '/ & +!/COU ' IT WILL BE OVERRIDEN TO DEFAULT VALUE'/ & +!/COU ' FROM ',I6, ' TO ',I6/) +! 1054 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : *** '/ & ' POINT OUTPUT ACTIVATED BUT NO POINTS DEFINED'/) ! diff --git a/model/ftn/ww3_trnc.ftn b/model/ftn/ww3_trnc.ftn index f12c259a9..4bd3dfaf1 100644 --- a/model/ftn/ww3_trnc.ftn +++ b/model/ftn/ww3_trnc.ftn @@ -12,6 +12,7 @@ !/ 17-Feb-2016 : Creation ( version 5.11 ) !/ 11-Apr-2016 : Adapted to use more options ( version 5.11 ) !/ 15-May-2018 : Add namelist feature ( version 6.05 ) +!/ 18-Jun-2020 : Support for 360-day calendar. ( version 7.08 ) !/ !/ Copyright 2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -791,13 +792,20 @@ ! time IRET=NF90_DEF_VAR(NCID, 'time', NF90_DOUBLE, (/DIMID(1)/), VARID(1)) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(1), 1, 1, DEFLATE) - IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','julian day (UT)') + SELECT CASE (TRIM(CALTYPE)) + CASE ('360_day') + IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','time in 360 day calendar') + CASE ('365_day') + IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','time in 365 day calendar') + CASE ('standard') + IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','julian day (UT)') + END CASE IRET=NF90_PUT_ATT(NCID,VARID(1),'standard_name','time') - IRET=NF90_PUT_ATT(NCID,VARID(1),'calendar','standard') IRET=NF90_PUT_ATT(NCID,VARID(1),'units','days since 1990-01-01 00:00:00') IRET=NF90_PUT_ATT(NCID,VARID(1),'conventions', & 'Relative julian days with decimal part (as parts of the day)') IRET=NF90_PUT_ATT(NCID,VARID(1),'axis','T') + IRET=NF90_PUT_ATT(NCID,VARID(1),'calendar',TRIM(CALTYPE)) ! frequency IRET=NF90_DEF_VAR(NCID, 'frequency', NF90_FLOAT, (/DIMID(2)/),VARID(2)) diff --git a/model/inp/ww3_bounc.inp b/model/inp/ww3_bounc.inp index 61143ad06..672a0dc34 100644 --- a/model/inp/ww3_bounc.inp +++ b/model/inp/ww3_bounc.inp @@ -16,6 +16,9 @@ $ List of spectra files. These NetCDF files use the WAVEWATCH III $ format as described in the ww3_ounp.inp file. The files are $ defined relative to the directory in which the program is run. $ +$ Note: When using a rotated pole WW3 grid, these input spectra are +$ always assumed to be formulated on a standard pole. +$ SPECTRA_NC/ww3.62163_spec.nc SPECTRA_NC/ww3.62069_spec.nc 'STOPSTRING' diff --git a/model/inp/ww3_bound.inp b/model/inp/ww3_bound.inp index 15a082b0a..05976bd41 100644 --- a/model/inp/ww3_bound.inp +++ b/model/inp/ww3_bound.inp @@ -26,6 +26,9 @@ $ $ If data is used other than from previous WAVEWATCH III runs, then $ this data will need to be converted to the WAVEWATCH III format. $ +$ Note: When using a rotated pole WW3 grid, these input spectra are +$ always assumed to be formulated on a standard pole. +$ $ In the case of NetCDF files see ww3_bounc.inp $ SPECTRI/mww3.W004N476.spec diff --git a/model/inp/ww3_grid.inp b/model/inp/ww3_grid.inp index 1a4dffe5b..5074281b0 100644 --- a/model/inp/ww3_grid.inp +++ b/model/inp/ww3_grid.inp @@ -440,6 +440,9 @@ $ STDX : Space-Time Extremes X-Length $ STDY : Space-Time Extremes Y-Length $ STDT : Space-Time Extremes Duration $ P2SF : ...... +$ CALTYPE: Calendar type. The only accepted +$ values are 'standard' (default), +$ '365_day', or '360_day'. $ $ Diagnostic Sea-state Dependent Stress- - - - - - - - - - - - - - - - - $ Reichl et al. 2014 : Namelist FLD1 diff --git a/model/nml/namelists.nml b/model/nml/namelists.nml new file mode 100644 index 000000000..4d79c30a3 --- /dev/null +++ b/model/nml/namelists.nml @@ -0,0 +1,147 @@ +! Switch FLD1 +!&FLD1 TAILTYPE = 0, TAILLEV = 0.006, TAILT1 = 1.25, TAILT2 = 3.00 / +! Switch FLD2 +!&FLD2 TAILTYPE = 0, TAILLEV = 0.006, TAILT1 = 1.25, TAILT2 = 3.00 / +! Switch FLX3 +!&FLX3 CDMAX = 2.5E-3, CTYPE = 0 / +! Switch FLX4 +!&FLX4 CDFAC = 1.0 / +! Switch IC2 +!&SIC2 IC2DISPER = .FALSE., IC2TURB = 1., IC2TURBS = 0., IC2ROUGH = 0.01, +!IC2REYNOLDS = 1.5E5, IC2SMOOTH = 2E5, IC2VISC = 1., IC2DMAX = 0. / +! Switch IC3 +!&SIC3 IC3MAXTHK = 100.0, IC3MAXCNC = 100.0, IC2TURB = 2.0, IC2TURBS = 0., +!IC2ROUGH = 0.02, IC2REYNOLDS = 1.5E5, IC2SMOOTH = 7.0E4, IC2VISC = 2.0, +!IC3CHENG = .TRUE., USECGICE = .FALSE., IC3HILIM = 100.0, IC3KILIM = 100.0, +!IC3HICE = -1.0, IC3VISC = -2.0, IC3DENS = -3.0, IC3ELAS = -4.0 / +! Switch IC4 +!&SIC4 IC4METHOD = 1, IC4KI = 0.0, IC4FC = 0.0 / +! Switch IC5 +!&SIC5 IC5MINIG = 1., IC5MINWT = 0., IC5MAXKRATIO = 1E9, IC5MAXKI = 100., +!IC5MINHW = 300., IC5MAXITER = 100., IC5RKICK = 0., IC5KFILTER = 0.0025 / +! Switch IG1 +!&SIG1 IGMETHOD = 2, IGADDOUTP = 0, IGSOURCE = 2, IGSTERMS = 0, +!IGMAXFREQ = 0.03, IGSOURCEATBP = 0, IGBCOVERWRITE = .TRUE., +!IGSWELLMAX = .TRUE., IGKDMIN = 1.1, IGFIXEDDEPTH = 0., +!IGEMPIRICAL = 0.00125 / +! Switch LN1 +!&SLN1 CLIN = 80., RFPM = 1., RFHF = 0.5 / +! Switch ST1 +!&SIN1 CINP = 0.25 / +! Switch ST2 +!&SIN2 ZWND = 10., SWELLF = 0.100, STABSH = 1.38, STABOF = -0.01, +!CNEG = -0.1, CPOS = 0.1, FNEG = 150. / +! Switch ST3 +!&SIN3 ZWND = 10., ALPHA0 = 0.0095, Z0MAX = 0.0, BETAMAX = 1.2, +!SINTHP = 2., SWELLF = 0., ZALP = 0.0110 / +! Switch ST4 +!&SIN4 ZWND = 10., ALPHA0 = 0.0095, Z0MAX = 0.0, Z0RAT = 0.04, BETAMAX = 1.43, +!SINTHP = 2., SWELLF = 0.66, SWELLFPAR = 1, SWELLF2 = -0.018, SWELLF3 = 0.022, +!SWELLF4 = 1.5E5, SWELLF5 = 1.2, SWELLF6 = 0., SWELLF7 = 360000., +!TAUWSHELTER = 0.3, ZALP = 0.006, SINBR = 0. / +! Switch NL1 +!&SNL1 LAMBDA = 0.25, NLPROP = 1.00E7, KDCONV = 0.75, KDMIN = 0.50, +!SNLCS1 = 5.5, SNLCS2 = 0.833, SNLCS3 = -1.25 / +! Switch NL2 +!&SNL2 IQTYPE = 2, TAILNL = -FACHF, NDEPTH = 0 / +! Switch NL2 +!&ANL2 DEPTHS = 100*1000. / +! Switch NL3 +!&SNL3 NQDEF = 0, MSC = 0., NSC = -3.5, KDFD = 0.20, KDFS = 5.00 / +! Switch NL3 +!&ANL3 QPARMS = 100*(0.25 , 0.00, -1., 1.E7, 0.00) / +! Switch NL4 +!&SNL4 INDTSA = 1, ALTLP = 2 / +! Switch NLS +!&SNLS A34 = 0.05, FHFC = 1.E10, DNM = 0.25, FC1 = 1.25, FC2 = 1.50, +!FC3 = 6.00 / +! Switch ST1 +!&SDS1 CDIS = -2.36E-5, APM = 3.02E-3 / +! Switch ST2 +!&SDS2 SDSA0 = 4.8, SDSA1 = 1.7e-4, SDSA2 = 2.0, SDSB0 = 0.3e-3, +!SDSB1 = 0.47, PHIMIN = 0.003, SDSALN = 0.002, FPIMIN = 0.009 / +! Switch ST3 +!&SDS3 SDSC1 = -2.1, WNMEANP = 0.5, FXFM3 = 2.5, FXPM3 = 4., +!WNMEANPTAIL = 0.5, SDSDELTA1 = 0.4, SDSDELTA2 = 0.6 / +! Switch ST4 +!&SDS4 WNMEANP = 0.5, FXFM3 = 2.5, FXFMAGE = 0., FXPM3 = 4., +!WNMEANPTAIL = -0.5, SDSBCHOICE = 1, SDSC2 = -2.2E-5, SDSCUM = -0.40344, +!SDSC4 = 1., SDSC5 = 0., SDSNUW = 0., SDSC6 = 0.3, SDSBR = 0.90E-3, +!SDSBRFDF = 0, SDSBRF1 = 0.5, SDSP = 2., SDSDTH = 80., SDSCOS = 2., +!SDSISO = 2, SDSBM0 = 1., SDSBM1 = 0., SDSBM2 = 0., SDSBM3 = 0., +!SDSBM4 = 0., SDSBCK = 0., SDSABK = 1.5, SDSPBK = 4., SDSBINT = 0.3, +!SDSHCK = 1.5, WHITECAPWIDTH = 0.3, SDSSTRAIN = 0., SDSFACMTF = 400, +!SDSSTRAINA = 15., SDSSTRAIN2 = 0., WHITECAPDUR = 0.56, SDSBT = 1.100E-3, +!SDSL = 3.5000e-05, SPMSS = 0.5, SDSNMTF = 1.5, SDSCUMP = 2., SDSMWD = .9, +!SDSMWPOW = 1. SDKOF = 3. / +! Switch ST6 +!&SIN6 SINA0 = 0.09, SINWS = 32.0, SINFC = 6.0 / +! Switch ST6 +!&SDS6 SDSET = .TRUE., SDSA1 = 4.75E-06, SDSP1 = 4, SDSA2 = 7.00E-05, +!SDSP2 = 4 / +! Switch ST6 +!&SWL6 CSTB1 = .FALSE., SWLB1 = 0.41E-02 / +! Switch BT1 +!&SBT1 GAMMA = -0.067 / +! Switch BT4 +!&SBT4 SEDMAPD50 = .FALSE., SED_D50_UNIFORM = 2.E-4, RIPFAC1 = 0.4, +!RIPFAC2 = -2.5, RIPFAC3 = 1.2, RIPFAC4 = 0.05, SIGDEPTH = 0.05, +!BOTROUGHMIN = 0.01, BOTROUGHFAC = 1.00 / +! Switch DB1 +!&SDB1 BJALFA = 1., BJGAM = 0.73, BJFLAG = .TRUE. / +! Switch UOST +!&UOST UOSTFILELOCAL = 'obstructions_local.name.in', +!UOSTFILESHADOW = 'obstructions_shadow.name.in', UOSTFACTORLOCAL = 1, +!UOSTFACTORSHADOW = 1 / +! Switch PR1 +!&PRO1 CFLTM = 0.7 / +! Switch PR2 +!&PRO2 CFLTM = 0.7, DTIME = 0., LATMIN = 70. / +! Switch SMC +!&PSMC CFLTM = 0.7, LVSMC = 1, ISHFT = 0, JEQT = 0, NBISMC = 0, +!DTIME = 0.0, LATMIN = 86.0, RFMAXD = 80.0, UNO3 = .FALSE., +!AVERG = .FALSE., SEAWND = .FALSE. / +! Switch PR3 +!&PRO3 CFLTM = 0.7, WDTHCG = 1.5, WDTHTH = 1.5 / +&UNST UGOBCAUTO = .TRUE., UGBCCFL = .TRUE., UGOBCDEPTH= -10., +UGOBCFILE = 'unset', EXPFSN = .TRUE., EXPFSPSI = .FALSE., +EXPFSFCT = .FALSE., IMPFSN = .FALSE., IMPTOTAL = .FALSE., +EXPTOTAL = .FALSE., IMPREFRACTION = .FALSE., IMPFREQSHIFT = .FALSE., +IMPSOURCE = .FALSE., SETUP_APPLY_WLV = .FALSE., SOLVERTHR_SETUP = 1E-14, +CRIT_DEP_SETUP = 0.1, JGS_TERMINATE_MAXITER = .TRUE., +JGS_TERMINATE_DIFFERENCE = .TRUE., JGS_TERMINATE_NORM = .FALSE., +JGS_LIMITER = .FALSE., JGS_BLOCK_GAUSS_SEIDEL = .TRUE., +JGS_USE_JACOBI = .TRUE., JGS_MAXITER = 100, JGS_PMIN = 1, +JGS_DIFF_THR = 1.E-10, JGS_NORM_THR = 1.E-20, JGS_NLEVEL = 0, +JGS_SOURCE_NONLINEAR = .FALSE. / +&MISC CICE0 = 0.5, CICEN = 0.5, LICE = 0., ICEHFAC = 1.0, ICEHMIN = 0.2, +ICEHINIT = 0.5, ICESLN = 1.0, ICEWIND = 1.0, ICESNL = 1.0, ICESDS = 1.0, +ICEHDISP = 0.6, ICEDDISP = 80, ICEFDISP = 2, GSHIFT = 0.0D0, PMOVE = 0.5, +XSEED = 1., FLAGTR = 0, XP = 0.15, XR = 0.10, XFILT = 0.05, IHM = 100, +HSPM = 0.05, WSM = 1.7, WSC = 0.333, FLC = .TRUE., TRCKCMPR = .TRUE., +NOSW = 5, PTM = 1, PTFC = 0.1, FMICHE = 1.6, RWNDC = 1., WCOR1 = 99., +WCOR2 = 0., BTBET = 1.2, STDX = -1., STDY = -1., STDT = -1., +ICEDISP = .FALSE., CALTYPE = 'standard', FACBERG=1. / +&OUTS E3D = 0, I1E3D = 1, I2E3D = 32, P2SF = 0, I1P2SF = 1, +I2P2SF = 15, US3D = 0, I1US3D = 1, I2US3D = 32, USSP = 0, +IUSSP = 1, STK_WN(:) = 0.0, STK_WN(1) = 0.00628, TH1MF = 0, +I1TH1M = 1, I2TH1M = 32, STH1MF = 0, I1STH1M = 1, I2STH1M = 32, +TH2MF = 0, I1TH2M = 1, I2TH2M = 32, STH2MF = 0, I1STH2M = 1. +I2STH2M = 32 / +! Switch ISI1 +!&SIS1 ISC1 = 1., ISC2 = 0. / +! Switch ISI2 +!&SIS2 ISC1 = 1., IS2C2 = 0., IS2C3 = 0., IS2CONC = 0., IS2BACKSCAT = 1., +!IS2BREAK = .FALSE., IS2BREAKF = 3.6, IS2FLEXSTR = 6.00E+05, +!IS2ISOSCAT = .TRUE., IS2DISP = .FALSE., IS2DUPDATE = .TRUE., +!IS2FRAGILITY = 0.9, IS2DMIN = 20, IS2DAMP = 0., IS2CREEPB = 0., +!IS2CREEPC = 0.4, IS2CREEPD = 0.5, IS2CREEPN = 3.0, IS2BREAKE = 1., +!IS2WIM1 = 1., IS2ANDISB = .TRUE., IS2ANDISE = 0.55, IS2ANDISD = 2.0E-9, +!IS2ANDISN = 1. / +! Switch REF1 +!&REF1 REFCOAST = 0., REFMAP = 0., REFMAPD = 0., REFRMAX = 1., +!REFFREQPOW = 2., REFFREQ = 0., REFCOSP_STRAIGHT = 4., +!REFSLOPE = 0.22, REFSUBGRID = 0., REFICEBERG = 0., REFUNSTSOURCE = 0. / +! Switch RTD +!&ROTD PLAT = -999.9, PLON = -999.9, UNROT = .TRUE. / +END OF NAMELISTS diff --git a/model/nml/ww3_bounc.nml b/model/nml/ww3_bounc.nml index 79c4923af..eb2e667bc 100644 --- a/model/nml/ww3_bounc.nml +++ b/model/nml/ww3_bounc.nml @@ -5,6 +5,8 @@ ! -------------------------------------------------------------------- ! ! Define the input boundaries to preprocess via BOUND_NML namelist +! Note: When using a rotated pole WW3 grid, the input spectra are +! always assumed to be formulated on a standard pole. ! ! * namelist must be terminated with / ! * definitions & defaults: diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 411a3674b..045fba688 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -31,7 +31,7 @@ prop1D prop2D time fetch hur1mg \ multi01 multi02 multi03 multi04 multi05 \ hybd shwtr unstr pdlib smcgr mudice infgrv \ - uost assim multi06 multi07 multi08 + uost assim calendar oasis multi06 multi07 multi08 do eval " value=\$$par" # echo "$par = $value" @@ -84,7 +84,9 @@ echo " echo ' Multi 06 (curv. + reg. grds) : $multi06'" >> matrix.head echo " echo ' Multi 07 (unstr. + reg. grds) : $multi07'" >> matrix.head echo " echo ' Multi 08 (with ice) : $multi08'" >> matrix.head - echo " echo ' Assim Update of the restart file : $assim'" >> matrix.head + echo " echo ' Assim Update of the restart file : $assim'" >> matrix.head + echo " echo ' OASIS coupling : $oasis'" >> matrix.head + echo " echo ' Calendar type : $calendar'" >> matrix.head echo " echo ' '" >> matrix.head if [ -n "$filter" ] then @@ -2003,6 +2005,25 @@ echo "$rtst -s ST4 -w work_UPD6_U_cap -i input_UPD6_U_cap $ww3 ww3_ta1" >> matrix.body fi + #Test of atmosphere, ocean, and ice coupling using OASIS + if [ "$oasis" = 'y' ] && [ "$dist" = 'y' ] + then + echo ' ' >> matrix.body + echo "$rtst -s OASACM -w work_OASACM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASACM2 -w work_OASACM2 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASOCM -w work_OASOCM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASICM -w work_OASICM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + fi + + # 365_day and 360_day calendars, no switch sharing here + if [ "$calendar" = 'y' ] + then + echo ' ' >> matrix.body + echo "$rtst -g STD -w work_STD -o netcdf $ww3 ww3_tc1" >> matrix.body + echo "$rtst -g C360 -w work_C360 -o netcdf $ww3 ww3_tc1" >> matrix.body + echo "$rtst -g C365 -w work_C365 -o netcdf $ww3 ww3_tc1" >> matrix.body + fi + # --------------------------------------------------------------------------- # # 3. End of script output # # --------------------------------------------------------------------------- # diff --git a/regtests/bin/matrix.comp b/regtests/bin/matrix.comp index ae780fef6..67eb75c6d 100755 --- a/regtests/bin/matrix.comp +++ b/regtests/bin/matrix.comp @@ -111,7 +111,7 @@ # 3. Looping over work directories # # --------------------------------------------------------------------------- # - cases=$(find . -maxdepth 1 -type d -name "work*") + cases=$(find . -maxdepth 1 -type d -name "work*" | grep -v work_oasis) # skip to next tst if no work directory echo 'run : ' $cases if [ -z "$cases" ] ; then @@ -159,7 +159,7 @@ binaryfiles=`grep . -r * | grep 'Binary file' | sed -e "s/^Binary file //" -e "s/ matches$//"` #Generate list of files to skip - skipfiles="ww3_shel.out ww3_multi.out prf.*.mww3 finished ww3_systrk.out gmon.out time_count.txt" + skipfiles="ww3_shel.out ww3_multi.out prf.*.mww3 finished ww3_systrk.out gmon.out time_count.txt oasis_make.out oasis_clean.out toy_make.out toy_clean.out" nf_1=`echo $files_1 | wc -w | awk '{print $1}'` echo " found $nf_1 files in base directory" >> $home_dir/fulldiff.tmp @@ -192,7 +192,7 @@ if [[ $skipfiles =~ (^|[[:space:]])"$file"($|[[:space:]]) ]] then filetype="skip" - elif [[ $file == log.* ]] + elif [[ $file == log.* ]] || [[ $file == "output.ww3" ]] then filetype="log" elif [[ $binaryfiles =~ (^|[[:space:]])"$file"($|[[:space:]]) ]] @@ -232,7 +232,9 @@ sed -n '/version/!p' | \ sed -n '/date :/!p' | \ sed -n '/time :/!p' | \ - sed -n '/Elapsed/!p' > diff_tempfile + sed -n '/Elapsed/!p' | \ + sed -n '/calculating for/!p' | \ + sed -n '/computation loop at/!p' > diff_tempfile else diff $file $return_comp/$run/$file > diff_tempfile fi diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index f8b68daf6..a789dbdcf 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -138,6 +138,8 @@ export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update + export oasis='y' # Atmosphere, ocean, and ice coupling using oasis + export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index ab7d64913..6c7880090 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -154,6 +154,8 @@ fi export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update + export oasis='y' # Atmosphere, ocean, and ice coupling using OASIS + export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/matrix_ukmo_cray b/regtests/bin/matrix_ukmo_cray index f40eec117..33639e5cb 100755 --- a/regtests/bin/matrix_ukmo_cray +++ b/regtests/bin/matrix_ukmo_cray @@ -63,6 +63,7 @@ if [[ $comp == "CCE" ]]; then # Load targetted versions of Cray Development Tools (bug in Fortran StreamIO # for older versions) and netCDF/HDF5 modules: + cmplr="ukmo_cray" echo " module load cdt/18.12" >> matrix.head echo " module load cray-netcdf/4.6.1.3" >> matrix.head echo " module load cray-hdf5/1.10.2.0" >> matrix.head @@ -70,6 +71,7 @@ if [[ $comp == "CCE" ]]; then elif [[ $comp == "GNU" ]]; then # ParMETIS library not currently working with Cray compiler. # Use GNU compiler for programs that use PDLIB. + cmplr="ukmo_cray_gnu" echo " module switch PrgEnv-cray PrgEnv-gnu/5.2.82" >> matrix.head echo " module load cray-netcdf" >> matrix.head echo " export METIS_PATH=/home/d02/frey/WW3/ParMETIS_GNU" >> matrix.head @@ -81,11 +83,10 @@ fi echo " export WWATCH3_NETCDF=NC4" >> matrix.head echo " export NETCDF_CONFIG=\$(which nc-config)" >> matrix.head -# Compiler option. Choose appropriate compiler and set cmplOption to +# Compiler option. Set cmplOption to # y if using for the first time or using a different compiler - cmplr=cray_xc.${comp} - export cmplOption='n' + export cmplOption='y' export mpi='mpiexec' export np='16' @@ -122,6 +123,8 @@ fi export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update + export oasis='y' # Atmosphere, ocean, and ice coupling using oasis + export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/matrix_zeus_HLT b/regtests/bin/matrix_zeus_HLT index 0949b201f..b8da49cd3 100755 --- a/regtests/bin/matrix_zeus_HLT +++ b/regtests/bin/matrix_zeus_HLT @@ -99,6 +99,8 @@ export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update + export oasis='y' # Atmosphere, ocean, and ice coupling using oasis + export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/ww3_tc1/info b/regtests/ww3_tc1/info new file mode 100644 index 000000000..d7c9f0700 --- /dev/null +++ b/regtests/ww3_tc1/info @@ -0,0 +1,37 @@ +############################################################################# +# # +# ww3_tc1 Test script for WW-III, 365_day and 360_day calendar # +# # +# Model should be compiled with the switches : # +# # +# !/FLn !/LNn !/STn !/NLn !/BTn !/DBn !/TRn !/BSn !/XXn # +# Select source term, growth needed, other opt. # +# !/PR0 No propagation. # +# !/WNX1 !/WNT1 !/CRX1 !/CRT1 Wind and current interpolation. # +# !/O1 !/O2 !/O3 !/O4 !/O5 !/O6 !/O7 Sdt out output options. # +# # +# # +# - No other optional switches should be used. # +# - Test case input (default): # +# * ww3_grid.inp : (default) # +# + dry run # +# + one point grid without propagation. # +# + Spectral grid: ntheta = 24, nf = 25 f1 = 0.042 , fgamma = 1.1 # +# * switch options : # +# + switch : WAM 3 phyics. # +# # +# Example run_test commands: # +# (some details will vary by local system and configuration) # +# ./bin/run_test -g STD -w work_STD -o netcdf ../model ww3_tc1 # +# ./bin/run_test -g C360 -w work_C360 -o netcdf ../model ww3_tc1 # +# ./bin/run_test -g C365 -w work_C365 -o netcdf ../model ww3_tc1 # +# +# Hendrik Tolman, Jun 2002 # +# Last Mod : Jun 2020 # +# # +# 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. # +# # +############################################################################# diff --git a/regtests/ww3_tc1/input/STANDARD.depth b/regtests/ww3_tc1/input/STANDARD.depth new file mode 100644 index 000000000..863a9b9d1 --- /dev/null +++ b/regtests/ww3_tc1/input/STANDARD.depth @@ -0,0 +1,3 @@ +1 1 1 +1 1 1 +1 1 1 diff --git a/regtests/ww3_tc1/input/namelists_360_day.nml b/regtests/ww3_tc1/input/namelists_360_day.nml new file mode 100644 index 000000000..5859c1517 --- /dev/null +++ b/regtests/ww3_tc1/input/namelists_360_day.nml @@ -0,0 +1,2 @@ +&MISC XP = 0.075, CALTYPE = '360_day' / +END OF NAMELISTS diff --git a/regtests/ww3_tc1/input/namelists_365_day.nml b/regtests/ww3_tc1/input/namelists_365_day.nml new file mode 100644 index 000000000..97515bbe2 --- /dev/null +++ b/regtests/ww3_tc1/input/namelists_365_day.nml @@ -0,0 +1,2 @@ +&MISC XP = 0.075, CALTYPE = '365_day' / +END OF NAMELISTS diff --git a/regtests/ww3_tc1/input/namelists_standard.nml b/regtests/ww3_tc1/input/namelists_standard.nml new file mode 100644 index 000000000..9dcc95499 --- /dev/null +++ b/regtests/ww3_tc1/input/namelists_standard.nml @@ -0,0 +1,2 @@ +&MISC XP = 0.075, CALTYPE = 'standard' / +END OF NAMELISTS diff --git a/regtests/ww3_tc1/input/points.list b/regtests/ww3_tc1/input/points.list new file mode 100644 index 000000000..5ad8fde50 --- /dev/null +++ b/regtests/ww3_tc1/input/points.list @@ -0,0 +1 @@ +0.0 0.0 'The_point' diff --git a/regtests/ww3_tc1/input/switch b/regtests/ww3_tc1/input/switch new file mode 100644 index 000000000..18b3596c9 --- /dev/null +++ b/regtests/ww3_tc1/input/switch @@ -0,0 +1 @@ +F90 NC4 NOGRB SHRD PR0 FLX1 LN1 ST1 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_tc1/input/ww3_grid_C360.inp b/regtests/ww3_tc1/input/ww3_grid_C360.inp new file mode 100644 index 000000000..b4314da20 --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_grid_C360.inp @@ -0,0 +1,30 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + '360_day SOURCE TERM TEST ' +$ + 1.10 0.0347 32 36 0.5 +$ + T F F F F T + 86400. 600. 600. 15. +$ + &MISC XP = 0.075, CALTYPE = '360_day' / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 1. 1. 1.E-2 + -1. -1. 1.E-2 +$ + -5. 5.75 10 -2500. 3 1 '(....)' 'UNIT' 'input' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 1 1 '(....)' 'PART' 'input' +$ + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 diff --git a/regtests/ww3_tc1/input/ww3_grid_C360.nml b/regtests/ww3_tc1/input/ww3_grid_C360.nml new file mode 100644 index 000000000..188101af4 --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_grid_C360.nml @@ -0,0 +1,227 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0347 + SPECTRUM%NK = 32 + SPECTRUM%NTH = 36 + SPECTRUM%THOFF = 0.5 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLDRY = T + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 86400. + TIMESTEPS%DTXY = 600. + TIMESTEPS%DTKTH = 600. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = '360_day SOURCE TERM TEST' + GRID%NML = '../input/namelists_360_day.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input/STANDARD.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tc1/input/ww3_grid_C365.inp b/regtests/ww3_tc1/input/ww3_grid_C365.inp new file mode 100644 index 000000000..4688fa4b6 --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_grid_C365.inp @@ -0,0 +1,30 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + '365_day SOURCE TERM TEST ' +$ + 1.10 0.0347 32 36 0.5 +$ + T F F F F T + 86400. 600. 600. 15. +$ + &MISC XP = 0.075, CALTYPE = '365_day' / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 1. 1. 1.E-2 + -1. -1. 1.E-2 +$ + -5. 5.75 10 -2500. 3 1 '(....)' 'UNIT' 'input' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 1 1 '(....)' 'PART' 'input' +$ + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 diff --git a/regtests/ww3_tc1/input/ww3_grid_C365.nml b/regtests/ww3_tc1/input/ww3_grid_C365.nml new file mode 100644 index 000000000..32579e18f --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_grid_C365.nml @@ -0,0 +1,227 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0347 + SPECTRUM%NK = 32 + SPECTRUM%NTH = 36 + SPECTRUM%THOFF = 0.5 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLDRY = T + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 86400. + TIMESTEPS%DTXY = 600. + TIMESTEPS%DTKTH = 600. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = '365_day SOURCE TERM TEST' + GRID%NML = '../input/namelists_365_day.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input/STANDARD.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tc1/input/ww3_grid_STD.inp b/regtests/ww3_tc1/input/ww3_grid_STD.inp new file mode 100644 index 000000000..76d054917 --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_grid_STD.inp @@ -0,0 +1,30 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'STANDARD SOURCE TERM TEST ' +$ + 1.10 0.0347 32 36 0.5 +$ + T F F F F T + 86400. 600. 600. 15. +$ + &MISC XP = 0.075, CALTYPE = 'standard' / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 1. 1. 1.E-2 + -1. -1. 1.E-2 +$ + -5. 5.75 10 -2500. 3 1 '(....)' 'UNIT' 'input' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 1 1 '(....)' 'PART' 'input' +$ + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 diff --git a/regtests/ww3_tc1/input/ww3_grid_STD.nml b/regtests/ww3_tc1/input/ww3_grid_STD.nml new file mode 100644 index 000000000..270299532 --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_grid_STD.nml @@ -0,0 +1,227 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.0347 + SPECTRUM%NK = 32 + SPECTRUM%NTH = 36 + SPECTRUM%THOFF = 0.5 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLDRY = T + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 86400. + TIMESTEPS%DTXY = 600. + TIMESTEPS%DTKTH = 600. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'STANDARD SOURCE TERM TEST' + GRID%NML = '../input/namelists_standard.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -5. + GRID%DMIN = 5.75 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 1. + RECT%SY = 1. + RECT%SF = 1.E-2 + RECT%X0 = -1. + RECT%Y0 = -1. + RECT%SF0 = 1.E-2 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -2500. + DEPTH%FILENAME = '../input/STANDARD.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tc1/input/ww3_ounf.inp b/regtests/ww3_tc1/input/ww3_ounf.inp new file mode 100644 index 000000000..ec821a4b2 --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_ounf.inp @@ -0,0 +1,41 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ Time, time increment and number of outputs +$ + 19680228 000000 86400 99 +$ +$ +$ Output request flags identifying fields as in ww3_shel.inp. See that +$ file for a full documentation of field output options. Namelist type +$ selection is used here (for alternative F/T flags, see ww3_shel.inp). +$ + N + HS +$ +$--------------------------------------------------------------------- $ +$ NetCDF version [3,4] and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ Output type 0 1 2 [0,1,2,3,4,5] (swell partition) +$ variables T [T] or not [F] in the same file +$ + 3 3 + 0 1 2 3 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date +$ IX, IY range +$ + ww3. + 6 + 2 2 2 2 +$ +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time idicator with S3 +$ characters, +$ and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tc1/input/ww3_ounf.nml b/regtests/ww3_tc1/input/ww3_ounf.nml new file mode 100644 index 000000000..4a12549bb --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_ounf.nml @@ -0,0 +1,60 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '19680228 000000' + FIELD%TIMESTRIDE = '86400' + FIELD%TIMECOUNT = '99' + FIELD%LIST = 'HS' +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%IX0 = 2 + FILE%IXN = 2 + FILE%IY0 = 2 + FILE%IYN = 2 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tc1/input/ww3_shel.inp b/regtests/ww3_tc1/input/ww3_shel.inp new file mode 100644 index 000000000..e361d8b89 --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_shel.inp @@ -0,0 +1,29 @@ +$ WAVEWATCH III shell input file +$ ------------------------------ + F T + F T + T T + F + F + F + F +$ + 19680228 000000 + 19680301 000000 +$ + 1 +$ + 19680228 000000 86400 19680301 000000 +$ + N + HS +$ + 19680228 000000 0 19680301 000000 + 19680228 000000 0 19680301 000000 + 19680228 000000 0 19680301 000000 + 19680228 000000 0 19680301 000000 + 19680228 000000 0 19680301 000000 +$ + 'WND' 19680228 000000 6. 128. 0. + 'STP' +$ diff --git a/regtests/ww3_tc1/input/ww3_shel.nml b/regtests/ww3_tc1/input/ww3_shel.nml new file mode 100644 index 000000000..3249147bc --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_shel.nml @@ -0,0 +1,345 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%STOP = '19690101 000000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'H' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS' + TYPE%POINT%FILE = '../input/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '19680228 000000' '86400' '19690101 000000' + DATE%POINT = '19680228 000000' '86400' '19690101 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML + HOMOG_COUNT%N_CUR = 1 + HOMOG_COUNT%N_WND = 1 +/ + +&HOMOG_INPUT_NML + HOMOG_INPUT(1)%NAME = 'CUR' + HOMOG_INPUT(1)%VALUE1 = 2. + HOMOG_INPUT(1)%VALUE2 = 90. + + HOMOG_INPUT(2)%NAME = 'WND' + HOMOG_INPUT(2)%VALUE1 = 6. + HOMOG_INPUT(2)%VALUE2 = 128. + HOMOG_INPUT(2)%VALUE3 = 0. +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tc1/input/ww3_strt.inp b/regtests/ww3_tc1/input/ww3_strt.inp new file mode 100644 index 000000000..3d5caaa9f --- /dev/null +++ b/regtests/ww3_tc1/input/ww3_strt.inp @@ -0,0 +1,47 @@ +$ WAVEWATCH III Initial conditions input file +$ ------------------------------------------- +$ Spectral grid: 1.10 0.0347 32 36 0.5 +$ ITYPE = 4 -- user definded spectrum F(f,theta) +$ U10,UDIR,HS,DIR,FP,QP = 5.98m s-1 128.1deg 1.89m 150.4deg 0.0849Hz 1.394 +$ PART. 0: HS,TP,DIR = 1.77m 1 142eg +$ PART. 1: HS,TP,DIR = 0.48m 1 215eg +$ PART. 2: HS,TP,DIR = 0.46m 7 218eg + 4 + 0.0 + 3.4656872e-10 5.3617562e-08 5.5510318e-06 4.0496141e-04 5.6677330e-03 3.4468323e-02 1.1456734e-02 1.2244309e-02 9.4532603e-03 2.3022726e-02 1.4082973e-02 6.7626372e-02 4.1647919e-02 5.8256846e-02 1.3999003e-01 3.1056023e-01 4.3494570e-01 3.4193361e-01 2.2385013e-01 1.4882421e-01 9.6881658e-02 6.6197328e-02 4.7751117e-02 3.3114668e-02 2.2624839e-02 1.5499644e-02 1.0394566e-02 6.9591003e-03 4.7515417e-03 3.2526101e-03 2.2217254e-03 1.5130206e-03 + 8.5975622e-11 1.0933919e-08 2.9444150e-06 3.2586488e-04 8.3286874e-03 5.1433466e-02 1.5595458e-02 3.5638928e-02 1.2303863e-01 8.5783809e-01 7.2696191e-01 1.0150232e+00 5.5978644e-01 4.4972908e-01 4.7626275e-01 5.1937389e-01 5.2969766e-01 4.4621545e-01 3.0085206e-01 1.8540274e-01 1.1414018e-01 7.4205562e-02 5.1795397e-02 3.6095098e-02 2.4509914e-02 1.6891265e-02 1.1897530e-02 8.4069557e-03 5.8793239e-03 4.0304894e-03 2.7210517e-03 1.8260386e-03 + 2.1045285e-10 9.4176755e-10 2.9343164e-07 1.1955093e-04 1.7439831e-02 2.8067589e-01 2.6785088e-01 5.2418703e-01 2.3448720e+00 3.6634574e+00 2.9453812e+00 2.4414101e+00 1.5568509e+00 7.4804586e-01 5.8935523e-01 5.9456229e-01 6.2258333e-01 5.3981096e-01 3.6365283e-01 2.0869653e-01 1.2819451e-01 8.1414908e-02 5.5120021e-02 3.8978331e-02 2.7839165e-02 1.9629128e-02 1.3980614e-02 9.8509453e-03 6.8331948e-03 4.6435790e-03 3.1108905e-03 2.0598129e-03 + 4.9093374e-10 3.7760230e-09 1.6705526e-07 1.1903087e-04 2.1583866e-02 8.1054723e-01 1.2674494e+00 2.1959660e+00 6.0521774e+00 4.4130545e+00 3.5334492e+00 2.7526555e+00 2.0861695e+00 9.5746481e-01 6.5808201e-01 5.9404325e-01 5.8829111e-01 5.0562203e-01 3.3746380e-01 2.0159721e-01 1.3455749e-01 8.8838860e-02 5.9800774e-02 4.2662516e-02 3.1071780e-02 2.2053985e-02 1.5648179e-02 1.0962604e-02 7.5424099e-03 5.0797826e-03 3.3754185e-03 2.2036717e-03 + 3.1007125e-10 4.9579780e-09 9.4447927e-07 2.1034645e-04 7.7247764e-03 5.0725269e-01 1.4985381e+00 2.1839995e+00 3.1409645e+00 4.1095943e+00 3.6633821e+00 2.9350462e+00 1.9006779e+00 7.8937209e-01 5.0660706e-01 4.1810057e-01 3.8078547e-01 3.7327620e-01 2.7425963e-01 1.8099880e-01 1.2944433e-01 9.2680454e-02 6.4303368e-02 4.5764156e-02 3.3101622e-02 2.3637645e-02 1.6732685e-02 1.1684541e-02 7.9751275e-03 5.2796714e-03 3.4566163e-03 2.2352426e-03 + 7.2402145e-12 6.4103567e-09 3.4513923e-06 2.6401741e-04 8.6452917e-04 5.7971813e-03 6.6000357e-02 1.3073207e-01 4.8704764e-01 2.4507670e+00 3.6930103e+00 2.4735250e+00 1.1215655e+00 4.6602359e-01 3.1395012e-01 2.5041431e-01 2.0134440e-01 2.4540383e-01 2.2866599e-01 1.6317818e-01 1.1931450e-01 8.9903295e-02 6.7536667e-02 4.7812797e-02 3.4311339e-02 2.4289731e-02 1.7037969e-02 1.1789965e-02 8.0265049e-03 5.2662594e-03 3.4206205e-03 2.2066371e-03 + 2.8640458e-11 1.5099131e-08 5.6433055e-06 1.1149590e-04 9.4027619e-04 8.4169917e-03 7.6222126e-03 1.3038188e-01 2.8071862e-01 6.1509764e-01 1.0620489e+00 1.5211523e+00 8.9985341e-01 3.8978899e-01 2.5199449e-01 1.6007465e-01 1.0516737e-01 1.3361335e-01 1.7723280e-01 1.4822856e-01 1.1125323e-01 8.6403549e-02 6.8080470e-02 4.8341129e-02 3.4284383e-02 2.4142027e-02 1.6585706e-02 1.1303791e-02 7.6806862e-03 5.0722193e-03 3.3163261e-03 2.1552076e-03 + 7.5352077e-12 9.8951123e-09 1.6645506e-06 6.6271692e-05 2.6168197e-04 1.6667154e-03 4.1287546e-03 2.5062577e-03 2.1365378e-02 1.5522286e-01 1.9447243e-01 1.5565276e-01 1.6766286e-01 1.6912225e-01 1.3604525e-01 8.6060457e-02 5.6593928e-02 6.2732369e-02 1.0299122e-01 1.3501558e-01 1.0701787e-01 8.3788045e-02 6.4798087e-02 4.6573468e-02 3.2614443e-02 2.2984017e-02 1.5644506e-02 1.0539083e-02 7.0900330e-03 4.6924483e-03 3.0932904e-03 2.0378814e-03 + 1.0040365e-12 2.2422719e-09 2.5189576e-07 7.2807197e-06 3.1878826e-05 2.5157278e-04 7.9576549e-04 2.5034028e-03 1.8835047e-03 2.5988661e-03 5.1073595e-03 7.1522128e-03 1.2329847e-02 1.4983562e-02 1.9407276e-02 1.8061820e-02 1.9715499e-02 2.3127832e-02 3.9515954e-02 8.9319631e-02 1.0043963e-01 7.8606382e-02 6.0897931e-02 4.3419495e-02 2.9692657e-02 2.0445097e-02 1.4090415e-02 9.5397197e-03 6.4055324e-03 4.2407503e-03 2.7966753e-03 1.8478847e-03 + 3.4390936e-13 1.0529004e-10 7.4716139e-10 7.1558626e-10 2.5393806e-08 5.0109611e-07 7.1323106e-05 3.9127827e-04 9.5185975e-04 3.6289673e-03 1.6489400e-02 1.5271336e-02 1.4704324e-02 6.7255702e-03 6.0202004e-03 4.0549766e-03 5.2032336e-03 7.7908924e-03 1.3420912e-02 3.6278822e-02 7.6186508e-02 6.7972682e-02 5.3085282e-02 3.9494529e-02 2.7291976e-02 1.8016858e-02 1.2028644e-02 8.1086550e-03 5.4978039e-03 3.6936780e-03 2.4564639e-03 1.6233516e-03 + 5.3683251e-13 6.4181507e-11 1.8422018e-10 4.1832260e-10 1.9098909e-08 2.9454819e-07 4.9877544e-06 1.8272144e-04 2.5565112e-03 1.3384066e-02 4.2993642e-02 3.3039145e-02 3.1142186e-02 2.0227864e-02 2.5687136e-02 7.9410709e-03 4.0865401e-03 5.1084524e-03 8.8750497e-03 1.9310893e-02 4.2960074e-02 5.4326698e-02 4.1121535e-02 3.1948444e-02 2.3221929e-02 1.5978720e-02 1.0845928e-02 7.1920264e-03 4.6615480e-03 3.0203960e-03 2.0009042e-03 1.3331333e-03 + 6.6991378e-13 7.9520314e-11 7.4929163e-10 7.7635132e-10 5.6741820e-09 2.9950108e-08 8.1724352e-07 3.7276222e-05 3.3610320e-04 7.4670429e-04 2.1499072e-04 9.8452321e-04 1.3862010e-03 2.7418362e-03 3.3457289e-03 1.3987173e-03 1.3869889e-03 3.2272814e-03 6.2931571e-03 1.0668539e-02 1.7887220e-02 2.9353183e-02 2.8426893e-02 2.2445252e-02 1.7600287e-02 1.2849257e-02 9.1739167e-03 6.3640727e-03 4.2405399e-03 2.7093119e-03 1.7177726e-03 1.0800263e-03 + 1.5252808e-13 1.1331040e-11 7.2797150e-11 8.6524782e-10 8.5281178e-09 4.9283841e-08 2.7647152e-07 3.1077113e-06 2.0919899e-05 6.4892600e-05 2.0823022e-04 7.3509972e-04 1.0392757e-03 1.3913326e-03 6.9975713e-04 4.4299776e-04 3.8456442e-04 1.4034371e-03 3.0016406e-03 4.5043090e-03 6.7004613e-03 1.0549942e-02 1.3356404e-02 1.2179254e-02 1.0923689e-02 8.9445412e-03 6.8441080e-03 5.0320462e-03 3.5496298e-03 2.3479690e-03 1.5092746e-03 9.3661225e-04 + 6.2208661e-14 9.7689530e-14 6.0933306e-13 2.0565934e-11 1.6596580e-10 1.2954067e-09 1.6445929e-09 1.9028039e-09 1.4088917e-09 5.4281530e-09 2.4854563e-07 2.1474084e-07 2.3513874e-07 6.9457906e-07 3.9532082e-07 2.8812130e-06 3.8456084e-05 3.7877014e-04 1.1383838e-03 1.7021737e-03 2.4873414e-03 3.6202902e-03 4.4927518e-03 4.7200145e-03 4.7667208e-03 4.6681920e-03 4.0473775e-03 3.2736529e-03 2.4864688e-03 1.7359443e-03 1.1627892e-03 7.4115710e-04 + 5.7117993e-14 3.2970528e-13 5.9513450e-11 2.9413758e-09 4.1434241e-08 1.5573128e-06 2.6096525e-06 6.9527250e-06 1.5639325e-05 2.0756479e-04 1.3695601e-03 1.9946429e-03 1.4891851e-03 1.5534521e-03 9.3947211e-04 3.1692890e-04 2.0152758e-04 1.9535961e-04 4.1399381e-04 6.1490980e-04 8.3684118e-04 1.2122735e-03 1.4865240e-03 1.6369222e-03 1.6414102e-03 1.6548410e-03 1.6045477e-03 1.4826823e-03 1.2555723e-03 9.6070691e-04 6.9035211e-04 4.6157814e-04 + 5.9332678e-12 7.0032799e-11 4.7550515e-09 2.0013465e-07 2.2532643e-06 4.4325730e-05 4.1350577e-05 1.5075921e-04 2.4277393e-03 2.7064377e-02 1.1916302e-01 8.4063098e-02 2.3818364e-02 1.3568403e-02 9.1984980e-03 5.1375376e-03 2.5563943e-03 1.3938696e-03 8.3839556e-04 4.5544180e-04 2.8629988e-04 3.5989034e-04 4.6390027e-04 5.2691408e-04 5.2780396e-04 4.8793340e-04 4.2392226e-04 3.8817231e-04 3.4977985e-04 3.0635254e-04 2.4921558e-04 1.8294639e-04 + 7.1345652e-11 3.8286757e-10 1.9627677e-08 7.3145083e-07 7.0669166e-06 6.3959029e-05 5.2701173e-05 5.5510888e-04 9.7202212e-03 7.7723876e-02 1.3490671e-01 3.9297178e-02 9.7570680e-03 6.2860250e-03 4.2948490e-03 4.2473841e-03 3.6112072e-03 1.2116790e-03 4.9334241e-04 1.6176623e-04 6.5825850e-05 7.3814277e-05 1.1102846e-04 1.3881538e-04 1.4543356e-04 1.3092831e-04 9.6637596e-05 6.9970709e-05 5.2277064e-05 4.4999131e-05 3.9461891e-05 3.2361891e-05 + 3.1360090e-10 2.3517882e-10 6.1160126e-09 2.1862223e-07 1.7161885e-06 7.5910939e-06 8.6731641e-05 1.3582237e-03 4.1432511e-03 9.8250424e-03 4.3874085e-03 9.9274833e-03 6.2045455e-03 8.9074131e-03 1.0843529e-02 2.9309280e-02 6.0993470e-03 1.0789986e-03 3.2459345e-04 5.4114455e-05 9.0977082e-06 8.6455148e-06 1.5837357e-05 2.3498655e-05 2.8057691e-05 2.7583257e-05 2.0637854e-05 1.3176072e-05 7.4429418e-06 4.4079252e-06 3.0335757e-06 2.3866023e-06 + 3.6331133e-11 6.2768957e-11 2.2280906e-10 3.4562226e-09 1.7951098e-08 1.5296946e-06 7.4054245e-05 2.9568700e-04 1.6198552e-04 1.8816520e-04 4.8738104e-05 1.6734384e-03 1.8257271e-02 5.4082526e-03 4.2119464e-03 4.3195579e-03 1.3555400e-03 5.7895290e-04 1.2379581e-04 1.3872734e-05 1.7392920e-06 8.1406972e-07 1.1584196e-06 1.8463843e-06 2.7026031e-06 3.2111884e-06 2.8654886e-06 2.0496282e-06 1.1815523e-06 5.7462233e-07 2.8210394e-07 1.4588943e-07 + 5.1233102e-12 1.0883854e-10 2.5416774e-10 1.2637221e-09 4.8039102e-09 2.5493739e-07 6.4712494e-06 7.8600533e-06 9.8642868e-06 1.9609852e-05 2.4360219e-05 2.4754616e-05 1.0873780e-03 9.9761726e-04 3.4404543e-04 4.8214191e-05 2.0010024e-05 2.5276753e-05 8.4936892e-06 1.0787376e-06 1.7786351e-07 8.8808051e-08 7.1487698e-08 6.2453068e-08 8.0722799e-08 1.0931289e-07 1.3002290e-07 1.2126452e-07 8.5910557e-08 4.2447624e-08 2.0557787e-08 9.8836779e-09 + 1.1753774e-12 3.5287138e-11 1.6361634e-10 9.5090469e-10 2.3954869e-09 8.2360785e-09 2.7359684e-07 1.7429731e-05 3.3421915e-05 6.8985195e-05 2.9762954e-04 1.0916146e-04 3.7379476e-04 1.4845899e-04 1.0895281e-05 1.7918614e-05 5.0133858e-05 6.1947485e-06 4.1373832e-07 3.6703362e-08 2.1951454e-08 9.4103410e-09 4.3012789e-09 1.5108526e-09 8.6684071e-10 8.2681606e-10 9.8525577e-10 1.0823988e-09 9.7748964e-10 4.9871030e-10 2.4766517e-10 1.2111567e-10 + 2.4857904e-13 1.3508565e-12 6.9366119e-12 4.1949531e-11 2.3902436e-10 6.1941101e-09 2.3203279e-07 1.4145811e-05 6.0864771e-04 2.2246838e-03 4.1952431e-03 1.4004821e-02 2.3169998e-02 1.4481596e-02 9.4053632e-04 7.5969088e-04 1.0825061e-05 4.4258201e-07 3.3805785e-09 3.4402228e-09 4.4652286e-09 2.0003346e-09 8.6669044e-10 1.1450933e-10 8.4262770e-12 3.4809950e-12 2.0336723e-12 1.3488082e-12 1.1270955e-12 5.9136219e-13 2.9925156e-13 1.4819526e-13 + 1.3444820e-11 2.3762833e-10 2.3727778e-10 2.5696960e-09 1.6081305e-08 3.4689535e-07 1.3004470e-05 1.5468983e-04 2.7224133e-03 1.1786178e-02 7.9325447e-03 8.0892202e-03 1.4172921e-02 6.5851281e-03 4.8684754e-04 4.9572915e-04 2.2122948e-04 6.4195879e-06 2.0074943e-07 3.2417211e-09 4.7113635e-10 1.0939659e-09 4.5214835e-10 2.8293611e-11 4.3664670e-13 8.1810589e-14 2.8400046e-14 8.1720858e-15 1.5069402e-15 5.3701095e-16 2.3582594e-16 1.1123170e-16 + 6.7527456e-11 3.6527930e-09 4.7977206e-08 3.2100949e-08 9.3101050e-08 6.8027578e-07 4.7347880e-06 4.1962267e-05 9.7804202e-04 2.8221840e-03 2.0612502e-03 1.4788262e-03 1.6916610e-03 2.5470066e-03 3.2365447e-04 8.9733046e-05 8.4598476e-05 2.9965495e-06 6.8608735e-08 8.5828300e-10 4.3975273e-10 3.8175835e-10 2.2834550e-10 6.7012840e-11 5.6249026e-11 3.6822156e-11 1.7762805e-11 5.4447679e-12 1.0323088e-12 4.3206411e-13 1.9521904e-13 9.2513684e-14 + 6.3072443e-11 3.2392755e-09 4.4625665e-08 2.4199156e-08 8.3788720e-08 4.8877411e-07 1.3552551e-06 1.5001593e-06 1.8600696e-05 8.6934979e-06 9.9198205e-06 1.4943399e-07 1.2561962e-08 7.4619580e-05 9.9588706e-06 1.9624569e-09 1.5665198e-06 7.5424488e-08 8.3893035e-09 1.0528792e-08 1.6305988e-08 2.2872566e-08 2.9165905e-08 3.0165737e-08 2.2674577e-08 1.1763875e-08 4.5146153e-09 1.2388526e-09 2.5342103e-10 1.0705765e-10 5.0429449e-11 2.4429934e-11 + 1.4967201e-10 8.3461886e-09 1.4366942e-07 2.8613670e-07 2.8401123e-06 1.4424400e-05 3.3170058e-05 2.3211815e-05 2.6473830e-05 3.5707046e-05 1.4291565e-05 1.1732180e-05 4.0972932e-06 2.4943852e-06 9.0462777e-07 4.3574593e-07 1.6398756e-07 1.4416923e-07 3.5975495e-07 7.3141064e-07 1.1043091e-06 1.3692501e-06 1.3816351e-06 1.1174461e-06 7.0912051e-07 3.4553224e-07 1.3558436e-07 4.5692332e-08 1.5461218e-08 8.6545517e-09 4.5686601e-09 2.1714777e-09 + 1.0198775e-10 4.7978927e-09 7.6742793e-08 7.9601523e-07 1.7751485e-05 3.8755657e-05 7.5754244e-05 1.6769429e-05 1.1822070e-05 1.6584105e-05 1.1026284e-05 7.7634286e-06 3.1981606e-06 2.5636878e-06 9.3755585e-07 4.6696630e-07 2.8949103e-07 2.2088675e-06 7.1005843e-06 1.2764403e-05 1.7650927e-05 1.9620351e-05 1.6752902e-05 1.1459371e-05 6.8976178e-06 3.8544213e-06 2.1864016e-06 1.3489487e-06 8.7520635e-07 5.5801291e-07 2.8568775e-07 1.2470346e-07 + 7.9651355e-11 6.7358972e-09 1.8060811e-07 9.6915082e-06 2.3737522e-04 5.5434753e-04 2.2434136e-03 6.1560329e-04 4.9493776e-04 6.9131237e-04 8.6476665e-04 1.0161987e-03 2.8598937e-03 1.1042859e-03 1.1854495e-03 1.8272788e-04 9.7628246e-05 7.6392695e-05 7.8939382e-05 1.0831292e-04 1.3433564e-04 1.3978999e-04 1.1603453e-04 8.4719439e-05 6.3255022e-05 5.0019640e-05 4.0200459e-05 2.9500296e-05 1.9186664e-05 1.1307332e-05 5.5700621e-06 2.4330202e-06 + 9.3878690e-12 1.0432852e-09 7.4450988e-08 2.4094084e-06 2.2636646e-05 5.3205393e-05 2.5563955e-04 9.1978058e-05 8.2805898e-05 1.1626170e-04 8.1581512e-04 1.0021178e-03 1.0326478e-03 3.9858674e-04 2.6989239e-04 1.3483464e-04 1.2258405e-04 1.6818462e-04 5.2806211e-04 6.7619351e-04 7.4868154e-04 8.0946356e-04 7.5168622e-04 6.5554061e-04 5.6436972e-04 4.7035652e-04 3.6666967e-04 2.5326165e-04 1.5476346e-04 8.7637338e-05 4.3933760e-05 2.0238973e-05 + 5.3382708e-11 6.6115535e-09 8.6611226e-07 1.8714451e-05 8.9384077e-05 1.8912141e-04 2.0642369e-03 1.0366332e-03 8.1671099e-04 2.1444437e-04 6.7245355e-04 9.9054712e-04 3.2333550e-03 1.8861479e-03 1.3565035e-03 2.5940713e-04 4.0057609e-03 6.1491001e-03 4.7656684e-03 3.7785582e-03 3.7206775e-03 3.9742179e-03 3.7024620e-03 3.2816685e-03 2.6675621e-03 2.0043505e-03 1.4010910e-03 9.0696826e-04 5.4281281e-04 3.1259184e-04 1.6887770e-04 8.5199863e-05 + 8.1318606e-12 1.3611126e-09 2.1763609e-07 4.6766540e-06 5.7706544e-05 7.6814023e-05 1.9896356e-04 3.4293777e-04 3.6022440e-04 4.0349267e-05 9.2688743e-03 1.4093378e-01 5.5282697e-02 1.9528725e-03 1.4936910e-03 8.3346471e-02 5.6409106e-02 2.6113832e-02 1.5923113e-02 1.2654407e-02 1.2229951e-02 1.2206811e-02 1.0690127e-02 8.7046726e-03 6.3827359e-03 4.3320432e-03 2.8218287e-03 1.8038445e-03 1.1177277e-03 6.7845616e-04 3.9698501e-04 2.1608836e-04 + 3.6327427e-11 4.8719009e-08 2.1611148e-05 3.0366774e-04 7.2079577e-04 2.3808222e-02 5.1319242e-01 7.3975873e-01 5.7569659e-01 2.8054935e-01 2.0009850e-01 1.7221752e-01 5.9314806e-02 7.1398866e-01 5.7935226e-01 3.1770462e-01 1.4029369e-01 6.0958304e-02 3.8721811e-02 3.1490494e-02 2.8506741e-02 2.5956783e-02 2.0137865e-02 1.4683492e-02 1.0033434e-02 6.5823314e-03 4.3067457e-03 2.8285610e-03 1.8177798e-03 1.1278542e-03 6.8231614e-04 3.8771966e-04 + 2.5325884e-09 1.5048736e-06 4.7678608e-04 3.8764554e-03 3.9458857e-03 8.5041843e-02 2.1200852e+00 2.4640102e+00 1.3439357e+00 3.8935670e-01 3.4065381e-01 2.0831972e-01 8.8696465e-02 4.9762321e-01 6.6472775e-01 4.9070469e-01 2.3192263e-01 1.4043875e-01 9.6375003e-02 6.4619638e-02 4.8638605e-02 3.7873533e-02 2.7182495e-02 1.9245133e-02 1.3276502e-02 8.9094779e-03 5.9583299e-03 3.9417930e-03 2.5377325e-03 1.5669386e-03 9.6317148e-04 5.7039119e-04 + 1.3446662e-09 1.1353945e-06 2.3753602e-04 2.0689033e-03 2.6591020e-02 4.7348514e-02 8.0373544e-01 6.8671513e-01 3.8545904e-01 1.5388671e-01 1.1742350e-01 1.0052034e-01 3.2595605e-02 6.1434627e-02 2.4335682e-01 3.1559548e-01 2.5782478e-01 2.1554187e-01 1.4672770e-01 8.7433465e-02 5.9326887e-02 4.3972783e-02 3.2531615e-02 2.3712201e-02 1.6690260e-02 1.1233231e-02 7.4189627e-03 4.8702685e-03 3.1488007e-03 1.9582252e-03 1.2209774e-03 7.4791478e-04 + 2.5060293e-10 7.9305138e-08 7.8220219e-06 3.8885334e-04 1.2956260e-02 3.4177275e-03 1.0121481e-02 3.1865712e-03 4.0536276e-03 3.2452475e-03 7.5883856e-03 8.5630575e-03 9.6532302e-03 6.8903506e-02 1.4028235e-01 1.8698202e-01 2.8705198e-01 2.3469260e-01 1.5293723e-01 1.0037652e-01 6.7986503e-02 5.0547138e-02 3.8330782e-02 2.7771460e-02 1.9304376e-02 1.2970338e-02 8.5135195e-03 5.5912398e-03 3.6533533e-03 2.3051593e-03 1.4576167e-03 9.2182896e-04 + 2.5134131e-11 1.6610308e-08 2.1779776e-06 1.0046641e-04 5.7445420e-04 1.3361064e-03 3.0726469e-03 3.5723951e-03 3.7305751e-03 3.4696977e-03 3.1180535e-03 5.2349460e-03 9.7212512e-03 2.4001207e-02 6.5375313e-02 1.8134753e-01 3.4960151e-01 2.6439470e-01 1.7495602e-01 1.2037574e-01 8.1043020e-02 5.8185950e-02 4.3335266e-02 3.0446887e-02 2.0952258e-02 1.4311092e-02 9.5048845e-03 6.2484881e-03 4.1092490e-03 2.6540784e-03 1.7316678e-03 1.1492297e-03 +$ \ No newline at end of file diff --git a/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 new file mode 100755 index 000000000..9b4b994b5 --- /dev/null +++ b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 @@ -0,0 +1,14 @@ +&NAM_OASIS IL_NB_TIME_STEPS=10, + DELTA_T=360, + DATA_FILENAME='grid_toy_model.nc' / + +&NAM_FCT_SEND CTYPE_FCT='FILES', + CNAME_FILE='toy_coupled_field.nc', + VALUE=10 / + +&NAM_RECV_FIELDS NB_RECV_FIELDS=1, + CRCVFIELDS(1)='TOY__CHA' / + +&NAM_SEND_FIELDS NB_SEND_FIELDS=2, + CSNDFIELDS(1)='TOY_U10M', + CSNDFIELDS(2)='TOY_V10M' / diff --git a/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASICM b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASICM index 8913fbfcb..278837a7b 100755 --- a/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASICM +++ b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASICM @@ -10,6 +10,6 @@ CRCVFIELDS(1)='TOY_ICEF' / &NAM_SEND_FIELDS NB_SEND_FIELDS=3, - CSNDFIELDS(1)='TOY__IC1, + CSNDFIELDS(1)='TOY__IC1', CSNDFIELDS(2)='TOY__IC5', CSNDFIELDS(3)='TOY__ICE' / diff --git a/regtests/ww3_tp2.14/input/namcouple.OASACM2 b/regtests/ww3_tp2.14/input/namcouple.OASACM2 new file mode 100755 index 000000000..e71c2ef85 --- /dev/null +++ b/regtests/ww3_tp2.14/input/namcouple.OASACM2 @@ -0,0 +1,135 @@ +# This is a typical input file for OASIS3-MCT. +# Keywords used in previous versions of OASIS3 +# but now obsolete are marked "Not used" +# Don't hesitate to ask precisions or make suggestions (oasishelp@cerfacs.fr). +# +# Any line beginning with # is ignored. Blank lines are not allowed. +# +######################################################################### + $NFIELDS +# The number of fields described in the second part of the namcouple. +# + 3 + $END +######################################################################### + $NBMODEL +# The number of models in this experiment + their names (6 characters) +# + 2 toyexe wwatch + $END +########################################################################### + $RUNTIME +# The total simulated time for this run in seconds +# + 3600 + $END +########################################################################### + $NLOGPRT +# The first (0 to 30) and second (0 to 3) numbers refer to the ammount of +# debug and time statistic information written by OASIS3-MCT for each model +# and processor (see user manual for more details) +# + 1 + $END +########################################################################### + $STRINGS +# +# The above variables are the general parameters for the experiment. +# Everything below has to do with the fields being exchanged. +# +# line 1: field in ww3 model, field in target model, unused, coupling +# period, number of transformation, restart file, field status +# line 2: nb of pts for ww3 grid without halo first dim, and second dim, +# for target grid first dim, and second dim (optionals, default=0), +# ww3 grid name, target grid name, lag index +# line 3: ww3 grid periodical (P) or regional (R), and nb of overlapping +# points, target grid periodical (P) or regional (R), and number of +# overlapping points +# line 4: list of transformations performed +# line 5: parameters for each transformation +# +# See the correspondances between WW3 and OASIS fields below: +# +# |--------------------------------------------------------------| +# | received fields by ww3 from Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_OWDH WW3_OWDU WW3_OWDV | +# | SSH | WW3__SSH | +# | CUR | WW3_OSSU WW3_OSSV | +# |--------------------------------------------------------------| +# | received fields by ww3 from Atmospheric model : WW3 | OASIS | +# --------------------------------------------------------------| +# | WND | WW3__U10 WW3__V10 | +# |--------------------------------------------------------------| +# | received fields by ww3 from Ice model : WW3 | OASIS | +# --------------------------------------------------------------| +# | ICE | WW3__ICE | +# | IC1 | WW3__IC1 | +# | IC5 | WW3__IC5 | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_ODRY | +# | T0M1 | WW3_T0M1 | +# | HS | WW3__OHS | +# | DIR | WW3_CDIR WW3_SDIR | +# | BHD | WW3__BHD | +# | TWO | WW3_TWOX WW3_TWOY | +# | UBR | WW3__UBR | +# | FOC | WW3__FOC | +# | TAW | WW3_TAWX WW3_TAWY | +# | LM | WW3___LM | +# | OCHA | WW3_OCHA | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Atmospheric model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | CUR | WW3_WSSU WW3_WSSV | +# | ACHA | WW3_ACHA | +# | HS | WW3__AHS | +# | FP | WW3___FP | +# | FWS | WW3__FWS | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ice model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | TWI | WW3_TWIX WW3_TWIY | +# | IC5 | WW3_ICEF | +# |--------------------------------------------------------------| +# +# +# +# ------------------------------------------ +# TOY (toyexe) ==> WW3 (wwatch) +# ------------------------------------------ +# +#~~~~~~~~~~~ +# Field 1 : +#~~~~~~~~~~~ +TOY_U10M WW3__U10 1 360 1 r-toy.nc EXPOUT +80 80 103 119 toyt ww3t LAG=+360 +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# +#~~~~~~~~~~~ +# Field 2 : +#~~~~~~~~~~~ +TOY_V10M WW3__V10 1 360 1 r-toy.nc EXPOUT +80 80 103 119 toyt ww3t LAG=+360 +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# +# ----------------------------------------- +# WW3 (wwatch) ==> TOY (toyexe) +# ----------------------------------------- +# +#~~~~~~~~~~~ +# Field 3 : +#~~~~~~~~~~~ +WW3_ACHA TOY__CHA 1 360 1 r-ww3.nc EXPOUT +103 119 80 80 ww3t toyt LAG=+360 +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# + $END diff --git a/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl b/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl index d8d37ae24..e4f3ea561 100644 --- a/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl +++ b/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl @@ -39,7 +39,7 @@ F90 = F = $(F90) f90 = $(F90) f = $(F90) -CC = icc +CC = AR = ar ARFLAGS = -ruv F90COMP = diff --git a/regtests/ww3_tp2.14/input/prep_env.sh b/regtests/ww3_tp2.14/input/prep_env.sh index 6ec529958..5262d33d7 100755 --- a/regtests/ww3_tp2.14/input/prep_env.sh +++ b/regtests/ww3_tp2.14/input/prep_env.sh @@ -18,6 +18,7 @@ swtstr=$4 echo '' echo ' setup coupling environment' export WWATCH3_DIR=`grep WWATCH3_DIR $WWATCH3_ENV | awk -F' ' '{print $2}' ` +export WWATCH3_CC=`grep WWATCH3_CC $WWATCH3_ENV | awk -F' ' '{print $2}' ` echo ' compile oasis coupler' cd $path_i/oasis3-mct/util/make_dir @@ -36,7 +37,10 @@ then [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ [ "$cmplr" == "zeus_pgi" ] || [ "$cmplr" == "zeus_pgi_debug" ] || \ - [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then + [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || \ + [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ + [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ] || \ + [ "$cmplr" == "hera" ] ; then source $WWATCH3_DIR/bin/cmplr.env # shortlist optl alloptl=( $optl ) @@ -51,10 +55,10 @@ then # shorten comp_mpi comp_mpi_exe="$(echo $comp_mpi | awk -F' ' '{print $1}')" # sed cmplr.tmpl - sed -e "s//$optcs/" -e "s//$optls/" -e "s//$comp_mpi/" -e "s//$comp_mpi_exe/" cmplr.tmpl > cmplr + sed -e "s//$optcs/" -e "s//$optls/" -e "s//$comp_mpi/" -e "s//$WWATCH3_CC/" -e "s//$comp_mpi_exe/" cmplr.tmpl > cmplr echo " sed cmplr.tmpl => cmplr" else - errmsg "cmplr.$cmplr not found" + echo "ERROR: cmplr.$cmplr not found" 2>&1 exit 1 fi chmod 775 cmplr diff --git a/regtests/ww3_tp2.14/input/switch_OASACM2 b/regtests/ww3_tp2.14/input/switch_OASACM2 new file mode 100755 index 000000000..9fff33b21 --- /dev/null +++ b/regtests/ww3_tp2.14/input/switch_OASACM2 @@ -0,0 +1 @@ +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 COU OASIS OASACM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.14/input/toy/function_sent.F90 b/regtests/ww3_tp2.14/input/toy/function_sent.F90 index 4dc6cad86..6c3826b97 100755 --- a/regtests/ww3_tp2.14/input/toy/function_sent.F90 +++ b/regtests/ww3_tp2.14/input/toy/function_sent.F90 @@ -1,4 +1,4 @@ -SUBROUTINE FUNCTION_SENT(IOUTDIAG_UNIT,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & +SUBROUTINE FUNCTION_SENT(IOUTDIAG_UNIT,KRANK,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & NI,NJ, NBFIELDS, & COORDS_1,COORDS_2, & FNC_ANA, IB, CTYPE_FCT, VALUE, CNAME_FILE, CSNDFIELDS) @@ -19,7 +19,7 @@ SUBROUTINE FUNCTION_SENT(IOUTDIAG_UNIT,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & REAL (KIND=WP), PARAMETER :: DP_CONV = DP_PI/180. ! INTEGER, INTENT(IN) :: NI,NJ,IB, NBFIELDS - INTEGER, INTENT(IN) :: IOUTDIAG_UNIT + INTEGER, INTENT(IN) :: IOUTDIAG_UNIT,KRANK INTEGER, INTENT(IN) :: INDI_BEG,INDI_END,INDJ_BEG,INDJ_END ! INTEGER :: I,J @@ -50,7 +50,9 @@ SUBROUTINE FUNCTION_SENT(IOUTDIAG_UNIT,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & ELSE IF (CTYPE_FCT .EQ. 'FILES') THEN CALL READ_FORCING(IOUTDIAG_UNIT,NBFIELDS,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END,IB,CNAME_FILE,CSNDFIELDS,NI,NJ,COORDS_1,COORDS_2,FNC_ANA) ELSE - WRITE(IOUTDIAG_UNIT,*) 'PROBLEM DURING DEFINITION OF THE FUNCTION ANALYTIC : ', CTYPE_FCT + IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'PROBLEM DURING DEFINITION OF THE FUNCTION ANALYTIC : ', CTYPE_FCT + ENDIF CALL ABORT END IF ! diff --git a/regtests/ww3_tp2.14/input/toy/read_dimgrid.F90 b/regtests/ww3_tp2.14/input/toy/read_dimgrid.F90 index 25ba7894b..d8bc821f4 100755 --- a/regtests/ww3_tp2.14/input/toy/read_dimgrid.F90 +++ b/regtests/ww3_tp2.14/input/toy/read_dimgrid.F90 @@ -1,10 +1,10 @@ !**************************************************************************************** -SUBROUTINE read_dimgrid (nlon,nlat,data_filename,w_unit) +SUBROUTINE read_dimgrid (nlon,nlat,data_filename,w_unit,krank) !************************************************************************************** USE netcdf IMPLICIT NONE ! - INTEGER :: i,w_unit + INTEGER :: i,w_unit,krank ! INTEGER :: il_file_id,il_lon_id, & il_lat_id,il_indice_id, & @@ -45,10 +45,12 @@ SUBROUTINE read_dimgrid (nlon,nlat,data_filename,w_unit) ENDDO ! IF ( (lat_dims_len(1) .NE. lon_dims_len(1)).OR.(lat_dims_len(2) .NE. lon_dims_len(2)) ) THEN + IF(krank.EQ.0) THEN WRITE(w_unit,*) 'Problem model1 in read_dimgrid' WRITE(w_unit,*) 'Dimensions of the latitude are not the same as the ones of the longitude' CALL flush(w_unit) STOP + ENDIF ENDIF !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! @@ -61,9 +63,11 @@ SUBROUTINE read_dimgrid (nlon,nlat,data_filename,w_unit) ! CALL hdlerr(NF90_CLOSE(il_file_id), __LINE__,__FILE__ ) ! - WRITE(w_unit,*) 'Reading input file ',data_filename - WRITE(w_unit,*) 'Global dimensions nlon=',nlon,' nlat=',nlat - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Reading input file ',data_filename + WRITE(w_unit,*) 'Global dimensions nlon=',nlon,' nlat=',nlat + CALL flush(w_unit) + ENDIF ! ! END SUBROUTINE read_dimgrid diff --git a/regtests/ww3_tp2.14/input/toy/read_grid.F90 b/regtests/ww3_tp2.14/input/toy/read_grid.F90 index 28433bec8..a902f2d63 100755 --- a/regtests/ww3_tp2.14/input/toy/read_grid.F90 +++ b/regtests/ww3_tp2.14/input/toy/read_grid.F90 @@ -1,6 +1,6 @@ !**************************************************************************************** SUBROUTINE read_grid (nlon,nlat,corners_ij_lus, & - data_filename, w_unit, & + data_filename, w_unit, krank, & gridlon,gridlat, & gridclo,gridcla, & gridsrf, & @@ -10,7 +10,7 @@ SUBROUTINE read_grid (nlon,nlat,corners_ij_lus, & USE netcdf IMPLICIT NONE ! - INTEGER :: w_unit + INTEGER :: w_unit, krank ! INTEGER :: il_file_id,il_lon_id, & il_lat_id,il_clo_id,il_cla_id,il_srf_id,il_indice_id @@ -55,37 +55,51 @@ SUBROUTINE read_grid (nlon,nlat,corners_ij_lus, & ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_lon_id, gridlon, & ila_what(1:2), ila_dim(1:2)), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid longitudes reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid longitudes reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_lat_id, gridlat, & ila_what(1:2), ila_dim(1:2)), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid latitudes reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid latitudes reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR(il_file_id, il_clo_id, gridclo, & ila_what, ila_corners), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid longitude corners reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid longitude corners reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_cla_id, gridcla, & ila_what, ila_corners), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid latitude corners reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid latitude corners reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_srf_id, gridsrf, & ila_what(1:2), ila_dim(1:2)), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid surfaces reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid surfaces reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_indice_id, indice_mask, & ila_what, ila_dim), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid mask reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid mask reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_CLOSE(il_file_id), __LINE__,__FILE__ ) ! - WRITE(w_unit,*) 'End of routine read_grid' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'End of routine read_grid' + CALL flush(w_unit) + ENDIF ! END SUBROUTINE read_grid diff --git a/regtests/ww3_tp2.14/input/toy/read_namelist.F90 b/regtests/ww3_tp2.14/input/toy/read_namelist.F90 index 447b88f1d..041caf7f5 100755 --- a/regtests/ww3_tp2.14/input/toy/read_namelist.F90 +++ b/regtests/ww3_tp2.14/input/toy/read_namelist.F90 @@ -1,5 +1,5 @@ !###################################################################################### -SUBROUTINE READ_NAMELIST(IOUTDIAG_UNIT,IL_NB_TIME_STEPS, DELTA_T, & +SUBROUTINE READ_NAMELIST(IOUTDIAG_UNIT,KRANK,IL_NB_TIME_STEPS, DELTA_T, & DATA_FILENAME, & CTYPE_FCT, VALUE, CNAME_FILE, & NB_RECV_FIELDS, CRCVFIELDS, & @@ -9,7 +9,7 @@ SUBROUTINE READ_NAMELIST(IOUTDIAG_UNIT,IL_NB_TIME_STEPS, DELTA_T, & IMPLICIT NONE ! ! -INTEGER :: IOUTDIAG_UNIT +INTEGER :: IOUTDIAG_UNIT, KRANK INTEGER :: IND ! !-- NAM_OASIS @@ -45,22 +45,24 @@ SUBROUTINE READ_NAMELIST(IOUTDIAG_UNIT,IL_NB_TIME_STEPS, DELTA_T, & CLOSE(UNIT=10) ! ! VERIFICATION -WRITE(IOUTDIAG_UNIT,*) 'IL_NB_TIME_STEPS=', IL_NB_TIME_STEPS -WRITE(IOUTDIAG_UNIT,*) 'DELTA_T=', DELTA_T -WRITE(IOUTDIAG_UNIT,*) 'DATA_FILENAME=', DATA_FILENAME -! -WRITE(IOUTDIAG_UNIT,*) 'CTYPE_FCT=', CTYPE_FCT -WRITE(IOUTDIAG_UNIT,*) 'VALUE=', VALUE -WRITE(IOUTDIAG_UNIT,*) 'CNAME_FILE=', CNAME_FILE -! -WRITE(IOUTDIAG_UNIT,*) 'NB_RECV_FIELDS=', NB_RECV_FIELDS -DO IND=1, NB_RECV_FIELDS - WRITE(IOUTDIAG_UNIT,*) 'CRCVFIELDS(',IND,')=', CRCVFIELDS(IND) -END DO -! -WRITE(IOUTDIAG_UNIT,*) 'NB_SEND_FIELDS=', NB_SEND_FIELDS -DO IND=1, NB_SEND_FIELDS - WRITE(IOUTDIAG_UNIT,*) 'CSNDFIELDS(',IND,')=', CSNDFIELDS(IND) -END DO +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'IL_NB_TIME_STEPS=', IL_NB_TIME_STEPS + WRITE(IOUTDIAG_UNIT,*) 'DELTA_T=', DELTA_T + WRITE(IOUTDIAG_UNIT,*) 'DATA_FILENAME=', DATA_FILENAME + ! + WRITE(IOUTDIAG_UNIT,*) 'CTYPE_FCT=', CTYPE_FCT + WRITE(IOUTDIAG_UNIT,*) 'VALUE=', VALUE + WRITE(IOUTDIAG_UNIT,*) 'CNAME_FILE=', CNAME_FILE + ! + WRITE(IOUTDIAG_UNIT,*) 'NB_RECV_FIELDS=', NB_RECV_FIELDS + DO IND=1, NB_RECV_FIELDS + WRITE(IOUTDIAG_UNIT,*) 'CRCVFIELDS(',IND,')=', CRCVFIELDS(IND) + END DO + ! + WRITE(IOUTDIAG_UNIT,*) 'NB_SEND_FIELDS=', NB_SEND_FIELDS + DO IND=1, NB_SEND_FIELDS + WRITE(IOUTDIAG_UNIT,*) 'CSNDFIELDS(',IND,')=', CSNDFIELDS(IND) + END DO +ENDIF ! END SUBROUTINE READ_NAMELIST diff --git a/regtests/ww3_tp2.14/input/toy/toy_model.F90 b/regtests/ww3_tp2.14/input/toy/toy_model.F90 index 55794117d..f4787944c 100755 --- a/regtests/ww3_tp2.14/input/toy/toy_model.F90 +++ b/regtests/ww3_tp2.14/input/toy/toy_model.F90 @@ -130,42 +130,46 @@ PROGRAM TOY_MODEL CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'PROBLEM DURING MPI_COMM_RANK') ENDIF ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' READING THE NAMELIST' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK .EQ. 0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' READING THE NAMELIST' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! -CALL READ_NAMELIST(IOUTDIAG_UNIT,IL_NB_TIME_STEPS,DELTA_T, & +CALL READ_NAMELIST(IOUTDIAG_UNIT,KRANK,IL_NB_TIME_STEPS,DELTA_T, & DATA_FILENAME, & CTYPE_FCT, VALUE, CNAME_FILE, & NB_RECV_FIELDS, CRCVFIELDS, & NB_SEND_FIELDS, CSNDFIELDS) ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' GRID DEFINITION' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK .EQ. 0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' GRID DEFINITION' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! ! Reading netcdf file with pre-defined variable names ! --------------------------------------------------- ! Reading dimensions of the grid -CALL READ_DIMGRID(NLON,NLAT,DATA_FILENAME,IOUTDIAG_UNIT) +CALL READ_DIMGRID(NLON,NLAT,DATA_FILENAME,IOUTDIAG_UNIT,KRANK) NC=4 ! ! Allocation ALLOCATE(GLOBALGRID_LON(NLON,NLAT), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_LON' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_LON' ALLOCATE(GLOBALGRID_LAT(NLON,NLAT), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_LAT' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_LAT' ALLOCATE(GLOBALGRID_CLO(NLON,NLAT,nc), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_CLO' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_CLO' ALLOCATE(GLOBALGRID_CLA(NLON,NLAT,nc), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_CLA' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_CLA' ALLOCATE(GLOBALGRID_SRF(NLON,NLAT), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_SRF' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_SRF' ALLOCATE(INDICE_MASK(NLON,NLAT), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating INDICE_MASK' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating INDICE_MASK' ! ! Reading of the longitudes, latitudes, longitude and latitudes of the corners, mask of the grid -CALL READ_GRID(NLON,NLAT,NC,DATA_FILENAME,IOUTDIAG_UNIT, & +CALL READ_GRID(NLON,NLAT,NC,DATA_FILENAME,IOUTDIAG_UNIT, KRANK, & GLOBALGRID_LON,GLOBALGRID_LAT, & GLOBALGRID_CLO,GLOBALGRID_CLA, & GLOBALGRID_SRF, & @@ -191,9 +195,11 @@ PROGRAM TOY_MODEL CALL OASIS_TERMINATE_GRIDS_WRITING() ENDIF ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' PARTITION DEFINITION' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' PARTITION DEFINITION' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! ! Definition of the partition of the grid (calling oasis_def_partition) NTOT=NLON*NLAT @@ -205,16 +211,18 @@ PROGRAM TOY_MODEL #endif ! ALLOCATE(IL_PARAL(IL_SIZE)) -WRITE(IOUTDIAG_UNIT,*) 'After allocate il_paral, il_size', IL_SIZE +IF(KRANK.EQ.0) WRITE(IOUTDIAG_UNIT,*) 'After allocate il_paral, il_size', IL_SIZE ! CALL DECOMP_DEF(IL_PARAL,IL_SIZE,NLON,NLAT,KRANK,KSIZE,IOUTDIAG_UNIT) -WRITE(IOUTDIAG_UNIT,*) 'After decomp_def, il_paral = ', IL_PARAL(:) +IF(KRANK.EQ.0) WRITE(IOUTDIAG_UNIT,*) 'After decomp_def, il_paral = ', IL_PARAL(:) ! CALL OASIS_DEF_PARTITION(PART_ID, IL_PARAL, IERR) ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' DEFINITION OF THE LOCAL FIELDS' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' DEFINITION OF THE LOCAL FIELDS' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! ! Define transient variables ! @@ -245,22 +253,26 @@ PROGRAM TOY_MODEL IF (IERR /= 0) CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'ERROR DURING DEFINITION OF SEND VAR') ENDDO ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' TERMINATION OF DEFINITION PHASE' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' TERMINATION OF DEFINITION PHASE' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! CALL OASIS_ENDDEF(IERR) IF(IERR /= 0) CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'ERROR') ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' SEND AND RECEIVE ARRAYS' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' SEND AND RECEIVE ARRAYS' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! ALLOCATE(FIELD_RECV(VAR_ACTUAL_SHAPE(2), VAR_ACTUAL_SHAPE(4)), STAT=IERR) -IF (IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'ERROR ALLOCATING FIELD_RECV' +IF(KRANK.EQ.0 .AND. IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'ERROR ALLOCATING FIELD_RECV' ! ALLOCATE(FIELD_SEND(VAR_ACTUAL_SHAPE(2), VAR_ACTUAL_SHAPE(4),NB_SEND_FIELDS),STAT=IERR) -IF (IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'ERROR ALLOCATING FIELD_SEND' +IF(KRANK.EQ.0 .AND. IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'ERROR ALLOCATING FIELD_SEND' ! DEALLOCATE(IL_PARAL) ! @@ -279,16 +291,22 @@ PROGRAM TOY_MODEL ! ITAP_SEC = DELTA_T * (IB-1) ! Time ! - WRITE(IOUTDIAG_UNIT,*) 'CURRENT TIME : ', ITAP_SEC + IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'CURRENT TIME : ', ITAP_SEC + ENDIF ! ! Get the field from coupled model (atmosphere/wave/ocean) ! ------------------------------------------------------- DO IND=1, NB_RECV_FIELDS FIELD_RECV=FIELD_INI CALL OASIS_GET(VAR_ID(IND),ITAP_SEC, FIELD_RECV, IERR) - WRITE(IOUTDIAG_UNIT,*) 'RECEIVE FIELD : ', CRCVFIELDS(IND) , ' => ', ITAP_SEC, MINVAL(FIELD_RECV), MAXVAL(FIELD_RECV) + IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'RECEIVE FIELD : ', CRCVFIELDS(IND) , ' => ', ITAP_SEC, MINVAL(FIELD_RECV), MAXVAL(FIELD_RECV) + ENDIF IF ( IERR .NE. OASIS_Ok .AND. IERR .LT. OASIS_Recvd) THEN - WRITE (IOUTDIAG_UNIT,*) 'OASIS_GET ABORT BY TOY MODEL COMPID ',ICOMP_ID + IF(KRANK.EQ.0) THEN + WRITE (IOUTDIAG_UNIT,*) 'OASIS_GET ABORT BY TOY MODEL COMPID ',ICOMP_ID + ENDIF CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'PROBLEM DURING OASIS_GET') ENDIF ENDDO @@ -296,7 +314,7 @@ PROGRAM TOY_MODEL ! Send the field to coupled model (atmosphere/wave/ocean) ! ------------------------------------------------------- ! - CALL FUNCTION_SENT(IOUTDIAG_UNIT,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & + CALL FUNCTION_SENT(IOUTDIAG_UNIT,KRANK,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & VAR_ACTUAL_SHAPE(2), VAR_ACTUAL_SHAPE(4), NB_SEND_FIELDS, & RESHAPE(GLOBALGRID_LON(INDI_BEG:INDI_END,INDJ_BEG:INDJ_END),& (/ VAR_ACTUAL_SHAPE(2), VAR_ACTUAL_SHAPE(4) /)), & @@ -306,21 +324,27 @@ PROGRAM TOY_MODEL CTYPE_FCT, VALUE, CNAME_FILE, CSNDFIELDS) ! DO IND=1, NB_SEND_FIELDS - WRITE(IOUTDIAG_UNIT,*) 'SEND FIELD : ', CSNDFIELDS(IND), ' => ', ITAP_SEC, MINVAL(FIELD_SEND), MAXVAL(FIELD_SEND) + IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'SEND FIELD : ', CSNDFIELDS(IND), ' => ', ITAP_SEC, MINVAL(FIELD_SEND), MAXVAL(FIELD_SEND) + ENDIF CALL OASIS_PUT(VAR_ID(IND+NB_RECV_FIELDS),ITAP_SEC, FIELD_SEND(:,:,IND), IERR) IF ( IERR .NE. OASIS_Ok .AND. IERR .LT. OASIS_Sent) THEN - WRITE (IOUTDIAG_UNIT,*) 'OASIS_PUT ABORT BY TOY MODEL COMPID ',ICOMP_ID + IF(KRANK.EQ.0) THEN + WRITE (IOUTDIAG_UNIT,*) 'OASIS_PUT ABORT BY TOY MODEL COMPID ',ICOMP_ID + ENDIF CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'PROBLEM DURING OASIS_PUT') ENDIF ENDDO ! ENDDO ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' TERMINATION' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -! -WRITE(IOUTDIAG_UNIT,*) '----- CALL OASIS_TERMINATE' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' TERMINATION' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + ! + WRITE(IOUTDIAG_UNIT,*) '----- CALL OASIS_TERMINATE' +ENDIF CALL OASIS_TERMINATE(IERR) IF(IERR /= 0) THEN CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'ERROR DURING OASIS_TERMINATE') diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp new file mode 100755 index 000000000..262a90563 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp @@ -0,0 +1,152 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shell input file $ +$ -------------------------------------------------------------------- $ +$ Define input to be used with F/T/C flag for use or nor or coupling and +$ T/F flag for definition as a homogeneous field. +$ +$ Include ice and mud parameters only if IC1/2/3/4 used : + F F Ice parameter 1 + F F Ice parameter 2 + F F Ice parameter 3 + F F Ice parameter 4 + F F Ice parameter 5 + F F Mud parameter 1 + F F Mud parameter 2 + F F Mud parameter 3 + F F Water levels + F F Currents + C F Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ +$ Time frame of calculations ----------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ - Ending time in yyyymmdd hhmmss format. +$ + 20110902 000000 + 20110902 010000 +$ +$ Define output data ------------------------------------------------- $ +$ +$ Define output server mode. This is used only in the parallel version +$ of the model. To keep the input file consistent, it is always needed. +$ IOSTYP = 1 is generally recommended. IOSTYP > 2 may be more efficient +$ for massively parallel computations. Only IOSTYP = 0 requires a true +$ parallel file system like GPFS. +$ +$ IOSTYP = 0 : No data server processes, direct access output from +$ each process (requires true parallel file system). +$ 1 : No data server process. All output for each type +$ performed by process that performs computations too. +$ 2 : Last process is reserved for all output, and does no +$ computing. +$ 3 : Multiple dedicated output processes. +$ + 1 +$ +$ Five output types are available (see below). All output types share +$ a similar format for the first input line: +$ - first time in yyyymmdd hhmmss format, output interval (s), and +$ last time in yyyymmdd hhmmss format (all integers). +$ Output is disabled by setting the output interval to 0. +$ +$ ------------------------------------------------------------------- $ +$ +$ Type 1 : Fields of mean wave parameters +$ Standard line and line with logical flags to activate output +$ fields as defined in section 2.4 of the manual. The logical +$ flags are not supplied if no output is requested. The logical +$ flags can be placed on multiple consecutive lines. However, +$ the total number and order of the logical flags is fixed. +$ The raw data file is out_grd.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 000000 180 20110902 010000 +$---------------------------------------------------------------- +$ Output request flags identifying fields. +$ +N +$ +HS FP DIR DP CHA UST DPT CUR WND +$ +$---------------------------------------------------------------- +$ +$ Type 2 : Point output +$ Standard line and a number of lines identifying the +$ longitude, latitude and name (C*10) of output points. +$ The list is closed by defining a point with the name +$ 'STOPSTRING'. No point info read if no point output is +$ requested (i.e., no 'STOPSTRING' needed). +$ The raw data file is out_pnt.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 000000 0 20110902 020000 +$ -4.97 48.29 '62069' +$ -6.00 48.29 'Boundary' +$ 0.0 0.0 'STOPSTRING' +$ +$ +$ Type 3 : Output along track. +$ Flag for formatted input file. +$ The data files are track_i.ww3 and +$ track_o.ww3, see w3iotr.ftn for ad. doc. +$ + 20110902 000000 0 20110902 020000 +$ T +$ +$ Type 4 : Restart files (no additional data required). +$ The data file is restartN.ww3, see +$ w3iors.ftn for additional doc. +$ + 20110902 000000 0 20110902 020000 +$ +$ Type 5 : Boundary data (no additional data required). +$ The data file is nestN.ww3, see +$ w3iobcmd.ftn for additional doc. +$ + 20110902 000000 0 20110902 020000 +$ +$ Type 6 : Separated wave field data (dummy for now). +$ First, last step IX and IY, flag for formatted file +$ + 20110902 000000 0 20110902 020000 +$ 0 999 1 0 999 1 T +$ +$ Type 7 : Coupling. (must be fully commented if not used with switch COU) +$ Namelist type selection is used here. +$ Diagnostic fields to exchange. (see namcouple for more information) +$ + 20110902 000000 360 20110902 010000 + N +$ +$ - Sent fields by ww3: +$ - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +$ - Atmospheric model : ACHA AHS TP (or FP) FWS +$ - Ice model : IC5 TWI +$ + ACHA +$ +$ - Received fields by ww3: +$ - Ocean model : SSH CUR +$ - Atmospheric model : WND +$ - Ice model : ICE IC1 IC5 +$ + WND +$ +$ Homogeneous field data --------------------------------------------- $ +$ Homogeneous fields can be defined by a list of lines containing an ID +$ string 'LEV' 'CUR' 'WND', date and time information (yyyymmdd +$ hhmmss), value (S.I. units), direction (current and wind, oceanogr. +$ convention degrees)) and air-sea temperature difference (degrees C). +$ 'STP' is mandatory stop string. +$ Also defined here are the speed with which the grid is moved +$ continuously, ID string 'MOV', parameters as for 'CUR'. +$ +$ 'CUR' 20110902 000000 2.0 25. + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml new file mode 100644 index 000000000..c4cbbe6e9 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml @@ -0,0 +1,337 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '20110902 000000' + DOMAIN%STOP = '20110902 010000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'C' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS FP DIR DP CHA UST DPT CUR WND' + TYPE%COUPLING%SENT = 'ACHA' + TYPE%COUPLING%RECEIVED = 'WND' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '20110902 000000' '180' '20110902 010000' + DATE%COUPLING = '20110902 000000' '360' '20110902 010000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! From 49157a4f7df93aab1e2df6f6739fc23cc69cb4b2 Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Wed, 26 Aug 2020 18:01:24 +0200 Subject: [PATCH 48/84] Feature/ptnme (#239) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * extend output points name from 10 to 40 * update VEROPT * update PN and PNAMES to 40characters * specify the number of character in inp and nml * -update conversion scripts inp2nml -update C*10 to C*40 in inp and nml files -mww3_test06/input/ww3_multi_grdset_d_r.nml : update values to be consistent with inp file -ww3_ta1/*/ww3_multi.nml : correct copy/paste typo for TYPE%POINT%FILE (always using input_UPD3_U_cap/points.list) -ww3_tc1/input/ww3_shel.nml : correct error in start/stop date and remove unused CUR homogeneous forcing Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- model/aux/bash/ww3_multi_inp2nml.sh | 28 ++- model/aux/bash/ww3_shel_inp2nml.sh | 3 +- model/ftn/w3initmd.ftn | 2 +- model/ftn/w3iopomd.ftn | 6 +- model/ftn/w3odatmd.ftn | 4 +- model/ftn/wminitmd.ftn | 18 +- model/ftn/wmiopomd.ftn | 6 +- model/ftn/ww3_shel.ftn | 4 +- model/inp/ww3_ounp.inp | 4 +- model/inp/ww3_outp.inp | 6 +- model/inp/ww3_shel.inp | 2 +- model/nml/ww3_multi.nml | 3 +- model/nml/ww3_shel.nml | 3 +- regtests/mww3_test_01/input/ww3_ounp.inp | 4 +- regtests/mww3_test_01/input/ww3_shel.nml | 3 +- .../mww3_test_02/input/ww3_multi_grdset_a.nml | 3 +- .../mww3_test_02/input/ww3_multi_grdset_b.nml | 3 +- .../mww3_test_02/input/ww3_multi_grdset_c.nml | 3 +- .../mww3_test_02/input/ww3_multi_grdset_d.nml | 3 +- regtests/mww3_test_02/input/ww3_ounp.inp | 4 +- .../mww3_test_03/input/ww3_multi_grdset_a.nml | 3 +- .../mww3_test_03/input/ww3_multi_grdset_b.nml | 3 +- .../mww3_test_03/input/ww3_multi_grdset_c.nml | 3 +- .../mww3_test_03/input/ww3_multi_grdset_d.nml | 3 +- .../input/ww3_multi_grdset_d2.nml | 3 +- .../mww3_test_03/input/ww3_multi_grdset_e.nml | 3 +- regtests/mww3_test_03/input/ww3_ounp.inp | 4 +- .../mww3_test_04/input/ww3_multi_grdset_a.nml | 3 +- .../mww3_test_04/input/ww3_multi_grdset_b.nml | 3 +- .../mww3_test_04/input/ww3_multi_grdset_c.nml | 3 +- .../mww3_test_04/input/ww3_multi_grdset_d.nml | 3 +- .../mww3_test_04/input/ww3_multi_grdset_e.nml | 3 +- .../mww3_test_04/input/ww3_multi_grdset_f.nml | 3 +- .../mww3_test_04/input/ww3_multi_grdset_g.nml | 3 +- regtests/mww3_test_04/input/ww3_ounp.inp | 4 +- .../mww3_test_05/input/ww3_multi_grdset_a.nml | 3 +- .../mww3_test_05/input/ww3_multi_grdset_b.nml | 3 +- .../mww3_test_05/input/ww3_multi_grdset_c.nml | 3 +- .../mww3_test_05/input/ww3_multi_grdset_d.nml | 3 +- .../mww3_test_05/input/ww3_multi_grdset_e.nml | 3 +- .../mww3_test_06/input/ww3_multi_grdset_d.nml | 3 +- .../input/ww3_multi_grdset_d_h.nml | 237 ++++++++++++++++++ .../input/ww3_multi_grdset_d_r.nml | 15 +- .../mww3_test_07/input/ww3_multi_grdset.nml | 3 +- .../i_highres_multi/ww3_multi_grdset_a.nml | 3 +- .../mww3_test_08/i_highres_shel/ww3_shel.inp | 2 +- .../mww3_test_08/i_highres_shel/ww3_shel.nml | 3 +- .../i_highres_shel_IC1/ww3_shel.inp | 2 +- .../i_highres_shel_IC1/ww3_shel.nml | 3 +- .../i_lowres_multi/ww3_multi_grdset_a.nml | 3 +- .../mww3_test_08/i_lowres_shel/ww3_shel.inp | 2 +- .../mww3_test_08/i_lowres_shel/ww3_shel.nml | 3 +- .../i_lowres_shel_IC1/ww3_shel.inp | 2 +- .../i_lowres_shel_IC1/ww3_shel.nml | 3 +- .../mww3_test_08/input/ww3_multi_grdset_a.nml | 3 +- .../ww3_ta1/input_UPD0F_O/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD0F_O/ww3_shel.nml | 3 +- .../ww3_ta1/input_UPD0F_U/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD0F_U/ww3_shel.nml | 3 +- .../ww3_ta1/input_UPD2_O/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD2_O/ww3_shel.nml | 3 +- .../ww3_ta1/input_UPD2_U/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD2_U/ww3_shel.nml | 3 +- .../input_UPD2_U_cap/ww3_ounp_spec.inp | 4 +- .../ww3_ta1/input_UPD2_U_cap/ww3_shel.nml | 3 +- .../ww3_ta1/input_UPD3_O/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD3_O/ww3_shel.nml | 3 +- .../ww3_ta1/input_UPD3_U/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD3_U/ww3_shel.nml | 3 +- .../input_UPD3_U_cap/ww3_ounp_spec.inp | 4 +- .../ww3_ta1/input_UPD3_U_cap/ww3_shel.nml | 3 +- .../ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml | 5 +- .../ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml | 5 +- .../input_UPD5_U_cap/ww3_ounp_spec.inp | 4 +- .../ww3_ta1/input_UPD5_U_cap/ww3_shel.nml | 5 +- .../ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml | 5 +- .../ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp | 4 +- regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml | 5 +- .../input_UPD6_U_cap/ww3_ounp_spec.inp | 4 +- .../ww3_ta1/input_UPD6_U_cap/ww3_shel.nml | 5 +- regtests/ww3_tbt1.1/input/ww3_ounp.inp | 4 +- regtests/ww3_tbt1.1/input/ww3_outp_ITYPE3.inp | 6 +- regtests/ww3_tbt1.1/input/ww3_outp_spec.inp | 2 +- regtests/ww3_tbt1.1/input/ww3_shel.inp | 2 +- regtests/ww3_tbt1.1/input/ww3_shel.nml | 3 +- regtests/ww3_tbt2.1/input/ww3_ounp.inp | 4 +- regtests/ww3_tbt2.1/input/ww3_shel.nml | 3 +- regtests/ww3_tc1/input/ww3_shel.nml | 24 +- regtests/ww3_tic1.1/input_IC1/ww3_shel.nml | 3 +- .../ww3_tic1.1/input_IC1_156x3/ww3_shel.nml | 3 +- .../ww3_tic1.1/input_IC2_ifr/ww3_shel.nml | 3 +- .../ww3_tic1.1/input_IC2_nondisp/ww3_shel.nml | 3 +- .../ww3_tic1.1/input_IC2_nrl/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC3/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC3NL/ww3_shel.nml | 3 +- .../ww3_tic1.1/input_IC3_nondisp/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IC5/ww3_shel.nml | 3 +- regtests/ww3_tic1.1/input_IS2/ww3_shel.nml | 3 +- .../ww3_tic1.2/input_IC3_A0.5k/ww3_ounp.inp | 4 +- .../ww3_tic1.2/input_IC3_A0.5k/ww3_shel.nml | 3 +- .../ww3_tic1.2/input_IC3_A1.0k/ww3_ounp.inp | 4 +- .../ww3_tic1.2/input_IC3_A1.0k/ww3_shel.nml | 3 +- .../ww3_tic1.2/input_IC3_A2.5k/ww3_ounp.inp | 4 +- .../ww3_tic1.2/input_IC3_A2.5k/ww3_shel.nml | 3 +- .../ww3_tic1.2/input_IC3_B0.5k/ww3_ounp.inp | 4 +- .../ww3_tic1.2/input_IC3_B0.5k/ww3_shel.nml | 3 +- .../ww3_tic1.2/input_IC3_B1.0k/ww3_ounp.inp | 4 +- .../ww3_tic1.2/input_IC3_B1.0k/ww3_shel.nml | 3 +- .../ww3_tic1.2/input_IC3_B2.5k/ww3_ounp.inp | 4 +- .../ww3_tic1.2/input_IC3_B2.5k/ww3_shel.nml | 3 +- .../ww3_tic1.2/input_IC3_CHENG/ww3_ounp.inp | 4 +- .../ww3_tic1.2/input_IC3_CHENG/ww3_shel.nml | 3 +- .../ww3_tic1.2/input_IC3_V1_G/ww3_ounp.inp | 4 +- .../ww3_tic1.2/input_IC3_V1_G/ww3_shel.nml | 3 +- .../ww3_tic1.2/input_IC3_V1_h/ww3_ounp.inp | 4 +- .../ww3_tic1.2/input_IC3_V1_h/ww3_shel.nml | 3 +- .../ww3_tic1.3/input_IC3_0.5k/ww3_ounp.inp | 4 +- .../ww3_tic1.3/input_IC3_0.5k/ww3_shel.nml | 3 +- .../ww3_tic1.3/input_IC3_2.5k/ww3_ounp.inp | 4 +- .../ww3_tic1.3/input_IC3_2.5k/ww3_shel.nml | 3 +- .../ww3_tic1.3/input_IC3_CHENG/ww3_ounp.inp | 4 +- .../ww3_tic1.3/input_IC3_CHENG/ww3_shel.nml | 3 +- .../ww3_tic1.3/input_IC3_V1_G/ww3_ounp.inp | 4 +- .../ww3_tic1.3/input_IC3_V1_G/ww3_shel.nml | 3 +- .../ww3_tic1.3/input_IC3_V1_h/ww3_ounp.inp | 4 +- .../ww3_tic1.3/input_IC3_V1_h/ww3_shel.nml | 3 +- regtests/ww3_tic1.4/input/ww3_ounp.inp | 4 +- regtests/ww3_tic1.4/input/ww3_ounp_src.inp | 4 +- regtests/ww3_tic1.4/input/ww3_shel.nml | 3 +- regtests/ww3_tic2.1/input_IC1/ww3_ounp.inp | 4 +- regtests/ww3_tic2.1/input_IC1/ww3_shel.nml | 3 +- regtests/ww3_tic2.1/input_IC2IS2/ww3_ounp.inp | 4 +- regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.nml | 3 +- regtests/ww3_tic2.1/input_IC4/ww3_shel.nml | 3 +- regtests/ww3_tic2.2/input/ww3_ounp.inp | 4 +- regtests/ww3_tic2.2/input/ww3_shel.nml | 3 +- regtests/ww3_tic2.2/input_IC2/ww3_ounp.inp | 4 +- regtests/ww3_tic2.2/input_IC2/ww3_shel.nml | 3 +- regtests/ww3_tic2.3/input/ww3_ounp.inp | 4 +- regtests/ww3_tic2.3/input/ww3_shel.nml | 3 +- regtests/ww3_tig1.1/input/ww3_ounp.inp | 4 +- regtests/ww3_tig1.1/input/ww3_shel.nml | 3 +- regtests/ww3_tp1.1/input/ww3_ounp.inp | 4 +- regtests/ww3_tp1.1/input/ww3_shel.nml | 3 +- regtests/ww3_tp1.1/input2/ww3_shel.nml | 3 +- regtests/ww3_tp1.10/input/ww3_ounp.inp | 4 +- regtests/ww3_tp1.10/input/ww3_shel.nml | 3 +- regtests/ww3_tp1.2/input/ww3_shel.nml | 3 +- regtests/ww3_tp1.3/input/ww3_shel.nml | 3 +- regtests/ww3_tp1.4/input/ww3_ounp.inp | 4 +- regtests/ww3_tp1.4/input/ww3_shel.nml | 3 +- regtests/ww3_tp1.5/input/ww3_ounp.inp | 4 +- regtests/ww3_tp1.5/input/ww3_shel.nml | 3 +- regtests/ww3_tp1.6/input/ww3_ounp.inp | 4 +- regtests/ww3_tp1.6/input/ww3_shel.nml | 3 +- .../input_moderate_current/ww3_shel.nml | 3 +- regtests/ww3_tp1.7/input/ww3_ounp.inp | 4 +- regtests/ww3_tp1.7/input/ww3_outp.inp | 4 +- regtests/ww3_tp1.7/input/ww3_shel.inp | 2 +- regtests/ww3_tp1.7/input/ww3_shel.nml | 3 +- regtests/ww3_tp1.7/input_OBST/ww3_ounp.inp | 4 +- regtests/ww3_tp1.7/input_OBST/ww3_outp.inp | 4 +- regtests/ww3_tp1.7/input_OBST/ww3_shel.inp | 2 +- regtests/ww3_tp1.7/input_OBST/ww3_shel.nml | 3 +- regtests/ww3_tp1.8/input/ww3_ounp.inp | 4 +- regtests/ww3_tp1.8/input/ww3_shel.nml | 3 +- regtests/ww3_tp1.8/input_BJ/ww3_shel.nml | 3 +- regtests/ww3_tp1.9/input/ww3_ounp.inp | 4 +- regtests/ww3_tp1.9/input/ww3_outp.inp | 6 +- regtests/ww3_tp1.9/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.1/input/ww3_multi.nml | 3 +- regtests/ww3_tp2.1/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.10/input/ww3_ounp.inp | 4 +- regtests/ww3_tp2.10/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.11/input/ww3_ounp.inp | 4 +- regtests/ww3_tp2.11/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.13/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.13/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp | 2 +- regtests/ww3_tp2.14/input/ww3_shel_OASACM.nml | 3 +- .../ww3_tp2.14/input/ww3_shel_OASACM2.inp | 2 +- .../ww3_tp2.14/input/ww3_shel_OASACM2.nml | 3 +- regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp | 2 +- regtests/ww3_tp2.14/input/ww3_shel_OASICM.nml | 3 +- regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp | 2 +- regtests/ww3_tp2.14/input/ww3_shel_OASOCM.nml | 3 +- regtests/ww3_tp2.15/input/ww3_ounp_par.inp | 4 +- regtests/ww3_tp2.15/input/ww3_ounp_spec.inp | 4 +- regtests/ww3_tp2.15/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.16/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.16/input/ww3_shel.nml | 3 +- .../ww3_tp2.17/input/ww3_multi_grdset_a.nml | 3 +- .../ww3_tp2.17/input/ww3_multi_grdset_b.nml | 3 +- .../ww3_tp2.17/input/ww3_multi_grdset_c.nml | 3 +- regtests/ww3_tp2.17/input/ww3_ounp.inp | 4 +- regtests/ww3_tp2.17/input/ww3_outp.inp | 4 +- regtests/ww3_tp2.17/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.17/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.18/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.18/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.2/input/ww3_multi.nml | 3 +- regtests/ww3_tp2.2/input/ww3_ounp.inp | 4 +- regtests/ww3_tp2.2/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.3/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.4/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.4/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.5/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.5/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.5/input_REF/ww3_ounp.inp | 4 +- regtests/ww3_tp2.5/input_REF/ww3_shel.inp | 2 +- regtests/ww3_tp2.5/input_REF/ww3_shel.nml | 3 +- regtests/ww3_tp2.6/input/ww3_ounp.inp | 4 +- regtests/ww3_tp2.6/input/ww3_outp.inp | 4 +- regtests/ww3_tp2.6/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.6/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.7/input/ww3_ounp.inp | 4 +- regtests/ww3_tp2.7/input/ww3_outp.inp | 4 +- regtests/ww3_tp2.7/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.7/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.8/input/ww3_ounp.inp | 4 +- regtests/ww3_tp2.8/input/ww3_outp.inp | 4 +- regtests/ww3_tp2.8/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.8/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.9/input/ww3_shel.nml | 3 +- regtests/ww3_ts1/input/ww3_ounp_spec.inp | 4 +- regtests/ww3_ts1/input/ww3_shel.nml | 3 +- regtests/ww3_ts1/input_fld/ww3_shel.nml | 3 +- .../input_icesct_IC0/ww3_ounp_spec.inp | 4 +- .../ww3_ts1/input_icesct_IC0/ww3_ounp_src.inp | 4 +- .../ww3_ts1/input_icesct_IC0/ww3_shel.nml | 3 +- .../input_icesct_IC1/ww3_ounp_spec.inp | 4 +- .../ww3_ts1/input_icesct_IC1/ww3_ounp_src.inp | 4 +- .../ww3_ts1/input_icesct_IC1/ww3_shel.nml | 3 +- .../input_icesct_IC2/ww3_ounp_spec.inp | 4 +- .../ww3_ts1/input_icesct_IC2/ww3_ounp_src.inp | 4 +- .../ww3_ts1/input_icesct_IC2/ww3_shel.nml | 3 +- .../input_icesct_IC3/ww3_ounp_spec.inp | 4 +- .../ww3_ts1/input_icesct_IC3/ww3_ounp_src.inp | 4 +- .../ww3_ts1/input_icesct_IC3/ww3_shel.nml | 3 +- .../input_icesct_IC4/ww3_ounp_spec.inp | 4 +- .../ww3_ts1/input_icesct_IC4/ww3_ounp_src.inp | 4 +- .../ww3_ts1/input_icesct_IC4/ww3_shel.nml | 3 +- regtests/ww3_ts2/input/ww3_ounp.inp | 4 +- regtests/ww3_ts2/input/ww3_shel.nml | 3 +- regtests/ww3_ts3/input/ww3_shel.nml | 3 +- .../input_rg_multi/ww3_multi_grdset.nml | 3 +- regtests/ww3_ts4/input_rg_multi/ww3_ounp.inp | 4 +- regtests/ww3_ts4/input_rg_shel/ww3_ounp.inp | 4 +- regtests/ww3_ts4/input_rg_shel/ww3_shel.inp | 2 +- regtests/ww3_ts4/input_rg_shel/ww3_shel.nml | 3 +- regtests/ww3_ts4/input_ug/ww3_ounp.inp | 4 +- regtests/ww3_ts4/input_ug/ww3_shel.inp | 2 +- regtests/ww3_ts4/input_ug/ww3_shel.nml | 3 +- 263 files changed, 793 insertions(+), 389 deletions(-) create mode 100644 regtests/mww3_test_06/input/ww3_multi_grdset_d_h.nml diff --git a/model/aux/bash/ww3_multi_inp2nml.sh b/model/aux/bash/ww3_multi_inp2nml.sh index 5fc6188d0..9119b908d 100755 --- a/model/aux/bash/ww3_multi_inp2nml.sh +++ b/model/aux/bash/ww3_multi_inp2nml.sh @@ -259,12 +259,23 @@ fi # restart date echo 'restart date' il=$(($il+1)) -for i in $(seq 1 5) +for i in $(seq 1 6) do restartdate[$i]="$(echo ${lines[$il]} | awk -F' ' "{print \$$i}" | cut -d \" -f2 | cut -d \' -f2)" done echo ${restartdate[@]} +if [ "${restartdate[6]}" = 'T' ] +then +# restart date2 +echo 'restart date 2' +il=$(($il+1)) +for i in $(seq 1 5) +do + restartdate2[$i]="$(echo ${lines[$il]} | awk -F' ' "{print \$$i}" | cut -d \" -f2 | cut -d \' -f2)" +done +echo ${restartdate2[@]} +fi # boundary date echo 'boundary date' @@ -305,6 +316,7 @@ do pointdates[$j,$key]=${pointdate[$key]} trackdates[$j,$key]=${trackdate[$key]} restartdates[$j,$key]=${restartdate[$key]} + restartdates2[$j,$key]=${restartdate2[$key]} boundarydates[$j,$key]=${boundarydate[$key]} partitiondates[$j,$key]=${partitiondate[$key]} done @@ -651,7 +663,8 @@ cat >> $nmlfile << EOF ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 @@ -773,6 +786,9 @@ cat >> $nmlfile << EOF ! ALLDATE%RESTART%START = '19680606 000000' ! ALLDATE%RESTART%STRIDE = '0' ! ALLDATE%RESTART%STOP = '19680607 000000' +! ALLDATE%RESTART2%START = '19680606 000000' +! ALLDATE%RESTART2%STRIDE = '0' +! ALLDATE%RESTART2%STOP = '19680607 000000' ! ALLDATE%BOUNDARY%START = '19680606 000000' ! ALLDATE%BOUNDARY%STRIDE = '0' ! ALLDATE%BOUNDARY%STOP = '19680607 000000' @@ -799,6 +815,9 @@ if [ "${trackdate[3]}" != '0' ]; then if [ "${restartdate[3]}" != '0' ]; then echo " ALLDATE%RESTART = '${restartdate[1]} ${restartdate[2]}' '${restartdate[3]}' '${restartdate[4]} ${restartdate[5]}'" >> $nmlfile; fi +if [ "${restartdate2[3]}" != '0' ]; then + echo " ALLDATE%RESTART2 = '${restartdate2[1]} ${restartdate2[2]}' '${restartdate2[3]}' '${restartdate[4]} ${restartdate[5]}'" >> $nmlfile; fi + if [ "${boundarydate[3]}" != '0' ]; then echo " ALLDATE%BOUNDARY = '${boundarydate[1]} ${boundarydate[2]}' '${boundarydate[3]}' '${boundarydate[4]} ${boundarydate[5]}'" >> $nmlfile; fi @@ -828,6 +847,11 @@ do [ "${restartdate[5]}" != "${restartdates[$irgrd,5]}" ]; then echo " IDATE($irgrd)%RESTART = '${restartdates[$irgrd,1]} ${restartdates[$irgrd,2]}' '${restartdates[$irgrd,3]}' '${restartdates[$irgrd,4]} ${restartdates[$irgrd,5]}'" >> $nmlfile; fi + if [ "${restartdate2[1]}" != "${restartdates2[$irgrd,1]}" ] || [ "${restartdate2[2]}" != "${restartdates2[$irgrd,2]}" ] || \ + [ "${restartdate2[3]}" != "${restartdates2[$irgrd,3]}" ] || [ "${restartdate2[4]}" != "${restartdates2[$irgrd,4]}" ] || \ + [ "${restartdate2[5]}" != "${restartdates2[$irgrd,5]}" ]; then + echo " IDATE($irgrd)%RESTART2 = '${restartdates2[$irgrd,1]} ${restartdates2[$irgrd,2]}' '${restartdates2[$irgrd,3]}' '${restartdates2[$irgrd,4]} ${restartdates2[$irgrd,5]}'" >> $nmlfile; fi + if [ "${boundarydate[1]}" != "${boundarydates[$irgrd,1]}" ] || [ "${boundarydate[2]}" != "${boundarydates[$irgrd,2]}" ] || \ [ "${boundarydate[3]}" != "${boundarydates[$irgrd,3]}" ] || [ "${boundarydate[4]}" != "${boundarydates[$irgrd,4]}" ] || \ [ "${boundarydate[5]}" != "${boundarydates[$irgrd,5]}" ]; then diff --git a/model/aux/bash/ww3_shel_inp2nml.sh b/model/aux/bash/ww3_shel_inp2nml.sh index 45ab0d1e0..de95b4a60 100755 --- a/model/aux/bash/ww3_shel_inp2nml.sh +++ b/model/aux/bash/ww3_shel_inp2nml.sh @@ -719,7 +719,8 @@ cat >> $nmlfile << EOF ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 9e4a87474..7b3565874 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -399,7 +399,7 @@ FLGR2(NOGRP,NGRPP), FLG2(NOGRP),& PRTFRM CHARACTER, INTENT(IN) :: FEXT*(*) - CHARACTER(LEN=10), INTENT(IN) :: PNAMES(NPT) + CHARACTER(LEN=40), INTENT(IN) :: PNAMES(NPT) LOGICAL, INTENT(IN), OPTIONAL :: FLAGSTIDEIN(4) INTEGER :: NSEALout, NSEALMout !/ diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index a1de32f9e..80f71e556 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -100,7 +100,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VEROPT = '2019-10-04' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VEROPT = '2020-07-30' CHARACTER(LEN=31), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III POINT OUTPUT FILE' !/ @@ -151,7 +151,7 @@ ! NPT Int. I Number of output points in input. ! XPT R.A. I/O X (longitude) coordinates of output points. ! YPT R.A. I/O Id. Y. -! PNAMES C*10 I Names of output points. +! PNAMES C*40 I Names of output points. ! IMOD Int. I Grid ID number. ! ---------------------------------------------------------------- ! @@ -232,7 +232,7 @@ !/ INTEGER, INTENT(IN) :: NPT, IMOD REAL, INTENT(INOUT) :: XPT(NPT), YPT(NPT) - CHARACTER(LEN=10),INTENT(IN) :: PNAMES(NPT) + CHARACTER(LEN=40),INTENT(IN) :: PNAMES(NPT) !/ !/ ------------------------------------------------------------------- / !/ Local parameters diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 7877dd6be..421237735 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -344,7 +344,7 @@ ICEFO(:), SPCO(:,:) REAL, POINTER :: ZET_SETO(:) ! For the wave setup. - CHARACTER(LEN=10), POINTER :: PTNME(:) + CHARACTER(LEN=40), POINTER :: PTNME(:) CHARACTER(LEN=13), POINTER :: GRDID(:) LOGICAL :: O2INIT !/MPI LOGICAL :: O2IRQI @@ -450,7 +450,7 @@ ICEFO(:), SPCO(:,:) REAL, POINTER :: ZET_SETO(:) ! - CHARACTER(LEN=10), POINTER :: PTNME(:) + CHARACTER(LEN=40), POINTER :: PTNME(:) CHARACTER(LEN=13), POINTER :: GRDID(:) LOGICAL, POINTER :: O2INIT !/MPI LOGICAL, POINTER :: O2IRQI diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 73f379b06..39c946bcb 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -427,9 +427,12 @@ CHARACTER(LEN=6) :: ACTION(9), YESXX, XXXNO CHARACTER(LEN=8) :: LFILE, STTIME !/SHRD CHARACTER(LEN=9) :: TFILE - CHARACTER(LEN=13) :: STDATE, PN, MN, TNAMES(7) + CHARACTER(LEN=13) :: STDATE, MN, TNAMES(7) + CHARACTER(LEN=40) :: PN CHARACTER(LEN=13), & - ALLOCATABLE :: INAMES(:,:), MNAMES(:), PNAMES(:) + ALLOCATABLE :: INAMES(:,:), MNAMES(:) + CHARACTER(LEN=40), & + ALLOCATABLE :: PNAMES(:) CHARACTER(LEN=12) :: FORMAT !/DIST CHARACTER(LEN=18) :: TFILE !/MPRF CHARACTER(LEN=18) :: PFILE @@ -445,7 +448,7 @@ TYPE OT2TPE INTEGER :: NPTS REAL, POINTER :: X(:), Y(:) - CHARACTER(LEN=10), POINTER :: PNAMES(:) + CHARACTER(LEN=40), POINTER :: PNAMES(:) END TYPE OT2TPE ! TYPE(OT2TPE), ALLOCATABLE :: OT2(:) @@ -3473,7 +3476,7 @@ TYPE OT2TPE INTEGER :: NPTS REAL, POINTER :: X(:), Y(:) - CHARACTER(LEN=10), POINTER :: PNAMES(:) + CHARACTER(LEN=40), POINTER :: PNAMES(:) END TYPE OT2TPE ! TYPE(OT2TPE), ALLOCATABLE :: OT2(:) @@ -3519,9 +3522,12 @@ ALLOCATABLE :: ACTION(:) CHARACTER(LEN=8) :: LFILE, STTIME !/SHRD CHARACTER(LEN=9) :: TFILE - CHARACTER(LEN=13) :: STDATE, PN, MN, TNAMES(7) + CHARACTER(LEN=13) :: STDATE, MN, TNAMES(7) + CHARACTER(LEN=40) :: PN CHARACTER(LEN=13), & - ALLOCATABLE :: INAMES(:,:), MNAMES(:), PNAMES(:) + ALLOCATABLE :: INAMES(:,:), MNAMES(:) + CHARACTER(LEN=40), & + ALLOCATABLE :: PNAMES(:) CHARACTER(LEN=12) :: FORMAT !/DIST CHARACTER(LEN=18) :: TFILE !/MPRF CHARACTER(LEN=18) :: PFILE diff --git a/model/ftn/wmiopomd.ftn b/model/ftn/wmiopomd.ftn index 3d318f2b8..7e9aaae9b 100644 --- a/model/ftn/wmiopomd.ftn +++ b/model/ftn/wmiopomd.ftn @@ -118,7 +118,7 @@ ! NPT Int. I Number of output points in input. ! XPT R.A. I X (longitude) coordinates of output points. ! YPT R.A. I Id. Y. -! PNAMES C*10 I Names of output points. +! PNAMES C*40 I Names of output points. ! ---------------------------------------------------------------- ! Note: all are optional, and should be given on the first call ! only, will be taken from storage after that. @@ -210,7 +210,7 @@ !/ INTEGER, INTENT(IN) :: NPT REAL, INTENT(IN), OPTIONAL :: XPT(NPT), YPT(NPT) - CHARACTER(LEN=10),INTENT(IN), OPTIONAL :: PNAMES(NPT) + CHARACTER(LEN=40),INTENT(IN), OPTIONAL :: PNAMES(NPT) !/ !/ ------------------------------------------------------------------- / !/ Local parameters @@ -227,7 +227,7 @@ REAL :: FACTOR LOGICAL, ALLOCATABLE :: INGRID(:,:) LOGICAL, SAVE :: SETUP = .FALSE., FLGO7a = .FALSE. - CHARACTER(LEN=10), ALLOCATABLE :: PN(:) + CHARACTER(LEN=40), ALLOCATABLE :: PN(:) !/ !/S CALL STRACE (IENT, 'WMIOPP') ! diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 65a971191..9d65a0e4a 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -316,8 +316,8 @@ CHARACTER(LEN=1) :: COMSTR, FLAGTFC(-7:8) CHARACTER(LEN=3) :: IDSTR(-7:8), IDTST CHARACTER(LEN=6) :: YESXNO - CHARACTER(LEN=10) :: PN - CHARACTER(LEN=10), & + CHARACTER(LEN=40) :: PN + CHARACTER(LEN=40), & ALLOCATABLE :: PNAMES(:) CHARACTER(LEN=13) :: IDFLDS(-7:8) CHARACTER(LEN=20) :: STRNG diff --git a/model/inp/ww3_ounp.inp b/model/inp/ww3_ounp.inp index 8d964797c..6469a1cef 100644 --- a/model/inp/ww3_ounp.inp +++ b/model/inp/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/model/inp/ww3_outp.inp b/model/inp/ww3_outp.inp index 70af09f4e..fa133a326 100644 --- a/model/inp/ww3_outp.inp +++ b/model/inp/ww3_outp.inp @@ -46,7 +46,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | @@ -137,7 +137,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ diff --git a/model/inp/ww3_shel.inp b/model/inp/ww3_shel.inp index 0254ad62d..4809e3a6b 100644 --- a/model/inp/ww3_shel.inp +++ b/model/inp/ww3_shel.inp @@ -274,7 +274,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/model/nml/ww3_multi.nml b/model/nml/ww3_multi.nml index b9de64c47..ee1862e59 100644 --- a/model/nml/ww3_multi.nml +++ b/model/nml/ww3_multi.nml @@ -186,7 +186,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/model/nml/ww3_shel.nml b/model/nml/ww3_shel.nml index 92969573a..d2d44ad1e 100644 --- a/model/nml/ww3_shel.nml +++ b/model/nml/ww3_shel.nml @@ -71,7 +71,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/mww3_test_01/input/ww3_ounp.inp b/regtests/mww3_test_01/input/ww3_ounp.inp index 484214435..e6f7364b3 100644 --- a/regtests/mww3_test_01/input/ww3_ounp.inp +++ b/regtests/mww3_test_01/input/ww3_ounp.inp @@ -62,7 +62,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -106,7 +106,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/mww3_test_01/input/ww3_shel.nml b/regtests/mww3_test_01/input/ww3_shel.nml index 94140fd56..f41b98050 100644 --- a/regtests/mww3_test_01/input/ww3_shel.nml +++ b/regtests/mww3_test_01/input/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_02/input/ww3_multi_grdset_a.nml index dc7ee3b72..8a4dce103 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_a.nml @@ -125,7 +125,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_b.nml b/regtests/mww3_test_02/input/ww3_multi_grdset_b.nml index 59ba019a9..d36812f4c 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_b.nml +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_b.nml @@ -125,7 +125,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_c.nml b/regtests/mww3_test_02/input/ww3_multi_grdset_c.nml index d7141a1b8..25120de2f 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_c.nml +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_c.nml @@ -125,7 +125,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_02/input/ww3_multi_grdset_d.nml index c42e60a63..a3511535c 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_d.nml @@ -125,7 +125,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_02/input/ww3_ounp.inp b/regtests/mww3_test_02/input/ww3_ounp.inp index fdb3b8795..c820ac91a 100644 --- a/regtests/mww3_test_02/input/ww3_ounp.inp +++ b/regtests/mww3_test_02/input/ww3_ounp.inp @@ -59,7 +59,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -103,7 +103,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_a.nml index bac57edb3..604ed9040 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_a.nml @@ -128,7 +128,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_b.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_b.nml index a0ba92328..ce9f6f1f5 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_b.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_b.nml @@ -129,7 +129,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_c.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_c.nml index 55ade60b8..1d0dec1b0 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_c.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_c.nml @@ -130,7 +130,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_d.nml index a005b051c..71e0485cf 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_d.nml @@ -134,7 +134,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml index d2a77d0d3..d180c1232 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_d2.nml @@ -140,7 +140,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_e.nml b/regtests/mww3_test_03/input/ww3_multi_grdset_e.nml index 3091a916b..2c7400fbe 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_e.nml +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_e.nml @@ -128,7 +128,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_03/input/ww3_ounp.inp b/regtests/mww3_test_03/input/ww3_ounp.inp index b093f5f97..0e057c6ca 100644 --- a/regtests/mww3_test_03/input/ww3_ounp.inp +++ b/regtests/mww3_test_03/input/ww3_ounp.inp @@ -59,7 +59,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -103,7 +103,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_a.nml index b553fbe3b..538fc93e1 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_a.nml @@ -128,7 +128,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_b.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_b.nml index 90309e026..0a97037b0 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_b.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_b.nml @@ -129,7 +129,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_c.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_c.nml index 1e127b0a6..7b18221d0 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_c.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_c.nml @@ -127,7 +127,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml index 3a8b96db2..c3a7f01b2 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml @@ -130,7 +130,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_e.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_e.nml index 5aa8abbf9..9d679c51d 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_e.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_e.nml @@ -129,7 +129,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_f.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_f.nml index c9641e31b..61e5efe9a 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_f.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_f.nml @@ -129,7 +129,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_g.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_g.nml index 1afd949ea..9f0e6ace5 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_g.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_g.nml @@ -128,7 +128,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_04/input/ww3_ounp.inp b/regtests/mww3_test_04/input/ww3_ounp.inp index 7a3ec257e..150550734 100644 --- a/regtests/mww3_test_04/input/ww3_ounp.inp +++ b/regtests/mww3_test_04/input/ww3_ounp.inp @@ -59,7 +59,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -103,7 +103,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_a.nml index 73aacabba..8724b8ffa 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_a.nml @@ -135,7 +135,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_b.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_b.nml index 033906d0a..ba95eabaa 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_b.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_b.nml @@ -130,7 +130,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_c.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_c.nml index 1abd0f257..ca0df1cd8 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_c.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_c.nml @@ -130,7 +130,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_d.nml index 064343568..8ba9748ee 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_d.nml @@ -130,7 +130,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_e.nml b/regtests/mww3_test_05/input/ww3_multi_grdset_e.nml index c94a9c9fa..b05ca4a6f 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_e.nml +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_e.nml @@ -130,7 +130,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_06/input/ww3_multi_grdset_d.nml index 6d4ae7488..6fa0f960f 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d.nml @@ -124,7 +124,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.nml b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.nml new file mode 100644 index 000000000..acc7743c0 --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.nml @@ -0,0 +1,237 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_multi.nml - multi-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%NRINP = 0 ! Number of grids defining input fields. +! DOMAIN%NRGRD = 1 ! Number of wave model grids. +! DOMAIN%UNIPTS = F ! Flag for using unified point output file. +! DOMAIN%IOSTYP = 1 ! Output server type as in ww3_shel.nml +! DOMAIN%UPPROC = F ! Flag for dedicated process for unified point output. +! DOMAIN%PSHARE = F ! Flag for grids sharing dedicated output processes. +! DOMAIN%FLGHG1 = F ! Flag for masking computation in two-way nesting +! DOMAIN%FLGHG2 = F ! Flag for masking at printout time +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%NRGRD = 2 + DOMAIN%UNIPTS = T + DOMAIN%FLGHG1 = T + DOMAIN%FLGHG2 = T +/ + +! -------------------------------------------------------------------- ! +! Define each input grid via the INPUT_GRID_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRINP +! * INPUT(I)%NAME must be set for each active input grid I +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT(I)%NAME = 'unset' +! INPUT(I)%FORCING%WATER_LEVELS = F +! INPUT(I)%FORCING%CURRENTS = F +! INPUT(I)%FORCING%WINDS = F +! INPUT(I)%FORCING%ICE_CONC = F +! INPUT(I)%FORCING%ICE_PARAM1 = F +! INPUT(I)%FORCING%ICE_PARAM2 = F +! INPUT(I)%FORCING%ICE_PARAM3 = F +! INPUT(I)%FORCING%ICE_PARAM4 = F +! INPUT(I)%FORCING%ICE_PARAM5 = F +! INPUT(I)%FORCING%MUD_DENSITY = F +! INPUT(I)%FORCING%MUD_THICKNESS = F +! INPUT(I)%FORCING%MUD_VISCOSITY = F +! INPUT(I)%ASSIM%MEAN = F +! INPUT(I)%ASSIM%SPEC1D = F +! INPUT(I)%ASSIM%SPEC2D = F +! -------------------------------------------------------------------- ! +&INPUT_GRID_NML +/ + +! -------------------------------------------------------------------- ! +! Define each model grid via the MODEL_GRID_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! * MODEL(I)%NAME must be set for each active model grid I +! * FORCING can be set as : +! - 'no' : This input is not used. +! - 'native' : This grid has its own input files, e.g. grid +! grdX (mod_def.grdX) uses ice.grdX. +! - 'INPUT%NAME' : Take input from the grid identified by +! INPUT%NAME. +! * RESOURCE%RANK_ID : Rank number of grid (internally sorted and reassigned). +! * RESOURCE%GROUP_ID : Group number (internally reassigned so that different +! ranks result in different group numbers). +! * RESOURCE%COMM_FRAC : Fraction of communicator (processes) used for this grid. +! * RESOURCE%BOUND_FLAG : Flag identifying dumping of boundary data used by this +! grid. If true, the file nest.MODID is generated. +! +! * Limitations relevant to irregular (curvilinear) grids: +! 1) Equal rank is not supported when one or more is an irregular +! grid. Use non-equal rank instead. (see wmgridmd.ftn) +! 2) Non-native input grids: feature is not supported when either +! an input grid or computational grids is irregular. +! (see wmupdtmd.ftn) +! 3) Irregular grids with unified point output: This is supported +! but the feature has not been verified for accuracy. +! (see wmiopomd.ftn) +! +! * namelist must be terminated with / +! * definitions & defaults: +! MODEL(I)%NAME = 'unset' +! MODEL(I)%FORCING%WATER_LEVELS = 'no' +! MODEL(I)%FORCING%CURRENTS = 'no' +! MODEL(I)%FORCING%WINDS = 'no' +! MODEL(I)%FORCING%ICE_CONC = 'no' +! MODEL(I)%FORCING%ICE_PARAM1 = 'no' +! MODEL(I)%FORCING%ICE_PARAM2 = 'no' +! MODEL(I)%FORCING%ICE_PARAM3 = 'no' +! MODEL(I)%FORCING%ICE_PARAM4 = 'no' +! MODEL(I)%FORCING%ICE_PARAM5 = 'no' +! MODEL(I)%FORCING%MUD_DENSITY = 'no' +! MODEL(I)%FORCING%MUD_THICKNESS = 'no' +! MODEL(I)%FORCING%MUD_VISCOSITY = 'no' +! MODEL(I)%ASSIM%MEAN = 'no' +! MODEL(I)%ASSIM%SPEC1d = 'no' +! MODEL(I)%ASSIM%SPEC2d = 'no' +! MODEL(I)%RESOURCE%RANK_ID = I +! MODEL(I)%RESOURCE%GROUP_ID = 1 +! MODEL(I)%RESOURCE%COMM_FRAC = 0.00,1.00 +! MODEL(I)%RESOURCE%BOUND_FLAG = F +! +! MODEL(4)%FORCING = 'no' 'no' 'no' 'no' 'no' 'no' +! +! MODEL(2)%RESOURCE = 1 1 0.00 1.00 F +! -------------------------------------------------------------------- ! +&MODEL_GRID_NML + MODEL(1)%NAME = 'gbandd360' + MODEL(2)%NAME = 'arcticsub' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! +! * ALLTYPE will apply the output types for all the model grids +! +! * ITYPE(I) will apply the output types for the model grid number I +! +! * need DOMAIN%UNIPTS equal true to use a unified point output file +! +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) +! +! * the detailed list of field names is given in model/nml/ww3_shel.nml : +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * output track file formatted (T) or unformated (F) +! +! * namelist must be terminated with / +! * definitions & defaults: +! ALLTYPE%FIELD%LIST = 'unset' +! ALLTYPE%POINT%NAME = 'unset' +! ALLTYPE%POINT%FILE = 'points.list' +! ALLTYPE%TRACK%FORMAT = T +! ALLTYPE%PARTITION%X0 = 0 +! ALLTYPE%PARTITION%XN = 0 +! ALLTYPE%PARTITION%NX = 0 +! ALLTYPE%PARTITION%Y0 = 0 +! ALLTYPE%PARTITION%YN = 0 +! ALLTYPE%PARTITION%NY = 0 +! ALLTYPE%PARTITION%FORMAT = T +! +! ITYPE(3)%TRACK%FORMAT = F +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + ALLTYPE%FIELD%LIST = 'DPT HS' + ALLTYPE%POINT%NAME = 'points' + ALLTYPE%POINT%FILE = '../input/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! * ALLDATE will apply the output dates for all the model grids +! * IDATE(I) will apply the output dates for the model grid number i +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! * it is possible to overwrite a global output date for a given grid +! +! * namelist must be terminated with / +! * definitions & defaults: +! ALLDATE%FIELD%START = '19680606 000000' +! ALLDATE%FIELD%STRIDE = '0' +! ALLDATE%FIELD%STOP = '19680607 000000' +! ALLDATE%POINT%START = '19680606 000000' +! ALLDATE%POINT%STRIDE = '0' +! ALLDATE%POINT%STOP = '19680607 000000' +! ALLDATE%TRACK%START = '19680606 000000' +! ALLDATE%TRACK%STRIDE = '0' +! ALLDATE%TRACK%STOP = '19680607 000000' +! ALLDATE%RESTART%START = '19680606 000000' +! ALLDATE%RESTART%STRIDE = '0' +! ALLDATE%RESTART%STOP = '19680607 000000' +! ALLDATE%BOUNDARY%START = '19680606 000000' +! ALLDATE%BOUNDARY%STRIDE = '0' +! ALLDATE%BOUNDARY%STOP = '19680607 000000' +! ALLDATE%PARTITION%START = '19680606 000000' +! ALLDATE%PARTITION%STRIDE = '0' +! ALLDATE%PARTITION%STOP = '19680607 000000' +! +! ALLDATE%RESTART = '19680606 000000' '0' '19680607 000000' +! +! IDATE(3)%PARTITION%START = '19680606 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + ALLDATE%FIELD = '19680606 000000' '3600' '19680608 000000' + ALLDATE%POINT = '19680606 000000' '3600' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can only be MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml index 21e323eb5..4ed682798 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml @@ -17,14 +17,13 @@ ! DOMAIN%FLGHG1 = F ! Flag for masking computation in two-way nesting ! DOMAIN%FLGHG2 = F ! Flag for masking at printout time ! DOMAIN%START = '19680606 000000' ! Start date for the entire model -! DOMAIN%STOP = '19680608 000000' ! Stop date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model ! -------------------------------------------------------------------- ! &DOMAIN_NML - DOMAIN%START = '19680606 000000' ! Start date for the entire model - DOMAIN%STOP = '19680608 000000' ! Stop date for the entire model DOMAIN%NRGRD = 2 DOMAIN%FLGHG1 = T DOMAIN%FLGHG2 = T + DOMAIN%STOP = '19680608 000000' / ! -------------------------------------------------------------------- ! @@ -126,7 +125,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 @@ -201,13 +201,12 @@ ! ALLDATE%RESTART = '19680606 000000' '0' '19680607 000000' ! ! IDATE(3)%PARTITION%START = '19680606 000000' -! ALLDATE%RESTART2 = '19680606 000000' '86400' '19680608 000000' ! -------------------------------------------------------------------- ! &OUTPUT_DATE_NML ALLDATE%FIELD = '19680606 000000' '3600' '19680608 000000' - ALLDATE%POINT = '19680606 000000' '3600' '19680608 000000' - ALLDATE%RESTART = '19680606 060000' '21600' '19680606 060000' - ALLDATE%RESTART2 = '19680606 000000' '86400' '19680608 000000' + ALLDATE%POINT = '19680606 000000' '7200' '19680607 000000' + ALLDATE%RESTART = '19680606 060000' '10800' '19680606 060000' + ALLDATE%RESTART2 = '19680607 000000' '86400' '19680606 060000' / ! -------------------------------------------------------------------- ! diff --git a/regtests/mww3_test_07/input/ww3_multi_grdset.nml b/regtests/mww3_test_07/input/ww3_multi_grdset.nml index 12feb1b63..2dc90b21e 100644 --- a/regtests/mww3_test_07/input/ww3_multi_grdset.nml +++ b/regtests/mww3_test_07/input/ww3_multi_grdset.nml @@ -128,7 +128,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.nml b/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.nml index dba60f24d..650d31aa9 100644 --- a/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.nml @@ -126,7 +126,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_08/i_highres_shel/ww3_shel.inp b/regtests/mww3_test_08/i_highres_shel/ww3_shel.inp index 8cbf850c6..ff6d69378 100644 --- a/regtests/mww3_test_08/i_highres_shel/ww3_shel.inp +++ b/regtests/mww3_test_08/i_highres_shel/ww3_shel.inp @@ -66,7 +66,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/mww3_test_08/i_highres_shel/ww3_shel.nml b/regtests/mww3_test_08/i_highres_shel/ww3_shel.nml index 0dd4ddbb1..34dfe0c67 100644 --- a/regtests/mww3_test_08/i_highres_shel/ww3_shel.nml +++ b/regtests/mww3_test_08/i_highres_shel/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.inp b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.inp index eb12a7a30..869a5a695 100644 --- a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.inp +++ b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.inp @@ -74,7 +74,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.nml b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.nml index 5116598bc..fb79038e6 100644 --- a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.nml +++ b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.nml @@ -66,7 +66,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.nml b/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.nml index 200159029..036333170 100644 --- a/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.nml @@ -126,7 +126,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/mww3_test_08/i_lowres_shel/ww3_shel.inp b/regtests/mww3_test_08/i_lowres_shel/ww3_shel.inp index 8cbf850c6..ff6d69378 100644 --- a/regtests/mww3_test_08/i_lowres_shel/ww3_shel.inp +++ b/regtests/mww3_test_08/i_lowres_shel/ww3_shel.inp @@ -66,7 +66,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/mww3_test_08/i_lowres_shel/ww3_shel.nml b/regtests/mww3_test_08/i_lowres_shel/ww3_shel.nml index d471ff9e9..b33b85cd4 100644 --- a/regtests/mww3_test_08/i_lowres_shel/ww3_shel.nml +++ b/regtests/mww3_test_08/i_lowres_shel/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.inp b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.inp index eb12a7a30..869a5a695 100644 --- a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.inp +++ b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.inp @@ -74,7 +74,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.nml b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.nml index 92bcfd97e..3084a2b3c 100644 --- a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.nml +++ b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.nml @@ -66,7 +66,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/mww3_test_08/input/ww3_multi_grdset_a.nml b/regtests/mww3_test_08/input/ww3_multi_grdset_a.nml index 084f2064a..6ed201bb4 100644 --- a/regtests/mww3_test_08/input/ww3_multi_grdset_a.nml +++ b/regtests/mww3_test_08/input/ww3_multi_grdset_a.nml @@ -130,7 +130,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/ww3_ta1/input_UPD0F_O/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD0F_O/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD0F_O/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD0F_O/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD0F_O/ww3_shel.nml b/regtests/ww3_ta1/input_UPD0F_O/ww3_shel.nml index 01f238e85..0492f013c 100644 --- a/regtests/ww3_ta1/input_UPD0F_O/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD0F_O/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ta1/input_UPD0F_U/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD0F_U/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD0F_U/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD0F_U/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD0F_U/ww3_shel.nml b/regtests/ww3_ta1/input_UPD0F_U/ww3_shel.nml index d5f0697ab..465b3f513 100644 --- a/regtests/ww3_ta1/input_UPD0F_U/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD0F_U/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ta1/input_UPD2_O/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD2_O/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD2_O/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD2_O/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD2_O/ww3_shel.nml b/regtests/ww3_ta1/input_UPD2_O/ww3_shel.nml index 4b855e3ba..b50b27bb3 100644 --- a/regtests/ww3_ta1/input_UPD2_O/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD2_O/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ta1/input_UPD2_U/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD2_U/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD2_U/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD2_U/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD2_U/ww3_shel.nml b/regtests/ww3_ta1/input_UPD2_U/ww3_shel.nml index 41d380ec3..25c441c89 100644 --- a/regtests/ww3_ta1/input_UPD2_U/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD2_U/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_shel.nml b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_shel.nml index f4e27c114..274bacd9d 100644 --- a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ta1/input_UPD3_O/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD3_O/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD3_O/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD3_O/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD3_O/ww3_shel.nml b/regtests/ww3_ta1/input_UPD3_O/ww3_shel.nml index a5122e6f1..281997050 100644 --- a/regtests/ww3_ta1/input_UPD3_O/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD3_O/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ta1/input_UPD3_U/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD3_U/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD3_U/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD3_U/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD3_U/ww3_shel.nml b/regtests/ww3_ta1/input_UPD3_U/ww3_shel.nml index ffa4034d1..ff5adf483 100644 --- a/regtests/ww3_ta1/input_UPD3_U/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD3_U/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_shel.nml b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_shel.nml index 06560c3c1..4b676cf57 100644 --- a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml b/regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml index a5122e6f1..734f2d728 100644 --- a/regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types @@ -238,7 +239,7 @@ ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' - TYPE%POINT%FILE = '../input_UPD3_O/points.list' + TYPE%POINT%FILE = '../input_UPD5_O/points.list' / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml b/regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml index ffa4034d1..71ca0858d 100644 --- a/regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types @@ -238,7 +239,7 @@ ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' - TYPE%POINT%FILE = '../input_UPD3_U/points.list' + TYPE%POINT%FILE = '../input_UPD5_U/points.list' / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.nml b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.nml index 06560c3c1..e2673a0d6 100644 --- a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types @@ -238,7 +239,7 @@ ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' - TYPE%POINT%FILE = '../input_UPD3_U_cap/points.list' + TYPE%POINT%FILE = '../input_UPD5_U_cap/points.list' / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml b/regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml index a5122e6f1..f30dad423 100644 --- a/regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types @@ -238,7 +239,7 @@ ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' - TYPE%POINT%FILE = '../input_UPD3_O/points.list' + TYPE%POINT%FILE = '../input_UPD6_O/points.list' / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml b/regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml index ffa4034d1..93ac214ee 100644 --- a/regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types @@ -238,7 +239,7 @@ ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' - TYPE%POINT%FILE = '../input_UPD3_U/points.list' + TYPE%POINT%FILE = '../input_UPD6_U/points.list' / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.inp +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.nml b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.nml index 06560c3c1..9c44bcbad 100644 --- a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.nml +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types @@ -238,7 +239,7 @@ ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML TYPE%FIELD%LIST = 'DPT WND MSS MSD ICE HS MSS FAW WCC WCF WCH WCM FOC TAW CHA FWS' - TYPE%POINT%FILE = '../input_UPD3_U_cap/points.list' + TYPE%POINT%FILE = '../input_UPD6_U_cap/points.list' / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tbt1.1/input/ww3_ounp.inp b/regtests/ww3_tbt1.1/input/ww3_ounp.inp index f09007620..d525edb79 100644 --- a/regtests/ww3_tbt1.1/input/ww3_ounp.inp +++ b/regtests/ww3_tbt1.1/input/ww3_ounp.inp @@ -69,7 +69,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -113,7 +113,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tbt1.1/input/ww3_outp_ITYPE3.inp b/regtests/ww3_tbt1.1/input/ww3_outp_ITYPE3.inp index 5540a4b80..debe223e5 100644 --- a/regtests/ww3_tbt1.1/input/ww3_outp_ITYPE3.inp +++ b/regtests/ww3_tbt1.1/input/ww3_outp_ITYPE3.inp @@ -53,7 +53,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -115,7 +115,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | @@ -150,7 +150,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ diff --git a/regtests/ww3_tbt1.1/input/ww3_outp_spec.inp b/regtests/ww3_tbt1.1/input/ww3_outp_spec.inp index ff30e2af6..6b63135a2 100644 --- a/regtests/ww3_tbt1.1/input/ww3_outp_spec.inp +++ b/regtests/ww3_tbt1.1/input/ww3_outp_spec.inp @@ -38,7 +38,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ diff --git a/regtests/ww3_tbt1.1/input/ww3_shel.inp b/regtests/ww3_tbt1.1/input/ww3_shel.inp index 49dde4804..392806a9e 100644 --- a/regtests/ww3_tbt1.1/input/ww3_shel.inp +++ b/regtests/ww3_tbt1.1/input/ww3_shel.inp @@ -68,7 +68,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tbt1.1/input/ww3_shel.nml b/regtests/ww3_tbt1.1/input/ww3_shel.nml index 198730930..dc09700d2 100644 --- a/regtests/ww3_tbt1.1/input/ww3_shel.nml +++ b/regtests/ww3_tbt1.1/input/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tbt2.1/input/ww3_ounp.inp b/regtests/ww3_tbt2.1/input/ww3_ounp.inp index f09007620..d525edb79 100644 --- a/regtests/ww3_tbt2.1/input/ww3_ounp.inp +++ b/regtests/ww3_tbt2.1/input/ww3_ounp.inp @@ -69,7 +69,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -113,7 +113,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tbt2.1/input/ww3_shel.nml b/regtests/ww3_tbt2.1/input/ww3_shel.nml index 4931f5436..956b7f72f 100644 --- a/regtests/ww3_tbt2.1/input/ww3_shel.nml +++ b/regtests/ww3_tbt2.1/input/ww3_shel.nml @@ -66,7 +66,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tc1/input/ww3_shel.nml b/regtests/ww3_tc1/input/ww3_shel.nml index 3249147bc..8029bda59 100644 --- a/regtests/ww3_tc1/input/ww3_shel.nml +++ b/regtests/ww3_tc1/input/ww3_shel.nml @@ -22,7 +22,8 @@ ! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model ! -------------------------------------------------------------------- ! &DOMAIN_NML - DOMAIN%STOP = '19690101 000000' + DOMAIN%START = '19680228 000000' + DOMAIN%STOP = '19680301 000000' / ! -------------------------------------------------------------------- ! @@ -63,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types @@ -238,7 +240,6 @@ ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML TYPE%FIELD%LIST = 'HS' - TYPE%POINT%FILE = '../input/points.list' / ! -------------------------------------------------------------------- ! @@ -275,8 +276,7 @@ ! DATE%RESTART = '19680606 000000' '0' '19680607 000000' ! -------------------------------------------------------------------- ! &OUTPUT_DATE_NML - DATE%FIELD = '19680228 000000' '86400' '19690101 000000' - DATE%POINT = '19680228 000000' '86400' '19690101 000000' + DATE%FIELD = '19680228 000000' '86400' '19680301 000000' / ! -------------------------------------------------------------------- ! @@ -325,19 +325,15 @@ ! HOMOG_INPUT(I)%VALUE3 = 0 ! -------------------------------------------------------------------- ! &HOMOG_COUNT_NML - HOMOG_COUNT%N_CUR = 1 HOMOG_COUNT%N_WND = 1 / &HOMOG_INPUT_NML - HOMOG_INPUT(1)%NAME = 'CUR' - HOMOG_INPUT(1)%VALUE1 = 2. - HOMOG_INPUT(1)%VALUE2 = 90. - - HOMOG_INPUT(2)%NAME = 'WND' - HOMOG_INPUT(2)%VALUE1 = 6. - HOMOG_INPUT(2)%VALUE2 = 128. - HOMOG_INPUT(2)%VALUE3 = 0. + HOMOG_INPUT(1)%NAME = 'WND' + HOMOG_INPUT(1)%DATE = '19680228 000000' + HOMOG_INPUT(1)%VALUE1 = 6. + HOMOG_INPUT(1)%VALUE2 = 128. + HOMOG_INPUT(1)%VALUE3 = 0. / ! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tic1.1/input_IC1/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC1/ww3_shel.nml index 3281cc654..94901637c 100644 --- a/regtests/ww3_tic1.1/input_IC1/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC1/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC1_156x3/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC1_156x3/ww3_shel.nml index 056f46568..2401be21f 100644 --- a/regtests/ww3_tic1.1/input_IC1_156x3/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC1_156x3/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC2_ifr/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC2_ifr/ww3_shel.nml index 8316944c3..0ff7e09c5 100644 --- a/regtests/ww3_tic1.1/input_IC2_ifr/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC2_ifr/ww3_shel.nml @@ -67,7 +67,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_shel.nml index 5306bac9e..b7a0dbd23 100644 --- a/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_shel.nml @@ -66,7 +66,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC2_nrl/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC2_nrl/ww3_shel.nml index 786f6be8c..b2bf9ed05 100644 --- a/regtests/ww3_tic1.1/input_IC2_nrl/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC2_nrl/ww3_shel.nml @@ -66,7 +66,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC3/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC3/ww3_shel.nml index f909b68a9..db04072b4 100644 --- a/regtests/ww3_tic1.1/input_IC3/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC3/ww3_shel.nml @@ -67,7 +67,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC3NL/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC3NL/ww3_shel.nml index 230b7e7f0..315d6b3e7 100644 --- a/regtests/ww3_tic1.1/input_IC3NL/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC3NL/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_shel.nml index 18f88d74f..7142699bd 100644 --- a/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.nml index 35c198c5b..eac362455 100644 --- a/regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.nml @@ -66,7 +66,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.nml index 8c0c66528..9a5d85173 100644 --- a/regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.nml @@ -69,7 +69,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.nml index c27e2681f..4b2a151cb 100644 --- a/regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.nml index 5fea36a4e..c4c26b94e 100644 --- a/regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.nml @@ -66,7 +66,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.nml index 92f538bac..681f3c671 100644 --- a/regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.nml @@ -70,7 +70,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.nml index cc8c90403..9da684490 100644 --- a/regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.nml index d6fd1fa0b..b73d0d267 100644 --- a/regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IC5/ww3_shel.nml b/regtests/ww3_tic1.1/input_IC5/ww3_shel.nml index d65be6bf9..070b70b38 100644 --- a/regtests/ww3_tic1.1/input_IC5/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IC5/ww3_shel.nml @@ -67,7 +67,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.1/input_IS2/ww3_shel.nml b/regtests/ww3_tic1.1/input_IS2/ww3_shel.nml index 93c99ceaf..580e12a33 100644 --- a/regtests/ww3_tic1.1/input_IS2/ww3_shel.nml +++ b/regtests/ww3_tic1.1/input_IS2/ww3_shel.nml @@ -66,7 +66,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounp.inp b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounp.inp +++ b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_shel.nml b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_shel.nml index 40bb4192c..6053de94a 100644 --- a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_shel.nml +++ b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounp.inp b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounp.inp +++ b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_shel.nml b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_shel.nml index d3f14e607..c45ea99fd 100644 --- a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_shel.nml +++ b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounp.inp b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounp.inp +++ b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_shel.nml b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_shel.nml index e175b8c76..876a80ff4 100644 --- a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_shel.nml +++ b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounp.inp b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounp.inp +++ b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_shel.nml b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_shel.nml index 119c52a40..aafe9a8d0 100644 --- a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_shel.nml +++ b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounp.inp b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounp.inp +++ b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_shel.nml b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_shel.nml index 9285c3165..d6372796f 100644 --- a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_shel.nml +++ b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounp.inp b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounp.inp +++ b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_shel.nml b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_shel.nml index ae62d5da4..6e8bc367b 100644 --- a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_shel.nml +++ b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounp.inp b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounp.inp +++ b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_shel.nml b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_shel.nml index 1efb81e3d..e9e57f4aa 100644 --- a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_shel.nml +++ b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounp.inp b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounp.inp index 79b02b93d..c2916fc38 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounp.inp +++ b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_shel.nml b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_shel.nml index 58e76be28..db81f92ca 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_shel.nml +++ b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounp.inp b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounp.inp index 79b02b93d..c2916fc38 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounp.inp +++ b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_shel.nml b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_shel.nml index 8672e4f6c..5621700d5 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_shel.nml +++ b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounp.inp b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounp.inp index 79b02b93d..c2916fc38 100644 --- a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounp.inp +++ b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_shel.nml b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_shel.nml index a91dffc2c..d53a4d682 100644 --- a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_shel.nml +++ b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounp.inp b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounp.inp index 79b02b93d..c2916fc38 100644 --- a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounp.inp +++ b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_shel.nml b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_shel.nml index d45db49a4..26406da3c 100644 --- a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_shel.nml +++ b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounp.inp b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounp.inp index 79b02b93d..c2916fc38 100644 --- a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounp.inp +++ b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_shel.nml b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_shel.nml index 67aa16b8a..747861e4f 100644 --- a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_shel.nml +++ b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounp.inp b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounp.inp index 79b02b93d..c2916fc38 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounp.inp +++ b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_shel.nml b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_shel.nml index 58e76be28..db81f92ca 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_shel.nml +++ b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounp.inp b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounp.inp index 79b02b93d..c2916fc38 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounp.inp +++ b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_shel.nml b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_shel.nml index 8672e4f6c..5621700d5 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_shel.nml +++ b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic1.4/input/ww3_ounp.inp b/regtests/ww3_tic1.4/input/ww3_ounp.inp index cebba2fe7..1d63fc7c5 100755 --- a/regtests/ww3_tic1.4/input/ww3_ounp.inp +++ b/regtests/ww3_tic1.4/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.4/input/ww3_ounp_src.inp b/regtests/ww3_tic1.4/input/ww3_ounp_src.inp index 6d1f54f4e..2a5e85261 100755 --- a/regtests/ww3_tic1.4/input/ww3_ounp_src.inp +++ b/regtests/ww3_tic1.4/input/ww3_ounp_src.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic1.4/input/ww3_shel.nml b/regtests/ww3_tic1.4/input/ww3_shel.nml index 4aba43aea..f90f91bf0 100644 --- a/regtests/ww3_tic1.4/input/ww3_shel.nml +++ b/regtests/ww3_tic1.4/input/ww3_shel.nml @@ -67,7 +67,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic2.1/input_IC1/ww3_ounp.inp b/regtests/ww3_tic2.1/input_IC1/ww3_ounp.inp index 41f4da531..4f2d1d52e 100644 --- a/regtests/ww3_tic2.1/input_IC1/ww3_ounp.inp +++ b/regtests/ww3_tic2.1/input_IC1/ww3_ounp.inp @@ -69,7 +69,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -113,7 +113,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic2.1/input_IC1/ww3_shel.nml b/regtests/ww3_tic2.1/input_IC1/ww3_shel.nml index cb844608b..68cca5bdc 100644 --- a/regtests/ww3_tic2.1/input_IC1/ww3_shel.nml +++ b/regtests/ww3_tic2.1/input_IC1/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounp.inp b/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounp.inp index 41f4da531..4f2d1d52e 100644 --- a/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounp.inp +++ b/regtests/ww3_tic2.1/input_IC2IS2/ww3_ounp.inp @@ -69,7 +69,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -113,7 +113,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.nml b/regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.nml index b5b24f258..cc19dff07 100644 --- a/regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.nml +++ b/regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic2.1/input_IC4/ww3_shel.nml b/regtests/ww3_tic2.1/input_IC4/ww3_shel.nml index 88c930d96..68d85ca5b 100644 --- a/regtests/ww3_tic2.1/input_IC4/ww3_shel.nml +++ b/regtests/ww3_tic2.1/input_IC4/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic2.2/input/ww3_ounp.inp b/regtests/ww3_tic2.2/input/ww3_ounp.inp index cebba2fe7..1d63fc7c5 100644 --- a/regtests/ww3_tic2.2/input/ww3_ounp.inp +++ b/regtests/ww3_tic2.2/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic2.2/input/ww3_shel.nml b/regtests/ww3_tic2.2/input/ww3_shel.nml index 51f4680f9..766354c03 100644 --- a/regtests/ww3_tic2.2/input/ww3_shel.nml +++ b/regtests/ww3_tic2.2/input/ww3_shel.nml @@ -67,7 +67,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic2.2/input_IC2/ww3_ounp.inp b/regtests/ww3_tic2.2/input_IC2/ww3_ounp.inp index cebba2fe7..1d63fc7c5 100644 --- a/regtests/ww3_tic2.2/input_IC2/ww3_ounp.inp +++ b/regtests/ww3_tic2.2/input_IC2/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic2.2/input_IC2/ww3_shel.nml b/regtests/ww3_tic2.2/input_IC2/ww3_shel.nml index d62867b67..06f9da303 100644 --- a/regtests/ww3_tic2.2/input_IC2/ww3_shel.nml +++ b/regtests/ww3_tic2.2/input_IC2/ww3_shel.nml @@ -67,7 +67,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tic2.3/input/ww3_ounp.inp b/regtests/ww3_tic2.3/input/ww3_ounp.inp index cebba2fe7..1d63fc7c5 100755 --- a/regtests/ww3_tic2.3/input/ww3_ounp.inp +++ b/regtests/ww3_tic2.3/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tic2.3/input/ww3_shel.nml b/regtests/ww3_tic2.3/input/ww3_shel.nml index bd4136ea5..c5c782a2f 100644 --- a/regtests/ww3_tic2.3/input/ww3_shel.nml +++ b/regtests/ww3_tic2.3/input/ww3_shel.nml @@ -67,7 +67,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tig1.1/input/ww3_ounp.inp b/regtests/ww3_tig1.1/input/ww3_ounp.inp index 2a29c65ab..53e31172a 100644 --- a/regtests/ww3_tig1.1/input/ww3_ounp.inp +++ b/regtests/ww3_tig1.1/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tig1.1/input/ww3_shel.nml b/regtests/ww3_tig1.1/input/ww3_shel.nml index 0acf6ecc0..3e9177359 100644 --- a/regtests/ww3_tig1.1/input/ww3_shel.nml +++ b/regtests/ww3_tig1.1/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.1/input/ww3_ounp.inp b/regtests/ww3_tp1.1/input/ww3_ounp.inp index 9a51ca125..4d22dd44b 100644 --- a/regtests/ww3_tp1.1/input/ww3_ounp.inp +++ b/regtests/ww3_tp1.1/input/ww3_ounp.inp @@ -71,7 +71,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -115,7 +115,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.1/input/ww3_shel.nml b/regtests/ww3_tp1.1/input/ww3_shel.nml index f0d260f3c..ab0a07ebc 100644 --- a/regtests/ww3_tp1.1/input/ww3_shel.nml +++ b/regtests/ww3_tp1.1/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.1/input2/ww3_shel.nml b/regtests/ww3_tp1.1/input2/ww3_shel.nml index 6d48e7e15..fd3a26102 100644 --- a/regtests/ww3_tp1.1/input2/ww3_shel.nml +++ b/regtests/ww3_tp1.1/input2/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.10/input/ww3_ounp.inp b/regtests/ww3_tp1.10/input/ww3_ounp.inp index 768284cad..33d62aea4 100644 --- a/regtests/ww3_tp1.10/input/ww3_ounp.inp +++ b/regtests/ww3_tp1.10/input/ww3_ounp.inp @@ -62,7 +62,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -106,7 +106,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.10/input/ww3_shel.nml b/regtests/ww3_tp1.10/input/ww3_shel.nml index 4a9c00be4..25d986c67 100644 --- a/regtests/ww3_tp1.10/input/ww3_shel.nml +++ b/regtests/ww3_tp1.10/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.2/input/ww3_shel.nml b/regtests/ww3_tp1.2/input/ww3_shel.nml index 26beb5530..af859b4e8 100644 --- a/regtests/ww3_tp1.2/input/ww3_shel.nml +++ b/regtests/ww3_tp1.2/input/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.3/input/ww3_shel.nml b/regtests/ww3_tp1.3/input/ww3_shel.nml index 7e66c3158..631fe2ec2 100644 --- a/regtests/ww3_tp1.3/input/ww3_shel.nml +++ b/regtests/ww3_tp1.3/input/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.4/input/ww3_ounp.inp b/regtests/ww3_tp1.4/input/ww3_ounp.inp index 657c660ed..e6471fc59 100644 --- a/regtests/ww3_tp1.4/input/ww3_ounp.inp +++ b/regtests/ww3_tp1.4/input/ww3_ounp.inp @@ -67,7 +67,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -111,7 +111,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.4/input/ww3_shel.nml b/regtests/ww3_tp1.4/input/ww3_shel.nml index ab3e4f73e..3daad8697 100644 --- a/regtests/ww3_tp1.4/input/ww3_shel.nml +++ b/regtests/ww3_tp1.4/input/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.5/input/ww3_ounp.inp b/regtests/ww3_tp1.5/input/ww3_ounp.inp index 657c660ed..e6471fc59 100644 --- a/regtests/ww3_tp1.5/input/ww3_ounp.inp +++ b/regtests/ww3_tp1.5/input/ww3_ounp.inp @@ -67,7 +67,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -111,7 +111,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.5/input/ww3_shel.nml b/regtests/ww3_tp1.5/input/ww3_shel.nml index 9f745a9a3..ecffdbb85 100644 --- a/regtests/ww3_tp1.5/input/ww3_shel.nml +++ b/regtests/ww3_tp1.5/input/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.6/input/ww3_ounp.inp b/regtests/ww3_tp1.6/input/ww3_ounp.inp index df43e2f1d..8df3f48ad 100644 --- a/regtests/ww3_tp1.6/input/ww3_ounp.inp +++ b/regtests/ww3_tp1.6/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.6/input/ww3_shel.nml b/regtests/ww3_tp1.6/input/ww3_shel.nml index bb85ee2b9..b2cc95677 100644 --- a/regtests/ww3_tp1.6/input/ww3_shel.nml +++ b/regtests/ww3_tp1.6/input/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.6/input_moderate_current/ww3_shel.nml b/regtests/ww3_tp1.6/input_moderate_current/ww3_shel.nml index dae3ad902..1a7c2baa8 100644 --- a/regtests/ww3_tp1.6/input_moderate_current/ww3_shel.nml +++ b/regtests/ww3_tp1.6/input_moderate_current/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.7/input/ww3_ounp.inp b/regtests/ww3_tp1.7/input/ww3_ounp.inp index 75db4ba17..3b54be8cd 100644 --- a/regtests/ww3_tp1.7/input/ww3_ounp.inp +++ b/regtests/ww3_tp1.7/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.7/input/ww3_outp.inp b/regtests/ww3_tp1.7/input/ww3_outp.inp index eaf6f8e9d..c3fd295fb 100755 --- a/regtests/ww3_tp1.7/input/ww3_outp.inp +++ b/regtests/ww3_tp1.7/input/ww3_outp.inp @@ -42,7 +42,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -98,7 +98,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.7/input/ww3_shel.inp b/regtests/ww3_tp1.7/input/ww3_shel.inp index 5b46756c4..a3328f4e9 100755 --- a/regtests/ww3_tp1.7/input/ww3_shel.inp +++ b/regtests/ww3_tp1.7/input/ww3_shel.inp @@ -61,7 +61,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp1.7/input/ww3_shel.nml b/regtests/ww3_tp1.7/input/ww3_shel.nml index d8b16d077..6a6510de5 100644 --- a/regtests/ww3_tp1.7/input/ww3_shel.nml +++ b/regtests/ww3_tp1.7/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.7/input_OBST/ww3_ounp.inp b/regtests/ww3_tp1.7/input_OBST/ww3_ounp.inp index 75db4ba17..3b54be8cd 100644 --- a/regtests/ww3_tp1.7/input_OBST/ww3_ounp.inp +++ b/regtests/ww3_tp1.7/input_OBST/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.7/input_OBST/ww3_outp.inp b/regtests/ww3_tp1.7/input_OBST/ww3_outp.inp index eaf6f8e9d..c3fd295fb 100755 --- a/regtests/ww3_tp1.7/input_OBST/ww3_outp.inp +++ b/regtests/ww3_tp1.7/input_OBST/ww3_outp.inp @@ -42,7 +42,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -98,7 +98,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.7/input_OBST/ww3_shel.inp b/regtests/ww3_tp1.7/input_OBST/ww3_shel.inp index 5b46756c4..a3328f4e9 100755 --- a/regtests/ww3_tp1.7/input_OBST/ww3_shel.inp +++ b/regtests/ww3_tp1.7/input_OBST/ww3_shel.inp @@ -61,7 +61,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp1.7/input_OBST/ww3_shel.nml b/regtests/ww3_tp1.7/input_OBST/ww3_shel.nml index 5148f6616..d7bf878b6 100644 --- a/regtests/ww3_tp1.7/input_OBST/ww3_shel.nml +++ b/regtests/ww3_tp1.7/input_OBST/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.8/input/ww3_ounp.inp b/regtests/ww3_tp1.8/input/ww3_ounp.inp index df43e2f1d..8df3f48ad 100644 --- a/regtests/ww3_tp1.8/input/ww3_ounp.inp +++ b/regtests/ww3_tp1.8/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.8/input/ww3_shel.nml b/regtests/ww3_tp1.8/input/ww3_shel.nml index b57d66254..6a5974ea9 100644 --- a/regtests/ww3_tp1.8/input/ww3_shel.nml +++ b/regtests/ww3_tp1.8/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.8/input_BJ/ww3_shel.nml b/regtests/ww3_tp1.8/input_BJ/ww3_shel.nml index 746b68200..de8f321f5 100644 --- a/regtests/ww3_tp1.8/input_BJ/ww3_shel.nml +++ b/regtests/ww3_tp1.8/input_BJ/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp1.9/input/ww3_ounp.inp b/regtests/ww3_tp1.9/input/ww3_ounp.inp index 53e1803d2..e4c85b27e 100644 --- a/regtests/ww3_tp1.9/input/ww3_ounp.inp +++ b/regtests/ww3_tp1.9/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp1.9/input/ww3_outp.inp b/regtests/ww3_tp1.9/input/ww3_outp.inp index 6677006d4..d35ead8e1 100644 --- a/regtests/ww3_tp1.9/input/ww3_outp.inp +++ b/regtests/ww3_tp1.9/input/ww3_outp.inp @@ -50,7 +50,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -106,7 +106,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | @@ -140,7 +140,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ diff --git a/regtests/ww3_tp1.9/input/ww3_shel.nml b/regtests/ww3_tp1.9/input/ww3_shel.nml index a57d6051d..b594b13de 100644 --- a/regtests/ww3_tp1.9/input/ww3_shel.nml +++ b/regtests/ww3_tp1.9/input/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.1/input/ww3_multi.nml b/regtests/ww3_tp2.1/input/ww3_multi.nml index 6ff8057d5..5cde0a73b 100644 --- a/regtests/ww3_tp2.1/input/ww3_multi.nml +++ b/regtests/ww3_tp2.1/input/ww3_multi.nml @@ -123,7 +123,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/ww3_tp2.1/input/ww3_shel.nml b/regtests/ww3_tp2.1/input/ww3_shel.nml index 8de22f315..0c2c4015a 100644 --- a/regtests/ww3_tp2.1/input/ww3_shel.nml +++ b/regtests/ww3_tp2.1/input/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.10/input/ww3_ounp.inp b/regtests/ww3_tp2.10/input/ww3_ounp.inp index d1f57b3b6..584acec33 100644 --- a/regtests/ww3_tp2.10/input/ww3_ounp.inp +++ b/regtests/ww3_tp2.10/input/ww3_ounp.inp @@ -59,7 +59,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -103,7 +103,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.10/input/ww3_shel.nml b/regtests/ww3_tp2.10/input/ww3_shel.nml index 721a694bc..535235955 100644 --- a/regtests/ww3_tp2.10/input/ww3_shel.nml +++ b/regtests/ww3_tp2.10/input/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.11/input/ww3_ounp.inp b/regtests/ww3_tp2.11/input/ww3_ounp.inp index b5fb7549d..7584f7cb6 100644 --- a/regtests/ww3_tp2.11/input/ww3_ounp.inp +++ b/regtests/ww3_tp2.11/input/ww3_ounp.inp @@ -66,7 +66,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -110,7 +110,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.11/input/ww3_shel.nml b/regtests/ww3_tp2.11/input/ww3_shel.nml index 0b32c4177..d25c117a8 100644 --- a/regtests/ww3_tp2.11/input/ww3_shel.nml +++ b/regtests/ww3_tp2.11/input/ww3_shel.nml @@ -62,7 +62,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.13/input/ww3_shel.inp b/regtests/ww3_tp2.13/input/ww3_shel.inp index 88dc45019..f1a39d61b 100644 --- a/regtests/ww3_tp2.13/input/ww3_shel.inp +++ b/regtests/ww3_tp2.13/input/ww3_shel.inp @@ -56,7 +56,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.13/input/ww3_shel.nml b/regtests/ww3_tp2.13/input/ww3_shel.nml index 6e4d00b8c..3ed2a5afb 100644 --- a/regtests/ww3_tp2.13/input/ww3_shel.nml +++ b/regtests/ww3_tp2.13/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp index 0c58944c9..d3306bb7f 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp @@ -75,7 +75,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASACM.nml index 5204a0517..f134548da 100644 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM.nml +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp index 262a90563..df92bbb06 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp @@ -75,7 +75,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml index c4cbbe6e9..0e05a1a9d 100644 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp index e20995ef2..472a32db5 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp @@ -75,7 +75,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASICM.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASICM.nml index e413aba29..6f6418635 100644 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASICM.nml +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASICM.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp index 6f28230c9..7d1b1578d 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp @@ -75,7 +75,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.nml index 156de935d..7ae1a54c1 100644 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.nml +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.15/input/ww3_ounp_par.inp b/regtests/ww3_tp2.15/input/ww3_ounp_par.inp index 2d901ce83..d0f34dba9 100644 --- a/regtests/ww3_tp2.15/input/ww3_ounp_par.inp +++ b/regtests/ww3_tp2.15/input/ww3_ounp_par.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.15/input/ww3_ounp_spec.inp b/regtests/ww3_tp2.15/input/ww3_ounp_spec.inp index 3cdd791d0..5769526f8 100644 --- a/regtests/ww3_tp2.15/input/ww3_ounp_spec.inp +++ b/regtests/ww3_tp2.15/input/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.15/input/ww3_shel.nml b/regtests/ww3_tp2.15/input/ww3_shel.nml index 78aa543ff..0c85b7cde 100644 --- a/regtests/ww3_tp2.15/input/ww3_shel.nml +++ b/regtests/ww3_tp2.15/input/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.16/input/ww3_shel.inp b/regtests/ww3_tp2.16/input/ww3_shel.inp index a8105b17e..356242f2a 100644 --- a/regtests/ww3_tp2.16/input/ww3_shel.inp +++ b/regtests/ww3_tp2.16/input/ww3_shel.inp @@ -74,7 +74,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.16/input/ww3_shel.nml b/regtests/ww3_tp2.16/input/ww3_shel.nml index e9659b02e..0e571e2f0 100644 --- a/regtests/ww3_tp2.16/input/ww3_shel.nml +++ b/regtests/ww3_tp2.16/input/ww3_shel.nml @@ -61,7 +61,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.nml b/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.nml index e14bf55a2..6ae214b15 100644 --- a/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.nml +++ b/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.nml @@ -129,7 +129,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.nml b/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.nml index 3c75b6c6c..87e8e880c 100644 --- a/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.nml +++ b/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.nml @@ -129,7 +129,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.nml b/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.nml index 257777563..f8ae09341 100644 --- a/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.nml +++ b/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.nml @@ -129,7 +129,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/ww3_tp2.17/input/ww3_ounp.inp b/regtests/ww3_tp2.17/input/ww3_ounp.inp index 5a92786b8..4194af75c 100755 --- a/regtests/ww3_tp2.17/input/ww3_ounp.inp +++ b/regtests/ww3_tp2.17/input/ww3_ounp.inp @@ -57,7 +57,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -101,7 +101,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.17/input/ww3_outp.inp b/regtests/ww3_tp2.17/input/ww3_outp.inp index 216b4d558..5e90ea136 100644 --- a/regtests/ww3_tp2.17/input/ww3_outp.inp +++ b/regtests/ww3_tp2.17/input/ww3_outp.inp @@ -42,7 +42,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -97,7 +97,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.17/input/ww3_shel.inp b/regtests/ww3_tp2.17/input/ww3_shel.inp index d31e0595f..ee35b90e7 100755 --- a/regtests/ww3_tp2.17/input/ww3_shel.inp +++ b/regtests/ww3_tp2.17/input/ww3_shel.inp @@ -59,7 +59,7 @@ $ $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.17/input/ww3_shel.nml b/regtests/ww3_tp2.17/input/ww3_shel.nml index 747118e5a..c9534d730 100644 --- a/regtests/ww3_tp2.17/input/ww3_shel.nml +++ b/regtests/ww3_tp2.17/input/ww3_shel.nml @@ -67,7 +67,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.18/input/ww3_shel.inp b/regtests/ww3_tp2.18/input/ww3_shel.inp index dfaf7c4ad..9c3154545 100644 --- a/regtests/ww3_tp2.18/input/ww3_shel.inp +++ b/regtests/ww3_tp2.18/input/ww3_shel.inp @@ -52,7 +52,7 @@ DPT CUR $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.18/input/ww3_shel.nml b/regtests/ww3_tp2.18/input/ww3_shel.nml index d79ca00a0..a13ee4139 100644 --- a/regtests/ww3_tp2.18/input/ww3_shel.nml +++ b/regtests/ww3_tp2.18/input/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.2/input/ww3_multi.nml b/regtests/ww3_tp2.2/input/ww3_multi.nml index 7125ad5fc..61b7766c1 100644 --- a/regtests/ww3_tp2.2/input/ww3_multi.nml +++ b/regtests/ww3_tp2.2/input/ww3_multi.nml @@ -123,7 +123,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/ww3_tp2.2/input/ww3_ounp.inp b/regtests/ww3_tp2.2/input/ww3_ounp.inp index 8527347d3..c328612ee 100644 --- a/regtests/ww3_tp2.2/input/ww3_ounp.inp +++ b/regtests/ww3_tp2.2/input/ww3_ounp.inp @@ -59,7 +59,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -103,7 +103,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.2/input/ww3_shel.nml b/regtests/ww3_tp2.2/input/ww3_shel.nml index ae3ce87e9..cad0952a2 100644 --- a/regtests/ww3_tp2.2/input/ww3_shel.nml +++ b/regtests/ww3_tp2.2/input/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.3/input/ww3_shel.nml b/regtests/ww3_tp2.3/input/ww3_shel.nml index 26f83c41e..1aa9755ca 100644 --- a/regtests/ww3_tp2.3/input/ww3_shel.nml +++ b/regtests/ww3_tp2.3/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.4/input/ww3_shel.inp b/regtests/ww3_tp2.4/input/ww3_shel.inp index 84b0a48d1..bb1183690 100644 --- a/regtests/ww3_tp2.4/input/ww3_shel.inp +++ b/regtests/ww3_tp2.4/input/ww3_shel.inp @@ -54,7 +54,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.4/input/ww3_shel.nml b/regtests/ww3_tp2.4/input/ww3_shel.nml index 3af64e32b..150c7f294 100644 --- a/regtests/ww3_tp2.4/input/ww3_shel.nml +++ b/regtests/ww3_tp2.4/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.5/input/ww3_shel.inp b/regtests/ww3_tp2.5/input/ww3_shel.inp index 82e621bdf..edf156ea4 100644 --- a/regtests/ww3_tp2.5/input/ww3_shel.inp +++ b/regtests/ww3_tp2.5/input/ww3_shel.inp @@ -57,7 +57,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.5/input/ww3_shel.nml b/regtests/ww3_tp2.5/input/ww3_shel.nml index e5fd30a2c..a1e8ba59c 100644 --- a/regtests/ww3_tp2.5/input/ww3_shel.nml +++ b/regtests/ww3_tp2.5/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.5/input_REF/ww3_ounp.inp b/regtests/ww3_tp2.5/input_REF/ww3_ounp.inp index 6cdea6b83..a04ecd1ee 100644 --- a/regtests/ww3_tp2.5/input_REF/ww3_ounp.inp +++ b/regtests/ww3_tp2.5/input_REF/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.5/input_REF/ww3_shel.inp b/regtests/ww3_tp2.5/input_REF/ww3_shel.inp index 8b5cea7cf..f37fe7b48 100644 --- a/regtests/ww3_tp2.5/input_REF/ww3_shel.inp +++ b/regtests/ww3_tp2.5/input_REF/ww3_shel.inp @@ -56,7 +56,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.5/input_REF/ww3_shel.nml b/regtests/ww3_tp2.5/input_REF/ww3_shel.nml index b5e86b454..3b9fc9e1a 100644 --- a/regtests/ww3_tp2.5/input_REF/ww3_shel.nml +++ b/regtests/ww3_tp2.5/input_REF/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.6/input/ww3_ounp.inp b/regtests/ww3_tp2.6/input/ww3_ounp.inp index 5f81740eb..47972172a 100644 --- a/regtests/ww3_tp2.6/input/ww3_ounp.inp +++ b/regtests/ww3_tp2.6/input/ww3_ounp.inp @@ -57,7 +57,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -101,7 +101,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.6/input/ww3_outp.inp b/regtests/ww3_tp2.6/input/ww3_outp.inp index aedb60854..888ca870c 100644 --- a/regtests/ww3_tp2.6/input/ww3_outp.inp +++ b/regtests/ww3_tp2.6/input/ww3_outp.inp @@ -43,7 +43,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -98,7 +98,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.6/input/ww3_shel.inp b/regtests/ww3_tp2.6/input/ww3_shel.inp index 7302b70cd..dedc5a40a 100644 --- a/regtests/ww3_tp2.6/input/ww3_shel.inp +++ b/regtests/ww3_tp2.6/input/ww3_shel.inp @@ -64,7 +64,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.6/input/ww3_shel.nml b/regtests/ww3_tp2.6/input/ww3_shel.nml index ed0f9abc6..3e798a638 100644 --- a/regtests/ww3_tp2.6/input/ww3_shel.nml +++ b/regtests/ww3_tp2.6/input/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.7/input/ww3_ounp.inp b/regtests/ww3_tp2.7/input/ww3_ounp.inp index 5fe11f915..6bf99ea64 100644 --- a/regtests/ww3_tp2.7/input/ww3_ounp.inp +++ b/regtests/ww3_tp2.7/input/ww3_ounp.inp @@ -57,7 +57,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -101,7 +101,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.7/input/ww3_outp.inp b/regtests/ww3_tp2.7/input/ww3_outp.inp index 7ad5a3de0..897d2858f 100644 --- a/regtests/ww3_tp2.7/input/ww3_outp.inp +++ b/regtests/ww3_tp2.7/input/ww3_outp.inp @@ -42,7 +42,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -98,7 +98,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.7/input/ww3_shel.inp b/regtests/ww3_tp2.7/input/ww3_shel.inp index 1c48fe792..cef53d6e0 100644 --- a/regtests/ww3_tp2.7/input/ww3_shel.inp +++ b/regtests/ww3_tp2.7/input/ww3_shel.inp @@ -64,7 +64,7 @@ $----------------------------------------------------------------$ $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.7/input/ww3_shel.nml b/regtests/ww3_tp2.7/input/ww3_shel.nml index a7559f2c9..1cd13daf1 100644 --- a/regtests/ww3_tp2.7/input/ww3_shel.nml +++ b/regtests/ww3_tp2.7/input/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.8/input/ww3_ounp.inp b/regtests/ww3_tp2.8/input/ww3_ounp.inp index 7b1ee6ed3..2fc1a25de 100644 --- a/regtests/ww3_tp2.8/input/ww3_ounp.inp +++ b/regtests/ww3_tp2.8/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.8/input/ww3_outp.inp b/regtests/ww3_tp2.8/input/ww3_outp.inp index 80acf88de..416f4661a 100644 --- a/regtests/ww3_tp2.8/input/ww3_outp.inp +++ b/regtests/ww3_tp2.8/input/ww3_outp.inp @@ -42,7 +42,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -98,7 +98,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_tp2.8/input/ww3_shel.inp b/regtests/ww3_tp2.8/input/ww3_shel.inp index 49dd913f1..67b304731 100755 --- a/regtests/ww3_tp2.8/input/ww3_shel.inp +++ b/regtests/ww3_tp2.8/input/ww3_shel.inp @@ -49,7 +49,7 @@ DPT CUR HS FP DIR SPR $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_tp2.8/input/ww3_shel.nml b/regtests/ww3_tp2.8/input/ww3_shel.nml index 0917236b5..965a5114d 100644 --- a/regtests/ww3_tp2.8/input/ww3_shel.nml +++ b/regtests/ww3_tp2.8/input/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_tp2.9/input/ww3_shel.nml b/regtests/ww3_tp2.9/input/ww3_shel.nml index 9396c1c51..1280e049e 100644 --- a/regtests/ww3_tp2.9/input/ww3_shel.nml +++ b/regtests/ww3_tp2.9/input/ww3_shel.nml @@ -61,7 +61,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts1/input/ww3_ounp_spec.inp b/regtests/ww3_ts1/input/ww3_ounp_spec.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ts1/input/ww3_ounp_spec.inp +++ b/regtests/ww3_ts1/input/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input/ww3_shel.nml b/regtests/ww3_ts1/input/ww3_shel.nml index 1586179cb..e90dd9c6c 100644 --- a/regtests/ww3_ts1/input/ww3_shel.nml +++ b/regtests/ww3_ts1/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts1/input_fld/ww3_shel.nml b/regtests/ww3_ts1/input_fld/ww3_shel.nml index 494efe366..6833681a5 100644 --- a/regtests/ww3_ts1/input_fld/ww3_shel.nml +++ b/regtests/ww3_ts1/input_fld/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts1/input_icesct_IC0/ww3_ounp_spec.inp b/regtests/ww3_ts1/input_icesct_IC0/ww3_ounp_spec.inp index a9adfff54..f0be340ed 100644 --- a/regtests/ww3_ts1/input_icesct_IC0/ww3_ounp_spec.inp +++ b/regtests/ww3_ts1/input_icesct_IC0/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC0/ww3_ounp_src.inp b/regtests/ww3_ts1/input_icesct_IC0/ww3_ounp_src.inp index 4f14ef380..b69c3da66 100644 --- a/regtests/ww3_ts1/input_icesct_IC0/ww3_ounp_src.inp +++ b/regtests/ww3_ts1/input_icesct_IC0/ww3_ounp_src.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC0/ww3_shel.nml b/regtests/ww3_ts1/input_icesct_IC0/ww3_shel.nml index 3b76f54eb..66a3e698a 100644 --- a/regtests/ww3_ts1/input_icesct_IC0/ww3_shel.nml +++ b/regtests/ww3_ts1/input_icesct_IC0/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts1/input_icesct_IC1/ww3_ounp_spec.inp b/regtests/ww3_ts1/input_icesct_IC1/ww3_ounp_spec.inp index a9adfff54..f0be340ed 100644 --- a/regtests/ww3_ts1/input_icesct_IC1/ww3_ounp_spec.inp +++ b/regtests/ww3_ts1/input_icesct_IC1/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC1/ww3_ounp_src.inp b/regtests/ww3_ts1/input_icesct_IC1/ww3_ounp_src.inp index 4f14ef380..b69c3da66 100644 --- a/regtests/ww3_ts1/input_icesct_IC1/ww3_ounp_src.inp +++ b/regtests/ww3_ts1/input_icesct_IC1/ww3_ounp_src.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC1/ww3_shel.nml b/regtests/ww3_ts1/input_icesct_IC1/ww3_shel.nml index f1efd820a..fb7c00df1 100644 --- a/regtests/ww3_ts1/input_icesct_IC1/ww3_shel.nml +++ b/regtests/ww3_ts1/input_icesct_IC1/ww3_shel.nml @@ -65,7 +65,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts1/input_icesct_IC2/ww3_ounp_spec.inp b/regtests/ww3_ts1/input_icesct_IC2/ww3_ounp_spec.inp index a9adfff54..f0be340ed 100644 --- a/regtests/ww3_ts1/input_icesct_IC2/ww3_ounp_spec.inp +++ b/regtests/ww3_ts1/input_icesct_IC2/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC2/ww3_ounp_src.inp b/regtests/ww3_ts1/input_icesct_IC2/ww3_ounp_src.inp index 4f14ef380..b69c3da66 100644 --- a/regtests/ww3_ts1/input_icesct_IC2/ww3_ounp_src.inp +++ b/regtests/ww3_ts1/input_icesct_IC2/ww3_ounp_src.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC2/ww3_shel.nml b/regtests/ww3_ts1/input_icesct_IC2/ww3_shel.nml index e3f192bb8..ec306364c 100644 --- a/regtests/ww3_ts1/input_icesct_IC2/ww3_shel.nml +++ b/regtests/ww3_ts1/input_icesct_IC2/ww3_shel.nml @@ -66,7 +66,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts1/input_icesct_IC3/ww3_ounp_spec.inp b/regtests/ww3_ts1/input_icesct_IC3/ww3_ounp_spec.inp index a9adfff54..f0be340ed 100644 --- a/regtests/ww3_ts1/input_icesct_IC3/ww3_ounp_spec.inp +++ b/regtests/ww3_ts1/input_icesct_IC3/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC3/ww3_ounp_src.inp b/regtests/ww3_ts1/input_icesct_IC3/ww3_ounp_src.inp index 4f14ef380..b69c3da66 100644 --- a/regtests/ww3_ts1/input_icesct_IC3/ww3_ounp_src.inp +++ b/regtests/ww3_ts1/input_icesct_IC3/ww3_ounp_src.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC3/ww3_shel.nml b/regtests/ww3_ts1/input_icesct_IC3/ww3_shel.nml index aec0e38c6..d3d885878 100644 --- a/regtests/ww3_ts1/input_icesct_IC3/ww3_shel.nml +++ b/regtests/ww3_ts1/input_icesct_IC3/ww3_shel.nml @@ -68,7 +68,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts1/input_icesct_IC4/ww3_ounp_spec.inp b/regtests/ww3_ts1/input_icesct_IC4/ww3_ounp_spec.inp index a9adfff54..f0be340ed 100644 --- a/regtests/ww3_ts1/input_icesct_IC4/ww3_ounp_spec.inp +++ b/regtests/ww3_ts1/input_icesct_IC4/ww3_ounp_spec.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC4/ww3_ounp_src.inp b/regtests/ww3_ts1/input_icesct_IC4/ww3_ounp_src.inp index 4f14ef380..b69c3da66 100644 --- a/regtests/ww3_ts1/input_icesct_IC4/ww3_ounp_src.inp +++ b/regtests/ww3_ts1/input_icesct_IC4/ww3_ounp_src.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts1/input_icesct_IC4/ww3_shel.nml b/regtests/ww3_ts1/input_icesct_IC4/ww3_shel.nml index a85c2831a..5baf588b3 100644 --- a/regtests/ww3_ts1/input_icesct_IC4/ww3_shel.nml +++ b/regtests/ww3_ts1/input_icesct_IC4/ww3_shel.nml @@ -71,7 +71,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts2/input/ww3_ounp.inp b/regtests/ww3_ts2/input/ww3_ounp.inp index 5f2ba7528..4c97c678b 100644 --- a/regtests/ww3_ts2/input/ww3_ounp.inp +++ b/regtests/ww3_ts2/input/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts2/input/ww3_shel.nml b/regtests/ww3_ts2/input/ww3_shel.nml index 929a347f5..cb5beba31 100644 --- a/regtests/ww3_ts2/input/ww3_shel.nml +++ b/regtests/ww3_ts2/input/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts3/input/ww3_shel.nml b/regtests/ww3_ts3/input/ww3_shel.nml index 159ecab2a..519e37614 100644 --- a/regtests/ww3_ts3/input/ww3_shel.nml +++ b/regtests/ww3_ts3/input/ww3_shel.nml @@ -64,7 +64,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.nml b/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.nml index dc1537ff9..69093815e 100644 --- a/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.nml +++ b/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.nml @@ -131,7 +131,8 @@ ! ! * need DOMAIN%UNIPTS equal true to use a unified point output file ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the detailed list of field names is given in model/nml/ww3_shel.nml : ! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 diff --git a/regtests/ww3_ts4/input_rg_multi/ww3_ounp.inp b/regtests/ww3_ts4/input_rg_multi/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_ts4/input_rg_multi/ww3_ounp.inp +++ b/regtests/ww3_ts4/input_rg_multi/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts4/input_rg_shel/ww3_ounp.inp b/regtests/ww3_ts4/input_rg_shel/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_ts4/input_rg_shel/ww3_ounp.inp +++ b/regtests/ww3_ts4/input_rg_shel/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts4/input_rg_shel/ww3_shel.inp b/regtests/ww3_ts4/input_rg_shel/ww3_shel.inp index 22228bfeb..8a4a5f5fb 100644 --- a/regtests/ww3_ts4/input_rg_shel/ww3_shel.inp +++ b/regtests/ww3_ts4/input_rg_shel/ww3_shel.inp @@ -74,7 +74,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_ts4/input_rg_shel/ww3_shel.nml b/regtests/ww3_ts4/input_rg_shel/ww3_shel.nml index 162178806..9a6b558b4 100644 --- a/regtests/ww3_ts4/input_rg_shel/ww3_shel.nml +++ b/regtests/ww3_ts4/input_rg_shel/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types diff --git a/regtests/ww3_ts4/input_ug/ww3_ounp.inp b/regtests/ww3_ts4/input_ug/ww3_ounp.inp index c47193e1e..59e7b9e35 100644 --- a/regtests/ww3_ts4/input_ug/ww3_ounp.inp +++ b/regtests/ww3_ts4/input_ug/ww3_ounp.inp @@ -58,7 +58,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), lat, lon, d, U10 and | loop | over +$ - Point name (C*40), lat, lon, d, U10 and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) | points | times $ -+ -+ @@ -102,7 +102,7 @@ $ - Bin directions in radians for all bins (Oceanographic conv.). $ -+ $ - Time in yyyymmdd hhmmss format | loop $ -+ | -$ - Point name (C*10), depth, wind speed and | loop | over +$ - Point name (C*40), depth, wind speed and | loop | over $ direction, current speed and direction | over | $ - E(f,theta) if requested | points | times $ - Sin(f,theta) if requested | | diff --git a/regtests/ww3_ts4/input_ug/ww3_shel.inp b/regtests/ww3_ts4/input_ug/ww3_shel.inp index 22228bfeb..8a4a5f5fb 100644 --- a/regtests/ww3_ts4/input_ug/ww3_shel.inp +++ b/regtests/ww3_ts4/input_ug/ww3_shel.inp @@ -74,7 +74,7 @@ $---------------------------------------------------------------- $ $ Type 2 : Point output $ Standard line and a number of lines identifying the -$ longitude, latitude and name (C*10) of output points. +$ longitude, latitude and name (C*40) of output points. $ The list is closed by defining a point with the name $ 'STOPSTRING'. No point info read if no point output is $ requested (i.e., no 'STOPSTRING' needed). diff --git a/regtests/ww3_ts4/input_ug/ww3_shel.nml b/regtests/ww3_ts4/input_ug/ww3_shel.nml index d6063ae03..e4b87bf3f 100644 --- a/regtests/ww3_ts4/input_ug/ww3_shel.nml +++ b/regtests/ww3_ts4/input_ug/ww3_shel.nml @@ -63,7 +63,8 @@ ! -------------------------------------------------------------------- ! ! Define the output types point parameters via OUTPUT_TYPE_NML namelist ! -! * the point file is a space separated values per line : lon lat 'name' +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) ! ! * the full list of field names is : ! All parameters listed below are available in output file of the types From 96e3f3a8fa0389a4b110b0fa23e7a414f6d92038 Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Fri, 4 Sep 2020 11:33:37 -0400 Subject: [PATCH 49/84] Bug fixes for z0 over ice for ESMF cap (#248) * remove z0 values for ice points * fix bug in wmesmf when not using WRST switch Issue #247 * porting to cheyenne for ufs --- model/bin/cmplr.env | 10 ++++++++-- model/bin/w3_setup | 2 ++ model/esmf/Makefile | 2 +- model/ftn/wmesmfmd.ftn | 5 +---- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index ab30e9f12..bfe1d789e 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -109,7 +109,7 @@ fi if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$cmplr" == "intel_prof" ] || \ [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || [ "$cmplr" == "so_intel_prof" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || [ "$cmplr" == "datarmor_intel_prof" ] || \ - [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne" ] || \ [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] ; then @@ -125,6 +125,11 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c comp_mpi='ftn' fi + if [ ! -z "$(echo $cmplr | grep cheyenne)" ] ; then + comp_seq='ifort' + comp_mpi='mpif90' + fi + # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -151,7 +156,8 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi # omp options - if [ ! -z "$(echo $cmplr | grep datarmor)" ] || [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ]; then + if [ ! -z "$(echo $cmplr | grep datarmor)" ] || [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne" ]; then optomp="-qopenmp" else optomp="-openmp" diff --git a/model/bin/w3_setup b/model/bin/w3_setup index 9a36057b4..8afd8a705 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -415,6 +415,7 @@ then [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ + [ "$cmplr" == "cheyenne" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ @@ -440,6 +441,7 @@ then [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ + [ "$cmplr" == "cheyenne" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ diff --git a/model/esmf/Makefile b/model/esmf/Makefile index d86cfb22f..58ac92430 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -35,7 +35,7 @@ ifeq ($(WW3_COMP),Portland) else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","pgi" "datarmor_pgi" "datarmor_pgi_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -byteswapio # intel -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","Intel" "hera" "orion")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","Intel" "hera" "orion" "cheyenne")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_cray" "wcoss_dell_p3")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index 284559707..83c6f00fb 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -2302,7 +2302,7 @@ !/WRST wy0 = WYNwrst !/WRST if (ESMF_LogFoundError(rc, PASSTHRU)) return !/WRST enddo -!/WRST endif + endif !/WRST if ( ((twn(1)-tw0(1))*1000000+((twn(2)-tw0(2)))) .le. 0 ) then !/WRST !If the time of the field is still initial time, replace @@ -5621,9 +5621,6 @@ !/ST4 dlwmean ) endif !firstCall wrln(jsea) = charn(jsea)*ust(isea)**2/grav - else - !ice value - wrln(jsea) = 0.00001d0 endif enddo jsea_loop From aea3e57f7f2f3a38f03b6338c0c881eca99e4abb Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Sat, 26 Sep 2020 00:24:54 +0100 Subject: [PATCH 50/84] UKMO Staging [fb_rtd2, bf_coupling condition, bf_smc_omp] (#254) * Fb rtd2 (#7) FB_rtd2: Output boundary conditions to rotated grids * This feature allows the user to specify the pole of each nested grid output of boundary conditions (nest) file. - There is no effect unless the switch RTD is set for compilation. - The contents of b.c. output files nestI.ww3 are not affected. - A model compiled with combined switches SMC and RTD is not affected. * Updated manual Sec. "3.4.9 Rotated grids" * Added regtests for testing input/output BCs in rotated pole context. * Updated revision of ww3_bound.ftn to 7.11 * Added new ww3_tr1 regtest (rotated pole) to matrix.base. Also, split the SMC/RTD regtests into their own separate switches. Co-authored-by: ukmo-chris.bunney * Double allocation error of FIELD variable [w3wavemd] (#14) * Fixed allocation of FIELD variable. * Removed defunct OMPX switches and FLOMP variable * Change coupling condition so that it works with all compilers (#12) Co-authored-by: Carsten Hansen Co-authored-by: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> --- manual/num/rotagrid.tex | 45 +- model/ftn/w3iobcmd.ftn | 52 +- model/ftn/w3updtmd.ftn | 16 +- model/ftn/w3wavemd.ftn | 31 +- model/ftn/ww3_bound.ftn | 2 +- model/ftn/ww3_grid.ftn | 217 +++++-- model/ftn/ww3_ounf.ftn | 202 ++++--- model/ftn/ww3_shel.ftn | 2 +- model/inp/ww3_grid.inp | 47 +- model/nml/namelists.nml | 634 ++++++++++++++++----- regtests/bin/matrix.base | 31 +- regtests/bin/matrix.comp | 2 +- regtests/bin/matrix_datarmor | 3 +- regtests/bin/matrix_ncep | 3 +- regtests/bin/matrix_ukmo_cray | 7 +- regtests/bin/matrix_zeus_HLT | 3 +- regtests/ww3_tr1/info | 45 ++ regtests/ww3_tr1/input/switch | 1 + regtests/ww3_tr1/input/ww3_grid.inp | 58 ++ regtests/ww3_tr1/input/ww3_outp.inp | 10 + regtests/ww3_tr1/input/ww3_shel.inp | 34 ++ regtests/ww3_tr1/input_bndin/bnd1.spc | 101 ++++ regtests/ww3_tr1/input_bndin/bnd2.spc | 101 ++++ regtests/ww3_tr1/input_bndin/bnd3.spc | 101 ++++ regtests/ww3_tr1/input_bndin/switch | 1 + regtests/ww3_tr1/input_bndin/ww3_bound.inp | 12 + regtests/ww3_tr1/input_bndin/ww3_grid.inp | 39 ++ regtests/ww3_tr1/input_bndin/ww3_outp.inp | 10 + regtests/ww3_tr1/input_bndin/ww3_shel.inp | 31 + regtests/ww3_tr1/input_std/switch | 1 + regtests/ww3_tr1/input_std/ww3_grid.inp | 56 ++ regtests/ww3_tr1/input_std/ww3_outp.inp | 10 + regtests/ww3_tr1/input_std/ww3_shel.inp | 34 ++ 33 files changed, 1579 insertions(+), 363 deletions(-) create mode 100644 regtests/ww3_tr1/info create mode 100644 regtests/ww3_tr1/input/switch create mode 100644 regtests/ww3_tr1/input/ww3_grid.inp create mode 100644 regtests/ww3_tr1/input/ww3_outp.inp create mode 100644 regtests/ww3_tr1/input/ww3_shel.inp create mode 100644 regtests/ww3_tr1/input_bndin/bnd1.spc create mode 100644 regtests/ww3_tr1/input_bndin/bnd2.spc create mode 100644 regtests/ww3_tr1/input_bndin/bnd3.spc create mode 100644 regtests/ww3_tr1/input_bndin/switch create mode 100644 regtests/ww3_tr1/input_bndin/ww3_bound.inp create mode 100644 regtests/ww3_tr1/input_bndin/ww3_grid.inp create mode 100644 regtests/ww3_tr1/input_bndin/ww3_outp.inp create mode 100644 regtests/ww3_tr1/input_bndin/ww3_shel.inp create mode 100644 regtests/ww3_tr1/input_std/switch create mode 100644 regtests/ww3_tr1/input_std/ww3_grid.inp create mode 100644 regtests/ww3_tr1/input_std/ww3_outp.inp create mode 100644 regtests/ww3_tr1/input_std/ww3_shel.inp diff --git a/manual/num/rotagrid.tex b/manual/num/rotagrid.tex index c44c6f387..c0e5249da 100644 --- a/manual/num/rotagrid.tex +++ b/manual/num/rotagrid.tex @@ -4,8 +4,8 @@ \subsubsection{~Rotated grids} \label{sub:num_space_rotagrid} \noindent The rotated grid is a latitude-longitude (lat-lon) grid and is obtained by -rotating the North Pole to a new position at latitude $\phi_{p}$ and -longitude $\lambda_{p}$ in the standard latitude-longitude system. The new +rotating the North Pole along a longitude $\lambda_{p}$ to a new position at +latitude $\phi_{p}$ in the standard latitude-longitude system. The new pole position is chosen so that the model domain of interest may be placed around the rotated equatorial area for a evenly-spaced lat-lon mesh. For this reason the rotated grid is also known as \emph{Equatorial grid}. For instance, @@ -15,22 +15,41 @@ \subsubsection{~Rotated grids} \label{sub:num_space_rotagrid} grid allows a much more evenly spaced lat-lon mesh in the NAEW domain than the standard lat-lon grid in the same area. -In \ws\, the rotated grid is implemented with minimum changes to the original +In \ws, the rotated grid is implemented with minimum changes to the original lat-lon grid. In fact, the rotated grid is treated just like the standard lat-lon grid inside the model. To set up and run a rotated grid model configuration, users should choose the regular lat-lon grid along with the {\code RTD} switch. -The rotated pole position is set using the {\code PLAT} and {\code PLON} variables in the -{\bf ww3\_grid.inp} namelist {\code ROTD}. Model input files, like wind, current and ice files -should be mapped on to the rotated grid. For convenience of nesting in standard -lat-lon grid frameworks, boundary conditions provided to and output from the +The rotated pole position is set using the {\code PLAT} and {\code PLON} variables +under the namelist {\code ROTD} in the input file {\bf ww3\_grid.inp} +(see Sect.~\ref{sec:config011}). If the pole is set as {\code PLAT = 90.0}, +{\code PLON = -180.0}, the grid is treated as a standard lat-lon system. + +Model input files, like wind, current and ice files +should be mapped on to the rotated grid. For convenience of nesting in standard +lat-lon grid frameworks, boundary conditions data provided to and output from the rotated grid use spectra referenced to a standard grid north and standard lat-lon -grid points values, which are converted into rotated grid lat-lon inside \ws\. -The list of 2D spectral output locations in {\bf ww3\_shel.inp} are also specified in -standard lat-lon. +grid points values, which are converted into rotated grid lat-lon inside \ws. +The list of 2D spectral output locations in {\bf ww3\_shel.inp} or +{\bf ww3\_shel.nml} are also specified in standard lat-lon. + +When nesting from a standard grid to a rotated grid model, both the outer and inner +grids should be built with the {\code RTD} switch set when compiling executables for +the models. When nesting from a rotated grid to a standard grid model, the inner +(standard) grid model does not require to be built with {\code RTD}. + +Output of spectra at boundary points to one-way nested inner grids are transferred +as described in Appendix~\ref{app:nest}. Output b.c.\ are defined in the input +file (see {\bf ww3\_grid.inp}, Sect.~\ref{sec:config011}) as a sequence of straight +lines given in coordinates of the inner grid. If the inner grid is rotated, it's +pole position must be defined as the values of the array elements +{\code BPLAT(\sl{n})} and {\code BPLON(\sl{n})} under namelist {\code ROTB} +for the outer grid. The array index {\sl{n}} is the index ({\sl{1:9}}) of the boundary +conditions file {\file nest{\sl{n}}.ww3}. -Model directional and x-y vector outputs can be converted to a standard grid -north reference by setting the UNROT variable in the {\bf ww3\_grid.inp} namelist -ROTD to True. With this set, for point outputs lat-lon locations all directional +Model directional and x-y vector outputs from a rotated grid can be converted +to a standard grid north reference by setting the UNROT variable in the +{\bf ww3\_grid.inp} namelist ROTD to True. With this set, for point outputs +lat-lon locations all directional values such as wind direction, current direction and 2D spectra are converted into standard lat-lon orientation. Functions to de-rotate gridded fields are applied in {\bf ww3\_ounf}, {\bf ww3\_outf} and {\bf ww3\_grib}. diff --git a/model/ftn/w3iobcmd.ftn b/model/ftn/w3iobcmd.ftn index 9f6f9c94d..115642f77 100644 --- a/model/ftn/w3iobcmd.ftn +++ b/model/ftn/w3iobcmd.ftn @@ -103,6 +103,8 @@ !/ (T.J. Campbell, NRL) ( version 6.02 ) !/ 01-Mar-2018 : Rotate boundary points and directions !/ of input spectra for rotated grids ( version 6.02 ) +!/ 07-Oct-2019 : RTD option with standard lat-lon +!/ grid when nesting to rotated grid ( version 7.11 ) !/ ! 1. Purpose : ! @@ -230,8 +232,6 @@ !/RTD !! Declare rotation angle and rotated lat/lon variables for !/RTD !! boundary points. JGLi12Jun2012 !/RTD REAL, ALLOCATABLE :: Anglbdy(:), ELatbdy(:), ELonbdy(:) - REAL, ALLOCATABLE :: XBPO2(:), YBPO2(:) -!/RTD REAL, ALLOCATABLE :: ANG(:) !/RTD REAL :: Spectr(NK*NTH) !/RTD REAL :: XRLIM, YRLIM REAL, ALLOCATABLE :: TMPSPC(:,:) @@ -311,26 +311,12 @@ !/T WRITE (NDST,9002) IFILE, NDSL(IFILE), IDSTRBC, & !/T VERBPTBC, NBO(IFILE)-NBO(IFILE-1) ! -! - ! Temporary storage for boundary points: - ! The arrays are required to allow rotation of - ! x,y coordinate data under the /RTD option - ALLOCATE( XBPO2(NBO(IFILE)-NBO(IFILE-1)) ) - ALLOCATE( YBPO2(NBO(IFILE)-NBO(IFILE-1)) ) -!/RTD ALLOCATE( ANG(NBO(IFILE)-NBO(IFILE-1)) ) - XBPO2=XBPO(NBO(IFILE-1)+1:NBO(IFILE)) - YBPO2=YBPO(NBO(IFILE-1)+1:NBO(IFILE)) -! -!/RTD ! Convert rotated lat/lon back to standard pole grid. -!/RTD CALL W3EQTOLL ( YBPO(NBO(IFILE-1)+1:NBO(IFILE)), & -!/RTD XBPO(NBO(IFILE-1)+1:NBO(IFILE)), & -!/RTD YBPO2,XBPO2,ANG,POLAT,POLON, & -!/RTD NBO(IFILE)-NBO(IFILE-1) ) -!/RTD - ! Modified write below to write out XBPO2 and YBPO2, - ! instead of XBPO/YBPO +!/RTD ! By running the ww3_grid program the arrays XBPO, YBPO have been +!/RTD ! remapped to standard lat-lon and stored in mod_def.* +!/RTD ! WRITE (NDSL(IFILE)) & - XBPO2, YBPO2, & + (XBPO(I),I=NBO(IFILE-1)+1,NBO(IFILE)), & + (YBPO(I),I=NBO(IFILE-1)+1,NBO(IFILE)), & ((IPBPO(I,J),I=NBO(IFILE-1)+1,NBO(IFILE)),J=1,4),& ((RDBPO(I,J),I=NBO(IFILE-1)+1,NBO(IFILE)),J=1,4) ! @@ -340,10 +326,6 @@ !/T0 YBPO(I), (IPBPO(I,J),J=1,4), & !/T0 (RDBPO(I,J),J=1,4) !/T0 END DO -! - ! Deallocate temporary storage for boundary points - DEALLOCATE( XBPO2, YBPO2 ) -!/RTD DEALLOCATE( ANG ) ! END DO END IF @@ -404,6 +386,10 @@ ((IPBPI(I,J),I=1,NBI),J=1,4), & ((RDBPI(I,J),I=1,NBI),J=1,4) ! +!/RTD ! All boundary conditions position arrays XBPI, YBPI are defined +!/RTD ! in standard lat/lon coordinates. If Polat = 90. (and Polon = -180.), +!/RTD ! the b.c. positions don't need to be remapped +!/RTD IF ( Polat < 90. ) THEN !/RTD !! Convert standard into rotated lat/lon. JGLi12Jun2012 !/RTD ALLOCATE ( Anglbdy(NBI), ELatbdy(NBI), ELonbdy(NBI) ) !/RTD @@ -433,6 +419,8 @@ !/RTD ENDDO !/RTD !/RTD DEALLOCATE ( Anglbdy, ELatbdy, ELonbdy ) +!/RTD +!/RTD END IF ! ( Polat < 90. ) !/RTD FLOK = .TRUE. IF (GTYPE .EQ. UNGTYPE) THEN @@ -541,11 +529,15 @@ !/DIST CG(1+(IS-1)/NTH,ISEA) !/DIST END DO ! -!/RTD ! Added spectral turning for rotated grid -!/RTD ! (rotate back to standard pole) -!/RTD Spectr = ABPOS(:,ISOUT) -!/RTD CALL W3ACTURN( NTH, NK, -AnglD(ISEA), Spectr ) -!/RTD ABPOS(:,ISOUT) = Spectr +!/RTD ! Polat == 90. means the grid is standard lat-lon, and the spectra +!/RTD ! need not be rotated back +!/RTD IF ( Polat < 90. ) THEN +!/RTD ! Added spectral turning for rotated grid +!/RTD ! (rotate back to standard pole) +!/RTD Spectr = ABPOS(:,ISOUT) +!/RTD CALL W3ACTURN( NTH, NK, -AnglD(ISEA), Spectr ) +!/RTD ABPOS(:,ISOUT) = Spectr +!/RTD END IF ! WRITE (NDSL(IFILE)) (ABPOS(IS,ISOUT),IS=1,NSPEC) ! diff --git a/model/ftn/w3updtmd.ftn b/model/ftn/w3updtmd.ftn index c89cb43fc..5b5aebda8 100644 --- a/model/ftn/w3updtmd.ftn +++ b/model/ftn/w3updtmd.ftn @@ -54,6 +54,8 @@ !/ and add ICEH initialization in W3UICE. !/ 13-Jan-2016 : Changed initial value of ICEDMAX ( version 5.08 ) !/ 26-Mar-2018 : Sea-point only Wnd/Cur input. JGLi ( version 6.04 ) +!/ 07-Oct-2019 : RTD option with standard lat-lon +!/ grid when nesting to rotated grid ( version 7.11 ) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -903,6 +905,7 @@ !/ 12-Jun-2012 : Add /RTD option or rotated grid option. !/ (Jian-Guo Li) ( version 4.06 ) !/ 06-Jun-2018 : Add DEBUGIOBC/SETUP/DEBUGW3ULEV ( version 6.04 ) +!/ 13-Jun-2019 : Rotation only if POLAT<90 (C.Hansen)( version 7.11 ) !/ ! 1. Purpose : ! @@ -955,7 +958,7 @@ !/ ------------------------------------------------------------------- / USE W3GDATMD, ONLY: NSPEC, MAPWN, SIG2, DDEN !/RTD !! Use rotation angle and action conversion sub. JGLi12Jun2012 -!/RTD USE W3GDATMD, ONLY: NK, NTH, NSPEC, AnglD +!/RTD USE W3GDATMD, ONLY: NK, NTH, NSPEC, AnglD, PoLat !/RTD USE W3SERVMD, ONLY: W3ACTURN USE W3ADATMD, ONLY: CG USE W3ODATMD, ONLY: NBI, ABPI0, ABPIN, ISBPI, IPBPI, RDBPI, & @@ -1022,10 +1025,13 @@ END DO ! !/RTD !! Rotate the spectra if model is on rotated grid. JGLi12Jun2012 -!/RTD Spectr = BBPIN(:,IBI) -!/RTD AnglBP = AnglD(ISEA) -!/RTD CALL W3ACTURN( NTH, NK, AnglBP, Spectr ) -!/RTD BBPIN(:,IBI) = Spectr +!/RTD !! PoLat == 90. if the grid is standard lat/lon (C. Hansen 20190613) +!/RTD IF ( PoLat < 90. ) THEN +!/RTD Spectr = BBPIN(:,IBI) +!/RTD AnglBP = AnglD(ISEA) +!/RTD CALL W3ACTURN( NTH, NK, AnglBP, Spectr ) +!/RTD BBPIN(:,IBI) = Spectr +!/RTD END IF !/RTD ! END DO diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index fc9cfc242..3c573f800 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -80,6 +80,8 @@ !/ (M. Accensi & F. Ardhuin, IFREMER) !/ 27-Aug-2015 : Update for ICEH, ICEF ( version 5.08 ) !/ 14-Sep-2018 : Remove PALM implementation ( version 6.06 ) +!/ 15-Sep-2020 : Bugfix FIELD allocation. Remove ( version 7.11 ) +!/ defunct OMPX switches. !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -154,7 +156,6 @@ ! !/DIST Id. ! !/MPI Id. ! !/OMPG Id. -! !/OMPX Id. ! ! !/PR1 First order propagation schemes. ! !/PR2 ULTIMATE QUICKEST scheme. @@ -456,8 +457,7 @@ LOGICAL :: FLACT, FLZERO, FLFRST, FLMAP, TSTAMP,& SKIP_O, FLAG_O, FLDDIR, READBC, & FLAG0 = .FALSE., FLOUTG, FLPFLD, & - FLPART, LOCAL, FLOUTG2, & - FLOMP = .FALSE. + FLPART, LOCAL, FLOUTG2 ! !Li Logical variable to control regular gird lines in conflict with SMC option. !AR SMC option is in conflict with lofical variables for regular grid ... chicken ... egg ... stuff @@ -497,8 +497,6 @@ ! ! 0.a Set pointers to data structure ! -!/OMPX FLOMP = .TRUE. -! !/COU SCREEN = 333 ! !/DEBUGINIT WRITE(740+IAPROC,*) 'W3WAVE, step 1' @@ -576,8 +574,7 @@ FCUT = SIG(NK) * TPIINV END IF ! -!!Li ALLOCATE ( FIELD(1-NY:NY*(NX+2)) ) - IF( RGLGRD .AND. .NOT. FLOMP ) ALLOCATE ( FIELD(1-NY:NY*(NX+2)) ) + IF( RGLGRD ) ALLOCATE ( FIELD(1-NY:NY*(NX+2)) ) ! !/SMC !!Li Otherwise use sea point only field !/SMC ALLOCATE ( FIELD(NCel) ) @@ -1728,17 +1725,11 @@ !/MPI CALL MPI_STARTALL (NRQSG1, IRQSG1(1,2), IERR_MPI) !/MPI END IF ! -!!/OMPX/!$OMP PARALLEL PRIVATE (ISPEC,FIELD) -! !/DEBUGRUN WRITE(740+IAPROC,*) 'W3WAVE, step 6.14' !/DEBUGRUN FLUSH(740+IAPROC) - - IF ( FLOMP ) ALLOCATE ( FIELD(1-NY:NY*(NX+2)) ) ! ! Initialize FIELD variable FIELD = 0. -! -!!/OMPX/!$OMP DO SCHEDULE (DYNAMIC,1) ! DO ISPEC=1, NSPEC IF ( IAPPRO(ISPEC) .EQ. IAPROC ) THEN @@ -1785,14 +1776,7 @@ !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE TIME LOOP 17' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) - - -!!/OMPX/!$OMP END DO - - IF ( FLOMP ) DEALLOCATE ( FIELD ) - -!!/OMPX/!$OMP END PARALLEL - +! !Li Initialise IK IX IY in case ARC option is not used to avoid warnings. IK=1 IX=1 @@ -2400,7 +2384,7 @@ !/OASIS ! Send variables to atmospheric or ocean circulation or ice model !/OASIS ! !/OASIS IF (DTOUT(7).NE.0) THEN -!/OASIS IF ( (MOD(ID_OASIS_TIME/DTOUT(7),1.0) .LT. 1.E-7 ) .AND. & +!/OASIS IF ( (MOD(ID_OASIS_TIME,NINT(DTOUT(7))) .EQ. 0 ) .AND. & !/OASIS (DSEC21 (TIME00, TIME) .GT. 0.0) ) THEN !/OASACM CALL SND_FIELDS_TO_ATMOS() !/OASOCM CALL SND_FIELDS_TO_OCEAN() @@ -2609,8 +2593,7 @@ IF ( IAPROC .EQ. NAPLOG ) WRITE (NDSO,902) ! - IF ( .NOT. FLOMP ) DEALLOCATE ( FIELD ) -! + DEALLOCATE(FIELD) DEALLOCATE(TAUWX, TAUWY) ! !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE END W3WAVE' diff --git a/model/ftn/ww3_bound.ftn b/model/ftn/ww3_bound.ftn index 14cf3535d..665cc02d5 100644 --- a/model/ftn/ww3_bound.ftn +++ b/model/ftn/ww3_bound.ftn @@ -12,7 +12,7 @@ !/ 28-Aug-2012 : adaptation from SHOM/Ifremer code ( version 4.08 ) !/ 01-Nov-2012 : Bug correction for NKI != NK ( version 4.08 ) !/ 20-Oct-2016 : Error statement updates ( version 5.15 ) -!/ 21-Jul-2020 : Support rotated pole grid ( version 7.06 ) +!/ 21-Jul-2020 : Support rotated pole grid ( version 7.11 ) !/ Chris Bunney, UKMO. !/ !/ Copyright 2012-2012 National Weather Service (NWS), diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index ee1964b73..1335b96e0 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -107,6 +107,7 @@ !/ 20-Feb-2020 : Include Romero's dissipation in ST4 ( version 7.06 ) !/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) !/ 18-Jun-2020 : Adds 360-day calendar option ( version 7.08 ) +!/ 24-Jun-2020 : RTD output b. c. to rotated grid. ( version 7.11 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -480,7 +481,7 @@ ! correction for swell dispersion. ! !/PR3 Averaging ULTIMATE QUICKEST scheme. ! -! !/RTD Rotated regular lat-lon grid. +! !/RTD Rotated regular lat-lon grid. Special case is standard Polat=90. ! !/SMC UNO2 scheme on Spherical Multiple-Cell grid. ! !/ARC Append the Arctic part to the SMC grid. ! @@ -507,7 +508,7 @@ USE W3ODATMD, ONLY: W3NOUT, W3SETO, W3DMO5 USE W3IOGRMD, ONLY: W3IOGR USE W3SERVMD, ONLY: ITRACE, NEXTLN, EXTCDE -!/RTD USE W3SERVMD, ONLY: W3EQTOLL +!/RTD USE W3SERVMD, ONLY: W3EQTOLL, W3LLTOEQ !/ARC USE W3SERVMD, ONLY: W3LLTOEQ !/S USE W3SERVMD, ONLY: STRACE USE W3ARRYMD, ONLY: INA2R, INA2I @@ -630,6 +631,12 @@ !/ARC REAL, ALLOCATABLE :: XLONAC(:),YLATAC(:),ELONAC(:),ELATAC(:) ! !/RTD REAL, ALLOCATABLE :: AnglDin(:,:),StdLon(:,:),StdLat(:,:) +!/RTD ! 1-dim boundary sectors +!/RTD REAL, ALLOCATABLE :: BDYLON(:), BDYLAT(:), & +!/RTD ELatbdy(:), ELonbdy(:), Anglbdy(:) +!/RTD ! If the destination grid for an output b.c. is rotated, its pole is: +!/RTD REAL :: bPolat, bPolon +!/RTD! REAL, ALLOCATABLE :: XGRDIN(:,:), YGRDIN(:,:) REAL, ALLOCATABLE :: ZBIN(:,:), OBSX(:,:), OBSY(:,:) REAL, ALLOCATABLE :: REFD(:,:), REFD2(:,:), REFS(:,:) @@ -804,6 +811,8 @@ !/RTD REAL :: PLAT, PLON !/RTD LOGICAL :: UNROT +!/RTD ! Poles of the output nested grids. May be a mix of rotated and standard +!/RTD REAL, DIMENSION(9) :: BPLAT, BPLON ! !/FLD1 NAMELIST /FLD1/ TAILTYPE, TAILLEV, TAILT1, TAILT2 !/FLD2 NAMELIST /FLD2/ TAILTYPE, TAILLEV, TAILT1, TAILT2 @@ -916,6 +925,8 @@ !/REF1 REFFREQPOW, REFUNSTSOURCE !/ !/RTD NAMELIST /ROTD/ PLAT, PLON, UNROT +!/RTD! Poles of destination grids for boundary conditions output +!/RTD NAMELIST /ROTB/ BPLAT, BPLON !/ !/ ------------------------------------------------------------------- / !/ @@ -2183,11 +2194,33 @@ CTMAX = CFLTM ! !/RTD ! Set/ read in rotation values - these will be written out -!/RTD ! out later with the rest of the grid info -!/RTD PLAT = -999.9 -!/RTD PLON = -999.9 -!/RTD UNROT = .TRUE. +!/RTD ! later with the rest of the grid info +!/RTD ! Default is a non-rotated lat-lon grid +!/RTD PLAT = 90. +!/RTD PLON = -180. +!/RTD UNROT = .FALSE. !/RTD CALL READNL ( NDSS, 'ROTD', STATUS ) +!/RTD PLON = MOD( PLON + 180., 360. ) - 180. +!/RTD ! Ensure that a grid with pole at the geographic North is standard lat-lon +!/RTD IF ( PLAT == 90. .AND. ( PLON /= -180. .OR. UNROT ) ) THEN +!/RTD WRITE( NDSE, 1052 ) +!/RTD CALL EXTCDE ( 33 ) +!/RTD ENDIF +!/RTD ! Default poles of output b. c. are non-rotated: +!/RTD BPLAT = 90. +!/RTD BPLON = -180. +!/RTD CALL READNL ( NDSS, 'ROTB', STATUS ) +!/RTD ! A b. c. dest. grid with pole at the geographic North must be non-rotated +!/RTD DO I=1,9 +!/RTD IF ( BPLAT(I) == 90. ) THEN +!/RTD ! Require BPLON(I) == -180., but don't blaim the user if BPLON(I) == 180. +!/RTD IF ( BPLON(I) == 180. ) BPLON(I) = -180. +!/RTD IF ( BPLON(I) == -180. ) CYCLE +!/RTD END IF +!/RTD IF ( BPLAT(I) < 90. ) CYCLE +!/RTD WRITE( NDSE, 1053 ) +!/RTD CALL EXTCDE ( 34 ) +!/RTD END DO ! ! 6.n Set miscellaneous parameters (ice, seeding, numerics ... ) ! @@ -2783,6 +2816,8 @@ ! !/FLD1 WRITE(NDSO,2987) TAIL_ID, TAIL_LEV, TAIL_TRAN1, TAIL_TRAN2 !/FLD2 WRITE(NDSO,2987) TAIL_ID, TAIL_LEV, TAIL_TRAN1, TAIL_TRAN2 +!/RTD WRITE(NDSO,4991) PLAT, PLON, UNROT +!/RTD WRITE(NDSO,4992) BPLAT, BPLON ! WRITE (NDSO,918) END IF @@ -3469,24 +3504,26 @@ !Li ! !/RTD ! 7.h Calculate rotation angles for configs with rotated pole -!/RTD ! Check that pole lat/lon values have been read in -!/RTD ! and exit the program if they have not !/RTD PoLon = PLON !/RTD PoLat = PLAT !/RTD FLAGUNR = UNROT -!/RTD IF( PoLon .EQ. -999.9 .OR. PoLat .EQ. -999.9 ) THEN -!/RTD WRITE( NDSE, 1050 ) -!/RTD CALL EXTCDE ( 63 ) -!/RTD ENDIF +!/RTD ! Default values PLON=-180, PLAT=90, UNROT=.FALSE. for standard lat-lon !/RTD !/RTD ALLOCATE( AnglDin(NX,NY) ) -!/RTD ALLOCATE(StdLat(NX,NY), StdLon(NX,NY)) +!/RTD ! For standard lat-lon the rotation angles are zero +!/RTD IF ( PoLat == 90. ) THEN +!/RTD AnglDin = 0. +!/RTD ELSE +!/RTD ALLOCATE(StdLat(NX,NY), StdLon(NX,NY)) !/RTD -!/RTD ! Calculate rotation angles; (StdLon/Lat are returned, but not used) -!/RTD ! The regular grid X/YGRDIN are used as equatorial lon and lat -!/RTD CALL W3EQTOLL( YGRDIN, XGRDIN, StdLat, StdLon, AnglDin, & +!/RTD ! Calculate rotation angles; (StdLon/Lat are returned, but not used) +!/RTD ! The regular grid X/YGRDIN are used as equatorial lon and lat +!/RTD CALL W3EQTOLL( YGRDIN, XGRDIN, StdLat, StdLon, AnglDin, & !/RTD PoLat, PoLon, NX*NY ) !/RTD +!/RTD ! Clean up +!/RTD DEALLOCATE( StdLat, StdLon ) +!/RTD END IF !/RTD ! Write out rotation information !/RTD WRITE (NDSO,4203) PoLat, PoLon !/RTD WRITE (NDSO,4200) @@ -3496,8 +3533,6 @@ !/RTD IF ( FLAGUNR ) WRITE (NDSO,4204) !/RTD WRITE (NDSO,*) ' ' !/RTD -!/RTD ! Clean up -!/RTD DEALLOCATE( StdLat, StdLon ) ! !/SMC !! 7.i Read SMC grid cell and face integer arrays. !/SMC IF (FLGNML) THEN @@ -4992,9 +5027,19 @@ ! FIRST = .FALSE. ! +!/RTD IF ( NPO.NE.0 ) THEN +!/RTD ! Destination pole lat, lon from namelist +!/RTD bPolat = BPLAT(NFBPO+1) +!/RTD bPolon = BPLON(NFBPO+1) +!/RTD END IF +!/RTD ! IF ( NFBPO.GE.1 .AND. ILOOP.EQ.2 ) THEN WRITE (NDSO,991) NFBPO, NBO(NFBPO) - NBO(NFBPO-1), & NBO2(NFBPO) - NBO2(NFBPO-1) +!/RTD ! Print dest. Pole lat/lon if either the dest or present grid is rotated +!/RTD IF ( BPLAT(NFBPO) < 90. .OR. Polat < 90. ) & +!/RTD WRITE (NDSO,1991) BPLAT(NFBPO), BPLON(NFBPO) +!/RTD ! !/O1 IF ( NBO(NFBPO) - NBO(NFBPO-1) .EQ. 1 ) THEN !/O1 IF ( FLAGLL ) THEN !/O1 WRITE (NDSO,992) @@ -5057,13 +5102,73 @@ ! ! ... Loop over line segment - - - - - - - - - - - - - - - - - - - - - ! +!/RTD ! If either base or destination grid is rotated lat-lon +!/RTD IF ( allocated(BDYLON) .eqv. .TRUE. ) THEN +!/RTD deallocate( BDYLON, BDYLAT ) +!/RTD IF ( bPolat < 90. .OR. Polat < 90. ) & +!/RTD deallocate( ELatbdy, ELonbdy, Anglbdy ) +!/RTD END IF +!/RTD allocate( BDYLON(NPO), BDYLAT(NPO)) +!/RTD IF ( bPolat < 90. .OR. Polat < 90. ) & +!/RTD allocate( ELatbdy(NPO), ELonbdy(NPO), Anglbdy(NPO) ) +!/RTD ! !/T WRITE (NDST,9090) ! DO IP=1, NPO ! XO = XO0 + REAL(IP-1)*DXO YO = YO0 + REAL(IP-1)*DYO -! +!/RTD ! +!/RTD ! Boundary points are specified in coordinates of the destination grid +!/RTD ! +!/RTD ! Collect the line segment points into arrays +!/RTD BDYLON(IP) = XO +!/RTD BDYLAT(IP) = YO +!/RTD ! Close the loop before calculating rotated lat-lon coordinates. +!/RTD END DO +!/RTD +!/RTD ! Create one or two sets of the segment points: +!/RTD ! 1. (BDYLAT, BDYLON) in standard lat-lon coordinates, +!/RTD ! 2. Also (ELatbdy, ELonbdy) in case the base grid is rotated +!/RTD +!/RTD IF ( bPolat < 90. ) THEN +!/RTD ! The destination grid is rotated (std->rot or rot->rot) +!/RTD ! Change BDYLAT, BDYLON to their standard lat-lon positions +!/RTD ! Let ELatbdy,ELonbdy contain the rotated lat-lon coordinates +!/RTD ELatbdy(:) = BDYLAT(:) +!/RTD ELonbdy(:) = BDYLON(:) +!/RTD CALL W3EQTOLL ( ELatbdy, ELonbdy, BDYLAT, BDYLON, & +!/RTD & Anglbdy, bPolat, bPolon, NPO ) +!/RTD ! Let the standard longitudes BDYLON be within the range [-180.,180.[ +!/RTD ! or [0., 360.[ depending on the grid pole +!/RTD IF ( Polon < -90. .OR. Polon > 90. ) THEN +!/RTD BDYLON(:) = MOD( BDYLON(:) + 180., 360. ) - 180. +!/RTD ELSE +!/RTD BDYLON(:) = MOD( BDYLON(:) + 360., 360. ) +!/RTD END IF +!/RTD END IF ! bPolat < 90. +!/RTD ! From now, BDYLAT, BDYLON are defined in standard lat-lon coordinates +!/RTD ! +!/RTD IF ( Polat < 90. ) THEN +!/RTD ! The base grid is rotated (rot->std or rot->rot) +!/RTD ! Find lat-lon in coordinates of the rotated base grid +!/RTD CALL W3LLTOEQ ( BDYLAT, BDYLON, ELatbdy, ELonbdy, & +!/RTD & Anglbdy, Polat, Polon, NPO ) +!/RTD END IF +!/RTD ! +!/RTD ! Take up again the loop over the line segment points +!/RTD DO IP=1, NPO +!/RTD IF ( Polat < 90. ) THEN +!/RTD ! The base grid is rotated (rot->std, rot->rot) +!/RTD ! (The std. lat-lon values BDYLAT, BDYLON go to YBPO, XBPO) +!/RTD XO = ELonbdy(IP) +!/RTD YO = ELatbdy(IP) +!/RTD ELSE +!/RTD ! The base grid is standard geographic (std->rot or std->std) +!/RTD XO = BDYLON(IP) +!/RTD YO = BDYLAT(IP) +!/RTD END IF +! ! ... Compute bilinear remapping weights ! INGRID = W3GRMP( GSU, XO, YO, IXR, IYR, RD ) @@ -5082,22 +5187,28 @@ ! ! ... Check if point not on land ! - IF ( ( MAPSTA(IYR(1),IXR(1)).GT.0 .AND. & - RD(1).GT.0.05 ) .OR. & - ( MAPSTA(IYR(2),IXR(2)).GT.0 .AND. & - RD(2).GT.0.05 ) .OR. & - ( MAPSTA(IYR(3),IXR(3)).GT.0 .AND. & - RD(3).GT.0.05 ) .OR. & - ( MAPSTA(IYR(4),IXR(4)).GT.0 .AND. & - RD(4).GT.0.05 ) ) THEN + IF ( ( MAPSTA(IYR(1),IXR(1)).GT.0 .AND. & + RD(1).GT.0.05 ) .OR. & + ( MAPSTA(IYR(2),IXR(2)).GT.0 .AND. & + RD(2).GT.0.05 ) .OR. & + ( MAPSTA(IYR(3),IXR(3)).GT.0 .AND. & + RD(3).GT.0.05 ) .OR. & + ( MAPSTA(IYR(4),IXR(4)).GT.0 .AND. & + RD(4).GT.0.05 ) ) THEN ! ! ... Check storage and store coordinates ! - NBOTOT = NBOTOT + 1 - IF ( ILOOP .EQ. 1 ) CYCLE + NBOTOT = NBOTOT + 1 + IF ( ILOOP .EQ. 1 ) CYCLE ! - XBPO(NBOTOT) = XO - YBPO(NBOTOT) = YO +!/RTD ! BDYLAT, BDYLON contain Y0, X0, which are remapped to standard lat/lon. +!/RTD ! BDYLAT, BDYLON are stored in the mod_def file. +!/RTD IF ( Polat < 90. ) THEN +!/RTD XO = BDYLON(IP) +!/RTD YO = BDYLAT(IP) +!/RTD END IF + XBPO(NBOTOT) = XO + YBPO(NBOTOT) = YO ! ! ... Interpolation factors ! @@ -5112,9 +5223,9 @@ RDTOT = RDTOT + RDBPO(NBOTOT,J) END DO ! - DO J=1, 4 - RDBPO(NBOTOT,J) = RDBPO(NBOTOT,J) / RDTOT - END DO + DO J=1, 4 + RDBPO(NBOTOT,J) = RDBPO(NBOTOT,J) / RDTOT + END DO ! !/T WRITE (NDST,9092) RDTOT, (RDBPO(NBOTOT,J),J=1,4) ! @@ -5147,11 +5258,19 @@ ! ! ... Error output ! + ELSE + IF ( FLAGLL ) THEN + WRITE (NDSE,2995) FACTOR*XO, FACTOR*YO + ELSE + WRITE (NDSE,995) FACTOR*XO, FACTOR*YO + END IF + END IF + ELSE + IF ( FLAGLL ) THEN + WRITE (NDSE,2994) FACTOR*XO, FACTOR*YO ELSE - WRITE (NDSE,995) FACTOR*XO, FACTOR*YO + WRITE (NDSE,994) FACTOR*XO, FACTOR*YO END IF - ELSE - WRITE (NDSE,994) FACTOR*XO, FACTOR*YO END IF ! END DO @@ -5822,7 +5941,11 @@ ! 2987 FORMAT ( ' &FLD TAIL_ID =',I1,' TAIL_LEV =',F5.4,' TAILT1 =',F5.3,& ' TAILT2 =',F5.3,' /') - +!/RTD +!/RTD 4991 FORMAT ( ' &ROTD PLAT =', F6.2,', PLON =', F7.2,', UNROT =',L3,' /') +!/RTD 4992 FORMAT ( ' &ROTB BPLAT =',9(F6.1,",")/ & +!/RTD ' BPLON =',9(F6.1,","),' /') + 3000 FORMAT (/' The spatial grid: '/ & ' --------------------------------------------------'/ & /' Grid type : ',A) @@ -5945,6 +6068,7 @@ ' --------------------------------------------------') 991 FORMAT ( ' File nest',I1,'.ww3 Number of points :',I6/ & ' Number of spectra :',I6) + 1991 FORMAT ( ' Dest. grid Polat:',F6.2,', Polon:',F8.2) 992 FORMAT (/' Nr.| Long. | Lat. '/ & ' -----|---------|---------') 1992 FORMAT (/' Nr.| Long. | Lat. ', & @@ -5954,8 +6078,8 @@ 993 FORMAT ( ' ',I4,2(' |',F8.2)) 1993 FORMAT ( ' ',I4,2(' |',F8.2), & ' ',I4,2(' |',F8.2)) - 994 FORMAT ( ' *** POINT OUTSIDE GRID (SKIPPED) : X,Y =',2F7.2) - 995 FORMAT ( ' *** POINT ON LAND (SKIPPED) : X,Y =',2F7.2) + 994 FORMAT ( ' *** POINT OUTSIDE GRID (SKIPPED) : X,Y =',2F10.5) + 995 FORMAT ( ' *** POINT ON LAND (SKIPPED) : X,Y =',2F10.5) 2992 FORMAT (/' Nr.| X | Y '/ & ' -----|-----------|-----------') 3992 FORMAT (/' Nr.| X | Y ', & @@ -6074,9 +6198,12 @@ ' ONLY FIRST PROPAGATION SCHEME WILL BE USED: ') 1036 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & ' ILLEGAL NUMBER OF !/ISn SWITCHES :',I3) -!/RTD 1050 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & -!/RTD ' ROTATED POLE SWITCH IS SET (RTD), BUT'/ & -!/RTD ' PLAT/PLON NAMELIST VALUES NOT SET IN ROTD' ) +!/RTD 1052 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & +!/RTD ' WITH NAMELIST VALUE PLAT == 90, PLON MUST BE -180'/ & +!/RTD ' AND UNROT MUST BE .FALSE.' ) +! +!/RTD 1053 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & +!/RTD ' WITH NAMELIST VALUE BPLAT == 90, BPLON MUST BE -180') ! 1040 FORMAT ( ' Space-time extremes DX :',F10.2) 1041 FORMAT ( ' Space-time extremes DX :',F10.2) @@ -6292,7 +6419,9 @@ !/PR3 READ (NDS,NML=PRO3,END=801,ERR=802,IOSTAT=J) !/RTD CASE('ROTD') !/RTD READ (NDS,NML=ROTD,END=801,ERR=802,IOSTAT=J) -!/REF1 CASE('REF1') +!/RTD CASE('ROTB') +!/RTD READ (NDS,NML=ROTB,END=801,ERR=802,IOSTAT=J) +!/REF1 CASE('REF1') !/REF1 READ (NDS,NML=REF1,END=801,ERR=802,IOSTAT=J) !/IG1 CASE('SIG1') !/IG1 READ (NDS,NML=SIG1,END=801,ERR=802,IOSTAT=J) diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 66dd41d97..e2ba66682 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -7,7 +7,7 @@ !/ | F. Ardhuin | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 28-Mar-2019 | +!/ | Last update : 07-Oct-2019 | !/ +-----------------------------------+ !/ !/ 17-Mar-2010 : Creation ( version 3.14_SHOM ) @@ -33,6 +33,8 @@ !/ 25-Sep-2018 : Add WBT parameter ( version 6.06 ) !/ 28-Mar-2019 : Bugfix to NBIPART check. ( version 6.07 ) !/ 18-Jun-2020 : Support for 360-day calendar. ( version 7.08 ) +!/ 07-Oct-2019 : RTD option with standard lat-lon +!/ grid when nesting to rotated grid ( version 7.11 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -744,6 +746,10 @@ !/RTD USE W3SERVMD, ONLY : W3THRTN, W3XYRTN, W3EQTOLL USE W3ARRYMD, ONLY : OUTA2I, PRTBLK USE W3GDATMD, ONLY : SIG, GTYPE, FLAGLL, MAPSTA, MAPST2 + USE W3GDATMD, ONLY : NK, UNGTYPE, MAPSF, NTRI, CLGTYPE, RLGTYPE, & + XGRD, YGRD, SX, SY, X0, Y0, XYB, TRIGP, USSP_WN +!/RTD ! Rotated pole data from the mod_def file +!/RTD USE W3GDATMD, ONLY : POLAT, POLON, FLAGUNR, AnglD !/T USE W3ODATMD, ONLY : NDST USE NETCDF IMPLICIT NONE @@ -812,13 +818,18 @@ LOGICAL :: FLFRQ, FLDIR, FEXIST, FREMOVE LOGICAL :: CUSTOMFRQ=.FALSE. !/T LOGICAL :: LTEMP(NGRPP) - +!/RTD ! RTDL == False for a standard lat-lon grid. Will be set to True if the +!/RTD ! grid is rotated +!/RTD LOGICAL :: RTDL = .FALSE. !/ !/ ------------------------------------------------------------------- / !/ ! !/S CALL STRACE (IENT, 'W3EXNC') ! +!/RTD ! Is the grid really rotated +!/RTD IF ( Polat < 90. ) RTDL = .True. +!/RTD ! !/T DO IFI=1, NOGRP !/T LTEMP = FLG2D(IFI,:) !/T WRITE (NDST,9000) IFI, LTEMP @@ -1043,7 +1054,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -1101,7 +1112,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -1388,7 +1399,7 @@ !/RTD ! Override standard direction comment !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD END IF VMIN = 0 @@ -1441,7 +1452,7 @@ !/RTD ! Override standard direction comment !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD END IF VMIN = 0 @@ -1649,7 +1660,7 @@ !/RTD ! Override standard direction comment !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD END IF UNITS = 'degree' @@ -1709,7 +1720,7 @@ !/RTD ! Override standard direction comment !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD END IF UNITS = 'degree' @@ -1870,7 +1881,7 @@ !/RTD ! Override standard direction comment !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD END IF VMIN = 0 @@ -1947,7 +1958,7 @@ !/RTD ! Override standard direction comment !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD END IF VMIN = 0 @@ -2222,7 +2233,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -2335,7 +2346,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -2374,7 +2385,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -2520,9 +2531,11 @@ VARND(2)='' VARND(3)='' !/RTD ! Override standard direction comment +!/RTD IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD VARND(3) = 'Rotated Pole Grid North' +!/RTD END IF VMIN = -3000 VMAX = 3000 ! @@ -2558,7 +2571,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -2624,23 +2637,27 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TUSY(1:NSEA) & , MAPSF, XY ) ENDIF ! SMCGRD - DO ISEA=1, NSEA - CABS = SQRT(TUSX(ISEA)**2+TUSY(ISEA)**2) - IF ( CABS .NE. UNDEF ) THEN - TUSY(ISEA) = MOD ( 630. - & - RADE*ATAN2(TUSY(ISEA),TUSX(ISEA)) , 360. ) - ELSE - TUSY(ISEA) = UNDEF - END IF - TUSX(ISEA) = CABS - END DO - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( TUSX(:), X1 ) -!/SMC CALL W3S2XY_SMC( TUSY(:), X2 ) ! TODO: CHRISB: TUSY is in degrees....W3S2XY_SMC expects radians... - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY,TUSX,MAPSF, X1 ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY,TUSY,MAPSF, X2 ) - ENDIF ! SMCGRD +! X1, X2 will not be output when NFIELD == 2 +! ( Like for .cur, .wnd, .ust, .taw, and .uss ) (CHA at FCOO 2019-06-13): + !! Commented out unnecessary statements below for time being + !! (...) X1,X2 are not actually written out below + !DO ISEA=1, NSEA + ! CABS = SQRT(TUSX(ISEA)**2+TUSY(ISEA)**2) + ! IF ( CABS .NE. UNDEF ) THEN + ! TUSY(ISEA) = MOD ( 630. - & + ! RADE*ATAN2(TUSY(ISEA),TUSX(ISEA)) , 360. ) + ! ELSE + ! TUSY(ISEA) = UNDEF + ! END IF + ! TUSX(ISEA) = CABS + ! END DO + !IF( SMCGRD ) THEN +!/SMC !CALL W3S2XY_SMC( TUSX(:), X1 ) +!/SMC !CALL W3S2XY_SMC( TUSY(:), X2 ) ! TODO: CHRISB: TUSY is in degrees....W3S2XY_SMC expects radians... + !ELSE + ! CALL W3S2XY ( NSEA, NSEA, NX+1, NY,TUSX,MAPSF, X1 ) + ! CALL W3S2XY ( NSEA, NSEA, NX+1, NY,TUSY,MAPSF, X2 ) + !ENDIF ! SMCGRD NFIELD=2 VARNM(1)='utus' VARNM(2)='vtus' @@ -2658,7 +2675,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -2715,7 +2732,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -2772,7 +2789,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -2863,7 +2880,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -2917,7 +2934,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -2973,7 +2990,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -3008,7 +3025,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -3051,7 +3068,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(2) = 'True North' !/RTD VARND(3) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD VARND(3) = 'Rotated Pole Grid North' !/RTD END IF @@ -3102,7 +3119,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -3134,7 +3151,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -3166,7 +3183,7 @@ !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' !/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD VARND(2) = 'Rotated Pole Grid North' !/RTD END IF @@ -3195,7 +3212,7 @@ !/RTD ! Override standard direction comment !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD END IF VMIN = 0 @@ -3223,7 +3240,7 @@ !/RTD ! Override standard direction comment !/RTD IF ( FLAGUNR ) THEN !/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD ELSE IF ( RTDL ) THEN !/RTD VARND(1) = 'Rotated Pole Grid North' !/RTD END IF VMIN = 0 @@ -3571,13 +3588,15 @@ ! instanciates lon with x/lon for regular grid or nodes for unstructured mesh IF (.NOT.ALLOCATED(LON)) ALLOCATE(LON(NX)) !/RTD ! 2d longitude array for standard grid coordinates -!/RTD IF (.NOT.ALLOCATED(LON2D)) ALLOCATE(LON2D(NX,NY),LON2DEQ(NX,NY),ANGLD2D(NX,NY)) +!/RTD IF ( RTDL .AND. .NOT.ALLOCATED(LON2D)) & +!/RTD ALLOCATE(LON2D(NX,NY),LON2DEQ(NX,NY),ANGLD2D(NX,NY)) IF (.NOT.ALLOCATED(LAT)) THEN ! If regular grid, instanciates lat with y/lat IF (GTYPE.EQ.RLGTYPE) THEN ALLOCATE(LAT(NY)) !/RTD ! 2d latitude array for standard grid coordinates -!/RTD IF (.NOT.ALLOCATED(LAT2D)) ALLOCATE(LAT2D(NX,NY),LAT2DEQ(NX,NY)) +!/RTD IF ( RTDL .AND. .NOT.ALLOCATED(LAT2D)) & +!/RTD ALLOCATE(LAT2D(NX,NY),LAT2DEQ(NX,NY)) ! If unstructured mesh, instanciates lat with nodes ELSE ALLOCATE(LAT(NX)) @@ -3640,23 +3659,27 @@ !/RTD ANGLD2D, POLAT, POLON, RTDNY*RTDNX) !/SMC ENDIF ! SMCTYPE ELSE ! SMCGRD - SXD=DBLE(0.000001d0*DNINT(1d6*(DBLE(SX)) )) - SYD=DBLE(0.000001d0*DNINT(1d6*(DBLE(SY)) )) - X0D=DBLE(0.000001d0*DNINT(1d6*(DBLE(X0)) )) - Y0D=DBLE(0.000001d0*DNINT(1d6*(DBLE(Y0)) )) - DO I=1,NX - LON(I)=REAL(X0D+SXD*DBLE(I-1)) -!/RTD LON2DEQ(I,1:NY)=LON(I) - END DO - DO I=1,NY - LAT(I)=REAL(Y0D+SYD*DBLE(I-1)) -!/RTD LAT2DEQ(1:NX,I)=LAT(I) - END DO -!/RTD ! Calculate the standard grid coordinates -!/RTD DO I=1,NX -!/RTD CALL W3EQTOLL(LAT2DEQ(I,1:NY), LON2DEQ(I,1:NY), LAT2D(I,1:NY), & -!/RTD LON2D(I,1:NY), ANGLD2D(I,1:NY), POLAT, POLON, NY) -!/RTD END DO + SXD=DBLE(0.000001d0*DNINT(1d6*(DBLE(SX)) )) + SYD=DBLE(0.000001d0*DNINT(1d6*(DBLE(SY)) )) + X0D=DBLE(0.000001d0*DNINT(1d6*(DBLE(X0)) )) + Y0D=DBLE(0.000001d0*DNINT(1d6*(DBLE(Y0)) )) + DO I=1,NX + LON(I)=REAL(X0D+SXD*DBLE(I-1)) + END DO + DO I=1,NY + LAT(I)=REAL(Y0D+SYD*DBLE(I-1)) + END DO +!/RTD IF ( RTDL ) THEN +!/RTD ! Calculate the standard grid coordinates +!/RTD DO I=1,NX +!/RTD LON2DEQ(I,:)=LON(I) +!/RTD END DO +!/RTD DO I=1,NY +!/RTD LAT2DEQ(:,I)=LAT(I) +!/RTD END DO +!/RTD CALL W3EQTOLL(LAT2DEQ, LON2DEQ, LAT2D, LON2D, & +!/RTD ANGLD2D, POLAT, POLON, NY*NX) +!/RTD END IF ! RTDL WRITE(STR2,'(F12.0)') SY STR2=ADJUSTL(STR2) IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & @@ -3737,11 +3760,13 @@ 'altitude_resolution','n/a') CALL CHECK_ERR(IRET) +!/RTD IF ( RTDL ) THEN !/RTD IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & !/RTD 'grid_north_pole_latitude',POLAT) !/RTD IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & !/RTD 'grid_north_pole_longitude',POLON) - +!/RTD END IF + CALL T2D(TIME,STARTDATE,IERR) WRITE(STRSTARTDATE,'(I4.4,A,4(I2.2,A),I2.2)') STARTDATE(1),'-',STARTDATE(2),'-', & STARTDATE(3),' ',STARTDATE(5),':',STARTDATE(6),':',STARTDATE(7) @@ -3772,13 +3797,15 @@ IRET=NF90_PUT_VAR(NCID,VARID(2),LAT(IY1:IYN)) CALL CHECK_ERR(IRET) ENDIF ! SMCGRD -!/RTD IRET=NF90_PUT_VAR(NCID,VARID(291),LON2D(IX1:IXN,IY1:IYN)) -!/RTD CALL CHECK_ERR(IRET) -!/RTD IRET=NF90_PUT_VAR(NCID,VARID(292),LAT2D(IX1:IXN,IY1:IYN)) -!/RTD CALL CHECK_ERR(IRET) +!/RTD IF ( RTDL ) THEN +!/RTD IRET=NF90_PUT_VAR(NCID,VARID(291),LON2D(IX1:IXN,IY1:IYN)) +!/RTD CALL CHECK_ERR(IRET) +!/RTD IRET=NF90_PUT_VAR(NCID,VARID(292),LAT2D(IX1:IXN,IY1:IYN)) +!/RTD CALL CHECK_ERR(IRET) +!/RTD END IF END IF - ! If spherical grid + ! If curvilinear grid IF (GTYPE.EQ.CLGTYPE) THEN IRET=NF90_PUT_VAR(NCID,VARID(1),LON2D(IX1:IXN,IY1:IYN)) CALL CHECK_ERR(IRET) @@ -3922,10 +3949,12 @@ CALL CHECK_ERR(IRET) END IF !/RTD +!/RTD IF ( RTDL ) THEN !/RTD ! Add grid mapping attribute for rotated pole grids: !/RTD IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'grid_mapping', & !/RTD 'rotated_pole') !/RTD CALL CHECK_ERR(IRET) +!/RTD END IF !/RTD END DO ! @@ -4082,10 +4111,12 @@ CALL CHECK_ERR(IRET) END IF !/RTD -!/RTD ! Add grid mapping attribute for rotated pole grids: -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'grid_mapping', & -!/RTD 'rotated_pole') -!/RTD CALL CHECK_ERR(IRET) +!/RTD IF ( RTDL ) THEN +!/RTD ! Add grid mapping attribute for rotated pole grids: +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'grid_mapping', & +!/RTD 'rotated_pole') +!/RTD CALL CHECK_ERR(IRET) +!/RTD END IF !/RTD END DO IRET = NF90_ENDDEF(NCID) @@ -4715,7 +4746,10 @@ !-------------------------------------------------------------------------- SUBROUTINE W3CRNC (NCFILE, NCID, DIMID, DIMLN, VARID, & EXTRADIM, NCTYPE, MAPSTAOUT ) - USE W3GDATMD +! + USE W3GDATMD, ONLY : GTYPE, FLAGLL, UNGTYPE, CLGTYPE, RLGTYPE +!/RTD ! Rotated pole parameters from the mod_def file +!/RTD USE W3GDATMD, ONLY : POLAT, POLON USE NETCDF USE W3TIMEMD @@ -4741,7 +4775,12 @@ ! CHARACTER :: ATTNAME*120,ATTVAL*120 +!/RTD ! RTDL == False for a standard lat-lon grid. Will be set to True if the +!/RTD ! grid is rotated +!/RTD LOGICAL :: RTDL = .FALSE. +!/RTD ! Is the grid really rotated +!/RTD IF ( Polat < 90. ) RTDL = .True. ! ! Creation in netCDF3 or netCDF4 ! @@ -4851,20 +4890,27 @@ IRET = NF90_DEF_VAR(NCID, 'latitude', NF90_FLOAT, DIMID(2), VARID(2)) END IF IRET=NF90_PUT_ATT(NCID,VARID(1),'units','degree_east') +!/RTD ! Is the grid really rotated +!/RTD IF ( .NOT. RTDL ) THEN IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','longitude') IRET=NF90_PUT_ATT(NCID,VARID(1),'standard_name','longitude') +!/RTD ELSE !/RTD ! Override the above for RTD pole: -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','longitude in rotated pole grid') -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(1),'standard_name','grid_longitude') +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','longitude in rotated pole grid') +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(1),'standard_name','grid_longitude') +!/RTD END IF IRET=NF90_PUT_ATT(NCID,VARID(1),'valid_min',-180.0) IRET=NF90_PUT_ATT(NCID,VARID(1),'valid_max',360.) ! IRET=NF90_PUT_ATT(NCID,VARID(2),'units','degree_north') +!/RTD IF ( .NOT. RTDL ) THEN IRET=NF90_PUT_ATT(NCID,VARID(2),'long_name','latitude') IRET=NF90_PUT_ATT(NCID,VARID(2),'standard_name','latitude') +!/RTD ELSE !/RTD ! Override the above for RTD pole: !/RTD IRET=NF90_PUT_ATT(NCID,VARID(2),'long_name','latitude in rotated pole grid') !/RTD IRET=NF90_PUT_ATT(NCID,VARID(2),'standard_name','grid_latitude') +!/RTD END IF IRET=NF90_PUT_ATT(NCID,VARID(2),'valid_min',-90.0) IRET=NF90_PUT_ATT(NCID,VARID(2),'valid_max',180.) ! @@ -4888,6 +4934,7 @@ !/RTD call CHECK_ERR(IRET) !/SMC ENDIF ELSE +!/RTD IF ( RTDL ) THEN !/RTD !Add secondary coordinate system linking rotated grid back to standard lat-lon !/RTD IRET = NF90_DEF_VAR(NCID, 'standard_longitude', NF90_FLOAT, (/ DIMID(2), DIMID(3)/), & !/RTD VARID(291)) @@ -4896,8 +4943,10 @@ !/RTD IRET = NF90_DEF_VAR(NCID, 'standard_latitude', NF90_FLOAT, (/ DIMID(2), DIMID(3)/), & !/RTD VARID(292)) !/RTD call CHECK_ERR(IRET) +!/RTD END IF ENDIF ! SMCGRD !/RTD +!/RTD IF ( RTDL ) THEN !/RTD ! Attributes for standard_longitude: !/RTD IRET=NF90_PUT_ATT(NCID,VARID(291),'units','degree_east') !/RTD IRET=NF90_PUT_ATT(NCID,VARID(291),'long_name','longitude') @@ -4919,6 +4968,7 @@ !/RTD IRET=NF90_PUT_ATT(NCID, VARID(293), 'grid_north_pole_longitude',POLON) !/RTD IRET=NF90_PUT_ATT(NCID, VARID(293), 'grid_mapping_name', & !/RTD 'rotated_latitude_longitude') +!/RTD END IF ! ELSE IF (GTYPE.EQ.RLGTYPE) THEN diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 9d65a0e4a..2ea322a40 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -1912,7 +1912,7 @@ !/OASIS ELSE !/OASIS ID_OASIS_TIME = DSEC21 ( TIME00 , TIME ) !/OASIS IF ( (DTOUT(7).NE.0) .AND. & -!/OASIS (MOD(ID_OASIS_TIME/DTOUT(7),1.0) .LT. 1.E-7 ) .AND. & +!/OASIS (MOD(ID_OASIS_TIME, NINT(DTOUT(7))) .EQ. 0 ) .AND. & !/OASIS (DSEC21 (TIME, TIMEEND) .GT. 0.0)) DTTST=0. END IF ! diff --git a/model/inp/ww3_grid.inp b/model/inp/ww3_grid.inp index 5074281b0..95c827459 100644 --- a/model/inp/ww3_grid.inp +++ b/model/inp/ww3_grid.inp @@ -345,20 +345,45 @@ $ SEAWND : Use sea-point only wind input. .FALSE. $ &PSMC DTIME = 39600.0, LATMIN=85.0, RFMAXD = 36.0, LvSMC=3, JEQT=1344 / $ $ Rotated pole ------------------------------------------------------ $ -$ Pole parameters : Namelist ROTD -$ PLAT : Rotated pole latitude -$ PLON : Rotated pole longitude -$ UNROT : Logical, un-rotate directions to true north -$ -$ These will be used to derive rotation angle corrections in the -$ model. The corrections are used for rotation of boundary spectra -$ and for restoring conventional lat/lon orientation of the -$ output spectra, mean direction or any related variables. -$ The PLAT/LON example below is a standard setting for Met -$ Office UK regional models. +$ Pole parameters : Namelist ROTD +$ PLAT : Rotated pole latitude +$ PLON : Rotated pole longitude +$ UNROT : Logical, un-rotate directions to +$ true north +$ +$ Compile switch /RTD required. +$ +$ These will be used to derive rotation angle corrections in the +$ model. The corrections are used for rotation of boundary spectra +$ and for restoring conventional lat/lon orientation of the +$ output spectra, mean direction or any related variables. +$ The PLAT/LON example below is a standard setting for Met +$ Office UK regional models. $ $ &ROTD PLAT = 37.5, PLON = 177.5, UNROT = .TRUE. / $ +$ The default values for ROTD represent a non-rotated lat/lon grid: +$ +$ &ROTD PLAT = 90.0, PLON = -180.0, UNROT = .FALSE. / +$ +$ Output boundary conditions to rotated pole grids ------------------ $ +$ +$ Pole parameters : Namelist ROTB +$ BPLAT(1:9) : Pole latitude of each destination grid +$ BPLON(1:9) : Pole longitude of each destination grid +$ +$ Compile switch /RTD required. +$ +$ In the section 'Output boundary points' later in this file, the points must +$ be given as straight lines in the reference system of each destination grid. +$ The index J of BPLAT(J),BPLON(J) is incremented by one where a new output +$ file is started by specifying a negative value for the number of points. +$ +$ Each destination may be either a rotated grid or a standard (non-rotated) +$ lat/lon grid. The default values for ROTB represent standard lat/lon grids: +$ +$ &ROTB BPLAT(1)=90., BPLON(1)=-180., BPLAT(2)=90. / $ (etc.) +$ $ Output of 3D arrays------------------------------------------------- $ $ In order to limit the use of memory, arrays for 3D output fiels (i.e. $ variables that are a function of both space and frequency, are not diff --git a/model/nml/namelists.nml b/model/nml/namelists.nml index 4d79c30a3..8ce245d25 100644 --- a/model/nml/namelists.nml +++ b/model/nml/namelists.nml @@ -1,147 +1,489 @@ -! Switch FLD1 -!&FLD1 TAILTYPE = 0, TAILLEV = 0.006, TAILT1 = 1.25, TAILT2 = 3.00 / -! Switch FLD2 -!&FLD2 TAILTYPE = 0, TAILLEV = 0.006, TAILT1 = 1.25, TAILT2 = 3.00 / -! Switch FLX3 -!&FLX3 CDMAX = 2.5E-3, CTYPE = 0 / -! Switch FLX4 -!&FLX4 CDFAC = 1.0 / -! Switch IC2 -!&SIC2 IC2DISPER = .FALSE., IC2TURB = 1., IC2TURBS = 0., IC2ROUGH = 0.01, -!IC2REYNOLDS = 1.5E5, IC2SMOOTH = 2E5, IC2VISC = 1., IC2DMAX = 0. / -! Switch IC3 -!&SIC3 IC3MAXTHK = 100.0, IC3MAXCNC = 100.0, IC2TURB = 2.0, IC2TURBS = 0., -!IC2ROUGH = 0.02, IC2REYNOLDS = 1.5E5, IC2SMOOTH = 7.0E4, IC2VISC = 2.0, -!IC3CHENG = .TRUE., USECGICE = .FALSE., IC3HILIM = 100.0, IC3KILIM = 100.0, -!IC3HICE = -1.0, IC3VISC = -2.0, IC3DENS = -3.0, IC3ELAS = -4.0 / -! Switch IC4 -!&SIC4 IC4METHOD = 1, IC4KI = 0.0, IC4FC = 0.0 / -! Switch IC5 -!&SIC5 IC5MINIG = 1., IC5MINWT = 0., IC5MAXKRATIO = 1E9, IC5MAXKI = 100., -!IC5MINHW = 300., IC5MAXITER = 100., IC5RKICK = 0., IC5KFILTER = 0.0025 / -! Switch IG1 -!&SIG1 IGMETHOD = 2, IGADDOUTP = 0, IGSOURCE = 2, IGSTERMS = 0, -!IGMAXFREQ = 0.03, IGSOURCEATBP = 0, IGBCOVERWRITE = .TRUE., -!IGSWELLMAX = .TRUE., IGKDMIN = 1.1, IGFIXEDDEPTH = 0., -!IGEMPIRICAL = 0.00125 / -! Switch LN1 -!&SLN1 CLIN = 80., RFPM = 1., RFHF = 0.5 / -! Switch ST1 -!&SIN1 CINP = 0.25 / -! Switch ST2 -!&SIN2 ZWND = 10., SWELLF = 0.100, STABSH = 1.38, STABOF = -0.01, -!CNEG = -0.1, CPOS = 0.1, FNEG = 150. / -! Switch ST3 -!&SIN3 ZWND = 10., ALPHA0 = 0.0095, Z0MAX = 0.0, BETAMAX = 1.2, -!SINTHP = 2., SWELLF = 0., ZALP = 0.0110 / -! Switch ST4 -!&SIN4 ZWND = 10., ALPHA0 = 0.0095, Z0MAX = 0.0, Z0RAT = 0.04, BETAMAX = 1.43, -!SINTHP = 2., SWELLF = 0.66, SWELLFPAR = 1, SWELLF2 = -0.018, SWELLF3 = 0.022, -!SWELLF4 = 1.5E5, SWELLF5 = 1.2, SWELLF6 = 0., SWELLF7 = 360000., -!TAUWSHELTER = 0.3, ZALP = 0.006, SINBR = 0. / -! Switch NL1 -!&SNL1 LAMBDA = 0.25, NLPROP = 1.00E7, KDCONV = 0.75, KDMIN = 0.50, -!SNLCS1 = 5.5, SNLCS2 = 0.833, SNLCS3 = -1.25 / -! Switch NL2 -!&SNL2 IQTYPE = 2, TAILNL = -FACHF, NDEPTH = 0 / -! Switch NL2 -!&ANL2 DEPTHS = 100*1000. / -! Switch NL3 -!&SNL3 NQDEF = 0, MSC = 0., NSC = -3.5, KDFD = 0.20, KDFS = 5.00 / -! Switch NL3 -!&ANL3 QPARMS = 100*(0.25 , 0.00, -1., 1.E7, 0.00) / -! Switch NL4 -!&SNL4 INDTSA = 1, ALTLP = 2 / -! Switch NLS -!&SNLS A34 = 0.05, FHFC = 1.E10, DNM = 0.25, FC1 = 1.25, FC2 = 1.50, -!FC3 = 6.00 / -! Switch ST1 -!&SDS1 CDIS = -2.36E-5, APM = 3.02E-3 / -! Switch ST2 -!&SDS2 SDSA0 = 4.8, SDSA1 = 1.7e-4, SDSA2 = 2.0, SDSB0 = 0.3e-3, -!SDSB1 = 0.47, PHIMIN = 0.003, SDSALN = 0.002, FPIMIN = 0.009 / -! Switch ST3 -!&SDS3 SDSC1 = -2.1, WNMEANP = 0.5, FXFM3 = 2.5, FXPM3 = 4., -!WNMEANPTAIL = 0.5, SDSDELTA1 = 0.4, SDSDELTA2 = 0.6 / -! Switch ST4 -!&SDS4 WNMEANP = 0.5, FXFM3 = 2.5, FXFMAGE = 0., FXPM3 = 4., -!WNMEANPTAIL = -0.5, SDSBCHOICE = 1, SDSC2 = -2.2E-5, SDSCUM = -0.40344, -!SDSC4 = 1., SDSC5 = 0., SDSNUW = 0., SDSC6 = 0.3, SDSBR = 0.90E-3, -!SDSBRFDF = 0, SDSBRF1 = 0.5, SDSP = 2., SDSDTH = 80., SDSCOS = 2., -!SDSISO = 2, SDSBM0 = 1., SDSBM1 = 0., SDSBM2 = 0., SDSBM3 = 0., -!SDSBM4 = 0., SDSBCK = 0., SDSABK = 1.5, SDSPBK = 4., SDSBINT = 0.3, -!SDSHCK = 1.5, WHITECAPWIDTH = 0.3, SDSSTRAIN = 0., SDSFACMTF = 400, -!SDSSTRAINA = 15., SDSSTRAIN2 = 0., WHITECAPDUR = 0.56, SDSBT = 1.100E-3, -!SDSL = 3.5000e-05, SPMSS = 0.5, SDSNMTF = 1.5, SDSCUMP = 2., SDSMWD = .9, -!SDSMWPOW = 1. SDKOF = 3. / -! Switch ST6 -!&SIN6 SINA0 = 0.09, SINWS = 32.0, SINFC = 6.0 / -! Switch ST6 -!&SDS6 SDSET = .TRUE., SDSA1 = 4.75E-06, SDSP1 = 4, SDSA2 = 7.00E-05, -!SDSP2 = 4 / -! Switch ST6 -!&SWL6 CSTB1 = .FALSE., SWLB1 = 0.41E-02 / -! Switch BT1 -!&SBT1 GAMMA = -0.067 / -! Switch BT4 -!&SBT4 SEDMAPD50 = .FALSE., SED_D50_UNIFORM = 2.E-4, RIPFAC1 = 0.4, -!RIPFAC2 = -2.5, RIPFAC3 = 1.2, RIPFAC4 = 0.05, SIGDEPTH = 0.05, -!BOTROUGHMIN = 0.01, BOTROUGHFAC = 1.00 / -! Switch DB1 -!&SDB1 BJALFA = 1., BJGAM = 0.73, BJFLAG = .TRUE. / -! Switch UOST -!&UOST UOSTFILELOCAL = 'obstructions_local.name.in', -!UOSTFILESHADOW = 'obstructions_shadow.name.in', UOSTFACTORLOCAL = 1, -!UOSTFACTORSHADOW = 1 / -! Switch PR1 -!&PRO1 CFLTM = 0.7 / -! Switch PR2 -!&PRO2 CFLTM = 0.7, DTIME = 0., LATMIN = 70. / -! Switch SMC -!&PSMC CFLTM = 0.7, LVSMC = 1, ISHFT = 0, JEQT = 0, NBISMC = 0, -!DTIME = 0.0, LATMIN = 86.0, RFMAXD = 80.0, UNO3 = .FALSE., -!AVERG = .FALSE., SEAWND = .FALSE. / -! Switch PR3 -!&PRO3 CFLTM = 0.7, WDTHCG = 1.5, WDTHTH = 1.5 / -&UNST UGOBCAUTO = .TRUE., UGBCCFL = .TRUE., UGOBCDEPTH= -10., -UGOBCFILE = 'unset', EXPFSN = .TRUE., EXPFSPSI = .FALSE., -EXPFSFCT = .FALSE., IMPFSN = .FALSE., IMPTOTAL = .FALSE., -EXPTOTAL = .FALSE., IMPREFRACTION = .FALSE., IMPFREQSHIFT = .FALSE., -IMPSOURCE = .FALSE., SETUP_APPLY_WLV = .FALSE., SOLVERTHR_SETUP = 1E-14, -CRIT_DEP_SETUP = 0.1, JGS_TERMINATE_MAXITER = .TRUE., -JGS_TERMINATE_DIFFERENCE = .TRUE., JGS_TERMINATE_NORM = .FALSE., -JGS_LIMITER = .FALSE., JGS_BLOCK_GAUSS_SEIDEL = .TRUE., -JGS_USE_JACOBI = .TRUE., JGS_MAXITER = 100, JGS_PMIN = 1, -JGS_DIFF_THR = 1.E-10, JGS_NORM_THR = 1.E-20, JGS_NLEVEL = 0, -JGS_SOURCE_NONLINEAR = .FALSE. / -&MISC CICE0 = 0.5, CICEN = 0.5, LICE = 0., ICEHFAC = 1.0, ICEHMIN = 0.2, -ICEHINIT = 0.5, ICESLN = 1.0, ICEWIND = 1.0, ICESNL = 1.0, ICESDS = 1.0, -ICEHDISP = 0.6, ICEDDISP = 80, ICEFDISP = 2, GSHIFT = 0.0D0, PMOVE = 0.5, -XSEED = 1., FLAGTR = 0, XP = 0.15, XR = 0.10, XFILT = 0.05, IHM = 100, -HSPM = 0.05, WSM = 1.7, WSC = 0.333, FLC = .TRUE., TRCKCMPR = .TRUE., -NOSW = 5, PTM = 1, PTFC = 0.1, FMICHE = 1.6, RWNDC = 1., WCOR1 = 99., -WCOR2 = 0., BTBET = 1.2, STDX = -1., STDY = -1., STDT = -1., -ICEDISP = .FALSE., CALTYPE = 'standard', FACBERG=1. / -&OUTS E3D = 0, I1E3D = 1, I2E3D = 32, P2SF = 0, I1P2SF = 1, -I2P2SF = 15, US3D = 0, I1US3D = 1, I2US3D = 32, USSP = 0, -IUSSP = 1, STK_WN(:) = 0.0, STK_WN(1) = 0.00628, TH1MF = 0, -I1TH1M = 1, I2TH1M = 32, STH1MF = 0, I1STH1M = 1, I2STH1M = 32, -TH2MF = 0, I1TH2M = 1, I2TH2M = 32, STH2MF = 0, I1STH2M = 1. -I2STH2M = 32 / -! Switch ISI1 -!&SIS1 ISC1 = 1., ISC2 = 0. / -! Switch ISI2 -!&SIS2 ISC1 = 1., IS2C2 = 0., IS2C3 = 0., IS2CONC = 0., IS2BACKSCAT = 1., -!IS2BREAK = .FALSE., IS2BREAKF = 3.6, IS2FLEXSTR = 6.00E+05, -!IS2ISOSCAT = .TRUE., IS2DISP = .FALSE., IS2DUPDATE = .TRUE., -!IS2FRAGILITY = 0.9, IS2DMIN = 20, IS2DAMP = 0., IS2CREEPB = 0., -!IS2CREEPC = 0.4, IS2CREEPD = 0.5, IS2CREEPN = 3.0, IS2BREAKE = 1., -!IS2WIM1 = 1., IS2ANDISB = .TRUE., IS2ANDISE = 0.55, IS2ANDISD = 2.0E-9, -!IS2ANDISN = 1. / -! Switch REF1 -!&REF1 REFCOAST = 0., REFMAP = 0., REFMAPD = 0., REFRMAX = 1., -!REFFREQPOW = 2., REFFREQ = 0., REFCOSP_STRAIGHT = 4., -!REFSLOPE = 0.22, REFSUBGRID = 0., REFICEBERG = 0., REFUNSTSOURCE = 0. / -! Switch RTD -!&ROTD PLAT = -999.9, PLON = -999.9, UNROT = .TRUE. / +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III - model parameters namelist +$ -------------------------------------------------------------------- $ +$ This file is to be used with ww3_grid.nml where its name is the value +$ of GRID%NML +$ +$ The contents is equal to the namelist input of ww3_grid.inp +$ (traditional form) ending with a mandatory string 'END OF NAMELISTS' +$ +$ Start of namelist input section ------------------------------------ $ +$ +$ Starting with WAVEWATCH III version 2.00, the tunable parameters +$ for source terms, propagation schemes, and numerics are read using +$ namelists. Any namelist found in the folowing sections up to the +$ end-of-section identifier string (see below) is temporarily written +$ to ww3_grid.scratch, and read from there if necessary. Namelists +$ not needed for the given switch settings will be skipped +$ automatically, and the order of the namelists is immaterial. +$ As an example, namelist input to change SWELLF and ZWND in the +$ Tolman and Chalikov input would be +$ +$ &SIN2 SWELLF = 0.1, ZWND = 15. / +$ +$ Define constants in source terms ----------------------------------- $ +$ +$ Stresses - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +$ TC 1996 with cap : Namelist FLX3 +$ CDMAX : Maximum allowed CD (cap) +$ CTYPE : Cap type : +$ 0: Discontinuous (default). +$ 1: Hyperbolic tangent. +$ Hwang 2011 : Namelist FLX4 +$ CDFAC : re-scaling of drag +$ +$ Linear input - - - - - - - - - - - - - - - - - - - - - - - - - - - - +$ Cavaleri and M-R : Namelist SLN1 +$ CLIN : Proportionality constant. +$ RFPM : Factor for fPM in filter. +$ RFHF : Factor for fh in filter. +$ +$ Exponential input - - - - - - - - - - - - - - - - - - - - - - - - - +$ WAM-3 : Namelist SIN1 +$ CINP : Proportionality constant. +$ +$ Tolman and Chalikov : Namelist SIN2 +$ ZWND : Height of wind (m). +$ SWELLF : swell factor in (n.nn). +$ STABSH, STABOF, CNEG, CPOS, FNEG : +$ c0, ST0, c1, c2 and f1 in . (n.nn) +$ through (2.65) for definition of +$ effective wind speed (!/STAB2). +$ WAM4 and variants : Namelist SIN3 +$ ZWND : Height of wind (m). +$ ALPHA0 : minimum value of Charnock coefficient +$ Z0MAX : maximum value of air-side roughness z0 +$ BETAMAX : maximum value of wind-wave coupling +$ SINTHP : power of cosine in wind input +$ ZALP : wave age shift to account for gustiness +$ TAUWSHELTER : sheltering of short waves to reduce u_star +$ SWELLFPAR : choice of swell attenuation formulation +$ (1: TC 1996, 3: ACC 2008) +$ SWELLF : swell attenuation factor +$ Extra parameters for SWELLFPAR=3 only +$ SWELLF2, SWELLF3 : swell attenuation factors +$ SWELLF4 : Threshold Reynolds number for ACC2008 +$ SWELLF5 : Relative viscous decay below threshold +$ Z0RAT : roughness for oscil. flow / mean flow +$ BYDRZ input : Namelist SIN6 +$ SINA0 : factor for negative input +$ SINWS : wind speed scaling option +$ SINFC : high-frequency extent of the +$ prognostic frequency region +$ +$ Nonlinear interactions - - - - - - - - - - - - - - - - - - - - - - - +$ Discrete I.A. : Namelist SNL1 +$ LAMBDA : Lambda in source term. +$ NLPROP : C in sourc term. NOTE : default +$ value depends on other source +$ terms selected. +$ KDCONV : Factor before kd in Eq. (n.nn). +$ KDMIN, SNLCS1, SNLCS2, SNLCS3 : +$ Minimum kd, and constants c1-3 +$ in depth scaling function. +$ Exact interactions : Namelist SNL2 +$ IQTYPE : Type of depth treatment +$ 1 : Deep water +$ 2 : Deep water / WAM scaling +$ 3 : Shallow water +$ TAILNL : Parametric tail power. +$ NDEPTH : Number of depths in for which +$ integration space is established. +$ Used for IQTYPE = 3 only +$ Namelist ANL2 +$ DEPTHS : Array with depths for NDEPTH = 3 +$ Gen. Multiple DIA : Namelist SNL3 +$ NQDEF : Number of quadruplets. +$ MSC : Scaling constant 'm'. +$ NSC : Scaling constant 'N'. +$ KDFD : Deep water relative filter depth, +$ KDFS : Shallow water relative filter depth, +$ Namelist ANL3 +$ QPARMS : 5 x NQDEF paramaters describing the +$ quadruplets, repeating LAMBDA, MU, DT12. +$ Cdeep and Cshal. See examples below. +$ Two Scale Approx. : Namelist SNL4 +$ INDTSA : Index for TSA/FBI computations +$ (0 = FBI ; 1 = TSA) +$ ALTLP : Index for alternate looping +$ (1 = no ; 2 = yes) +$ +$ Traditional DIA setup (default): +$ +$ &SNL3 NQDEF = 1, MSC = 0.00, NSC = -3.50 / +$ &ANL3 QPARMS = 0.250, 0.000, -1.0, 0.1000E+08, 0.0000E+00 / +$ +$ GMD3 from 2010 report (G13d in later paper) : +$ +$ &SNL3 NQDEF = 3, MSC = 0.00, NSC = -3.50 / +$ &ANL3 QPARMS = 0.126, 0.000, -1.0, 0.4790E+08, 0.0000E+00 , +$ 0.237, 0.000, -1.0, 0.2200E+08, 0.0000E+00 , +$ 0.319, 0.000, -1.0, 0.1110E+08, 0.0000E+00 / +$ +$ G35d from 2010 report: +$ +$ &SNL3 NQDEF = 5, MSC = 0.00, NSC = -3.50 / +$ &ANL3 QPARMS = 0.066, 0.018, 21.4, 0.170E+09, 0.000E+00 , +$ 0.127, 0.069, 19.6, 0.127E+09, 0.000E+00 , +$ 0.228, 0.065, 2.0, 0.443E+08, 0.000E+00 , +$ 0.295, 0.196, 40.5, 0.210E+08, 0.000E+00 , +$ 0.369, 0.226, 11.5, 0.118E+08, 0.000E+00 / +$ +$ Nonlinear filter based on DIA - - - - - - - - - - - - - - - - - - - +$ Namelist SNLS +$ A34 : Relative offset in quadruplet +$ FHFC : Proportionality constants. +$ DMN : Maximum relative change. +$ FC1-3 : Constants in frequency filter. +$ +$ Whitecapping dissipation - - - - - - - - - - - - - - - - - - - - - +$ WAM-3 : Namelist SDS1 +$ CDIS, APM : As in source term. +$ +$ Tolman and Chalikov : Namelist SDS2 +$ SDSA0, SDSA1, SDSA2, SDSB0, SDSB1, PHIMIN : +$ Constants a0, a1, a2, b0, b1 and +$ PHImin. +$ +$ WAM4 and variants : Namelist SDS3 +$ SDSC1 : WAM4 Cds coeffient +$ MNMEANP, WNMEANPTAIL : power of wavenumber +$ for mean definitions in Sds and tail +$ SDSDELTA1, SDSDELTA2 : relative weights +$ of k and k^2 parts of WAM4 dissipation +$ SDSLF, SDSHF : coefficient for activation of +$ WAM4 dissipation for unsaturated (SDSLF) and +$ saturated (SDSHF) parts of the spectrum +$ SDSC2 : Saturation dissipation coefficient +$ SDSC4 : Value of B0=B/Br for wich Sds is zero +$ SDSBR : Threshold Br for saturation +$ SDSP : power of (B/Br-B0) in Sds +$ SDSBR2 : Threshold Br2 for the separation of +$ WAM4 dissipation in saturated and non-saturated +$ SDSC5 : coefficient for turbulence dissipation +$ SDSC6 : Weight for the istropic part of Sds_SAT +$ SDSDTH: Angular half-width for integration of B +$ +$ BYDRZ : Namelist SDS6 +$ SDSET : Select threshold normalization spectra +$ SDSA1, SDSA2, SDSP1, SDSP2 : +$ Coefficients for dissipation terms T1 and T2 +$ : Namelist SWL6 +$ SWLB1 : Coefficient for swell dissipation +$ +$ Bottom friction - - - - - - - - - - - - - - - - - - - - - - - - - - +$ JONSWAP : Namelist SBT1 +$ GAMMA : Bottom friction emprical constant +$ +$ +$ Surf breaking - - - - - - - - - - - - - - - - - - - - - - - - - - - +$ Battjes and Janssen : Namelist SDB1 +$ BJALFA : Dissipation constant (default = 1) +$ BJGAM : Breaking threshold (default = 0.73) +$ BJFLAG : TRUE - Use Hmax/d ratio only (default) +$ FALSE - Use Hmax/d in Miche formulation +$ +$ Dissipation in the ice - - - - - - - - - - - - - - - - - - - - - - +$ Generalization of Liu et al. : Namelist SIC2 +$ IC2DISPER : If true uses Liu formulation with eddy viscosity +$ If false, uses the generalization with turbulent +$ to laminar transition +$ IC2TURB : empirical factor for the turbulent part +$ IC2ROUGH : under-ice roughness length +$ IC2REYNOLDS: Re number for laminar to turbulent transition +$ IC2SMOOTH : smoothing of transition reprensenting random waves +$ IC2VISC : empirical factor for viscous part +$ +$ +$ Scattering in the ice & creep dissipations- - - - - - - - - - - - - +$ Generalization of Wiliams et al. : Namelist SIS2 +$ ISC1 : scattering coefficient (default = 1) +$ IS2BACKSCAT : fraction of energy back-scattered (default = 1 ) +$ IS2BREAK : TRUE - changes floe max diameter +$ : FALSE - does not change floe max diameter +$ IS2C1 : scattering in pack ice +$ IS2C2 : frequency dependance of scattering in pack ice +$ IS2C3 : frequency dependance of scattering in pack ice +$ ISBACKSCAT : fraction of scattered energy actualy redistributed +$ IS2DISP : use of ice-specific dispersion relation (T/F) +$ FRAGILITY : parameter between 0 and 1 that gives the shape of FSD +$ IS2DMIN : minimum floe diameter in meters +$ IS2DAMP : multiplicative coefficient for dissipation term from RP +$ IS2UPDATE : TRUE - updates the max floe diameter with forcing only +$ : FALSE - updates the max floe diameter at each time step +$ +$ Dissipation by sea ice +$ Empirical/parametric representations : Namelist SIC4 +$ IC4METHOD : integer 1 to 7 +$ : In most cases, additional input +$ : is required. +$ : See examples in /regtests/ww3_tic1.1/ +$ : See also: 1) description in manual +$ : and 2) inline documentation in +$ w3sic4md.ftn +$ +$ Triad nonlinear interactions - - - - - - - - - - - - - - - - - - - - +$ Lumped Triad Interaction (LTA) : Namelist STR1 (To be implemented) +$ PTRIAD1 : Proportionality coefficient (default 0.05) +$ PTRIAD2 : Multiple of Tm01 up to which interaction +$ is computed (2.5) +$ PTRIAD3 : Ursell upper limit for computing +$ interactions (not used, default 10.) +$ PTRIAD4 : Shape parameter for biphase +$ computation (0.2) +$ PTRIAD5 : Ursell number treshold for computing +$ interactions (0.01) +$ +$ Shoreline reflections - - - - - - - - - - - - - - - - - - - - - - - - +$ ref. parameters : Namelist REF1 +$ REFCOAST : Reflection coefficient at shoreline +$ REFFREQ : Activation of freq-dependent ref. +$ REFMAP : Scale factor for bottom slope map +$ REFRMAX : maximum ref. coeffient (default 0.8) +$ REFFREQPOW: power of frequency +$ REFICEBERG: Reflection coefficient for icebergs +$ REFSUBGRID: Reflection coefficient for islands +$ REFCOSP_STRAIGHT: power of cosine used for +$ straight shoreline +$ +$ Bound 2nd order spectrum and free IG - - - - - - - - - - - - - - - - - +$ IG1 parameters : Namelist SIG1 +$ IGMETHOD : 1: Hasselmann, 2: Krasitskii-Janssen +$ IGADDOUTP : activation of bound wave correction +$ in ww3_outp / ww3_ounp +$ IGSOURCE : 1: uses bound waves, 2: empirical +$ IGSTERMS : > 0 : no source term in IG band +$ IGMAXFREQ : maximum frequency of IG band +$ IGEMPIRICAL: constant in empirical free IG source +$ IGBCOVERWRITE: T: Replaces IG spectrum, does not add +$ IGSWELLMAX: T: activates free IG sources for all freq. +$ +$ +$ Propagation schemes ------------------------------------------------ $ +$ First order : Namelist PRO1 +$ CFLTM : Maximum CFL number for refraction. +$ +$ UQ/UNO with diffusion : Namelist PRO2 +$ CFLTM : Maximum CFL number for refraction. +$ DTIME : Swell age (s) in garden sprinkler +$ correction. If 0., all diffusion +$ switched off. If small non-zero +$ (DEFAULT !!!) only wave growth +$ diffusion. +$ LATMIN : Maximum latitude used in calc. of +$ strength of diffusion for prop. +$ +$ UQ/UNO with averaging : Namelist PRO3 +$ CFLTM : Maximum CFL number for refraction. +$ WDTHCG : Tuning factor propag. direction. +$ WDTHTH : Tuning factor normal direction. +$ +$ Note that UQ and UNO schemes have no tunable parameters. +$ All tuneable parameters are associated with the refraction +$ limitation and the GSE alleviation. +$ +$ Unstructured grids ------------------------------------------------ $ +$ UNST parameters : Namelist UNST +$ UGOBCAUTO : TRUE: OBC points are taken from type 15 elements +$ FALSE: OBC points must be listed in ww3_grid.inp +$ UGOBCDEPTH: Threshold ( < 0) depth for OBC points if UGOBCAUTO is TRUE +$ EXPFSN : Activation of N scheme +$ EXPFSPSI : Activation of PSI scheme +$ EXPFSFCT : Activation of FCT scheme +$ IMPFSN : Activation of N implicit scheme +$ IMPTOTAL : Activation of fully implicit scheme | Non splitting +$ EXPTOTAL : Turn on implicit refraction (only with imptotal) +$ IMPREFRACTION : Turn on implicit freq. shift (only with imptotal) +$ IMPFREQSHIFT : Turn on implicit freq. shift terms (only with imptotal) +$ IMPSOURCE : Turn on implicit source terms (only with imptotal) +$ JGS_TERMINATE_MAXITER : max. Number of iterations +$ JGS_TERMINATE_DIFFERENCE : terminate based on the total change of wave action +$ JGS_TERMINATE_NORM : terminate based on the norm of the solution +$ JGS_USE_JACOBI : Use Jacobi solver for imptotal +$ JGS_BLOCK_GAUSS_SEIDEL : Use Block Gauss Seidel method for imptotal +$ JGS_MAXITER : max. Number of solver iterations +$ JGS_PMIN : % of grid points that do not need to converge during solver iteration. +$ JGS_DIFF_THR : implicit solver threshold for JGS_TERMINATE_DIFFERENCE +$ JGS_NORM_THR : terminate based on the norm of the solution +$ SETUP_APPLY_WLV : Compute wave setup (experimental) +$ SOLVERTHR_SETUP : Solver threshold for setup computations +$ CRIT_DEP_SETUP : Critical depths for setup computations +$ +$ SMC grid propagation : Namelist PSMC and default values +$ CFLTM : Maximum CFL no. for propagation, 0.7 +$ DTIME : Swell age for diffusion term (s), 0.0 +$ LATMIN : Maximum latitude (deg) for GCT, 86.0 +$ RFMAXD : Maximum refraction turning (deg), 80.0 +$ LvSMC : No. of refinement level, default 1 +$ ISHFT : Shift number of i-index, default 0 +$ JEQT : Shift number of j-index, default 0 +$ NBISMC : No. of input boundary points, 0 +$ UNO3 : Use 3rd order advection scheme, .FALSE. +$ AVERG : Add extra spatial averaging, .FALSE. +$ SEAWND : Use sea-point only wind input. .FALSE. +$ &PSMC DTIME = 39600.0, LATMIN=85.0, RFMAXD = 36.0, LvSMC=3, JEQT=1344 / +$ +$ Rotated pole ------------------------------------------------------ $ +$ Pole parameters : Namelist ROTD +$ PLAT : Rotated pole latitude +$ PLON : Rotated pole longitude +$ UNROT : Logical, un-rotate directions to +$ true north +$ +$ Compile switch /RTD required. +$ +$ These will be used to derive rotation angle corrections in the +$ model. The corrections are used for rotation of boundary spectra +$ and for restoring conventional lat/lon orientation of the +$ output spectra, mean direction or any related variables. +$ The PLAT/LON example below is a standard setting for Met +$ Office UK regional models. +$ +$ &ROTD PLAT = 37.5, PLON = 177.5, UNROT = .TRUE. / +$ +$ The default values for ROTD represent a non-rotated lat/lon grid: +$ +$ &ROTD PLAT = 90.0, PLON = -180.0, UNROT = .FALSE. / +$ +$ Output boundary conditions to rotated pole grids ------------------ $ +$ +$ Pole parameters : Namelist ROTB +$ BPLAT(1:9) : Pole latitude of each destination grid +$ BPLON(1:9) : Pole longitude of each destination grid +$ +$ Compile switch /RTD required. +$ +$ In ww3_grid.nml the output boundary points are defined via OUTBND_COUNT_NML +$ and OUTBND_LINE_NML namelist as a number of straight lines in the reference +$ system of each destination grid. The index J of BPLAT(J),BPLON(J) is +$ incremented by one where a new output file is started by specifying a +$ negative value for the number of points OUTBND_LINE(I)%NP. +$ +$ Each destination may be either a rotated grid or a standard (non-rotated) +$ lat/lon grid. The default values for ROTB represent standard lat/lon grids: +$ +$ &ROTB BPLAT(1)=90., BPLON(1)=-180., BPLAT(2)=90. / $ (etc.) +$ +$ Output of 3D arrays------------------------------------------------- $ +$ In order to limit the use of memory, arrays for 3D output fiels (i.e. +$ variables that are a function of both space and frequency, are not +$ declared, and thus cannot be used, unless specified by namelists. +$ NB: Output of 'first 5' moments E, th1m, sth1m, th2, sth2m allows to estimate the full +$ directional spectrum using, e.g. MEM (Lygre&Krogstad 1986). +$ +$ Parameters (integers) : Namelist OUTS +$ For the frequency spectrum E(f) +$ E3D : <=0: not declared, > 0: declared +$ I1E3D : First frequency index of output (default is 1) +$ I2E3D : Last frequency index of output (default is NK) +$ For the mean direction th1m(f), and spread sth1m(f) +$ TH1MF, STH1MF : <=0: not declared, > 0: declared +$ I1TH1MF, I1STH1MF: First frequency index of output (default is 1) +$ I2TH1MF, I2STH1MF: First frequency index of output (default is 1) +$ For the mean direction th2m(f), and spread sth2m(f) +$ TH2MF, STH2MF : <=0: not declared, > 0: declared +$ I1TH2MF, I1STH2MF: First frequency index of output (default is 1) +$ I2TH2MF, I2STH2MF: First frequency index of output (default is 1) +$ For 2nd order pressure at K=0 (source of microseisms & microbaroms) +$ P2SF : <=0: not declared, > 0: declared +$ I1P2SF : First frequency index of output (default is 1) +$ I2P2SF : Last frequency index of output (default is NK) +$ For the surface Stokes drift partitions (USP) +$ USSP : First index (default is 1, should always be 1) +$ IUSSP : Last index (must be <= than NK and should be +$ between 3 and ~10 with the tradeoff +$ between accuracy and resources) +$ STK_WN : List of wavenumbers (size of IUSSP) +$ e.g.: USSP = 1, IUSSP=3, STK_WN = 0.04, 0.11, 0.33 +$ provides 3 partitions of both x & y component, +$ with a reasonable accuracy for using in +$ a climate model. +$ +$ Miscellaneous ------------------------------------------------------ $ +$ Misc. parameters : Namelist MISC +$ CICE0 : Ice concentration cut-off. +$ CICEN : Ice concentration cut-off. +$ PMOVE : Power p in GSE aleviation for +$ moving grids in Eq. (D.4). +$ XSEED : Xseed in seeding alg. (!/SEED). +$ FLAGTR : Indicating presence and type of +$ subgrid information : +$ 0 : No subgrid information. +$ 1 : Transparancies at cell boun- +$ daries between grid points. +$ 2 : Transp. at cell centers. +$ 3 : Like 1 with cont. ice. +$ 4 : Like 2 with cont. ice. +$ TRCKCMPR : Logical variable (T/F). Set to F to +$ disable "compression" of track output. +$ This simplifies post-processing. +$ Default is T and will create track +$ output in the traditional manner +$ (WW3 v3, v4, v5). +$ XP, XR, XFILT +$ Xp, Xr and Xf for the dynamic +$ integration scheme. +$ IHMAX : Number of discrete levels in part. +$ HSPMIN : Minimum Hs in partitioning. +$ WSM : Wind speed multiplier in part. +$ WSC : Cut of wind sea fraction for +$ identifying wind sea in part. +$ FLC : Flag for combining wind seas in +$ partitioning. +$ NOSW : Number of partitioned swell fields +$ in field output. +$ PTM : Partioning method: +$ 1 : Default WW3 +$ 2 : Watershedding + wind cutoff +$ 3 : Watershedding only +$ 4 : Wind speed cutoff only +$ 5 : High/Low band cutoff (see PTFC) +$ PTFC : Cutouf frequency for High/Low band +$ partioning (PTM=5). Default = 0.1Hz +$ FMICHE : Constant in Miche limiter. +$ STDX : Space-Time Extremes X-Length +$ STDY : Space-Time Extremes Y-Length +$ STDT : Space-Time Extremes Duration +$ P2SF : ...... +$ CALTYPE: Calendar type. The only accepted +$ values are 'standard' (default), +$ '365_day', or '360_day'. +$ +$ Diagnostic Sea-state Dependent Stress- - - - - - - - - - - - - - - - - +$ Reichl et al. 2014 : Namelist FLD1 +$ TAILTYPE : High Frequency Tail Method +$ 0: Constant value (prescribed) +$ 1: Wind speed dependent +$ (Based on GFDL Hurricane +$ Model Z0 relationship) +$ TAILLEV : Level of high frequency tail +$ (if TAILTYPE==0) +$ Valid choices: +$ Capped min: 0.001, max: 0.02 +$ TAILT1 : Tail transition ratio 1 +$ TAILT1*peak input frequency +$ is the first transition point of +$ the saturation specturm +$ Default is 1.25 +$ TAILT1 : Tail transition ratio 2 +$ TAILT2*peak input frequency +$ is the second transition point of +$ the saturation specturm +$ Default is 3.00 +$ Donelan et al. 2012 : Namelist FLD2 +$ TAILTYPE : See above (FLD1) +$ TAILLEV : See above (FLD1) +$ TAILT1 : See above (FLD1) +$ TAILT2 : See above (FLD1) +$ +$ In the 'Out of the box' test setup we run with sub-grid obstacles +$ and with continuous ice treatment. +$ +&MISC CICE0 = 0.25, CICEN = 0.75, FLAGTR = 4 / +&FLX3 CDMAX = 3.5E-3 , CTYPE = 0 / +$ END OF NAMELISTS +$ +$ -------------------------------------------------------------------- $ +$ End of model parameters namelist file +$ -------------------------------------------------------------------- $ diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 045fba688..133165df7 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -30,7 +30,7 @@ for par in mpi np nr nth rtst ww3 shrd dist omp \ prop1D prop2D time fetch hur1mg \ multi01 multi02 multi03 multi04 multi05 \ - hybd shwtr unstr pdlib smcgr mudice infgrv \ + hybd shwtr unstr pdlib smcgr rtd mudice infgrv \ uost assim calendar oasis multi06 multi07 multi08 do eval " value=\$$par" @@ -72,7 +72,8 @@ echo " echo ' Growth curves (fetch) : $fetch'" >> matrix.head echo " echo ' Shallow water tests : $shwtr'" >> matrix.head echo " echo ' Unstructured grid tests : $unstr'" >> matrix.head - echo " echo ' SMC / Rotated grid tests : $smcgr'" >> matrix.head + echo " echo ' SMC grid tests : $smcgr'" >> matrix.head + echo " echo ' Rotated pole tests : $rtd'" >> matrix.head echo " echo ' Hurricane with one moving grid : $hur1mg'" >> matrix.head echo " echo ' Mud/Ice and wave interaction tests : $mudice'" >> matrix.head echo " echo ' Second harmonic generation tests : $infgrv'" >> matrix.head @@ -1843,13 +1844,12 @@ echo "$rtst $ww3 -w work_IG1 -o netcdf ww3_tig1.1" >> matrix.body fi -# SMC and rotated grid cases, MPI only if requested +# SMC grid cases, MPI only if requested if [ "$smcgr" = 'y' ] && [ "$shrd" = 'y' ] && [ "$dist" != 'y' ] then echo ' ' >> matrix.body echo "$rtst $ww3 -w work_SHRD_SMC -o both ww3_tp2.10" >> matrix.body - echo "$rtst $ww3 -w work_SHRD_RTD -o both ww3_tp2.11" >> matrix.body echo "$rtst -w work_SHRD $ww3 -o both ww3_tp2.16" >> matrix.body fi @@ -1857,7 +1857,6 @@ then echo ' ' >> matrix.body echo "$rtst -s MPI -w work_MPI -f -p $mpi -n $np $ww3 -o both ww3_tp2.10" >> matrix.body - echo "$rtst -s MPI -w work_MPI -f -p $mpi -n $np $ww3 -o both ww3_tp2.11" >> matrix.body echo "$rtst -s MPI -w work_MPI -f -p $mpi -n $np $ww3 -o both ww3_tp2.16" >> matrix.body fi @@ -1866,6 +1865,28 @@ echo "$rtst -s MPI_OMPH -w work_MPI_OMPH -f -p $mpi -n $nr -t $nth $ww3 -o both ww3_tp2.16" >> matrix.body fi +# Rotated pole grid cases, (ww3_tp2.11 MPI only if requested) + + if [ "$rtd" = 'y' ] && [ "$shrd" = 'y' ] + then + echo ' ' >> matrix.body + echo "$rtst $ww3 ww3_tr1" >> matrix.body + echo "$rtst -i input_std -w work_std $ww3 ww3_tr1" >> matrix.body + echo "$rtst -i input_bndin -w work_bndin $ww3 ww3_tr1" >> matrix.body + fi + + if [ "$rtd" = 'y' ] && [ "$shrd" = 'y' ] && [ "$dist" != 'y' ] + then + echo ' ' >> matrix.body + echo "$rtst $ww3 -w work_SHRD_RTD -o both ww3_tp2.11" >> matrix.body + fi + + if [ "$rtd" = 'y' ] && [ "$dist" = 'y' ] + then + echo ' ' >> matrix.body + echo "$rtst -s MPI -w work_MPI -f -p $mpi -n $np $ww3 -o both ww3_tp2.11" >> matrix.body + fi + # mud/ice cases if [ "$mudice" = 'y' ] && [ "$shrd" = 'y' ] diff --git a/regtests/bin/matrix.comp b/regtests/bin/matrix.comp index 67eb75c6d..3d6604a81 100755 --- a/regtests/bin/matrix.comp +++ b/regtests/bin/matrix.comp @@ -71,7 +71,7 @@ if [ "$ctest" = 'all' ] ; then - ctest=`ls -d ww3_tp1.? ww3_tp2.? ww3_ts? ww3_tbt1.? ww3_tbt2.? ww3_tic1.? ww3_tic2.? ww3_tig1.? ww3_tp2.1? ww3_ta? mww3_test_0?` ; fi + ctest=`ls -d ww3_tp1.? ww3_tp2.? ww3_ts? ww3_tbt1.? ww3_tbt2.? ww3_tic1.? ww3_tic2.? ww3_tig1.? ww3_tp2.1? ww3_ta? ww3_tr? mww3_test_0?` ; fi echo "base directory : $base_dir" >> $home_dir/header.tmp echo "comp directory : $comp_dir" >> $home_dir/header.tmp echo "test(s) : " >> $home_dir/header.tmp diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index a789dbdcf..3fcbbf010 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -133,7 +133,8 @@ export shwtr='y' # shallow water tests export unstr='y' # unstructured grid tests export pdlib='y' # unstr with pdlib for domain decomposition and implicit solver - export smcgr='y' # SMC/Rotated grid test + export smcgr='y' # SMC grid test + export rtd='y' # Rotated pole test export mudice='y' # Mud/Ice and wave interaction tests export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index 6c7880090..8f63de335 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -149,7 +149,8 @@ fi export shwtr='y' # shallow water tests export unstr='y' # unstructured grid tests export pdlib='y' # unstr with pdlib for domain decomposition and implicit solver - export smcgr='y' # SMC/Rotated grid test + export smcgr='y' # SMC grid test + export rtd='y' # Rotated pole test export mudice='y' # Mud/Ice and wave interaction tests export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) diff --git a/regtests/bin/matrix_ukmo_cray b/regtests/bin/matrix_ukmo_cray index 33639e5cb..2448edfe7 100755 --- a/regtests/bin/matrix_ukmo_cray +++ b/regtests/bin/matrix_ukmo_cray @@ -37,8 +37,8 @@ # Set Cray compiler variant; CCE (Cray Compiler Environment) or GNU. # Use GNU for programs compiled with PDLIB, CCE for all others. - comp="CCE" - #comp = "GNU" + #comp="CCE" + comp="GNU" # 1. Set up for compilation environemnt on Cray XC (broadwell processors) @@ -118,7 +118,8 @@ fi export shwtr='y' # shallow water tests export unstr='y' # unstructured grid tests export pdlib='y' # unstr with pdlib for domain decomposition and implicit solver - export smcgr='y' # SMC/Rotated grid test + export smcgr='y' # SMC grid test + export rtd='y' # Rotated pole test export mudice='y' # Mud/Ice and wave interaction tests export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) diff --git a/regtests/bin/matrix_zeus_HLT b/regtests/bin/matrix_zeus_HLT index b8da49cd3..5a7328db4 100755 --- a/regtests/bin/matrix_zeus_HLT +++ b/regtests/bin/matrix_zeus_HLT @@ -94,7 +94,8 @@ export shwtr='y' # shallow water tests export unstr='y' # unstructured grid tests export pdlib='y' # unstr with pdlib for domain decomposition and implicit solver - export smcgr='y' # SMC/Rotated grid test + export smcgr='y' # SMC grid test + export rtd='y' # Rotated pole test export mudice='y' # Mud/Ice and wave interaction tests export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) diff --git a/regtests/ww3_tr1/info b/regtests/ww3_tr1/info new file mode 100644 index 000000000..9c8cf857a --- /dev/null +++ b/regtests/ww3_tr1/info @@ -0,0 +1,45 @@ +############################################################################# +# # +# ww3_tr1: Test script for nest file input/output with rotated pole grids. # +# # +# Model should be compiled with the switches : # +# # +# !/PR1 First order propagation # +# !/RTD Rotated pole support # +# !/O1 Output boundary locations from WW3_GRID program # +# # +# Remarks : # +# # +# 3 tests are provided in seperate input directories: # +# - [input] : A rotated pole grid forced with homogeneous wind that # +# outputs boundary conditions on 3 grids with different poles. # +# # +# - [input_std] : As above, but formulated on a standard pole grid. # +# # +# - [input_bndin] : A rotated pole grid with input boundary conditions # +# on the western edge of the domain. Used to check the correct # +# ingestion of nest files (always formulated on a standard pole) # +# in to a rotated pole grid. # +# # +# For the first two tests, the rotated and standard pole grids have been # +# setup in such a way that the cells on their eastern (sea point) edges # +# align at 2.5W (grid north points in the same direction for all grids # +# along this longitude). This faciliates the selection of nest output # +# points for each output grid as the longitudes are invariant and the # +# latitudes vary by the same amount (1 deg). # +# # +# Example run_test commands: # +# (some details will vary by local system and configuration) # +# ./bin/run_test ../model ww3_tr1 # +# ./bin/run_test -i input_std -w work_std ../model ww3_tr1 # +# ./bin/run_test -i input_bndin -w work_bndin ../model ww3_tr1 # +# # +# Chris Bunney, Jul 2020 # +# Last Mod : Jul 2020 # +# # +# 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. # +# # +############################################################################# diff --git a/regtests/ww3_tr1/input/switch b/regtests/ww3_tr1/input/switch new file mode 100644 index 000000000..be8e68fb7 --- /dev/null +++ b/regtests/ww3_tr1/input/switch @@ -0,0 +1 @@ +F90 SHRD RTD PR1 FLX1 LN1 ST1 NL1 BT0 IC0 IS0 REF0 DB0 TR0 BS0 XX0 WNT1 WNX1 CRT1 CRX1 NOGRB O1 diff --git a/regtests/ww3_tr1/input/ww3_grid.inp b/regtests/ww3_tr1/input/ww3_grid.inp new file mode 100644 index 000000000..dde54802b --- /dev/null +++ b/regtests/ww3_tr1/input/ww3_grid.inp @@ -0,0 +1,58 @@ +$ + 'RTD pole BCs test (RTD grid)' +$ +$ Grid formulated on rotated pole located at 37.5N, 177.5E. +$ This means that the rotated grid north is algined with the +$ standard pole grid north at longitudes of 2.5W. +$ +$ This test produces boundaries conditions on three different +$ grids: +$ - a rotated pole grid with the same pole +$ - a rotated pole grid with a different pole (30.5N, 177.5E) +$ - a standand pole grid +$ The boundary points for the 3 grid are collocated with the +$ eastern seapoint edge of the model grid. +$ +$ 1.1 0.067 20 24 0. + 1.1 0.11 13 24 0. +$ + F T T F F T +$ + 3600 1800 1800 60 +$ + &ROTD PLAT = 37.5, PLON = 177.5, UNROT = .TRUE. / + &ROTB BPLAT(1) = 37.5, BPLON(1) = 177.5, + BPLAT(2) = 30.5, BPLON(2) = 177.5, + BPLAT(3) = 90.0, BPLON(3) = -180.0 / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 10 10 + 1.0 1.0 1.0 + -8.0 0.0 1.0 + -0.1 10.0 10 -100. 4 1 '(...)' 'NAME' 'dummy' +$ + 100*2 +$ + 10 3 1 '(...)' 'NAME' 'dummy' +$ + 3 3 3 3 3 3 3 3 3 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 3 3 3 3 3 3 3 3 3 +$ +$ +$ Output boundaries (both along eastern edge of domain, but +$ formulated on different poles): +$ + 0.0 1.0 0.0 1.0 8 + 0.0 -6.0 0.0 1.0 -8 + -2.5 53.5 0.0 1.0 -8 + 0. 0. 0. 0. 0 +$ diff --git a/regtests/ww3_tr1/input/ww3_outp.inp b/regtests/ww3_tr1/input/ww3_outp.inp new file mode 100644 index 000000000..04cb50ef2 --- /dev/null +++ b/regtests/ww3_tr1/input/ww3_outp.inp @@ -0,0 +1,10 @@ +$ + 20010101 060000 3600. 1 +$ + 1 + 2 + -1 +$ + 2 + 2 66 +$ diff --git a/regtests/ww3_tr1/input/ww3_shel.inp b/regtests/ww3_tr1/input/ww3_shel.inp new file mode 100644 index 000000000..a98f2b49c --- /dev/null +++ b/regtests/ww3_tr1/input/ww3_shel.inp @@ -0,0 +1,34 @@ +$ + F F Water levels + F F Currents + T T Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ + 20010101 000000 + 20010101 060000 +$ + 2 +$ + 20010101 000000 3600 20010101 060000 + N + HS WND DIR +$ + 20010101 000000 3600 20010101 060000 + -16.4 59.8 'NorthWest ' + -2.5 60.5 'NorthEast ' + 0.0 0.0 'STOPSTRING' +$ + 20010101 000000 0 20010101 000000 +$ + 20010101 000000 0 20010101 000000 +$ + 20010101 000000 3600 20010101 060000 +$ + 20010101 000000 0 20010101 000000 +$ + 'WND' 20010101 000000 10. 180. 0.0 + 'STP' +$ diff --git a/regtests/ww3_tr1/input_bndin/bnd1.spc b/regtests/ww3_tr1/input_bndin/bnd1.spc new file mode 100644 index 000000000..bb9e702cc --- /dev/null +++ b/regtests/ww3_tr1/input_bndin/bnd1.spc @@ -0,0 +1,101 @@ +'WAVEWATCH III SPECTRA' 13 24 1 ' Unknown' + 6.670E-02 7.337E-02 8.071E-02 8.878E-02 9.766E-02 1.074E-01 1.182E-01 1.300E-01 + 1.430E-01 1.573E-01 1.730E-01 1.903E-01 2.093E-01 + 1.571E+00 1.309E+00 1.047E+00 7.854E-01 5.236E-01 2.618E-01 0.000E+00 + 6.021E+00 5.760E+00 5.498E+00 5.236E+00 4.974E+00 4.712E+00 4.451E+00 + 4.189E+00 3.927E+00 3.665E+00 3.403E+00 3.142E+00 2.880E+00 2.618E+00 + 2.356E+00 2.094E+00 1.833E+00 +20010101 000000 +'spec1 ' 51.80 -15.50 0.0 0.00 0.0 0.00 270.0 + 8.736E-02 3.718E-01 8.852E-01 1.840E+00 4.062E+00 2.712E+00 1.293E+00 + 8.843E-01 6.259E-01 4.257E-01 2.813E-01 1.823E-01 1.165E-01 2.876E-02 + 1.224E-01 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 + 2.061E-01 1.402E-01 9.261E-02 6.000E-02 3.835E-02 9.871E-04 4.201E-03 + 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 7.072E-03 + 4.810E-03 3.179E-03 2.059E-03 1.316E-03 3.126E-06 1.330E-05 3.167E-05 + 6.583E-05 1.453E-04 9.702E-05 4.625E-05 3.164E-05 2.240E-05 1.523E-05 + 1.007E-05 6.521E-06 4.168E-06 7.299E-10 3.106E-09 7.396E-09 1.537E-08 + 3.394E-08 2.266E-08 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 + 1.523E-09 9.734E-10 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 3.005E-21 1.279E-20 3.045E-20 6.329E-20 1.397E-19 9.328E-20 + 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 6.270E-21 4.008E-21 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 3.005E-21 1.279E-20 3.045E-20 6.329E-20 + 1.397E-19 9.328E-20 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 + 6.270E-21 4.008E-21 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 7.299E-10 3.106E-09 7.396E-09 1.537E-08 3.394E-08 2.266E-08 + 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 1.523E-09 9.734E-10 + 3.126E-06 1.330E-05 3.167E-05 6.583E-05 1.453E-04 9.702E-05 4.625E-05 + 3.164E-05 2.240E-05 1.523E-05 1.007E-05 6.521E-06 4.168E-06 9.871E-04 + 4.201E-03 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 + 7.072E-03 4.810E-03 3.179E-03 2.059E-03 1.316E-03 2.876E-02 1.224E-01 + 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 2.061E-01 + 1.402E-01 9.261E-02 6.000E-02 3.835E-02 +20010102 000000 +'spec1 ' 51.80 -15.50 0.0 0.00 0.0 0.00 270.0 + 8.736E-02 3.718E-01 8.852E-01 1.840E+00 4.062E+00 2.712E+00 1.293E+00 + 8.843E-01 6.259E-01 4.257E-01 2.813E-01 1.823E-01 1.165E-01 2.876E-02 + 1.224E-01 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 + 2.061E-01 1.402E-01 9.261E-02 6.000E-02 3.835E-02 9.871E-04 4.201E-03 + 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 7.072E-03 + 4.810E-03 3.179E-03 2.059E-03 1.316E-03 3.126E-06 1.330E-05 3.167E-05 + 6.583E-05 1.453E-04 9.702E-05 4.625E-05 3.164E-05 2.240E-05 1.523E-05 + 1.007E-05 6.521E-06 4.168E-06 7.299E-10 3.106E-09 7.396E-09 1.537E-08 + 3.394E-08 2.266E-08 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 + 1.523E-09 9.734E-10 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 3.005E-21 1.279E-20 3.045E-20 6.329E-20 1.397E-19 9.328E-20 + 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 6.270E-21 4.008E-21 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 3.005E-21 1.279E-20 3.045E-20 6.329E-20 + 1.397E-19 9.328E-20 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 + 6.270E-21 4.008E-21 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 7.299E-10 3.106E-09 7.396E-09 1.537E-08 3.394E-08 2.266E-08 + 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 1.523E-09 9.734E-10 + 3.126E-06 1.330E-05 3.167E-05 6.583E-05 1.453E-04 9.702E-05 4.625E-05 + 3.164E-05 2.240E-05 1.523E-05 1.007E-05 6.521E-06 4.168E-06 9.871E-04 + 4.201E-03 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 + 7.072E-03 4.810E-03 3.179E-03 2.059E-03 1.316E-03 2.876E-02 1.224E-01 + 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 2.061E-01 + 1.402E-01 9.261E-02 6.000E-02 3.835E-02 diff --git a/regtests/ww3_tr1/input_bndin/bnd2.spc b/regtests/ww3_tr1/input_bndin/bnd2.spc new file mode 100644 index 000000000..c71b2ed55 --- /dev/null +++ b/regtests/ww3_tr1/input_bndin/bnd2.spc @@ -0,0 +1,101 @@ +'WAVEWATCH III SPECTRA' 13 24 1 ' Unknown' + 6.670E-02 7.337E-02 8.071E-02 8.878E-02 9.766E-02 1.074E-01 1.182E-01 1.300E-01 + 1.430E-01 1.573E-01 1.730E-01 1.903E-01 2.093E-01 + 1.571E+00 1.309E+00 1.047E+00 7.854E-01 5.236E-01 2.618E-01 0.000E+00 + 6.021E+00 5.760E+00 5.498E+00 5.236E+00 4.974E+00 4.712E+00 4.451E+00 + 4.189E+00 3.927E+00 3.665E+00 3.403E+00 3.142E+00 2.880E+00 2.618E+00 + 2.356E+00 2.094E+00 1.833E+00 +20010101 000000 +'spec2 ' 56.70 -17.10 0.0 0.00 0.0 0.00 270.0 + 8.736E-02 3.718E-01 8.852E-01 1.840E+00 4.062E+00 2.712E+00 1.293E+00 + 8.843E-01 6.259E-01 4.257E-01 2.813E-01 1.823E-01 1.165E-01 2.876E-02 + 1.224E-01 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 + 2.061E-01 1.402E-01 9.261E-02 6.000E-02 3.835E-02 9.871E-04 4.201E-03 + 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 7.072E-03 + 4.810E-03 3.179E-03 2.059E-03 1.316E-03 3.126E-06 1.330E-05 3.167E-05 + 6.583E-05 1.453E-04 9.702E-05 4.625E-05 3.164E-05 2.240E-05 1.523E-05 + 1.007E-05 6.521E-06 4.168E-06 7.299E-10 3.106E-09 7.396E-09 1.537E-08 + 3.394E-08 2.266E-08 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 + 1.523E-09 9.734E-10 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 3.005E-21 1.279E-20 3.045E-20 6.329E-20 1.397E-19 9.328E-20 + 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 6.270E-21 4.008E-21 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 3.005E-21 1.279E-20 3.045E-20 6.329E-20 + 1.397E-19 9.328E-20 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 + 6.270E-21 4.008E-21 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 7.299E-10 3.106E-09 7.396E-09 1.537E-08 3.394E-08 2.266E-08 + 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 1.523E-09 9.734E-10 + 3.126E-06 1.330E-05 3.167E-05 6.583E-05 1.453E-04 9.702E-05 4.625E-05 + 3.164E-05 2.240E-05 1.523E-05 1.007E-05 6.521E-06 4.168E-06 9.871E-04 + 4.201E-03 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 + 7.072E-03 4.810E-03 3.179E-03 2.059E-03 1.316E-03 2.876E-02 1.224E-01 + 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 2.061E-01 + 1.402E-01 9.261E-02 6.000E-02 3.835E-02 +20010102 000000 +'spec2 ' 56.70 -17.10 0.0 0.00 0.0 0.00 270.0 + 8.736E-02 3.718E-01 8.852E-01 1.840E+00 4.062E+00 2.712E+00 1.293E+00 + 8.843E-01 6.259E-01 4.257E-01 2.813E-01 1.823E-01 1.165E-01 2.876E-02 + 1.224E-01 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 + 2.061E-01 1.402E-01 9.261E-02 6.000E-02 3.835E-02 9.871E-04 4.201E-03 + 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 7.072E-03 + 4.810E-03 3.179E-03 2.059E-03 1.316E-03 3.126E-06 1.330E-05 3.167E-05 + 6.583E-05 1.453E-04 9.702E-05 4.625E-05 3.164E-05 2.240E-05 1.523E-05 + 1.007E-05 6.521E-06 4.168E-06 7.299E-10 3.106E-09 7.396E-09 1.537E-08 + 3.394E-08 2.266E-08 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 + 1.523E-09 9.734E-10 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 3.005E-21 1.279E-20 3.045E-20 6.329E-20 1.397E-19 9.328E-20 + 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 6.270E-21 4.008E-21 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 3.005E-21 1.279E-20 3.045E-20 6.329E-20 + 1.397E-19 9.328E-20 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 + 6.270E-21 4.008E-21 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 7.299E-10 3.106E-09 7.396E-09 1.537E-08 3.394E-08 2.266E-08 + 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 1.523E-09 9.734E-10 + 3.126E-06 1.330E-05 3.167E-05 6.583E-05 1.453E-04 9.702E-05 4.625E-05 + 3.164E-05 2.240E-05 1.523E-05 1.007E-05 6.521E-06 4.168E-06 9.871E-04 + 4.201E-03 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 + 7.072E-03 4.810E-03 3.179E-03 2.059E-03 1.316E-03 2.876E-02 1.224E-01 + 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 2.061E-01 + 1.402E-01 9.261E-02 6.000E-02 3.835E-02 diff --git a/regtests/ww3_tr1/input_bndin/bnd3.spc b/regtests/ww3_tr1/input_bndin/bnd3.spc new file mode 100644 index 000000000..cc783b4bb --- /dev/null +++ b/regtests/ww3_tr1/input_bndin/bnd3.spc @@ -0,0 +1,101 @@ +'WAVEWATCH III SPECTRA' 13 24 1 ' Unknown' + 6.670E-02 7.337E-02 8.071E-02 8.878E-02 9.766E-02 1.074E-01 1.182E-01 1.300E-01 + 1.430E-01 1.573E-01 1.730E-01 1.903E-01 2.093E-01 + 1.571E+00 1.309E+00 1.047E+00 7.854E-01 5.236E-01 2.618E-01 0.000E+00 + 6.021E+00 5.760E+00 5.498E+00 5.236E+00 4.974E+00 4.712E+00 4.451E+00 + 4.189E+00 3.927E+00 3.665E+00 3.403E+00 3.142E+00 2.880E+00 2.618E+00 + 2.356E+00 2.094E+00 1.833E+00 +20010101 000000 +'spec3 ' 60.60 -18.80 0.0 0.00 0.0 0.00 270.0 + 8.736E-02 3.718E-01 8.852E-01 1.840E+00 4.062E+00 2.712E+00 1.293E+00 + 8.843E-01 6.259E-01 4.257E-01 2.813E-01 1.823E-01 1.165E-01 2.876E-02 + 1.224E-01 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 + 2.061E-01 1.402E-01 9.261E-02 6.000E-02 3.835E-02 9.871E-04 4.201E-03 + 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 7.072E-03 + 4.810E-03 3.179E-03 2.059E-03 1.316E-03 3.126E-06 1.330E-05 3.167E-05 + 6.583E-05 1.453E-04 9.702E-05 4.625E-05 3.164E-05 2.240E-05 1.523E-05 + 1.007E-05 6.521E-06 4.168E-06 7.299E-10 3.106E-09 7.396E-09 1.537E-08 + 3.394E-08 2.266E-08 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 + 1.523E-09 9.734E-10 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 3.005E-21 1.279E-20 3.045E-20 6.329E-20 1.397E-19 9.328E-20 + 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 6.270E-21 4.008E-21 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 3.005E-21 1.279E-20 3.045E-20 6.329E-20 + 1.397E-19 9.328E-20 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 + 6.270E-21 4.008E-21 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 7.299E-10 3.106E-09 7.396E-09 1.537E-08 3.394E-08 2.266E-08 + 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 1.523E-09 9.734E-10 + 3.126E-06 1.330E-05 3.167E-05 6.583E-05 1.453E-04 9.702E-05 4.625E-05 + 3.164E-05 2.240E-05 1.523E-05 1.007E-05 6.521E-06 4.168E-06 9.871E-04 + 4.201E-03 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 + 7.072E-03 4.810E-03 3.179E-03 2.059E-03 1.316E-03 2.876E-02 1.224E-01 + 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 2.061E-01 + 1.402E-01 9.261E-02 6.000E-02 3.835E-02 +20010102 000000 +'spec3 ' 60.60 -18.80 0.0 0.00 0.0 0.00 270.0 + 8.736E-02 3.718E-01 8.852E-01 1.840E+00 4.062E+00 2.712E+00 1.293E+00 + 8.843E-01 6.259E-01 4.257E-01 2.813E-01 1.823E-01 1.165E-01 2.876E-02 + 1.224E-01 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 + 2.061E-01 1.402E-01 9.261E-02 6.000E-02 3.835E-02 9.871E-04 4.201E-03 + 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 7.072E-03 + 4.810E-03 3.179E-03 2.059E-03 1.316E-03 3.126E-06 1.330E-05 3.167E-05 + 6.583E-05 1.453E-04 9.702E-05 4.625E-05 3.164E-05 2.240E-05 1.523E-05 + 1.007E-05 6.521E-06 4.168E-06 7.299E-10 3.106E-09 7.396E-09 1.537E-08 + 3.394E-08 2.266E-08 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 + 1.523E-09 9.734E-10 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 3.005E-21 1.279E-20 3.045E-20 6.329E-20 1.397E-19 9.328E-20 + 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 6.270E-21 4.008E-21 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 + 0.000E+00 0.000E+00 0.000E+00 3.005E-21 1.279E-20 3.045E-20 6.329E-20 + 1.397E-19 9.328E-20 4.447E-20 3.042E-20 2.153E-20 1.465E-20 9.677E-21 + 6.270E-21 4.008E-21 8.732E-15 3.716E-14 8.848E-14 1.839E-13 4.060E-13 + 2.710E-13 1.292E-13 8.839E-14 6.256E-14 4.255E-14 2.812E-14 1.822E-14 + 1.164E-14 7.299E-10 3.106E-09 7.396E-09 1.537E-08 3.394E-08 2.266E-08 + 1.080E-08 7.388E-09 5.230E-09 3.557E-09 2.350E-09 1.523E-09 9.734E-10 + 3.126E-06 1.330E-05 3.167E-05 6.583E-05 1.453E-04 9.702E-05 4.625E-05 + 3.164E-05 2.240E-05 1.523E-05 1.007E-05 6.521E-06 4.168E-06 9.871E-04 + 4.201E-03 1.000E-02 2.079E-02 4.590E-02 3.064E-02 1.461E-02 9.992E-03 + 7.072E-03 4.810E-03 3.179E-03 2.059E-03 1.316E-03 2.876E-02 1.224E-01 + 2.914E-01 6.057E-01 1.337E+00 8.927E-01 4.256E-01 2.911E-01 2.061E-01 + 1.402E-01 9.261E-02 6.000E-02 3.835E-02 diff --git a/regtests/ww3_tr1/input_bndin/switch b/regtests/ww3_tr1/input_bndin/switch new file mode 100644 index 000000000..be8e68fb7 --- /dev/null +++ b/regtests/ww3_tr1/input_bndin/switch @@ -0,0 +1 @@ +F90 SHRD RTD PR1 FLX1 LN1 ST1 NL1 BT0 IC0 IS0 REF0 DB0 TR0 BS0 XX0 WNT1 WNX1 CRT1 CRX1 NOGRB O1 diff --git a/regtests/ww3_tr1/input_bndin/ww3_bound.inp b/regtests/ww3_tr1/input_bndin/ww3_bound.inp new file mode 100644 index 000000000..51dd9af57 --- /dev/null +++ b/regtests/ww3_tr1/input_bndin/ww3_bound.inp @@ -0,0 +1,12 @@ +$ + WRITE +$ READ +$ + 2 +$ + 1 +$ +../input_bndin/bnd1.spc +../input_bndin/bnd2.spc +../input_bndin/bnd3.spc +'STOPSTRING' diff --git a/regtests/ww3_tr1/input_bndin/ww3_grid.inp b/regtests/ww3_tr1/input_bndin/ww3_grid.inp new file mode 100644 index 000000000..72bfbf899 --- /dev/null +++ b/regtests/ww3_tr1/input_bndin/ww3_grid.inp @@ -0,0 +1,39 @@ +$ + 'RTD grid input BC test' +$ Tests ingestion of BCs from nest.ww3 file for a rotated +$ pole grid. Spectra in nest.ww3 are always formulated on +$ a standard pole, so this tests correct rotation of +$ BC coordinates to model rotated pole grid. +$ + 1.1 0.067 13 24 0. +$ + F T T F F T +$ + 3600 1800 1800 60 +$ + &ROTD PLAT = 37.5, PLON = 177.5, UNROT = .FALSE. / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 10 10 + 1.0 1.0 1.0 + -8.0 0.0 1.0 + -0.1 10.0 10 -100. 4 1 '(...)' 'NAME' 'dummy' +$ + 100*2 +$ + 10 3 1 '(...)' 'NAME' 'dummy' +$ + 3 3 3 3 3 3 3 3 3 3 + 2 1 1 1 1 1 1 1 1 3 + 2 1 1 1 1 1 1 1 1 3 + 2 1 1 1 1 1 1 1 1 3 + 2 1 1 1 1 1 1 1 1 3 + 2 1 1 1 1 1 1 1 1 3 + 2 1 1 1 1 1 1 1 1 3 + 2 1 1 1 1 1 1 1 1 3 + 2 1 1 1 1 1 1 1 1 3 + 3 3 3 3 3 3 3 3 3 3 +$ + 0. 0. 0. 0. 0 +$ diff --git a/regtests/ww3_tr1/input_bndin/ww3_outp.inp b/regtests/ww3_tr1/input_bndin/ww3_outp.inp new file mode 100644 index 000000000..4a7f009c5 --- /dev/null +++ b/regtests/ww3_tr1/input_bndin/ww3_outp.inp @@ -0,0 +1,10 @@ +$ + 20010102 000000 3600. 1 +$ + 1 + 2 + -1 +$ + 2 + 2 66 +$ diff --git a/regtests/ww3_tr1/input_bndin/ww3_shel.inp b/regtests/ww3_tr1/input_bndin/ww3_shel.inp new file mode 100644 index 000000000..422ea7f88 --- /dev/null +++ b/regtests/ww3_tr1/input_bndin/ww3_shel.inp @@ -0,0 +1,31 @@ +$ + F F Water levels + F F Currents + F F Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ + 20010101 000000 + 20010102 000000 +$ + 2 +$ + 20010101 000000 3600 20010102 000000 + N + HS WND DIR +$ + 20010101 000000 3600 20010102 000000 + -16.4 59.8 'NorthWest ' + -14.1 52.8 'SouthWest ' + 0.0 0.0 'STOPSTRING' +$ + 20010101 000000 0 20010101 000000 +$ + 20010101 000000 0 20010101 060000 +$ + 20010101 000000 0 20010101 000000 +$ + 20010101 000000 0 20010101 060000 +$ diff --git a/regtests/ww3_tr1/input_std/switch b/regtests/ww3_tr1/input_std/switch new file mode 100644 index 000000000..be8e68fb7 --- /dev/null +++ b/regtests/ww3_tr1/input_std/switch @@ -0,0 +1 @@ +F90 SHRD RTD PR1 FLX1 LN1 ST1 NL1 BT0 IC0 IS0 REF0 DB0 TR0 BS0 XX0 WNT1 WNX1 CRT1 CRX1 NOGRB O1 diff --git a/regtests/ww3_tr1/input_std/ww3_grid.inp b/regtests/ww3_tr1/input_std/ww3_grid.inp new file mode 100644 index 000000000..cbf6c9937 --- /dev/null +++ b/regtests/ww3_tr1/input_std/ww3_grid.inp @@ -0,0 +1,56 @@ +$ + 'RTD pole BCs test (STD grid)' +$ +$ This grid is formulated on a standard pole, but produces +$ nest files formulated on rotated pole grids. +$ +$ This test produces boundaries conditions on three different +$ grids: +$ - a rotated pole grid with a pole at 37.5N, 177.5E +$ - a rotated pole grid with a pole at 30.5N, 177.5E +$ - a standand pole grid +$ The boundary points for the 3 grid are collocated with the +$ eastern seapoint edge of the model grid. +$ +$ 1.1 0.067 20 24 0. + 1.1 0.11 13 24 0. +$ + F T T F F T +$ + 3600 1800 1800 60 +$ + &ROTB BPLAT(1) = 37.5, BPLON(1) = 177.5, + BPLAT(2) = 30.5, BPLON(2) = 177.5, + BPLAT(3) = 90.0, BPLON(3) = -180.0 / +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 10 10 + 1.0 1.0 1.0 + -10.5 52.5 1.0 + -0.1 10.0 10 -100. 4 1 '(...)' 'UNIT' 'dummy' +$ + 100*2 +$ + 10 3 1 '(...)' 'UNIT' 'dummy' +$ + 3 3 3 3 3 3 3 3 3 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 1 1 1 1 1 1 1 1 3 + 3 3 3 3 3 3 3 3 3 3 +$ +$ +$ Output boundaries (both along eastern edge of domain, but +$ formulated on different poles): +$ + 0.0 1.0 0.0 1.0 8 + 0.0 -6.0 0.0 1.0 -8 + -2.5 53.5 0.0 1.0 -8 + 0. 0. 0. 0. 0 +$ diff --git a/regtests/ww3_tr1/input_std/ww3_outp.inp b/regtests/ww3_tr1/input_std/ww3_outp.inp new file mode 100644 index 000000000..04cb50ef2 --- /dev/null +++ b/regtests/ww3_tr1/input_std/ww3_outp.inp @@ -0,0 +1,10 @@ +$ + 20010101 060000 3600. 1 +$ + 1 + 2 + -1 +$ + 2 + 2 66 +$ diff --git a/regtests/ww3_tr1/input_std/ww3_shel.inp b/regtests/ww3_tr1/input_std/ww3_shel.inp new file mode 100644 index 000000000..d44be3011 --- /dev/null +++ b/regtests/ww3_tr1/input_std/ww3_shel.inp @@ -0,0 +1,34 @@ +$ + F F Water levels + F F Currents + T T Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ + 20010101 000000 + 20010101 060000 +$ + 2 +$ + 20010101 000000 3600 20010101 060000 + N + HS WND DIR +$ + 20010101 000000 3600 20010101 060000 + -9.5 60.5 'NorthWest ' + -2.5 60.5 'NorthEast ' + 0.0 0.0 'STOPSTRING' +$ + 20010101 000000 0 20010101 000000 +$ + 20010101 000000 0 20010101 000000 +$ + 20010101 000000 3600 20010101 060000 +$ + 20010101 000000 0 20010101 000000 +$ + 'WND' 20010101 000000 10. 180. 0.0 + 'STP' +$ From cd8aa85ed7350871a9293969d70e2a4cc830f4ab Mon Sep 17 00:00:00 2001 From: Minsuk Ji <57227195+MinsukJi-NOAA@users.noreply.github.com> Date: Mon, 5 Oct 2020 19:34:49 -0400 Subject: [PATCH 51/84] Support stampede (#256) Support compilation on stampede. --- model/bin/cmplr.env | 5 +++-- model/bin/w3_setup | 2 ++ model/esmf/Makefile | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index bfe1d789e..e9b8ffc69 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -110,7 +110,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || [ "$cmplr" == "so_intel_prof" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || [ "$cmplr" == "datarmor_intel_prof" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne" ] || \ - [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] ; then + [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || [ "$cmplr" == "stampede" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -157,7 +157,8 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c # omp options if [ ! -z "$(echo $cmplr | grep datarmor)" ] || [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ - [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne" ]; then + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne" ] || \ + [ "$cmplr" == "stampede" ]; then optomp="-qopenmp" else optomp="-openmp" diff --git a/model/bin/w3_setup b/model/bin/w3_setup index 8afd8a705..89f2e531f 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -415,6 +415,7 @@ then [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ + [ "$cmplr" == "stampede" ] || \ [ "$cmplr" == "cheyenne" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ @@ -441,6 +442,7 @@ then [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ + [ "$cmplr" == "stampede" ] || \ [ "$cmplr" == "cheyenne" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ diff --git a/model/esmf/Makefile b/model/esmf/Makefile index 58ac92430..9a09d7b34 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -35,7 +35,7 @@ ifeq ($(WW3_COMP),Portland) else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","pgi" "datarmor_pgi" "datarmor_pgi_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -byteswapio # intel -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","Intel" "hera" "orion" "cheyenne")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","Intel" "hera" "orion" "cheyenne" "stampede")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_cray" "wcoss_dell_p3")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian From d5adaf61b4c0afc6023154916aa436a85fb2e0ab Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Fri, 16 Oct 2020 10:41:22 +0200 Subject: [PATCH 52/84] Bugfix/trnc (#246) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * correct typo in case function Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- model/ftn/ww3_trnc.ftn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/ftn/ww3_trnc.ftn b/model/ftn/ww3_trnc.ftn index 4bd3dfaf1..b38fe2bf2 100644 --- a/model/ftn/ww3_trnc.ftn +++ b/model/ftn/ww3_trnc.ftn @@ -799,7 +799,7 @@ IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','time in 365 day calendar') CASE ('standard') IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','julian day (UT)') - END CASE + END SELECT IRET=NF90_PUT_ATT(NCID,VARID(1),'standard_name','time') IRET=NF90_PUT_ATT(NCID,VARID(1),'units','days since 1990-01-01 00:00:00') IRET=NF90_PUT_ATT(NCID,VARID(1),'conventions', & From 9c22b13506e797940ebab538fe4a3940dd9e3fc0 Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Mon, 19 Oct 2020 10:30:32 -0400 Subject: [PATCH 53/84] Revert "Bugfix/trnc (#246)" (#258) This reverts commit d5adaf61b4c0afc6023154916aa436a85fb2e0ab. Co-authored-by: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> --- model/ftn/ww3_trnc.ftn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/ftn/ww3_trnc.ftn b/model/ftn/ww3_trnc.ftn index b38fe2bf2..4bd3dfaf1 100644 --- a/model/ftn/ww3_trnc.ftn +++ b/model/ftn/ww3_trnc.ftn @@ -799,7 +799,7 @@ IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','time in 365 day calendar') CASE ('standard') IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','julian day (UT)') - END SELECT + END CASE IRET=NF90_PUT_ATT(NCID,VARID(1),'standard_name','time') IRET=NF90_PUT_ATT(NCID,VARID(1),'units','days since 1990-01-01 00:00:00') IRET=NF90_PUT_ATT(NCID,VARID(1),'conventions', & From 993a431d416300df35454c3fb91336d51f124c2a Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Tue, 20 Oct 2020 09:14:59 -0400 Subject: [PATCH 54/84] Bugfix trnc (#260) * Added boundary checks to the SMC grid input files for ww3_grid, to ensure they comply with the limits of the nameslist. * Fb 360 calendar (#8) Changes to add support to 360-day and 365-day (no leap year) calendar - see ticket #209 * Additional CALTYPE namelist parameter in MISC section * New ww3_tc1 regtest. * RTD support for ww3_boun[dc] (#10) * Updated ww3_bound and ww3_bounc to handle model grids formulated on a rotated pole. * Manual and nml/inp files to updated clarify that ww3_bound/ww3_bounc only accept input spectra formulated on a standard pole grid. * Fb coupling time (#9) Updates to allow a coupling time step that is different from the model time step. * Includes new regtest (in ww3_tp2.14) for non-default oasis time step. * ww3_tp2.14 regtest added to matrix.base. * bug fix for ukmet development * see issue #245 this is a bug introduced with the last PR from UKMO ukmo-waves#8: 360 day climate calendar in ww3_trnc.ftn END CASE should be replaced by END SELECT Co-authored-by: lewis.sampson Co-authored-by: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Co-authored-by: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> --- model/ftn/ww3_trnc.ftn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/ftn/ww3_trnc.ftn b/model/ftn/ww3_trnc.ftn index 4bd3dfaf1..b38fe2bf2 100644 --- a/model/ftn/ww3_trnc.ftn +++ b/model/ftn/ww3_trnc.ftn @@ -799,7 +799,7 @@ IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','time in 365 day calendar') CASE ('standard') IRET=NF90_PUT_ATT(NCID,VARID(1),'long_name','julian day (UT)') - END CASE + END SELECT IRET=NF90_PUT_ATT(NCID,VARID(1),'standard_name','time') IRET=NF90_PUT_ATT(NCID,VARID(1),'units','days since 1990-01-01 00:00:00') IRET=NF90_PUT_ATT(NCID,VARID(1),'conventions', & From 03e13f7a37d3ac390eabc07be15899a7174e6fc3 Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Fri, 23 Oct 2020 15:54:40 +0200 Subject: [PATCH 55/84] Bugfix/ounp (#263) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * correct missing statements for 40 characters names Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- model/ftn/ww3_ounp.ftn | 178 +++++++++++++++++++++-------------------- 1 file changed, 90 insertions(+), 88 deletions(-) diff --git a/model/ftn/ww3_ounp.ftn b/model/ftn/ww3_ounp.ftn index e3b737a95..a8295a640 100644 --- a/model/ftn/ww3_ounp.ftn +++ b/model/ftn/ww3_ounp.ftn @@ -218,7 +218,7 @@ CHARACTER(LEN=16) :: DATE, PASTDATE CHARACTER(LEN=30) :: FILEPREFIX, STRSTARTDATE, STRSTOPDATE CHARACTER :: COMSTR*1, IDTIME*23, IDDDAY*11, & - FILETIME*16, GLOBALATT*60, & + FILETIME*16, GLOBALATT*120, & ATTNAME*120, ATTVAL*120 CHARACTER(LEN=20) :: FORMAT1 CHARACTER(LEN=8) :: EXT @@ -767,7 +767,7 @@ ! Create the netCDF file DIMLN(1)=NF90_UNLIMITED ! time DIMLN(2)=NBSTATION ! station - DIMLN(3)=16 ! string station name length + DIMLN(3)=40 ! string station name length DIMLN(4)=NK ! FREQ CALL W3CRNC(ITYPE,OTYPE,NCTYPE,NCFILE(I),NCID(I),DIMID,DIMLN,VARID,ONE,TWO) END IF @@ -781,7 +781,7 @@ ! Create the netCDF file DIMLN(1)=NF90_UNLIMITED !time DIMLN(2)=NBSTATION ! station - DIMLN(3)=16 ! string station name length + DIMLN(3)=40 ! string station name length DIMLN(4)=NK ! FREQ DIMLN(5)=NTH ! DIR CALL W3CRNC(ITYPE,OTYPE,NCTYPE,NCFILE(I),NCID(I),DIMID,DIMLN,VARID,ONE,TWO) @@ -796,7 +796,7 @@ ! Create the netCDF file DIMLN(1)=NF90_UNLIMITED !time DIMLN(2)=NBSTATION ! station - DIMLN(3)=16 ! string station name length + DIMLN(3)=40 ! string station name length DIMLN(4)=DIMXP ! npart CALL W3CRNC(ITYPE,OTYPE,NCTYPE,NCFILE(I),NCID(I),DIMID,DIMLN,VARID,ONE,TWO) END IF @@ -816,7 +816,7 @@ ! Create the netCDF file DIMLN(1)=NF90_UNLIMITED !time DIMLN(2)=NBSTATION ! station - DIMLN(3)=16 ! string station name length + DIMLN(3)=40 ! string station name length CALL W3CRNC(ITYPE,OTYPE,NCTYPE,NCFILE(I),NCID(I),DIMID,DIMLN,VARID,ONE,TWO) END IF END DO @@ -899,7 +899,7 @@ ! Create the netCDF file DIMLN(1)=NF90_UNLIMITED !time DIMLN(2)=NBSTATION ! station - DIMLN(3)=16 ! string station name length + DIMLN(3)=40 ! string station name length DIMLN(4)=NK ! freq CALL W3CRNC(ITYPE,OTYPE,NCTYPE,NCFILE(I),NCID(I),DIMID,DIMLN,VARID,ONE,TWO) END IF @@ -913,7 +913,7 @@ ! Create the netCDF file DIMLN(1)=NF90_UNLIMITED !time DIMLN(2)=NBSTATION ! station - DIMLN(3)=16 ! string station name length + DIMLN(3)=40 ! string station name length DIMLN(4)=NK ! freq DIMLN(5)=NTH ! dir CALL W3CRNC(ITYPE,OTYPE,NCTYPE,NCFILE(I),NCID(I),DIMID,DIMLN,VARID,ONE,TWO,FLSRCE) @@ -1054,7 +1054,7 @@ DO I=1+(IFL-1)*MFL,(IFL-1)*MFL+NBFILEOUT IF ( FLREQ(I) .OR. TOGETHER ) THEN IRET=NF90_REDEF(NCID(I)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,0) IF (FLWW3.EQ.0) & OPEN(unit=994,file='NC_globatt.inp',status='old',iostat=ICODE) REWIND(994) @@ -1066,7 +1066,7 @@ STRL=LEN_TRIM(ATTNAME) STRL2=LEN_TRIM(ATTVAL) IRET=NF90_PUT_ATT(NCID(I),NF90_GLOBAL,ATTNAME(1:STRL),ATTVAL(1:STRL2)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,1) END IF END DO END IF @@ -1108,9 +1108,9 @@ ! ! Close netCDF file IRET=NF90_ENDDEF(NCID(I)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,2) IRET=NF90_CLOSE(NCID(I)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,3) ! END IF ! FLREQ(I) .OR. TOGETHER END DO ! I=1+(IFL-1)*MFL,(IFL-1)*MFL+NBFILEOUT @@ -1224,7 +1224,7 @@ 951 FORMAT ( ' ',A,2F10.2) 953 FORMAT ( ' ',A,2(F8.1,'E3')) 954 FORMAT (/' New time step : ',A) - 955 FORMAT ( ' Processing time : ', 2I8, ' in ', I4, 'files. Step '& + 955 FORMAT ( ' Processing time : ', 2I8, ' in ', I8, 'files. Step '& I4, 'out of ', I4, 'pass ', I4) ! 1940 FORMAT ( ' ',A,' print plots not requested.') @@ -1594,30 +1594,30 @@ CALL T2D(TIME,CURDATE,IERR) OUTJULDAY=TSUB(REFDATE,CURDATE) IRET=NF90_PUT_VAR(NCID,VARID(1),OUTJULDAY,(/IOUT/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,4) ! IF (IOUT.EQ.1) THEN DO J1=1, NREQ IRET=NF90_PUT_VAR(NCID,VARID(27),INDREQ(J1),(/J1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,5) IRET=NF90_PUT_VAR(NCID,VARID(2),PTNME(INDREQ(J1)), & start=(/1,J1/),count=(/LEN_TRIM(PTNME(INDREQ(J1))) ,1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,6) END DO END IF ! DO J1=1, NREQ IF ((FLWW3.NE.0).AND.(ORDER)) IRET=NF90_PUT_VAR(NCID,VARID(3),FLWW3,(/J1,IOUT/)) IF ((FLWW3.NE.0).AND.(.NOT.ORDER)) IRET=NF90_PUT_VAR(NCID,VARID(3),FLWW3,(/IOUT,J1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,7) END DO ! IF(ORDER) IRET=NF90_PUT_VAR(NCID,VARID(4),M2KM*PTLOC(1,INDREQ(1:NREQ)),(/1,IOUT/)) IF(.NOT.ORDER) IRET=NF90_PUT_VAR(NCID,VARID(4),M2KM*PTLOC(1,INDREQ(1:NREQ)),(/IOUT,1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,8) IF(ORDER) IRET=NF90_PUT_VAR(NCID,VARID(5),M2KM*PTLOC(2,INDREQ(1:NREQ)),(/1,IOUT/)) IF(.NOT.ORDER) IRET=NF90_PUT_VAR(NCID,VARID(5),M2KM*PTLOC(2,INDREQ(1:NREQ)),(/IOUT,1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,9) ! DO J1=1,NREQ UDIR1(J1) = MOD ( 270. - WDO(INDREQ(J1))*RADE , 360. ) @@ -1626,25 +1626,25 @@ ! IF(ORDER) IRET=NF90_PUT_VAR(NCID,VARID(11),DPO(INDREQ(1:NREQ)),(/1,IOUT/)) IF(.NOT.ORDER) IRET=NF90_PUT_VAR(NCID,VARID(11),DPO(INDREQ(1:NREQ)),(/IOUT,1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,10) IF(ORDER) IRET=NF90_PUT_VAR(NCID,VARID(12),WAO(INDREQ(1:NREQ)),(/1,IOUT/)) IF(.NOT.ORDER) IRET=NF90_PUT_VAR(NCID,VARID(12),WAO(INDREQ(1:NREQ)),(/IOUT,1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,11) IF(ORDER) IRET=NF90_PUT_VAR(NCID,VARID(13),UDIR1,(/1,IOUT/)) IF(.NOT.ORDER) IRET=NF90_PUT_VAR(NCID,VARID(13),UDIR1,(/IOUT,1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,12) IF(ORDER) IRET=NF90_PUT_VAR(NCID,VARID(14),CAO(INDREQ(1:NREQ)),(/1,IOUT/)) IF(.NOT.ORDER) IRET=NF90_PUT_VAR(NCID,VARID(14),CAO(INDREQ(1:NREQ)),(/IOUT,1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,13) IF(ORDER) IRET=NF90_PUT_VAR(NCID,VARID(15),CDIR1,(/1,IOUT/)) IF(.NOT.ORDER) IRET=NF90_PUT_VAR(NCID,VARID(15),CDIR1,(/IOUT,1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,14) ! IF(ORDER) IRET=NF90_PUT_VAR(NCID,VARID(10),E3(1:NTH,1:NK,1:NREQ), & start=(/1,1,1,IOUT/),count=(/NTH,NK,NREQ,1/)) IF(.NOT.ORDER) IRET=NF90_PUT_VAR(NCID,VARID(10),E3(1:NTH,1:NK,1:NREQ), & start=(/1,1,IOUT,1/),count=(/NTH,NK,1,NREQ/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,15) ! ! End of short version ! @@ -2176,7 +2176,7 @@ CALL T2D(TIME,CURDATE,IERR) OUTJULDAY=TSUB(REFDATE,CURDATE) IRET=NF90_PUT_VAR(NCID,VARID(1),OUTJULDAY,(/IOUT/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,16) END IF @@ -2205,7 +2205,7 @@ ELSE IF ( OTYPE .EQ. 2 ) THEN IRET=NF90_PUT_VAR(NCID,VARID(27),J,(/J1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,17) IRET=NF90_PUT_VAR(NCID,VARID(2),PTNME(J),start=(/1,J1/),count=(/LEN_TRIM(PTNME(J)) ,1/)) IF (FLWW3.NE.0) IRET=NF90_PUT_VAR(NCID,VARID(3),FLWW3,(/J1,IOUT/)) IRET=NF90_PUT_VAR(NCID,VARID(4),M2KM*PTLOC(1,J),(/J1,IOUT/)) @@ -2228,7 +2228,7 @@ ! ELSE IF ( OTYPE .EQ. 3 ) THEN IRET=NF90_PUT_VAR(NCID,VARID(27),J,(/J1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,18) IRET=NF90_PUT_VAR(NCID,VARID(2),PTNME(J),start=(/1,J1/),count=(/LEN_TRIM(PTNME(J)) ,1/)) IF (FLWW3.NE.0) IRET=NF90_PUT_VAR(NCID,VARID(3),FLWW3,(/J1,IOUT/)) IRET=NF90_PUT_VAR(NCID,VARID(4),M2KM*PTLOC(1,J),(/J1,IOUT/)) @@ -2248,7 +2248,7 @@ ELSE IF ( OTYPE .EQ. 4 ) THEN ! IRET=NF90_PUT_VAR(NCID,VARID(27),J,(/J1/)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,19) IRET=NF90_PUT_VAR(NCID,VARID(2),PTNME(J),start=(/1,J1/),count=(/LEN_TRIM(PTNME(J)) ,1/)) IF (FLWW3.NE.0) IRET=NF90_PUT_VAR(NCID,VARID(3),FLWW3,(/J1,IOUT/)) IRET=NF90_PUT_VAR(NCID,VARID(4),M2KM*PTLOC(1,J),(/J1,IOUT/)) @@ -2646,17 +2646,17 @@ ! IF(NCTYPE.EQ.3) IRET = NF90_CREATE(TRIM(NCFILE), NF90_CLOBBER, NCID) !/NC4 IF(NCTYPE.EQ.4) IRET = NF90_CREATE(TRIM(NCFILE), NF90_NETCDF4, NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,20) ! ! Define generals dimensions ! IRET = NF90_DEF_DIM(NCID, 'time', DIMLN(1), DIMID(1)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,21) IRET = NF90_DEF_DIM(NCID, 'station', DIMLN(2), DIMID(2)) - CALL CHECK_ERR(IRET) - IRET = NF90_DEF_DIM(NCID, 'string16', DIMLN(3), DIMID(3)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,22) + IRET = NF90_DEF_DIM(NCID, 'string40', DIMLN(3), DIMID(3)) + CALL CHECK_ERR(IRET,23) ! ! define generals variables @@ -2664,7 +2664,7 @@ ! time IRET=NF90_DEF_VAR(NCID, 'time', NF90_DOUBLE, DIMID(1), VARID(1)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,24) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(1), 1, 1, DEFLATE) SELECT CASE (TRIM(CALTYPE)) CASE ('360_day') @@ -2682,15 +2682,15 @@ ! station IRET=NF90_DEF_VAR(NCID, 'station', NF90_INT, (/DIMID(2)/), VARID(27)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,25) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(27), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(27),'long_name','station id') IRET=NF90_PUT_ATT(NCID,VARID(27),'_FillValue',NF90_FILL_INT) IRET=NF90_PUT_ATT(NCID,VARID(27),'axis','X') -! string16 - IRET=NF90_DEF_VAR(NCID, 'string16', NF90_INT, (/DIMID(3)/), VARID(28)) - CALL CHECK_ERR(IRET) +! string40 + IRET=NF90_DEF_VAR(NCID, 'string40', NF90_INT, (/DIMID(3)/), VARID(28)) + CALL CHECK_ERR(IRET,26) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(28), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(28),'long_name','station_name number of characters') IRET=NF90_PUT_ATT(NCID,VARID(28),'_FillValue',NF90_FILL_INT) @@ -2698,16 +2698,16 @@ ! station_name IRET=NF90_DEF_VAR(NCID, 'station_name', NF90_CHAR, (/DIMID(3),DIMID(2)/), VARID(2)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,27) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(2), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(2),'long_name','station name') IRET=NF90_PUT_ATT(NCID,VARID(2),'content','XW') - IRET=NF90_PUT_ATT(NCID,VARID(2),'associates','station string16') + IRET=NF90_PUT_ATT(NCID,VARID(2),'associates','station string40') IF (FLWW3.NE.0) THEN ! wwIII param version IRET=NF90_DEF_VAR(NCID, 'WWIII_param_version', NF90_SHORT, (/DIMID(TWO),DIMID(ONE)/), VARID(3)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,28) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(3), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','WaveWatch III parameters version') IRET=NF90_PUT_ATT(NCID,VARID(3),'standard_name','WWIII_param_version') @@ -2725,7 +2725,7 @@ IF (FLAGLL) THEN ! longitude IRET=NF90_DEF_VAR(NCID, 'longitude', NF90_FLOAT, (/DIMID(TWO),DIMID(ONE)/), VARID(4)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,29) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(4), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(4),'long_name','longitude') IRET=NF90_PUT_ATT(NCID,VARID(4),'standard_name','longitude') @@ -2741,7 +2741,7 @@ ! latitude IRET=NF90_DEF_VAR(NCID, 'latitude', NF90_FLOAT, (/DIMID(TWO),DIMID(ONE)/), VARID(5)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,30) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(5), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(5),'long_name','latitude') IRET=NF90_PUT_ATT(NCID,VARID(5),'standard_name','latitude') @@ -2759,7 +2759,7 @@ ELSE ! longitude IRET=NF90_DEF_VAR(NCID, 'x', NF90_FLOAT, (/DIMID(TWO),DIMID(ONE)/), VARID(4)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,31) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(4), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(4),'long_name','x') IRET=NF90_PUT_ATT(NCID,VARID(4),'standard_name','x') @@ -2776,7 +2776,7 @@ ! latitude IRET=NF90_DEF_VAR(NCID, 'y', NF90_FLOAT, (/DIMID(TWO),DIMID(ONE)/), VARID(5)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,32) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(5), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(5),'long_name','y') IRET=NF90_PUT_ATT(NCID,VARID(5),'standard_name','y') @@ -2809,7 +2809,7 @@ ! Define specifics dimensions ! IRET = NF90_DEF_DIM(NCID, 'frequency', DIMLN(4), DIMID(4)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,33) ! ! define specifics variables @@ -2971,9 +2971,9 @@ ! Add values in netCDF file IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,34) IRET=NF90_PUT_VAR(NCID,VARID(6),FREQ(1:NK)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,35) ! @@ -2985,9 +2985,9 @@ ! Define specifics dimensions ! IRET = NF90_DEF_DIM(NCID, 'frequency', DIMLN(4), DIMID(4)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,36) IRET = NF90_DEF_DIM(NCID, 'direction', DIMLN(5), DIMID(5)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,37) ! ! define specifics variables @@ -2995,7 +2995,7 @@ !frequency IRET=NF90_DEF_VAR(NCID, 'frequency', NF90_FLOAT, (/DIMID(4)/), VARID(6)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,38) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(6), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(6),'long_name','frequency of center band') IRET=NF90_PUT_ATT(NCID,VARID(6),'standard_name','sea_surface_wave_frequency') @@ -3010,7 +3010,7 @@ !frequency1 IRET=NF90_DEF_VAR(NCID, 'frequency1', NF90_FLOAT, (/DIMID(4)/), VARID(7)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,39) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(7), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(7),'long_name','frequency of lower band') IRET=NF90_PUT_ATT(NCID,VARID(7),'standard_name','frequency_of_lower_band') @@ -3026,7 +3026,7 @@ !frequency2 IRET=NF90_DEF_VAR(NCID, 'frequency2', NF90_FLOAT, (/DIMID(4)/), VARID(8)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,40) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(8), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(8),'long_name','frequency of upper band') IRET=NF90_PUT_ATT(NCID,VARID(8),'standard_name','frequency_of_upper_band') @@ -3042,7 +3042,7 @@ !direction IRET=NF90_DEF_VAR(NCID, 'direction', NF90_FLOAT, (/DIMID(5)/), VARID(9)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,41) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(9), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(9),'long_name','sea surface wave to direction') IRET=NF90_PUT_ATT(NCID,VARID(9),'standard_name','sea_surface_wave_to_direction') @@ -3062,7 +3062,7 @@ !Efth IRET=NF90_DEF_VAR(NCID,'efth',NF90_FLOAT,(/DIMID(5),DIMID(4),DIMID(TWO),DIMID(ONE)/),VARID(10)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,42) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(10), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(10),'long_name',& 'sea surface wave directional variance spectral density') @@ -3085,7 +3085,7 @@ !d IRET=NF90_DEF_VAR(NCID, 'dpt', NF90_FLOAT, (/ DIMID(TWO),DIMID(ONE) /), VARID(11)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,43) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(11), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(11),'long_name','depth') IRET=NF90_PUT_ATT(NCID,VARID(11),'standard_name','depth') @@ -3101,7 +3101,7 @@ !U10 IRET=NF90_DEF_VAR(NCID, 'wnd', NF90_FLOAT, (/ DIMID(TWO),DIMID(ONE) /), VARID(12)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,44) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(12), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(12),'long_name','wind speed at 10m') IRET=NF90_PUT_ATT(NCID,VARID(12),'standard_name','wind_speed') @@ -3116,7 +3116,7 @@ IRET=NF90_PUT_ATT(NCID,VARID(12),'associates','time station') !Dir IRET=NF90_DEF_VAR(NCID, 'wnddir', NF90_FLOAT, (/ DIMID(TWO),DIMID(ONE) /), VARID(13)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,45) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(13), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(13),'long_name','wind direction') IRET=NF90_PUT_ATT(NCID,VARID(13),'standard_name','wind_from_direction') @@ -3137,7 +3137,7 @@ !Uc IRET=NF90_DEF_VAR(NCID, 'cur', NF90_FLOAT, (/ DIMID(TWO),DIMID(ONE) /), VARID(14)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,46) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(14), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(14),'long_name','sea water speed') IRET=NF90_PUT_ATT(NCID,VARID(14),'standard_name','sea_water_speed') @@ -3153,7 +3153,7 @@ !Dir IRET=NF90_DEF_VAR(NCID, 'curdir', NF90_FLOAT, (/ DIMID(TWO),DIMID(ONE) /), VARID(15)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,47) !/NC4 IF (NCTYPE.EQ.4) IRET=NF90_DEF_VAR_DEFLATE(NCID, VARID(15), 1, 1, DEFLATE) IRET=NF90_PUT_ATT(NCID,VARID(15),'long_name','direction from of sea water velocity') IRET=NF90_PUT_ATT(NCID,VARID(15),'standard_name','direction_of_sea_water_velocity') @@ -3175,15 +3175,15 @@ ! Add values in netCDF file IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,48) IRET=NF90_PUT_VAR(NCID,VARID(6),FREQ(1:NK)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,49) IRET=NF90_PUT_VAR(NCID,VARID(7),FREQ1(1:NK)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,50) IRET=NF90_PUT_VAR(NCID,VARID(8),FREQ2(1:NK)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,51) IRET=NF90_PUT_VAR(NCID,VARID(9),DIR(1:NTH)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,52) @@ -3197,7 +3197,7 @@ ! Define specifics dimensions ! IRET = NF90_DEF_DIM(NCID, 'npart', DIMLN(4), DIMID(4)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,53) ! ! define specifics variables @@ -3433,7 +3433,7 @@ ! NF90_ENDDEF function IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,54) ! ! ... ITYPE = 2 AND OTYPE = 1 @@ -3541,7 +3541,7 @@ ! NF90_ENDDEF function IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,55) ! ! ... ITYPE = 2 AND OTYPE = 2 @@ -3675,7 +3675,7 @@ ! NF90_ENDDEF function IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,56) ! @@ -3764,7 +3764,7 @@ ! NF90_ENDDEF function IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,57) ! @@ -3853,7 +3853,7 @@ ! NF90_ENDDEF function IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,58) ! @@ -3970,7 +3970,7 @@ ! NF90_ENDDEF function IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,59) ! @@ -4043,7 +4043,7 @@ ! NF90_ENDDEF function IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,60) ! ! ... ITYPE = 3 AND OTYPE = 2 @@ -4053,7 +4053,7 @@ ! Define specifics dimensions ! IRET = NF90_DEF_DIM(NCID, 'frequency', DIMLN(4), DIMID(4)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,61) ! ! define specifics variables @@ -4334,9 +4334,9 @@ ! Add values in netCDF file IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,62) IRET=NF90_PUT_VAR(NCID,VARID(6),FREQ(1:NK)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,63) ! @@ -4347,7 +4347,7 @@ ! Define specifics dimensions ! IRET = NF90_DEF_DIM(NCID, 'frequency', DIMLN(4), DIMID(4)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,64) ! ! define specifics variables @@ -4628,9 +4628,9 @@ ! Add values in netCDF file IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,65) IRET=NF90_PUT_VAR(NCID,VARID(6),FREQ(1:NK)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,66) ! @@ -4642,7 +4642,7 @@ ! IRET = NF90_DEF_DIM(NCID, 'frequency', DIMLN(4), DIMID(4)) IRET = NF90_DEF_DIM(NCID, 'direction', DIMLN(5), DIMID(5)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,67) ! ! define specifics variables @@ -4947,15 +4947,15 @@ ! Add values in netCDF file IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,68) IRET=NF90_PUT_VAR(NCID,VARID(6),FREQ(1:NK)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,69) IRET=NF90_PUT_VAR(NCID,VARID(7),FREQ1(1:NK)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,70) IRET=NF90_PUT_VAR(NCID,VARID(8),FREQ2(1:NK)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,71) IRET=NF90_PUT_VAR(NCID,VARID(9),DIR(1:NTH)) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET,72) ! END IF ! @@ -4965,7 +4965,7 @@ !============================================================================== - SUBROUTINE CHECK_ERR(IRET) + SUBROUTINE CHECK_ERR(IRET,ICODE) USE NETCDF USE W3ODATMD, ONLY: NDSE @@ -4973,13 +4973,15 @@ IMPLICIT NONE - INTEGER IRET + INTEGER IRET, ICODE IF (IRET .NE. NF90_NOERR) THEN WRITE(NDSE,*) ' *** WAVEWATCH III ERROR IN OUNP :' WRITE(NDSE,*) ' NETCDF ERROR MESSAGE: ' WRITE(NDSE,*) NF90_STRERROR(IRET) - CALL EXTCDE ( 59 ) + WRITE(NDSE,*) ' ICODE: ' + WRITE(NDSE,*) ICODE + CALL EXTCDE ( ICODE ) END IF RETURN From 9735c7de7928e592bbead898f7ebe2f3b01c40d3 Mon Sep 17 00:00:00 2001 From: Mickael Accensi <49198861+mickaelaccensi@users.noreply.github.com> Date: Fri, 23 Oct 2020 16:40:22 +0200 Subject: [PATCH 56/84] Bugfix/st4wcf (#261) * add feature for fixed filename with ndates=0 for ww3_ounf * bugfix for netcdf file id allocation * remove extra line due to copy/paste error * change vers from 7.00 to 7.01 add comment * add WCOR to switch list * add check on array index * revert comment on wcc and wcf in manual * Update of IS2 default parameters and associated change to regtest. * correct SSDSC array to re-enable T500 * First cleanup before introducing Romero's dissipation * Merged STX from Romero into ST4 ... running but not same result yet * Fixed bug in Romero option: now working OK. * Minor update * Updated the method for computing modulation * Bug correction: MSSSUM was not computed in some cases * Final but correction for MSSSUM . * Corrected one more bug in the MSSSUM calculation ... * Added namelist parameters that were missing in SDS4 * Corrected for bug in additional turbulence dissipation * Since I was at it, I added also the effect of water viscosity on the dissipation * This reverts commits which are in feature/ST4tail: 82837c726a8b78e5ce630c6450d713b8892b0929 337fe6de91f62e294e36e98d19a8292c53d25848 9816fdb924972e892fde443c438db86eb071ba3b 983f5f6af3f2d72a3f6425c8dac2af3b014fde80 ac5c363e8b7683f8ebda51b659dece0cfded5b7d 21c7316a83e5e5bdfda385eb7a939e2fd9b23268 9b9e2e8713810cc4ec75e3ba8d39a70965a19347 6c42cef9e4b860d3a8cfe6d4781f6b8d40541662 0e0ba5e6915c847716e8860359016693876106ae 85836924313b56aed6357a518b345cced123f80d 8c561707f1a459e7907d7dd89ead3dca53a96fa0 * Revert "Update of IS2 default parameters and associated change to regtest." This reverts commit f2a653b69b1f27fb498434a9ef79e1a0c76edf8a. * correct conflict in previous merge * manually merge noaa/develop into develop to integrate minor changes lost by past mistakes with git commands * correct bug related to b4b problem on WCF it was due to missing variables in out_grd and missing initialization of some variables * set initialize under ST4 switch Co-authored-by: ardhuin Co-authored-by: Fabrice Ardhuin --- model/ftn/w3iogrmd.ftn | 11 +++++++---- model/ftn/w3src4md.ftn | 7 ++++++- model/ftn/w3srcemd.ftn | 2 ++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/model/ftn/w3iogrmd.ftn b/model/ftn/w3iogrmd.ftn index 4808b1a0b..866cd8f08 100644 --- a/model/ftn/w3iogrmd.ftn +++ b/model/ftn/w3iogrmd.ftn @@ -67,7 +67,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERGRD = '2020-06-18' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERGRD = '2020-10-19' CHARACTER(LEN=35), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III MODEL DEFINITION FILE' !/ @@ -83,7 +83,7 @@ !/ | H. L. Tolman | !/ ! F. Ardhuin ! !/ | FORTRAN 90 | -!/ | Last update : 15-Apr-2020 | +!/ | Last update : 19-Oct-2020 | !/ +-----------------------------------+ !/ !/ 14-Jan-1999 : Distributed FORTRAN 77 version. ( version 1.18 ) @@ -147,6 +147,7 @@ !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) !/ 18-Jun-2020 : Adds 360-day calendar option ( version 7.08 ) +!/ 19-Oct-2020 : Add AIRCMIN, AIRGB parameters ( version 7.08 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -642,7 +643,8 @@ FLCK, FLSOU, FLBPI, FLBPO, CLATS, CLATIS, CTHG0S, & STEXU, STEYU, STEDU, IICEHMIN, IICEHINIT, IICEDISP, & ICESCALES(1:4), CALTYPE, CMPRTRCK, IICEHFAC, IICEHDISP,& - IICEDDISP, IICEFDISP, BTBETA + IICEDDISP, IICEFDISP, BTBETA, & + AAIRCMIN, AAIRGB WRITE(NDSM)GRIDSHIFT !/SEC1 WRITE (NDSM) NITERSEC1 @@ -782,7 +784,8 @@ FLCTH, FLCK, FLSOU, FLBPI, FLBPO, CLATS, CLATIS, & CTHG0S, STEXU, STEYU, STEDU, IICEHMIN, IICEHINIT, & IICEDISP, ICESCALES(1:4), CALTYPE, CMPRTRCK, IICEHFAC, & - IICEDDISP, IICEHDISP, IICEFDISP, BTBETA + IICEDDISP, IICEHDISP, IICEFDISP, BTBETA, & + AAIRCMIN, AAIRGB !/DEBUGIOGR WRITE(740+IAPROC,*) 'W3IOGR, step 7.14' !/DEBUGIOGR FLUSH(740+IAPROC) diff --git a/model/ftn/w3src4md.ftn b/model/ftn/w3src4md.ftn index a9a79d5b6..fb167b0f7 100755 --- a/model/ftn/w3src4md.ftn +++ b/model/ftn/w3src4md.ftn @@ -2189,7 +2189,6 @@ ! times wavelength times a (a=5 in Reul&Chapron JGR 2003) times dk ! DO IK=1,MIN(FLOOR(AAIRCMIN),NK) -! Need to extrapolate above NK if necessary ... to be added later. C=SIG(IK)/K(IK) IS0=(IK-1)*NTH COEF4(IK) = C*C*SUM(BRLAMBDA(IS0+1:IS0+NTH)) & @@ -2201,6 +2200,12 @@ ! SSDSC(7) * DDEN(IK)/(DTH*SIG(IK)*CG(IK)) ! NB: SSDSC(7) is WHITECAPWIDTH END DO +! Need to extrapolate above NK if necessary ... to be added later. + DO IK=MIN(FLOOR(AAIRCMIN),NK),NK + COEF4(IK)=0. + COEF5(IK)=0. + END DO + !/ IF ( FLOGRD(5,7) ) THEN ! diff --git a/model/ftn/w3srcemd.ftn b/model/ftn/w3srcemd.ftn index d9f90e173..159d2b4c7 100644 --- a/model/ftn/w3srcemd.ftn +++ b/model/ftn/w3srcemd.ftn @@ -643,7 +643,9 @@ !/DEBUGSRC WRITE(740+IAPROC,*) 'W3SRCE start USTAR=', USTAR !/DEBUGSRC END IF +!/ST4 DLWMEAN= 0. !/ST4 BRLAMBDA(:)=0. +!/ST4 WHITECAP(:)=0. ! ! 1.c Set mean parameters ! From e756361cee6c0e3bfac064376fcec3eba986719d Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Thu, 5 Nov 2020 16:08:39 +0000 Subject: [PATCH 57/84] UKMO Staging (Oct 2020) (#264) * Fb oasis t+0 (#13) In the original code a coupling lag had to be used, coupling took place at the last time step but not at the first, and the coupling fields had to be written in an oasis restart file. With this ticket, the program can run in a different way by not using a coupling lag, coupling taking place at the first time step but not the last, and the coupling fields are written in the wave restart file - no extra oasis restart file needed. * Fb uprstr inp (#15) Enhancement to improve the way in which input data is read in and logged by the ww3_uprstr program: * read in variables specific to the update process selected * output the values provided in the ww3_uprstr.out log file * update the .inp template file and regtests to improve clarity and work with the changes * add capability to read inputs from a namelist (ww3_uprstr.nml) file * Bf unconforming where in coupling routines (#17) * Fix non-conforming WHERE statements in coupled routines * Stop comparing history lines in OASIS rmp files * Changes for efficient SMC grid coupling (#16) * Changes for efficient SMC grid coupling * Ensure consistency between SMC coupled test nml and inp files Co-authored-by: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Co-authored-by: Andy Saulter <48921142+ukmo-ansaulter@users.noreply.github.com> --- model/bin/make_makefile.sh | 3 +- model/bin/ww3_from_ftp.sh | 5 +- model/ftn/w3agcmmd.ftn | 11 +- model/ftn/w3fldsmd.ftn | 8 +- model/ftn/w3igcmmd.ftn | 4 +- model/ftn/w3initmd.ftn | 437 ++- model/ftn/w3iogomd.ftn | 34 +- model/ftn/w3iorsmd.ftn | 313 +- model/ftn/w3iosfmd.ftn | 4 +- model/ftn/w3nmlmultimd.ftn | 20 +- model/ftn/w3nmlshelmd.ftn | 16 +- model/ftn/w3nmluprstrmd.ftn | 529 +++ model/ftn/w3oacpmd.ftn | 223 +- model/ftn/w3odatmd.ftn | 16 +- model/ftn/w3ogcmmd.ftn | 52 +- model/ftn/w3wavemd.ftn | 63 +- model/ftn/ww3_shel.ftn | 80 +- model/ftn/ww3_uprstr.ftn | 121 +- model/inp/ww3_shel.inp | 7 +- model/inp/ww3_uprstr.inp | 58 +- model/nml/ww3_shel.nml | 7 + model/nml/ww3_uprstr.nml | 113 + regtests/bin/matrix.base | 35 +- regtests/bin/matrix.comp | 3 + regtests/bin/run_test | 12 +- regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.inp | 69 +- regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.nml | 112 + regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.inp | 69 +- regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.nml | 112 + regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.inp | 83 +- regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.nml | 113 + regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.inp | 83 +- regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.nml | 113 + .../ww3_ta1/input_UPD2_U_cap/ww3_uprstr.inp | 83 +- .../ww3_ta1/input_UPD2_U_cap/ww3_uprstr.nml | 113 + regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.inp | 83 +- regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.nml | 113 + regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.inp | 83 +- regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.nml | 113 + .../ww3_ta1/input_UPD3_U_cap/ww3_uprstr.inp | 83 +- .../ww3_ta1/input_UPD3_U_cap/ww3_uprstr.nml | 113 + regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp | 77 +- regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.nml | 114 + regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp | 77 +- regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.nml | 114 + .../ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp | 77 +- .../ww3_ta1/input_UPD5_U_cap/ww3_uprstr.nml | 114 + regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp | 77 +- regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.nml | 114 + regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp | 77 +- regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.nml | 114 + .../ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp | 77 +- .../ww3_ta1/input_UPD6_U_cap/ww3_uprstr.nml | 114 + regtests/ww3_tp2.14/info | 50 +- regtests/ww3_tp2.14/input/BrestISides.dat | 3016 ++++++++++++++++ regtests/ww3_tp2.14/input/BrestJSides.dat | 3072 +++++++++++++++++ regtests/ww3_tp2.14/input/BrestObstrs.dat | 2890 ++++++++++++++++ regtests/ww3_tp2.14/input/BrestSMCels.dat | 2890 ++++++++++++++++ .../ww3_tp2.14/input/TOYNAMELIST.nam.OASACM4 | 14 + .../ww3_tp2.14/input/TOYNAMELIST.nam.OASACM5 | 14 + .../ww3_tp2.14/input/TOYNAMELIST.nam.OASACM6 | 14 + regtests/ww3_tp2.14/input/namcouple.OASACM4 | 135 + regtests/ww3_tp2.14/input/namcouple.OASACM5 | 135 + regtests/ww3_tp2.14/input/namcouple.OASACM6 | 135 + regtests/ww3_tp2.14/input/namelists_BREST.nml | 2 + regtests/ww3_tp2.14/input/prep_env.sh | 12 +- regtests/ww3_tp2.14/input/switch_OASACM3 | 1 + regtests/ww3_tp2.14/input/switch_OASACM4 | 1 + regtests/ww3_tp2.14/input/switch_OASACM5 | 1 + regtests/ww3_tp2.14/input/switch_OASACM6 | 1 + .../ww3_tp2.14/input/ww3_grid_OASACM6.inp | 290 ++ .../ww3_tp2.14/input/ww3_grid_OASACM6.nml | 319 ++ .../ww3_tp2.14/input/ww3_ounf.inp-OASACM6 | 42 + .../ww3_tp2.14/input/ww3_shel_OASACM3.inp | 153 + .../ww3_tp2.14/input/ww3_shel_OASACM3.nml | 337 ++ .../ww3_tp2.14/input/ww3_shel_OASACM4.inp | 152 + .../ww3_tp2.14/input/ww3_shel_OASACM4.nml | 340 ++ .../ww3_tp2.14/input/ww3_shel_OASACM5.inp | 152 + .../ww3_tp2.14/input/ww3_shel_OASACM5.nml | 339 ++ .../ww3_tp2.14/input/ww3_shel_OASACM6.inp | 152 + .../ww3_tp2.14/input/ww3_shel_OASACM6.nml | 340 ++ 81 files changed, 18881 insertions(+), 976 deletions(-) create mode 100644 model/ftn/w3nmluprstrmd.ftn create mode 100644 model/nml/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD2_U_cap/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD3_U_cap/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.nml create mode 100644 regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.nml create mode 100644 regtests/ww3_tp2.14/input/BrestISides.dat create mode 100644 regtests/ww3_tp2.14/input/BrestJSides.dat create mode 100644 regtests/ww3_tp2.14/input/BrestObstrs.dat create mode 100644 regtests/ww3_tp2.14/input/BrestSMCels.dat create mode 100755 regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM4 create mode 100755 regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM5 create mode 100755 regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM6 create mode 100755 regtests/ww3_tp2.14/input/namcouple.OASACM4 create mode 100755 regtests/ww3_tp2.14/input/namcouple.OASACM5 create mode 100755 regtests/ww3_tp2.14/input/namcouple.OASACM6 create mode 100644 regtests/ww3_tp2.14/input/namelists_BREST.nml create mode 100755 regtests/ww3_tp2.14/input/switch_OASACM3 create mode 100755 regtests/ww3_tp2.14/input/switch_OASACM4 create mode 100755 regtests/ww3_tp2.14/input/switch_OASACM5 create mode 100755 regtests/ww3_tp2.14/input/switch_OASACM6 create mode 100755 regtests/ww3_tp2.14/input/ww3_grid_OASACM6.inp create mode 100644 regtests/ww3_tp2.14/input/ww3_grid_OASACM6.nml create mode 100755 regtests/ww3_tp2.14/input/ww3_ounf.inp-OASACM6 create mode 100755 regtests/ww3_tp2.14/input/ww3_shel_OASACM3.inp create mode 100644 regtests/ww3_tp2.14/input/ww3_shel_OASACM3.nml create mode 100755 regtests/ww3_tp2.14/input/ww3_shel_OASACM4.inp create mode 100644 regtests/ww3_tp2.14/input/ww3_shel_OASACM4.nml create mode 100755 regtests/ww3_tp2.14/input/ww3_shel_OASACM5.inp create mode 100644 regtests/ww3_tp2.14/input/ww3_shel_OASACM5.nml create mode 100755 regtests/ww3_tp2.14/input/ww3_shel_OASACM6.inp create mode 100644 regtests/ww3_tp2.14/input/ww3_shel_OASACM6.nml diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 15545e493..6b93f072f 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -1099,7 +1099,7 @@ source="$memcode $pdlibcode $pdlibyow $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $uostmd" IO='w3iogrmd w3iogomd w3iorsmd' aux="constants w3servmd w3timemd w3arrymd w3dispmd w3gsrumd" - aux="$aux w3parall" ;; + aux="$aux w3parall w3nmluprstrmd" ;; esac # if esmf is included in program name, then @@ -1374,6 +1374,7 @@ 'W3NMLBOUNCMD' ) modtest=w3nmlbouncmd.o ;; 'W3NMLSHELMD' ) modtest=w3nmlshelmd.o ;; 'W3NMLGRIDMD' ) modtest=w3nmlgridmd.o ;; + 'W3NMLUPRSTRMD' ) modtest=w3nmluprstrmd.o ;; 'W3NETCDF' ) modtest=w3netcdf.o ;; 'YOWFUNCTION' ) modtest=yowfunction.o ;; 'YOWDATAPOOL' ) modtest=yowdatapool.o ;; diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index b7723efc5..14da5d2d7 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -36,8 +36,8 @@ cp -r data_regtests/ww3_tp2.12/input/* regtests/ww3_tp2.12/input/ cp -r data_regtests/ww3_tp2.12/input_be/* regtests/ww3_tp2.12/input_be/ cp -r data_regtests/ww3_tp2.12/input_le/* regtests/ww3_tp2.12/input_le/ cp -r data_regtests/ww3_tp2.14/input/r-ww3.nc.OAS*CM regtests/ww3_tp2.14/input/ -cp -r data_regtests/ww3_tp2.14/input/r-ww3.nc.OASACM regtests/ww3_tp2.14/input/OASACM2 cp -r data_regtests/ww3_tp2.14/input/r-ww3.nc.OASACM regtests/ww3_tp2.14/input/r-ww3.nc.OASACM2 +cp -r data_regtests/ww3_tp2.14/input/rmp_* regtests/ww3_tp2.14/input/ if [ ! -d regtests/ww3_tp2.14/input/oasis3-mct/doc ] then mkdir regtests/ww3_tp2.14/input/oasis3-mct/doc @@ -46,6 +46,9 @@ cp -r data_regtests/ww3_tp2.14/input/oasis3-mct/doc/* regtests/ww3_tp2.14/input/ cp -r data_regtests/ww3_tp2.14/input/toy/*.nc.OAS*CM regtests/ww3_tp2.14/input/toy/ cp -r data_regtests/ww3_tp2.14/input/toy/r-toy.nc.OASACM regtests/ww3_tp2.14/input/toy/r-toy.nc.OASACM2 cp -r data_regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM2 +cp -r data_regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM4 +cp -r data_regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM5 +cp -r data_regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM6 cp -r data_regtests/ww3_tp2.14/input/toy/*.nc regtests/ww3_tp2.14/input/toy/ cp -r data_regtests/ww3_tp2.17/input/* regtests/ww3_tp2.17/input/ diff --git a/model/ftn/w3agcmmd.ftn b/model/ftn/w3agcmmd.ftn index d7b840004..d7ab969d6 100644 --- a/model/ftn/w3agcmmd.ftn +++ b/model/ftn/w3agcmmd.ftn @@ -136,7 +136,6 @@ DO JSEA=1, NSEAL ISEA=IAPROC+(JSEA-1)*NAPROC IF(CY(ISEA) /= UNDEF) TMP(JSEA)=CY(ISEA) - TMP(JSEA)=CY(ISEA) END DO RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) @@ -146,7 +145,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_ACHA') THEN TMP(1:NSEAL) = 0.0 - WHERE(CHARN /= UNDEF) TMP=CHARN + WHERE(CHARN(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=CHARN(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -155,7 +154,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3__AHS') THEN TMP(1:NSEAL) = 0.0 - WHERE(HS /= UNDEF) TMP=HS + WHERE(HS(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=HS(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -164,7 +163,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3___FP') THEN TMP(1:NSEAL) = 0.0 - WHERE(FP0 /= UNDEF) TMP=FP0 + WHERE(FP0(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=FP0(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -173,7 +172,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3___TP') THEN TMP(1:NSEAL) = 0.0 - WHERE(FP0 /= UNDEF) TMP=1./FP0 + WHERE(FP0(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=1./FP0(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -182,7 +181,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3__FWS') THEN TMP(1:NSEAL) = 0.0 - WHERE(TWS /= UNDEF) TMP=TWS + WHERE(TWS(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=TWS(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF diff --git a/model/ftn/w3fldsmd.ftn b/model/ftn/w3fldsmd.ftn index 0f59832b1..e0478f5de 100644 --- a/model/ftn/w3fldsmd.ftn +++ b/model/ftn/w3fldsmd.ftn @@ -919,7 +919,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 24-Apr-2015 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 15-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -929,6 +929,7 @@ !/ 26-Dec-2012 : Modified obsolete declarations. ( version 4.11 ) !/ 24-Apr-2015 : Adding OASIS coupling calls ( version 5.07 ) !/ (M. Accensi & F. Ardhuin, IFREMER) +!/ 25-Sep-2020 : Receive coupled fields at T+0 ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1020,7 +1021,7 @@ !/ !/S USE W3SERVMD, ONLY: STRACE USE W3TIMEMD -!/OASIS USE W3OACPMD, ONLY: ID_OASIS_TIME +!/OASIS USE W3OACPMD, ONLY: ID_OASIS_TIME, CPLT0 !/OASACM USE W3AGCMMD, ONLY: RCV_FIELDS_FROM_ATMOS !/OASOCM USE W3OGCMMD, ONLY: RCV_FIELDS_FROM_OCEAN !/OASICM USE W3IGCMMD, ONLY: RCV_FIELDS_FROM_ICE @@ -1164,7 +1165,8 @@ !/OASIS IF (FLCOUPL) THEN !/OASIS ! Do not receive coupling fields at the end of the first integration time in case of !/OASIS ! forcing with a non interpolated field (like lev, ice, ...) -!/OASIS IF ((ID_OASIS_TIME.EQ.0 .AND. FLFRST) .OR. (ID_OASIS_TIME.GT.0)) THEN +!/OASIS IF ( (ID_OASIS_TIME.EQ.0 .AND. ( FLFRST .OR. CPLT0 )) .OR. & +!/OASIS (ID_OASIS_TIME.GT.0)) THEN ! !/OASACM ! Getting U10 (FXN) and V10 (FYN) from atmospheric model !/OASACM CALL RCV_FIELDS_FROM_ATMOS(COUPL_COMM, & diff --git a/model/ftn/w3igcmmd.ftn b/model/ftn/w3igcmmd.ftn index ed7ba6e49..793429a8b 100644 --- a/model/ftn/w3igcmmd.ftn +++ b/model/ftn/w3igcmmd.ftn @@ -131,13 +131,13 @@ CASE ('WW3_TWIX') TMP(1:NSEAL) = 0.0 - WHERE(TAUICE(:,1) /= UNDEF) TMP(:)=TAUICE(:,1) + WHERE(TAUICE(1:NSEAL,1) /= UNDEF) TMP(1:NSEAL)=TAUICE(1:NSEAL,1) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) CASE ('WW3_TWIY') TMP(1:NSEAL) = 0.0 - WHERE(TAUICE(:,2) /= UNDEF) TMP(:)=TAUICE(:,2) + WHERE(TAUICE(1:NSEAL,2) /= UNDEF) TMP(1:NSEAL)=TAUICE(1:NSEAL,2) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 7b3565874..051215bd0 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 05-Jun-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 28-Dec-2004 : Origination (out of W3WAVEMD). ( version 3.06 ) @@ -57,6 +57,7 @@ !/ 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 ) +!/ 25-Sep-2020 : Extra fields for coupling restart ( version 7.xx ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -327,9 +328,9 @@ USE CONSTANTS !/MEMCHECK USE MallocInfo_m !/ - USE W3GDATMD, ONLY: W3SETG, P2MSF, E3DF, US3DF, USSPF, RSTYPE + USE W3GDATMD, ONLY: W3SETG, RSTYPE USE W3WDATMD, ONLY: W3SETW, W3DIMW - USE W3ADATMD, ONLY: W3SETA, W3DIMA, P2SMS, HS, EF, US3D, USSP + USE W3ADATMD, ONLY: W3SETA, W3DIMA !/MEMCHECK USE W3ADATMD, ONLY: MALLINFOS USE W3IDATMD, ONLY: W3SETI, W3DIMI USE W3ODATMD, ONLY: W3SETO, W3DMO5 @@ -1949,6 +1950,7 @@ !/ ------------------------------------------------------------------- / ! !/MPI USE W3ADATMD, ONLY: W3XDMA, W3SETA, W3XETA +!/MPI USE W3IORSMD, ONLY: OARST USE W3SERVMD, ONLY: EXTCDE !/S USE W3SERVMD, ONLY: STRACE !/ @@ -1974,12 +1976,12 @@ !/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 PTM1, PT1, PT2, PEP, WBT, CX, CY !/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 NOGRP, NGRPP, NOGE, FLOGRR !/MPI USE W3ODATMD, ONLY: OUTPTS, NRQGO, NRQGO2, IRQGO, IRQGO2, & !/MPI FLOGRD, NRQPO, NRQPO2, IRQPO1, IRQPO2, & !/MPI NOPTS, IPTINT, NRQRS, IRQRS, NBLKRS, & @@ -2012,6 +2014,7 @@ !/MPI ISEA, ISPROC, K, NRQMAX !/S INTEGER, SAVE :: IENT !/MPI LOGICAL :: FLGRDALL(NOGRP,NGRPP) +!/MPI LOGICAL :: FLGRDARST(NOGRP,NGRPP) !/MPIT CHARACTER(LEN=5) :: STRING !/ !/ ------------------------------------------------------------------- / @@ -2023,6 +2026,7 @@ !/MPI DO J=1, NOGRP !/MPI DO K=1, NGRPP !/MPI FLGRDALL (J,K) = (FLOGRD(J,K) .OR. FLOGR2(J,K)) +!/MPI FLGRDARST(J,K) = (FLGRDALL(J,K) .OR. FLOGRR(J,K)) !/MPI END DO !/MPI END DO ! @@ -2851,7 +2855,11 @@ ! ! 1.b Setting up expanded arrays ! -!/MPI CALL W3XDMA ( IMOD, NDSE, NDST, FLGRDALL ) +!/MPI IF (NAPFLD .EQ. NAPRST) THEN +!/MPI CALL W3XDMA ( IMOD, NDSE, NDST, FLGRDARST ) +!/MPI ELSE +!/MPI CALL W3XDMA ( IMOD, NDSE, NDST, FLGRDALL ) +!/MPI ENDIF ! ! 1.c Receives of fields ! @@ -3661,14 +3669,19 @@ !/MPI IROOT = NAPRST - 1 ! !/MPI IF ( FLOUT(4) .OR. FLOUT(8) ) THEN -!/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRS(3*NAPROC) ) +!/MPI IF (OARST) THEN +!/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRS(30*NAPROC) ) +!/MPI ELSE +!/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRS(3*NAPROC) ) +!/MPI ENDIF !/MPI IRQRS => OUTPTS(IMOD)%OUT4%IRQRS ! -! 2.b Fields at end of file (allways) +! 2.b Fields at end of file (always) ! !/MPIT WRITE (NDST,9020) ! -!/MPI IF ( IAPROC.NE.NAPRST .AND. IAPROC.LE.NAPROC ) THEN +!/MPI IF ( IAPROC.LE.NAPROC ) THEN +!/MPI IF ( IAPROC.NE.NAPRST ) THEN ! !/MPI IH = IH + 1 !/MPI IT = IT0 + 1 @@ -3687,8 +3700,208 @@ !/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 END IF +! +!/MPI IF (OARST) THEN +!/MPI IF ( FLOGRR( 1, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 4 +!/MPI CALL MPI_SEND_INIT (CX(IAPROC), 1, WW3_FIELD_VEC, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S CX', IROOT, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 5 +!/MPI CALL MPI_SEND_INIT (CY(IAPROC), 1, WW3_FIELD_VEC, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S CY', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 1, 9) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 6 +!/MPI CALL MPI_SEND_INIT (ICEF(IAPROC), 1, WW3_FIELD_VEC, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S IF', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 2, 1) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 7 +!/MPI CALL MPI_SEND_INIT (HS (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S HS', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 2, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 8 +!/MPI CALL MPI_SEND_INIT (WLM (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S WL', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 2, 4) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 9 +!/MPI CALL MPI_SEND_INIT (T0M1(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9011) IH, 'S T0', IROOT, IT, IRQRS(IH), IERR +!/MPI ENDIF +! +!/MPI IF ( FLOGRR( 2, 6) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 10 +!/MPI CALL MPI_SEND_INIT (FP0 (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S FP', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 2, 7) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 11 +!/MPI CALL MPI_SEND_INIT (THM (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S TH', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 5, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 12 +!/MPI CALL MPI_SEND_INIT (CHARN(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S CH', IROOT, IT, IRQRS(IH), IERR +!/MPI ENDIF +! +!/MPI IF ( FLOGRR( 5, 5) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 13 +!/MPI CALL MPI_SEND_INIT (TAUWIX(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S WX', IROOT, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 14 +!/MPI CALL MPI_SEND_INIT (TAUWIY(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S WY', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 5, 11) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 15 +!/MPI CALL MPI_SEND_INIT (TWS (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S TS', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 16 +!/MPI CALL MPI_SEND_INIT (TAUOX(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S OX', IROOT, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 17 +!/MPI CALL MPI_SEND_INIT (TAUOY(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S OY', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 3) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 18 +!/MPI CALL MPI_SEND_INIT (BHD (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S BH', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 4) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 19 +!/MPI CALL MPI_SEND_INIT (PHIOC(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S PH', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 5) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 20 +!/MPI CALL MPI_SEND_INIT (TUSX (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S UX', IROOT, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 21 +!/MPI CALL MPI_SEND_INIT (TUSY (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S UY', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 6) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 22 +!/MPI CALL MPI_SEND_INIT (USSX (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S SX', IROOT, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 23 +!/MPI CALL MPI_SEND_INIT (USSY (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S SY', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6,10) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 24 +!/MPI CALL MPI_SEND_INIT (TAUICE(1,1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S I1', IROOT, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 25 +!/MPI CALL MPI_SEND_INIT (TAUICE(1,2), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S I2', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 7, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 26 +!/MPI CALL MPI_SEND_INIT (UBA (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S BA', IROOT, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 27 +!/MPI CALL MPI_SEND_INIT (UBD (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S BD', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 7, 4) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 28 +!/MPI CALL MPI_SEND_INIT (PHIBBL(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S PB', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 7, 5) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 29 +!/MPI CALL MPI_SEND_INIT (TAUBBL(1,1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S T1', IROOT, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 30 +!/MPI CALL MPI_SEND_INIT (TAUBBL(1,2), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S T2', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +!/MPI ENDIF +! +!/MPI IF ( IAPROC .EQ. NAPRST ) THEN +!/MPI IF (OARST) THEN +!/MPI IF (NAPRST .NE. NAPFLD) CALL W3XDMA ( IMOD, NDSE, NDST, FLOGRR ) +!/MPI CALL W3XETA ( IMOD, NDSE, NDST ) +!/MPI ENDIF ! -!/MPI ELSE IF ( IAPROC .EQ. NAPRST ) THEN !/MPI DO I0=1, NAPROC !/MPI IFROM = I0 - 1 !/MPI IF ( I0 .NE. IAPROC ) THEN @@ -3710,14 +3923,214 @@ !/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 IF (OARST) THEN +!/MPI IF ( FLOGRR( 1, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 4 +!/MPI CALL MPI_RECV_INIT (CX (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R CX', IFROM, IT, IRQRS(IH), IERR +!/MPI IH = IT0 + 5 +!/MPI IT = IT + 1 +!/MPI CALL MPI_RECV_INIT (CY (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R CY', IFROM, IT, IRQRS(IH), IERR !/MPI END IF ! -!/MPI END DO +!/MPI IF ( FLOGRR( 1, 9) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 6 +!/MPI CALL MPI_RECV_INIT (ICEF (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R IF', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 2, 1) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 7 +!/MPI CALL MPI_RECV_INIT (HS (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R HS', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 2, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 8 +!/MPI CALL MPI_RECV_INIT (WLM (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R WL', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 2, 4) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 9 +!/MPI CALL MPI_RECV_INIT (T0M1(I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R T0', IFROM, IT, IRQRS(IH), IERR +!/MPI ENDIF +! +!/MPI IF ( FLOGRR( 2, 6) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 10 +!/MPI CALL MPI_RECV_INIT (FP0 (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 IF ( FLOGRR( 2, 7) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 11 +!/MPI CALL MPI_RECV_INIT (THM (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R TH', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 5, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 12 +!/MPI CALL MPI_RECV_INIT (CHARN(I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R CH', IFROM, IT, IRQRS(IH), IERR +!/MPI ENDIF +! +!/MPI IF ( FLOGRR( 5, 5) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 13 +!/MPI CALL MPI_RECV_INIT (TAUWIX(I0),1,WW3_FIELD_VEC,& +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R WX', IFROM, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 14 +!/MPI CALL MPI_RECV_INIT (TAUWIY(I0),1,WW3_FIELD_VEC,& +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R WY', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 5,11) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 15 +!/MPI CALL MPI_RECV_INIT (TWS (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R TS', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 16 +!/MPI CALL MPI_RECV_INIT (TAUOX(I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R OX', IFROM, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 17 +!/MPI CALL MPI_RECV_INIT (TAUOY(I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R OY', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 3) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 18 +!/MPI CALL MPI_RECV_INIT (BHD (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R BH', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 4) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 19 +!/MPI CALL MPI_RECV_INIT (PHIOC(I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R PH', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 5) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 20 +!/MPI CALL MPI_RECV_INIT (TUSX (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R UX', IFROM, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 21 +!/MPI CALL MPI_RECV_INIT (TUSY (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R UY', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6, 6) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 22 +!/MPI CALL MPI_RECV_INIT (USSX (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R SX', IFROM, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 23 +!/MPI CALL MPI_RECV_INIT (USSY (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R SY', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 6,10) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 24 +!/MPI CALL MPI_RECV_INIT (TAUICE(I0,1),1,WW3_FIELD_VEC,& +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R I1', IFROM, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 25 +!/MPI CALL MPI_RECV_INIT (TAUICE(I0,2),1,WW3_FIELD_VEC,& +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R I2', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 7, 2) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 26 +!/MPI CALL MPI_RECV_INIT (UBA (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R BA', IFROM, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 27 +!/MPI CALL MPI_RECV_INIT (UBD (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R BD', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 7, 4) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 28 +!/MPI CALL MPI_RECV_INIT (PHIBBL(I0),1,WW3_FIELD_VEC,& +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R PB', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! +!/MPI IF ( FLOGRR( 7, 5) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 29 +!/MPI CALL MPI_RECV_INIT (TAUBBL(I0,1),1,WW3_FIELD_VEC,& +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R T1', IFROM, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 30 +!/MPI CALL MPI_RECV_INIT (TAUBBL(I0,2),1,WW3_FIELD_VEC,& +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R T2', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +!/MPI END IF +! +!/MPI END DO +! +!/MPI IF (OARST) CALL W3SETA ( IMOD, NDSE, NDST ) !/MPI END IF +!/MPI END IF ! !/MPI NRQRS = IH -!/MPI IT0 = IT0 + 3 +!/MPI IF (OARST) THEN +!/MPI IT0 = IT0 + 30 +!/MPI ELSE +!/MPI IT0 = IT0 + 3 +!/MPI ENDIF ! !/MPIT WRITE (NDST,9022) !/MPIT WRITE (NDST,9023) NRQRS diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 242c85356..5a07b269d 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -284,12 +284,13 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 30-Apr-2014 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 15-Apr-2013 : Origination. ( version 4.10 ) !/ 31-Jan-2014 : Bug fix warning output (Tolman). ( version 4.18 ) !/ 30-Apr-2014 : Add th2m and sth2m calculation ( version 5.01 ) +!/ 25-Sep-2020 : Calculate FLG1D for any processor ( version 7.xx ) !/ ! 1. Purpose : ! @@ -655,11 +656,10 @@ CASE('U2') FLG2D(10,2)=.TRUE. !/COU CASE('DRY') + CASE('UNSET') CASE DEFAULT IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSEN,1004) TRIM(TESTSTR) END SELECT -! - IF(ANY(FLG2D(IFI,:))) FLG1D(IFI)=.TRUE. !Update FLG1D ! IOUT=IOUT+1 ! @@ -667,9 +667,9 @@ ! END IF ! - IF ( IAPROC .EQ. NAPOUT ) THEN - FLT = .TRUE. - DO IFI=1, NOGRP + FLT = .TRUE. + DO IFI=1, NOGRP + IF ( IAPROC .EQ. NAPOUT ) THEN DO IFJ=1, NGRPP IF ( FLG2D(IFI,IFJ) ) THEN IF ( FLT ) THEN @@ -680,7 +680,10 @@ END IF END IF END DO - END DO + END IF + IF(ANY(FLG2D(IFI,:))) FLG1D(IFI)=.TRUE. !Update FLG1D + END DO + IF ( IAPROC .EQ. NAPOUT ) THEN IF ( FLT ) WRITE (NDSO,1945) 'no fields defined' END IF ! @@ -745,13 +748,14 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 30-Apr-2014 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 15-Apr-2013 : Origination. ( version 4.10 ) !/ 31-Jan-2014 : Bug fix warning output (Tolman). ( version 4.18 ) !/ 30-Apr-2014 : Add th2m and sth2m calculation ( version 5.01 ) !/ 17-Feb-2016 : New version for namelist use ( version 5.11 ) +!/ 25-Sep-2020 : Calculate FLG1D for any processor ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1084,9 +1088,9 @@ ! END DO ! - IF ( IAPROC .EQ. NAPOUT ) THEN - FLT = .TRUE. - DO IFI=1, NOGRP + FLT = .TRUE. + DO IFI=1, NOGRP + IF ( IAPROC .EQ. NAPOUT ) THEN DO IFJ=1, NGRPP IF ( FLG2D(IFI,IFJ) ) THEN IF ( FLT ) THEN @@ -1097,10 +1101,12 @@ END IF END IF END DO - IF(ANY(FLG2D(IFI,:))) FLG1D(IFI)=.TRUE. !Update FLG1D - END DO + ENDIF + IF(ANY(FLG2D(IFI,:))) FLG1D(IFI)=.TRUE. !Update FLG1D + END DO + IF ( IAPROC .EQ. NAPOUT ) THEN IF ( FLT ) WRITE (NDSO,1945) 'no fields defined' - END IF + ENDIF ! RETURN ! diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index a6cb704c0..3a3ca9c40 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -52,10 +52,13 @@ ! !/ ------------------------------------------------------------------- / PUBLIC +!/ + ! Add fields needed for OASIS coupling in restart + LOGICAL :: OARST !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERINI = '2019-12-29' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERINI = '2020-09-25' CHARACTER(LEN=26), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III RESTART FILE' !/ @@ -67,7 +70,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 05-Jun-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 12-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -100,6 +103,7 @@ !/ 19-Dec-2019 : Optional second stream of ( version 7.00 ) !/ restart files !/ (Roberto Padilla-Hernandez & J.H. Alves) +!/ 25-Sep-2020 : Extra fields for coupled restart ( version 7.xx ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), @@ -242,6 +246,11 @@ !/ ------------------------------------------------------------------- / USE W3GDATMD, ONLY: W3SETG, W3SETREF, RSTYPE USE W3ODATMD, ONLY: W3SETO + USE W3ADATMD, ONLY: W3SETA, W3XETA, NSEALM + USE W3ADATMD, ONLY: CX, CY, HS, WLM, T0M1, FP0, THM, CHARN, & + TAUWIX, TAUWIY, TWS, TAUOX, TAUOY, BHD, & + PHIOC, TUSX, TUSY, USSX, USSY, TAUICE, & + UBA, UBD, PHIBBL, TAUBBL !/ USE W3GDATMD, ONLY: NX, NY, NSEA, NSEAL, NSPEC, MAPSTA, MAPST2, & GNAME, FILEXT, GTYPE, UNGTYPE @@ -250,7 +259,8 @@ !/WRST USE W3IDATMD, ONLY: WXN, WYN, W3SETI !/WRST USE W3IDATMD, ONLY: WXNwrst, WYNwrst USE W3ODATMD, ONLY: NDSE, NDST, IAPROC, NAPROC, NAPERR, NAPRST, & - IFILE => IFILE4, FNMPRE, NTPROC, IOSTYP + IFILE => IFILE4, FNMPRE, NTPROC, IOSTYP, & + FLOGRR !/MPI USE W3ODATMD, ONLY: NRQRS, NBLKRS, RSBLKS, IRQRS, IRQRSS, & !/MPI VAAUX !/MPI USE W3ADATMD, ONLY: MPI_COMM_WCMP @@ -294,7 +304,7 @@ INTEGER(KIND=8) :: RPOS !/MPI INTEGER, ALLOCATABLE :: STAT1(:,:), STAT2(:,:) !/MPI REAL, ALLOCATABLE :: VGBUFF(:), VLBUFF(:) - REAL(KIND=LRB), ALLOCATABLE :: WRITEBUFF(:) + REAL(KIND=LRB), ALLOCATABLE :: WRITEBUFF(:), TMP(:), TMP2(:) LOGICAL :: WRITE, IOSFLG CHARACTER(LEN=4) :: TYPE @@ -376,6 +386,12 @@ ALLOCATE(WRITEBUFF(NSIZE)) WRITEBUFF(:) = 0. ! +! Allocate memory to receive fields needed for coupling + IF (OARST) THEN + ALLOCATE(TMP(NSEA)) + ALLOCATE(TMP2(NSEA)) + ENDIF +! ! open file ---------------------------------------------------------- * ! I = LEN_TRIM(FILEXT) @@ -813,6 +829,66 @@ (FPIS(ISEA),ISEA=1+(IPART-1)*NSIZE, & MIN(NSEA,IPART*NSIZE)) END DO + IF (OARST) THEN +!/MPI CALL W3XETA ( IGRD, NDSE, NDST ) +! + IF ( FLOGRR(1,2) ) THEN + WRITE(NDSR,ERR=803,IOSTAT=IERR) CX(1:NSEA) + WRITE(NDSR,ERR=803,IOSTAT=IERR) CY(1:NSEA) + ENDIF + IF ( FLOGRR(1,9) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) ICEF(1:NSEA) + IF ( FLOGRR(2,1) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) HS(1:NSEA) + IF ( FLOGRR(2,2) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) WLM(1:NSEA) + IF ( FLOGRR(2,4) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) T0M1(1:NSEA) + IF ( FLOGRR(2,6) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) FP0(1:NSEA) + IF ( FLOGRR(2,7) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) THM(1:NSEA) + IF ( FLOGRR(5,2) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) CHARN(1:NSEA) + IF ( FLOGRR(5,5) ) THEN + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUWIX(1:NSEA) + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUWIY(1:NSEA) + ENDIF + IF ( FLOGRR(5,11) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) TWS(1:NSEA) + IF ( FLOGRR(6,2) ) THEN + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUOX(1:NSEA) + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUOY(1:NSEA) + ENDIF + IF ( FLOGRR(6,3) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) BHD(1:NSEA) + IF ( FLOGRR(6,4) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) PHIOC(1:NSEA) + IF ( FLOGRR(6,5) ) THEN + WRITE(NDSR,ERR=803,IOSTAT=IERR) TUSX(1:NSEA) + WRITE(NDSR,ERR=803,IOSTAT=IERR) TUSY(1:NSEA) + ENDIF + IF ( FLOGRR(6,6) ) THEN + WRITE(NDSR,ERR=803,IOSTAT=IERR) USSX(1:NSEA) + WRITE(NDSR,ERR=803,IOSTAT=IERR) USSY(1:NSEA) + ENDIF + IF ( FLOGRR(6,10) ) THEN + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUICE(1:NSEA,1) + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUICE(1:NSEA,2) + ENDIF + IF ( FLOGRR(7,2) ) THEN + WRITE(NDSR,ERR=803,IOSTAT=IERR) UBA(1:NSEA) + WRITE(NDSR,ERR=803,IOSTAT=IERR) UBD(1:NSEA) + ENDIF + IF ( FLOGRR(7,4) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) PHIBBL(1:NSEA) + IF ( FLOGRR(7,5) ) THEN + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUBBL(1:NSEA,1) + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUBBL(1:NSEA,2) + ENDIF +! +!/MPI CALL W3SETA ( IGRD, NDSE, NDST ) + ENDIF !/T WRITE (NDST,9007) !/T ELSE !/T DO ISEA=1, NSEA @@ -820,9 +896,9 @@ !/T ICE(ISEA) = 0. !/T END DO !/T WRITE (NDST,9008) - END IF - END IF - ELSE + END IF + END IF + ELSE IF (TYPE.EQ.'FULL') THEN RPOS = 1_8 + LRECL*(NREC-1_8) READ (NDSR,POS=RPOS,ERR=802,IOSTAT=IERR) & @@ -916,8 +992,196 @@ (FPIS(ISEA),ISEA=1+(IPART-1)*NSIZE, & MIN(NSEA,IPART*NSIZE)) END DO + IF (OARST) THEN +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading CUR' + IF ( FLOGRR(1,2) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + CX(I) = TMP(J) + CY(I) = TMP2(J) + ENDIF + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading ICEF' + IF ( FLOGRR(1,9) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) ICEF(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading HS' + IF ( FLOGRR(2,1) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) HS(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading WLM' + IF ( FLOGRR(2,2) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) WLM(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading T0M1' + IF ( FLOGRR(2,4) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + T0M1(I) = TMP(J) + ENDIF + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading FP0' + IF ( FLOGRR(2,6) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) FP0(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading THM' + IF ( FLOGRR(2,7) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THM(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading CHARN' + IF ( FLOGRR(5,2) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) CHARN(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading TAUWI' + IF ( FLOGRR(5,5) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + TAUWIX(I) = TMP(J) + TAUWIY(I) = TMP2(J) + ENDIF + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading TWS' + IF ( FLOGRR(5,11) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) TWS(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading TAUO' + IF ( FLOGRR(6,2) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + TAUOX(I) = TMP(J) + TAUOY(I) = TMP2(J) + ENDIF + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading BHD' + IF ( FLOGRR(6,3) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) BHD(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading PHIOC' + IF ( FLOGRR(6,4) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) PHIOC(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading TUS' + IF ( FLOGRR(6,5) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + TUSX(I) = TMP(J) + TUSY(I) = TMP2(J) + ENDIF + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading USS' + IF ( FLOGRR(6,6) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + USSX(I) = TMP(J) + USSY(I) = TMP2(J) + ENDIF + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading TAUICE' + IF ( FLOGRR(6,10) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + TAUICE(I,1) = TMP(J) + TAUICE(I,2) = TMP2(J) + ENDIF + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading UB' + IF ( FLOGRR(7,2) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + UBA(I) = TMP(J) + UBD(I) = TMP2(J) + ENDIF + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading PHIBBL' + IF ( FLOGRR(7,4) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) PHIBBL(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading TAUBBL' + IF ( FLOGRR(7,5) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + TAUBBL(I,1) = TMP(J) + TAUBBL(I,2) = TMP2(J) + ENDIF + ENDDO + ENDIF + ENDIF !/T WRITE (NDST,9007) - ELSE + ELSE TLEV(1) = -1 TLEV(2) = 0 TICE(1) = -1 @@ -932,8 +1196,37 @@ ICE = 0. ASF = 1. FPIS = DUMFPI + + ! Initialize coupled fields if no restart is present + IF (OARST) THEN + CX = 0. + CY = 0. + ICEF = 0. + HS = 0. + WLM = 0. + T0M1 = 0. + FP0 = 1. + THM = 0. + CHARN = 0.0185 + TAUWIX = 0. + TAUWIY = 0. + TWS = 0. + TAUOX = 0. + TAUOY = 0. + BHD = 0. + PHIOC = 0. + TUSX = 0. + TUSY = 0. + USSX = 0. + USSY = 0. + TAUICE = 0. + UBA = 0. + UBD = 0. + PHIBBL = 0. + TAUBBL = 0. + ENDIF !/T WRITE (NDST,9008) - END IF + END IF END IF ! ! Close file --------------------------------------------------------- * @@ -946,6 +1239,8 @@ !/DEBUGIO FLUSH(740+IAPROC) ! IF (ALLOCATED(WRITEBUFF)) DEALLOCATE(WRITEBUFF) + IF (ALLOCATED(TMP)) DEALLOCATE(TMP) + IF (ALLOCATED(TMP2)) DEALLOCATE(TMP2) ! RETURN ! diff --git a/model/ftn/w3iosfmd.ftn b/model/ftn/w3iosfmd.ftn index 7c063bed4..d0a8e8553 100644 --- a/model/ftn/w3iosfmd.ftn +++ b/model/ftn/w3iosfmd.ftn @@ -498,7 +498,7 @@ !/MPI MPI_COMM_WAVE, IERR_MPI ) !/MPI DTSIZ = ICPRT(NSEAL+1,2) - 1 ! -!/MPIT WRITE (NDST,9021) IAPROC, NAPPRT, DTSIZ +!/T WRITE (NDST,9021) IAPROC, NAPPRT, DTSIZ ! !/MPI IT = IT0PRT + NAPROC + IAPROC - 1 !/MPI IF ( DTSIZ .GT. 0 ) CALL MPI_SEND & @@ -537,7 +537,7 @@ !/MPI JSLM = 1 + (NSEA-JAPROC)/NAPROC !/MPI DTSIZ = ICP(JSLM+1,2) - 1 ! -!/MPIT WRITE (NDST,9031) JAPROC, DTSIZ +!/T WRITE (NDST,9031) JAPROC, DTSIZ ! !/MPI ALLOCATE ( PROC(JAPROC)%DTPRT(DIMP,MAX(1,DTSIZ)) ) !/MPI DTP => PROC(JAPROC)%DTPRT diff --git a/model/ftn/w3nmlmultimd.ftn b/model/ftn/w3nmlmultimd.ftn index 91400e401..497d4aeea 100644 --- a/model/ftn/w3nmlmultimd.ftn +++ b/model/ftn/w3nmlmultimd.ftn @@ -7,7 +7,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 04-Jan-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ For updates see subroutines. @@ -134,7 +134,12 @@ !/COU TYPE NML_COUPLING_T !/COU CHARACTER(1024) :: SENT !/COU CHARACTER(1024) :: RECEIVED +!/COU LOGICAL :: COUPLET0 !/COU END TYPE NML_COUPLING_T +! + TYPE NML_RESTART_T + CHARACTER(1024) :: EXTRA + END TYPE NML_RESTART_T ! TYPE NML_OUTPUT_TYPE_T TYPE(NML_POINT_T) :: POINT @@ -142,6 +147,7 @@ TYPE(NML_TRACK_T) :: TRACK TYPE(NML_PARTITION_T) :: PARTITION !/COU TYPE(NML_COUPLING_T) :: COUPLING + TYPE(NML_RESTART_T) :: RESTART END TYPE NML_OUTPUT_TYPE_T @@ -906,11 +912,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 09-Aug-2016 : Adding comments ( version 5.12 ) !/ 15-May-2018 : Update namelist ( version 6.05 ) +!/ 25-Sep-2020 : Update namelist ( version 7.xx ) !/ ! 1. Purpose : ! @@ -998,6 +1005,8 @@ ITYPE(I)%PARTITION%FORMAT = .TRUE. !/COU ITYPE(I)%COUPLING%SENT = 'unset' !/COU ITYPE(I)%COUPLING%RECEIVED = 'unset' +!/COU ITYPE(I)%COUPLING%COUPLET0 = .FALSE. + ITYPE(I)%RESTART%EXTRA = 'unset' END DO ALLTYPE%FIELD%LIST = 'unset' ALLTYPE%POINT%NAME = 'unset' @@ -1012,6 +1021,8 @@ ALLTYPE%PARTITION%FORMAT = .TRUE. !/COU ALLTYPE%COUPLING%SENT = 'unset' !/COU ALLTYPE%COUPLING%RECEIVED = 'unset' +!/COU ALLTYPE%COUPLING%COUPLET0 = .FALSE. + ALLTYPE%RESTART%EXTRA = 'unset' ! read OUTPUT_TYPE namelist @@ -1700,11 +1711,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 09-Aug-2016 : Adding comments ( version 5.12 ) !/ 15-May-2018 : Update namelist ( version 6.05 ) +!/ 25-Sep-2020 : Update namelist ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1782,6 +1794,8 @@ WRITE (NDSN,13) TRIM(MSG),'PARTITION % FORMAT = ', NML_OUTPUT_TYPE(I)%PARTITION%FORMAT !/COU WRITE (NDSN,10) TRIM(MSG),'COUPLING % SENT = ', TRIM(NML_OUTPUT_TYPE(I)%COUPLING%SENT) !/COU WRITE (NDSN,10) TRIM(MSG),'COUPLING % RECEIVED = ', TRIM(NML_OUTPUT_TYPE(I)%COUPLING%RECEIVED) +!/COU WRITE (NDSN,13) TRIM(MSG),'COUPLING % COUPLET0 = ', NML_OUTPUT_TYPE(I)%COUPLING%COUPLET0 + WRITE (NDSN,10) TRIM(MSG),'RESTART % EXTRA = ', TRIM(NML_OUTPUT_TYPE(I)%RESTART%EXTRA) END DO WRITE (NDSN,'(A)') diff --git a/model/ftn/w3nmlshelmd.ftn b/model/ftn/w3nmlshelmd.ftn index 1d048b555..471e8cdcd 100644 --- a/model/ftn/w3nmlshelmd.ftn +++ b/model/ftn/w3nmlshelmd.ftn @@ -7,7 +7,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ For updates see subroutines. @@ -86,7 +86,12 @@ !/COU TYPE NML_COUPLING_T !/COU CHARACTER(1024) :: SENT !/COU CHARACTER(1024) :: RECEIVED +!/COU LOGICAL :: COUPLET0 !/COU END TYPE NML_COUPLING_T +! + TYPE NML_RESTART_T + CHARACTER(1024) :: EXTRA + END TYPE NML_RESTART_T ! TYPE NML_OUTPUT_TYPE_T TYPE(NML_POINT_T) :: POINT @@ -94,6 +99,7 @@ TYPE(NML_TRACK_T) :: TRACK TYPE(NML_PARTITION_T) :: PARTITION !/COU TYPE(NML_COUPLING_T) :: COUPLING + TYPE(NML_RESTART_T) :: RESTART END TYPE NML_OUTPUT_TYPE_T @@ -547,7 +553,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 18-Apr-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ @@ -629,6 +635,8 @@ TYPE%PARTITION%FORMAT = .TRUE. !/COU TYPE%COUPLING%SENT = 'unset' !/COU TYPE%COUPLING%RECEIVED = 'unset' +!/COU TYPE%COUPLING%COUPLET0 = .FALSE. + TYPE%RESTART%EXTRA = 'unset' ! read output type namelist @@ -1132,7 +1140,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 18-Apr-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ @@ -1207,6 +1215,8 @@ WRITE (NDSN,13) TRIM(MSG),'PARTITION % FORMAT = ', NML_OUTPUT_TYPE%PARTITION%FORMAT !/COU WRITE (NDSN,10) TRIM(MSG),'COUPLING % SENT = ', TRIM(NML_OUTPUT_TYPE%COUPLING%SENT) !/COU WRITE (NDSN,10) TRIM(MSG),'COUPLING % RECEIVED = ', TRIM(NML_OUTPUT_TYPE%COUPLING%RECEIVED) +!/COU WRITE (NDSN,13) TRIM(MSG),'COUPLING % COUPLET0 = ', NML_OUTPUT_TYPE%COUPLING%COUPLET0 + WRITE (NDSN,10) TRIM(MSG),'RESTART % EXTRA = ', TRIM(NML_OUTPUT_TYPE%RESTART%EXTRA) 10 FORMAT (A,2X,A,A) 11 FORMAT (A,2X,A,I8) diff --git a/model/ftn/w3nmluprstrmd.ftn b/model/ftn/w3nmluprstrmd.ftn new file mode 100644 index 000000000..1c6cd9949 --- /dev/null +++ b/model/ftn/w3nmluprstrmd.ftn @@ -0,0 +1,529 @@ +#include "w3macros.h" +!/ ------------------------------------------------------------------- / + MODULE W3NMLUPRSTRMD +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | M. Accensi | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 06-Oct-2020 | +!/ +-----------------------------------+ +!/ +!/ For updates see subroutines. +!/ +! 1. Purpose : +! +! Manages namelists from configuration file ww3_uprstr.nml for ww3_uprstr program +! +!/ ------------------------------------------------------------------- / + + ! module defaults + IMPLICIT NONE + + PUBLIC + + ! restart time + TYPE NML_RESTART_T + CHARACTER(15) :: RESTARTTIME + END TYPE NML_RESTART_T + + ! update approach + TYPE NML_UPDATE_T + CHARACTER(5) :: UPDPROC + REAL :: PRCNTG + REAL :: PRCNTGCAP + REAL :: THRWSEA + CHARACTER(30) :: FILE + END TYPE NML_UPDATE_T + + ! miscellaneous + CHARACTER(256) :: MSG + INTEGER :: NDSN + + + + + CONTAINS +!/ ------------------------------------------------------------------- / + SUBROUTINE W3NMLUPRSTR (NDSI, INFILE, NML_RESTART, NML_UPDATE, IERR) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | M. Accensi | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 06-Oct-2020 | +!/ +-----------------------------------+ +!/ +! +! 1. Purpose : +! +! Reads all the namelist to define the output field +! +! 2. Method : +! +! See source term routines. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NDSI Int. +! INFILE Char. +! NML_RESTART type. +! NML_UPDATE type. +! IERR Int. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! STRACE Subr. W3SERVMD SUBROUTINE tracing. +! READ_RESTART_NML +! READ_UPDATE_NML +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! WW3_UPRSTR Prog. N/A Update restart file +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! 8. Structure : +! +! See source code. +! +! 9. Switches : +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / + + USE W3ODATMD, ONLY: NDSE +!/S USE W3SERVMD, ONLY: STRACE + + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NDSI + CHARACTER*(*), INTENT(IN) :: INFILE + TYPE(NML_RESTART_T), INTENT(INOUT) :: NML_RESTART + TYPE(NML_UPDATE_T), INTENT(INOUT) :: NML_UPDATE + INTEGER, INTENT(OUT) :: IERR +!/S INTEGER, SAVE :: IENT = 0 + + IERR = 0 +!/S CALL STRACE (IENT, 'W3NMLUPRSTR') + + ! open namelist log file + NDSN = 3 + OPEN (NDSN, file=TRIM(INFILE)//'.log', form='formatted', iostat=IERR) + IF (IERR.NE.0) THEN + WRITE (NDSE,'(A)') 'ERROR: open full nml file '//TRIM(INFILE)//'.log failed' + RETURN + END IF + + ! open input file + OPEN (NDSI, file=TRIM(INFILE), form='formatted', status='old', iostat=IERR) + IF (IERR.NE.0) THEN + WRITE (NDSE,'(A)') 'ERROR: open input file '//TRIM(INFILE)//' failed' + RETURN + END IF + + ! read restart time namelist + CALL READ_RESTART_NML (NDSI, NML_RESTART) + CALL REPORT_RESTART_NML (NML_RESTART) + + ! read update approach namelist + CALL READ_UPDATE_NML (NDSI, NML_UPDATE) + CALL REPORT_UPDATE_NML (NML_UPDATE) + + ! close namelist files + CLOSE (NDSI) + CLOSE (NDSN) + + END SUBROUTINE W3NMLUPRSTR + + +!/ ------------------------------------------------------------------- / + + + +!/ ------------------------------------------------------------------- / + + SUBROUTINE READ_RESTART_NML (NDSI, NML_RESTART) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | M. Accensi | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 06-Oct-2020 | +!/ +-----------------------------------+ +!/ +! 1. Purpose : +! +! +! 2. Method : +! +! See source term routines. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NDSI Int. +! NML_RESTART Type. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! STRACE Subr. W3SERVMD SUBROUTINE tracing. +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! W3NMLUPRSTR Subr. N/A Namelist configuration routine. +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! 8. Structure : +! +! See source code. +! +! 9. Switches : +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / + + USE W3ODATMD, ONLY: NDSE + USE W3SERVMD, ONLY: EXTCDE +!/S USE W3SERVMD, ONLY: STRACE + + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NDSI + TYPE(NML_RESTART_T), INTENT(INOUT) :: NML_RESTART + + ! locals + INTEGER :: IERR + TYPE(NML_RESTART_T) :: RESTART + NAMELIST /RESTART_NML/ RESTART +!/S INTEGER, SAVE :: IENT = 0 + + IERR = 0 +!/S CALL STRACE (IENT, 'READ_RESTART_NML') + + ! set default values + RESTART%RESTARTTIME = '19680607 120000' + + ! read restart namelist + REWIND (NDSI) + READ (NDSI, nml=RESTART_NML, iostat=IERR, iomsg=MSG) + IF (IERR.NE.0) THEN + WRITE (NDSE,'(A,/A)') & + 'ERROR: READ_RESTART_NML: namelist read error', & + 'ERROR: '//TRIM(MSG) + CALL EXTCDE (1) + END IF + + ! save namelist + NML_RESTART = RESTART + + END SUBROUTINE READ_RESTART_NML + +!/ ------------------------------------------------------------------- / + + + +!/ ------------------------------------------------------------------- / + + SUBROUTINE READ_UPDATE_NML (NDSI, NML_UPDATE) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | M. Accensi | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 06-Oct-2020 | +!/ +-----------------------------------+ +!/ +! 1. Purpose : +! +! +! 2. Method : +! +! See source term routines. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NDSI Int. +! NML_UPDATE Type. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! STRACE Subr. W3SERVMD SUBROUTINE tracing. +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! W3NMLUPRSTR Subr. N/A Namelist configuration routine. +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! 8. Structure : +! +! See source code. +! +! 9. Switches : +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / + + USE W3ODATMD, ONLY: NDSE + USE W3SERVMD, ONLY: EXTCDE +!/S USE W3SERVMD, ONLY: STRACE + + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NDSI + TYPE(NML_UPDATE_T), INTENT(INOUT) :: NML_UPDATE + + ! locals + INTEGER :: IERR + TYPE(NML_UPDATE_T) :: UPDATE + NAMELIST /UPDATE_NML/ UPDATE +!/S INTEGER, SAVE :: IENT = 0 + + IERR = 0 +!/S CALL STRACE (IENT, 'READ_UPDATE_NML') + + ! set default values for update approach + ! as set, these would run the update but not correct + ! any spectra (scalar correction by factor of 1.0) + UPDATE%UPDPROC = 'UPD0F' ! Update type + UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) + UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor + UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance + UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file + + ! read file namelist + REWIND (NDSI) + READ (NDSI, nml=UPDATE_NML, iostat=IERR, iomsg=MSG) + IF (IERR.GT.0) THEN + WRITE (NDSE,'(A,/A)') & + 'ERROR: READ_UPDATE_NML: namelist read error', & + 'ERROR: '//TRIM(MSG) + CALL EXTCDE (2) + END IF + + ! save namelist + NML_UPDATE = UPDATE + + END SUBROUTINE READ_UPDATE_NML + +!/ ------------------------------------------------------------------- / + + + +!/ ------------------------------------------------------------------- / + + SUBROUTINE REPORT_RESTART_NML (NML_RESTART) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | M. Accensi | +!/ | FORTRAN 90 | +!/ | Last update : 06-Oct-2020 | +!/ +-----------------------------------+ +!/ +!/ +! 1. Purpose : +! +! +! 2. Method : +! +! See source term routines. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NML_RESTART Type. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! STRACE Subr. W3SERVMD SUBROUTINE tracing. +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! W3NMLUPRSTR Subr. N/A Namelist configuration routine. +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! 8. Structure : +! +! See source code. +! +! 9. Switches : +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / + +!/S USE W3SERVMD, ONLY: STRACE + + IMPLICIT NONE + + TYPE(NML_RESTART_T), INTENT(IN) :: NML_RESTART +!/S INTEGER, SAVE :: IENT = 0 + +!/S CALL STRACE (IENT, 'REPORT_RESTART_NML') + + WRITE (MSG,'(A)') 'RESTART % ' + WRITE (NDSN,'(A)') + WRITE (NDSN,10) TRIM(MSG),'RESTARTTIME = ', TRIM(NML_RESTART%RESTARTTIME) + +10 FORMAT (A,2X,A,A) + + END SUBROUTINE REPORT_RESTART_NML + +!/ ------------------------------------------------------------------- / + + + +!/ ------------------------------------------------------------------- / + + SUBROUTINE REPORT_UPDATE_NML (NML_UPDATE) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | M. Accensi | +!/ | FORTRAN 90 | +!/ | Last update : 06-Oct-2020 | +!/ +-----------------------------------+ +!/ +!/ +! 1. Purpose : +! +! +! 2. Method : +! +! See source term routines. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NML_UPDATE Type. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! STRACE Subr. W3SERVMD SUBROUTINE tracing. +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! Name TYPE Module Description +! ---------------------------------------------------------------- +! W3NMLUPRSTR Subr. N/A Namelist configuration routine. +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! 8. Structure : +! +! See source code. +! +! 9. Switches : +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / + +!/S USE W3SERVMD, ONLY: STRACE + + IMPLICIT NONE + + TYPE(NML_UPDATE_T), INTENT(IN) :: NML_UPDATE +!/S INTEGER, SAVE :: IENT = 0 + +!/S CALL STRACE (IENT, 'REPORT_UPDATE_NML') + + WRITE (MSG,'(A)') 'UPDATE % ' + WRITE (NDSN,'(A)') + WRITE (NDSN,10) TRIM(MSG),'UPDPROC = ', TRIM(NML_UPDATE%UPDPROC) + ! PRCNTG only used by UPD0F + IF (TRIM(NML_UPDATE%UPDPROC) .EQ. 'UPD0F') THEN + WRITE (NDSN,11) TRIM(MSG),'PRCNTG = ', NML_UPDATE%PRCNTG + ELSE + WRITE (NDSN,11) TRIM(MSG),'PRCNTGCAP = ', NML_UPDATE%PRCNTGCAP + ! THRWSEA only used by UPD5/6 + IF ((TRIM(NML_UPDATE%UPDPROC) .EQ. 'UPD5') .OR. & + (TRIM(NML_UPDATE%UPDPROC) .EQ. 'UPD6')) THEN + WRITE (NDSN,11) TRIM(MSG),'THRWSEA = ', NML_UPDATE%THRWSEA + ENDIF + WRITE (NDSN,10) TRIM(MSG),'FILE = ', TRIM(NML_UPDATE%FILE) + ENDIF + +10 FORMAT (A,2X,A,A) +11 FORMAT (A,2X,A,F5.3) + + END SUBROUTINE REPORT_UPDATE_NML + +!/ ------------------------------------------------------------------- / + + + +END MODULE W3NMLUPRSTRMD + +!/ ------------------------------------------------------------------- / diff --git a/model/ftn/w3oacpmd.ftn b/model/ftn/w3oacpmd.ftn index 15959cd43..a0f132101 100644 --- a/model/ftn/w3oacpmd.ftn +++ b/model/ftn/w3oacpmd.ftn @@ -6,12 +6,13 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | A. Thevenin | !/ | FORTRAN 90 | -!/ | Last update : April-2016 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ July-2013 : Origination. ( version 4.18 ) !/ For upgrades see subroutines. !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 ) +!/ 25-Sep-2020 : Coupling at T+0 support ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -74,6 +75,8 @@ TYPE(CPL_FIELD), DIMENSION(IP_MAXFLD), PUBLIC :: RCV_FLD, SND_FLD ! Coupling fields ! INTEGER, PUBLIC :: ID_OASIS_TIME=0 ! time counter for coupling exchanges +! + LOGICAL, PUBLIC :: CPLT0 ! Flag for coupling at T+0 ! ! * Accessibility PUBLIC CPL_OASIS_INIT @@ -195,6 +198,7 @@ USE W3GDATMD, ONLY: NX, NY, FLAGLL, XGRD, YGRD, MAPSTA, & & HPFAC, HQFAC, GTYPE, & & UNGTYPE, RLGTYPE, CLGTYPE +!/SMC USE W3GDATMD, ONLY: NSEA, X0, Y0, MRFct, SX, SY, IJKCel !/MPI INCLUDE "mpif.h" ! !/ ------------------------------------------------------------------- / @@ -211,15 +215,13 @@ REAL, ALLOCATABLE :: LON(:,:),LAT(:,:),AREA(:,:), & CORLON(:,:,:),CORLAT(:,:,:) REAL :: FACTOR + LOGICAL :: RGLGRD = .TRUE. +!/SMC REAL :: DLON, DLAT !/ ------------------------------------------------------------------- / ! IF (LD_MASTER) THEN ! - IF (FLAGLL) THEN - FACTOR = 1. - ELSE - FACTOR = 1. / (RADIUS * DERA) - END IF +!/SMC RGLGRD = .FALSE. ! ! 0. Create grids file ! -------------------------------- @@ -228,61 +230,100 @@ ! 1. Get the lat/lon/corners,areas and masks ! ------------------------------------------- IF (GTYPE .EQ. RLGTYPE .OR. GTYPE .EQ. CLGTYPE) THEN - ! - ! 1.1. regular and curvilinear grids - ! ---------------------------------- - NNODES = NX*NY - NXW=1 - NXE=NX - NYS=1 - NYN=NY - ! - ! lat/lon - ALLOCATE ( LON(NNODES,1), LAT(NNODES,1) ) - I = 0 - DO IY = NYS, NYN +! + IF (RGLGRD) THEN + IF (FLAGLL) THEN + FACTOR = 1. + ELSE + FACTOR = 1. / (RADIUS * DERA) + END IF + ! + ! 1.1. regular and curvilinear grids + ! ---------------------------------- + NNODES = NX*NY + NXW=1 + NXE=NX + NYS=1 + NYN=NY + ! + ! lat/lon + ALLOCATE ( LON(NNODES,1), LAT(NNODES,1) ) + I = 0 + DO IY = NYS, NYN DO IX = NXW, NXE - I = I+1 - LON(I,1)=XGRD(IY,IX)*FACTOR - LAT(I,1)=YGRD(IY,IX)*FACTOR + I = I+1 + LON(I,1)=XGRD(IY,IX)*FACTOR + LAT(I,1)=YGRD(IY,IX)*FACTOR END DO - END DO - ! - ! areas, corners - ALLOCATE ( AREA(NNODES,1), CORLON(NNODES,1,4), CORLAT(NNODES,1,4) ) - I = 0 - DO IY = NYS, NYN + END DO + ! + ! areas, corners + ALLOCATE ( AREA(NNODES,1), CORLON(NNODES,1,4), CORLAT(NNODES,1,4) ) + I = 0 + DO IY = NYS, NYN DO IX = NXW, NXE - I = I+1 - CORLON(I,1,1)=LON(I,1)+HPFAC(IY,IX)/2.*FACTOR - CORLON(I,1,2)=LON(I,1)-HPFAC(IY,IX)/2.*FACTOR - CORLON(I,1,3)=LON(I,1)-HPFAC(IY,IX)/2.*FACTOR - CORLON(I,1,4)=LON(I,1)+HPFAC(IY,IX)/2.*FACTOR - CORLAT(I,1,1)=LAT(I,1)+HQFAC(IY,IX)/2.*FACTOR - CORLAT(I,1,2)=LAT(I,1)+HQFAC(IY,IX)/2.*FACTOR - CORLAT(I,1,3)=LAT(I,1)-HQFAC(IY,IX)/2.*FACTOR - CORLAT(I,1,4)=LAT(I,1)-HQFAC(IY,IX)/2.*FACTOR - AREA(I,1)=HPFAC(IY,IX)*HQFAC(IY,IX) + I = I+1 + CORLON(I,1,1)=LON(I,1)+HPFAC(IY,IX)/2.*FACTOR + CORLON(I,1,2)=LON(I,1)-HPFAC(IY,IX)/2.*FACTOR + CORLON(I,1,3)=LON(I,1)-HPFAC(IY,IX)/2.*FACTOR + CORLON(I,1,4)=LON(I,1)+HPFAC(IY,IX)/2.*FACTOR + CORLAT(I,1,1)=LAT(I,1)+HQFAC(IY,IX)/2.*FACTOR + CORLAT(I,1,2)=LAT(I,1)+HQFAC(IY,IX)/2.*FACTOR + CORLAT(I,1,3)=LAT(I,1)-HQFAC(IY,IX)/2.*FACTOR + CORLAT(I,1,4)=LAT(I,1)-HQFAC(IY,IX)/2.*FACTOR + AREA(I,1)=HPFAC(IY,IX)*HQFAC(IY,IX) END DO - END DO - ! - ! Model grid mask - ALLOCATE ( MASK(NNODES,1) ) - I = 0 - DO IY = NYS, NYN + END DO + ! + ! Model grid mask + ALLOCATE ( MASK(NNODES,1) ) + I = 0 + DO IY = NYS, NYN DO IX = NXW, NXE - I = I+1 - ! Get the mask : 0 - sea / 1 - open boundary cells (the land is already excluded) - IF ((MAPSTA(IY,IX) .EQ. 1)) THEN - MASK(I,1) = 0 - ELSE - MASK(I,1) = 1 - END IF + I = I+1 + ! Get the mask : 0 - sea / 1 - open boundary cells (the land is already excluded) + IF ((MAPSTA(IY,IX) .EQ. 1)) THEN + MASK(I,1) = 0 + ELSE + MASK(I,1) = 1 + END IF END DO - END DO + END DO +!/SMC ELSE +!/SMC ! +!/SMC ! 1.2. SMC grids +!/SMC ! ---------------------------------- +!/SMC NNODES = NSEA +!/SMC ! +!/SMC ! Calculate the smallest grid cell increments depending on the number of SMC levels +!/SMC DLON = SX / MRFct +!/SMC DLAT = SY / MRFct +!/SMC ! +!/SMC ALLOCATE ( LON(NNODES,1), LAT(NNODES,1) ) +!/SMC ALLOCATE ( AREA(NNODES,1), CORLON(NNODES,1,4), CORLAT(NNODES,1,4) ) +!/SMC ALLOCATE ( MASK(NNODES,1) ) +!/SMC DO I=1, NNODES +!/SMC ! lat/lon +!/SMC LON(I,1) = X0 + (IJKCel(1,I) + IJKCel(3,I)*0.5)*DLON +!/SMC LAT(I,1) = Y0 + (IJKCel(2,I) + IJKCel(4,I)*0.5)*DLAT +!/SMC ! corners +!/SMC CORLON(I,1,1) = X0 + IJKCel(1,I)*DLON +!/SMC CORLON(I,1,2) = X0 + (IJKCel(1,I) + IJKCel(3,I))*DLON +!/SMC CORLON(I,1,3) = CORLON(I,1,2) +!/SMC CORLON(I,1,4) = CORLON(I,1,1) +!/SMC CORLAT(I,1,1) = Y0 + IJKCel(2,I)*DLAT +!/SMC CORLAT(I,1,2)=CORLAT(I,1,1) +!/SMC CORLAT(I,1,3) = Y0 + (IJKCel(2,I) + IJKCel(4,I))*DLAT +!/SMC CORLAT(I,1,4)=CORLAT(I,1,3) +!/SMC ! areas +!/SMC AREA(I,1) = 0.25 * IJKCEL(3,I)*DLON * IJKCEL(4,I)*DLAT +!/SMC ! Model grid mask +!/SMC MASK(I,1) = 1 +!/SMC ENDDO + ENDIF ELSE ! - ! 1.2. Unstructured grids + ! 1.3. Unstructured grids ! ---------------------------------- WRITE(*,*) 'TO BE IMPLEMENT FOR UNSTRUCTURED GRIDS' STOP @@ -386,42 +427,62 @@ INTEGER :: ISEA, JSEA, IX, IY INTEGER :: NHXW, NHXE, NHYS, NHYN ! size of the halo at the western, eastern, southern, northern boundaries LOGICAL :: LL_MPI_FILE ! to check if there an mpi.txt file for domain decompasition + LOGICAL :: RGLGRD = .TRUE. !/ !/ ------------------------------------------------------------------- / !/ Executable part !/ +!/SMC RGLGRD = .FALSE. +! IF (GTYPE .EQ. RLGTYPE .OR. GTYPE .EQ. CLGTYPE) THEN - ! - ! 1.1. regular and curvilinear grids - ! ---------------------------------- - NHXW = 1 ; NHXE = NX ; NHYS = 1 ; NHYN = NY - NHXW = NHXW - 1 - NHXE = NX - NHXE - NHYS = NHYS - 1 - NHYN = NY - NHYN - ! - ALLOCATE(ILA_PARAL(2+NSEAL*2)) - ! - ! * Define the partition : OASIS ORANGE partition - ILA_PARAL(1) = 3 - ! - ! * total number of segments of the global domain - ILA_PARAL(2) = NSEAL - ! - DO JSEA=1, NSEAL - CALL INIT_GET_ISEA(ISEA,JSEA) - - IX = MAPSF(ISEA,1) - IY = MAPSF(ISEA,2) - ILA_PARAL(JSEA*2+1) = (IY - NHYN -1)*(NX - NHXE - NHXW) + (IX - NHXW - 1) - ILA_PARAL(JSEA*2+2) = 1 - END DO - ! + IF (RGLGRD) THEN + ! + ! 1.1. regular and curvilinear grids + ! ---------------------------------- + NHXW = 1 ; NHXE = NX ; NHYS = 1 ; NHYN = NY + NHXW = NHXW - 1 + NHXE = NX - NHXE + NHYS = NHYS - 1 + NHYN = NY - NHYN + ! + ALLOCATE(ILA_PARAL(2+NSEAL*2)) + ! + ! * Define the partition : OASIS ORANGE partition + ILA_PARAL(1) = 3 + ! + ! * total number of segments of the global domain + ILA_PARAL(2) = NSEAL + ! + DO JSEA=1, NSEAL + CALL INIT_GET_ISEA(ISEA,JSEA) + + IX = MAPSF(ISEA,1) + IY = MAPSF(ISEA,2) + ILA_PARAL(JSEA*2+1) = (IY - NHYN -1)*(NX - NHXE - NHXW) + (IX - NHXW - 1) + ILA_PARAL(JSEA*2+2) = 1 + END DO +!/SMC ELSE +!/SMC ! +!/SMC ! 1.2. SMC grids +!/SMC ! ---------------------------------- +!/SMC ALLOCATE(ILA_PARAL(2+NSEAL)) +!/SMC ! +!/SMC ! * Define the partition : OASIS POINTS partition +!/SMC ILA_PARAL(1) = 4 +!/SMC ! +!/SMC ! * total number of segments of the global domain +!/SMC ILA_PARAL(2) = NSEAL +!/SMC ! +!/SMC DO JSEA=1, NSEAL +!/SMC ILA_PARAL(JSEA+2) = IAPROC + (JSEA-1)*NAPROC +!/SMC ENDDO + ENDIF + ! ELSE ! - ! 1.2. Unstructured grids + ! 1.3. Unstructured grids ! ---------------------------------- - WRITE(*,*) 'TO BE VERIFY FOR UNSTRUCTURED GRIDS' + WRITE(*,*) 'TO BE VERIFIED FOR UNSTRUCTURED GRIDS' STOP ! DO JSEA=1,NSEAL diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 421237735..580e1e31d 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 27-Jul-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 13-Dec-2004 : Origination. ( version 3.06 ) @@ -43,6 +43,7 @@ !/ 27-Jul-2018 : Added PTMETH and PTFCUT variables ( version 6.05 ) !/ for alternative partition methods. !/ (C. Bunney, UKMO) +!/ 25-Sep-2020 : Flags for coupling restart ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -143,8 +144,10 @@ ! IRQGO I.A. Public Array with MPI handles W3IOGO. ! FLOGRD L.A. Public FLags for output fields. ! FLOGR2 L.A. Public FLags for coupling fields. +! FLOGRR L.A. Public FLags for optional coupling restart (2D). ! FLOGD L.A. Public Flags for output groups ! FLOG2 L.A. Public Flags for coupling groups +! FLOGR L.A. Public FLags for optional coupling restart (1D). ! ---------------------------------------------------------------- ! ! Elements of OUT2 are aliased to pointers with the same @@ -330,6 +333,7 @@ !/MPI INTEGER, POINTER :: IRQGO(:), IRQGO2(:) LOGICAL :: FLOGRD(NOGRP,NGRPP), FLOGD(NOGRP), & FLOGR2(NOGRP,NGRPP), FLOG2(NOGRP), & + FLOGRR(NOGRP,NGRPP), FLOGR(NOGRP), & WRITE1 END TYPE OTYPE1 !/ @@ -435,8 +439,9 @@ INTEGER, POINTER :: IPASS1 !/MPI INTEGER, POINTER :: NRQGO, NRQGO2 !/MPI INTEGER, POINTER :: IRQGO(:), IRQGO2(:) - LOGICAL, POINTER :: FLOGRD(:,:), FLOGR2(:,:), FLOGD(:), & - FLOG2(:), WRITE1 + LOGICAL, POINTER :: FLOGRD(:,:), FLOGR2(:,:), & + FLOGRR(:,:),FLOGD(:), FLOG2(:), & + FLOGR(:), WRITE1 !/ !/ Type 2 ... !/ @@ -1377,7 +1382,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 12-Dec-2014 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 13-Dec-2004 : Origination. ( version 3.06 ) @@ -1391,6 +1396,7 @@ !/ 27-Jul-2010 : Add NKI, NTHI, XFRI, FR1I, TH1I. ( version 3.14.3 ) !/ 19-Dec-2012 : Move NOSWLL to data structure. ( version 4.11 ) !/ 12-Dec-2014 : Modify instanciation of NRQTR ( version 5.04 ) +!/ 25-Sep-2020 : Flags for coupling restart ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1519,8 +1525,10 @@ !/MPI IF ( NRQGO2 .NE. 0 ) IRQGO2 => OUTPTS(IMOD)%OUT1%IRQGO2 FLOGRD => OUTPTS(IMOD)%OUT1%FLOGRD FLOGR2 => OUTPTS(IMOD)%OUT1%FLOGR2 + FLOGRR => OUTPTS(IMOD)%OUT1%FLOGRR FLOGD => OUTPTS(IMOD)%OUT1%FLOGD FLOG2 => OUTPTS(IMOD)%OUT1%FLOG2 + FLOGR => OUTPTS(IMOD)%OUT1%FLOGR ! IPASS2 => OUTPTS(IMOD)%OUT2%IPASS2 NOPTS => OUTPTS(IMOD)%OUT2%NOPTS diff --git a/model/ftn/w3ogcmmd.ftn b/model/ftn/w3ogcmmd.ftn index 0006956c5..ac62e9393 100644 --- a/model/ftn/w3ogcmmd.ftn +++ b/model/ftn/w3ogcmmd.ftn @@ -108,9 +108,9 @@ ! USE W3OACPMD, ONLY: ID_OASIS_TIME, IL_NB_SND, SND_FLD, CPL_OASIS_SND USE W3GDATMD, ONLY: NSEAL, MAPSTA, MAPSF - USE W3ADATMD, ONLY: HS, T0M1, THM, BHD, TAUOX, TAUOY, PHIOC, UBA, UBD, & - TAUWIX, TAUWIY, TUSX, TUSY, USSX, USSY, WLM, & - PHIBBL,TAUBBL, CHARN + USE W3ADATMD, ONLY: HS, T0M1, THM, BHD, TAUOX, TAUOY, PHIOC, & + UBA, UBD, TAUWIX, TAUWIY, TUSX, TUSY, & + USSX, USSY, WLM, PHIBBL,TAUBBL, CHARN USE W3ODATMD, ONLY: NAPROC, IAPROC, UNDEF USE CONSTANTS, ONLY: PI, DERA ! @@ -121,12 +121,12 @@ !/ ------------------------------------------------------------------- / !/ Local parameters !/ - INTEGER :: I, ISEA, IX, IY - INTEGER, DIMENSION(NSEAL) :: MASK + INTEGER :: I, ISEA, IX, IY + INTEGER, DIMENSION(NSEAL) :: MASK REAL(kind=8), DIMENSION(NSEAL,1) :: RLA_OASIS_SND - INTEGER :: IB_DO - LOGICAL :: LL_ACTION - REAL(kind=8), DIMENSION(NSEAL) :: TMP + INTEGER :: IB_DO + LOGICAL :: LL_ACTION + REAL(kind=8), DIMENSION(NSEAL) :: TMP ! !---------------------------------------------------------------------- ! * Executable part @@ -152,7 +152,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_T0M1') THEN TMP(1:NSEAL) = 0.0 - WHERE(T0M1 /= UNDEF) TMP=T0M1 + WHERE(T0M1(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=T0M1(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -177,7 +177,7 @@ ! theta : trigonometric convention ( 0 at East, 90 at North) IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_CDIR') THEN TMP(1:NSEAL) = 0.0 - WHERE(THM /= UNDEF) TMP=COS(THM) + WHERE(THM(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=COS(THM(1:NSEAL)) RLA_OASIS_SND(:,1) = TMP(1:NSEAL) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -188,7 +188,7 @@ ! theta : trigonometric convention ( 0 at East, 90 at North) IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_SDIR') THEN TMP(1:NSEAL) = 0.0 - WHERE(THM /= UNDEF) TMP=SIN(THM) + WHERE(THM(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=SIN(THM(1:NSEAL)) RLA_OASIS_SND(:,1) = TMP(1:NSEAL) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -204,7 +204,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TWOX') THEN TMP(1:NSEAL) = 0.0 - WHERE(TAUOX /= UNDEF) TMP(:)=TAUOX(:) + WHERE(TAUOX(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=TAUOX(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -213,7 +213,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TWOY') THEN TMP(1:NSEAL) = 0.0 - WHERE(TAUOY /= UNDEF) TMP(:)=TAUOY (:) + WHERE(TAUOY(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=TAUOY(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -222,7 +222,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3__FOC') THEN TMP(1:NSEAL) = 0.0 - WHERE(PHIOC /= UNDEF) TMP(:)=PHIOC(:) + WHERE(PHIOC(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=PHIOC(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -231,7 +231,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TBBX') THEN TMP(1:NSEAL) = 0.0 - WHERE(TAUOX /= UNDEF) TMP(:)=TAUBBL(:,1) + WHERE(TAUBBL(1:NSEAL,1) /= UNDEF) TMP(1:NSEAL)=TAUBBL(1:NSEAL,1) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -240,7 +240,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TBBY') THEN TMP(1:NSEAL) = 0.0 - WHERE(TAUOY /= UNDEF) TMP(:)=TAUBBL(:,2) + WHERE(TAUBBL(1:NSEAL,2) /= UNDEF) TMP(1:NSEAL)=TAUBBL(1:NSEAL,2) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -249,7 +249,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3__FBB') THEN TMP(1:NSEAL) = 0.0 - WHERE(PHIOC /= UNDEF) TMP(:)=PHIBBL(:) + WHERE(PHIBBL(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=PHIBBL(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -265,7 +265,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_UBRX') THEN TMP(1:NSEAL) = 0.0 - WHERE(UBA(:) /= UNDEF) TMP=UBA(:)*COS(UBD(:)) + WHERE(UBA(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=UBA(1:NSEAL)*COS(UBD(1:NSEAL)) RLA_OASIS_SND(:,1) = TMP(1:NSEAL) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -274,7 +274,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_UBRY') THEN TMP(1:NSEAL) = 0.0 - WHERE(UBA(:) /= UNDEF) TMP=UBA(:)*SIN(UBD(:)) + WHERE(UBA(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=UBA(1:NSEAL)*SIN(UBD(1:NSEAL)) RLA_OASIS_SND(:,1) = TMP(1:NSEAL) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -283,7 +283,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TAWX') THEN TMP(1:NSEAL) = 0.0 - WHERE(TAUWIX /= UNDEF) TMP(:)=TAUWIX(:) + WHERE(TAUWIX(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=TAUWIX(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -292,7 +292,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TAWY') THEN TMP(1:NSEAL) = 0.0 - WHERE(TAUWIY /= UNDEF) TMP(:)=TAUWIY(:) + WHERE(TAUWIY(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=TAUWIY(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -301,7 +301,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TUSX') THEN TMP(1:NSEAL) = 0.0 - WHERE(TUSX /= UNDEF) TMP(:)=TUSX(:) + WHERE(TUSX(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=TUSX(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -310,7 +310,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TUSY') THEN TMP(1:NSEAL) = 0.0 - WHERE(TUSY /= UNDEF) TMP(:)=TUSY(:) + WHERE(TUSY(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=TUSY(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -319,7 +319,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_USSX') THEN TMP(1:NSEAL) = 0.0 - WHERE(USSX /= UNDEF) TMP(:)=USSX(:) + WHERE(USSX(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=USSX(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -328,7 +328,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_USSY') THEN TMP(1:NSEAL) = 0.0 - WHERE(USSY /= UNDEF) TMP(:)=USSY(:) + WHERE(USSY(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=USSY(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF @@ -337,7 +337,7 @@ ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3___LM') THEN TMP(1:NSEAL) = 0.0 - WHERE(WLM /= UNDEF) TMP(:)=WLM(:) + WHERE(WLM(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=WLM(1:NSEAL) RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 3c573f800..48d4f1f63 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -177,14 +177,14 @@ CONTAINS !/ ------------------------------------------------------------------- / SUBROUTINE W3WAVE ( IMOD, ODAT, TEND, STAMP, NO_OUT & -!/OASIS ,ID_LCOMM & +!/OASIS ,ID_LCOMM, TIMEN & ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 06-Jun-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 17-Mar-1999 : Distributed FORTRAN 77 version. ( version 1.18 ) @@ -250,6 +250,7 @@ !/ OASIS/DEBUGINIT/DEBUGSRC/DEBUGRUN/DEBUGCOH !/ DEBUGIOBP/DEBUGIOBC ( version 6.04 ) !/ 14-Sep-2018 : Remove PALM implementation ( version 6.06 ) +!/ 25-Sep-2020 : Oasis coupling at T+0 ( version 7.xx ) !/ ! 1. Purpose : ! @@ -396,7 +397,7 @@ !/SETUP USE W3WAVSET, only : WAVE_SETUP_COMPUTATION !/NETCDF_QAD USE W3NETCDF, only : OUTPUT_NETCDF_QUICK_AND_DIRTY -!/OASIS USE W3OACPMD, ONLY: ID_OASIS_TIME +!/OASIS USE W3OACPMD, ONLY: ID_OASIS_TIME, CPLT0 !/OASOCM USE W3OGCMMD, ONLY: SND_FIELDS_TO_OCEAN !/OASACM USE W3AGCMMD, ONLY: SND_FIELDS_TO_ATMOS !/OASICM USE W3IGCMMD, ONLY: SND_FIELDS_TO_ICE @@ -414,6 +415,7 @@ INTEGER, INTENT(IN) :: IMOD, TEND(2),ODAT(35) LOGICAL, INTENT(IN), OPTIONAL :: STAMP, NO_OUT !/OASIS INTEGER, INTENT(IN), OPTIONAL :: ID_LCOMM +!/OASIS INTEGER, INTENT(IN), OPTIONAL :: TIMEN(2) !/ !/ ------------------------------------------------------------------- / !/ Local parameters : @@ -429,7 +431,7 @@ INTEGER :: TTEST(2),DTTEST REAL :: ICEDAVE ! -!/OASIS INTEGER :: OASISED +!/MPI LOGICAL :: SBSED !/SEC1 INTEGER :: ISEC1 !/SBS INTEGER :: JJ, NDSOFLG !/MPI INTEGER :: IERR_MPI, NRQMAX @@ -588,6 +590,8 @@ END IF ! !/SBS NDSOFLG = 99 +!/MPI SBSED = .FALSE. +!/SBS SBSED = .TRUE. ! TAUWX = 0. TAUWY = 0. @@ -2221,9 +2225,9 @@ !/MPI FLGMPI = .FALSE. !/MPI NRQMAX = 0 ! -!/MPI IF ( ( ( DSEC21(TIME,TONEXT(:,1)).EQ.0. ) .OR. & -!/MPI ( DSEC21(TIME,TONEXT(:,7)).EQ.0. ) ).and. & -!/MPI (FLOUT(1) .OR. FLOUT(7)) ) THEN +!/MPI IF ( ( (DSEC21(TIME,TONEXT(:,1)).EQ.0.) .AND. FLOUT(1) ) .OR. & +!/MPI ( (DSEC21(TIME,TONEXT(:,7)).EQ.0.) .AND. FLOUT(7) .AND. & +!/MPI SBSED ) ) THEN !/MPI IF (.NOT. LPDLIB .or. (GTYPE.ne.UNGTYPE)) THEN !/MPI IF (NRQGO.NE.0 ) THEN !/DEBUGRUN WRITE(740+IAPROC,*) 'BEFORE STARTALL NRQGO.NE.0 , step 0', & @@ -2357,14 +2361,17 @@ DTTST = DSEC21 ( TIME, TOUT ) ! IF ( DTTST .EQ. 0. ) THEN - IF ( ( J .EQ. 1 ) .OR. ( J .EQ. 7 ) ) THEN + IF ( ( J .EQ. 1 ) & +!/SBS .OR. ( J .EQ. 7 ) & + ) THEN IF ( IAPROC .EQ. NAPFLD ) THEN !/MPI IF ( FLGMPI(1) ) CALL MPI_WAITALL & !/MPI ( NRQGO2, IRQGO2, STATIO, IERR_MPI ) !/MPI FLGMPI(1) = .FALSE. ! - IF ( J .EQ. 1 ) CALL W3IOGO & - ( 'WRITE', NDS(7), ITEST, IMOD ) +!/SBS IF ( J .EQ. 1 ) THEN + CALL W3IOGO( 'WRITE', NDS(7), ITEST, IMOD ) +!/SBS ENDIF ! !/SBS ! !/SBS ! Generate output flag file for fields and SBS coupling. @@ -2378,23 +2385,7 @@ !/SBS OPEN( UNIT=NDSOFLG, FILE=FOUTNAME) !/SBS CLOSE( NDSOFLG ) END IF - - IF ( J .EQ. 7 ) THEN -!/OASIS ! -!/OASIS ! Send variables to atmospheric or ocean circulation or ice model -!/OASIS ! -!/OASIS IF (DTOUT(7).NE.0) THEN -!/OASIS IF ( (MOD(ID_OASIS_TIME,NINT(DTOUT(7))) .EQ. 0 ) .AND. & -!/OASIS (DSEC21 (TIME00, TIME) .GT. 0.0) ) THEN -!/OASACM CALL SND_FIELDS_TO_ATMOS() -!/OASOCM CALL SND_FIELDS_TO_OCEAN() -!/OASICM CALL SND_FIELDS_TO_ICE() -!/OASIS ID_OASIS_TIME = DSEC21 ( TIME00 , TIME ) -!/OASIS ENDIF - -!/OASIS END IF - END IF - +! ELSE IF ( J .EQ. 2 ) THEN ! ! Point output @@ -2424,6 +2415,24 @@ END IF ELSE IF ( J .EQ. 6 ) THEN CALL W3IOSF ( NDS(13), IMOD ) +!/OASIS ELSE IF ( J .EQ. 7 ) THEN +!/OASIS ! +!/OASIS ! Send variables to atmospheric or ocean circulation or ice model +!/OASIS ! +!/OASIS IF (DTOUT(7).NE.0) THEN +!/OASIS IF ( (MOD(ID_OASIS_TIME/DTOUT(7),1.0) .LT. 1.E-7 ) .AND. & +!/OASIS (DSEC21 (TIME00, TIME) .GT. 0.0) ) THEN +!/OASIS IF ( (CPLT0 .AND. (DSEC21 (TIME, TIMEN) .GT. 0.0)) .OR. & +!/OASIS .NOT. CPLT0 ) THEN +!/OASIS IF (CPLT0) ID_OASIS_TIME = NINT(DSEC21 ( TIME00 , TIME )) +!/OASIS +!/OASACM CALL SND_FIELDS_TO_ATMOS() +!/OASOCM CALL SND_FIELDS_TO_OCEAN() +!/OASICM CALL SND_FIELDS_TO_ICE() +!/OASIS IF (.NOT. CPLT0) ID_OASIS_TIME = NINT(DSEC21 ( TIME00 , TIME )) +!/OASIS ENDIF +!/OASIS ENDIF +!/OASIS ENDIF END IF ! CALL TICK21 ( TOUT, DTOUT(J) ) diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 2ea322a40..c69a5f4ca 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 06-Jun-2018 | +!/ | Last update : 25-Sep-2020 | !/ +-----------------------------------+ !/ !/ 19-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -54,6 +54,7 @@ !/ 04-Oct-2019 : Inline Output implementation ( version 6.07 ) !/ (Roberto Padilla-Hernandez) !/ 16-Jul-2020 : Variable coupling time step ( version 7.08 ) +!/ 25-Sep-2020 : Oasis coupling at T+0 ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -242,11 +243,11 @@ USE W3ADATMD, ONLY: W3NAUX, W3DIMA, W3SETA !/MEMCHECK USE W3ADATMD, ONLY: MALLINFOS USE W3IDATMD -!/OASIS USE W3ODATMD, ONLY: DTOUT +!/OASIS USE W3ODATMD, ONLY: DTOUT, FLOUT USE W3ODATMD, ONLY: W3NOUT, W3SETO USE W3ODATMD, ONLY: NAPROC, IAPROC, NAPOUT, NAPERR, NOGRP, & NGRPP, IDOUT, FNMPRE, IOSTYP, NOTYPE - USE W3ODATMD, ONLY: OFILES + USE W3ODATMD, ONLY: FLOGRR, FLOGR, OFILES !/ USE W3FLDSMD USE W3INITMD @@ -255,6 +256,7 @@ !/ USE W3IOGRMD, ONLY: W3IOGR USE W3IOGOMD, ONLY: W3READFLGRD, FLDOUT, W3FLGRDFLAG + USE W3IORSMD, ONLY: OARST USE W3IOPOMD USE W3SERVMD, ONLY : NEXTLN, EXTCDE USE W3TIMEMD @@ -266,7 +268,11 @@ !/NCC USE WW_cc, ONLY: MPI_COMM_WW !/OASIS USE W3OACPMD, ONLY: CPL_OASIS_INIT, CPL_OASIS_GRID, & !/OASIS CPL_OASIS_DEFINE, CPL_OASIS_FINALIZE, & -!/OASIS ID_OASIS_TIME +!/OASIS ID_OASIS_TIME, CPLT0 +!/OASOCM USE W3OGCMMD, ONLY: SND_FIELDS_TO_OCEAN +!/OASACM USE W3AGCMMD, ONLY: SND_FIELDS_TO_ATMOS +!/OASICM USE W3IGCMMD, ONLY: SND_FIELDS_TO_ICE + !/TIDE USE W3TIDEMD ! USE W3NMLSHELMD @@ -326,8 +332,9 @@ CHARACTER(LEN=80) :: LINE CHARACTER(LEN=256) :: TMPLINE, TEST CHARACTER(LEN=1024) :: FLDIN + CHARACTER(LEN=1024) :: FLDRST CHARACTER(LEN=80) :: LINEIN - CHARACTER(LEN=8) :: WORDS(6)='' + CHARACTER(LEN=8) :: WORDS(7)='' !/COU CHARACTER(LEN=30) :: OFILE ! @@ -930,11 +937,18 @@ !/COU FLGR2, IAPROC, NAPOUT, IERR ) !/COU IF ( IERR .NE. 0 ) GOTO 2222 !/COU FLDIN = NML_OUTPUT_TYPE%COUPLING%RECEIVED +!/COU CPLT0 = NML_OUTPUT_TYPE%COUPLING%COUPLET0 END IF ! J END IF ! ODAT END DO ! J + ! Extra fields to be written in the restart + FLDRST = NML_OUTPUT_TYPE%RESTART%EXTRA + CALL W3FLGRDFLAG ( NDSO, NDSO, NDSE, FLDRST, FLOGR, & + FLOGRR, IAPROC, NAPOUT, IERR ) + IF ( IERR .NE. 0 ) GOTO 2222 + ! force minimal allocation to avoid memory seg fault IF ( .NOT.ALLOCATED(X) .AND. NPTS.EQ.0 ) ALLOCATE ( X(1), Y(1), PNAMES(1) ) @@ -1225,7 +1239,7 @@ ! CHECKPOINT IF(J .EQ. 4) THEN ODAT(38)=0 - WORDS(1:6)='' + WORDS(1:7)='' READ (NDSI,'(A)') LINEIN READ(LINEIN,*,iostat=ierr) WORDS READ(WORDS( 1 ), * ) ODAT(16) @@ -1234,10 +1248,17 @@ READ(WORDS( 4 ), * ) ODAT(19) READ(WORDS( 5 ), * ) ODAT(20) IF (WORDS(6) .EQ. 'T') THEN - CALL NEXTLN ( COMSTR , NDSI , NDSEN ) + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(8-1)+1,5*8) WRITE(*,*)(ODAT(I),I=5*(8-1)+1,5*8) END IF + IF (WORDS(7) .EQ. 'T') THEN + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) + READ (NDSI,*,END=2001,ERR=2002) FLDRST + CALL W3FLGRDFLAG ( NDSO, NDSO, NDSE, FLDRST, FLOGR, & + FLOGRR, IAPROC, NAPOUT, IERR ) + IF ( IERR .NE. 0 ) GOTO 2222 + END IF ELSE ! !INLINE NEW VARIABLE TO READ IF PRESENT OFILES(J), IF NOT ==0 @@ -1270,6 +1291,22 @@ END IF +!/COU ELSE IF(J .EQ. 7) THEN +!/COU WORDS(1:6)='' +!/COU READ (NDSI,'(A)') LINEIN +!/COU READ(LINEIN,*,iostat=ierr) WORDS +!/COU +!/COU READ(WORDS( 1 ), * ) ODAT(31) +!/COU READ(WORDS( 2 ), * ) ODAT(32) +!/COU READ(WORDS( 3 ), * ) ODAT(33) +!/COU READ(WORDS( 4 ), * ) ODAT(34) +!/COU READ(WORDS( 5 ), * ) ODAT(35) +!/COU +!/COU IF (WORDS(6) .EQ. 'T') THEN +!/COU CPLT0 = .TRUE. +!/COU ELSE +!/COU CPLT0 = .FALSE. +!/COU END IF ELSE OFILES(J)=0 READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J) @@ -1425,7 +1462,6 @@ ! force minimal allocation to avoid memory seg fault IF ( .NOT.ALLOCATED(X) .AND. NPTS.EQ.0 ) ALLOCATE ( X(1), Y(1), PNAMES(1) ) - ! 2.6 Homogeneous field data IF ( FLHOM ) THEN @@ -1755,6 +1791,18 @@ !/TIDE IF (FLAGSTIDE(2)) CALL W3FLDTIDE1 ( 'READ', NDSF(2), NDST, NDSEN, NX, NY, IDSTR(2), IERR ) !/TIDE END IF ! +!/COU ! Sent coupled fields must be written in the restart when coupling at T+0 +!/COU IF (CPLT0) THEN +!/COU DO J=1, NOGRP +!/COU FLOGR(J) = FLOGR(J) .OR. FLG2(J) +!/COU DO I=1, NGRPP +!/COU FLOGRR(J,I) = FLOGRR(J,I) .OR. FLGR2(J,I) +!/COU END DO +!/COU END DO +!/COU ENDIF +! + OARST = ANY(FLOGR) +! CALL W3INIT ( 1, .FALSE., 'ww3', NDS, NTRACE, ODAT, FLGRD, FLGR2, FLGD, & FLG2, NPTS, X, Y, PNAMES, IPRT, PRTFRM, MPI_COMM, & FLAGSTIDEIN=FLAGSTIDE ) @@ -1825,7 +1873,7 @@ ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,960) CALL W3WAVE ( 1, ODAT, TIMEN & -!/OASIS ,.TRUE., .FALSE., MPI_COMM & +!/OASIS , .TRUE., .FALSE., MPI_COMM, TIMEN & ) ! GOTO 2222 @@ -1853,6 +1901,14 @@ !/NCC GRIDS(1)%X0,GRIDS(1)%Y0,GRIDS(1)%SX,GRIDS(1)%SY !/NCC WRITE(9753) GRIDS(1)%MAPSTA !/NCC END IF + +!/OASIS ! Send coupling fields at the initial time step +!/OASIS IF ( FLOUT(7) .AND. CPLT0 ) THEN +!/OASACM CALL SND_FIELDS_TO_ATMOS() +!/OASOCM CALL SND_FIELDS_TO_OCEAN() +!/OASICM CALL SND_FIELDS_TO_ICE() +!/OASIS END IF + 700 CONTINUE ! !/NCC IF ( IAPROC .EQ. NAPOUT .AND. DEBUG_NCC ) WRITE(9753) TIME0 @@ -1910,7 +1966,7 @@ DTTST = DSEC21 ( TIME0 , TTT ) END IF !/OASIS ELSE -!/OASIS ID_OASIS_TIME = DSEC21 ( TIME00 , TIME ) +!/OASIS ID_OASIS_TIME = NINT(DSEC21 ( TIME00 , TIME )) !/OASIS IF ( (DTOUT(7).NE.0) .AND. & !/OASIS (MOD(ID_OASIS_TIME, NINT(DTOUT(7))) .EQ. 0 ) .AND. & !/OASIS (DSEC21 (TIME, TIMEEND) .GT. 0.0)) DTTST=0. @@ -2305,7 +2361,7 @@ TIME0 = TTIME ! CALL W3WAVE ( 1, ODAT, TIME0 & -!/OASIS ,.TRUE., .FALSE., MPI_COMM & +!/OASIS , .TRUE., .FALSE., MPI_COMM, TIMEN & ) !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL SECTION 9' @@ -2347,7 +2403,7 @@ IF ( DTTST .EQ. 0. ) THEN IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,*) ' ' CALL W3WAVE ( 1, ODAT, TIME0 & -!/OASIS , .TRUE., .FALSE., MPI_COMM & +!/OASIS , .TRUE., .FALSE., MPI_COMM, TIMEN & ) END IF END IF diff --git a/model/ftn/ww3_uprstr.ftn b/model/ftn/ww3_uprstr.ftn index 849a1b247..986e97681 100644 --- a/model/ftn/ww3_uprstr.ftn +++ b/model/ftn/ww3_uprstr.ftn @@ -25,6 +25,7 @@ !/ with SMC grids (Andy Saulter) ( version 6.07 ) !/ 01-Nov-2019 : UPD5 and UPD6 use wind data either from anl.XXX file !/ or from restart under WRST switch (Andy Saulter) +!/ 06-Oct-2020 : Added namelist input options ( version 7.11 ) !/ !/ Copyright 2010 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -324,6 +325,8 @@ USE W3ODATMD, ONLY: IAPROC, NAPERR, NAPLOG, NDS, NAPOUT USE W3ODATMD, ONLY: NDSE, NDSO, NDST, IDOUT, FNMPRE !/WRST USE W3IDATMD +! + USE W3NMLUPRSTRMD ! IMPLICIT NONE !/ @@ -332,10 +335,13 @@ !/ INTEGER :: NDSI, NDSM, NDSTRC, NTRACE, IERR, I, J CHARACTER :: COMSTR*1 +! + TYPE(NML_RESTART_T) :: NML_RESTART + TYPE(NML_UPDATE_T) :: NML_UPDATE ! ! REAL, ALLOCATABLE :: BETAW(:) ! LOGICAL, ALLOCATABLE :: MASK(:) - LOGICAL :: anl_exists, CORWSEA + LOGICAL :: anl_exists, CORWSEA, FLGNML INTEGER :: IMOD, NDSEN, IX, IY, IK, ITH, & IXW, IYW REAL, ALLOCATABLE :: UPDPRCNT(:,:),VATMP(:), HSIG(:,:), & @@ -394,7 +400,6 @@ ! WRITE (NDSO,900) ! -! !/WRST !Compiling with WRST will allow access to options UPD5/6 !/WRST WRSTON = .TRUE. !/WRST WRITE (NDSO,*) '*** UPRSTR will read wind from restart files' @@ -407,31 +412,53 @@ !/SMC WRITE (NDSO,*) '*** UPRSTR set to work with SMC grid model' !/ !/ ------------------------------------------------------------------- / -! 2. Read the ww3_uprstr.inp -!/ - J = LEN_TRIM(FNMPRE) - OPEN (NDSI,FILE=FNMPRE(:J)//'ww3_uprstr.inp',STATUS='OLD', & - ERR=800,IOSTAT=IERR) - READ (NDSI,'(A)',END=801,ERR=802) COMSTR - IF (COMSTR.EQ.' ') COMSTR = '$' - WRITE (NDSO,901) COMSTR -! - CALL NEXTLN ( COMSTR , NDSI , NDSEN ) - READ (NDSI,*,END=2001,ERR=2002) TIME - CALL NEXTLN ( COMSTR , NDSI , NDSEN ) - READ (NDSI,*,END=2001,ERR=2002) UPDPROC - CALL NEXTLN ( COMSTR , NDSI , NDSEN ) - READ (NDSI,*,END=2001,ERR=2002) PRCNTG - CALL NEXTLN ( COMSTR , NDSI , NDSEN ) - READ (NDSI,*,END=2001,ERR=2002) PRCNTG_CAP -!/F CALL NEXTLN ( COMSTR , NDSI , NDSEN ) -!/F READ (NDSI,*,END=2001,ERR=2002) FLNMCOR - CALL NEXTLN ( COMSTR , NDSI , NDSEN ) - READ (NDSI,*,END=2001,ERR=2002) FLNMANL +! 2. Read the ww3_uprstr input data +! +! process ww3_uprstr namelist +! + INQUIRE(FILE=TRIM(FNMPRE)//"ww3_uprstr.nml", EXIST=FLGNML) + IF (FLGNML) THEN + ! Read namelist + CALL W3NMLUPRSTR (NDSI, TRIM(FNMPRE)//'ww3_uprstr.nml', NML_RESTART, & + NML_UPDATE, IERR) + READ(NML_RESTART%RESTARTTIME, *) TIME + UPDPROC = NML_UPDATE%UPDPROC + PRCNTG = NML_UPDATE%PRCNTG + PRCNTG_CAP = NML_UPDATE%PRCNTGCAP + THRWSEA = NML_UPDATE%THRWSEA + FLNMANL = NML_UPDATE%FILE + END IF +!/ +! otherwise read from the .inp file + IF (.NOT. FLGNML) THEN + J = LEN_TRIM(FNMPRE) + OPEN (NDSI,FILE=FNMPRE(:J)//'ww3_uprstr.inp',STATUS='OLD', & + ERR=800,IOSTAT=IERR) + READ (NDSI,'(A)',END=801,ERR=802) COMSTR + IF (COMSTR.EQ.' ') COMSTR = '$' + WRITE (NDSO,901) COMSTR +! + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) + READ (NDSI,*,END=2001,ERR=2002) TIME + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) + READ (NDSI,*,END=2001,ERR=2002) UPDPROC + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) + IF (UPDPROC .EQ. 'UPD0F') THEN + READ (NDSI,*,END=2001,ERR=2002) PRCNTG + ELSE + IF ((UPDPROC .EQ. 'UPD2') .OR. (UPDPROC .EQ. 'UPD3')) THEN +! CALL NEXTLN ( COMSTR , NDSI , NDSEN ) + READ (NDSI,*,END=2001,ERR=2002) PRCNTG_CAP +!/F CALL NEXTLN ( COMSTR , NDSI , NDSEN ) +!/F READ (NDSI,*,END=2001,ERR=2002) FLNMCOR + ELSE + READ (NDSI,*,END=2001,ERR=2002) PRCNTG_CAP, THRWSEA + END IF + CALL NEXTLN ( COMSTR , NDSI , NDSEN ) + READ (NDSI,*,END=2001,ERR=2002) FLNMANL + END IF + ENDIF !/T WRITE (NDSO,*)' TIME: ',TIME -!/T WRITE (NDSO,1004)' FLNMANL: ', trim(FLNMANL), & -!/T ' UPDPROC: ', trim(UPDPROC) -!/T WRITE (NDSO,*)' PRCNTG: ', PRCNTG !/ !/ ------------------------------------------------------------------- / ! 3. Read model definition file. @@ -453,7 +480,8 @@ 'file is not read' CALL EXTCDE ( 1 ) ELSE - WRITE (NDSO,1004) 'Updating Restart File' + WRITE (NDSO,1004) ' Updating Restart File' + WRITE (NDSO,*) ' TIME: ',TIME END IF END IF !/T WRITE (NDST,*), MYNAME,' : Exporting VA as imported to VA01.txt' @@ -469,6 +497,7 @@ !/ CASE ('UPD0F') WRITE (NDSO,902) 'UPD0F' + WRITE (NDSO,1005) ' PRCNTG = ',PRCNTG !/T ALLOCATE( VATMP (SIZE(VA ,1) )) !/T ALLOCATE( SWHANL (SIZE(MAPSTA,1), SIZE(MAPSTA,2))) !/T ALLOCATE( SWHBCKG(SIZE(MAPSTA,1), SIZE(MAPSTA,2))) @@ -500,6 +529,8 @@ !/ CASE ('UPD2') WRITE (NDSO,902) 'UPD2' + WRITE (NDSO,1005) ' PRCNTG_CAP = ',PRCNTG_CAP + WRITE (NDSO,1006) ' Reading updated SWH from: ',trim(FLNMANL) ! ! Array allocation ALLOCATE ( VATMP(SIZE(VA,1))) @@ -572,6 +603,8 @@ !/ CASE ('UPD3') WRITE (NDSO,902) 'UPD3' + WRITE (NDSO,1005) ' PRCNTG_CAP = ',PRCNTG_CAP + WRITE (NDSO,1006) ' Reading updated SWH from: ',trim(FLNMANL) ! ! Array allocation ALLOCATE ( VATMP(SIZE(VA,1))) @@ -667,9 +700,12 @@ !/ CASE ('UPD5') WRITE (NDSO,902) 'UPD5' + WRITE (NDSO,1005) ' PRCNTG_CAP = ',PRCNTG_CAP + WRITE (NDSO,1005) ' THRWSEA = ',THRWSEA + WRITE (NDSO,1006) ' Reading updated SWH from: ',trim(FLNMANL) ! Presently set hardwired THRWSEA energy threshold here ! not user defined in input file - THRWSEA = 0.7 + ! THRWSEA = 0.7 ! ! Array allocation ALLOCATE ( VATMP(SIZE(VA,1))) @@ -734,8 +770,11 @@ !/SMC IX = 1 !/SMC IY = ISEA !/SMC IF( SMCWND ) THEN -!/SMC IXW = IX -!/SMC IYW = IY +!/SMC ! Wind arrays allocated using (X,Y) convention for regular grids +!/SMC ! but overriding here for the SMC grid which are always defined +!/SMC ! as (NSEA,1) by switching the IY and IX dimension values around +!/SMC IXW = IY +!/SMC IYW = IX !/SMC ELSE !/SMC IXW = MAPSF(ISEA,1) !/SMC IYW= MAPSF(ISEA,2) @@ -788,10 +827,13 @@ !/ CASE ('UPD6') WRITE (NDSO,902) 'UPD6' + WRITE (NDSO,1005) ' PRCNTG_CAP = ',PRCNTG_CAP + WRITE (NDSO,1005) ' THRWSEA = ',THRWSEA + WRITE (NDSO,1006) ' Reading updated SWH from: ',trim(FLNMANL) ! Presently set hardwired CORWSEA logical and THRWSEA energy ! thresholds here, not user defined in input file CORWSEA = .FALSE. - THRWSEA = 0.7 + !THRWSEA = 0.7 ! ! Array allocation ALLOCATE ( VATMP(SIZE(VA,1))) @@ -856,8 +898,11 @@ !/SMC IX = 1 !/SMC IY = ISEA !/SMC IF( SMCWND ) THEN -!/SMC IXW = IX -!/SMC IYW = IY +!/SMC ! Wind arrays allocated using (X,Y) convention for regular grids +!/SMC ! but overriding here for the SMC grid which are always defined +!/SMC ! as (NSEA,1) by switching the IY and IX dimension values around +!/SMC IXW = IY +!/SMC IYW = IX !/SMC ELSE !/SMC IXW = MAPSF(ISEA,1) !/SMC IYW = MAPSF(ISEA,2) @@ -982,7 +1027,7 @@ ! 999 FORMAT (/' End of program '/ & ' ========================================='/ & - ' WAVEWATCH III ww3_uprsrt '/) + ' WAVEWATCH III ww3_uprstr '/) ! 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3UPRSTR : '/ & ' ERROR IN OPENING INPUT FILE'/ & @@ -995,7 +1040,8 @@ ' ERROR IN READING FROM INPUT FILE'/ & ' IOSTAT =',I5/) 1004 FORMAT (/' '/,A/) -1005 FORMAT (/' '/,A, I5, I5/) +1005 FORMAT (' ',A, F6.3/) +1006 FORMAT (' ',A, A/) ! !/ CONTAINS @@ -1109,6 +1155,11 @@ CHARACTER(12), PARAMETER :: MYNAME='CHECK_PRCNTG' !/T !/T WRITE (NDSO,*) trim(MYNAME)," The original correction is ",PRCNTG +!/T WRITE (NDSO,*) trim(MYNAME)," The cap is ",PRCNTG_CAP + IF ( PRCNTG_CAP < 1. ) THEN + WRITE (NDSO,*) trim(MYNAME)," WARNING: PRCNTG_CAP set < 1." + WRITE (NDSO,*) trim(MYNAME)," This may introduce spurious corrections" + END IF !/T WRITE (NDSO,*) trim(MYNAME)," The cap is ",PRCNTG_CAP IF ( PRCNTG > 1. ) THEN !/T WRITE (NDSO,*) trim(MYNAME)," PRCNTG > 1." diff --git a/model/inp/ww3_shel.inp b/model/inp/ww3_shel.inp index 4809e3a6b..2b45e0709 100644 --- a/model/inp/ww3_shel.inp +++ b/model/inp/ww3_shel.inp @@ -309,8 +309,10 @@ $ $ Type 4 : Restart files (no additional data required). $ The data file is restartN.ww3, see $ w3iors.ftn for additional doc. +$ Flag for second restart (data server mode) +$ Flag for extra fields in the restart file (coupling restart) $ - 19680606 030000 3600 19680607 030000 + 19680606 030000 3600 19680607 030000 F F $ $ Type 5 : Boundary data (no additional data required). $ The data file is nestN.ww3, see @@ -325,10 +327,11 @@ $ 0 999 1 0 999 1 T $ $ Type 7 : Coupling. (must be fully commented if not used with switch COU) +$ Couple at T+0 flag $ Namelist type selection is used here. $ Diagnostic fields to exchange. (see namcouple for more information) $ -$ 19680606 000000 3600 20010102 000000 +$ 19680606 000000 3600 20010102 000000 F $ N $ $ - Sent fields by ww3: diff --git a/model/inp/ww3_uprstr.inp b/model/inp/ww3_uprstr.inp index ad9012e5c..f0ee6faf9 100644 --- a/model/inp/ww3_uprstr.inp +++ b/model/inp/ww3_uprstr.inp @@ -12,14 +12,31 @@ $ $ $ $ $ Choose algorithm to update restart file $ $ UPDN for the Nth approach $ +$ -------------------------------------------------------------------- $ $ The UPDN*, with N<2 the same correction factor is applied at all $ -$ the grid points $ +$ the grid points using: $ +$ PRCNTG is input for option UPD0F and is the correction $ +$ factor applied to all the gridpoints (e.g. 1.) $ +$ $ $ UPD0C:: ELIMINATED $ $ UPDOF:: Option 0F All the spectra are updated with a constant $ $ fac=HsAnl/HsBckg. $ $ Expected input: PRCNTG, as defined at fac $ $ UPD1 :: ELIMINATED $ -$ UPDN, with N>1 each gridpoint has its own update factor. $ +$ -------------------------------------------------------------------- $ +$ UPD0F +$ 0.6754 +$ $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>1 each gridpoint has its own update factor and uses: $ +$ PRCNTG_CAP - global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the $ +$ gridpoints, as both a multiple or divisor (e.g. cap at 5.0 $ +$ means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value $ +$ given should not be less than 1.0 $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ $ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ $ grid point according to HsBckg and HsAnl $ $ Expected input the Analysis field, grbtxt format $ @@ -36,6 +53,21 @@ $ individual spectra; the map is used to determine the $ $ weighting surfaces. $ $ Expected input: the Analysis field, grbtxt format and the $ $ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ + UPD2 + 10.0 + anl.grbtxt +$ $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>=5 each gridpoint has its own update factor and uses $ +$ wind field data to evaluate wind-sea and swell fields. Also $ +$ uses: $ +$ PRCNTG_CAP - see above $ +$ THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the $ +$ sea-state is considered wind-sea dominated by the DA scheme $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ $ $ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ $ applied to wind-sea parts of the spectrum only when $ $ wind-sea is the dominant component, otherwise the whole $ @@ -47,24 +79,10 @@ $ wind-sea components are also shifted in frequency space $ $ using Toba (1973) $ $ Expected input: the Analysis Hs field plus background wind $ $ speed and direction $ - UPD3 -$ -$ PRCNTG is input for option UPD0F and is the correction factor $ -$ applied to all the gridpoints (e.g. 1.) $ -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ -$ the maximum SWH correction factor applied to all the gridpoints, as $ -$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ -$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ -$ $ - 10. -$ $ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ $ - anl.grbtxt +$ -------------------------------------------------------------------- $ +$ UPD6 +$ 10.0 0.7 +$ anl.grbtxt $ $ $ -------------------------------------------------------------------- $ $ WAVEWATCH III EoF ww3_uprstr.inp $ diff --git a/model/nml/ww3_shel.nml b/model/nml/ww3_shel.nml index d2d44ad1e..a7262b720 100644 --- a/model/nml/ww3_shel.nml +++ b/model/nml/ww3_shel.nml @@ -230,6 +230,11 @@ ! - Atmospheric model : WND ! - Ice model : ICE IC1 IC5 ! +! * Coupling at T+0 (extra fields in the restart needed) +! +! * extra fields to be written to the restart: +! - The list includes all fields sent by coupling exchange only +! ! * namelist must be terminated with / ! * definitions & defaults: ! TYPE%FIELD%LIST = 'unset' @@ -244,6 +249,8 @@ ! TYPE%PARTITION%FORMAT = T ! TYPE%COUPLING%SENT = 'unset' ! TYPE%COUPLING%RECEIVED = 'unset' +! TYPE%COUPLING%COUPLET0 = .FALSE. +! TYPE%RESTART%EXTRA = 'unset' ! ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML diff --git a/model/nml/ww3_uprstr.nml b/model/nml/ww3_uprstr.nml new file mode 100644 index 000000000..947e024b8 --- /dev/null +++ b/model/nml/ww3_uprstr.nml @@ -0,0 +1,113 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD2' + UPDATE%PRCNTGCAP = 10.0 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 133165df7..0afb37309 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -2010,18 +2010,18 @@ if [ "$assim" = 'y' ] then echo ' ' >> matrix.body - echo "$rtst -s ST4 -w work_UPD0F_O -i input_UPD0F_O $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -N -w work_UPD0F_O -i input_UPD0F_O $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD0F_U -i input_UPD0F_U $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD2_O -i input_UPD2_O $ww3 ww3_ta1" >> matrix.body - echo "$rtst -s ST4 -w work_UPD2_U -i input_UPD2_U $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -N -w work_UPD2_U -i input_UPD2_U $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD2_U_cap -i input_UPD2_U_cap $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD3_O -i input_UPD3_O $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD3_U -i input_UPD3_U $ww3 ww3_ta1" >> matrix.body - echo "$rtst -s ST4 -w work_UPD3_U_cap -i input_UPD3_U_cap $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -N -w work_UPD3_U_cap -i input_UPD3_U_cap $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD5_O -i input_UPD5_O $ww3 ww3_ta1" >> matrix.body - echo "$rtst -s ST4 -w work_UPD5_U -i input_UPD5_U $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -N -w work_UPD5_U -i input_UPD5_U $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD5_U_cap -i input_UPD5_U_cap $ww3 ww3_ta1" >> matrix.body - echo "$rtst -s ST4 -w work_UPD6_O -i input_UPD6_O $ww3 ww3_ta1" >> matrix.body + echo "$rtst -s ST4 -N -w work_UPD6_O -i input_UPD6_O $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD6_U -i input_UPD6_U $ww3 ww3_ta1" >> matrix.body echo "$rtst -s ST4 -w work_UPD6_U_cap -i input_UPD6_U_cap $ww3 ww3_ta1" >> matrix.body fi @@ -2030,10 +2030,27 @@ if [ "$oasis" = 'y' ] && [ "$dist" = 'y' ] then echo ' ' >> matrix.body - echo "$rtst -s OASACM -w work_OASACM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body - echo "$rtst -s OASACM2 -w work_OASACM2 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body - echo "$rtst -s OASOCM -w work_OASOCM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body - echo "$rtst -s OASICM -w work_OASICM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASACM -w work_OASACM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASACM2 -w work_OASACM2 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "mkdir -p ww3_tp2.14/work_OASACM3" >> matrix.body + echo "cp ww3_tp2.14/input/ww3_shel_OASACM3.nml ww3_tp2.14/work_OASACM3/ww3_shel.nml" >> matrix.body + echo "$rtst -s OASACM3 -w work_OASACM3 -f -p $mpi -n $np/2 -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "mkdir -p ww3_tp2.14/work_OASACM4" >> matrix.body + echo "ln -sf ../work_OASACM3/restart001.ww3 ww3_tp2.14/work_OASACM4/restart.ww3" >> matrix.body + echo "$rtst -r ww3_grid -s OASACM4 -w work_OASACM4 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -r ww3_shel -s OASACM4 -w work_OASACM4 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -r ww3_ounf -s OASACM4 -w work_OASACM4 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "mkdir -p ww3_tp2.14/work_OASACM5" >> matrix.body + echo "ln -sf ../work_OASACM4/restart001.ww3 ww3_tp2.14/work_OASACM5/restart.ww3" >> matrix.body + echo "$rtst -r ww3_grid -s OASACM5 -w work_OASACM5 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -r ww3_shel -s OASACM5 -w work_OASACM5 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -r ww3_ounf -s OASACM5 -w work_OASACM5 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "mv ww3_tp2.14/input/ww3_ounf.inp ww3_tp2.14/input/ww3_ounf.inp.bak" >> matrix.body + echo "cp ww3_tp2.14/input/ww3_ounf.inp-OASACM6 ww3_tp2.14/input/ww3_ounf.inp" >> matrix.body + echo "$rtst -g OASACM6 -s OASACM6 -w work_OASACM6 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "mv ww3_tp2.14/input/ww3_ounf.inp.bak ww3_tp2.14/input/ww3_ounf.inp" >> matrix.body + echo "$rtst -s OASOCM -w work_OASOCM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASICM -w work_OASICM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body fi # 365_day and 360_day calendars, no switch sharing here diff --git a/regtests/bin/matrix.comp b/regtests/bin/matrix.comp index 3d6604a81..609675914 100755 --- a/regtests/bin/matrix.comp +++ b/regtests/bin/matrix.comp @@ -279,6 +279,9 @@ ncdump $file > $output/${basename}_base.txt ncdump $return_comp/$run/$file > $output/${basename}_comp.txt diff $output/${basename}_base.txt $output/${basename}_comp.txt > $output/${basename}_diff.txt + if [[ $basename == rmp_* ]]; then + grep -v "history" $output/${basename}_diff.txt > $output/${basename}_diff.txt + fi size_1=`wc -l $output/${basename}_diff.txt | awk '{ print $1}'` if [ "$size_1" = '0' ] then diff --git a/regtests/bin/run_test b/regtests/bin/run_test index cdc02dfb0..0ff6b5495 100755 --- a/regtests/bin/run_test +++ b/regtests/bin/run_test @@ -2547,12 +2547,12 @@ then # Check for input file # select inp/nml files -#if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] -#then -# ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" -#else - ifile="`ls $path_i/$prog.inp 2>/dev/null`" -#fi + if [ $nml_input ] && [ ! -z "`ls ${path_i}/${prog}.nml 2>/dev/null`" ] + then + ifile="`ls ${path_i}/${prog}.nml 2>/dev/null`" + else + ifile="`ls $path_i/$prog.inp 2>/dev/null`" + fi if [ $? = 0 ] then diff --git a/regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.inp index a348eb153..61ad1fefa 100644 --- a/regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.inp @@ -1,57 +1,32 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ -$ Choose algorithm to update restart file -$ UPDN for the Nth approach -$ The UPDN*, with N<2 the same correction factor is applied at all the grid points -$ UPD0C:: ELIMINATED -$ UPDOF:: Option 0F All the spectra are updated with a constant -$ fac=HsAnl/HsBckg. -$ Expected input: PRCNTG, as defined at fac -$ UPD1 :: ELIMINATED -$ UPDN, with N>1 each gridpoint has its own update factor. -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -$ according to HsBckg and HsAnl -$ Expected input the Analysis field, grbtxt format -$ UPD3 :: Option 3 The update factor is a surface with the shape of -$ the background spectrum. -$ Expected input the Analysis field, grbtxt format -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] -$ Option 4 The generalization of the UPD3. The update factor -$ is the sum of surfaces which are applied on the background -$ spectrum. -$ The algorithm requires the mapping of each partition on the -$ individual spectra; the map is used to determine the weighting -$ surfaces. -$ Expected input: the Analysis field, grbtxt format and the -$ functions(frq,theta) of the update to be applied. +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ +$ Choose algorithm to update restart file $ +$ UPDN for the Nth approach $ +$ -------------------------------------------------------------------- $ +$ The UPDN*, with N<2 the same correction factor is applied at all $ +$ the grid points using: $ +$ PRCNTG is input for option UPD0F and is the correction $ +$ factor applied to all the gridpoints (e.g. 1.) $ +$ $ +$ UPD0C:: ELIMINATED $ +$ UPDOF:: Option 0F All the spectra are updated with a constant $ +$ fac=HsAnl/HsBckg. $ +$ Expected input: PRCNTG, as defined at fac $ +$ UPD1 :: ELIMINATED $ +$ -------------------------------------------------------------------- $ UPD0F -$ -$ PRCNTG is input for option 1 and it is the percentage of correction -$applied to all the gridpoints (e.g. 1.) -$ 0.6754 $ -$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -$ maximun correction applied to all the gridpoints (e.g. 0.5) -$ - 0.6 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ - anl.grbtxt -$ $ -------------------------------------------------------------------- $ $ WAVEWATCH III EoF ww3_uprstr.inp $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.nml new file mode 100644 index 000000000..b1fbb0f8b --- /dev/null +++ b/regtests/ww3_ta1/input_UPD0F_O/ww3_uprstr.nml @@ -0,0 +1,112 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD0F' + UPDATE%PRCNTG = 0.6754 +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.inp index c16e94d74..8ffc31714 100644 --- a/regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.inp @@ -1,57 +1,32 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ -$ Choose algorithm to update restart file -$ UPDN for the Nth approach -$ The UPDN*, with N<2 the same correction factor is applied at all the grid points -$ UPD0C:: ELIMINATED -$ UPDOF:: Option 0F All the spectra are updated with a constant -$ fac=HsAnl/HsBckg. -$ Expected input: PRCNTG, as defined at fac -$ UPD1 :: ELIMINATED -$ UPDN, with N>1 each gridpoint has its own update factor. -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -$ according to HsBckg and HsAnl -$ Expected input the Analysis field, grbtxt format -$ UPD3 :: Option 3 The update factor is a surface with the shape of -$ the background spectrum. -$ Expected input the Analysis field, grbtxt format -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] -$ Option 4 The generalization of the UPD3. The update factor -$ is the sum of surfaces which are applied on the background -$ spectrum. -$ The algorithm requires the mapping of each partition on the -$ individual spectra; the map is used to determine the weighting -$ surfaces. -$ Expected input: the Analysis field, grbtxt format and the -$ functions(frq,theta) of the update to be applied. +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ +$ Choose algorithm to update restart file $ +$ UPDN for the Nth approach $ +$ -------------------------------------------------------------------- $ +$ The UPDN*, with N<2 the same correction factor is applied at all $ +$ the grid points using: $ +$ PRCNTG is input for option UPD0F and is the correction $ +$ factor applied to all the gridpoints (e.g. 1.) $ +$ $ +$ UPD0C:: ELIMINATED $ +$ UPDOF:: Option 0F All the spectra are updated with a constant $ +$ fac=HsAnl/HsBckg. $ +$ Expected input: PRCNTG, as defined at fac $ +$ UPD1 :: ELIMINATED $ +$ -------------------------------------------------------------------- $ UPD0F -$ -$ PRCNTG is input for option 1 and it is the percentage of correction -$applied to all the gridpoints (e.g. 1.) -$ 4.6754 $ -$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -$ maximun correction applied to all the gridpoints (e.g. 0.5) -$ - 0.6 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ - anl.grbtxt -$ $ -------------------------------------------------------------------- $ $ WAVEWATCH III EoF ww3_uprstr.inp $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.nml new file mode 100644 index 000000000..9a0529b27 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD0F_U/ww3_uprstr.nml @@ -0,0 +1,112 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD0F' + UPDATE%PRCNTG = 4.6754 +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.inp index 904aa5052..6e06dea4b 100644 --- a/regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.inp @@ -1,57 +1,46 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ -$ Choose algorithm to update restart file -$ UPDN for the Nth approach -$ The UPDN*, with N<2 the same correction factor is applied at all the grid points -$ UPD0C:: ELIMINATED -$ UPDOF:: Option 0F All the spectra are updated with a constant -$ fac=HsAnl/HsBckg. -$ Expected input: PRCNTG, as defined at fac -$ UPD1 :: ELIMINATED -$ UPDN, with N>1 each gridpoint has its own update factor. -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -$ according to HsBckg and HsAnl -$ Expected input the Analysis field, grbtxt format -$ UPD3 :: Option 3 The update factor is a surface with the shape of -$ the background spectrum. -$ Expected input the Analysis field, grbtxt format -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] -$ Option 4 The generalization of the UPD3. The update factor -$ is the sum of surfaces which are applied on the background -$ spectrum. -$ The algorithm requires the mapping of each partition on the -$ individual spectra; the map is used to determine the weighting -$ surfaces. -$ Expected input: the Analysis field, grbtxt format and the -$ functions(frq,theta) of the update to be applied. +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>1 each gridpoint has its own update factor and uses: $ +$ PRCNTG_CAP - global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the $ +$ gridpoints, as both a multiple or divisor (e.g. cap at 5.0 $ +$ means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value $ +$ given should not be less than 1.0 $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ UPD2 -$ -$ PRCNTG is input for option 1 and it is the percentage of correction -$applied to all the gridpoints (e.g. 1.) -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -$ maximun correction applied to all the gridpoints (e.g. 0.5) -$ - 3 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 3.0 anl.grbtxt $ $ -------------------------------------------------------------------- $ $ WAVEWATCH III EoF ww3_uprstr.inp $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.nml new file mode 100644 index 000000000..023b5f4ac --- /dev/null +++ b/regtests/ww3_ta1/input_UPD2_O/ww3_uprstr.nml @@ -0,0 +1,113 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD2' + UPDATE%PRCNTGCAP = 3.0 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.inp index 5150e74bf..bffe7786a 100644 --- a/regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.inp @@ -1,57 +1,46 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ -$ Choose algorithm to update restart file -$ UPDN for the Nth approach -$ The UPDN*, with N<2 the same correction factor is applied at all the grid points -$ UPD0C:: ELIMINATED -$ UPDOF:: Option 0F All the spectra are updated with a constant -$ fac=HsAnl/HsBckg. -$ Expected input: PRCNTG, as defined at fac -$ UPD1 :: ELIMINATED -$ UPDN, with N>1 each gridpoint has its own update factor. -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -$ according to HsBckg and HsAnl -$ Expected input the Analysis field, grbtxt format -$ UPD3 :: Option 3 The update factor is a surface with the shape of -$ the background spectrum. -$ Expected input the Analysis field, grbtxt format -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] -$ Option 4 The generalization of the UPD3. The update factor -$ is the sum of surfaces which are applied on the background -$ spectrum. -$ The algorithm requires the mapping of each partition on the -$ individual spectra; the map is used to determine the weighting -$ surfaces. -$ Expected input: the Analysis field, grbtxt format and the -$ functions(frq,theta) of the update to be applied. +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>1 each gridpoint has its own update factor and uses: $ +$ PRCNTG_CAP - global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the $ +$ gridpoints, as both a multiple or divisor (e.g. cap at 5.0 $ +$ means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value $ +$ given should not be less than 1.0 $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ UPD2 -$ -$ PRCNTG is input for option 1 and it is the percentage of correction -$applied to all the gridpoints (e.g. 1.) -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -$ maximun correction applied to all the gridpoints (e.g. 0.5) -$ - 10 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 10.0 anl.grbtxt $ $ -------------------------------------------------------------------- $ $ WAVEWATCH III EoF ww3_uprstr.inp $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.nml new file mode 100644 index 000000000..947e024b8 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD2_U/ww3_uprstr.nml @@ -0,0 +1,113 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD2' + UPDATE%PRCNTGCAP = 10.0 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_uprstr.inp index 6975b3943..1583b9d0d 100644 --- a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_uprstr.inp @@ -1,57 +1,46 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ -$ Choose algorithm to update restart file -$ UPDN for the Nth approach -$ The UPDN*, with N<2 the same correction factor is applied at all the grid points -$ UPD0C:: ELIMINATED -$ UPDOF:: Option 0F All the spectra are updated with a constant -$ fac=HsAnl/HsBckg. -$ Expected input: PRCNTG, as defined at fac -$ UPD1 :: ELIMINATED -$ UPDN, with N>1 each gridpoint has its own update factor. -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -$ according to HsBckg and HsAnl -$ Expected input the Analysis field, grbtxt format -$ UPD3 :: Option 3 The update factor is a surface with the shape of -$ the background spectrum. -$ Expected input the Analysis field, grbtxt format -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] -$ Option 4 The generalization of the UPD3. The update factor -$ is the sum of surfaces which are applied on the background -$ spectrum. -$ The algorithm requires the mapping of each partition on the -$ individual spectra; the map is used to determine the weighting -$ surfaces. -$ Expected input: the Analysis field, grbtxt format and the -$ functions(frq,theta) of the update to be applied. +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>1 each gridpoint has its own update factor and uses: $ +$ PRCNTG_CAP - global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the $ +$ gridpoints, as both a multiple or divisor (e.g. cap at 5.0 $ +$ means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value $ +$ given should not be less than 1.0 $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ UPD2 -$ -$ PRCNTG is input for option 1 and it is the percentage of correction -$applied to all the gridpoints (e.g. 1.) -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -$ maximun correction applied to all the gridpoints (e.g. 0.5) -$ - 0.333 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 1.333 anl.grbtxt $ $ -------------------------------------------------------------------- $ $ WAVEWATCH III EoF ww3_uprstr.inp $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_uprstr.nml new file mode 100644 index 000000000..e28b96210 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_uprstr.nml @@ -0,0 +1,113 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD2' + UPDATE%PRCNTGCAP = 1.333 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.inp index 03930f941..40321fea0 100644 --- a/regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.inp @@ -1,57 +1,46 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ -$ Choose algorithm to update restart file -$ UPDN for the Nth approach -$ The UPDN*, with N<2 the same correction factor is applied at all the grid points -$ UPD0C:: ELIMINATED -$ UPDOF:: Option 0F All the spectra are updated with a constant -$ fac=HsAnl/HsBckg. -$ Expected input: PRCNTG, as defined at fac -$ UPD1 :: ELIMINATED -$ UPDN, with N>1 each gridpoint has its own update factor. -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -$ according to HsBckg and HsAnl -$ Expected input the Analysis field, grbtxt format -$ UPD3 :: Option 3 The update factor is a surface with the shape of -$ the background spectrum. -$ Expected input the Analysis field, grbtxt format -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] -$ Option 4 The generalization of the UPD3. The update factor -$ is the sum of surfaces which are applied on the background -$ spectrum. -$ The algorithm requires the mapping of each partition on the -$ individual spectra; the map is used to determine the weighting -$ surfaces. -$ Expected input: the Analysis field, grbtxt format and the -$ functions(frq,theta) of the update to be applied. +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>1 each gridpoint has its own update factor and uses: $ +$ PRCNTG_CAP - global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the $ +$ gridpoints, as both a multiple or divisor (e.g. cap at 5.0 $ +$ means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value $ +$ given should not be less than 1.0 $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ UPD3 -$ -$ PRCNTG is input for option 1 and it is the percentage of correction -$applied to all the gridpoints (e.g. 1.) -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -$ maximun correction applied to all the gridpoints (e.g. 0.5) -$ - 3 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 3.0 anl.grbtxt $ $ -------------------------------------------------------------------- $ $ WAVEWATCH III EoF ww3_uprstr.inp $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.nml new file mode 100644 index 000000000..b1e82c898 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD3_O/ww3_uprstr.nml @@ -0,0 +1,113 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD3' + UPDATE%PRCNTGCAP = 3.0 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.inp index 9b403ab97..f967ad3b6 100644 --- a/regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.inp @@ -1,57 +1,46 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ -$ Choose algorithm to update restart file -$ UPDN for the Nth approach -$ The UPDN*, with N<2 the same correction factor is applied at all the grid points -$ UPD0C:: ELIMINATED -$ UPDOF:: Option 0F All the spectra are updated with a constant -$ fac=HsAnl/HsBckg. -$ Expected input: PRCNTG, as defined at fac -$ UPD1 :: ELIMINATED -$ UPDN, with N>1 each gridpoint has its own update factor. -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -$ according to HsBckg and HsAnl -$ Expected input the Analysis field, grbtxt format -$ UPD3 :: Option 3 The update factor is a surface with the shape of -$ the background spectrum. -$ Expected input the Analysis field, grbtxt format -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] -$ Option 4 The generalization of the UPD3. The update factor -$ is the sum of surfaces which are applied on the background -$ spectrum. -$ The algorithm requires the mapping of each partition on the -$ individual spectra; the map is used to determine the weighting -$ surfaces. -$ Expected input: the Analysis field, grbtxt format and the -$ functions(frq,theta) of the update to be applied. +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>1 each gridpoint has its own update factor and uses: $ +$ PRCNTG_CAP - global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the $ +$ gridpoints, as both a multiple or divisor (e.g. cap at 5.0 $ +$ means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value $ +$ given should not be less than 1.0 $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ UPD3 -$ -$ PRCNTG is input for option 1 and it is the percentage of correction -$applied to all the gridpoints (e.g. 1.) -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -$ maximun correction applied to all the gridpoints (e.g. 0.5) -$ - 10 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 10.0 anl.grbtxt $ $ -------------------------------------------------------------------- $ $ WAVEWATCH III EoF ww3_uprstr.inp $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.nml new file mode 100644 index 000000000..a111e1c79 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD3_U/ww3_uprstr.nml @@ -0,0 +1,113 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD3' + UPDATE%PRCNTGCAP = 10.0 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_uprstr.inp index 6b75a442e..47b31c47f 100644 --- a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_uprstr.inp @@ -1,57 +1,46 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ -$ Choose algorithm to update restart file -$ UPDN for the Nth approach -$ The UPDN*, with N<2 the same correction factor is applied at all the grid points -$ UPD0C:: ELIMINATED -$ UPDOF:: Option 0F All the spectra are updated with a constant -$ fac=HsAnl/HsBckg. -$ Expected input: PRCNTG, as defined at fac -$ UPD1 :: ELIMINATED -$ UPDN, with N>1 each gridpoint has its own update factor. -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each grid point -$ according to HsBckg and HsAnl -$ Expected input the Analysis field, grbtxt format -$ UPD3 :: Option 3 The update factor is a surface with the shape of -$ the background spectrum. -$ Expected input the Analysis field, grbtxt format -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] -$ Option 4 The generalization of the UPD3. The update factor -$ is the sum of surfaces which are applied on the background -$ spectrum. -$ The algorithm requires the mapping of each partition on the -$ individual spectra; the map is used to determine the weighting -$ surfaces. -$ Expected input: the Analysis field, grbtxt format and the -$ functions(frq,theta) of the update to be applied. +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>1 each gridpoint has its own update factor and uses: $ +$ PRCNTG_CAP - global input for option UPD2+ and is a cap on $ +$ the maximum SWH correction factor applied to all the $ +$ gridpoints, as both a multiple or divisor (e.g. cap at 5.0 $ +$ means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value $ +$ given should not be less than 1.0 $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ +$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ +$ grid point according to HsBckg and HsAnl $ +$ Expected input the Analysis field, grbtxt format $ +$ UPD3 :: Option 3 The update factor is a surface with the shape $ +$ of the background spectrum. $ +$ Expected input: the Analysis field, grbtxt format and cap $ +$ for the last gross check. $ +$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ +$ Option 4 The generalization of the UPD3. The update $ +$ factor is the sum of surfaces which are applied on the $ +$ background spectrum. $ +$ The algorithm requires the mapping of each partition on the $ +$ individual spectra; the map is used to determine the $ +$ weighting surfaces. $ +$ Expected input: the Analysis field, grbtxt format and the $ +$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ UPD3 -$ -$ PRCNTG is input for option 1 and it is the percentage of correction -$applied to all the gridpoints (e.g. 1.) -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2 and UPD3 and it is a cap on the -$ maximun correction applied to all the gridpoints (e.g. 0.5) -$ - 0.333 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 1.333 anl.grbtxt $ $ -------------------------------------------------------------------- $ $ WAVEWATCH III EoF ww3_uprstr.inp $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_uprstr.nml new file mode 100644 index 000000000..ef20c9001 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_uprstr.nml @@ -0,0 +1,113 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD3' + UPDATE%PRCNTGCAP = 1.333 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp index cef44a1a0..86efe4a3f 100644 --- a/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.inp @@ -1,72 +1,43 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ $ Choose algorithm to update restart file $ $ UPDN for the Nth approach $ -$ The UPDN*, with N<2 the same correction factor is applied at all $ -$ the grid points $ -$ UPD0C:: ELIMINATED $ -$ UPDOF:: Option 0F All the spectra are updated with a constant $ -$ fac=HsAnl/HsBckg. $ -$ Expected input: PRCNTG, as defined at fac $ -$ UPD1 :: ELIMINATED $ -$ UPDN, with N>1 each gridpoint has its own update factor. $ -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ -$ grid point according to HsBckg and HsAnl $ -$ Expected input the Analysis field, grbtxt format $ -$ UPD3 :: Option 3 The update factor is a surface with the shape $ -$ of the background spectrum. $ -$ Expected input: the Analysis field, grbtxt format and cap $ -$ for the last gross check. $ -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ -$ Option 4 The generalization of the UPD3. The update $ -$ factor is the sum of surfaces which are applied on the $ -$ background spectrum. $ -$ The algorithm requires the mapping of each partition on the $ -$ individual spectra; the map is used to determine the $ -$ weighting surfaces. $ -$ Expected input: the Analysis field, grbtxt format and the $ -$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>=5 each gridpoint has its own update factor and uses $ +$ wind field data to evaluate wind-sea and swell fields. Also $ +$ uses: $ +$ PRCNTG_CAP - see above $ +$ THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the $ +$ sea-state is considered wind-sea dominated by the DA scheme $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ $ $ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ $ applied to wind-sea parts of the spectrum only when $ $ wind-sea is the dominant component, otherwise the whole $ $ spectrum is corrected $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ $ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ $ wind-sea components are also shifted in frequency space $ $ using Toba (1973) $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ +$ -------------------------------------------------------------------- $ UPD5 -$ -$ PRCNTG is input for option UPD0F and is the correction factor $ -$ applied to all the gridpoints (e.g. 1.) $ -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ -$ the maximum SWH correction factor applied to all the gridpoints, as $ -$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ -$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ -$ - 10.0 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 10.0 0.7 anl.grbtxt -$ +$ $ $ -------------------------------------------------------------------- $ -$ WAVEWATCH III EoF ww3_uprstr.inp +$ WAVEWATCH III EoF ww3_uprstr.inp $ $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.nml new file mode 100644 index 000000000..c5d576df0 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_uprstr.nml @@ -0,0 +1,114 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD5' + UPDATE%PRCNTGCAP = 10.0 + UPDATE%THRWSEA = 0.7 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp index cef44a1a0..86efe4a3f 100644 --- a/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.inp @@ -1,72 +1,43 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ $ Choose algorithm to update restart file $ $ UPDN for the Nth approach $ -$ The UPDN*, with N<2 the same correction factor is applied at all $ -$ the grid points $ -$ UPD0C:: ELIMINATED $ -$ UPDOF:: Option 0F All the spectra are updated with a constant $ -$ fac=HsAnl/HsBckg. $ -$ Expected input: PRCNTG, as defined at fac $ -$ UPD1 :: ELIMINATED $ -$ UPDN, with N>1 each gridpoint has its own update factor. $ -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ -$ grid point according to HsBckg and HsAnl $ -$ Expected input the Analysis field, grbtxt format $ -$ UPD3 :: Option 3 The update factor is a surface with the shape $ -$ of the background spectrum. $ -$ Expected input: the Analysis field, grbtxt format and cap $ -$ for the last gross check. $ -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ -$ Option 4 The generalization of the UPD3. The update $ -$ factor is the sum of surfaces which are applied on the $ -$ background spectrum. $ -$ The algorithm requires the mapping of each partition on the $ -$ individual spectra; the map is used to determine the $ -$ weighting surfaces. $ -$ Expected input: the Analysis field, grbtxt format and the $ -$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>=5 each gridpoint has its own update factor and uses $ +$ wind field data to evaluate wind-sea and swell fields. Also $ +$ uses: $ +$ PRCNTG_CAP - see above $ +$ THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the $ +$ sea-state is considered wind-sea dominated by the DA scheme $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ $ $ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ $ applied to wind-sea parts of the spectrum only when $ $ wind-sea is the dominant component, otherwise the whole $ $ spectrum is corrected $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ $ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ $ wind-sea components are also shifted in frequency space $ $ using Toba (1973) $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ +$ -------------------------------------------------------------------- $ UPD5 -$ -$ PRCNTG is input for option UPD0F and is the correction factor $ -$ applied to all the gridpoints (e.g. 1.) $ -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ -$ the maximum SWH correction factor applied to all the gridpoints, as $ -$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ -$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ -$ - 10.0 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 10.0 0.7 anl.grbtxt -$ +$ $ $ -------------------------------------------------------------------- $ -$ WAVEWATCH III EoF ww3_uprstr.inp +$ WAVEWATCH III EoF ww3_uprstr.inp $ $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.nml new file mode 100644 index 000000000..d3e4f5c01 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_uprstr.nml @@ -0,0 +1,114 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant varaibles should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD5' + UPDATE%PRCNTGCAP = 10.0 + UPDATE%THRWSEA = 0.7 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp index 889a8fa09..742e1d538 100644 --- a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.inp @@ -1,72 +1,43 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ $ Choose algorithm to update restart file $ $ UPDN for the Nth approach $ -$ The UPDN*, with N<2 the same correction factor is applied at all $ -$ the grid points $ -$ UPD0C:: ELIMINATED $ -$ UPDOF:: Option 0F All the spectra are updated with a constant $ -$ fac=HsAnl/HsBckg. $ -$ Expected input: PRCNTG, as defined at fac $ -$ UPD1 :: ELIMINATED $ -$ UPDN, with N>1 each gridpoint has its own update factor. $ -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ -$ grid point according to HsBckg and HsAnl $ -$ Expected input the Analysis field, grbtxt format $ -$ UPD3 :: Option 3 The update factor is a surface with the shape $ -$ of the background spectrum. $ -$ Expected input: the Analysis field, grbtxt format and cap $ -$ for the last gross check. $ -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ -$ Option 4 The generalization of the UPD3. The update $ -$ factor is the sum of surfaces which are applied on the $ -$ background spectrum. $ -$ The algorithm requires the mapping of each partition on the $ -$ individual spectra; the map is used to determine the $ -$ weighting surfaces. $ -$ Expected input: the Analysis field, grbtxt format and the $ -$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>=5 each gridpoint has its own update factor and uses $ +$ wind field data to evaluate wind-sea and swell fields. Also $ +$ uses: $ +$ PRCNTG_CAP - see above $ +$ THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the $ +$ sea-state is considered wind-sea dominated by the DA scheme $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ $ $ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ $ applied to wind-sea parts of the spectrum only when $ $ wind-sea is the dominant component, otherwise the whole $ $ spectrum is corrected $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ $ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ $ wind-sea components are also shifted in frequency space $ $ using Toba (1973) $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ +$ -------------------------------------------------------------------- $ UPD5 -$ -$ PRCNTG is input for option UPD0F and is the correction factor $ -$ applied to all the gridpoints (e.g. 1.) $ -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ -$ the maximum SWH correction factor applied to all the gridpoints, as $ -$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ -$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ -$ - 1.333 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 1.333 0.7 anl.grbtxt -$ +$ $ $ -------------------------------------------------------------------- $ -$ WAVEWATCH III EoF ww3_uprstr.inp +$ WAVEWATCH III EoF ww3_uprstr.inp $ $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.nml new file mode 100644 index 000000000..168d38ff7 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_uprstr.nml @@ -0,0 +1,114 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD5' + UPDATE%PRCNTGCAP = 1.333 + UPDATE%THRWSEA = 0.7 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp index ca8dc3fe7..118c94e88 100644 --- a/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.inp @@ -1,72 +1,43 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ $ Choose algorithm to update restart file $ $ UPDN for the Nth approach $ -$ The UPDN*, with N<2 the same correction factor is applied at all $ -$ the grid points $ -$ UPD0C:: ELIMINATED $ -$ UPDOF:: Option 0F All the spectra are updated with a constant $ -$ fac=HsAnl/HsBckg. $ -$ Expected input: PRCNTG, as defined at fac $ -$ UPD1 :: ELIMINATED $ -$ UPDN, with N>1 each gridpoint has its own update factor. $ -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ -$ grid point according to HsBckg and HsAnl $ -$ Expected input the Analysis field, grbtxt format $ -$ UPD3 :: Option 3 The update factor is a surface with the shape $ -$ of the background spectrum. $ -$ Expected input: the Analysis field, grbtxt format and cap $ -$ for the last gross check. $ -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ -$ Option 4 The generalization of the UPD3. The update $ -$ factor is the sum of surfaces which are applied on the $ -$ background spectrum. $ -$ The algorithm requires the mapping of each partition on the $ -$ individual spectra; the map is used to determine the $ -$ weighting surfaces. $ -$ Expected input: the Analysis field, grbtxt format and the $ -$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>=5 each gridpoint has its own update factor and uses $ +$ wind field data to evaluate wind-sea and swell fields. Also $ +$ uses: $ +$ PRCNTG_CAP - see above $ +$ THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the $ +$ sea-state is considered wind-sea dominated by the DA scheme $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ $ $ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ $ applied to wind-sea parts of the spectrum only when $ $ wind-sea is the dominant component, otherwise the whole $ $ spectrum is corrected $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ $ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ $ wind-sea components are also shifted in frequency space $ $ using Toba (1973) $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ +$ -------------------------------------------------------------------- $ UPD6 -$ -$ PRCNTG is input for option UPD0F and is the correction factor $ -$ applied to all the gridpoints (e.g. 1.) $ -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ -$ the maximum SWH correction factor applied to all the gridpoints, as $ -$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ -$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ -$ - 5.0 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 5.0 0.7 anl.grbtxt -$ +$ $ $ -------------------------------------------------------------------- $ -$ WAVEWATCH III EoF ww3_uprstr.inp +$ WAVEWATCH III EoF ww3_uprstr.inp $ $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.nml new file mode 100644 index 000000000..9557a374f --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_uprstr.nml @@ -0,0 +1,114 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD6' + UPDATE%PRCNTGCAP = 5.0 + UPDATE%THRWSEA = 0.7 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp index 17f31c90f..c34b36051 100644 --- a/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.inp @@ -1,72 +1,43 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ $ Choose algorithm to update restart file $ $ UPDN for the Nth approach $ -$ The UPDN*, with N<2 the same correction factor is applied at all $ -$ the grid points $ -$ UPD0C:: ELIMINATED $ -$ UPDOF:: Option 0F All the spectra are updated with a constant $ -$ fac=HsAnl/HsBckg. $ -$ Expected input: PRCNTG, as defined at fac $ -$ UPD1 :: ELIMINATED $ -$ UPDN, with N>1 each gridpoint has its own update factor. $ -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ -$ grid point according to HsBckg and HsAnl $ -$ Expected input the Analysis field, grbtxt format $ -$ UPD3 :: Option 3 The update factor is a surface with the shape $ -$ of the background spectrum. $ -$ Expected input: the Analysis field, grbtxt format and cap $ -$ for the last gross check. $ -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ -$ Option 4 The generalization of the UPD3. The update $ -$ factor is the sum of surfaces which are applied on the $ -$ background spectrum. $ -$ The algorithm requires the mapping of each partition on the $ -$ individual spectra; the map is used to determine the $ -$ weighting surfaces. $ -$ Expected input: the Analysis field, grbtxt format and the $ -$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>=5 each gridpoint has its own update factor and uses $ +$ wind field data to evaluate wind-sea and swell fields. Also $ +$ uses: $ +$ PRCNTG_CAP - see above $ +$ THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the $ +$ sea-state is considered wind-sea dominated by the DA scheme $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ $ $ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ $ applied to wind-sea parts of the spectrum only when $ $ wind-sea is the dominant component, otherwise the whole $ $ spectrum is corrected $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ $ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ $ wind-sea components are also shifted in frequency space $ $ using Toba (1973) $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ +$ -------------------------------------------------------------------- $ UPD6 -$ -$ PRCNTG is input for option UPD0F and is the correction factor $ -$ applied to all the gridpoints (e.g. 1.) $ -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ -$ the maximum SWH correction factor applied to all the gridpoints, as $ -$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ -$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ -$ - 10.0 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 10.0 0.7 anl.grbtxt -$ +$ $ $ -------------------------------------------------------------------- $ -$ WAVEWATCH III EoF ww3_uprstr.inp +$ WAVEWATCH III EoF ww3_uprstr.inp $ $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.nml new file mode 100644 index 000000000..44a656519 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_uprstr.nml @@ -0,0 +1,114 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant variables should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD6' + UPDATE%PRCNTGCAP = 10.0 + UPDATE%THRWSEA = 0.7 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp index 518469343..bfc561b73 100644 --- a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.inp @@ -1,72 +1,43 @@ $ -------------------------------------------------------------------- $ $ WAVEWATCH III Update Restart input file $ $ -------------------------------------------------------------------- $ -$ +$ $ $ Time of Assimilation ----------------------------------------------- $ -$ - Starting time in yyyymmdd hhmmss format. -$ -$ This is the assimilation starting time and has to be the same with -$ the time at the restart.ww3. -$ - 19680607 120000 -$ +$ - Starting time in yyyymmdd hhmmss format. $ +$ $ +$ This is the assimilation starting time and has to be the same with $ +$ the time at the restart.ww3. $ +$ $ + 19680607 120000 $ +$ $ $ Choose algorithm to update restart file $ $ UPDN for the Nth approach $ -$ The UPDN*, with N<2 the same correction factor is applied at all $ -$ the grid points $ -$ UPD0C:: ELIMINATED $ -$ UPDOF:: Option 0F All the spectra are updated with a constant $ -$ fac=HsAnl/HsBckg. $ -$ Expected input: PRCNTG, as defined at fac $ -$ UPD1 :: ELIMINATED $ -$ UPDN, with N>1 each gridpoint has its own update factor. $ -$ UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each $ -$ grid point according to HsBckg and HsAnl $ -$ Expected input the Analysis field, grbtxt format $ -$ UPD3 :: Option 3 The update factor is a surface with the shape $ -$ of the background spectrum. $ -$ Expected input: the Analysis field, grbtxt format and cap $ -$ for the last gross check. $ -$ UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] $ -$ Option 4 The generalization of the UPD3. The update $ -$ factor is the sum of surfaces which are applied on the $ -$ background spectrum. $ -$ The algorithm requires the mapping of each partition on the $ -$ individual spectra; the map is used to determine the $ -$ weighting surfaces. $ -$ Expected input: the Analysis field, grbtxt format and the $ -$ functions(frq,theta) of the update to be applied. $ +$ -------------------------------------------------------------------- $ +$ UPDN, with N>=5 each gridpoint has its own update factor and uses $ +$ wind field data to evaluate wind-sea and swell fields. Also $ +$ uses: $ +$ PRCNTG_CAP - see above $ +$ THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the $ +$ sea-state is considered wind-sea dominated by the DA scheme $ +$ Name of the file with the SWH analysis from the DA system $ +$ suffix .grbtxt for text out of grib2 file. $ +$ $ $ UPD5 :: Option 5 Corrections are calculated as per UPD2 but are $ $ applied to wind-sea parts of the spectrum only when $ $ wind-sea is the dominant component, otherwise the whole $ $ spectrum is corrected $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ $ UPD6 :: Option 6 Corrections are calculated as per UPD5 but $ $ wind-sea components are also shifted in frequency space $ $ using Toba (1973) $ $ Expected input: the Analysis Hs field plus background wind $ -$ speed and direction, in text format $ +$ speed and direction $ +$ -------------------------------------------------------------------- $ UPD6 -$ -$ PRCNTG is input for option UPD0F and is the correction factor $ -$ applied to all the gridpoints (e.g. 1.) $ -$ - 0.6754 -$ -$ PRCNTG_CAP is global input for option UPD2+ and is a cap on $ -$ the maximum SWH correction factor applied to all the gridpoints, as $ -$ both a multiple or divisor (e.g. cap at 5.0 means SWHANL/SWHBKG<=5.0 $ -$ and SWHANL/SWHBKG>=0.2). The value given should not be less than 1.0 $ -$ - 1.333 -$ -$ Name of the file with the SWH analysis from the DA system $ -$ suffix .grbtxt for text out of grib2 file. $ -$ + 1.333 0.7 anl.grbtxt -$ +$ $ $ -------------------------------------------------------------------- $ -$ WAVEWATCH III EoF ww3_uprstr.inp +$ WAVEWATCH III EoF ww3_uprstr.inp $ $ -------------------------------------------------------------------- $ - diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.nml b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.nml new file mode 100644 index 000000000..8767412a5 --- /dev/null +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_uprstr.nml @@ -0,0 +1,114 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_uprstr.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the assimilation time for initialising the wave model. This +! has to be the same as the time of the restart.ww3 +! +! * namelist must be terminated with / +! * definitions & defaults: +! RESTART%RESTARTTIME = '19680607 120000' ! assimilation time +! -------------------------------------------------------------------- ! +&RESTART_NML + RESTART%RESTARTTIME = '19680607 120000' +/ + + +! -------------------------------------------------------------------- ! +! Define the update approach and associated variables +! Note: Only the relevant variables for each update type need to be +! set. Setting non-relevant varaibles should not affect the way the +! code works +! +! A number of different update approaches are available. UPDN is used +! for the Nth approach +! +! The UPDN*, with N<2 the same correction factor is applied at all +! the grid points using: +! PRCNTG is input for option UPD0F and is the correction +! factor applied to all the gridpoints (e.g. 1.) +! UPD0C:: ELIMINATED +! UPDOF:: Option 0F All the spectra are updated with a constant +! fac=HsAnl/HsBckg +! Expected input: PRCNTG, as defined at fac +! UPD1 :: ELIMINATED +! +! UPDN, with N>1 each gridpoint has its own update factor and uses: +! PRCNTG_CAP - global input for option UPD2+ and is a cap on +! the maximum SWH correction factor applied to all the +! gridpoints, as both a multiple or divisor (e.g. cap at 5.0 +! means SWHANL/SWHBKG<=5.0 and SWHANL/SWHBKG>=0.2). The value +! given should not be less than 1.0 +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD2 :: Option 2 The fac(x,y,frq,theta), is calculated at each +! grid point according to HsBckg and HsAnl +! Expected input the Analysis field, grbtxt format +! UPD3 :: Option 3 The update factor is a surface with the shape +! of the background spectrum. +! Expected input: the Analysis field, grbtxt format and cap +! for the last gross check. +! UPD4 :: [NOT INCLUDED in this Version, Just keeping the spot] +! Option 4 The generalization of the UPD3. The update +! factor is the sum of surfaces which are applied on the +! background spectrum. +! The algorithm requires the mapping of each partition on the +! individual spectra; the map is used to determine the +! weighting surfaces. +! Expected input: the Analysis field, grbtxt format and the +! functions(frq,theta) of the update to be applied. +! +! UPDN, with N>=5 each gridpoint has its own update factor and uses +! wind field data to evaluate wind-sea and swell fields. Also +! uses: +! PRCNTG_CAP - see above +! THRWSEA - energy threshold (SWH_WS**2/SWH**2) above which the +! sea-state is considered wind-sea dominated by the DA scheme +! Name of the file with the SWH analysis from the DA system +! suffix .grbtxt for text out of grib2 file. +! UPD5 :: Option 5 Corrections are calculated as per UPD2 but are +! applied to wind-sea parts of the spectrum only when +! wind-sea is the dominant component, otherwise the whole +! spectrum is corrected +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! UPD6 :: Option 6 Corrections are calculated as per UPD5 but +! wind-sea components are also shifted in frequency space +! using Toba (1973) +! Expected input: the Analysis Hs field plus background wind +! speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! +! UPD0F +! UPDATE%UPDPROC = 'UPD0F' ! Update type +! UPDATE%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction) +! +! UPD2/3 +! UPDATE%UPDPROC = 'UPD2' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! +! UPD5/6 +! UPDATE%UPDPROC = 'UPD5' ! Update type +! UPDATE%PRCNTGCAP = 10.0 ! Cap on correction factor +! UPDATE%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance +! UPDATE%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file +! + +! -------------------------------------------------------------------- ! +&UPDATE_NML + UPDATE%UPDPROC = 'UPD6' + UPDATE%PRCNTGCAP = 1.333 + UPDATE%THRWSEA = 0.7 + UPDATE%FILE = 'anl.grbtxt' +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_tp2.14/info b/regtests/ww3_tp2.14/info index b306c6f43..9e9d412e7 100644 --- a/regtests/ww3_tp2.14/info +++ b/regtests/ww3_tp2.14/info @@ -8,6 +8,22 @@ # # # !/COU !/OASIS !/OASACM # # selecting coupling atmospheric model with the coupler OASIS3-mct # +# !/COU !/OASIS !/OASACM2 # +# selecting coupling atmospheric model with the coupler OASIS3-mct # +# coupling frequency not the same as the integration time step # +# !/COU !/OASIS !/OASACM3 # +# uncoupled run generating a restart file including coupling fields # +# number of processors used different to coupled runs # +# !/COU !/OASIS !/OASACM4 # +# selecting coupling atmospheric model with the coupler OASIS3-mct # +# reading restart generated by an uncoupled run containing # +# coupling fields for initialization at T+0 # +# !/COU !/OASIS !/OASACM5 # +# selecting coupling atmospheric model with the coupler OASIS3-mct # +# reading restart generated by a coupled run (continuation run) # +# !/COU !/OASIS !/OASACM6 # +# selecting coupling atmospheric model with the coupler OASIS3-mct # +# coupling with SMC grid, coupling at T+0 # # !/COU !/OASIS !/OASOCM # # selecting coupling ocean model with the coupler OASIS3-mct # # !/COU !/OASIS !/OASICM # @@ -18,7 +34,7 @@ # -a makefile must be defined in the oasis3-mct/util/make_dir with the # # same extension as comp & link in ww3 bin folder # # # -# -netCDF4 librairies must be installed and NETCDF variables setup # +# -netCDF4 libraries must be installed and NETCDF variables setup # # # # Remarks : # # # @@ -76,9 +92,39 @@ # -p mpirun -n 4 ../model ww3_tp2.14 # # ./bin/run_test -C OASIS -c Altix -s OASICM -f -o netcdf -w work_OASICM # # -p mpirun -n 4 ../model ww3_tp2.14 # +# ./bin/run_rest -s OASACM2 -w work_OASACM2 -C OASIS -f -p mpirun -n 4 # +# -o netcdf ../model ww3_tp2.14 # +# mkdir -p ww3_tp2.14/work_OASACM3 # +# cp ww3_tp2.14/input/ww3_shel_OASACM3.nml # +# ww3_tp2.14/work_OASACM3/ww3_shel.nml # +# ./bin/run_test -s OASACM3 -w work_OASACM3 -f -p mpirun -n 2 -o netcdf # +# ../model ww3_tp2.14 # +# mkdir -p ww3_tp2.14/work_OASACM4 # +# ln -sf ../work_OASACM3/restart001.ww3 # +# ww3_tp2.14/work_OASACM4/restart.ww3 # +# ./bin/run_test -r ww3_grid -s OASACM4 -w work_OASACM4 -C OASIS -f # +# -p mpirun -n 4 -o netcdf ../model ww3_tp2.14 # +# ./bin/run_test -r ww3_shel -s OASACM4 -w work_OASACM4 -C OASIS -f # +# -p mpirun -n 4 -o netcdf ../model ww3_tp2.14 # +# ./bin/run_test -r ww3_ounf -s OASACM4 -w work_OASACM4 -C OASIS -f # +# -p mpirun -n 4 -o netcdf ../model ww3_tp2.14 # +# mkdir -p ww3_tp2.14/work_OASACM5 # +# ln -sf ../work_OASACM4/restart001.ww3 # +# ww3_tp2.14/work_OASACM5/restart.ww3" # +# ./bin/run_test -r ww3_grid -s OASACM5 -w work_OASACM5 -C OASIS -f # +# -p mpirun -n 4 -o netcdf ../model ww3_tp2.14 # +# ./bin/run_test -r ww3_shel -s OASACM5 -w work_OASACM5 -C OASIS -f # +# -p mpirun -n 4 -o netcdf ../model ww3_tp2.14 # +# ./bin/run_test -r ww3_ounf -s OASACM5 -w work_OASACM5 -C OASIS -f # +# -p mpirun -n 4 -o netcdf ../model ww3_tp2.14 # +# mv ww3_tp2.14/input/ww3_ounf.inp ww3_tp2.14/input/ww3_ounf.inp.bak # +# cp ww3_tp2.14/input/ww3_ounf.inp-OASACM6 ww3_tp2.14/input/ww3_ounf.inp # +# ./bin/run_test -g OASACM6 -s OASACM6 -w work_OASACM6 -C OASIS -f # +# -p mpirun -n 4 -o netcdf ../model ww3_tp2.14 # +# mv ww3_tp2.14/input/ww3_ounf.inp.bak ww3_tp2.14/input/ww3_ounf.inp # # # # M. Accensi, Feb 2015 # # Ifremer Institute # -# Last Mod : Aug 2017 # +# Last Mod : Oct 2020 # # # ############################################################################# diff --git a/regtests/ww3_tp2.14/input/BrestISides.dat b/regtests/ww3_tp2.14/input/BrestISides.dat new file mode 100644 index 000000000..54ba09c5b --- /dev/null +++ b/regtests/ww3_tp2.14/input/BrestISides.dat @@ -0,0 +1,3016 @@ +3015 322 2693 0 0 + 0 12 1 9 10 498 499 + 92 12 1 542 543 1 2 + 93 12 1 543 1 2 3 + 94 12 1 1 2 3 4 + 95 12 1 2 3 4 5 + 96 12 1 3 4 5 0 + 97 12 1 4 5 0 0 + 99 12 1 0 0 6 7 + 100 12 1 0 6 7 8 + 101 12 1 6 7 8 9 + 102 12 1 7 8 9 10 + 103 12 1 8 9 10 498 + 0 13 1 0 0 498 499 + 92 13 1 542 543 0 0 + 92 16 1 634 635 11 0 + 93 16 1 635 11 0 0 + 92 17 1 634 635 12 0 + 93 17 1 635 12 0 0 + 92 18 1 680 681 13 0 + 93 18 1 681 13 0 0 + 92 19 1 680 681 14 0 + 93 19 1 681 14 0 0 + 92 20 1 726 727 15 0 + 93 20 1 727 15 0 0 + 92 21 1 726 727 0 0 + 90 22 1 771 772 16 18 + 91 22 1 772 16 18 0 + 92 22 1 16 18 0 0 + 90 23 1 771 772 17 0 + 91 23 1 772 17 0 0 + 90 24 1 816 817 19 0 + 91 24 1 817 19 0 0 + 90 25 1 816 817 0 0 + 88 26 1 860 861 20 0 + 89 26 1 861 20 0 0 + 88 27 1 860 861 0 0 + 86 28 1 903 904 21 0 + 87 28 1 904 21 0 0 + 86 29 1 903 904 0 0 + 74 30 1 940 941 22 24 + 75 30 1 941 22 24 25 + 76 30 1 22 24 25 26 + 77 30 1 24 25 26 27 + 78 30 1 25 26 27 28 + 79 30 1 26 27 28 0 + 80 30 1 27 28 0 0 + 74 31 1 940 941 23 0 + 75 31 1 941 23 0 0 + 62 32 1 971 972 29 30 + 63 32 1 972 29 30 0 + 64 32 1 29 30 0 0 + 69 32 1 0 0 33 973 + 70 32 1 0 33 973 35 + 72 32 1 33 973 35 0 + 73 32 1 973 35 0 0 + 62 33 1 971 972 0 0 + 67 33 1 0 0 31 32 + 68 33 1 0 31 32 34 + 69 33 1 31 32 34 973 + 70 33 1 32 34 973 36 + 72 33 1 34 973 36 37 + 73 33 1 973 36 37 0 + 74 33 1 36 37 0 0 + 74 34 1 1009 1010 0 0 + 74 35 1 1009 1010 38 39 + 75 35 1 1010 38 39 40 + 76 35 1 38 39 40 41 + 77 35 1 39 40 41 42 + 78 35 1 40 41 42 43 + 79 35 1 41 42 43 0 + 80 35 1 42 43 0 0 + 84 36 1 1051 1052 0 0 + 84 37 1 1051 1052 44 45 + 85 37 1 1052 44 45 46 + 86 37 1 44 45 46 0 + 87 37 1 45 46 0 0 + 95 37 1 0 0 47 0 + 96 37 1 0 47 0 0 + 96 38 1 1099 1100 48 0 + 97 38 1 1100 48 0 0 + 96 39 1 1099 1100 49 0 + 97 39 1 1100 49 0 0 + 96 40 1 1147 1148 50 0 + 97 40 1 1148 50 0 0 + 96 41 1 1147 1148 51 0 + 97 41 1 1148 51 0 0 + 82 42 1 1188 1189 52 53 + 83 42 1 1189 52 53 1190 + 84 42 1 52 53 1190 1191 + 82 43 1 1188 1189 0 0 + 84 43 1 0 0 1190 1191 + 82 44 1 1235 1236 54 0 + 83 44 1 1236 54 0 0 + 85 44 1 0 0 56 1237 + 86 44 1 0 56 1237 1238 + 94 44 1 1239 1240 58 60 + 95 44 1 1240 58 60 0 + 96 44 1 58 60 0 0 + 82 45 1 1235 1236 55 0 + 83 45 1 1236 55 0 0 + 85 45 1 0 0 57 1237 + 86 45 1 0 57 1237 1238 + 94 45 1 1239 1240 59 0 + 95 45 1 1240 59 0 0 + 82 46 1 1280 1281 61 0 + 83 46 1 1281 61 0 0 + 90 46 1 1282 1283 62 63 + 91 46 1 1283 62 63 0 + 92 46 1 62 63 0 0 + 82 47 1 1280 1281 0 0 + 90 47 1 1282 1283 0 0 + 80 48 1 1322 1323 64 66 + 81 48 1 1323 64 66 0 + 82 48 1 64 66 0 0 + 80 49 1 1322 1323 65 0 + 81 49 1 1323 65 0 0 + 90 52 1 0 0 1405 73 + 92 52 1 0 1405 73 0 + 93 52 1 1405 73 0 0 + 83 53 1 0 0 67 68 + 84 53 1 0 67 68 0 + 85 53 1 67 68 0 0 + 86 53 1 0 0 69 70 + 87 53 1 0 69 70 71 + 88 53 1 69 70 71 72 + 89 53 1 70 71 72 1405 + 90 53 1 71 72 1405 74 + 92 53 1 72 1405 74 75 + 93 53 1 1405 74 75 0 + 94 53 1 74 75 0 0 + 70 54 1 1439 1440 76 78 + 71 54 1 1440 76 78 79 + 72 54 1 76 78 79 80 + 73 54 1 78 79 80 1441 + 74 54 1 79 80 1441 1442 + 80 54 1 1442 1443 82 0 + 81 54 1 1443 82 0 0 + 83 54 1 0 0 84 85 + 84 54 1 0 84 85 0 + 85 54 1 84 85 0 0 + 86 54 1 0 0 1444 88 + 88 54 1 0 1444 88 89 + 89 54 1 1444 88 89 91 + 90 54 1 88 89 91 92 + 91 54 1 89 91 92 1445 + 92 54 1 91 92 1445 0 + 94 54 1 92 1445 0 0 + 70 55 1 1439 1440 77 0 + 71 55 1 1440 77 0 0 + 73 55 1 0 0 81 1441 + 74 55 1 0 81 1441 1442 + 80 55 1 1442 1443 83 0 + 81 55 1 1443 83 0 0 + 84 55 1 0 0 86 87 + 85 55 1 0 86 87 1444 + 86 55 1 86 87 1444 0 + 88 55 1 87 1444 0 0 + 89 55 1 0 0 90 0 + 90 55 1 0 90 0 0 + 92 55 1 0 0 1445 93 + 94 55 1 0 1445 93 0 + 95 55 1 1445 93 0 0 + 66 56 1 1477 1478 94 95 + 67 56 1 1478 94 95 1479 + 68 56 1 94 95 1479 96 + 70 56 1 95 1479 96 98 + 71 56 1 1479 96 98 0 + 72 56 1 96 98 0 0 + 75 56 1 0 0 99 101 + 76 56 1 0 99 101 103 + 77 56 1 99 101 103 104 + 78 56 1 101 103 104 0 + 79 56 1 103 104 0 0 + 80 56 1 0 0 105 106 + 81 56 1 0 105 106 107 + 82 56 1 105 106 107 0 + 83 56 1 106 107 0 0 + 84 56 1 0 0 1480 1481 + 88 56 1 1480 1481 0 0 + 93 56 1 0 0 111 112 + 94 56 1 0 111 112 0 + 95 56 1 111 112 0 0 + 66 57 1 1477 1478 0 0 + 68 57 1 0 0 1479 97 + 70 57 1 0 1479 97 0 + 71 57 1 1479 97 0 0 + 75 57 1 0 0 100 102 + 76 57 1 0 100 102 0 + 77 57 1 100 102 0 0 + 82 57 1 0 0 108 109 + 83 57 1 0 108 109 1480 + 84 57 1 108 109 1480 1481 + 88 57 1 1480 1481 110 0 + 89 57 1 1481 110 0 0 + 62 58 1 1511 1512 113 114 + 63 58 1 1512 113 114 116 + 64 58 1 113 114 116 117 + 65 58 1 114 116 117 119 + 66 58 1 116 117 119 0 + 67 58 1 117 119 0 0 + 68 58 1 0 0 1513 0 + 70 58 1 0 1513 0 0 + 85 58 1 0 0 124 125 + 86 58 1 0 124 125 126 + 87 58 1 124 125 126 128 + 88 58 1 125 126 128 0 + 89 58 1 126 128 0 0 + 62 59 1 1511 1512 0 0 + 63 59 1 0 0 115 0 + 64 59 1 0 115 0 0 + 65 59 1 0 0 118 120 + 66 59 1 0 118 120 121 + 67 59 1 118 120 121 1513 + 68 59 1 120 121 1513 122 + 70 59 1 121 1513 122 123 + 71 59 1 1513 122 123 0 + 72 59 1 122 123 0 0 + 87 59 1 0 0 127 129 + 88 59 1 0 127 129 130 + 89 59 1 127 129 130 0 + 90 59 1 129 130 0 0 + 60 60 1 1542 1543 131 0 + 61 60 1 1543 131 0 0 + 64 60 1 -1 1544 0 0 + 65 60 1 0 0 134 1545 + 66 60 1 0 134 1545 1546 + 70 60 1 1545 1546 136 0 + 71 60 1 1546 136 0 0 + 89 60 1 0 0 138 139 + 90 60 1 0 138 139 0 + 91 60 1 138 139 0 0 + 60 61 1 1542 1543 132 0 + 61 61 1 1543 132 0 0 + 64 61 1 -1 1544 133 135 + 65 61 1 1544 133 135 1545 + 66 61 1 133 135 1545 1546 + 70 61 1 1545 1546 137 0 + 71 61 1 1546 137 0 0 + 58 62 1 1574 1575 140 141 + 59 62 1 1575 140 141 1576 + 60 62 1 140 141 1576 1577 + 58 63 1 1574 1575 0 0 + 59 63 1 0 0 142 1576 + 60 63 1 0 142 1576 1577 + 50 64 1 1604 1605 143 145 + 51 64 1 1605 143 145 146 + 52 64 1 143 145 146 0 + 53 64 1 145 146 0 0 + 55 64 1 0 0 147 148 + 56 64 1 0 147 148 149 + 57 64 1 147 148 149 1606 + 58 64 1 148 149 1606 1607 + 70 64 1 1610 1611 0 0 + 50 65 1 1604 1605 144 0 + 51 65 1 1605 144 0 0 + 57 65 1 0 0 150 1606 + 58 65 1 0 150 1606 1607 + 70 65 1 1610 1611 151 0 + 71 65 1 1611 151 0 0 + 52 66 1 1636 1637 0 0 + 58 66 1 0 0 1638 1639 + 70 66 1 1642 1643 155 0 + 71 66 1 1643 155 0 0 + 52 67 1 1636 1637 152 153 + 53 67 1 1637 152 153 0 + 54 67 1 152 153 0 0 + 57 67 1 0 0 154 1638 + 58 67 1 0 154 1638 1639 + 70 67 1 1642 1643 156 0 + 71 67 1 1643 156 0 0 + 70 68 1 1677 1678 157 0 + 71 68 1 1678 157 0 0 + 70 69 1 1677 1678 158 0 + 71 69 1 1678 158 0 0 + 70 70 1 1712 1713 159 0 + 71 70 1 1713 159 0 0 + 70 71 1 1712 1713 160 0 + 71 71 1 1713 160 0 0 + 72 72 1 1748 1749 161 0 + 73 72 1 1749 161 0 0 + 72 73 1 1748 1749 162 0 + 73 73 1 1749 162 0 0 + 74 74 1 1785 1786 163 0 + 75 74 1 1786 163 0 0 + 74 75 1 1785 1786 164 0 + 75 75 1 1786 164 0 0 + 76 75 1 0 0 165 0 + 77 75 1 0 165 0 0 + 72 76 1 1821 1822 166 0 + 73 76 1 1822 166 0 0 + 74 76 1 0 0 1823 1824 + 72 77 1 1821 1822 167 168 + 73 77 1 1822 167 168 1823 + 74 77 1 167 168 1823 1824 + 80 78 1 1864 1865 169 0 + 81 78 1 1865 169 0 0 + 80 79 1 1864 1865 170 171 + 81 79 1 1865 170 171 0 + 82 79 1 170 171 0 0 + 82 80 1 1905 1906 172 0 + 83 80 1 1906 172 0 0 + 84 80 1 0 0 1907 1908 + 88 80 1 1907 1908 0 0 + 82 81 1 1905 1906 173 174 + 83 81 1 1906 173 174 1907 + 84 81 1 173 174 1907 1908 + 88 81 1 1907 1908 175 0 + 89 81 1 1908 175 0 0 + 90 82 1 1952 1953 0 0 + 99 82 1 0 0 183 0 + 100 82 1 0 183 0 0 + 90 83 1 1952 1953 176 177 + 91 83 1 1953 176 177 178 + 92 83 1 176 177 178 0 + 93 83 1 177 178 0 0 + 95 83 1 0 0 179 180 + 96 83 1 0 179 180 181 + 97 83 1 179 180 181 182 + 98 83 1 180 181 182 184 + 99 83 1 181 182 184 185 + 100 83 1 182 184 185 0 + 101 83 1 184 185 0 0 + 0 0 2 236 237 186 187 + 2 0 2 237 186 187 188 + 4 0 2 186 187 188 189 + 6 0 2 187 188 189 190 + 8 0 2 188 189 190 191 + 10 0 2 189 190 191 192 + 12 0 2 190 191 192 193 + 14 0 2 191 192 193 194 + 16 0 2 192 193 194 195 + 18 0 2 193 194 195 196 + 20 0 2 194 195 196 197 + 22 0 2 195 196 197 198 + 24 0 2 196 197 198 199 + 26 0 2 197 198 199 200 + 28 0 2 198 199 200 201 + 30 0 2 199 200 201 202 + 32 0 2 200 201 202 203 + 34 0 2 201 202 203 204 + 36 0 2 202 203 204 205 + 38 0 2 203 204 205 206 + 40 0 2 204 205 206 207 + 42 0 2 205 206 207 208 + 44 0 2 206 207 208 209 + 46 0 2 207 208 209 210 + 48 0 2 208 209 210 211 + 50 0 2 209 210 211 212 + 52 0 2 210 211 212 213 + 54 0 2 211 212 213 214 + 56 0 2 212 213 214 215 + 58 0 2 213 214 215 216 + 60 0 2 214 215 216 217 + 62 0 2 215 216 217 218 + 64 0 2 216 217 218 219 + 66 0 2 217 218 219 220 + 68 0 2 218 219 220 221 + 70 0 2 219 220 221 222 + 72 0 2 220 221 222 223 + 74 0 2 221 222 223 224 + 76 0 2 222 223 224 225 + 78 0 2 223 224 225 226 + 80 0 2 224 225 226 227 + 82 0 2 225 226 227 228 + 84 0 2 226 227 228 229 + 86 0 2 227 228 229 230 + 88 0 2 228 229 230 231 + 90 0 2 229 230 231 232 + 92 0 2 230 231 232 233 + 94 0 2 231 232 233 234 + 96 0 2 232 233 234 235 + 98 0 2 233 234 235 236 + 100 0 2 234 235 236 237 + 102 0 2 235 236 237 186 + 0 2 2 288 289 238 239 + 2 2 2 289 238 239 240 + 4 2 2 238 239 240 241 + 6 2 2 239 240 241 242 + 8 2 2 240 241 242 243 + 10 2 2 241 242 243 244 + 12 2 2 242 243 244 245 + 14 2 2 243 244 245 246 + 16 2 2 244 245 246 247 + 18 2 2 245 246 247 248 + 20 2 2 246 247 248 249 + 22 2 2 247 248 249 250 + 24 2 2 248 249 250 251 + 26 2 2 249 250 251 252 + 28 2 2 250 251 252 253 + 30 2 2 251 252 253 254 + 32 2 2 252 253 254 255 + 34 2 2 253 254 255 256 + 36 2 2 254 255 256 257 + 38 2 2 255 256 257 258 + 40 2 2 256 257 258 259 + 42 2 2 257 258 259 260 + 44 2 2 258 259 260 261 + 46 2 2 259 260 261 262 + 48 2 2 260 261 262 263 + 50 2 2 261 262 263 264 + 52 2 2 262 263 264 265 + 54 2 2 263 264 265 266 + 56 2 2 264 265 266 267 + 58 2 2 265 266 267 268 + 60 2 2 266 267 268 269 + 62 2 2 267 268 269 270 + 64 2 2 268 269 270 271 + 66 2 2 269 270 271 272 + 68 2 2 270 271 272 273 + 70 2 2 271 272 273 274 + 72 2 2 272 273 274 275 + 74 2 2 273 274 275 276 + 76 2 2 274 275 276 277 + 78 2 2 275 276 277 278 + 80 2 2 276 277 278 279 + 82 2 2 277 278 279 280 + 84 2 2 278 279 280 281 + 86 2 2 279 280 281 282 + 88 2 2 280 281 282 283 + 90 2 2 281 282 283 284 + 92 2 2 282 283 284 285 + 94 2 2 283 284 285 286 + 96 2 2 284 285 286 287 + 98 2 2 285 286 287 288 + 100 2 2 286 287 288 289 + 102 2 2 287 288 289 238 + 0 4 2 340 341 290 291 + 2 4 2 341 290 291 292 + 4 4 2 290 291 292 293 + 6 4 2 291 292 293 294 + 8 4 2 292 293 294 295 + 10 4 2 293 294 295 296 + 12 4 2 294 295 296 297 + 14 4 2 295 296 297 298 + 16 4 2 296 297 298 299 + 18 4 2 297 298 299 300 + 20 4 2 298 299 300 301 + 22 4 2 299 300 301 302 + 24 4 2 300 301 302 303 + 26 4 2 301 302 303 304 + 28 4 2 302 303 304 305 + 30 4 2 303 304 305 306 + 32 4 2 304 305 306 307 + 34 4 2 305 306 307 308 + 36 4 2 306 307 308 309 + 38 4 2 307 308 309 310 + 40 4 2 308 309 310 311 + 42 4 2 309 310 311 312 + 44 4 2 310 311 312 313 + 46 4 2 311 312 313 314 + 48 4 2 312 313 314 315 + 50 4 2 313 314 315 316 + 52 4 2 314 315 316 317 + 54 4 2 315 316 317 318 + 56 4 2 316 317 318 319 + 58 4 2 317 318 319 320 + 60 4 2 318 319 320 321 + 62 4 2 319 320 321 322 + 64 4 2 320 321 322 323 + 66 4 2 321 322 323 324 + 68 4 2 322 323 324 325 + 70 4 2 323 324 325 326 + 72 4 2 324 325 326 327 + 74 4 2 325 326 327 328 + 76 4 2 326 327 328 329 + 78 4 2 327 328 329 330 + 80 4 2 328 329 330 331 + 82 4 2 329 330 331 332 + 84 4 2 330 331 332 333 + 86 4 2 331 332 333 334 + 88 4 2 332 333 334 335 + 90 4 2 333 334 335 336 + 92 4 2 334 335 336 337 + 94 4 2 335 336 337 338 + 96 4 2 336 337 338 339 + 98 4 2 337 338 339 340 + 100 4 2 338 339 340 341 + 102 4 2 339 340 341 290 + 0 6 2 392 393 342 343 + 2 6 2 393 342 343 344 + 4 6 2 342 343 344 345 + 6 6 2 343 344 345 346 + 8 6 2 344 345 346 347 + 10 6 2 345 346 347 348 + 12 6 2 346 347 348 349 + 14 6 2 347 348 349 350 + 16 6 2 348 349 350 351 + 18 6 2 349 350 351 352 + 20 6 2 350 351 352 353 + 22 6 2 351 352 353 354 + 24 6 2 352 353 354 355 + 26 6 2 353 354 355 356 + 28 6 2 354 355 356 357 + 30 6 2 355 356 357 358 + 32 6 2 356 357 358 359 + 34 6 2 357 358 359 360 + 36 6 2 358 359 360 361 + 38 6 2 359 360 361 362 + 40 6 2 360 361 362 363 + 42 6 2 361 362 363 364 + 44 6 2 362 363 364 365 + 46 6 2 363 364 365 366 + 48 6 2 364 365 366 367 + 50 6 2 365 366 367 368 + 52 6 2 366 367 368 369 + 54 6 2 367 368 369 370 + 56 6 2 368 369 370 371 + 58 6 2 369 370 371 372 + 60 6 2 370 371 372 373 + 62 6 2 371 372 373 374 + 64 6 2 372 373 374 375 + 66 6 2 373 374 375 376 + 68 6 2 374 375 376 377 + 70 6 2 375 376 377 378 + 72 6 2 376 377 378 379 + 74 6 2 377 378 379 380 + 76 6 2 378 379 380 381 + 78 6 2 379 380 381 382 + 80 6 2 380 381 382 383 + 82 6 2 381 382 383 384 + 84 6 2 382 383 384 385 + 86 6 2 383 384 385 386 + 88 6 2 384 385 386 387 + 90 6 2 385 386 387 388 + 92 6 2 386 387 388 389 + 94 6 2 387 388 389 390 + 96 6 2 388 389 390 391 + 98 6 2 389 390 391 392 + 100 6 2 390 391 392 393 + 102 6 2 391 392 393 342 + 0 8 2 444 445 394 395 + 2 8 2 445 394 395 396 + 4 8 2 394 395 396 397 + 6 8 2 395 396 397 398 + 8 8 2 396 397 398 399 + 10 8 2 397 398 399 400 + 12 8 2 398 399 400 401 + 14 8 2 399 400 401 402 + 16 8 2 400 401 402 403 + 18 8 2 401 402 403 404 + 20 8 2 402 403 404 405 + 22 8 2 403 404 405 406 + 24 8 2 404 405 406 407 + 26 8 2 405 406 407 408 + 28 8 2 406 407 408 409 + 30 8 2 407 408 409 410 + 32 8 2 408 409 410 411 + 34 8 2 409 410 411 412 + 36 8 2 410 411 412 413 + 38 8 2 411 412 413 414 + 40 8 2 412 413 414 415 + 42 8 2 413 414 415 416 + 44 8 2 414 415 416 417 + 46 8 2 415 416 417 418 + 48 8 2 416 417 418 419 + 50 8 2 417 418 419 420 + 52 8 2 418 419 420 421 + 54 8 2 419 420 421 422 + 56 8 2 420 421 422 423 + 58 8 2 421 422 423 424 + 60 8 2 422 423 424 425 + 62 8 2 423 424 425 426 + 64 8 2 424 425 426 427 + 66 8 2 425 426 427 428 + 68 8 2 426 427 428 429 + 70 8 2 427 428 429 430 + 72 8 2 428 429 430 431 + 74 8 2 429 430 431 432 + 76 8 2 430 431 432 433 + 78 8 2 431 432 433 434 + 80 8 2 432 433 434 435 + 82 8 2 433 434 435 436 + 84 8 2 434 435 436 437 + 86 8 2 435 436 437 438 + 88 8 2 436 437 438 439 + 90 8 2 437 438 439 440 + 92 8 2 438 439 440 441 + 94 8 2 439 440 441 442 + 96 8 2 440 441 442 443 + 98 8 2 441 442 443 444 + 100 8 2 442 443 444 445 + 102 8 2 443 444 445 394 + 0 10 2 496 497 446 447 + 2 10 2 497 446 447 448 + 4 10 2 446 447 448 449 + 6 10 2 447 448 449 450 + 8 10 2 448 449 450 451 + 10 10 2 449 450 451 452 + 12 10 2 450 451 452 453 + 14 10 2 451 452 453 454 + 16 10 2 452 453 454 455 + 18 10 2 453 454 455 456 + 20 10 2 454 455 456 457 + 22 10 2 455 456 457 458 + 24 10 2 456 457 458 459 + 26 10 2 457 458 459 460 + 28 10 2 458 459 460 461 + 30 10 2 459 460 461 462 + 32 10 2 460 461 462 463 + 34 10 2 461 462 463 464 + 36 10 2 462 463 464 465 + 38 10 2 463 464 465 466 + 40 10 2 464 465 466 467 + 42 10 2 465 466 467 468 + 44 10 2 466 467 468 469 + 46 10 2 467 468 469 470 + 48 10 2 468 469 470 471 + 50 10 2 469 470 471 472 + 52 10 2 470 471 472 473 + 54 10 2 471 472 473 474 + 56 10 2 472 473 474 475 + 58 10 2 473 474 475 476 + 60 10 2 474 475 476 477 + 62 10 2 475 476 477 478 + 64 10 2 476 477 478 479 + 66 10 2 477 478 479 480 + 68 10 2 478 479 480 481 + 70 10 2 479 480 481 482 + 72 10 2 480 481 482 483 + 74 10 2 481 482 483 484 + 76 10 2 482 483 484 485 + 78 10 2 483 484 485 486 + 80 10 2 484 485 486 487 + 82 10 2 485 486 487 488 + 84 10 2 486 487 488 489 + 86 10 2 487 488 489 490 + 88 10 2 488 489 490 491 + 90 10 2 489 490 491 492 + 92 10 2 490 491 492 493 + 94 10 2 491 492 493 494 + 96 10 2 492 493 494 495 + 98 10 2 493 494 495 496 + 100 10 2 494 495 496 497 + 102 10 2 495 496 497 446 + 2 12 2 0 498 499 500 + 4 12 2 498 499 500 501 + 6 12 2 499 500 501 502 + 8 12 2 500 501 502 503 + 10 12 2 501 502 503 504 + 12 12 2 502 503 504 505 + 14 12 2 503 504 505 506 + 16 12 2 504 505 506 507 + 18 12 2 505 506 507 508 + 20 12 2 506 507 508 509 + 22 12 2 507 508 509 510 + 24 12 2 508 509 510 511 + 26 12 2 509 510 511 512 + 28 12 2 510 511 512 513 + 30 12 2 511 512 513 514 + 32 12 2 512 513 514 515 + 34 12 2 513 514 515 516 + 36 12 2 514 515 516 517 + 38 12 2 515 516 517 518 + 40 12 2 516 517 518 519 + 42 12 2 517 518 519 520 + 44 12 2 518 519 520 521 + 46 12 2 519 520 521 522 + 48 12 2 520 521 522 523 + 50 12 2 521 522 523 524 + 52 12 2 522 523 524 525 + 54 12 2 523 524 525 526 + 56 12 2 524 525 526 527 + 58 12 2 525 526 527 528 + 60 12 2 526 527 528 529 + 62 12 2 527 528 529 530 + 64 12 2 528 529 530 531 + 66 12 2 529 530 531 532 + 68 12 2 530 531 532 533 + 70 12 2 531 532 533 534 + 72 12 2 532 533 534 535 + 74 12 2 533 534 535 536 + 76 12 2 534 535 536 537 + 78 12 2 535 536 537 538 + 80 12 2 536 537 538 539 + 82 12 2 537 538 539 540 + 84 12 2 538 539 540 541 + 86 12 2 539 540 541 542 + 88 12 2 540 541 542 543 + 90 12 2 541 542 543 0 + 0 14 2 -1 -1 544 545 + 2 14 2 -1 544 545 546 + 4 14 2 544 545 546 547 + 6 14 2 545 546 547 548 + 8 14 2 546 547 548 549 + 10 14 2 547 548 549 550 + 12 14 2 548 549 550 551 + 14 14 2 549 550 551 552 + 16 14 2 550 551 552 553 + 18 14 2 551 552 553 554 + 20 14 2 552 553 554 555 + 22 14 2 553 554 555 556 + 24 14 2 554 555 556 557 + 26 14 2 555 556 557 558 + 28 14 2 556 557 558 559 + 30 14 2 557 558 559 560 + 32 14 2 558 559 560 561 + 34 14 2 559 560 561 562 + 36 14 2 560 561 562 563 + 38 14 2 561 562 563 564 + 40 14 2 562 563 564 565 + 42 14 2 563 564 565 566 + 44 14 2 564 565 566 567 + 46 14 2 565 566 567 568 + 48 14 2 566 567 568 569 + 50 14 2 567 568 569 570 + 52 14 2 568 569 570 571 + 54 14 2 569 570 571 572 + 56 14 2 570 571 572 573 + 58 14 2 571 572 573 574 + 60 14 2 572 573 574 575 + 62 14 2 573 574 575 576 + 64 14 2 574 575 576 577 + 66 14 2 575 576 577 578 + 68 14 2 576 577 578 579 + 70 14 2 577 578 579 580 + 72 14 2 578 579 580 581 + 74 14 2 579 580 581 582 + 76 14 2 580 581 582 583 + 78 14 2 581 582 583 584 + 80 14 2 582 583 584 585 + 82 14 2 583 584 585 586 + 84 14 2 584 585 586 587 + 86 14 2 585 586 587 588 + 88 14 2 586 587 588 589 + 90 14 2 587 588 589 -1 + 92 14 2 588 589 -1 -1 + 0 16 2 -1 -1 590 591 + 2 16 2 -1 590 591 592 + 4 16 2 590 591 592 593 + 6 16 2 591 592 593 594 + 8 16 2 592 593 594 595 + 10 16 2 593 594 595 596 + 12 16 2 594 595 596 597 + 14 16 2 595 596 597 598 + 16 16 2 596 597 598 599 + 18 16 2 597 598 599 600 + 20 16 2 598 599 600 601 + 22 16 2 599 600 601 602 + 24 16 2 600 601 602 603 + 26 16 2 601 602 603 604 + 28 16 2 602 603 604 605 + 30 16 2 603 604 605 606 + 32 16 2 604 605 606 607 + 34 16 2 605 606 607 608 + 36 16 2 606 607 608 609 + 38 16 2 607 608 609 610 + 40 16 2 608 609 610 611 + 42 16 2 609 610 611 612 + 44 16 2 610 611 612 613 + 46 16 2 611 612 613 614 + 48 16 2 612 613 614 615 + 50 16 2 613 614 615 616 + 52 16 2 614 615 616 617 + 54 16 2 615 616 617 618 + 56 16 2 616 617 618 619 + 58 16 2 617 618 619 620 + 60 16 2 618 619 620 621 + 62 16 2 619 620 621 622 + 64 16 2 620 621 622 623 + 66 16 2 621 622 623 624 + 68 16 2 622 623 624 625 + 70 16 2 623 624 625 626 + 72 16 2 624 625 626 627 + 74 16 2 625 626 627 628 + 76 16 2 626 627 628 629 + 78 16 2 627 628 629 630 + 80 16 2 628 629 630 631 + 82 16 2 629 630 631 632 + 84 16 2 630 631 632 633 + 86 16 2 631 632 633 634 + 88 16 2 632 633 634 635 + 90 16 2 633 634 635 12 + 0 18 2 -1 -1 636 637 + 2 18 2 -1 636 637 638 + 4 18 2 636 637 638 639 + 6 18 2 637 638 639 640 + 8 18 2 638 639 640 641 + 10 18 2 639 640 641 642 + 12 18 2 640 641 642 643 + 14 18 2 641 642 643 644 + 16 18 2 642 643 644 645 + 18 18 2 643 644 645 646 + 20 18 2 644 645 646 647 + 22 18 2 645 646 647 648 + 24 18 2 646 647 648 649 + 26 18 2 647 648 649 650 + 28 18 2 648 649 650 651 + 30 18 2 649 650 651 652 + 32 18 2 650 651 652 653 + 34 18 2 651 652 653 654 + 36 18 2 652 653 654 655 + 38 18 2 653 654 655 656 + 40 18 2 654 655 656 657 + 42 18 2 655 656 657 658 + 44 18 2 656 657 658 659 + 46 18 2 657 658 659 660 + 48 18 2 658 659 660 661 + 50 18 2 659 660 661 662 + 52 18 2 660 661 662 663 + 54 18 2 661 662 663 664 + 56 18 2 662 663 664 665 + 58 18 2 663 664 665 666 + 60 18 2 664 665 666 667 + 62 18 2 665 666 667 668 + 64 18 2 666 667 668 669 + 66 18 2 667 668 669 670 + 68 18 2 668 669 670 671 + 70 18 2 669 670 671 672 + 72 18 2 670 671 672 673 + 74 18 2 671 672 673 674 + 76 18 2 672 673 674 675 + 78 18 2 673 674 675 676 + 80 18 2 674 675 676 677 + 82 18 2 675 676 677 678 + 84 18 2 676 677 678 679 + 86 18 2 677 678 679 680 + 88 18 2 678 679 680 681 + 90 18 2 679 680 681 14 + 0 20 2 -1 -1 682 683 + 2 20 2 -1 682 683 684 + 4 20 2 682 683 684 685 + 6 20 2 683 684 685 686 + 8 20 2 684 685 686 687 + 10 20 2 685 686 687 688 + 12 20 2 686 687 688 689 + 14 20 2 687 688 689 690 + 16 20 2 688 689 690 691 + 18 20 2 689 690 691 692 + 20 20 2 690 691 692 693 + 22 20 2 691 692 693 694 + 24 20 2 692 693 694 695 + 26 20 2 693 694 695 696 + 28 20 2 694 695 696 697 + 30 20 2 695 696 697 698 + 32 20 2 696 697 698 699 + 34 20 2 697 698 699 700 + 36 20 2 698 699 700 701 + 38 20 2 699 700 701 702 + 40 20 2 700 701 702 703 + 42 20 2 701 702 703 704 + 44 20 2 702 703 704 705 + 46 20 2 703 704 705 706 + 48 20 2 704 705 706 707 + 50 20 2 705 706 707 708 + 52 20 2 706 707 708 709 + 54 20 2 707 708 709 710 + 56 20 2 708 709 710 711 + 58 20 2 709 710 711 712 + 60 20 2 710 711 712 713 + 62 20 2 711 712 713 714 + 64 20 2 712 713 714 715 + 66 20 2 713 714 715 716 + 68 20 2 714 715 716 717 + 70 20 2 715 716 717 718 + 72 20 2 716 717 718 719 + 74 20 2 717 718 719 720 + 76 20 2 718 719 720 721 + 78 20 2 719 720 721 722 + 80 20 2 720 721 722 723 + 82 20 2 721 722 723 724 + 84 20 2 722 723 724 725 + 86 20 2 723 724 725 726 + 88 20 2 724 725 726 727 + 90 20 2 725 726 727 0 + 0 22 2 -1 -1 728 729 + 2 22 2 -1 728 729 730 + 4 22 2 728 729 730 731 + 6 22 2 729 730 731 732 + 8 22 2 730 731 732 733 + 10 22 2 731 732 733 734 + 12 22 2 732 733 734 735 + 14 22 2 733 734 735 736 + 16 22 2 734 735 736 737 + 18 22 2 735 736 737 738 + 20 22 2 736 737 738 739 + 22 22 2 737 738 739 740 + 24 22 2 738 739 740 741 + 26 22 2 739 740 741 742 + 28 22 2 740 741 742 743 + 30 22 2 741 742 743 744 + 32 22 2 742 743 744 745 + 34 22 2 743 744 745 746 + 36 22 2 744 745 746 747 + 38 22 2 745 746 747 748 + 40 22 2 746 747 748 749 + 42 22 2 747 748 749 750 + 44 22 2 748 749 750 751 + 46 22 2 749 750 751 752 + 48 22 2 750 751 752 753 + 50 22 2 751 752 753 754 + 52 22 2 752 753 754 755 + 54 22 2 753 754 755 756 + 56 22 2 754 755 756 757 + 58 22 2 755 756 757 758 + 60 22 2 756 757 758 759 + 62 22 2 757 758 759 760 + 64 22 2 758 759 760 761 + 66 22 2 759 760 761 762 + 68 22 2 760 761 762 763 + 70 22 2 761 762 763 764 + 72 22 2 762 763 764 765 + 74 22 2 763 764 765 766 + 76 22 2 764 765 766 767 + 78 22 2 765 766 767 768 + 80 22 2 766 767 768 769 + 82 22 2 767 768 769 770 + 84 22 2 768 769 770 771 + 86 22 2 769 770 771 772 + 88 22 2 770 771 772 17 + 0 24 2 -1 -1 773 774 + 2 24 2 -1 773 774 775 + 4 24 2 773 774 775 776 + 6 24 2 774 775 776 777 + 8 24 2 775 776 777 778 + 10 24 2 776 777 778 779 + 12 24 2 777 778 779 780 + 14 24 2 778 779 780 781 + 16 24 2 779 780 781 782 + 18 24 2 780 781 782 783 + 20 24 2 781 782 783 784 + 22 24 2 782 783 784 785 + 24 24 2 783 784 785 786 + 26 24 2 784 785 786 787 + 28 24 2 785 786 787 788 + 30 24 2 786 787 788 789 + 32 24 2 787 788 789 790 + 34 24 2 788 789 790 791 + 36 24 2 789 790 791 792 + 38 24 2 790 791 792 793 + 40 24 2 791 792 793 794 + 42 24 2 792 793 794 795 + 44 24 2 793 794 795 796 + 46 24 2 794 795 796 797 + 48 24 2 795 796 797 798 + 50 24 2 796 797 798 799 + 52 24 2 797 798 799 800 + 54 24 2 798 799 800 801 + 56 24 2 799 800 801 802 + 58 24 2 800 801 802 803 + 60 24 2 801 802 803 804 + 62 24 2 802 803 804 805 + 64 24 2 803 804 805 806 + 66 24 2 804 805 806 807 + 68 24 2 805 806 807 808 + 70 24 2 806 807 808 809 + 72 24 2 807 808 809 810 + 74 24 2 808 809 810 811 + 76 24 2 809 810 811 812 + 78 24 2 810 811 812 813 + 80 24 2 811 812 813 814 + 82 24 2 812 813 814 815 + 84 24 2 813 814 815 816 + 86 24 2 814 815 816 817 + 88 24 2 815 816 817 0 + 0 26 2 -1 -1 818 819 + 2 26 2 -1 818 819 820 + 4 26 2 818 819 820 821 + 6 26 2 819 820 821 822 + 8 26 2 820 821 822 823 + 10 26 2 821 822 823 824 + 12 26 2 822 823 824 825 + 14 26 2 823 824 825 826 + 16 26 2 824 825 826 827 + 18 26 2 825 826 827 828 + 20 26 2 826 827 828 829 + 22 26 2 827 828 829 830 + 24 26 2 828 829 830 831 + 26 26 2 829 830 831 832 + 28 26 2 830 831 832 833 + 30 26 2 831 832 833 834 + 32 26 2 832 833 834 835 + 34 26 2 833 834 835 836 + 36 26 2 834 835 836 837 + 38 26 2 835 836 837 838 + 40 26 2 836 837 838 839 + 42 26 2 837 838 839 840 + 44 26 2 838 839 840 841 + 46 26 2 839 840 841 842 + 48 26 2 840 841 842 843 + 50 26 2 841 842 843 844 + 52 26 2 842 843 844 845 + 54 26 2 843 844 845 846 + 56 26 2 844 845 846 847 + 58 26 2 845 846 847 848 + 60 26 2 846 847 848 849 + 62 26 2 847 848 849 850 + 64 26 2 848 849 850 851 + 66 26 2 849 850 851 852 + 68 26 2 850 851 852 853 + 70 26 2 851 852 853 854 + 72 26 2 852 853 854 855 + 74 26 2 853 854 855 856 + 76 26 2 854 855 856 857 + 78 26 2 855 856 857 858 + 80 26 2 856 857 858 859 + 82 26 2 857 858 859 860 + 84 26 2 858 859 860 861 + 86 26 2 859 860 861 0 + 0 28 2 -1 -1 862 863 + 2 28 2 -1 862 863 864 + 4 28 2 862 863 864 865 + 6 28 2 863 864 865 866 + 8 28 2 864 865 866 867 + 10 28 2 865 866 867 868 + 12 28 2 866 867 868 869 + 14 28 2 867 868 869 870 + 16 28 2 868 869 870 871 + 18 28 2 869 870 871 872 + 20 28 2 870 871 872 873 + 22 28 2 871 872 873 874 + 24 28 2 872 873 874 875 + 26 28 2 873 874 875 876 + 28 28 2 874 875 876 877 + 30 28 2 875 876 877 878 + 32 28 2 876 877 878 879 + 34 28 2 877 878 879 880 + 36 28 2 878 879 880 881 + 38 28 2 879 880 881 882 + 40 28 2 880 881 882 883 + 42 28 2 881 882 883 884 + 44 28 2 882 883 884 885 + 46 28 2 883 884 885 886 + 48 28 2 884 885 886 887 + 50 28 2 885 886 887 888 + 52 28 2 886 887 888 889 + 54 28 2 887 888 889 890 + 56 28 2 888 889 890 891 + 58 28 2 889 890 891 892 + 60 28 2 890 891 892 893 + 62 28 2 891 892 893 894 + 64 28 2 892 893 894 895 + 66 28 2 893 894 895 896 + 68 28 2 894 895 896 897 + 70 28 2 895 896 897 898 + 72 28 2 896 897 898 899 + 74 28 2 897 898 899 900 + 76 28 2 898 899 900 901 + 78 28 2 899 900 901 902 + 80 28 2 900 901 902 903 + 82 28 2 901 902 903 904 + 84 28 2 902 903 904 0 + 0 30 2 -1 -1 905 906 + 2 30 2 -1 905 906 907 + 4 30 2 905 906 907 908 + 6 30 2 906 907 908 909 + 8 30 2 907 908 909 910 + 10 30 2 908 909 910 911 + 12 30 2 909 910 911 912 + 14 30 2 910 911 912 913 + 16 30 2 911 912 913 914 + 18 30 2 912 913 914 915 + 20 30 2 913 914 915 916 + 22 30 2 914 915 916 917 + 24 30 2 915 916 917 918 + 26 30 2 916 917 918 919 + 28 30 2 917 918 919 920 + 30 30 2 918 919 920 921 + 32 30 2 919 920 921 922 + 34 30 2 920 921 922 923 + 36 30 2 921 922 923 924 + 38 30 2 922 923 924 925 + 40 30 2 923 924 925 926 + 42 30 2 924 925 926 927 + 44 30 2 925 926 927 928 + 46 30 2 926 927 928 929 + 48 30 2 927 928 929 930 + 50 30 2 928 929 930 931 + 52 30 2 929 930 931 932 + 54 30 2 930 931 932 933 + 56 30 2 931 932 933 934 + 58 30 2 932 933 934 935 + 60 30 2 933 934 935 936 + 62 30 2 934 935 936 937 + 64 30 2 935 936 937 938 + 66 30 2 936 937 938 939 + 68 30 2 937 938 939 940 + 70 30 2 938 939 940 941 + 72 30 2 939 940 941 23 + 0 32 2 -1 -1 942 943 + 2 32 2 -1 942 943 944 + 4 32 2 942 943 944 945 + 6 32 2 943 944 945 946 + 8 32 2 944 945 946 947 + 10 32 2 945 946 947 948 + 12 32 2 946 947 948 949 + 14 32 2 947 948 949 950 + 16 32 2 948 949 950 951 + 18 32 2 949 950 951 952 + 20 32 2 950 951 952 953 + 22 32 2 951 952 953 954 + 24 32 2 952 953 954 955 + 26 32 2 953 954 955 956 + 28 32 2 954 955 956 957 + 30 32 2 955 956 957 958 + 32 32 2 956 957 958 959 + 34 32 2 957 958 959 960 + 36 32 2 958 959 960 961 + 38 32 2 959 960 961 962 + 40 32 2 960 961 962 963 + 42 32 2 961 962 963 964 + 44 32 2 962 963 964 965 + 46 32 2 963 964 965 966 + 48 32 2 964 965 966 967 + 50 32 2 965 966 967 968 + 52 32 2 966 967 968 969 + 54 32 2 967 968 969 970 + 56 32 2 968 969 970 971 + 58 32 2 969 970 971 972 + 60 32 2 970 971 972 0 + 0 34 2 -1 -1 974 975 + 2 34 2 -1 974 975 976 + 4 34 2 974 975 976 977 + 6 34 2 975 976 977 978 + 8 34 2 976 977 978 979 + 10 34 2 977 978 979 980 + 12 34 2 978 979 980 981 + 14 34 2 979 980 981 982 + 16 34 2 980 981 982 983 + 18 34 2 981 982 983 984 + 20 34 2 982 983 984 985 + 22 34 2 983 984 985 986 + 24 34 2 984 985 986 987 + 26 34 2 985 986 987 988 + 28 34 2 986 987 988 989 + 30 34 2 987 988 989 990 + 32 34 2 988 989 990 991 + 34 34 2 989 990 991 992 + 36 34 2 990 991 992 993 + 38 34 2 991 992 993 994 + 40 34 2 992 993 994 995 + 42 34 2 993 994 995 996 + 44 34 2 994 995 996 997 + 46 34 2 995 996 997 998 + 48 34 2 996 997 998 999 + 50 34 2 997 998 999 1000 + 52 34 2 998 999 1000 1001 + 54 34 2 999 1000 1001 1002 + 56 34 2 1000 1001 1002 1003 + 58 34 2 1001 1002 1003 1004 + 60 34 2 1002 1003 1004 1005 + 62 34 2 1003 1004 1005 1006 + 64 34 2 1004 1005 1006 1007 + 66 34 2 1005 1006 1007 1008 + 68 34 2 1006 1007 1008 1009 + 70 34 2 1007 1008 1009 1010 + 72 34 2 1008 1009 1010 0 + 0 36 2 -1 -1 1011 1012 + 2 36 2 -1 1011 1012 1013 + 4 36 2 1011 1012 1013 1014 + 6 36 2 1012 1013 1014 1015 + 8 36 2 1013 1014 1015 1016 + 10 36 2 1014 1015 1016 1017 + 12 36 2 1015 1016 1017 1018 + 14 36 2 1016 1017 1018 1019 + 16 36 2 1017 1018 1019 1020 + 18 36 2 1018 1019 1020 1021 + 20 36 2 1019 1020 1021 1022 + 22 36 2 1020 1021 1022 1023 + 24 36 2 1021 1022 1023 1024 + 26 36 2 1022 1023 1024 1025 + 28 36 2 1023 1024 1025 1026 + 30 36 2 1024 1025 1026 1027 + 32 36 2 1025 1026 1027 1028 + 34 36 2 1026 1027 1028 1029 + 36 36 2 1027 1028 1029 1030 + 38 36 2 1028 1029 1030 1031 + 40 36 2 1029 1030 1031 1032 + 42 36 2 1030 1031 1032 1033 + 44 36 2 1031 1032 1033 1034 + 46 36 2 1032 1033 1034 1035 + 48 36 2 1033 1034 1035 1036 + 50 36 2 1034 1035 1036 1037 + 52 36 2 1035 1036 1037 1038 + 54 36 2 1036 1037 1038 1039 + 56 36 2 1037 1038 1039 1040 + 58 36 2 1038 1039 1040 1041 + 60 36 2 1039 1040 1041 1042 + 62 36 2 1040 1041 1042 1043 + 64 36 2 1041 1042 1043 1044 + 66 36 2 1042 1043 1044 1045 + 68 36 2 1043 1044 1045 1046 + 70 36 2 1044 1045 1046 1047 + 72 36 2 1045 1046 1047 1048 + 74 36 2 1046 1047 1048 1049 + 76 36 2 1047 1048 1049 1050 + 78 36 2 1048 1049 1050 1051 + 80 36 2 1049 1050 1051 1052 + 82 36 2 1050 1051 1052 0 + 0 38 2 -1 -1 1053 1054 + 2 38 2 -1 1053 1054 1055 + 4 38 2 1053 1054 1055 1056 + 6 38 2 1054 1055 1056 1057 + 8 38 2 1055 1056 1057 1058 + 10 38 2 1056 1057 1058 1059 + 12 38 2 1057 1058 1059 1060 + 14 38 2 1058 1059 1060 1061 + 16 38 2 1059 1060 1061 1062 + 18 38 2 1060 1061 1062 1063 + 20 38 2 1061 1062 1063 1064 + 22 38 2 1062 1063 1064 1065 + 24 38 2 1063 1064 1065 1066 + 26 38 2 1064 1065 1066 1067 + 28 38 2 1065 1066 1067 1068 + 30 38 2 1066 1067 1068 1069 + 32 38 2 1067 1068 1069 1070 + 34 38 2 1068 1069 1070 1071 + 36 38 2 1069 1070 1071 1072 + 38 38 2 1070 1071 1072 1073 + 40 38 2 1071 1072 1073 1074 + 42 38 2 1072 1073 1074 1075 + 44 38 2 1073 1074 1075 1076 + 46 38 2 1074 1075 1076 1077 + 48 38 2 1075 1076 1077 1078 + 50 38 2 1076 1077 1078 1079 + 52 38 2 1077 1078 1079 1080 + 54 38 2 1078 1079 1080 1081 + 56 38 2 1079 1080 1081 1082 + 58 38 2 1080 1081 1082 1083 + 60 38 2 1081 1082 1083 1084 + 62 38 2 1082 1083 1084 1085 + 64 38 2 1083 1084 1085 1086 + 66 38 2 1084 1085 1086 1087 + 68 38 2 1085 1086 1087 1088 + 70 38 2 1086 1087 1088 1089 + 72 38 2 1087 1088 1089 1090 + 74 38 2 1088 1089 1090 1091 + 76 38 2 1089 1090 1091 1092 + 78 38 2 1090 1091 1092 1093 + 80 38 2 1091 1092 1093 1094 + 82 38 2 1092 1093 1094 1095 + 84 38 2 1093 1094 1095 1096 + 86 38 2 1094 1095 1096 1097 + 88 38 2 1095 1096 1097 1098 + 90 38 2 1096 1097 1098 1099 + 92 38 2 1097 1098 1099 1100 + 94 38 2 1098 1099 1100 49 + 0 40 2 -1 -1 1101 1102 + 2 40 2 -1 1101 1102 1103 + 4 40 2 1101 1102 1103 1104 + 6 40 2 1102 1103 1104 1105 + 8 40 2 1103 1104 1105 1106 + 10 40 2 1104 1105 1106 1107 + 12 40 2 1105 1106 1107 1108 + 14 40 2 1106 1107 1108 1109 + 16 40 2 1107 1108 1109 1110 + 18 40 2 1108 1109 1110 1111 + 20 40 2 1109 1110 1111 1112 + 22 40 2 1110 1111 1112 1113 + 24 40 2 1111 1112 1113 1114 + 26 40 2 1112 1113 1114 1115 + 28 40 2 1113 1114 1115 1116 + 30 40 2 1114 1115 1116 1117 + 32 40 2 1115 1116 1117 1118 + 34 40 2 1116 1117 1118 1119 + 36 40 2 1117 1118 1119 1120 + 38 40 2 1118 1119 1120 1121 + 40 40 2 1119 1120 1121 1122 + 42 40 2 1120 1121 1122 1123 + 44 40 2 1121 1122 1123 1124 + 46 40 2 1122 1123 1124 1125 + 48 40 2 1123 1124 1125 1126 + 50 40 2 1124 1125 1126 1127 + 52 40 2 1125 1126 1127 1128 + 54 40 2 1126 1127 1128 1129 + 56 40 2 1127 1128 1129 1130 + 58 40 2 1128 1129 1130 1131 + 60 40 2 1129 1130 1131 1132 + 62 40 2 1130 1131 1132 1133 + 64 40 2 1131 1132 1133 1134 + 66 40 2 1132 1133 1134 1135 + 68 40 2 1133 1134 1135 1136 + 70 40 2 1134 1135 1136 1137 + 72 40 2 1135 1136 1137 1138 + 74 40 2 1136 1137 1138 1139 + 76 40 2 1137 1138 1139 1140 + 78 40 2 1138 1139 1140 1141 + 80 40 2 1139 1140 1141 1142 + 82 40 2 1140 1141 1142 1143 + 84 40 2 1141 1142 1143 1144 + 86 40 2 1142 1143 1144 1145 + 88 40 2 1143 1144 1145 1146 + 90 40 2 1144 1145 1146 1147 + 92 40 2 1145 1146 1147 1148 + 94 40 2 1146 1147 1148 51 + 0 42 2 -1 -1 1149 1150 + 2 42 2 -1 1149 1150 1151 + 4 42 2 1149 1150 1151 1152 + 6 42 2 1150 1151 1152 1153 + 8 42 2 1151 1152 1153 1154 + 10 42 2 1152 1153 1154 1155 + 12 42 2 1153 1154 1155 1156 + 14 42 2 1154 1155 1156 1157 + 16 42 2 1155 1156 1157 1158 + 18 42 2 1156 1157 1158 1159 + 20 42 2 1157 1158 1159 1160 + 22 42 2 1158 1159 1160 1161 + 24 42 2 1159 1160 1161 1162 + 26 42 2 1160 1161 1162 1163 + 28 42 2 1161 1162 1163 1164 + 30 42 2 1162 1163 1164 1165 + 32 42 2 1163 1164 1165 1166 + 34 42 2 1164 1165 1166 1167 + 36 42 2 1165 1166 1167 1168 + 38 42 2 1166 1167 1168 1169 + 40 42 2 1167 1168 1169 1170 + 42 42 2 1168 1169 1170 1171 + 44 42 2 1169 1170 1171 1172 + 46 42 2 1170 1171 1172 1173 + 48 42 2 1171 1172 1173 1174 + 50 42 2 1172 1173 1174 1175 + 52 42 2 1173 1174 1175 1176 + 54 42 2 1174 1175 1176 1177 + 56 42 2 1175 1176 1177 1178 + 58 42 2 1176 1177 1178 1179 + 60 42 2 1177 1178 1179 1180 + 62 42 2 1178 1179 1180 1181 + 64 42 2 1179 1180 1181 1182 + 66 42 2 1180 1181 1182 1183 + 68 42 2 1181 1182 1183 1184 + 70 42 2 1182 1183 1184 1185 + 72 42 2 1183 1184 1185 1186 + 74 42 2 1184 1185 1186 1187 + 76 42 2 1185 1186 1187 1188 + 78 42 2 1186 1187 1188 1189 + 80 42 2 1187 1188 1189 0 + 86 42 2 0 1190 1191 1192 + 88 42 2 1190 1191 1192 1193 + 90 42 2 1191 1192 1193 1194 + 92 42 2 1192 1193 1194 1195 + 94 42 2 1193 1194 1195 -1 + 96 42 2 1194 1195 -1 -1 + 0 44 2 -1 -1 1196 1197 + 2 44 2 -1 1196 1197 1198 + 4 44 2 1196 1197 1198 1199 + 6 44 2 1197 1198 1199 1200 + 8 44 2 1198 1199 1200 1201 + 10 44 2 1199 1200 1201 1202 + 12 44 2 1200 1201 1202 1203 + 14 44 2 1201 1202 1203 1204 + 16 44 2 1202 1203 1204 1205 + 18 44 2 1203 1204 1205 1206 + 20 44 2 1204 1205 1206 1207 + 22 44 2 1205 1206 1207 1208 + 24 44 2 1206 1207 1208 1209 + 26 44 2 1207 1208 1209 1210 + 28 44 2 1208 1209 1210 1211 + 30 44 2 1209 1210 1211 1212 + 32 44 2 1210 1211 1212 1213 + 34 44 2 1211 1212 1213 1214 + 36 44 2 1212 1213 1214 1215 + 38 44 2 1213 1214 1215 1216 + 40 44 2 1214 1215 1216 1217 + 42 44 2 1215 1216 1217 1218 + 44 44 2 1216 1217 1218 1219 + 46 44 2 1217 1218 1219 1220 + 48 44 2 1218 1219 1220 1221 + 50 44 2 1219 1220 1221 1222 + 52 44 2 1220 1221 1222 1223 + 54 44 2 1221 1222 1223 1224 + 56 44 2 1222 1223 1224 1225 + 58 44 2 1223 1224 1225 1226 + 60 44 2 1224 1225 1226 1227 + 62 44 2 1225 1226 1227 1228 + 64 44 2 1226 1227 1228 1229 + 66 44 2 1227 1228 1229 1230 + 68 44 2 1228 1229 1230 1231 + 70 44 2 1229 1230 1231 1232 + 72 44 2 1230 1231 1232 1233 + 74 44 2 1231 1232 1233 1234 + 76 44 2 1232 1233 1234 1235 + 78 44 2 1233 1234 1235 1236 + 80 44 2 1234 1235 1236 55 + 88 44 2 57 1237 1238 1239 + 90 44 2 1237 1238 1239 1240 + 92 44 2 1238 1239 1240 59 + 0 46 2 -1 -1 1241 1242 + 2 46 2 -1 1241 1242 1243 + 4 46 2 1241 1242 1243 1244 + 6 46 2 1242 1243 1244 1245 + 8 46 2 1243 1244 1245 1246 + 10 46 2 1244 1245 1246 1247 + 12 46 2 1245 1246 1247 1248 + 14 46 2 1246 1247 1248 1249 + 16 46 2 1247 1248 1249 1250 + 18 46 2 1248 1249 1250 1251 + 20 46 2 1249 1250 1251 1252 + 22 46 2 1250 1251 1252 1253 + 24 46 2 1251 1252 1253 1254 + 26 46 2 1252 1253 1254 1255 + 28 46 2 1253 1254 1255 1256 + 30 46 2 1254 1255 1256 1257 + 32 46 2 1255 1256 1257 1258 + 34 46 2 1256 1257 1258 1259 + 36 46 2 1257 1258 1259 1260 + 38 46 2 1258 1259 1260 1261 + 40 46 2 1259 1260 1261 1262 + 42 46 2 1260 1261 1262 1263 + 44 46 2 1261 1262 1263 1264 + 46 46 2 1262 1263 1264 1265 + 48 46 2 1263 1264 1265 1266 + 50 46 2 1264 1265 1266 1267 + 52 46 2 1265 1266 1267 1268 + 54 46 2 1266 1267 1268 1269 + 56 46 2 1267 1268 1269 1270 + 58 46 2 1268 1269 1270 1271 + 60 46 2 1269 1270 1271 1272 + 62 46 2 1270 1271 1272 1273 + 64 46 2 1271 1272 1273 1274 + 66 46 2 1272 1273 1274 1275 + 68 46 2 1273 1274 1275 1276 + 70 46 2 1274 1275 1276 1277 + 72 46 2 1275 1276 1277 1278 + 74 46 2 1276 1277 1278 1279 + 76 46 2 1277 1278 1279 1280 + 78 46 2 1278 1279 1280 1281 + 80 46 2 1279 1280 1281 0 + 86 46 2 -1 -1 1282 1283 + 88 46 2 -1 1282 1283 0 + 0 48 2 -1 -1 1284 1285 + 2 48 2 -1 1284 1285 1286 + 4 48 2 1284 1285 1286 1287 + 6 48 2 1285 1286 1287 1288 + 8 48 2 1286 1287 1288 1289 + 10 48 2 1287 1288 1289 1290 + 12 48 2 1288 1289 1290 1291 + 14 48 2 1289 1290 1291 1292 + 16 48 2 1290 1291 1292 1293 + 18 48 2 1291 1292 1293 1294 + 20 48 2 1292 1293 1294 1295 + 22 48 2 1293 1294 1295 1296 + 24 48 2 1294 1295 1296 1297 + 26 48 2 1295 1296 1297 1298 + 28 48 2 1296 1297 1298 1299 + 30 48 2 1297 1298 1299 1300 + 32 48 2 1298 1299 1300 1301 + 34 48 2 1299 1300 1301 1302 + 36 48 2 1300 1301 1302 1303 + 38 48 2 1301 1302 1303 1304 + 40 48 2 1302 1303 1304 1305 + 42 48 2 1303 1304 1305 1306 + 44 48 2 1304 1305 1306 1307 + 46 48 2 1305 1306 1307 1308 + 48 48 2 1306 1307 1308 1309 + 50 48 2 1307 1308 1309 1310 + 52 48 2 1308 1309 1310 1311 + 54 48 2 1309 1310 1311 1312 + 56 48 2 1310 1311 1312 1313 + 58 48 2 1311 1312 1313 1314 + 60 48 2 1312 1313 1314 1315 + 62 48 2 1313 1314 1315 1316 + 64 48 2 1314 1315 1316 1317 + 66 48 2 1315 1316 1317 1318 + 68 48 2 1316 1317 1318 1319 + 70 48 2 1317 1318 1319 1320 + 72 48 2 1318 1319 1320 1321 + 74 48 2 1319 1320 1321 1322 + 76 48 2 1320 1321 1322 1323 + 78 48 2 1321 1322 1323 65 + 0 50 2 -1 -1 1324 1325 + 2 50 2 -1 1324 1325 1326 + 4 50 2 1324 1325 1326 1327 + 6 50 2 1325 1326 1327 1328 + 8 50 2 1326 1327 1328 1329 + 10 50 2 1327 1328 1329 1330 + 12 50 2 1328 1329 1330 1331 + 14 50 2 1329 1330 1331 1332 + 16 50 2 1330 1331 1332 1333 + 18 50 2 1331 1332 1333 1334 + 20 50 2 1332 1333 1334 1335 + 22 50 2 1333 1334 1335 1336 + 24 50 2 1334 1335 1336 1337 + 26 50 2 1335 1336 1337 1338 + 28 50 2 1336 1337 1338 1339 + 30 50 2 1337 1338 1339 1340 + 32 50 2 1338 1339 1340 1341 + 34 50 2 1339 1340 1341 1342 + 36 50 2 1340 1341 1342 1343 + 38 50 2 1341 1342 1343 1344 + 40 50 2 1342 1343 1344 1345 + 42 50 2 1343 1344 1345 1346 + 44 50 2 1344 1345 1346 1347 + 46 50 2 1345 1346 1347 1348 + 48 50 2 1346 1347 1348 1349 + 50 50 2 1347 1348 1349 1350 + 52 50 2 1348 1349 1350 1351 + 54 50 2 1349 1350 1351 1352 + 56 50 2 1350 1351 1352 1353 + 58 50 2 1351 1352 1353 1354 + 60 50 2 1352 1353 1354 1355 + 62 50 2 1353 1354 1355 1356 + 64 50 2 1354 1355 1356 1357 + 66 50 2 1355 1356 1357 1358 + 68 50 2 1356 1357 1358 1359 + 70 50 2 1357 1358 1359 1360 + 72 50 2 1358 1359 1360 1361 + 74 50 2 1359 1360 1361 1362 + 76 50 2 1360 1361 1362 1363 + 78 50 2 1361 1362 1363 -1 + 80 50 2 1362 1363 -1 -1 + 0 52 2 -1 -1 1364 1365 + 2 52 2 -1 1364 1365 1366 + 4 52 2 1364 1365 1366 1367 + 6 52 2 1365 1366 1367 1368 + 8 52 2 1366 1367 1368 1369 + 10 52 2 1367 1368 1369 1370 + 12 52 2 1368 1369 1370 1371 + 14 52 2 1369 1370 1371 1372 + 16 52 2 1370 1371 1372 1373 + 18 52 2 1371 1372 1373 1374 + 20 52 2 1372 1373 1374 1375 + 22 52 2 1373 1374 1375 1376 + 24 52 2 1374 1375 1376 1377 + 26 52 2 1375 1376 1377 1378 + 28 52 2 1376 1377 1378 1379 + 30 52 2 1377 1378 1379 1380 + 32 52 2 1378 1379 1380 1381 + 34 52 2 1379 1380 1381 1382 + 36 52 2 1380 1381 1382 1383 + 38 52 2 1381 1382 1383 1384 + 40 52 2 1382 1383 1384 1385 + 42 52 2 1383 1384 1385 1386 + 44 52 2 1384 1385 1386 1387 + 46 52 2 1385 1386 1387 1388 + 48 52 2 1386 1387 1388 1389 + 50 52 2 1387 1388 1389 1390 + 52 52 2 1388 1389 1390 1391 + 54 52 2 1389 1390 1391 1392 + 56 52 2 1390 1391 1392 1393 + 58 52 2 1391 1392 1393 1394 + 60 52 2 1392 1393 1394 1395 + 62 52 2 1393 1394 1395 1396 + 64 52 2 1394 1395 1396 1397 + 66 52 2 1395 1396 1397 1398 + 68 52 2 1396 1397 1398 1399 + 70 52 2 1397 1398 1399 1400 + 72 52 2 1398 1399 1400 1401 + 74 52 2 1399 1400 1401 1402 + 76 52 2 1400 1401 1402 1403 + 78 52 2 1401 1402 1403 1404 + 80 52 2 1402 1403 1404 -1 + 82 52 2 1403 1404 -1 -1 + 0 54 2 -1 -1 1406 1407 + 2 54 2 -1 1406 1407 1408 + 4 54 2 1406 1407 1408 1409 + 6 54 2 1407 1408 1409 1410 + 8 54 2 1408 1409 1410 1411 + 10 54 2 1409 1410 1411 1412 + 12 54 2 1410 1411 1412 1413 + 14 54 2 1411 1412 1413 1414 + 16 54 2 1412 1413 1414 1415 + 18 54 2 1413 1414 1415 1416 + 20 54 2 1414 1415 1416 1417 + 22 54 2 1415 1416 1417 1418 + 24 54 2 1416 1417 1418 1419 + 26 54 2 1417 1418 1419 1420 + 28 54 2 1418 1419 1420 1421 + 30 54 2 1419 1420 1421 1422 + 32 54 2 1420 1421 1422 1423 + 34 54 2 1421 1422 1423 1424 + 36 54 2 1422 1423 1424 1425 + 38 54 2 1423 1424 1425 1426 + 40 54 2 1424 1425 1426 1427 + 42 54 2 1425 1426 1427 1428 + 44 54 2 1426 1427 1428 1429 + 46 54 2 1427 1428 1429 1430 + 48 54 2 1428 1429 1430 1431 + 50 54 2 1429 1430 1431 1432 + 52 54 2 1430 1431 1432 1433 + 54 54 2 1431 1432 1433 1434 + 56 54 2 1432 1433 1434 1435 + 58 54 2 1433 1434 1435 1436 + 60 54 2 1434 1435 1436 1437 + 62 54 2 1435 1436 1437 1438 + 64 54 2 1436 1437 1438 1439 + 66 54 2 1437 1438 1439 1440 + 68 54 2 1438 1439 1440 77 + 76 54 2 81 1441 1442 1443 + 78 54 2 1441 1442 1443 83 + 0 56 2 -1 -1 1446 1447 + 2 56 2 -1 1446 1447 1448 + 4 56 2 1446 1447 1448 1449 + 6 56 2 1447 1448 1449 1450 + 8 56 2 1448 1449 1450 1451 + 10 56 2 1449 1450 1451 1452 + 12 56 2 1450 1451 1452 1453 + 14 56 2 1451 1452 1453 1454 + 16 56 2 1452 1453 1454 1455 + 18 56 2 1453 1454 1455 1456 + 20 56 2 1454 1455 1456 1457 + 22 56 2 1455 1456 1457 1458 + 24 56 2 1456 1457 1458 1459 + 26 56 2 1457 1458 1459 1460 + 28 56 2 1458 1459 1460 1461 + 30 56 2 1459 1460 1461 1462 + 32 56 2 1460 1461 1462 1463 + 34 56 2 1461 1462 1463 1464 + 36 56 2 1462 1463 1464 1465 + 38 56 2 1463 1464 1465 1466 + 40 56 2 1464 1465 1466 1467 + 42 56 2 1465 1466 1467 1468 + 44 56 2 1466 1467 1468 1469 + 46 56 2 1467 1468 1469 1470 + 48 56 2 1468 1469 1470 1471 + 50 56 2 1469 1470 1471 1472 + 52 56 2 1470 1471 1472 1473 + 54 56 2 1471 1472 1473 1474 + 56 56 2 1472 1473 1474 1475 + 58 56 2 1473 1474 1475 1476 + 60 56 2 1474 1475 1476 1477 + 62 56 2 1475 1476 1477 1478 + 64 56 2 1476 1477 1478 0 + 86 56 2 0 1480 1481 0 + 0 58 2 -1 -1 1482 1483 + 2 58 2 -1 1482 1483 1484 + 4 58 2 1482 1483 1484 1485 + 6 58 2 1483 1484 1485 1486 + 8 58 2 1484 1485 1486 1487 + 10 58 2 1485 1486 1487 1488 + 12 58 2 1486 1487 1488 1489 + 14 58 2 1487 1488 1489 1490 + 16 58 2 1488 1489 1490 1491 + 18 58 2 1489 1490 1491 1492 + 20 58 2 1490 1491 1492 1493 + 22 58 2 1491 1492 1493 1494 + 24 58 2 1492 1493 1494 1495 + 26 58 2 1493 1494 1495 1496 + 28 58 2 1494 1495 1496 1497 + 30 58 2 1495 1496 1497 1498 + 32 58 2 1496 1497 1498 1499 + 34 58 2 1497 1498 1499 1500 + 36 58 2 1498 1499 1500 1501 + 38 58 2 1499 1500 1501 1502 + 40 58 2 1500 1501 1502 1503 + 42 58 2 1501 1502 1503 1504 + 44 58 2 1502 1503 1504 1505 + 46 58 2 1503 1504 1505 1506 + 48 58 2 1504 1505 1506 1507 + 50 58 2 1505 1506 1507 1508 + 52 58 2 1506 1507 1508 1509 + 54 58 2 1507 1508 1509 1510 + 56 58 2 1508 1509 1510 1511 + 58 58 2 1509 1510 1511 1512 + 60 58 2 1510 1511 1512 0 + 0 60 2 -1 -1 1514 1515 + 2 60 2 -1 1514 1515 1516 + 4 60 2 1514 1515 1516 1517 + 6 60 2 1515 1516 1517 1518 + 8 60 2 1516 1517 1518 1519 + 10 60 2 1517 1518 1519 1520 + 12 60 2 1518 1519 1520 1521 + 14 60 2 1519 1520 1521 1522 + 16 60 2 1520 1521 1522 1523 + 18 60 2 1521 1522 1523 1524 + 20 60 2 1522 1523 1524 1525 + 22 60 2 1523 1524 1525 1526 + 24 60 2 1524 1525 1526 1527 + 26 60 2 1525 1526 1527 1528 + 28 60 2 1526 1527 1528 1529 + 30 60 2 1527 1528 1529 1530 + 32 60 2 1528 1529 1530 1531 + 34 60 2 1529 1530 1531 1532 + 36 60 2 1530 1531 1532 1533 + 38 60 2 1531 1532 1533 1534 + 40 60 2 1532 1533 1534 1535 + 42 60 2 1533 1534 1535 1536 + 44 60 2 1534 1535 1536 1537 + 46 60 2 1535 1536 1537 1538 + 48 60 2 1536 1537 1538 1539 + 50 60 2 1537 1538 1539 1540 + 52 60 2 1538 1539 1540 1541 + 54 60 2 1539 1540 1541 1542 + 56 60 2 1540 1541 1542 1543 + 58 60 2 1541 1542 1543 132 + 62 60 2 -1 -1 1544 0 + 68 60 2 135 1545 1546 137 + 0 62 2 -1 -1 1547 1548 + 2 62 2 -1 1547 1548 1549 + 4 62 2 1547 1548 1549 1550 + 6 62 2 1548 1549 1550 1551 + 8 62 2 1549 1550 1551 1552 + 10 62 2 1550 1551 1552 1553 + 12 62 2 1551 1552 1553 1554 + 14 62 2 1552 1553 1554 1555 + 16 62 2 1553 1554 1555 1556 + 18 62 2 1554 1555 1556 1557 + 20 62 2 1555 1556 1557 1558 + 22 62 2 1556 1557 1558 1559 + 24 62 2 1557 1558 1559 1560 + 26 62 2 1558 1559 1560 1561 + 28 62 2 1559 1560 1561 1562 + 30 62 2 1560 1561 1562 1563 + 32 62 2 1561 1562 1563 1564 + 34 62 2 1562 1563 1564 1565 + 36 62 2 1563 1564 1565 1566 + 38 62 2 1564 1565 1566 1567 + 40 62 2 1565 1566 1567 1568 + 42 62 2 1566 1567 1568 1569 + 44 62 2 1567 1568 1569 1570 + 46 62 2 1568 1569 1570 1571 + 48 62 2 1569 1570 1571 1572 + 50 62 2 1570 1571 1572 1573 + 52 62 2 1571 1572 1573 1574 + 54 62 2 1572 1573 1574 1575 + 56 62 2 1573 1574 1575 0 + 62 62 2 142 1576 1577 1578 + 64 62 2 1576 1577 1578 1579 + 66 62 2 1577 1578 1579 1580 + 68 62 2 1578 1579 1580 -1 + 70 62 2 1579 1580 -1 -1 + 0 64 2 -1 -1 1581 1582 + 2 64 2 -1 1581 1582 1583 + 4 64 2 1581 1582 1583 1584 + 6 64 2 1582 1583 1584 1585 + 8 64 2 1583 1584 1585 1586 + 10 64 2 1584 1585 1586 1587 + 12 64 2 1585 1586 1587 1588 + 14 64 2 1586 1587 1588 1589 + 16 64 2 1587 1588 1589 1590 + 18 64 2 1588 1589 1590 1591 + 20 64 2 1589 1590 1591 1592 + 22 64 2 1590 1591 1592 1593 + 24 64 2 1591 1592 1593 1594 + 26 64 2 1592 1593 1594 1595 + 28 64 2 1593 1594 1595 1596 + 30 64 2 1594 1595 1596 1597 + 32 64 2 1595 1596 1597 1598 + 34 64 2 1596 1597 1598 1599 + 36 64 2 1597 1598 1599 1600 + 38 64 2 1598 1599 1600 1601 + 40 64 2 1599 1600 1601 1602 + 42 64 2 1600 1601 1602 1603 + 44 64 2 1601 1602 1603 1604 + 46 64 2 1602 1603 1604 1605 + 48 64 2 1603 1604 1605 144 + 60 64 2 150 1606 1607 1608 + 62 64 2 1606 1607 1608 1609 + 64 64 2 1607 1608 1609 1610 + 66 64 2 1608 1609 1610 1611 + 68 64 2 1609 1610 1611 0 + 0 66 2 -1 -1 1612 1613 + 2 66 2 -1 1612 1613 1614 + 4 66 2 1612 1613 1614 1615 + 6 66 2 1613 1614 1615 1616 + 8 66 2 1614 1615 1616 1617 + 10 66 2 1615 1616 1617 1618 + 12 66 2 1616 1617 1618 1619 + 14 66 2 1617 1618 1619 1620 + 16 66 2 1618 1619 1620 1621 + 18 66 2 1619 1620 1621 1622 + 20 66 2 1620 1621 1622 1623 + 22 66 2 1621 1622 1623 1624 + 24 66 2 1622 1623 1624 1625 + 26 66 2 1623 1624 1625 1626 + 28 66 2 1624 1625 1626 1627 + 30 66 2 1625 1626 1627 1628 + 32 66 2 1626 1627 1628 1629 + 34 66 2 1627 1628 1629 1630 + 36 66 2 1628 1629 1630 1631 + 38 66 2 1629 1630 1631 1632 + 40 66 2 1630 1631 1632 1633 + 42 66 2 1631 1632 1633 1634 + 44 66 2 1632 1633 1634 1635 + 46 66 2 1633 1634 1635 1636 + 48 66 2 1634 1635 1636 1637 + 50 66 2 1635 1636 1637 0 + 60 66 2 0 1638 1639 1640 + 62 66 2 1638 1639 1640 1641 + 64 66 2 1639 1640 1641 1642 + 66 66 2 1640 1641 1642 1643 + 68 66 2 1641 1642 1643 156 + 0 68 2 -1 -1 1644 1645 + 2 68 2 -1 1644 1645 1646 + 4 68 2 1644 1645 1646 1647 + 6 68 2 1645 1646 1647 1648 + 8 68 2 1646 1647 1648 1649 + 10 68 2 1647 1648 1649 1650 + 12 68 2 1648 1649 1650 1651 + 14 68 2 1649 1650 1651 1652 + 16 68 2 1650 1651 1652 1653 + 18 68 2 1651 1652 1653 1654 + 20 68 2 1652 1653 1654 1655 + 22 68 2 1653 1654 1655 1656 + 24 68 2 1654 1655 1656 1657 + 26 68 2 1655 1656 1657 1658 + 28 68 2 1656 1657 1658 1659 + 30 68 2 1657 1658 1659 1660 + 32 68 2 1658 1659 1660 1661 + 34 68 2 1659 1660 1661 1662 + 36 68 2 1660 1661 1662 1663 + 38 68 2 1661 1662 1663 1664 + 40 68 2 1662 1663 1664 1665 + 42 68 2 1663 1664 1665 1666 + 44 68 2 1664 1665 1666 1667 + 46 68 2 1665 1666 1667 1668 + 48 68 2 1666 1667 1668 1669 + 50 68 2 1667 1668 1669 1670 + 52 68 2 1668 1669 1670 1671 + 54 68 2 1669 1670 1671 1672 + 56 68 2 1670 1671 1672 1673 + 58 68 2 1671 1672 1673 1674 + 60 68 2 1672 1673 1674 1675 + 62 68 2 1673 1674 1675 1676 + 64 68 2 1674 1675 1676 1677 + 66 68 2 1675 1676 1677 1678 + 68 68 2 1676 1677 1678 158 + 0 70 2 -1 -1 1679 1680 + 2 70 2 -1 1679 1680 1681 + 4 70 2 1679 1680 1681 1682 + 6 70 2 1680 1681 1682 1683 + 8 70 2 1681 1682 1683 1684 + 10 70 2 1682 1683 1684 1685 + 12 70 2 1683 1684 1685 1686 + 14 70 2 1684 1685 1686 1687 + 16 70 2 1685 1686 1687 1688 + 18 70 2 1686 1687 1688 1689 + 20 70 2 1687 1688 1689 1690 + 22 70 2 1688 1689 1690 1691 + 24 70 2 1689 1690 1691 1692 + 26 70 2 1690 1691 1692 1693 + 28 70 2 1691 1692 1693 1694 + 30 70 2 1692 1693 1694 1695 + 32 70 2 1693 1694 1695 1696 + 34 70 2 1694 1695 1696 1697 + 36 70 2 1695 1696 1697 1698 + 38 70 2 1696 1697 1698 1699 + 40 70 2 1697 1698 1699 1700 + 42 70 2 1698 1699 1700 1701 + 44 70 2 1699 1700 1701 1702 + 46 70 2 1700 1701 1702 1703 + 48 70 2 1701 1702 1703 1704 + 50 70 2 1702 1703 1704 1705 + 52 70 2 1703 1704 1705 1706 + 54 70 2 1704 1705 1706 1707 + 56 70 2 1705 1706 1707 1708 + 58 70 2 1706 1707 1708 1709 + 60 70 2 1707 1708 1709 1710 + 62 70 2 1708 1709 1710 1711 + 64 70 2 1709 1710 1711 1712 + 66 70 2 1710 1711 1712 1713 + 68 70 2 1711 1712 1713 160 + 0 72 2 -1 -1 1714 1715 + 2 72 2 -1 1714 1715 1716 + 4 72 2 1714 1715 1716 1717 + 6 72 2 1715 1716 1717 1718 + 8 72 2 1716 1717 1718 1719 + 10 72 2 1717 1718 1719 1720 + 12 72 2 1718 1719 1720 1721 + 14 72 2 1719 1720 1721 1722 + 16 72 2 1720 1721 1722 1723 + 18 72 2 1721 1722 1723 1724 + 20 72 2 1722 1723 1724 1725 + 22 72 2 1723 1724 1725 1726 + 24 72 2 1724 1725 1726 1727 + 26 72 2 1725 1726 1727 1728 + 28 72 2 1726 1727 1728 1729 + 30 72 2 1727 1728 1729 1730 + 32 72 2 1728 1729 1730 1731 + 34 72 2 1729 1730 1731 1732 + 36 72 2 1730 1731 1732 1733 + 38 72 2 1731 1732 1733 1734 + 40 72 2 1732 1733 1734 1735 + 42 72 2 1733 1734 1735 1736 + 44 72 2 1734 1735 1736 1737 + 46 72 2 1735 1736 1737 1738 + 48 72 2 1736 1737 1738 1739 + 50 72 2 1737 1738 1739 1740 + 52 72 2 1738 1739 1740 1741 + 54 72 2 1739 1740 1741 1742 + 56 72 2 1740 1741 1742 1743 + 58 72 2 1741 1742 1743 1744 + 60 72 2 1742 1743 1744 1745 + 62 72 2 1743 1744 1745 1746 + 64 72 2 1744 1745 1746 1747 + 66 72 2 1745 1746 1747 1748 + 68 72 2 1746 1747 1748 1749 + 70 72 2 1747 1748 1749 162 + 0 74 2 -1 -1 1750 1751 + 2 74 2 -1 1750 1751 1752 + 4 74 2 1750 1751 1752 1753 + 6 74 2 1751 1752 1753 1754 + 8 74 2 1752 1753 1754 1755 + 10 74 2 1753 1754 1755 1756 + 12 74 2 1754 1755 1756 1757 + 14 74 2 1755 1756 1757 1758 + 16 74 2 1756 1757 1758 1759 + 18 74 2 1757 1758 1759 1760 + 20 74 2 1758 1759 1760 1761 + 22 74 2 1759 1760 1761 1762 + 24 74 2 1760 1761 1762 1763 + 26 74 2 1761 1762 1763 1764 + 28 74 2 1762 1763 1764 1765 + 30 74 2 1763 1764 1765 1766 + 32 74 2 1764 1765 1766 1767 + 34 74 2 1765 1766 1767 1768 + 36 74 2 1766 1767 1768 1769 + 38 74 2 1767 1768 1769 1770 + 40 74 2 1768 1769 1770 1771 + 42 74 2 1769 1770 1771 1772 + 44 74 2 1770 1771 1772 1773 + 46 74 2 1771 1772 1773 1774 + 48 74 2 1772 1773 1774 1775 + 50 74 2 1773 1774 1775 1776 + 52 74 2 1774 1775 1776 1777 + 54 74 2 1775 1776 1777 1778 + 56 74 2 1776 1777 1778 1779 + 58 74 2 1777 1778 1779 1780 + 60 74 2 1778 1779 1780 1781 + 62 74 2 1779 1780 1781 1782 + 64 74 2 1780 1781 1782 1783 + 66 74 2 1781 1782 1783 1784 + 68 74 2 1782 1783 1784 1785 + 70 74 2 1783 1784 1785 1786 + 72 74 2 1784 1785 1786 164 + 0 76 2 -1 -1 1787 1788 + 2 76 2 -1 1787 1788 1789 + 4 76 2 1787 1788 1789 1790 + 6 76 2 1788 1789 1790 1791 + 8 76 2 1789 1790 1791 1792 + 10 76 2 1790 1791 1792 1793 + 12 76 2 1791 1792 1793 1794 + 14 76 2 1792 1793 1794 1795 + 16 76 2 1793 1794 1795 1796 + 18 76 2 1794 1795 1796 1797 + 20 76 2 1795 1796 1797 1798 + 22 76 2 1796 1797 1798 1799 + 24 76 2 1797 1798 1799 1800 + 26 76 2 1798 1799 1800 1801 + 28 76 2 1799 1800 1801 1802 + 30 76 2 1800 1801 1802 1803 + 32 76 2 1801 1802 1803 1804 + 34 76 2 1802 1803 1804 1805 + 36 76 2 1803 1804 1805 1806 + 38 76 2 1804 1805 1806 1807 + 40 76 2 1805 1806 1807 1808 + 42 76 2 1806 1807 1808 1809 + 44 76 2 1807 1808 1809 1810 + 46 76 2 1808 1809 1810 1811 + 48 76 2 1809 1810 1811 1812 + 50 76 2 1810 1811 1812 1813 + 52 76 2 1811 1812 1813 1814 + 54 76 2 1812 1813 1814 1815 + 56 76 2 1813 1814 1815 1816 + 58 76 2 1814 1815 1816 1817 + 60 76 2 1815 1816 1817 1818 + 62 76 2 1816 1817 1818 1819 + 64 76 2 1817 1818 1819 1820 + 66 76 2 1818 1819 1820 1821 + 68 76 2 1819 1820 1821 1822 + 70 76 2 1820 1821 1822 167 + 76 76 2 0 1823 1824 1825 + 78 76 2 1823 1824 1825 -1 + 80 76 2 1824 1825 -1 -1 + 0 78 2 -1 -1 1826 1827 + 2 78 2 -1 1826 1827 1828 + 4 78 2 1826 1827 1828 1829 + 6 78 2 1827 1828 1829 1830 + 8 78 2 1828 1829 1830 1831 + 10 78 2 1829 1830 1831 1832 + 12 78 2 1830 1831 1832 1833 + 14 78 2 1831 1832 1833 1834 + 16 78 2 1832 1833 1834 1835 + 18 78 2 1833 1834 1835 1836 + 20 78 2 1834 1835 1836 1837 + 22 78 2 1835 1836 1837 1838 + 24 78 2 1836 1837 1838 1839 + 26 78 2 1837 1838 1839 1840 + 28 78 2 1838 1839 1840 1841 + 30 78 2 1839 1840 1841 1842 + 32 78 2 1840 1841 1842 1843 + 34 78 2 1841 1842 1843 1844 + 36 78 2 1842 1843 1844 1845 + 38 78 2 1843 1844 1845 1846 + 40 78 2 1844 1845 1846 1847 + 42 78 2 1845 1846 1847 1848 + 44 78 2 1846 1847 1848 1849 + 46 78 2 1847 1848 1849 1850 + 48 78 2 1848 1849 1850 1851 + 50 78 2 1849 1850 1851 1852 + 52 78 2 1850 1851 1852 1853 + 54 78 2 1851 1852 1853 1854 + 56 78 2 1852 1853 1854 1855 + 58 78 2 1853 1854 1855 1856 + 60 78 2 1854 1855 1856 1857 + 62 78 2 1855 1856 1857 1858 + 64 78 2 1856 1857 1858 1859 + 66 78 2 1857 1858 1859 1860 + 68 78 2 1858 1859 1860 1861 + 70 78 2 1859 1860 1861 1862 + 72 78 2 1860 1861 1862 1863 + 74 78 2 1861 1862 1863 1864 + 76 78 2 1862 1863 1864 1865 + 78 78 2 1863 1864 1865 170 + 0 80 2 -1 -1 1866 1867 + 2 80 2 -1 1866 1867 1868 + 4 80 2 1866 1867 1868 1869 + 6 80 2 1867 1868 1869 1870 + 8 80 2 1868 1869 1870 1871 + 10 80 2 1869 1870 1871 1872 + 12 80 2 1870 1871 1872 1873 + 14 80 2 1871 1872 1873 1874 + 16 80 2 1872 1873 1874 1875 + 18 80 2 1873 1874 1875 1876 + 20 80 2 1874 1875 1876 1877 + 22 80 2 1875 1876 1877 1878 + 24 80 2 1876 1877 1878 1879 + 26 80 2 1877 1878 1879 1880 + 28 80 2 1878 1879 1880 1881 + 30 80 2 1879 1880 1881 1882 + 32 80 2 1880 1881 1882 1883 + 34 80 2 1881 1882 1883 1884 + 36 80 2 1882 1883 1884 1885 + 38 80 2 1883 1884 1885 1886 + 40 80 2 1884 1885 1886 1887 + 42 80 2 1885 1886 1887 1888 + 44 80 2 1886 1887 1888 1889 + 46 80 2 1887 1888 1889 1890 + 48 80 2 1888 1889 1890 1891 + 50 80 2 1889 1890 1891 1892 + 52 80 2 1890 1891 1892 1893 + 54 80 2 1891 1892 1893 1894 + 56 80 2 1892 1893 1894 1895 + 58 80 2 1893 1894 1895 1896 + 60 80 2 1894 1895 1896 1897 + 62 80 2 1895 1896 1897 1898 + 64 80 2 1896 1897 1898 1899 + 66 80 2 1897 1898 1899 1900 + 68 80 2 1898 1899 1900 1901 + 70 80 2 1899 1900 1901 1902 + 72 80 2 1900 1901 1902 1903 + 74 80 2 1901 1902 1903 1904 + 76 80 2 1902 1903 1904 1905 + 78 80 2 1903 1904 1905 1906 + 80 80 2 1904 1905 1906 173 + 86 80 2 0 1907 1908 0 + 0 82 2 -1 -1 1909 1910 + 2 82 2 -1 1909 1910 1911 + 4 82 2 1909 1910 1911 1912 + 6 82 2 1910 1911 1912 1913 + 8 82 2 1911 1912 1913 1914 + 10 82 2 1912 1913 1914 1915 + 12 82 2 1913 1914 1915 1916 + 14 82 2 1914 1915 1916 1917 + 16 82 2 1915 1916 1917 1918 + 18 82 2 1916 1917 1918 1919 + 20 82 2 1917 1918 1919 1920 + 22 82 2 1918 1919 1920 1921 + 24 82 2 1919 1920 1921 1922 + 26 82 2 1920 1921 1922 1923 + 28 82 2 1921 1922 1923 1924 + 30 82 2 1922 1923 1924 1925 + 32 82 2 1923 1924 1925 1926 + 34 82 2 1924 1925 1926 1927 + 36 82 2 1925 1926 1927 1928 + 38 82 2 1926 1927 1928 1929 + 40 82 2 1927 1928 1929 1930 + 42 82 2 1928 1929 1930 1931 + 44 82 2 1929 1930 1931 1932 + 46 82 2 1930 1931 1932 1933 + 48 82 2 1931 1932 1933 1934 + 50 82 2 1932 1933 1934 1935 + 52 82 2 1933 1934 1935 1936 + 54 82 2 1934 1935 1936 1937 + 56 82 2 1935 1936 1937 1938 + 58 82 2 1936 1937 1938 1939 + 60 82 2 1937 1938 1939 1940 + 62 82 2 1938 1939 1940 1941 + 64 82 2 1939 1940 1941 1942 + 66 82 2 1940 1941 1942 1943 + 68 82 2 1941 1942 1943 1944 + 70 82 2 1942 1943 1944 1945 + 72 82 2 1943 1944 1945 1946 + 74 82 2 1944 1945 1946 1947 + 76 82 2 1945 1946 1947 1948 + 78 82 2 1946 1947 1948 1949 + 80 82 2 1947 1948 1949 1950 + 82 82 2 1948 1949 1950 1951 + 84 82 2 1949 1950 1951 1952 + 86 82 2 1950 1951 1952 1953 + 88 82 2 1951 1952 1953 0 + 0 84 2 2004 2005 1954 1955 + 2 84 2 2005 1954 1955 1956 + 4 84 2 1954 1955 1956 1957 + 6 84 2 1955 1956 1957 1958 + 8 84 2 1956 1957 1958 1959 + 10 84 2 1957 1958 1959 1960 + 12 84 2 1958 1959 1960 1961 + 14 84 2 1959 1960 1961 1962 + 16 84 2 1960 1961 1962 1963 + 18 84 2 1961 1962 1963 1964 + 20 84 2 1962 1963 1964 1965 + 22 84 2 1963 1964 1965 1966 + 24 84 2 1964 1965 1966 1967 + 26 84 2 1965 1966 1967 1968 + 28 84 2 1966 1967 1968 1969 + 30 84 2 1967 1968 1969 1970 + 32 84 2 1968 1969 1970 1971 + 34 84 2 1969 1970 1971 1972 + 36 84 2 1970 1971 1972 1973 + 38 84 2 1971 1972 1973 1974 + 40 84 2 1972 1973 1974 1975 + 42 84 2 1973 1974 1975 1976 + 44 84 2 1974 1975 1976 1977 + 46 84 2 1975 1976 1977 1978 + 48 84 2 1976 1977 1978 1979 + 50 84 2 1977 1978 1979 1980 + 52 84 2 1978 1979 1980 1981 + 54 84 2 1979 1980 1981 1982 + 56 84 2 1980 1981 1982 1983 + 58 84 2 1981 1982 1983 1984 + 60 84 2 1982 1983 1984 1985 + 62 84 2 1983 1984 1985 1986 + 64 84 2 1984 1985 1986 1987 + 66 84 2 1985 1986 1987 1988 + 68 84 2 1986 1987 1988 1989 + 70 84 2 1987 1988 1989 1990 + 72 84 2 1988 1989 1990 1991 + 74 84 2 1989 1990 1991 1992 + 76 84 2 1990 1991 1992 1993 + 78 84 2 1991 1992 1993 1994 + 80 84 2 1992 1993 1994 1995 + 82 84 2 1993 1994 1995 1996 + 84 84 2 1994 1995 1996 1997 + 86 84 2 1995 1996 1997 1998 + 88 84 2 1996 1997 1998 1999 + 90 84 2 1997 1998 1999 2000 + 92 84 2 1998 1999 2000 2001 + 94 84 2 1999 2000 2001 2002 + 96 84 2 2000 2001 2002 2003 + 98 84 2 2001 2002 2003 2004 + 100 84 2 2002 2003 2004 2005 + 102 84 2 2003 2004 2005 1954 + 0 86 2 2056 2057 2006 2007 + 2 86 2 2057 2006 2007 2008 + 4 86 2 2006 2007 2008 2009 + 6 86 2 2007 2008 2009 2010 + 8 86 2 2008 2009 2010 2011 + 10 86 2 2009 2010 2011 2012 + 12 86 2 2010 2011 2012 2013 + 14 86 2 2011 2012 2013 2014 + 16 86 2 2012 2013 2014 2015 + 18 86 2 2013 2014 2015 2016 + 20 86 2 2014 2015 2016 2017 + 22 86 2 2015 2016 2017 2018 + 24 86 2 2016 2017 2018 2019 + 26 86 2 2017 2018 2019 2020 + 28 86 2 2018 2019 2020 2021 + 30 86 2 2019 2020 2021 2022 + 32 86 2 2020 2021 2022 2023 + 34 86 2 2021 2022 2023 2024 + 36 86 2 2022 2023 2024 2025 + 38 86 2 2023 2024 2025 2026 + 40 86 2 2024 2025 2026 2027 + 42 86 2 2025 2026 2027 2028 + 44 86 2 2026 2027 2028 2029 + 46 86 2 2027 2028 2029 2030 + 48 86 2 2028 2029 2030 2031 + 50 86 2 2029 2030 2031 2032 + 52 86 2 2030 2031 2032 2033 + 54 86 2 2031 2032 2033 2034 + 56 86 2 2032 2033 2034 2035 + 58 86 2 2033 2034 2035 2036 + 60 86 2 2034 2035 2036 2037 + 62 86 2 2035 2036 2037 2038 + 64 86 2 2036 2037 2038 2039 + 66 86 2 2037 2038 2039 2040 + 68 86 2 2038 2039 2040 2041 + 70 86 2 2039 2040 2041 2042 + 72 86 2 2040 2041 2042 2043 + 74 86 2 2041 2042 2043 2044 + 76 86 2 2042 2043 2044 2045 + 78 86 2 2043 2044 2045 2046 + 80 86 2 2044 2045 2046 2047 + 82 86 2 2045 2046 2047 2048 + 84 86 2 2046 2047 2048 2049 + 86 86 2 2047 2048 2049 2050 + 88 86 2 2048 2049 2050 2051 + 90 86 2 2049 2050 2051 2052 + 92 86 2 2050 2051 2052 2053 + 94 86 2 2051 2052 2053 2054 + 96 86 2 2052 2053 2054 2055 + 98 86 2 2053 2054 2055 2056 + 100 86 2 2054 2055 2056 2057 + 102 86 2 2055 2056 2057 2006 + 0 88 2 2108 2109 2058 2059 + 2 88 2 2109 2058 2059 2060 + 4 88 2 2058 2059 2060 2061 + 6 88 2 2059 2060 2061 2062 + 8 88 2 2060 2061 2062 2063 + 10 88 2 2061 2062 2063 2064 + 12 88 2 2062 2063 2064 2065 + 14 88 2 2063 2064 2065 2066 + 16 88 2 2064 2065 2066 2067 + 18 88 2 2065 2066 2067 2068 + 20 88 2 2066 2067 2068 2069 + 22 88 2 2067 2068 2069 2070 + 24 88 2 2068 2069 2070 2071 + 26 88 2 2069 2070 2071 2072 + 28 88 2 2070 2071 2072 2073 + 30 88 2 2071 2072 2073 2074 + 32 88 2 2072 2073 2074 2075 + 34 88 2 2073 2074 2075 2076 + 36 88 2 2074 2075 2076 2077 + 38 88 2 2075 2076 2077 2078 + 40 88 2 2076 2077 2078 2079 + 42 88 2 2077 2078 2079 2080 + 44 88 2 2078 2079 2080 2081 + 46 88 2 2079 2080 2081 2082 + 48 88 2 2080 2081 2082 2083 + 50 88 2 2081 2082 2083 2084 + 52 88 2 2082 2083 2084 2085 + 54 88 2 2083 2084 2085 2086 + 56 88 2 2084 2085 2086 2087 + 58 88 2 2085 2086 2087 2088 + 60 88 2 2086 2087 2088 2089 + 62 88 2 2087 2088 2089 2090 + 64 88 2 2088 2089 2090 2091 + 66 88 2 2089 2090 2091 2092 + 68 88 2 2090 2091 2092 2093 + 70 88 2 2091 2092 2093 2094 + 72 88 2 2092 2093 2094 2095 + 74 88 2 2093 2094 2095 2096 + 76 88 2 2094 2095 2096 2097 + 78 88 2 2095 2096 2097 2098 + 80 88 2 2096 2097 2098 2099 + 82 88 2 2097 2098 2099 2100 + 84 88 2 2098 2099 2100 2101 + 86 88 2 2099 2100 2101 2102 + 88 88 2 2100 2101 2102 2103 + 90 88 2 2101 2102 2103 2104 + 92 88 2 2102 2103 2104 2105 + 94 88 2 2103 2104 2105 2106 + 96 88 2 2104 2105 2106 2107 + 98 88 2 2105 2106 2107 2108 + 100 88 2 2106 2107 2108 2109 + 102 88 2 2107 2108 2109 2058 + 0 90 2 2160 2161 2110 2111 + 2 90 2 2161 2110 2111 2112 + 4 90 2 2110 2111 2112 2113 + 6 90 2 2111 2112 2113 2114 + 8 90 2 2112 2113 2114 2115 + 10 90 2 2113 2114 2115 2116 + 12 90 2 2114 2115 2116 2117 + 14 90 2 2115 2116 2117 2118 + 16 90 2 2116 2117 2118 2119 + 18 90 2 2117 2118 2119 2120 + 20 90 2 2118 2119 2120 2121 + 22 90 2 2119 2120 2121 2122 + 24 90 2 2120 2121 2122 2123 + 26 90 2 2121 2122 2123 2124 + 28 90 2 2122 2123 2124 2125 + 30 90 2 2123 2124 2125 2126 + 32 90 2 2124 2125 2126 2127 + 34 90 2 2125 2126 2127 2128 + 36 90 2 2126 2127 2128 2129 + 38 90 2 2127 2128 2129 2130 + 40 90 2 2128 2129 2130 2131 + 42 90 2 2129 2130 2131 2132 + 44 90 2 2130 2131 2132 2133 + 46 90 2 2131 2132 2133 2134 + 48 90 2 2132 2133 2134 2135 + 50 90 2 2133 2134 2135 2136 + 52 90 2 2134 2135 2136 2137 + 54 90 2 2135 2136 2137 2138 + 56 90 2 2136 2137 2138 2139 + 58 90 2 2137 2138 2139 2140 + 60 90 2 2138 2139 2140 2141 + 62 90 2 2139 2140 2141 2142 + 64 90 2 2140 2141 2142 2143 + 66 90 2 2141 2142 2143 2144 + 68 90 2 2142 2143 2144 2145 + 70 90 2 2143 2144 2145 2146 + 72 90 2 2144 2145 2146 2147 + 74 90 2 2145 2146 2147 2148 + 76 90 2 2146 2147 2148 2149 + 78 90 2 2147 2148 2149 2150 + 80 90 2 2148 2149 2150 2151 + 82 90 2 2149 2150 2151 2152 + 84 90 2 2150 2151 2152 2153 + 86 90 2 2151 2152 2153 2154 + 88 90 2 2152 2153 2154 2155 + 90 90 2 2153 2154 2155 2156 + 92 90 2 2154 2155 2156 2157 + 94 90 2 2155 2156 2157 2158 + 96 90 2 2156 2157 2158 2159 + 98 90 2 2157 2158 2159 2160 + 100 90 2 2158 2159 2160 2161 + 102 90 2 2159 2160 2161 2110 + 0 92 2 2212 2213 2162 2163 + 2 92 2 2213 2162 2163 2164 + 4 92 2 2162 2163 2164 2165 + 6 92 2 2163 2164 2165 2166 + 8 92 2 2164 2165 2166 2167 + 10 92 2 2165 2166 2167 2168 + 12 92 2 2166 2167 2168 2169 + 14 92 2 2167 2168 2169 2170 + 16 92 2 2168 2169 2170 2171 + 18 92 2 2169 2170 2171 2172 + 20 92 2 2170 2171 2172 2173 + 22 92 2 2171 2172 2173 2174 + 24 92 2 2172 2173 2174 2175 + 26 92 2 2173 2174 2175 2176 + 28 92 2 2174 2175 2176 2177 + 30 92 2 2175 2176 2177 2178 + 32 92 2 2176 2177 2178 2179 + 34 92 2 2177 2178 2179 2180 + 36 92 2 2178 2179 2180 2181 + 38 92 2 2179 2180 2181 2182 + 40 92 2 2180 2181 2182 2183 + 42 92 2 2181 2182 2183 2184 + 44 92 2 2182 2183 2184 2185 + 46 92 2 2183 2184 2185 2186 + 48 92 2 2184 2185 2186 2187 + 50 92 2 2185 2186 2187 2188 + 52 92 2 2186 2187 2188 2189 + 54 92 2 2187 2188 2189 2190 + 56 92 2 2188 2189 2190 2191 + 58 92 2 2189 2190 2191 2192 + 60 92 2 2190 2191 2192 2193 + 62 92 2 2191 2192 2193 2194 + 64 92 2 2192 2193 2194 2195 + 66 92 2 2193 2194 2195 2196 + 68 92 2 2194 2195 2196 2197 + 70 92 2 2195 2196 2197 2198 + 72 92 2 2196 2197 2198 2199 + 74 92 2 2197 2198 2199 2200 + 76 92 2 2198 2199 2200 2201 + 78 92 2 2199 2200 2201 2202 + 80 92 2 2200 2201 2202 2203 + 82 92 2 2201 2202 2203 2204 + 84 92 2 2202 2203 2204 2205 + 86 92 2 2203 2204 2205 2206 + 88 92 2 2204 2205 2206 2207 + 90 92 2 2205 2206 2207 2208 + 92 92 2 2206 2207 2208 2209 + 94 92 2 2207 2208 2209 2210 + 96 92 2 2208 2209 2210 2211 + 98 92 2 2209 2210 2211 2212 + 100 92 2 2210 2211 2212 2213 + 102 92 2 2211 2212 2213 2162 + 0 94 2 2264 2265 2214 2215 + 2 94 2 2265 2214 2215 2216 + 4 94 2 2214 2215 2216 2217 + 6 94 2 2215 2216 2217 2218 + 8 94 2 2216 2217 2218 2219 + 10 94 2 2217 2218 2219 2220 + 12 94 2 2218 2219 2220 2221 + 14 94 2 2219 2220 2221 2222 + 16 94 2 2220 2221 2222 2223 + 18 94 2 2221 2222 2223 2224 + 20 94 2 2222 2223 2224 2225 + 22 94 2 2223 2224 2225 2226 + 24 94 2 2224 2225 2226 2227 + 26 94 2 2225 2226 2227 2228 + 28 94 2 2226 2227 2228 2229 + 30 94 2 2227 2228 2229 2230 + 32 94 2 2228 2229 2230 2231 + 34 94 2 2229 2230 2231 2232 + 36 94 2 2230 2231 2232 2233 + 38 94 2 2231 2232 2233 2234 + 40 94 2 2232 2233 2234 2235 + 42 94 2 2233 2234 2235 2236 + 44 94 2 2234 2235 2236 2237 + 46 94 2 2235 2236 2237 2238 + 48 94 2 2236 2237 2238 2239 + 50 94 2 2237 2238 2239 2240 + 52 94 2 2238 2239 2240 2241 + 54 94 2 2239 2240 2241 2242 + 56 94 2 2240 2241 2242 2243 + 58 94 2 2241 2242 2243 2244 + 60 94 2 2242 2243 2244 2245 + 62 94 2 2243 2244 2245 2246 + 64 94 2 2244 2245 2246 2247 + 66 94 2 2245 2246 2247 2248 + 68 94 2 2246 2247 2248 2249 + 70 94 2 2247 2248 2249 2250 + 72 94 2 2248 2249 2250 2251 + 74 94 2 2249 2250 2251 2252 + 76 94 2 2250 2251 2252 2253 + 78 94 2 2251 2252 2253 2254 + 80 94 2 2252 2253 2254 2255 + 82 94 2 2253 2254 2255 2256 + 84 94 2 2254 2255 2256 2257 + 86 94 2 2255 2256 2257 2258 + 88 94 2 2256 2257 2258 2259 + 90 94 2 2257 2258 2259 2260 + 92 94 2 2258 2259 2260 2261 + 94 94 2 2259 2260 2261 2262 + 96 94 2 2260 2261 2262 2263 + 98 94 2 2261 2262 2263 2264 + 100 94 2 2262 2263 2264 2265 + 102 94 2 2263 2264 2265 2214 + 0 96 2 2316 2317 2266 2267 + 2 96 2 2317 2266 2267 2268 + 4 96 2 2266 2267 2268 2269 + 6 96 2 2267 2268 2269 2270 + 8 96 2 2268 2269 2270 2271 + 10 96 2 2269 2270 2271 2272 + 12 96 2 2270 2271 2272 2273 + 14 96 2 2271 2272 2273 2274 + 16 96 2 2272 2273 2274 2275 + 18 96 2 2273 2274 2275 2276 + 20 96 2 2274 2275 2276 2277 + 22 96 2 2275 2276 2277 2278 + 24 96 2 2276 2277 2278 2279 + 26 96 2 2277 2278 2279 2280 + 28 96 2 2278 2279 2280 2281 + 30 96 2 2279 2280 2281 2282 + 32 96 2 2280 2281 2282 2283 + 34 96 2 2281 2282 2283 2284 + 36 96 2 2282 2283 2284 2285 + 38 96 2 2283 2284 2285 2286 + 40 96 2 2284 2285 2286 2287 + 42 96 2 2285 2286 2287 2288 + 44 96 2 2286 2287 2288 2289 + 46 96 2 2287 2288 2289 2290 + 48 96 2 2288 2289 2290 2291 + 50 96 2 2289 2290 2291 2292 + 52 96 2 2290 2291 2292 2293 + 54 96 2 2291 2292 2293 2294 + 56 96 2 2292 2293 2294 2295 + 58 96 2 2293 2294 2295 2296 + 60 96 2 2294 2295 2296 2297 + 62 96 2 2295 2296 2297 2298 + 64 96 2 2296 2297 2298 2299 + 66 96 2 2297 2298 2299 2300 + 68 96 2 2298 2299 2300 2301 + 70 96 2 2299 2300 2301 2302 + 72 96 2 2300 2301 2302 2303 + 74 96 2 2301 2302 2303 2304 + 76 96 2 2302 2303 2304 2305 + 78 96 2 2303 2304 2305 2306 + 80 96 2 2304 2305 2306 2307 + 82 96 2 2305 2306 2307 2308 + 84 96 2 2306 2307 2308 2309 + 86 96 2 2307 2308 2309 2310 + 88 96 2 2308 2309 2310 2311 + 90 96 2 2309 2310 2311 2312 + 92 96 2 2310 2311 2312 2313 + 94 96 2 2311 2312 2313 2314 + 96 96 2 2312 2313 2314 2315 + 98 96 2 2313 2314 2315 2316 + 100 96 2 2314 2315 2316 2317 + 102 96 2 2315 2316 2317 2266 + 0 98 2 2368 2369 2318 2319 + 2 98 2 2369 2318 2319 2320 + 4 98 2 2318 2319 2320 2321 + 6 98 2 2319 2320 2321 2322 + 8 98 2 2320 2321 2322 2323 + 10 98 2 2321 2322 2323 2324 + 12 98 2 2322 2323 2324 2325 + 14 98 2 2323 2324 2325 2326 + 16 98 2 2324 2325 2326 2327 + 18 98 2 2325 2326 2327 2328 + 20 98 2 2326 2327 2328 2329 + 22 98 2 2327 2328 2329 2330 + 24 98 2 2328 2329 2330 2331 + 26 98 2 2329 2330 2331 2332 + 28 98 2 2330 2331 2332 2333 + 30 98 2 2331 2332 2333 2334 + 32 98 2 2332 2333 2334 2335 + 34 98 2 2333 2334 2335 2336 + 36 98 2 2334 2335 2336 2337 + 38 98 2 2335 2336 2337 2338 + 40 98 2 2336 2337 2338 2339 + 42 98 2 2337 2338 2339 2340 + 44 98 2 2338 2339 2340 2341 + 46 98 2 2339 2340 2341 2342 + 48 98 2 2340 2341 2342 2343 + 50 98 2 2341 2342 2343 2344 + 52 98 2 2342 2343 2344 2345 + 54 98 2 2343 2344 2345 2346 + 56 98 2 2344 2345 2346 2347 + 58 98 2 2345 2346 2347 2348 + 60 98 2 2346 2347 2348 2349 + 62 98 2 2347 2348 2349 2350 + 64 98 2 2348 2349 2350 2351 + 66 98 2 2349 2350 2351 2352 + 68 98 2 2350 2351 2352 2353 + 70 98 2 2351 2352 2353 2354 + 72 98 2 2352 2353 2354 2355 + 74 98 2 2353 2354 2355 2356 + 76 98 2 2354 2355 2356 2357 + 78 98 2 2355 2356 2357 2358 + 80 98 2 2356 2357 2358 2359 + 82 98 2 2357 2358 2359 2360 + 84 98 2 2358 2359 2360 2361 + 86 98 2 2359 2360 2361 2362 + 88 98 2 2360 2361 2362 2363 + 90 98 2 2361 2362 2363 2364 + 92 98 2 2362 2363 2364 2365 + 94 98 2 2363 2364 2365 2366 + 96 98 2 2364 2365 2366 2367 + 98 98 2 2365 2366 2367 2368 + 100 98 2 2366 2367 2368 2369 + 102 98 2 2367 2368 2369 2318 + 0 100 2 2420 2421 2370 2371 + 2 100 2 2421 2370 2371 2372 + 4 100 2 2370 2371 2372 2373 + 6 100 2 2371 2372 2373 2374 + 8 100 2 2372 2373 2374 2375 + 10 100 2 2373 2374 2375 2376 + 12 100 2 2374 2375 2376 2377 + 14 100 2 2375 2376 2377 2378 + 16 100 2 2376 2377 2378 2379 + 18 100 2 2377 2378 2379 2380 + 20 100 2 2378 2379 2380 2381 + 22 100 2 2379 2380 2381 2382 + 24 100 2 2380 2381 2382 2383 + 26 100 2 2381 2382 2383 2384 + 28 100 2 2382 2383 2384 2385 + 30 100 2 2383 2384 2385 2386 + 32 100 2 2384 2385 2386 2387 + 34 100 2 2385 2386 2387 2388 + 36 100 2 2386 2387 2388 2389 + 38 100 2 2387 2388 2389 2390 + 40 100 2 2388 2389 2390 2391 + 42 100 2 2389 2390 2391 2392 + 44 100 2 2390 2391 2392 2393 + 46 100 2 2391 2392 2393 2394 + 48 100 2 2392 2393 2394 2395 + 50 100 2 2393 2394 2395 2396 + 52 100 2 2394 2395 2396 2397 + 54 100 2 2395 2396 2397 2398 + 56 100 2 2396 2397 2398 2399 + 58 100 2 2397 2398 2399 2400 + 60 100 2 2398 2399 2400 2401 + 62 100 2 2399 2400 2401 2402 + 64 100 2 2400 2401 2402 2403 + 66 100 2 2401 2402 2403 2404 + 68 100 2 2402 2403 2404 2405 + 70 100 2 2403 2404 2405 2406 + 72 100 2 2404 2405 2406 2407 + 74 100 2 2405 2406 2407 2408 + 76 100 2 2406 2407 2408 2409 + 78 100 2 2407 2408 2409 2410 + 80 100 2 2408 2409 2410 2411 + 82 100 2 2409 2410 2411 2412 + 84 100 2 2410 2411 2412 2413 + 86 100 2 2411 2412 2413 2414 + 88 100 2 2412 2413 2414 2415 + 90 100 2 2413 2414 2415 2416 + 92 100 2 2414 2415 2416 2417 + 94 100 2 2415 2416 2417 2418 + 96 100 2 2416 2417 2418 2419 + 98 100 2 2417 2418 2419 2420 + 100 100 2 2418 2419 2420 2421 + 102 100 2 2419 2420 2421 2370 + 0 102 2 2472 2473 2422 2423 + 2 102 2 2473 2422 2423 2424 + 4 102 2 2422 2423 2424 2425 + 6 102 2 2423 2424 2425 2426 + 8 102 2 2424 2425 2426 2427 + 10 102 2 2425 2426 2427 2428 + 12 102 2 2426 2427 2428 2429 + 14 102 2 2427 2428 2429 2430 + 16 102 2 2428 2429 2430 2431 + 18 102 2 2429 2430 2431 2432 + 20 102 2 2430 2431 2432 2433 + 22 102 2 2431 2432 2433 2434 + 24 102 2 2432 2433 2434 2435 + 26 102 2 2433 2434 2435 2436 + 28 102 2 2434 2435 2436 2437 + 30 102 2 2435 2436 2437 2438 + 32 102 2 2436 2437 2438 2439 + 34 102 2 2437 2438 2439 2440 + 36 102 2 2438 2439 2440 2441 + 38 102 2 2439 2440 2441 2442 + 40 102 2 2440 2441 2442 2443 + 42 102 2 2441 2442 2443 2444 + 44 102 2 2442 2443 2444 2445 + 46 102 2 2443 2444 2445 2446 + 48 102 2 2444 2445 2446 2447 + 50 102 2 2445 2446 2447 2448 + 52 102 2 2446 2447 2448 2449 + 54 102 2 2447 2448 2449 2450 + 56 102 2 2448 2449 2450 2451 + 58 102 2 2449 2450 2451 2452 + 60 102 2 2450 2451 2452 2453 + 62 102 2 2451 2452 2453 2454 + 64 102 2 2452 2453 2454 2455 + 66 102 2 2453 2454 2455 2456 + 68 102 2 2454 2455 2456 2457 + 70 102 2 2455 2456 2457 2458 + 72 102 2 2456 2457 2458 2459 + 74 102 2 2457 2458 2459 2460 + 76 102 2 2458 2459 2460 2461 + 78 102 2 2459 2460 2461 2462 + 80 102 2 2460 2461 2462 2463 + 82 102 2 2461 2462 2463 2464 + 84 102 2 2462 2463 2464 2465 + 86 102 2 2463 2464 2465 2466 + 88 102 2 2464 2465 2466 2467 + 90 102 2 2465 2466 2467 2468 + 92 102 2 2466 2467 2468 2469 + 94 102 2 2467 2468 2469 2470 + 96 102 2 2468 2469 2470 2471 + 98 102 2 2469 2470 2471 2472 + 100 102 2 2470 2471 2472 2473 + 102 102 2 2471 2472 2473 2422 + 0 104 2 2524 2525 2474 2475 + 2 104 2 2525 2474 2475 2476 + 4 104 2 2474 2475 2476 2477 + 6 104 2 2475 2476 2477 2478 + 8 104 2 2476 2477 2478 2479 + 10 104 2 2477 2478 2479 2480 + 12 104 2 2478 2479 2480 2481 + 14 104 2 2479 2480 2481 2482 + 16 104 2 2480 2481 2482 2483 + 18 104 2 2481 2482 2483 2484 + 20 104 2 2482 2483 2484 2485 + 22 104 2 2483 2484 2485 2486 + 24 104 2 2484 2485 2486 2487 + 26 104 2 2485 2486 2487 2488 + 28 104 2 2486 2487 2488 2489 + 30 104 2 2487 2488 2489 2490 + 32 104 2 2488 2489 2490 2491 + 34 104 2 2489 2490 2491 2492 + 36 104 2 2490 2491 2492 2493 + 38 104 2 2491 2492 2493 2494 + 40 104 2 2492 2493 2494 2495 + 42 104 2 2493 2494 2495 2496 + 44 104 2 2494 2495 2496 2497 + 46 104 2 2495 2496 2497 2498 + 48 104 2 2496 2497 2498 2499 + 50 104 2 2497 2498 2499 2500 + 52 104 2 2498 2499 2500 2501 + 54 104 2 2499 2500 2501 2502 + 56 104 2 2500 2501 2502 2503 + 58 104 2 2501 2502 2503 2504 + 60 104 2 2502 2503 2504 2505 + 62 104 2 2503 2504 2505 2506 + 64 104 2 2504 2505 2506 2507 + 66 104 2 2505 2506 2507 2508 + 68 104 2 2506 2507 2508 2509 + 70 104 2 2507 2508 2509 2510 + 72 104 2 2508 2509 2510 2511 + 74 104 2 2509 2510 2511 2512 + 76 104 2 2510 2511 2512 2513 + 78 104 2 2511 2512 2513 2514 + 80 104 2 2512 2513 2514 2515 + 82 104 2 2513 2514 2515 2516 + 84 104 2 2514 2515 2516 2517 + 86 104 2 2515 2516 2517 2518 + 88 104 2 2516 2517 2518 2519 + 90 104 2 2517 2518 2519 2520 + 92 104 2 2518 2519 2520 2521 + 94 104 2 2519 2520 2521 2522 + 96 104 2 2520 2521 2522 2523 + 98 104 2 2521 2522 2523 2524 + 100 104 2 2522 2523 2524 2525 + 102 104 2 2523 2524 2525 2474 + 0 106 2 2576 2577 2526 2527 + 2 106 2 2577 2526 2527 2528 + 4 106 2 2526 2527 2528 2529 + 6 106 2 2527 2528 2529 2530 + 8 106 2 2528 2529 2530 2531 + 10 106 2 2529 2530 2531 2532 + 12 106 2 2530 2531 2532 2533 + 14 106 2 2531 2532 2533 2534 + 16 106 2 2532 2533 2534 2535 + 18 106 2 2533 2534 2535 2536 + 20 106 2 2534 2535 2536 2537 + 22 106 2 2535 2536 2537 2538 + 24 106 2 2536 2537 2538 2539 + 26 106 2 2537 2538 2539 2540 + 28 106 2 2538 2539 2540 2541 + 30 106 2 2539 2540 2541 2542 + 32 106 2 2540 2541 2542 2543 + 34 106 2 2541 2542 2543 2544 + 36 106 2 2542 2543 2544 2545 + 38 106 2 2543 2544 2545 2546 + 40 106 2 2544 2545 2546 2547 + 42 106 2 2545 2546 2547 2548 + 44 106 2 2546 2547 2548 2549 + 46 106 2 2547 2548 2549 2550 + 48 106 2 2548 2549 2550 2551 + 50 106 2 2549 2550 2551 2552 + 52 106 2 2550 2551 2552 2553 + 54 106 2 2551 2552 2553 2554 + 56 106 2 2552 2553 2554 2555 + 58 106 2 2553 2554 2555 2556 + 60 106 2 2554 2555 2556 2557 + 62 106 2 2555 2556 2557 2558 + 64 106 2 2556 2557 2558 2559 + 66 106 2 2557 2558 2559 2560 + 68 106 2 2558 2559 2560 2561 + 70 106 2 2559 2560 2561 2562 + 72 106 2 2560 2561 2562 2563 + 74 106 2 2561 2562 2563 2564 + 76 106 2 2562 2563 2564 2565 + 78 106 2 2563 2564 2565 2566 + 80 106 2 2564 2565 2566 2567 + 82 106 2 2565 2566 2567 2568 + 84 106 2 2566 2567 2568 2569 + 86 106 2 2567 2568 2569 2570 + 88 106 2 2568 2569 2570 2571 + 90 106 2 2569 2570 2571 2572 + 92 106 2 2570 2571 2572 2573 + 94 106 2 2571 2572 2573 2574 + 96 106 2 2572 2573 2574 2575 + 98 106 2 2573 2574 2575 2576 + 100 106 2 2574 2575 2576 2577 + 102 106 2 2575 2576 2577 2526 + 0 108 2 2628 2629 2578 2579 + 2 108 2 2629 2578 2579 2580 + 4 108 2 2578 2579 2580 2581 + 6 108 2 2579 2580 2581 2582 + 8 108 2 2580 2581 2582 2583 + 10 108 2 2581 2582 2583 2584 + 12 108 2 2582 2583 2584 2585 + 14 108 2 2583 2584 2585 2586 + 16 108 2 2584 2585 2586 2587 + 18 108 2 2585 2586 2587 2588 + 20 108 2 2586 2587 2588 2589 + 22 108 2 2587 2588 2589 2590 + 24 108 2 2588 2589 2590 2591 + 26 108 2 2589 2590 2591 2592 + 28 108 2 2590 2591 2592 2593 + 30 108 2 2591 2592 2593 2594 + 32 108 2 2592 2593 2594 2595 + 34 108 2 2593 2594 2595 2596 + 36 108 2 2594 2595 2596 2597 + 38 108 2 2595 2596 2597 2598 + 40 108 2 2596 2597 2598 2599 + 42 108 2 2597 2598 2599 2600 + 44 108 2 2598 2599 2600 2601 + 46 108 2 2599 2600 2601 2602 + 48 108 2 2600 2601 2602 2603 + 50 108 2 2601 2602 2603 2604 + 52 108 2 2602 2603 2604 2605 + 54 108 2 2603 2604 2605 2606 + 56 108 2 2604 2605 2606 2607 + 58 108 2 2605 2606 2607 2608 + 60 108 2 2606 2607 2608 2609 + 62 108 2 2607 2608 2609 2610 + 64 108 2 2608 2609 2610 2611 + 66 108 2 2609 2610 2611 2612 + 68 108 2 2610 2611 2612 2613 + 70 108 2 2611 2612 2613 2614 + 72 108 2 2612 2613 2614 2615 + 74 108 2 2613 2614 2615 2616 + 76 108 2 2614 2615 2616 2617 + 78 108 2 2615 2616 2617 2618 + 80 108 2 2616 2617 2618 2619 + 82 108 2 2617 2618 2619 2620 + 84 108 2 2618 2619 2620 2621 + 86 108 2 2619 2620 2621 2622 + 88 108 2 2620 2621 2622 2623 + 90 108 2 2621 2622 2623 2624 + 92 108 2 2622 2623 2624 2625 + 94 108 2 2623 2624 2625 2626 + 96 108 2 2624 2625 2626 2627 + 98 108 2 2625 2626 2627 2628 + 100 108 2 2626 2627 2628 2629 + 102 108 2 2627 2628 2629 2578 + 0 110 2 2680 2681 2630 2631 + 2 110 2 2681 2630 2631 2632 + 4 110 2 2630 2631 2632 2633 + 6 110 2 2631 2632 2633 2634 + 8 110 2 2632 2633 2634 2635 + 10 110 2 2633 2634 2635 2636 + 12 110 2 2634 2635 2636 2637 + 14 110 2 2635 2636 2637 2638 + 16 110 2 2636 2637 2638 2639 + 18 110 2 2637 2638 2639 2640 + 20 110 2 2638 2639 2640 2641 + 22 110 2 2639 2640 2641 2642 + 24 110 2 2640 2641 2642 2643 + 26 110 2 2641 2642 2643 2644 + 28 110 2 2642 2643 2644 2645 + 30 110 2 2643 2644 2645 2646 + 32 110 2 2644 2645 2646 2647 + 34 110 2 2645 2646 2647 2648 + 36 110 2 2646 2647 2648 2649 + 38 110 2 2647 2648 2649 2650 + 40 110 2 2648 2649 2650 2651 + 42 110 2 2649 2650 2651 2652 + 44 110 2 2650 2651 2652 2653 + 46 110 2 2651 2652 2653 2654 + 48 110 2 2652 2653 2654 2655 + 50 110 2 2653 2654 2655 2656 + 52 110 2 2654 2655 2656 2657 + 54 110 2 2655 2656 2657 2658 + 56 110 2 2656 2657 2658 2659 + 58 110 2 2657 2658 2659 2660 + 60 110 2 2658 2659 2660 2661 + 62 110 2 2659 2660 2661 2662 + 64 110 2 2660 2661 2662 2663 + 66 110 2 2661 2662 2663 2664 + 68 110 2 2662 2663 2664 2665 + 70 110 2 2663 2664 2665 2666 + 72 110 2 2664 2665 2666 2667 + 74 110 2 2665 2666 2667 2668 + 76 110 2 2666 2667 2668 2669 + 78 110 2 2667 2668 2669 2670 + 80 110 2 2668 2669 2670 2671 + 82 110 2 2669 2670 2671 2672 + 84 110 2 2670 2671 2672 2673 + 86 110 2 2671 2672 2673 2674 + 88 110 2 2672 2673 2674 2675 + 90 110 2 2673 2674 2675 2676 + 92 110 2 2674 2675 2676 2677 + 94 110 2 2675 2676 2677 2678 + 96 110 2 2676 2677 2678 2679 + 98 110 2 2677 2678 2679 2680 + 100 110 2 2678 2679 2680 2681 + 102 110 2 2679 2680 2681 2630 + 0 112 2 2732 2733 2682 2683 + 2 112 2 2733 2682 2683 2684 + 4 112 2 2682 2683 2684 2685 + 6 112 2 2683 2684 2685 2686 + 8 112 2 2684 2685 2686 2687 + 10 112 2 2685 2686 2687 2688 + 12 112 2 2686 2687 2688 2689 + 14 112 2 2687 2688 2689 2690 + 16 112 2 2688 2689 2690 2691 + 18 112 2 2689 2690 2691 2692 + 20 112 2 2690 2691 2692 2693 + 22 112 2 2691 2692 2693 2694 + 24 112 2 2692 2693 2694 2695 + 26 112 2 2693 2694 2695 2696 + 28 112 2 2694 2695 2696 2697 + 30 112 2 2695 2696 2697 2698 + 32 112 2 2696 2697 2698 2699 + 34 112 2 2697 2698 2699 2700 + 36 112 2 2698 2699 2700 2701 + 38 112 2 2699 2700 2701 2702 + 40 112 2 2700 2701 2702 2703 + 42 112 2 2701 2702 2703 2704 + 44 112 2 2702 2703 2704 2705 + 46 112 2 2703 2704 2705 2706 + 48 112 2 2704 2705 2706 2707 + 50 112 2 2705 2706 2707 2708 + 52 112 2 2706 2707 2708 2709 + 54 112 2 2707 2708 2709 2710 + 56 112 2 2708 2709 2710 2711 + 58 112 2 2709 2710 2711 2712 + 60 112 2 2710 2711 2712 2713 + 62 112 2 2711 2712 2713 2714 + 64 112 2 2712 2713 2714 2715 + 66 112 2 2713 2714 2715 2716 + 68 112 2 2714 2715 2716 2717 + 70 112 2 2715 2716 2717 2718 + 72 112 2 2716 2717 2718 2719 + 74 112 2 2717 2718 2719 2720 + 76 112 2 2718 2719 2720 2721 + 78 112 2 2719 2720 2721 2722 + 80 112 2 2720 2721 2722 2723 + 82 112 2 2721 2722 2723 2724 + 84 112 2 2722 2723 2724 2725 + 86 112 2 2723 2724 2725 2726 + 88 112 2 2724 2725 2726 2727 + 90 112 2 2725 2726 2727 2728 + 92 112 2 2726 2727 2728 2729 + 94 112 2 2727 2728 2729 2730 + 96 112 2 2728 2729 2730 2731 + 98 112 2 2729 2730 2731 2732 + 100 112 2 2730 2731 2732 2733 + 102 112 2 2731 2732 2733 2682 + 0 114 2 2784 2785 2734 2735 + 2 114 2 2785 2734 2735 2736 + 4 114 2 2734 2735 2736 2737 + 6 114 2 2735 2736 2737 2738 + 8 114 2 2736 2737 2738 2739 + 10 114 2 2737 2738 2739 2740 + 12 114 2 2738 2739 2740 2741 + 14 114 2 2739 2740 2741 2742 + 16 114 2 2740 2741 2742 2743 + 18 114 2 2741 2742 2743 2744 + 20 114 2 2742 2743 2744 2745 + 22 114 2 2743 2744 2745 2746 + 24 114 2 2744 2745 2746 2747 + 26 114 2 2745 2746 2747 2748 + 28 114 2 2746 2747 2748 2749 + 30 114 2 2747 2748 2749 2750 + 32 114 2 2748 2749 2750 2751 + 34 114 2 2749 2750 2751 2752 + 36 114 2 2750 2751 2752 2753 + 38 114 2 2751 2752 2753 2754 + 40 114 2 2752 2753 2754 2755 + 42 114 2 2753 2754 2755 2756 + 44 114 2 2754 2755 2756 2757 + 46 114 2 2755 2756 2757 2758 + 48 114 2 2756 2757 2758 2759 + 50 114 2 2757 2758 2759 2760 + 52 114 2 2758 2759 2760 2761 + 54 114 2 2759 2760 2761 2762 + 56 114 2 2760 2761 2762 2763 + 58 114 2 2761 2762 2763 2764 + 60 114 2 2762 2763 2764 2765 + 62 114 2 2763 2764 2765 2766 + 64 114 2 2764 2765 2766 2767 + 66 114 2 2765 2766 2767 2768 + 68 114 2 2766 2767 2768 2769 + 70 114 2 2767 2768 2769 2770 + 72 114 2 2768 2769 2770 2771 + 74 114 2 2769 2770 2771 2772 + 76 114 2 2770 2771 2772 2773 + 78 114 2 2771 2772 2773 2774 + 80 114 2 2772 2773 2774 2775 + 82 114 2 2773 2774 2775 2776 + 84 114 2 2774 2775 2776 2777 + 86 114 2 2775 2776 2777 2778 + 88 114 2 2776 2777 2778 2779 + 90 114 2 2777 2778 2779 2780 + 92 114 2 2778 2779 2780 2781 + 94 114 2 2779 2780 2781 2782 + 96 114 2 2780 2781 2782 2783 + 98 114 2 2781 2782 2783 2784 + 100 114 2 2782 2783 2784 2785 + 102 114 2 2783 2784 2785 2734 + 0 116 2 2836 2837 2786 2787 + 2 116 2 2837 2786 2787 2788 + 4 116 2 2786 2787 2788 2789 + 6 116 2 2787 2788 2789 2790 + 8 116 2 2788 2789 2790 2791 + 10 116 2 2789 2790 2791 2792 + 12 116 2 2790 2791 2792 2793 + 14 116 2 2791 2792 2793 2794 + 16 116 2 2792 2793 2794 2795 + 18 116 2 2793 2794 2795 2796 + 20 116 2 2794 2795 2796 2797 + 22 116 2 2795 2796 2797 2798 + 24 116 2 2796 2797 2798 2799 + 26 116 2 2797 2798 2799 2800 + 28 116 2 2798 2799 2800 2801 + 30 116 2 2799 2800 2801 2802 + 32 116 2 2800 2801 2802 2803 + 34 116 2 2801 2802 2803 2804 + 36 116 2 2802 2803 2804 2805 + 38 116 2 2803 2804 2805 2806 + 40 116 2 2804 2805 2806 2807 + 42 116 2 2805 2806 2807 2808 + 44 116 2 2806 2807 2808 2809 + 46 116 2 2807 2808 2809 2810 + 48 116 2 2808 2809 2810 2811 + 50 116 2 2809 2810 2811 2812 + 52 116 2 2810 2811 2812 2813 + 54 116 2 2811 2812 2813 2814 + 56 116 2 2812 2813 2814 2815 + 58 116 2 2813 2814 2815 2816 + 60 116 2 2814 2815 2816 2817 + 62 116 2 2815 2816 2817 2818 + 64 116 2 2816 2817 2818 2819 + 66 116 2 2817 2818 2819 2820 + 68 116 2 2818 2819 2820 2821 + 70 116 2 2819 2820 2821 2822 + 72 116 2 2820 2821 2822 2823 + 74 116 2 2821 2822 2823 2824 + 76 116 2 2822 2823 2824 2825 + 78 116 2 2823 2824 2825 2826 + 80 116 2 2824 2825 2826 2827 + 82 116 2 2825 2826 2827 2828 + 84 116 2 2826 2827 2828 2829 + 86 116 2 2827 2828 2829 2830 + 88 116 2 2828 2829 2830 2831 + 90 116 2 2829 2830 2831 2832 + 92 116 2 2830 2831 2832 2833 + 94 116 2 2831 2832 2833 2834 + 96 116 2 2832 2833 2834 2835 + 98 116 2 2833 2834 2835 2836 + 100 116 2 2834 2835 2836 2837 + 102 116 2 2835 2836 2837 2786 + 0 118 2 2888 2889 2838 2839 + 2 118 2 2889 2838 2839 2840 + 4 118 2 2838 2839 2840 2841 + 6 118 2 2839 2840 2841 2842 + 8 118 2 2840 2841 2842 2843 + 10 118 2 2841 2842 2843 2844 + 12 118 2 2842 2843 2844 2845 + 14 118 2 2843 2844 2845 2846 + 16 118 2 2844 2845 2846 2847 + 18 118 2 2845 2846 2847 2848 + 20 118 2 2846 2847 2848 2849 + 22 118 2 2847 2848 2849 2850 + 24 118 2 2848 2849 2850 2851 + 26 118 2 2849 2850 2851 2852 + 28 118 2 2850 2851 2852 2853 + 30 118 2 2851 2852 2853 2854 + 32 118 2 2852 2853 2854 2855 + 34 118 2 2853 2854 2855 2856 + 36 118 2 2854 2855 2856 2857 + 38 118 2 2855 2856 2857 2858 + 40 118 2 2856 2857 2858 2859 + 42 118 2 2857 2858 2859 2860 + 44 118 2 2858 2859 2860 2861 + 46 118 2 2859 2860 2861 2862 + 48 118 2 2860 2861 2862 2863 + 50 118 2 2861 2862 2863 2864 + 52 118 2 2862 2863 2864 2865 + 54 118 2 2863 2864 2865 2866 + 56 118 2 2864 2865 2866 2867 + 58 118 2 2865 2866 2867 2868 + 60 118 2 2866 2867 2868 2869 + 62 118 2 2867 2868 2869 2870 + 64 118 2 2868 2869 2870 2871 + 66 118 2 2869 2870 2871 2872 + 68 118 2 2870 2871 2872 2873 + 70 118 2 2871 2872 2873 2874 + 72 118 2 2872 2873 2874 2875 + 74 118 2 2873 2874 2875 2876 + 76 118 2 2874 2875 2876 2877 + 78 118 2 2875 2876 2877 2878 + 80 118 2 2876 2877 2878 2879 + 82 118 2 2877 2878 2879 2880 + 84 118 2 2878 2879 2880 2881 + 86 118 2 2879 2880 2881 2882 + 88 118 2 2880 2881 2882 2883 + 90 118 2 2881 2882 2883 2884 + 92 118 2 2882 2883 2884 2885 + 94 118 2 2883 2884 2885 2886 + 96 118 2 2884 2885 2886 2887 + 98 118 2 2885 2886 2887 2888 + 100 118 2 2886 2887 2888 2889 + 102 118 2 2887 2888 2889 2838 diff --git a/regtests/ww3_tp2.14/input/BrestJSides.dat b/regtests/ww3_tp2.14/input/BrestJSides.dat new file mode 100644 index 000000000..809d47fda --- /dev/null +++ b/regtests/ww3_tp2.14/input/BrestJSides.dat @@ -0,0 +1,3072 @@ +3071 309 2762 0 0 + 92 12 1 440 492 1 0 1 + 93 12 1 440 492 2 0 1 + 94 12 1 441 493 3 0 1 + 95 12 1 441 493 4 0 1 + 96 12 1 442 494 5 0 1 + 99 12 1 443 495 6 0 1 + 100 12 1 444 496 7 0 1 + 101 12 1 444 496 8 0 1 + 102 12 1 445 497 9 0 1 + 103 12 1 445 497 10 0 1 + 92 13 1 492 1 0 0 1 + 93 13 1 492 2 0 0 1 + 94 13 1 493 3 0 0 1 + 95 13 1 493 4 0 0 1 + 96 13 1 494 5 0 0 1 + 99 13 1 495 6 0 0 1 + 100 13 1 496 7 0 0 1 + 101 13 1 496 8 0 0 1 + 102 13 1 497 9 0 0 1 + 103 13 1 497 10 0 0 1 + 92 16 1 0 0 11 12 1 + 92 17 1 0 11 12 13 1 + 92 18 1 11 12 13 14 1 + 92 19 1 12 13 14 15 1 + 92 20 1 13 14 15 0 1 + 92 21 1 14 15 0 0 1 + 90 22 1 681 727 16 17 1 + 91 22 1 681 727 18 0 1 + 90 23 1 727 16 17 19 1 + 91 23 1 727 18 0 0 1 + 90 24 1 16 17 19 0 1 + 90 25 1 17 19 0 0 1 + 88 26 1 772 817 20 0 1 + 88 27 1 817 20 0 0 1 + 86 28 1 816 861 21 0 1 + 86 29 1 861 21 0 0 1 + 74 30 1 855 899 22 23 1 + 75 30 1 855 899 24 0 1 + 76 30 1 856 900 25 0 1 + 77 30 1 856 900 26 0 1 + 78 30 1 857 901 27 0 1 + 79 30 1 857 901 28 0 1 + 74 31 1 899 22 23 0 1 + 75 31 1 899 24 0 0 1 + 76 31 1 900 25 0 0 1 + 77 31 1 900 26 0 0 1 + 78 31 1 901 27 0 0 1 + 79 31 1 901 28 0 0 1 + 62 32 1 893 936 29 0 1 + 63 32 1 893 936 30 0 1 + 69 32 1 896 939 33 34 1 + 72 32 1 898 941 35 36 1 + 74 32 1 22 23 0 0 1 + 62 33 1 936 29 0 0 1 + 63 33 1 936 30 0 0 1 + 67 33 1 0 0 31 1007 1 + 68 33 1 0 0 32 1008 1 + 69 33 1 939 33 34 1008 1 + 72 33 1 941 35 36 1010 1 + 73 33 1 0 0 37 1010 1 + 67 34 1 0 31 1007 1044 1 + 68 34 1 0 32 1008 1045 1 + 69 34 1 33 34 1008 1045 1 + 72 34 1 35 36 1010 1047 1 + 73 34 1 0 37 1010 1047 1 + 74 35 1 0 0 38 1048 1 + 75 35 1 0 0 39 1048 1 + 76 35 1 0 0 40 1049 1 + 77 35 1 0 0 41 1049 1 + 78 35 1 0 0 42 1050 1 + 79 35 1 0 0 43 1050 1 + 74 36 1 0 38 1048 1090 1 + 75 36 1 0 39 1048 1090 1 + 76 36 1 0 40 1049 1091 1 + 77 36 1 0 41 1049 1091 1 + 78 36 1 0 42 1050 1092 1 + 79 36 1 0 43 1050 1092 1 + 84 37 1 0 0 44 1095 1 + 85 37 1 0 0 45 1095 1 + 86 37 1 0 0 46 1096 1 + 95 37 1 0 0 47 1100 1 + 84 38 1 0 44 1095 1143 1 + 85 38 1 0 45 1095 1143 1 + 86 38 1 0 46 1096 1144 1 + 95 38 1 0 47 1100 1148 1 + 96 38 1 0 0 48 49 1 + 96 39 1 0 48 49 50 1 + 96 40 1 48 49 50 51 1 + 96 41 1 49 50 51 0 1 + 82 42 1 1094 1142 52 0 1 + 83 42 1 1094 1142 53 0 1 + 96 42 1 50 51 0 0 1 + 82 43 1 1142 52 0 0 1 + 83 43 1 1142 53 0 0 1 + 82 44 1 0 0 54 55 1 + 85 44 1 1143 1190 56 57 1 + 94 44 1 1148 1195 58 59 1 + 95 44 1 1148 1195 60 0 1 + 82 45 1 0 54 55 61 1 + 85 45 1 1190 56 57 0 1 + 94 45 1 1195 58 59 0 1 + 95 45 1 1195 60 0 0 1 + 82 46 1 54 55 61 0 1 + 85 46 1 56 57 0 0 1 + 90 46 1 1193 1239 62 0 1 + 91 46 1 1193 1239 63 0 1 + 94 46 1 58 59 0 0 1 + 82 47 1 55 61 0 0 1 + 90 47 1 1239 62 0 0 1 + 91 47 1 1239 63 0 0 1 + 80 48 1 1236 1281 64 65 1 + 81 48 1 1236 1281 66 0 1 + 80 49 1 1281 64 65 0 1 + 81 49 1 1281 66 0 0 1 + 80 50 1 64 65 0 0 1 + 92 52 1 0 0 73 74 1 + 83 53 1 0 0 67 84 1 + 84 53 1 0 0 68 85 1 + 86 53 1 0 0 69 1444 1 + 87 53 1 0 0 70 1444 1 + 88 53 1 0 0 71 88 1 + 89 53 1 0 0 72 89 1 + 92 53 1 0 73 74 1445 1 + 93 53 1 0 0 75 1445 1 + 70 54 1 1359 1399 76 77 1 + 71 54 1 1359 1399 78 0 1 + 72 54 1 1360 1400 79 0 1 + 73 54 1 1360 1400 80 81 1 + 80 54 1 -1 1404 82 83 1 + 83 54 1 0 67 84 0 1 + 84 54 1 0 68 85 86 1 + 86 54 1 0 69 1444 1481 1 + 87 54 1 0 70 1444 1481 1 + 88 54 1 0 71 88 0 1 + 89 54 1 0 72 89 90 1 + 90 54 1 -1 1405 91 0 1 + 91 54 1 -1 1405 92 0 1 + 92 54 1 73 74 1445 0 1 + 93 54 1 0 75 1445 111 1 + 70 55 1 1399 76 77 96 1 + 71 55 1 1399 78 0 0 1 + 72 55 1 1400 79 0 0 1 + 73 55 1 1400 80 81 0 1 + 80 55 1 1404 82 83 105 1 + 83 55 1 67 84 0 0 1 + 84 55 1 68 85 86 1480 1 + 85 55 1 0 0 87 1480 1 + 88 55 1 71 88 0 0 1 + 89 55 1 72 89 90 0 1 + 90 55 1 1405 91 0 0 1 + 91 55 1 1405 92 0 0 1 + 94 55 1 0 0 93 112 1 + 66 56 1 1397 1439 94 0 1 + 67 56 1 1397 1439 95 0 1 + 70 56 1 76 77 96 97 1 + 71 56 1 0 0 98 0 1 + 73 56 1 80 81 0 0 1 + 75 56 1 1401 1441 99 100 1 + 76 56 1 1402 1442 101 102 1 + 77 56 1 1402 1442 103 0 1 + 78 56 1 1403 1443 104 0 1 + 80 56 1 82 83 105 0 1 + 81 56 1 0 0 106 0 1 + 82 56 1 0 0 107 108 1 + 84 56 1 85 86 1480 0 1 + 85 56 1 0 87 1480 124 1 + 89 56 1 89 90 0 0 1 + 93 56 1 75 1445 111 0 1 + 94 56 1 0 93 112 0 1 + 66 57 1 1439 94 0 0 1 + 67 57 1 1439 95 0 0 1 + 70 57 1 77 96 97 0 1 + 71 57 1 0 98 0 0 1 + 75 57 1 1441 99 100 0 1 + 76 57 1 1442 101 102 0 1 + 77 57 1 1442 103 0 0 1 + 78 57 1 1443 104 0 0 1 + 80 57 1 83 105 0 0 1 + 81 57 1 0 106 0 0 1 + 82 57 1 0 107 108 0 1 + 83 57 1 0 0 109 0 1 + 88 57 1 0 0 110 128 1 + 93 57 1 1445 111 0 0 1 + 94 57 1 93 112 0 0 1 + 62 58 1 1437 1477 113 0 1 + 63 58 1 1437 1477 114 115 1 + 64 58 1 1438 1478 116 0 1 + 65 58 1 1438 1478 117 118 1 + 66 58 1 0 0 119 120 1 + 70 58 1 96 97 0 0 1 + 75 58 1 99 100 0 0 1 + 76 58 1 101 102 0 0 1 + 82 58 1 107 108 0 0 1 + 83 58 1 0 109 0 0 1 + 85 58 1 87 1480 124 0 1 + 86 58 1 1444 1481 125 0 1 + 87 58 1 1444 1481 126 127 1 + 88 58 1 0 110 128 129 1 + 62 59 1 1477 113 0 0 1 + 63 59 1 1477 114 115 1544 1 + 64 59 1 1478 116 0 0 1 + 65 59 1 1478 117 118 134 1 + 66 59 1 0 119 120 1545 1 + 67 59 1 0 0 121 1545 1 + 70 59 1 0 0 122 136 1 + 71 59 1 0 0 123 0 1 + 85 59 1 1480 124 0 0 1 + 86 59 1 1481 125 0 0 1 + 87 59 1 1481 126 127 0 1 + 88 59 1 110 128 129 0 1 + 89 59 1 0 0 130 138 1 + 60 60 1 1476 1512 131 132 1 + 63 60 1 114 115 1544 1577 1 + 65 60 1 117 118 134 135 1 + 66 60 1 119 120 1545 1579 1 + 67 60 1 0 121 1545 1579 1 + 70 60 1 0 122 136 137 1 + 71 60 1 0 123 0 0 1 + 87 60 1 126 127 0 0 1 + 88 60 1 128 129 0 0 1 + 89 60 1 0 130 138 0 1 + 90 60 1 0 0 139 0 1 + 60 61 1 1512 131 132 1576 1 + 64 61 1 0 0 133 1578 1 + 65 61 1 118 134 135 1578 1 + 70 61 1 122 136 137 0 1 + 89 61 1 130 138 0 0 1 + 90 61 1 0 139 0 0 1 + 58 62 1 1511 1543 140 0 1 + 59 62 1 1511 1543 141 142 1 + 60 62 1 131 132 1576 1607 1 + 64 62 1 0 133 1578 1609 1 + 65 62 1 134 135 1578 1609 1 + 70 62 1 136 137 0 0 1 + 58 63 1 1543 140 0 0 1 + 59 63 1 1543 141 142 1606 1 + 50 64 1 1539 1572 143 144 1 + 51 64 1 1539 1572 145 0 1 + 52 64 1 1540 1573 146 0 1 + 55 64 1 1541 1574 147 0 1 + 56 64 1 1542 1575 148 0 1 + 57 64 1 1542 1575 149 150 1 + 59 64 1 141 142 1606 1638 1 + 50 65 1 1572 143 144 1637 1 + 51 65 1 1572 145 0 0 1 + 52 65 1 1573 146 0 0 1 + 55 65 1 1574 147 0 0 1 + 56 65 1 1575 148 0 0 1 + 57 65 1 1575 149 150 0 1 + 70 65 1 0 0 151 155 1 + 50 66 1 143 144 1637 1669 1 + 57 66 1 149 150 0 0 1 + 70 66 1 0 151 155 156 1 + 52 67 1 0 0 152 1670 1 + 53 67 1 0 0 153 1670 1 + 57 67 1 0 0 154 1672 1 + 70 67 1 151 155 156 157 1 + 52 68 1 0 152 1670 1705 1 + 53 68 1 0 153 1670 1705 1 + 57 68 1 0 154 1672 1707 1 + 70 68 1 155 156 157 158 1 + 70 69 1 156 157 158 159 1 + 70 70 1 157 158 159 160 1 + 70 71 1 158 159 160 1749 1 + 70 72 1 159 160 1749 1785 1 + 72 72 1 0 0 161 162 1 + 72 73 1 0 161 162 1786 1 + 72 74 1 161 162 1786 166 1 + 74 74 1 0 0 163 164 1 + 74 75 1 0 163 164 1823 1 + 76 75 1 0 0 165 1824 1 + 72 76 1 162 1786 166 167 1 + 74 76 1 163 164 1823 1863 1 + 76 76 1 0 165 1824 1864 1 + 72 77 1 1786 166 167 1862 1 + 73 77 1 0 0 168 1862 1 + 72 78 1 166 167 1862 1902 1 + 73 78 1 0 168 1862 1902 1 + 80 78 1 0 0 169 170 1 + 80 79 1 0 169 170 1906 1 + 81 79 1 0 0 171 1906 1 + 80 80 1 169 170 1906 1949 1 + 81 80 1 0 171 1906 1949 1 + 82 80 1 0 0 172 173 1 + 82 81 1 0 172 173 1950 1 + 83 81 1 0 0 174 1950 1 + 88 81 1 0 0 175 1953 1 + 82 82 1 172 173 1950 1995 1 + 83 82 1 0 174 1950 1995 1 + 88 82 1 0 175 1953 1998 1 + 99 82 1 0 0 183 184 1 + 90 83 1 0 0 176 1999 1 + 91 83 1 0 0 177 1999 1 + 92 83 1 0 0 178 2000 1 + 95 83 1 0 0 179 2001 1 + 96 83 1 0 0 180 2002 1 + 97 83 1 0 0 181 2002 1 + 98 83 1 0 0 182 2003 1 + 99 83 1 0 183 184 2003 1 + 100 83 1 0 0 185 2004 1 + 90 84 1 0 176 1999 2051 1 + 91 84 1 0 177 1999 2051 1 + 92 84 1 0 178 2000 2052 1 + 95 84 1 0 179 2001 2053 1 + 96 84 1 0 180 2002 2054 1 + 97 84 1 0 181 2002 2054 1 + 98 84 1 0 182 2003 2055 1 + 99 84 1 183 184 2003 2055 1 + 100 84 1 0 185 2004 2056 1 + 0 0 2 -1 -1 186 238 2 + 2 0 2 -1 -1 187 239 2 + 4 0 2 -1 -1 188 240 2 + 6 0 2 -1 -1 189 241 2 + 8 0 2 -1 -1 190 242 2 + 10 0 2 -1 -1 191 243 2 + 12 0 2 -1 -1 192 244 2 + 14 0 2 -1 -1 193 245 2 + 16 0 2 -1 -1 194 246 2 + 18 0 2 -1 -1 195 247 2 + 20 0 2 -1 -1 196 248 2 + 22 0 2 -1 -1 197 249 2 + 24 0 2 -1 -1 198 250 2 + 26 0 2 -1 -1 199 251 2 + 28 0 2 -1 -1 200 252 2 + 30 0 2 -1 -1 201 253 2 + 32 0 2 -1 -1 202 254 2 + 34 0 2 -1 -1 203 255 2 + 36 0 2 -1 -1 204 256 2 + 38 0 2 -1 -1 205 257 2 + 40 0 2 -1 -1 206 258 2 + 42 0 2 -1 -1 207 259 2 + 44 0 2 -1 -1 208 260 2 + 46 0 2 -1 -1 209 261 2 + 48 0 2 -1 -1 210 262 2 + 50 0 2 -1 -1 211 263 2 + 52 0 2 -1 -1 212 264 2 + 54 0 2 -1 -1 213 265 2 + 56 0 2 -1 -1 214 266 2 + 58 0 2 -1 -1 215 267 2 + 60 0 2 -1 -1 216 268 2 + 62 0 2 -1 -1 217 269 2 + 64 0 2 -1 -1 218 270 2 + 66 0 2 -1 -1 219 271 2 + 68 0 2 -1 -1 220 272 2 + 70 0 2 -1 -1 221 273 2 + 72 0 2 -1 -1 222 274 2 + 74 0 2 -1 -1 223 275 2 + 76 0 2 -1 -1 224 276 2 + 78 0 2 -1 -1 225 277 2 + 80 0 2 -1 -1 226 278 2 + 82 0 2 -1 -1 227 279 2 + 84 0 2 -1 -1 228 280 2 + 86 0 2 -1 -1 229 281 2 + 88 0 2 -1 -1 230 282 2 + 90 0 2 -1 -1 231 283 2 + 92 0 2 -1 -1 232 284 2 + 94 0 2 -1 -1 233 285 2 + 96 0 2 -1 -1 234 286 2 + 98 0 2 -1 -1 235 287 2 + 100 0 2 -1 -1 236 288 2 + 102 0 2 -1 -1 237 289 2 + 0 2 2 -1 186 238 290 2 + 2 2 2 -1 187 239 291 2 + 4 2 2 -1 188 240 292 2 + 6 2 2 -1 189 241 293 2 + 8 2 2 -1 190 242 294 2 + 10 2 2 -1 191 243 295 2 + 12 2 2 -1 192 244 296 2 + 14 2 2 -1 193 245 297 2 + 16 2 2 -1 194 246 298 2 + 18 2 2 -1 195 247 299 2 + 20 2 2 -1 196 248 300 2 + 22 2 2 -1 197 249 301 2 + 24 2 2 -1 198 250 302 2 + 26 2 2 -1 199 251 303 2 + 28 2 2 -1 200 252 304 2 + 30 2 2 -1 201 253 305 2 + 32 2 2 -1 202 254 306 2 + 34 2 2 -1 203 255 307 2 + 36 2 2 -1 204 256 308 2 + 38 2 2 -1 205 257 309 2 + 40 2 2 -1 206 258 310 2 + 42 2 2 -1 207 259 311 2 + 44 2 2 -1 208 260 312 2 + 46 2 2 -1 209 261 313 2 + 48 2 2 -1 210 262 314 2 + 50 2 2 -1 211 263 315 2 + 52 2 2 -1 212 264 316 2 + 54 2 2 -1 213 265 317 2 + 56 2 2 -1 214 266 318 2 + 58 2 2 -1 215 267 319 2 + 60 2 2 -1 216 268 320 2 + 62 2 2 -1 217 269 321 2 + 64 2 2 -1 218 270 322 2 + 66 2 2 -1 219 271 323 2 + 68 2 2 -1 220 272 324 2 + 70 2 2 -1 221 273 325 2 + 72 2 2 -1 222 274 326 2 + 74 2 2 -1 223 275 327 2 + 76 2 2 -1 224 276 328 2 + 78 2 2 -1 225 277 329 2 + 80 2 2 -1 226 278 330 2 + 82 2 2 -1 227 279 331 2 + 84 2 2 -1 228 280 332 2 + 86 2 2 -1 229 281 333 2 + 88 2 2 -1 230 282 334 2 + 90 2 2 -1 231 283 335 2 + 92 2 2 -1 232 284 336 2 + 94 2 2 -1 233 285 337 2 + 96 2 2 -1 234 286 338 2 + 98 2 2 -1 235 287 339 2 + 100 2 2 -1 236 288 340 2 + 102 2 2 -1 237 289 341 2 + 0 4 2 186 238 290 342 2 + 2 4 2 187 239 291 343 2 + 4 4 2 188 240 292 344 2 + 6 4 2 189 241 293 345 2 + 8 4 2 190 242 294 346 2 + 10 4 2 191 243 295 347 2 + 12 4 2 192 244 296 348 2 + 14 4 2 193 245 297 349 2 + 16 4 2 194 246 298 350 2 + 18 4 2 195 247 299 351 2 + 20 4 2 196 248 300 352 2 + 22 4 2 197 249 301 353 2 + 24 4 2 198 250 302 354 2 + 26 4 2 199 251 303 355 2 + 28 4 2 200 252 304 356 2 + 30 4 2 201 253 305 357 2 + 32 4 2 202 254 306 358 2 + 34 4 2 203 255 307 359 2 + 36 4 2 204 256 308 360 2 + 38 4 2 205 257 309 361 2 + 40 4 2 206 258 310 362 2 + 42 4 2 207 259 311 363 2 + 44 4 2 208 260 312 364 2 + 46 4 2 209 261 313 365 2 + 48 4 2 210 262 314 366 2 + 50 4 2 211 263 315 367 2 + 52 4 2 212 264 316 368 2 + 54 4 2 213 265 317 369 2 + 56 4 2 214 266 318 370 2 + 58 4 2 215 267 319 371 2 + 60 4 2 216 268 320 372 2 + 62 4 2 217 269 321 373 2 + 64 4 2 218 270 322 374 2 + 66 4 2 219 271 323 375 2 + 68 4 2 220 272 324 376 2 + 70 4 2 221 273 325 377 2 + 72 4 2 222 274 326 378 2 + 74 4 2 223 275 327 379 2 + 76 4 2 224 276 328 380 2 + 78 4 2 225 277 329 381 2 + 80 4 2 226 278 330 382 2 + 82 4 2 227 279 331 383 2 + 84 4 2 228 280 332 384 2 + 86 4 2 229 281 333 385 2 + 88 4 2 230 282 334 386 2 + 90 4 2 231 283 335 387 2 + 92 4 2 232 284 336 388 2 + 94 4 2 233 285 337 389 2 + 96 4 2 234 286 338 390 2 + 98 4 2 235 287 339 391 2 + 100 4 2 236 288 340 392 2 + 102 4 2 237 289 341 393 2 + 0 6 2 238 290 342 394 2 + 2 6 2 239 291 343 395 2 + 4 6 2 240 292 344 396 2 + 6 6 2 241 293 345 397 2 + 8 6 2 242 294 346 398 2 + 10 6 2 243 295 347 399 2 + 12 6 2 244 296 348 400 2 + 14 6 2 245 297 349 401 2 + 16 6 2 246 298 350 402 2 + 18 6 2 247 299 351 403 2 + 20 6 2 248 300 352 404 2 + 22 6 2 249 301 353 405 2 + 24 6 2 250 302 354 406 2 + 26 6 2 251 303 355 407 2 + 28 6 2 252 304 356 408 2 + 30 6 2 253 305 357 409 2 + 32 6 2 254 306 358 410 2 + 34 6 2 255 307 359 411 2 + 36 6 2 256 308 360 412 2 + 38 6 2 257 309 361 413 2 + 40 6 2 258 310 362 414 2 + 42 6 2 259 311 363 415 2 + 44 6 2 260 312 364 416 2 + 46 6 2 261 313 365 417 2 + 48 6 2 262 314 366 418 2 + 50 6 2 263 315 367 419 2 + 52 6 2 264 316 368 420 2 + 54 6 2 265 317 369 421 2 + 56 6 2 266 318 370 422 2 + 58 6 2 267 319 371 423 2 + 60 6 2 268 320 372 424 2 + 62 6 2 269 321 373 425 2 + 64 6 2 270 322 374 426 2 + 66 6 2 271 323 375 427 2 + 68 6 2 272 324 376 428 2 + 70 6 2 273 325 377 429 2 + 72 6 2 274 326 378 430 2 + 74 6 2 275 327 379 431 2 + 76 6 2 276 328 380 432 2 + 78 6 2 277 329 381 433 2 + 80 6 2 278 330 382 434 2 + 82 6 2 279 331 383 435 2 + 84 6 2 280 332 384 436 2 + 86 6 2 281 333 385 437 2 + 88 6 2 282 334 386 438 2 + 90 6 2 283 335 387 439 2 + 92 6 2 284 336 388 440 2 + 94 6 2 285 337 389 441 2 + 96 6 2 286 338 390 442 2 + 98 6 2 287 339 391 443 2 + 100 6 2 288 340 392 444 2 + 102 6 2 289 341 393 445 2 + 0 8 2 290 342 394 446 2 + 2 8 2 291 343 395 447 2 + 4 8 2 292 344 396 448 2 + 6 8 2 293 345 397 449 2 + 8 8 2 294 346 398 450 2 + 10 8 2 295 347 399 451 2 + 12 8 2 296 348 400 452 2 + 14 8 2 297 349 401 453 2 + 16 8 2 298 350 402 454 2 + 18 8 2 299 351 403 455 2 + 20 8 2 300 352 404 456 2 + 22 8 2 301 353 405 457 2 + 24 8 2 302 354 406 458 2 + 26 8 2 303 355 407 459 2 + 28 8 2 304 356 408 460 2 + 30 8 2 305 357 409 461 2 + 32 8 2 306 358 410 462 2 + 34 8 2 307 359 411 463 2 + 36 8 2 308 360 412 464 2 + 38 8 2 309 361 413 465 2 + 40 8 2 310 362 414 466 2 + 42 8 2 311 363 415 467 2 + 44 8 2 312 364 416 468 2 + 46 8 2 313 365 417 469 2 + 48 8 2 314 366 418 470 2 + 50 8 2 315 367 419 471 2 + 52 8 2 316 368 420 472 2 + 54 8 2 317 369 421 473 2 + 56 8 2 318 370 422 474 2 + 58 8 2 319 371 423 475 2 + 60 8 2 320 372 424 476 2 + 62 8 2 321 373 425 477 2 + 64 8 2 322 374 426 478 2 + 66 8 2 323 375 427 479 2 + 68 8 2 324 376 428 480 2 + 70 8 2 325 377 429 481 2 + 72 8 2 326 378 430 482 2 + 74 8 2 327 379 431 483 2 + 76 8 2 328 380 432 484 2 + 78 8 2 329 381 433 485 2 + 80 8 2 330 382 434 486 2 + 82 8 2 331 383 435 487 2 + 84 8 2 332 384 436 488 2 + 86 8 2 333 385 437 489 2 + 88 8 2 334 386 438 490 2 + 90 8 2 335 387 439 491 2 + 92 8 2 336 388 440 492 2 + 94 8 2 337 389 441 493 2 + 96 8 2 338 390 442 494 2 + 98 8 2 339 391 443 495 2 + 100 8 2 340 392 444 496 2 + 102 8 2 341 393 445 497 2 + 0 10 2 342 394 446 498 2 + 2 10 2 343 395 447 499 2 + 4 10 2 344 396 448 500 2 + 6 10 2 345 397 449 501 2 + 8 10 2 346 398 450 502 2 + 10 10 2 347 399 451 503 2 + 12 10 2 348 400 452 504 2 + 14 10 2 349 401 453 505 2 + 16 10 2 350 402 454 506 2 + 18 10 2 351 403 455 507 2 + 20 10 2 352 404 456 508 2 + 22 10 2 353 405 457 509 2 + 24 10 2 354 406 458 510 2 + 26 10 2 355 407 459 511 2 + 28 10 2 356 408 460 512 2 + 30 10 2 357 409 461 513 2 + 32 10 2 358 410 462 514 2 + 34 10 2 359 411 463 515 2 + 36 10 2 360 412 464 516 2 + 38 10 2 361 413 465 517 2 + 40 10 2 362 414 466 518 2 + 42 10 2 363 415 467 519 2 + 44 10 2 364 416 468 520 2 + 46 10 2 365 417 469 521 2 + 48 10 2 366 418 470 522 2 + 50 10 2 367 419 471 523 2 + 52 10 2 368 420 472 524 2 + 54 10 2 369 421 473 525 2 + 56 10 2 370 422 474 526 2 + 58 10 2 371 423 475 527 2 + 60 10 2 372 424 476 528 2 + 62 10 2 373 425 477 529 2 + 64 10 2 374 426 478 530 2 + 66 10 2 375 427 479 531 2 + 68 10 2 376 428 480 532 2 + 70 10 2 377 429 481 533 2 + 72 10 2 378 430 482 534 2 + 74 10 2 379 431 483 535 2 + 76 10 2 380 432 484 536 2 + 78 10 2 381 433 485 537 2 + 80 10 2 382 434 486 538 2 + 82 10 2 383 435 487 539 2 + 84 10 2 384 436 488 540 2 + 86 10 2 385 437 489 541 2 + 88 10 2 386 438 490 542 2 + 90 10 2 387 439 491 543 2 + 92 10 2 388 440 492 2 2 + 94 10 2 389 441 493 4 2 + 96 10 2 390 442 494 0 2 + 98 10 2 391 443 495 0 2 + 100 10 2 392 444 496 8 2 + 102 10 2 393 445 497 10 2 + 0 12 2 394 446 498 544 2 + 2 12 2 395 447 499 545 2 + 4 12 2 396 448 500 546 2 + 6 12 2 397 449 501 547 2 + 8 12 2 398 450 502 548 2 + 10 12 2 399 451 503 549 2 + 12 12 2 400 452 504 550 2 + 14 12 2 401 453 505 551 2 + 16 12 2 402 454 506 552 2 + 18 12 2 403 455 507 553 2 + 20 12 2 404 456 508 554 2 + 22 12 2 405 457 509 555 2 + 24 12 2 406 458 510 556 2 + 26 12 2 407 459 511 557 2 + 28 12 2 408 460 512 558 2 + 30 12 2 409 461 513 559 2 + 32 12 2 410 462 514 560 2 + 34 12 2 411 463 515 561 2 + 36 12 2 412 464 516 562 2 + 38 12 2 413 465 517 563 2 + 40 12 2 414 466 518 564 2 + 42 12 2 415 467 519 565 2 + 44 12 2 416 468 520 566 2 + 46 12 2 417 469 521 567 2 + 48 12 2 418 470 522 568 2 + 50 12 2 419 471 523 569 2 + 52 12 2 420 472 524 570 2 + 54 12 2 421 473 525 571 2 + 56 12 2 422 474 526 572 2 + 58 12 2 423 475 527 573 2 + 60 12 2 424 476 528 574 2 + 62 12 2 425 477 529 575 2 + 64 12 2 426 478 530 576 2 + 66 12 2 427 479 531 577 2 + 68 12 2 428 480 532 578 2 + 70 12 2 429 481 533 579 2 + 72 12 2 430 482 534 580 2 + 74 12 2 431 483 535 581 2 + 76 12 2 432 484 536 582 2 + 78 12 2 433 485 537 583 2 + 80 12 2 434 486 538 584 2 + 82 12 2 435 487 539 585 2 + 84 12 2 436 488 540 586 2 + 86 12 2 437 489 541 587 2 + 88 12 2 438 490 542 588 2 + 90 12 2 439 491 543 589 2 + 97 12 1 442 494 0 0 2 + 98 12 1 443 495 0 0 2 + 0 14 2 446 498 544 590 2 + 2 14 2 447 499 545 591 2 + 4 14 2 448 500 546 592 2 + 6 14 2 449 501 547 593 2 + 8 14 2 450 502 548 594 2 + 10 14 2 451 503 549 595 2 + 12 14 2 452 504 550 596 2 + 14 14 2 453 505 551 597 2 + 16 14 2 454 506 552 598 2 + 18 14 2 455 507 553 599 2 + 20 14 2 456 508 554 600 2 + 22 14 2 457 509 555 601 2 + 24 14 2 458 510 556 602 2 + 26 14 2 459 511 557 603 2 + 28 14 2 460 512 558 604 2 + 30 14 2 461 513 559 605 2 + 32 14 2 462 514 560 606 2 + 34 14 2 463 515 561 607 2 + 36 14 2 464 516 562 608 2 + 38 14 2 465 517 563 609 2 + 40 14 2 466 518 564 610 2 + 42 14 2 467 519 565 611 2 + 44 14 2 468 520 566 612 2 + 46 14 2 469 521 567 613 2 + 48 14 2 470 522 568 614 2 + 50 14 2 471 523 569 615 2 + 52 14 2 472 524 570 616 2 + 54 14 2 473 525 571 617 2 + 56 14 2 474 526 572 618 2 + 58 14 2 475 527 573 619 2 + 60 14 2 476 528 574 620 2 + 62 14 2 477 529 575 621 2 + 64 14 2 478 530 576 622 2 + 66 14 2 479 531 577 623 2 + 68 14 2 480 532 578 624 2 + 70 14 2 481 533 579 625 2 + 72 14 2 482 534 580 626 2 + 74 14 2 483 535 581 627 2 + 76 14 2 484 536 582 628 2 + 78 14 2 485 537 583 629 2 + 80 14 2 486 538 584 630 2 + 82 14 2 487 539 585 631 2 + 84 14 2 488 540 586 632 2 + 86 14 2 489 541 587 633 2 + 88 14 2 490 542 588 634 2 + 90 14 2 491 543 589 635 2 + 0 16 2 498 544 590 636 2 + 2 16 2 499 545 591 637 2 + 4 16 2 500 546 592 638 2 + 6 16 2 501 547 593 639 2 + 8 16 2 502 548 594 640 2 + 10 16 2 503 549 595 641 2 + 12 16 2 504 550 596 642 2 + 14 16 2 505 551 597 643 2 + 16 16 2 506 552 598 644 2 + 18 16 2 507 553 599 645 2 + 20 16 2 508 554 600 646 2 + 22 16 2 509 555 601 647 2 + 24 16 2 510 556 602 648 2 + 26 16 2 511 557 603 649 2 + 28 16 2 512 558 604 650 2 + 30 16 2 513 559 605 651 2 + 32 16 2 514 560 606 652 2 + 34 16 2 515 561 607 653 2 + 36 16 2 516 562 608 654 2 + 38 16 2 517 563 609 655 2 + 40 16 2 518 564 610 656 2 + 42 16 2 519 565 611 657 2 + 44 16 2 520 566 612 658 2 + 46 16 2 521 567 613 659 2 + 48 16 2 522 568 614 660 2 + 50 16 2 523 569 615 661 2 + 52 16 2 524 570 616 662 2 + 54 16 2 525 571 617 663 2 + 56 16 2 526 572 618 664 2 + 58 16 2 527 573 619 665 2 + 60 16 2 528 574 620 666 2 + 62 16 2 529 575 621 667 2 + 64 16 2 530 576 622 668 2 + 66 16 2 531 577 623 669 2 + 68 16 2 532 578 624 670 2 + 70 16 2 533 579 625 671 2 + 72 16 2 534 580 626 672 2 + 74 16 2 535 581 627 673 2 + 76 16 2 536 582 628 674 2 + 78 16 2 537 583 629 675 2 + 80 16 2 538 584 630 676 2 + 82 16 2 539 585 631 677 2 + 84 16 2 540 586 632 678 2 + 86 16 2 541 587 633 679 2 + 88 16 2 542 588 634 680 2 + 90 16 2 543 589 635 681 2 + 0 18 2 544 590 636 682 2 + 2 18 2 545 591 637 683 2 + 4 18 2 546 592 638 684 2 + 6 18 2 547 593 639 685 2 + 8 18 2 548 594 640 686 2 + 10 18 2 549 595 641 687 2 + 12 18 2 550 596 642 688 2 + 14 18 2 551 597 643 689 2 + 16 18 2 552 598 644 690 2 + 18 18 2 553 599 645 691 2 + 20 18 2 554 600 646 692 2 + 22 18 2 555 601 647 693 2 + 24 18 2 556 602 648 694 2 + 26 18 2 557 603 649 695 2 + 28 18 2 558 604 650 696 2 + 30 18 2 559 605 651 697 2 + 32 18 2 560 606 652 698 2 + 34 18 2 561 607 653 699 2 + 36 18 2 562 608 654 700 2 + 38 18 2 563 609 655 701 2 + 40 18 2 564 610 656 702 2 + 42 18 2 565 611 657 703 2 + 44 18 2 566 612 658 704 2 + 46 18 2 567 613 659 705 2 + 48 18 2 568 614 660 706 2 + 50 18 2 569 615 661 707 2 + 52 18 2 570 616 662 708 2 + 54 18 2 571 617 663 709 2 + 56 18 2 572 618 664 710 2 + 58 18 2 573 619 665 711 2 + 60 18 2 574 620 666 712 2 + 62 18 2 575 621 667 713 2 + 64 18 2 576 622 668 714 2 + 66 18 2 577 623 669 715 2 + 68 18 2 578 624 670 716 2 + 70 18 2 579 625 671 717 2 + 72 18 2 580 626 672 718 2 + 74 18 2 581 627 673 719 2 + 76 18 2 582 628 674 720 2 + 78 18 2 583 629 675 721 2 + 80 18 2 584 630 676 722 2 + 82 18 2 585 631 677 723 2 + 84 18 2 586 632 678 724 2 + 86 18 2 587 633 679 725 2 + 88 18 2 588 634 680 726 2 + 90 18 2 589 635 681 727 2 + 0 20 2 590 636 682 728 2 + 2 20 2 591 637 683 729 2 + 4 20 2 592 638 684 730 2 + 6 20 2 593 639 685 731 2 + 8 20 2 594 640 686 732 2 + 10 20 2 595 641 687 733 2 + 12 20 2 596 642 688 734 2 + 14 20 2 597 643 689 735 2 + 16 20 2 598 644 690 736 2 + 18 20 2 599 645 691 737 2 + 20 20 2 600 646 692 738 2 + 22 20 2 601 647 693 739 2 + 24 20 2 602 648 694 740 2 + 26 20 2 603 649 695 741 2 + 28 20 2 604 650 696 742 2 + 30 20 2 605 651 697 743 2 + 32 20 2 606 652 698 744 2 + 34 20 2 607 653 699 745 2 + 36 20 2 608 654 700 746 2 + 38 20 2 609 655 701 747 2 + 40 20 2 610 656 702 748 2 + 42 20 2 611 657 703 749 2 + 44 20 2 612 658 704 750 2 + 46 20 2 613 659 705 751 2 + 48 20 2 614 660 706 752 2 + 50 20 2 615 661 707 753 2 + 52 20 2 616 662 708 754 2 + 54 20 2 617 663 709 755 2 + 56 20 2 618 664 710 756 2 + 58 20 2 619 665 711 757 2 + 60 20 2 620 666 712 758 2 + 62 20 2 621 667 713 759 2 + 64 20 2 622 668 714 760 2 + 66 20 2 623 669 715 761 2 + 68 20 2 624 670 716 762 2 + 70 20 2 625 671 717 763 2 + 72 20 2 626 672 718 764 2 + 74 20 2 627 673 719 765 2 + 76 20 2 628 674 720 766 2 + 78 20 2 629 675 721 767 2 + 80 20 2 630 676 722 768 2 + 82 20 2 631 677 723 769 2 + 84 20 2 632 678 724 770 2 + 86 20 2 633 679 725 771 2 + 88 20 2 634 680 726 772 2 + 90 20 2 635 681 727 18 2 + 0 22 2 636 682 728 773 2 + 2 22 2 637 683 729 774 2 + 4 22 2 638 684 730 775 2 + 6 22 2 639 685 731 776 2 + 8 22 2 640 686 732 777 2 + 10 22 2 641 687 733 778 2 + 12 22 2 642 688 734 779 2 + 14 22 2 643 689 735 780 2 + 16 22 2 644 690 736 781 2 + 18 22 2 645 691 737 782 2 + 20 22 2 646 692 738 783 2 + 22 22 2 647 693 739 784 2 + 24 22 2 648 694 740 785 2 + 26 22 2 649 695 741 786 2 + 28 22 2 650 696 742 787 2 + 30 22 2 651 697 743 788 2 + 32 22 2 652 698 744 789 2 + 34 22 2 653 699 745 790 2 + 36 22 2 654 700 746 791 2 + 38 22 2 655 701 747 792 2 + 40 22 2 656 702 748 793 2 + 42 22 2 657 703 749 794 2 + 44 22 2 658 704 750 795 2 + 46 22 2 659 705 751 796 2 + 48 22 2 660 706 752 797 2 + 50 22 2 661 707 753 798 2 + 52 22 2 662 708 754 799 2 + 54 22 2 663 709 755 800 2 + 56 22 2 664 710 756 801 2 + 58 22 2 665 711 757 802 2 + 60 22 2 666 712 758 803 2 + 62 22 2 667 713 759 804 2 + 64 22 2 668 714 760 805 2 + 66 22 2 669 715 761 806 2 + 68 22 2 670 716 762 807 2 + 70 22 2 671 717 763 808 2 + 72 22 2 672 718 764 809 2 + 74 22 2 673 719 765 810 2 + 76 22 2 674 720 766 811 2 + 78 22 2 675 721 767 812 2 + 80 22 2 676 722 768 813 2 + 82 22 2 677 723 769 814 2 + 84 22 2 678 724 770 815 2 + 86 22 2 679 725 771 816 2 + 88 22 2 680 726 772 817 2 + 0 24 2 682 728 773 818 2 + 2 24 2 683 729 774 819 2 + 4 24 2 684 730 775 820 2 + 6 24 2 685 731 776 821 2 + 8 24 2 686 732 777 822 2 + 10 24 2 687 733 778 823 2 + 12 24 2 688 734 779 824 2 + 14 24 2 689 735 780 825 2 + 16 24 2 690 736 781 826 2 + 18 24 2 691 737 782 827 2 + 20 24 2 692 738 783 828 2 + 22 24 2 693 739 784 829 2 + 24 24 2 694 740 785 830 2 + 26 24 2 695 741 786 831 2 + 28 24 2 696 742 787 832 2 + 30 24 2 697 743 788 833 2 + 32 24 2 698 744 789 834 2 + 34 24 2 699 745 790 835 2 + 36 24 2 700 746 791 836 2 + 38 24 2 701 747 792 837 2 + 40 24 2 702 748 793 838 2 + 42 24 2 703 749 794 839 2 + 44 24 2 704 750 795 840 2 + 46 24 2 705 751 796 841 2 + 48 24 2 706 752 797 842 2 + 50 24 2 707 753 798 843 2 + 52 24 2 708 754 799 844 2 + 54 24 2 709 755 800 845 2 + 56 24 2 710 756 801 846 2 + 58 24 2 711 757 802 847 2 + 60 24 2 712 758 803 848 2 + 62 24 2 713 759 804 849 2 + 64 24 2 714 760 805 850 2 + 66 24 2 715 761 806 851 2 + 68 24 2 716 762 807 852 2 + 70 24 2 717 763 808 853 2 + 72 24 2 718 764 809 854 2 + 74 24 2 719 765 810 855 2 + 76 24 2 720 766 811 856 2 + 78 24 2 721 767 812 857 2 + 80 24 2 722 768 813 858 2 + 82 24 2 723 769 814 859 2 + 84 24 2 724 770 815 860 2 + 86 24 2 725 771 816 861 2 + 88 24 2 726 772 817 0 2 + 0 26 2 728 773 818 862 2 + 2 26 2 729 774 819 863 2 + 4 26 2 730 775 820 864 2 + 6 26 2 731 776 821 865 2 + 8 26 2 732 777 822 866 2 + 10 26 2 733 778 823 867 2 + 12 26 2 734 779 824 868 2 + 14 26 2 735 780 825 869 2 + 16 26 2 736 781 826 870 2 + 18 26 2 737 782 827 871 2 + 20 26 2 738 783 828 872 2 + 22 26 2 739 784 829 873 2 + 24 26 2 740 785 830 874 2 + 26 26 2 741 786 831 875 2 + 28 26 2 742 787 832 876 2 + 30 26 2 743 788 833 877 2 + 32 26 2 744 789 834 878 2 + 34 26 2 745 790 835 879 2 + 36 26 2 746 791 836 880 2 + 38 26 2 747 792 837 881 2 + 40 26 2 748 793 838 882 2 + 42 26 2 749 794 839 883 2 + 44 26 2 750 795 840 884 2 + 46 26 2 751 796 841 885 2 + 48 26 2 752 797 842 886 2 + 50 26 2 753 798 843 887 2 + 52 26 2 754 799 844 888 2 + 54 26 2 755 800 845 889 2 + 56 26 2 756 801 846 890 2 + 58 26 2 757 802 847 891 2 + 60 26 2 758 803 848 892 2 + 62 26 2 759 804 849 893 2 + 64 26 2 760 805 850 894 2 + 66 26 2 761 806 851 895 2 + 68 26 2 762 807 852 896 2 + 70 26 2 763 808 853 897 2 + 72 26 2 764 809 854 898 2 + 74 26 2 765 810 855 899 2 + 76 26 2 766 811 856 900 2 + 78 26 2 767 812 857 901 2 + 80 26 2 768 813 858 902 2 + 82 26 2 769 814 859 903 2 + 84 26 2 770 815 860 904 2 + 86 26 2 771 816 861 0 2 + 89 26 1 772 817 0 0 2 + 0 28 2 773 818 862 905 2 + 2 28 2 774 819 863 906 2 + 4 28 2 775 820 864 907 2 + 6 28 2 776 821 865 908 2 + 8 28 2 777 822 866 909 2 + 10 28 2 778 823 867 910 2 + 12 28 2 779 824 868 911 2 + 14 28 2 780 825 869 912 2 + 16 28 2 781 826 870 913 2 + 18 28 2 782 827 871 914 2 + 20 28 2 783 828 872 915 2 + 22 28 2 784 829 873 916 2 + 24 28 2 785 830 874 917 2 + 26 28 2 786 831 875 918 2 + 28 28 2 787 832 876 919 2 + 30 28 2 788 833 877 920 2 + 32 28 2 789 834 878 921 2 + 34 28 2 790 835 879 922 2 + 36 28 2 791 836 880 923 2 + 38 28 2 792 837 881 924 2 + 40 28 2 793 838 882 925 2 + 42 28 2 794 839 883 926 2 + 44 28 2 795 840 884 927 2 + 46 28 2 796 841 885 928 2 + 48 28 2 797 842 886 929 2 + 50 28 2 798 843 887 930 2 + 52 28 2 799 844 888 931 2 + 54 28 2 800 845 889 932 2 + 56 28 2 801 846 890 933 2 + 58 28 2 802 847 891 934 2 + 60 28 2 803 848 892 935 2 + 62 28 2 804 849 893 936 2 + 64 28 2 805 850 894 937 2 + 66 28 2 806 851 895 938 2 + 68 28 2 807 852 896 939 2 + 70 28 2 808 853 897 940 2 + 72 28 2 809 854 898 941 2 + 74 28 2 810 855 899 24 2 + 76 28 2 811 856 900 26 2 + 78 28 2 812 857 901 28 2 + 80 28 2 813 858 902 -1 2 + 82 28 2 814 859 903 -1 2 + 84 28 2 815 860 904 -1 2 + 87 28 1 816 861 0 0 2 + 0 30 2 818 862 905 942 2 + 2 30 2 819 863 906 943 2 + 4 30 2 820 864 907 944 2 + 6 30 2 821 865 908 945 2 + 8 30 2 822 866 909 946 2 + 10 30 2 823 867 910 947 2 + 12 30 2 824 868 911 948 2 + 14 30 2 825 869 912 949 2 + 16 30 2 826 870 913 950 2 + 18 30 2 827 871 914 951 2 + 20 30 2 828 872 915 952 2 + 22 30 2 829 873 916 953 2 + 24 30 2 830 874 917 954 2 + 26 30 2 831 875 918 955 2 + 28 30 2 832 876 919 956 2 + 30 30 2 833 877 920 957 2 + 32 30 2 834 878 921 958 2 + 34 30 2 835 879 922 959 2 + 36 30 2 836 880 923 960 2 + 38 30 2 837 881 924 961 2 + 40 30 2 838 882 925 962 2 + 42 30 2 839 883 926 963 2 + 44 30 2 840 884 927 964 2 + 46 30 2 841 885 928 965 2 + 48 30 2 842 886 929 966 2 + 50 30 2 843 887 930 967 2 + 52 30 2 844 888 931 968 2 + 54 30 2 845 889 932 969 2 + 56 30 2 846 890 933 970 2 + 58 30 2 847 891 934 971 2 + 60 30 2 848 892 935 972 2 + 62 30 2 849 893 936 30 2 + 64 30 2 850 894 937 -1 2 + 66 30 2 851 895 938 -1 2 + 68 30 2 852 896 939 0 2 + 70 30 2 853 897 940 973 2 + 72 30 2 854 898 941 0 2 + 80 30 2 858 902 -1 -1 2 + 82 30 2 859 903 -1 -1 2 + 84 30 2 860 904 -1 -1 2 + 0 32 2 862 905 942 974 2 + 2 32 2 863 906 943 975 2 + 4 32 2 864 907 944 976 2 + 6 32 2 865 908 945 977 2 + 8 32 2 866 909 946 978 2 + 10 32 2 867 910 947 979 2 + 12 32 2 868 911 948 980 2 + 14 32 2 869 912 949 981 2 + 16 32 2 870 913 950 982 2 + 18 32 2 871 914 951 983 2 + 20 32 2 872 915 952 984 2 + 22 32 2 873 916 953 985 2 + 24 32 2 874 917 954 986 2 + 26 32 2 875 918 955 987 2 + 28 32 2 876 919 956 988 2 + 30 32 2 877 920 957 989 2 + 32 32 2 878 921 958 990 2 + 34 32 2 879 922 959 991 2 + 36 32 2 880 923 960 992 2 + 38 32 2 881 924 961 993 2 + 40 32 2 882 925 962 994 2 + 42 32 2 883 926 963 995 2 + 44 32 2 884 927 964 996 2 + 46 32 2 885 928 965 997 2 + 48 32 2 886 929 966 998 2 + 50 32 2 887 930 967 999 2 + 52 32 2 888 931 968 1000 2 + 54 32 2 889 932 969 1001 2 + 56 32 2 890 933 970 1002 2 + 58 32 2 891 934 971 1003 2 + 60 32 2 892 935 972 1004 2 + 64 32 2 894 937 -1 -1 2 + 66 32 2 895 938 -1 -1 2 + 68 32 1 896 939 0 0 2 + 70 32 2 897 940 973 1009 2 + 73 32 1 898 941 0 0 2 + 0 34 2 905 942 974 1011 2 + 2 34 2 906 943 975 1012 2 + 4 34 2 907 944 976 1013 2 + 6 34 2 908 945 977 1014 2 + 8 34 2 909 946 978 1015 2 + 10 34 2 910 947 979 1016 2 + 12 34 2 911 948 980 1017 2 + 14 34 2 912 949 981 1018 2 + 16 34 2 913 950 982 1019 2 + 18 34 2 914 951 983 1020 2 + 20 34 2 915 952 984 1021 2 + 22 34 2 916 953 985 1022 2 + 24 34 2 917 954 986 1023 2 + 26 34 2 918 955 987 1024 2 + 28 34 2 919 956 988 1025 2 + 30 34 2 920 957 989 1026 2 + 32 34 2 921 958 990 1027 2 + 34 34 2 922 959 991 1028 2 + 36 34 2 923 960 992 1029 2 + 38 34 2 924 961 993 1030 2 + 40 34 2 925 962 994 1031 2 + 42 34 2 926 963 995 1032 2 + 44 34 2 927 964 996 1033 2 + 46 34 2 928 965 997 1034 2 + 48 34 2 929 966 998 1035 2 + 50 34 2 930 967 999 1036 2 + 52 34 2 931 968 1000 1037 2 + 54 34 2 932 969 1001 1038 2 + 56 34 2 933 970 1002 1039 2 + 58 34 2 934 971 1003 1040 2 + 60 34 2 935 972 1004 1041 2 + 62 34 2 -1 -1 1005 1042 2 + 64 34 2 -1 -1 1006 1043 2 + 66 34 1 0 0 1007 1044 2 + 70 34 2 940 973 1009 1046 2 + 0 36 2 942 974 1011 1053 2 + 2 36 2 943 975 1012 1054 2 + 4 36 2 944 976 1013 1055 2 + 6 36 2 945 977 1014 1056 2 + 8 36 2 946 978 1015 1057 2 + 10 36 2 947 979 1016 1058 2 + 12 36 2 948 980 1017 1059 2 + 14 36 2 949 981 1018 1060 2 + 16 36 2 950 982 1019 1061 2 + 18 36 2 951 983 1020 1062 2 + 20 36 2 952 984 1021 1063 2 + 22 36 2 953 985 1022 1064 2 + 24 36 2 954 986 1023 1065 2 + 26 36 2 955 987 1024 1066 2 + 28 36 2 956 988 1025 1067 2 + 30 36 2 957 989 1026 1068 2 + 32 36 2 958 990 1027 1069 2 + 34 36 2 959 991 1028 1070 2 + 36 36 2 960 992 1029 1071 2 + 38 36 2 961 993 1030 1072 2 + 40 36 2 962 994 1031 1073 2 + 42 36 2 963 995 1032 1074 2 + 44 36 2 964 996 1033 1075 2 + 46 36 2 965 997 1034 1076 2 + 48 36 2 966 998 1035 1077 2 + 50 36 2 967 999 1036 1078 2 + 52 36 2 968 1000 1037 1079 2 + 54 36 2 969 1001 1038 1080 2 + 56 36 2 970 1002 1039 1081 2 + 58 36 2 971 1003 1040 1082 2 + 60 36 2 972 1004 1041 1083 2 + 62 36 2 -1 1005 1042 1084 2 + 64 36 2 -1 1006 1043 1085 2 + 66 36 2 0 1007 1044 1086 2 + 68 36 2 34 1008 1045 1087 2 + 70 36 2 973 1009 1046 1088 2 + 72 36 2 37 1010 1047 1089 2 + 80 36 2 -1 -1 1051 1093 2 + 82 36 2 -1 -1 1052 1094 2 + 0 38 2 974 1011 1053 1101 2 + 2 38 2 975 1012 1054 1102 2 + 4 38 2 976 1013 1055 1103 2 + 6 38 2 977 1014 1056 1104 2 + 8 38 2 978 1015 1057 1105 2 + 10 38 2 979 1016 1058 1106 2 + 12 38 2 980 1017 1059 1107 2 + 14 38 2 981 1018 1060 1108 2 + 16 38 2 982 1019 1061 1109 2 + 18 38 2 983 1020 1062 1110 2 + 20 38 2 984 1021 1063 1111 2 + 22 38 2 985 1022 1064 1112 2 + 24 38 2 986 1023 1065 1113 2 + 26 38 2 987 1024 1066 1114 2 + 28 38 2 988 1025 1067 1115 2 + 30 38 2 989 1026 1068 1116 2 + 32 38 2 990 1027 1069 1117 2 + 34 38 2 991 1028 1070 1118 2 + 36 38 2 992 1029 1071 1119 2 + 38 38 2 993 1030 1072 1120 2 + 40 38 2 994 1031 1073 1121 2 + 42 38 2 995 1032 1074 1122 2 + 44 38 2 996 1033 1075 1123 2 + 46 38 2 997 1034 1076 1124 2 + 48 38 2 998 1035 1077 1125 2 + 50 38 2 999 1036 1078 1126 2 + 52 38 2 1000 1037 1079 1127 2 + 54 38 2 1001 1038 1080 1128 2 + 56 38 2 1002 1039 1081 1129 2 + 58 38 2 1003 1040 1082 1130 2 + 60 38 2 1004 1041 1083 1131 2 + 62 38 2 1005 1042 1084 1132 2 + 64 38 2 1006 1043 1085 1133 2 + 66 38 2 1007 1044 1086 1134 2 + 68 38 2 1008 1045 1087 1135 2 + 70 38 2 1009 1046 1088 1136 2 + 72 38 2 1010 1047 1089 1137 2 + 74 38 2 39 1048 1090 1138 2 + 76 38 2 41 1049 1091 1139 2 + 78 38 2 43 1050 1092 1140 2 + 80 38 2 -1 1051 1093 1141 2 + 82 38 2 -1 1052 1094 1142 2 + 87 38 1 0 0 1096 1144 2 + 88 38 2 -1 -1 1097 1145 2 + 90 38 2 -1 -1 1098 1146 2 + 92 38 2 -1 -1 1099 1147 2 + 94 38 1 0 0 1100 1148 2 + 0 40 2 1011 1053 1101 1149 2 + 2 40 2 1012 1054 1102 1150 2 + 4 40 2 1013 1055 1103 1151 2 + 6 40 2 1014 1056 1104 1152 2 + 8 40 2 1015 1057 1105 1153 2 + 10 40 2 1016 1058 1106 1154 2 + 12 40 2 1017 1059 1107 1155 2 + 14 40 2 1018 1060 1108 1156 2 + 16 40 2 1019 1061 1109 1157 2 + 18 40 2 1020 1062 1110 1158 2 + 20 40 2 1021 1063 1111 1159 2 + 22 40 2 1022 1064 1112 1160 2 + 24 40 2 1023 1065 1113 1161 2 + 26 40 2 1024 1066 1114 1162 2 + 28 40 2 1025 1067 1115 1163 2 + 30 40 2 1026 1068 1116 1164 2 + 32 40 2 1027 1069 1117 1165 2 + 34 40 2 1028 1070 1118 1166 2 + 36 40 2 1029 1071 1119 1167 2 + 38 40 2 1030 1072 1120 1168 2 + 40 40 2 1031 1073 1121 1169 2 + 42 40 2 1032 1074 1122 1170 2 + 44 40 2 1033 1075 1123 1171 2 + 46 40 2 1034 1076 1124 1172 2 + 48 40 2 1035 1077 1125 1173 2 + 50 40 2 1036 1078 1126 1174 2 + 52 40 2 1037 1079 1127 1175 2 + 54 40 2 1038 1080 1128 1176 2 + 56 40 2 1039 1081 1129 1177 2 + 58 40 2 1040 1082 1130 1178 2 + 60 40 2 1041 1083 1131 1179 2 + 62 40 2 1042 1084 1132 1180 2 + 64 40 2 1043 1085 1133 1181 2 + 66 40 2 1044 1086 1134 1182 2 + 68 40 2 1045 1087 1135 1183 2 + 70 40 2 1046 1088 1136 1184 2 + 72 40 2 1047 1089 1137 1185 2 + 74 40 2 1048 1090 1138 1186 2 + 76 40 2 1049 1091 1139 1187 2 + 78 40 2 1050 1092 1140 1188 2 + 80 40 2 1051 1093 1141 1189 2 + 82 40 2 1052 1094 1142 53 2 + 84 40 2 45 1095 1143 1190 2 + 86 40 2 0 1096 1144 1191 2 + 88 40 2 -1 1097 1145 1192 2 + 90 40 2 -1 1098 1146 1193 2 + 92 40 2 -1 1099 1147 1194 2 + 94 40 2 0 1100 1148 1195 2 + 0 42 2 1053 1101 1149 1196 2 + 2 42 2 1054 1102 1150 1197 2 + 4 42 2 1055 1103 1151 1198 2 + 6 42 2 1056 1104 1152 1199 2 + 8 42 2 1057 1105 1153 1200 2 + 10 42 2 1058 1106 1154 1201 2 + 12 42 2 1059 1107 1155 1202 2 + 14 42 2 1060 1108 1156 1203 2 + 16 42 2 1061 1109 1157 1204 2 + 18 42 2 1062 1110 1158 1205 2 + 20 42 2 1063 1111 1159 1206 2 + 22 42 2 1064 1112 1160 1207 2 + 24 42 2 1065 1113 1161 1208 2 + 26 42 2 1066 1114 1162 1209 2 + 28 42 2 1067 1115 1163 1210 2 + 30 42 2 1068 1116 1164 1211 2 + 32 42 2 1069 1117 1165 1212 2 + 34 42 2 1070 1118 1166 1213 2 + 36 42 2 1071 1119 1167 1214 2 + 38 42 2 1072 1120 1168 1215 2 + 40 42 2 1073 1121 1169 1216 2 + 42 42 2 1074 1122 1170 1217 2 + 44 42 2 1075 1123 1171 1218 2 + 46 42 2 1076 1124 1172 1219 2 + 48 42 2 1077 1125 1173 1220 2 + 50 42 2 1078 1126 1174 1221 2 + 52 42 2 1079 1127 1175 1222 2 + 54 42 2 1080 1128 1176 1223 2 + 56 42 2 1081 1129 1177 1224 2 + 58 42 2 1082 1130 1178 1225 2 + 60 42 2 1083 1131 1179 1226 2 + 62 42 2 1084 1132 1180 1227 2 + 64 42 2 1085 1133 1181 1228 2 + 66 42 2 1086 1134 1182 1229 2 + 68 42 2 1087 1135 1183 1230 2 + 70 42 2 1088 1136 1184 1231 2 + 72 42 2 1089 1137 1185 1232 2 + 74 42 2 1090 1138 1186 1233 2 + 76 42 2 1091 1139 1187 1234 2 + 78 42 2 1092 1140 1188 1235 2 + 80 42 2 1093 1141 1189 1236 2 + 84 42 2 1095 1143 1190 0 2 + 86 42 2 1096 1144 1191 1237 2 + 88 42 2 1097 1145 1192 1238 2 + 90 42 2 1098 1146 1193 1239 2 + 92 42 2 1099 1147 1194 1240 2 + 94 42 2 1100 1148 1195 60 2 + 0 44 2 1101 1149 1196 1241 2 + 2 44 2 1102 1150 1197 1242 2 + 4 44 2 1103 1151 1198 1243 2 + 6 44 2 1104 1152 1199 1244 2 + 8 44 2 1105 1153 1200 1245 2 + 10 44 2 1106 1154 1201 1246 2 + 12 44 2 1107 1155 1202 1247 2 + 14 44 2 1108 1156 1203 1248 2 + 16 44 2 1109 1157 1204 1249 2 + 18 44 2 1110 1158 1205 1250 2 + 20 44 2 1111 1159 1206 1251 2 + 22 44 2 1112 1160 1207 1252 2 + 24 44 2 1113 1161 1208 1253 2 + 26 44 2 1114 1162 1209 1254 2 + 28 44 2 1115 1163 1210 1255 2 + 30 44 2 1116 1164 1211 1256 2 + 32 44 2 1117 1165 1212 1257 2 + 34 44 2 1118 1166 1213 1258 2 + 36 44 2 1119 1167 1214 1259 2 + 38 44 2 1120 1168 1215 1260 2 + 40 44 2 1121 1169 1216 1261 2 + 42 44 2 1122 1170 1217 1262 2 + 44 44 2 1123 1171 1218 1263 2 + 46 44 2 1124 1172 1219 1264 2 + 48 44 2 1125 1173 1220 1265 2 + 50 44 2 1126 1174 1221 1266 2 + 52 44 2 1127 1175 1222 1267 2 + 54 44 2 1128 1176 1223 1268 2 + 56 44 2 1129 1177 1224 1269 2 + 58 44 2 1130 1178 1225 1270 2 + 60 44 2 1131 1179 1226 1271 2 + 62 44 2 1132 1180 1227 1272 2 + 64 44 2 1133 1181 1228 1273 2 + 66 44 2 1134 1182 1229 1274 2 + 68 44 2 1135 1183 1230 1275 2 + 70 44 2 1136 1184 1231 1276 2 + 72 44 2 1137 1185 1232 1277 2 + 74 44 2 1138 1186 1233 1278 2 + 76 44 2 1139 1187 1234 1279 2 + 78 44 2 1140 1188 1235 1280 2 + 80 44 2 1141 1189 1236 1281 2 + 84 44 1 1143 1190 0 0 2 + 86 44 2 1144 1191 1237 1282 2 + 88 44 2 1145 1192 1238 1283 2 + 90 44 2 1146 1193 1239 63 2 + 92 44 2 1147 1194 1240 -1 2 + 0 46 2 1149 1196 1241 1284 2 + 2 46 2 1150 1197 1242 1285 2 + 4 46 2 1151 1198 1243 1286 2 + 6 46 2 1152 1199 1244 1287 2 + 8 46 2 1153 1200 1245 1288 2 + 10 46 2 1154 1201 1246 1289 2 + 12 46 2 1155 1202 1247 1290 2 + 14 46 2 1156 1203 1248 1291 2 + 16 46 2 1157 1204 1249 1292 2 + 18 46 2 1158 1205 1250 1293 2 + 20 46 2 1159 1206 1251 1294 2 + 22 46 2 1160 1207 1252 1295 2 + 24 46 2 1161 1208 1253 1296 2 + 26 46 2 1162 1209 1254 1297 2 + 28 46 2 1163 1210 1255 1298 2 + 30 46 2 1164 1211 1256 1299 2 + 32 46 2 1165 1212 1257 1300 2 + 34 46 2 1166 1213 1258 1301 2 + 36 46 2 1167 1214 1259 1302 2 + 38 46 2 1168 1215 1260 1303 2 + 40 46 2 1169 1216 1261 1304 2 + 42 46 2 1170 1217 1262 1305 2 + 44 46 2 1171 1218 1263 1306 2 + 46 46 2 1172 1219 1264 1307 2 + 48 46 2 1173 1220 1265 1308 2 + 50 46 2 1174 1221 1266 1309 2 + 52 46 2 1175 1222 1267 1310 2 + 54 46 2 1176 1223 1268 1311 2 + 56 46 2 1177 1224 1269 1312 2 + 58 46 2 1178 1225 1270 1313 2 + 60 46 2 1179 1226 1271 1314 2 + 62 46 2 1180 1227 1272 1315 2 + 64 46 2 1181 1228 1273 1316 2 + 66 46 2 1182 1229 1274 1317 2 + 68 46 2 1183 1230 1275 1318 2 + 70 46 2 1184 1231 1276 1319 2 + 72 46 2 1185 1232 1277 1320 2 + 74 46 2 1186 1233 1278 1321 2 + 76 46 2 1187 1234 1279 1322 2 + 78 46 2 1188 1235 1280 1323 2 + 80 46 2 1189 1236 1281 66 2 + 86 46 2 1191 1237 1282 -1 2 + 88 46 2 1192 1238 1283 -1 2 + 92 46 2 1194 1240 -1 -1 2 + 0 48 2 1196 1241 1284 1324 2 + 2 48 2 1197 1242 1285 1325 2 + 4 48 2 1198 1243 1286 1326 2 + 6 48 2 1199 1244 1287 1327 2 + 8 48 2 1200 1245 1288 1328 2 + 10 48 2 1201 1246 1289 1329 2 + 12 48 2 1202 1247 1290 1330 2 + 14 48 2 1203 1248 1291 1331 2 + 16 48 2 1204 1249 1292 1332 2 + 18 48 2 1205 1250 1293 1333 2 + 20 48 2 1206 1251 1294 1334 2 + 22 48 2 1207 1252 1295 1335 2 + 24 48 2 1208 1253 1296 1336 2 + 26 48 2 1209 1254 1297 1337 2 + 28 48 2 1210 1255 1298 1338 2 + 30 48 2 1211 1256 1299 1339 2 + 32 48 2 1212 1257 1300 1340 2 + 34 48 2 1213 1258 1301 1341 2 + 36 48 2 1214 1259 1302 1342 2 + 38 48 2 1215 1260 1303 1343 2 + 40 48 2 1216 1261 1304 1344 2 + 42 48 2 1217 1262 1305 1345 2 + 44 48 2 1218 1263 1306 1346 2 + 46 48 2 1219 1264 1307 1347 2 + 48 48 2 1220 1265 1308 1348 2 + 50 48 2 1221 1266 1309 1349 2 + 52 48 2 1222 1267 1310 1350 2 + 54 48 2 1223 1268 1311 1351 2 + 56 48 2 1224 1269 1312 1352 2 + 58 48 2 1225 1270 1313 1353 2 + 60 48 2 1226 1271 1314 1354 2 + 62 48 2 1227 1272 1315 1355 2 + 64 48 2 1228 1273 1316 1356 2 + 66 48 2 1229 1274 1317 1357 2 + 68 48 2 1230 1275 1318 1358 2 + 70 48 2 1231 1276 1319 1359 2 + 72 48 2 1232 1277 1320 1360 2 + 74 48 2 1233 1278 1321 1361 2 + 76 48 2 1234 1279 1322 1362 2 + 78 48 2 1235 1280 1323 1363 2 + 86 48 2 1237 1282 -1 -1 2 + 88 48 2 1238 1283 -1 -1 2 + 0 50 2 1241 1284 1324 1364 2 + 2 50 2 1242 1285 1325 1365 2 + 4 50 2 1243 1286 1326 1366 2 + 6 50 2 1244 1287 1327 1367 2 + 8 50 2 1245 1288 1328 1368 2 + 10 50 2 1246 1289 1329 1369 2 + 12 50 2 1247 1290 1330 1370 2 + 14 50 2 1248 1291 1331 1371 2 + 16 50 2 1249 1292 1332 1372 2 + 18 50 2 1250 1293 1333 1373 2 + 20 50 2 1251 1294 1334 1374 2 + 22 50 2 1252 1295 1335 1375 2 + 24 50 2 1253 1296 1336 1376 2 + 26 50 2 1254 1297 1337 1377 2 + 28 50 2 1255 1298 1338 1378 2 + 30 50 2 1256 1299 1339 1379 2 + 32 50 2 1257 1300 1340 1380 2 + 34 50 2 1258 1301 1341 1381 2 + 36 50 2 1259 1302 1342 1382 2 + 38 50 2 1260 1303 1343 1383 2 + 40 50 2 1261 1304 1344 1384 2 + 42 50 2 1262 1305 1345 1385 2 + 44 50 2 1263 1306 1346 1386 2 + 46 50 2 1264 1307 1347 1387 2 + 48 50 2 1265 1308 1348 1388 2 + 50 50 2 1266 1309 1349 1389 2 + 52 50 2 1267 1310 1350 1390 2 + 54 50 2 1268 1311 1351 1391 2 + 56 50 2 1269 1312 1352 1392 2 + 58 50 2 1270 1313 1353 1393 2 + 60 50 2 1271 1314 1354 1394 2 + 62 50 2 1272 1315 1355 1395 2 + 64 50 2 1273 1316 1356 1396 2 + 66 50 2 1274 1317 1357 1397 2 + 68 50 2 1275 1318 1358 1398 2 + 70 50 2 1276 1319 1359 1399 2 + 72 50 2 1277 1320 1360 1400 2 + 74 50 2 1278 1321 1361 1401 2 + 76 50 2 1279 1322 1362 1402 2 + 78 50 2 1280 1323 1363 1403 2 + 0 52 2 1284 1324 1364 1406 2 + 2 52 2 1285 1325 1365 1407 2 + 4 52 2 1286 1326 1366 1408 2 + 6 52 2 1287 1327 1367 1409 2 + 8 52 2 1288 1328 1368 1410 2 + 10 52 2 1289 1329 1369 1411 2 + 12 52 2 1290 1330 1370 1412 2 + 14 52 2 1291 1331 1371 1413 2 + 16 52 2 1292 1332 1372 1414 2 + 18 52 2 1293 1333 1373 1415 2 + 20 52 2 1294 1334 1374 1416 2 + 22 52 2 1295 1335 1375 1417 2 + 24 52 2 1296 1336 1376 1418 2 + 26 52 2 1297 1337 1377 1419 2 + 28 52 2 1298 1338 1378 1420 2 + 30 52 2 1299 1339 1379 1421 2 + 32 52 2 1300 1340 1380 1422 2 + 34 52 2 1301 1341 1381 1423 2 + 36 52 2 1302 1342 1382 1424 2 + 38 52 2 1303 1343 1383 1425 2 + 40 52 2 1304 1344 1384 1426 2 + 42 52 2 1305 1345 1385 1427 2 + 44 52 2 1306 1346 1386 1428 2 + 46 52 2 1307 1347 1387 1429 2 + 48 52 2 1308 1348 1388 1430 2 + 50 52 2 1309 1349 1389 1431 2 + 52 52 2 1310 1350 1390 1432 2 + 54 52 2 1311 1351 1391 1433 2 + 56 52 2 1312 1352 1392 1434 2 + 58 52 2 1313 1353 1393 1435 2 + 60 52 2 1314 1354 1394 1436 2 + 62 52 2 1315 1355 1395 1437 2 + 64 52 2 1316 1356 1396 1438 2 + 66 52 2 1317 1357 1397 1439 2 + 68 52 2 1318 1358 1398 1440 2 + 70 52 2 1319 1359 1399 78 2 + 72 52 2 1320 1360 1400 80 2 + 74 52 2 1321 1361 1401 1441 2 + 76 52 2 1322 1362 1402 1442 2 + 78 52 2 1323 1363 1403 1443 2 + 80 52 2 -1 -1 1404 0 2 + 90 52 2 -1 -1 1405 92 2 + 0 54 2 1324 1364 1406 1446 2 + 2 54 2 1325 1365 1407 1447 2 + 4 54 2 1326 1366 1408 1448 2 + 6 54 2 1327 1367 1409 1449 2 + 8 54 2 1328 1368 1410 1450 2 + 10 54 2 1329 1369 1411 1451 2 + 12 54 2 1330 1370 1412 1452 2 + 14 54 2 1331 1371 1413 1453 2 + 16 54 2 1332 1372 1414 1454 2 + 18 54 2 1333 1373 1415 1455 2 + 20 54 2 1334 1374 1416 1456 2 + 22 54 2 1335 1375 1417 1457 2 + 24 54 2 1336 1376 1418 1458 2 + 26 54 2 1337 1377 1419 1459 2 + 28 54 2 1338 1378 1420 1460 2 + 30 54 2 1339 1379 1421 1461 2 + 32 54 2 1340 1380 1422 1462 2 + 34 54 2 1341 1381 1423 1463 2 + 36 54 2 1342 1382 1424 1464 2 + 38 54 2 1343 1383 1425 1465 2 + 40 54 2 1344 1384 1426 1466 2 + 42 54 2 1345 1385 1427 1467 2 + 44 54 2 1346 1386 1428 1468 2 + 46 54 2 1347 1387 1429 1469 2 + 48 54 2 1348 1388 1430 1470 2 + 50 54 2 1349 1389 1431 1471 2 + 52 54 2 1350 1390 1432 1472 2 + 54 54 2 1351 1391 1433 1473 2 + 56 54 2 1352 1392 1434 1474 2 + 58 54 2 1353 1393 1435 1475 2 + 60 54 2 1354 1394 1436 1476 2 + 62 54 2 1355 1395 1437 1477 2 + 64 54 2 1356 1396 1438 1478 2 + 66 54 2 1357 1397 1439 95 2 + 68 54 2 1358 1398 1440 1479 2 + 74 54 2 1361 1401 1441 0 2 + 76 54 2 1362 1402 1442 103 2 + 78 54 2 1363 1403 1443 0 2 + 81 54 1 -1 1404 0 0 2 + 0 56 2 1364 1406 1446 1482 2 + 2 56 2 1365 1407 1447 1483 2 + 4 56 2 1366 1408 1448 1484 2 + 6 56 2 1367 1409 1449 1485 2 + 8 56 2 1368 1410 1450 1486 2 + 10 56 2 1369 1411 1451 1487 2 + 12 56 2 1370 1412 1452 1488 2 + 14 56 2 1371 1413 1453 1489 2 + 16 56 2 1372 1414 1454 1490 2 + 18 56 2 1373 1415 1455 1491 2 + 20 56 2 1374 1416 1456 1492 2 + 22 56 2 1375 1417 1457 1493 2 + 24 56 2 1376 1418 1458 1494 2 + 26 56 2 1377 1419 1459 1495 2 + 28 56 2 1378 1420 1460 1496 2 + 30 56 2 1379 1421 1461 1497 2 + 32 56 2 1380 1422 1462 1498 2 + 34 56 2 1381 1423 1463 1499 2 + 36 56 2 1382 1424 1464 1500 2 + 38 56 2 1383 1425 1465 1501 2 + 40 56 2 1384 1426 1466 1502 2 + 42 56 2 1385 1427 1467 1503 2 + 44 56 2 1386 1428 1468 1504 2 + 46 56 2 1387 1429 1469 1505 2 + 48 56 2 1388 1430 1470 1506 2 + 50 56 2 1389 1431 1471 1507 2 + 52 56 2 1390 1432 1472 1508 2 + 54 56 2 1391 1433 1473 1509 2 + 56 56 2 1392 1434 1474 1510 2 + 58 56 2 1393 1435 1475 1511 2 + 60 56 2 1394 1436 1476 1512 2 + 62 56 2 1395 1437 1477 114 2 + 64 56 2 1396 1438 1478 117 2 + 68 56 2 1398 1440 1479 1513 2 + 74 56 1 1401 1441 0 0 2 + 79 56 1 1403 1443 0 0 2 + 86 56 2 70 1444 1481 126 2 + 92 56 1 74 1445 0 0 2 + 0 58 2 1406 1446 1482 1514 2 + 2 58 2 1407 1447 1483 1515 2 + 4 58 2 1408 1448 1484 1516 2 + 6 58 2 1409 1449 1485 1517 2 + 8 58 2 1410 1450 1486 1518 2 + 10 58 2 1411 1451 1487 1519 2 + 12 58 2 1412 1452 1488 1520 2 + 14 58 2 1413 1453 1489 1521 2 + 16 58 2 1414 1454 1490 1522 2 + 18 58 2 1415 1455 1491 1523 2 + 20 58 2 1416 1456 1492 1524 2 + 22 58 2 1417 1457 1493 1525 2 + 24 58 2 1418 1458 1494 1526 2 + 26 58 2 1419 1459 1495 1527 2 + 28 58 2 1420 1460 1496 1528 2 + 30 58 2 1421 1461 1497 1529 2 + 32 58 2 1422 1462 1498 1530 2 + 34 58 2 1423 1463 1499 1531 2 + 36 58 2 1424 1464 1500 1532 2 + 38 58 2 1425 1465 1501 1533 2 + 40 58 2 1426 1466 1502 1534 2 + 42 58 2 1427 1467 1503 1535 2 + 44 58 2 1428 1468 1504 1536 2 + 46 58 2 1429 1469 1505 1537 2 + 48 58 2 1430 1470 1506 1538 2 + 50 58 2 1431 1471 1507 1539 2 + 52 58 2 1432 1472 1508 1540 2 + 54 58 2 1433 1473 1509 1541 2 + 56 58 2 1434 1474 1510 1542 2 + 58 58 2 1435 1475 1511 1543 2 + 60 58 2 1436 1476 1512 0 2 + 68 58 2 1440 1479 1513 1546 2 + 84 58 1 86 1480 0 0 2 + 0 60 2 1446 1482 1514 1547 2 + 2 60 2 1447 1483 1515 1548 2 + 4 60 2 1448 1484 1516 1549 2 + 6 60 2 1449 1485 1517 1550 2 + 8 60 2 1450 1486 1518 1551 2 + 10 60 2 1451 1487 1519 1552 2 + 12 60 2 1452 1488 1520 1553 2 + 14 60 2 1453 1489 1521 1554 2 + 16 60 2 1454 1490 1522 1555 2 + 18 60 2 1455 1491 1523 1556 2 + 20 60 2 1456 1492 1524 1557 2 + 22 60 2 1457 1493 1525 1558 2 + 24 60 2 1458 1494 1526 1559 2 + 26 60 2 1459 1495 1527 1560 2 + 28 60 2 1460 1496 1528 1561 2 + 30 60 2 1461 1497 1529 1562 2 + 32 60 2 1462 1498 1530 1563 2 + 34 60 2 1463 1499 1531 1564 2 + 36 60 2 1464 1500 1532 1565 2 + 38 60 2 1465 1501 1533 1566 2 + 40 60 2 1466 1502 1534 1567 2 + 42 60 2 1467 1503 1535 1568 2 + 44 60 2 1468 1504 1536 1569 2 + 46 60 2 1469 1505 1537 1570 2 + 48 60 2 1470 1506 1538 1571 2 + 50 60 2 1471 1507 1539 1572 2 + 52 60 2 1472 1508 1540 1573 2 + 54 60 2 1473 1509 1541 1574 2 + 56 60 2 1474 1510 1542 1575 2 + 58 60 2 1475 1511 1543 141 2 + 61 60 1 1476 1512 0 0 2 + 62 60 1 0 0 1544 1577 2 + 68 60 2 1479 1513 1546 1580 2 + 0 62 2 1482 1514 1547 1581 2 + 2 62 2 1483 1515 1548 1582 2 + 4 62 2 1484 1516 1549 1583 2 + 6 62 2 1485 1517 1550 1584 2 + 8 62 2 1486 1518 1551 1585 2 + 10 62 2 1487 1519 1552 1586 2 + 12 62 2 1488 1520 1553 1587 2 + 14 62 2 1489 1521 1554 1588 2 + 16 62 2 1490 1522 1555 1589 2 + 18 62 2 1491 1523 1556 1590 2 + 20 62 2 1492 1524 1557 1591 2 + 22 62 2 1493 1525 1558 1592 2 + 24 62 2 1494 1526 1559 1593 2 + 26 62 2 1495 1527 1560 1594 2 + 28 62 2 1496 1528 1561 1595 2 + 30 62 2 1497 1529 1562 1596 2 + 32 62 2 1498 1530 1563 1597 2 + 34 62 2 1499 1531 1564 1598 2 + 36 62 2 1500 1532 1565 1599 2 + 38 62 2 1501 1533 1566 1600 2 + 40 62 2 1502 1534 1567 1601 2 + 42 62 2 1503 1535 1568 1602 2 + 44 62 2 1504 1536 1569 1603 2 + 46 62 2 1505 1537 1570 1604 2 + 48 62 2 1506 1538 1571 1605 2 + 50 62 2 1507 1539 1572 145 2 + 52 62 2 1508 1540 1573 0 2 + 54 62 2 1509 1541 1574 0 2 + 56 62 2 1510 1542 1575 149 2 + 61 62 1 0 0 1576 1607 2 + 62 62 2 0 1544 1577 1608 2 + 66 62 2 121 1545 1579 1610 2 + 68 62 2 1513 1546 1580 1611 2 + 0 64 2 1514 1547 1581 1612 2 + 2 64 2 1515 1548 1582 1613 2 + 4 64 2 1516 1549 1583 1614 2 + 6 64 2 1517 1550 1584 1615 2 + 8 64 2 1518 1551 1585 1616 2 + 10 64 2 1519 1552 1586 1617 2 + 12 64 2 1520 1553 1587 1618 2 + 14 64 2 1521 1554 1588 1619 2 + 16 64 2 1522 1555 1589 1620 2 + 18 64 2 1523 1556 1590 1621 2 + 20 64 2 1524 1557 1591 1622 2 + 22 64 2 1525 1558 1592 1623 2 + 24 64 2 1526 1559 1593 1624 2 + 26 64 2 1527 1560 1594 1625 2 + 28 64 2 1528 1561 1595 1626 2 + 30 64 2 1529 1562 1596 1627 2 + 32 64 2 1530 1563 1597 1628 2 + 34 64 2 1531 1564 1598 1629 2 + 36 64 2 1532 1565 1599 1630 2 + 38 64 2 1533 1566 1600 1631 2 + 40 64 2 1534 1567 1601 1632 2 + 42 64 2 1535 1568 1602 1633 2 + 44 64 2 1536 1569 1603 1634 2 + 46 64 2 1537 1570 1604 1635 2 + 48 64 2 1538 1571 1605 1636 2 + 53 64 1 1540 1573 0 0 2 + 54 64 1 1541 1574 0 0 2 + 58 64 1 0 0 1606 1638 2 + 60 64 2 0 1576 1607 1639 2 + 62 64 2 1544 1577 1608 1640 2 + 64 64 2 135 1578 1609 1641 2 + 66 64 2 1545 1579 1610 1642 2 + 68 64 2 1546 1580 1611 1643 2 + 0 66 2 1547 1581 1612 1644 2 + 2 66 2 1548 1582 1613 1645 2 + 4 66 2 1549 1583 1614 1646 2 + 6 66 2 1550 1584 1615 1647 2 + 8 66 2 1551 1585 1616 1648 2 + 10 66 2 1552 1586 1617 1649 2 + 12 66 2 1553 1587 1618 1650 2 + 14 66 2 1554 1588 1619 1651 2 + 16 66 2 1555 1589 1620 1652 2 + 18 66 2 1556 1590 1621 1653 2 + 20 66 2 1557 1591 1622 1654 2 + 22 66 2 1558 1592 1623 1655 2 + 24 66 2 1559 1593 1624 1656 2 + 26 66 2 1560 1594 1625 1657 2 + 28 66 2 1561 1595 1626 1658 2 + 30 66 2 1562 1596 1627 1659 2 + 32 66 2 1563 1597 1628 1660 2 + 34 66 2 1564 1598 1629 1661 2 + 36 66 2 1565 1599 1630 1662 2 + 38 66 2 1566 1600 1631 1663 2 + 40 66 2 1567 1601 1632 1664 2 + 42 66 2 1568 1602 1633 1665 2 + 44 66 2 1569 1603 1634 1666 2 + 46 66 2 1570 1604 1635 1667 2 + 48 66 2 1571 1605 1636 1668 2 + 51 66 1 0 0 1637 1669 2 + 58 66 2 0 1606 1638 1673 2 + 60 66 2 1576 1607 1639 1674 2 + 62 66 2 1577 1608 1640 1675 2 + 64 66 2 1578 1609 1641 1676 2 + 66 66 2 1579 1610 1642 1677 2 + 68 66 2 1580 1611 1643 1678 2 + 0 68 2 1581 1612 1644 1679 2 + 2 68 2 1582 1613 1645 1680 2 + 4 68 2 1583 1614 1646 1681 2 + 6 68 2 1584 1615 1647 1682 2 + 8 68 2 1585 1616 1648 1683 2 + 10 68 2 1586 1617 1649 1684 2 + 12 68 2 1587 1618 1650 1685 2 + 14 68 2 1588 1619 1651 1686 2 + 16 68 2 1589 1620 1652 1687 2 + 18 68 2 1590 1621 1653 1688 2 + 20 68 2 1591 1622 1654 1689 2 + 22 68 2 1592 1623 1655 1690 2 + 24 68 2 1593 1624 1656 1691 2 + 26 68 2 1594 1625 1657 1692 2 + 28 68 2 1595 1626 1658 1693 2 + 30 68 2 1596 1627 1659 1694 2 + 32 68 2 1597 1628 1660 1695 2 + 34 68 2 1598 1629 1661 1696 2 + 36 68 2 1599 1630 1662 1697 2 + 38 68 2 1600 1631 1663 1698 2 + 40 68 2 1601 1632 1664 1699 2 + 42 68 2 1602 1633 1665 1700 2 + 44 68 2 1603 1634 1666 1701 2 + 46 68 2 1604 1635 1667 1702 2 + 48 68 2 1605 1636 1668 1703 2 + 50 68 2 0 1637 1669 1704 2 + 54 68 2 -1 -1 1671 1706 2 + 56 68 1 0 0 1672 1707 2 + 58 68 2 1606 1638 1673 1708 2 + 60 68 2 1607 1639 1674 1709 2 + 62 68 2 1608 1640 1675 1710 2 + 64 68 2 1609 1641 1676 1711 2 + 66 68 2 1610 1642 1677 1712 2 + 68 68 2 1611 1643 1678 1713 2 + 0 70 2 1612 1644 1679 1714 2 + 2 70 2 1613 1645 1680 1715 2 + 4 70 2 1614 1646 1681 1716 2 + 6 70 2 1615 1647 1682 1717 2 + 8 70 2 1616 1648 1683 1718 2 + 10 70 2 1617 1649 1684 1719 2 + 12 70 2 1618 1650 1685 1720 2 + 14 70 2 1619 1651 1686 1721 2 + 16 70 2 1620 1652 1687 1722 2 + 18 70 2 1621 1653 1688 1723 2 + 20 70 2 1622 1654 1689 1724 2 + 22 70 2 1623 1655 1690 1725 2 + 24 70 2 1624 1656 1691 1726 2 + 26 70 2 1625 1657 1692 1727 2 + 28 70 2 1626 1658 1693 1728 2 + 30 70 2 1627 1659 1694 1729 2 + 32 70 2 1628 1660 1695 1730 2 + 34 70 2 1629 1661 1696 1731 2 + 36 70 2 1630 1662 1697 1732 2 + 38 70 2 1631 1663 1698 1733 2 + 40 70 2 1632 1664 1699 1734 2 + 42 70 2 1633 1665 1700 1735 2 + 44 70 2 1634 1666 1701 1736 2 + 46 70 2 1635 1667 1702 1737 2 + 48 70 2 1636 1668 1703 1738 2 + 50 70 2 1637 1669 1704 1739 2 + 52 70 2 153 1670 1705 1740 2 + 54 70 2 -1 1671 1706 1741 2 + 56 70 2 0 1672 1707 1742 2 + 58 70 2 1638 1673 1708 1743 2 + 60 70 2 1639 1674 1709 1744 2 + 62 70 2 1640 1675 1710 1745 2 + 64 70 2 1641 1676 1711 1746 2 + 66 70 2 1642 1677 1712 1747 2 + 68 70 2 1643 1678 1713 1748 2 + 0 72 2 1644 1679 1714 1750 2 + 2 72 2 1645 1680 1715 1751 2 + 4 72 2 1646 1681 1716 1752 2 + 6 72 2 1647 1682 1717 1753 2 + 8 72 2 1648 1683 1718 1754 2 + 10 72 2 1649 1684 1719 1755 2 + 12 72 2 1650 1685 1720 1756 2 + 14 72 2 1651 1686 1721 1757 2 + 16 72 2 1652 1687 1722 1758 2 + 18 72 2 1653 1688 1723 1759 2 + 20 72 2 1654 1689 1724 1760 2 + 22 72 2 1655 1690 1725 1761 2 + 24 72 2 1656 1691 1726 1762 2 + 26 72 2 1657 1692 1727 1763 2 + 28 72 2 1658 1693 1728 1764 2 + 30 72 2 1659 1694 1729 1765 2 + 32 72 2 1660 1695 1730 1766 2 + 34 72 2 1661 1696 1731 1767 2 + 36 72 2 1662 1697 1732 1768 2 + 38 72 2 1663 1698 1733 1769 2 + 40 72 2 1664 1699 1734 1770 2 + 42 72 2 1665 1700 1735 1771 2 + 44 72 2 1666 1701 1736 1772 2 + 46 72 2 1667 1702 1737 1773 2 + 48 72 2 1668 1703 1738 1774 2 + 50 72 2 1669 1704 1739 1775 2 + 52 72 2 1670 1705 1740 1776 2 + 54 72 2 1671 1706 1741 1777 2 + 56 72 2 1672 1707 1742 1778 2 + 58 72 2 1673 1708 1743 1779 2 + 60 72 2 1674 1709 1744 1780 2 + 62 72 2 1675 1710 1745 1781 2 + 64 72 2 1676 1711 1746 1782 2 + 66 72 2 1677 1712 1747 1783 2 + 68 72 2 1678 1713 1748 1784 2 + 71 72 1 0 0 1749 1785 2 + 0 74 2 1679 1714 1750 1787 2 + 2 74 2 1680 1715 1751 1788 2 + 4 74 2 1681 1716 1752 1789 2 + 6 74 2 1682 1717 1753 1790 2 + 8 74 2 1683 1718 1754 1791 2 + 10 74 2 1684 1719 1755 1792 2 + 12 74 2 1685 1720 1756 1793 2 + 14 74 2 1686 1721 1757 1794 2 + 16 74 2 1687 1722 1758 1795 2 + 18 74 2 1688 1723 1759 1796 2 + 20 74 2 1689 1724 1760 1797 2 + 22 74 2 1690 1725 1761 1798 2 + 24 74 2 1691 1726 1762 1799 2 + 26 74 2 1692 1727 1763 1800 2 + 28 74 2 1693 1728 1764 1801 2 + 30 74 2 1694 1729 1765 1802 2 + 32 74 2 1695 1730 1766 1803 2 + 34 74 2 1696 1731 1767 1804 2 + 36 74 2 1697 1732 1768 1805 2 + 38 74 2 1698 1733 1769 1806 2 + 40 74 2 1699 1734 1770 1807 2 + 42 74 2 1700 1735 1771 1808 2 + 44 74 2 1701 1736 1772 1809 2 + 46 74 2 1702 1737 1773 1810 2 + 48 74 2 1703 1738 1774 1811 2 + 50 74 2 1704 1739 1775 1812 2 + 52 74 2 1705 1740 1776 1813 2 + 54 74 2 1706 1741 1777 1814 2 + 56 74 2 1707 1742 1778 1815 2 + 58 74 2 1708 1743 1779 1816 2 + 60 74 2 1709 1744 1780 1817 2 + 62 74 2 1710 1745 1781 1818 2 + 64 74 2 1711 1746 1782 1819 2 + 66 74 2 1712 1747 1783 1820 2 + 68 74 2 1713 1748 1784 1821 2 + 70 74 2 0 1749 1785 1822 2 + 73 74 1 0 0 1786 0 2 + 0 76 2 1714 1750 1787 1826 2 + 2 76 2 1715 1751 1788 1827 2 + 4 76 2 1716 1752 1789 1828 2 + 6 76 2 1717 1753 1790 1829 2 + 8 76 2 1718 1754 1791 1830 2 + 10 76 2 1719 1755 1792 1831 2 + 12 76 2 1720 1756 1793 1832 2 + 14 76 2 1721 1757 1794 1833 2 + 16 76 2 1722 1758 1795 1834 2 + 18 76 2 1723 1759 1796 1835 2 + 20 76 2 1724 1760 1797 1836 2 + 22 76 2 1725 1761 1798 1837 2 + 24 76 2 1726 1762 1799 1838 2 + 26 76 2 1727 1763 1800 1839 2 + 28 76 2 1728 1764 1801 1840 2 + 30 76 2 1729 1765 1802 1841 2 + 32 76 2 1730 1766 1803 1842 2 + 34 76 2 1731 1767 1804 1843 2 + 36 76 2 1732 1768 1805 1844 2 + 38 76 2 1733 1769 1806 1845 2 + 40 76 2 1734 1770 1807 1846 2 + 42 76 2 1735 1771 1808 1847 2 + 44 76 2 1736 1772 1809 1848 2 + 46 76 2 1737 1773 1810 1849 2 + 48 76 2 1738 1774 1811 1850 2 + 50 76 2 1739 1775 1812 1851 2 + 52 76 2 1740 1776 1813 1852 2 + 54 76 2 1741 1777 1814 1853 2 + 56 76 2 1742 1778 1815 1854 2 + 58 76 2 1743 1779 1816 1855 2 + 60 76 2 1744 1780 1817 1856 2 + 62 76 2 1745 1781 1818 1857 2 + 64 76 2 1746 1782 1819 1858 2 + 66 76 2 1747 1783 1820 1859 2 + 68 76 2 1748 1784 1821 1860 2 + 70 76 2 1749 1785 1822 1861 2 + 73 76 1 0 1786 0 0 2 + 75 76 1 0 0 1823 1863 2 + 77 76 1 0 0 1824 1864 2 + 78 76 2 -1 -1 1825 1865 2 + 0 78 2 1750 1787 1826 1866 2 + 2 78 2 1751 1788 1827 1867 2 + 4 78 2 1752 1789 1828 1868 2 + 6 78 2 1753 1790 1829 1869 2 + 8 78 2 1754 1791 1830 1870 2 + 10 78 2 1755 1792 1831 1871 2 + 12 78 2 1756 1793 1832 1872 2 + 14 78 2 1757 1794 1833 1873 2 + 16 78 2 1758 1795 1834 1874 2 + 18 78 2 1759 1796 1835 1875 2 + 20 78 2 1760 1797 1836 1876 2 + 22 78 2 1761 1798 1837 1877 2 + 24 78 2 1762 1799 1838 1878 2 + 26 78 2 1763 1800 1839 1879 2 + 28 78 2 1764 1801 1840 1880 2 + 30 78 2 1765 1802 1841 1881 2 + 32 78 2 1766 1803 1842 1882 2 + 34 78 2 1767 1804 1843 1883 2 + 36 78 2 1768 1805 1844 1884 2 + 38 78 2 1769 1806 1845 1885 2 + 40 78 2 1770 1807 1846 1886 2 + 42 78 2 1771 1808 1847 1887 2 + 44 78 2 1772 1809 1848 1888 2 + 46 78 2 1773 1810 1849 1889 2 + 48 78 2 1774 1811 1850 1890 2 + 50 78 2 1775 1812 1851 1891 2 + 52 78 2 1776 1813 1852 1892 2 + 54 78 2 1777 1814 1853 1893 2 + 56 78 2 1778 1815 1854 1894 2 + 58 78 2 1779 1816 1855 1895 2 + 60 78 2 1780 1817 1856 1896 2 + 62 78 2 1781 1818 1857 1897 2 + 64 78 2 1782 1819 1858 1898 2 + 66 78 2 1783 1820 1859 1899 2 + 68 78 2 1784 1821 1860 1900 2 + 70 78 2 1785 1822 1861 1901 2 + 74 78 2 0 1823 1863 1903 2 + 76 78 2 0 1824 1864 1904 2 + 78 78 2 -1 1825 1865 1905 2 + 0 80 2 1787 1826 1866 1909 2 + 2 80 2 1788 1827 1867 1910 2 + 4 80 2 1789 1828 1868 1911 2 + 6 80 2 1790 1829 1869 1912 2 + 8 80 2 1791 1830 1870 1913 2 + 10 80 2 1792 1831 1871 1914 2 + 12 80 2 1793 1832 1872 1915 2 + 14 80 2 1794 1833 1873 1916 2 + 16 80 2 1795 1834 1874 1917 2 + 18 80 2 1796 1835 1875 1918 2 + 20 80 2 1797 1836 1876 1919 2 + 22 80 2 1798 1837 1877 1920 2 + 24 80 2 1799 1838 1878 1921 2 + 26 80 2 1800 1839 1879 1922 2 + 28 80 2 1801 1840 1880 1923 2 + 30 80 2 1802 1841 1881 1924 2 + 32 80 2 1803 1842 1882 1925 2 + 34 80 2 1804 1843 1883 1926 2 + 36 80 2 1805 1844 1884 1927 2 + 38 80 2 1806 1845 1885 1928 2 + 40 80 2 1807 1846 1886 1929 2 + 42 80 2 1808 1847 1887 1930 2 + 44 80 2 1809 1848 1888 1931 2 + 46 80 2 1810 1849 1889 1932 2 + 48 80 2 1811 1850 1890 1933 2 + 50 80 2 1812 1851 1891 1934 2 + 52 80 2 1813 1852 1892 1935 2 + 54 80 2 1814 1853 1893 1936 2 + 56 80 2 1815 1854 1894 1937 2 + 58 80 2 1816 1855 1895 1938 2 + 60 80 2 1817 1856 1896 1939 2 + 62 80 2 1818 1857 1897 1940 2 + 64 80 2 1819 1858 1898 1941 2 + 66 80 2 1820 1859 1899 1942 2 + 68 80 2 1821 1860 1900 1943 2 + 70 80 2 1822 1861 1901 1944 2 + 72 80 2 168 1862 1902 1945 2 + 74 80 2 1823 1863 1903 1946 2 + 76 80 2 1824 1864 1904 1947 2 + 78 80 2 1825 1865 1905 1948 2 + 84 80 2 -1 -1 1907 1951 2 + 86 80 2 -1 -1 1908 1952 2 + 0 82 2 1826 1866 1909 1954 2 + 2 82 2 1827 1867 1910 1955 2 + 4 82 2 1828 1868 1911 1956 2 + 6 82 2 1829 1869 1912 1957 2 + 8 82 2 1830 1870 1913 1958 2 + 10 82 2 1831 1871 1914 1959 2 + 12 82 2 1832 1872 1915 1960 2 + 14 82 2 1833 1873 1916 1961 2 + 16 82 2 1834 1874 1917 1962 2 + 18 82 2 1835 1875 1918 1963 2 + 20 82 2 1836 1876 1919 1964 2 + 22 82 2 1837 1877 1920 1965 2 + 24 82 2 1838 1878 1921 1966 2 + 26 82 2 1839 1879 1922 1967 2 + 28 82 2 1840 1880 1923 1968 2 + 30 82 2 1841 1881 1924 1969 2 + 32 82 2 1842 1882 1925 1970 2 + 34 82 2 1843 1883 1926 1971 2 + 36 82 2 1844 1884 1927 1972 2 + 38 82 2 1845 1885 1928 1973 2 + 40 82 2 1846 1886 1929 1974 2 + 42 82 2 1847 1887 1930 1975 2 + 44 82 2 1848 1888 1931 1976 2 + 46 82 2 1849 1889 1932 1977 2 + 48 82 2 1850 1890 1933 1978 2 + 50 82 2 1851 1891 1934 1979 2 + 52 82 2 1852 1892 1935 1980 2 + 54 82 2 1853 1893 1936 1981 2 + 56 82 2 1854 1894 1937 1982 2 + 58 82 2 1855 1895 1938 1983 2 + 60 82 2 1856 1896 1939 1984 2 + 62 82 2 1857 1897 1940 1985 2 + 64 82 2 1858 1898 1941 1986 2 + 66 82 2 1859 1899 1942 1987 2 + 68 82 2 1860 1900 1943 1988 2 + 70 82 2 1861 1901 1944 1989 2 + 72 82 2 1862 1902 1945 1990 2 + 74 82 2 1863 1903 1946 1991 2 + 76 82 2 1864 1904 1947 1992 2 + 78 82 2 1865 1905 1948 1993 2 + 80 82 2 171 1906 1949 1994 2 + 84 82 2 -1 1907 1951 1996 2 + 86 82 2 -1 1908 1952 1997 2 + 89 82 1 0 0 1953 1998 2 + 0 84 2 1866 1909 1954 2006 2 + 2 84 2 1867 1910 1955 2007 2 + 4 84 2 1868 1911 1956 2008 2 + 6 84 2 1869 1912 1957 2009 2 + 8 84 2 1870 1913 1958 2010 2 + 10 84 2 1871 1914 1959 2011 2 + 12 84 2 1872 1915 1960 2012 2 + 14 84 2 1873 1916 1961 2013 2 + 16 84 2 1874 1917 1962 2014 2 + 18 84 2 1875 1918 1963 2015 2 + 20 84 2 1876 1919 1964 2016 2 + 22 84 2 1877 1920 1965 2017 2 + 24 84 2 1878 1921 1966 2018 2 + 26 84 2 1879 1922 1967 2019 2 + 28 84 2 1880 1923 1968 2020 2 + 30 84 2 1881 1924 1969 2021 2 + 32 84 2 1882 1925 1970 2022 2 + 34 84 2 1883 1926 1971 2023 2 + 36 84 2 1884 1927 1972 2024 2 + 38 84 2 1885 1928 1973 2025 2 + 40 84 2 1886 1929 1974 2026 2 + 42 84 2 1887 1930 1975 2027 2 + 44 84 2 1888 1931 1976 2028 2 + 46 84 2 1889 1932 1977 2029 2 + 48 84 2 1890 1933 1978 2030 2 + 50 84 2 1891 1934 1979 2031 2 + 52 84 2 1892 1935 1980 2032 2 + 54 84 2 1893 1936 1981 2033 2 + 56 84 2 1894 1937 1982 2034 2 + 58 84 2 1895 1938 1983 2035 2 + 60 84 2 1896 1939 1984 2036 2 + 62 84 2 1897 1940 1985 2037 2 + 64 84 2 1898 1941 1986 2038 2 + 66 84 2 1899 1942 1987 2039 2 + 68 84 2 1900 1943 1988 2040 2 + 70 84 2 1901 1944 1989 2041 2 + 72 84 2 1902 1945 1990 2042 2 + 74 84 2 1903 1946 1991 2043 2 + 76 84 2 1904 1947 1992 2044 2 + 78 84 2 1905 1948 1993 2045 2 + 80 84 2 1906 1949 1994 2046 2 + 82 84 2 174 1950 1995 2047 2 + 84 84 2 1907 1951 1996 2048 2 + 86 84 2 1908 1952 1997 2049 2 + 88 84 2 0 1953 1998 2050 2 + 93 84 1 0 0 2000 2052 2 + 94 84 1 0 0 2001 2053 2 + 101 84 1 0 0 2004 2056 2 + 102 84 2 -1 -1 2005 2057 2 + 0 86 2 1909 1954 2006 2058 2 + 2 86 2 1910 1955 2007 2059 2 + 4 86 2 1911 1956 2008 2060 2 + 6 86 2 1912 1957 2009 2061 2 + 8 86 2 1913 1958 2010 2062 2 + 10 86 2 1914 1959 2011 2063 2 + 12 86 2 1915 1960 2012 2064 2 + 14 86 2 1916 1961 2013 2065 2 + 16 86 2 1917 1962 2014 2066 2 + 18 86 2 1918 1963 2015 2067 2 + 20 86 2 1919 1964 2016 2068 2 + 22 86 2 1920 1965 2017 2069 2 + 24 86 2 1921 1966 2018 2070 2 + 26 86 2 1922 1967 2019 2071 2 + 28 86 2 1923 1968 2020 2072 2 + 30 86 2 1924 1969 2021 2073 2 + 32 86 2 1925 1970 2022 2074 2 + 34 86 2 1926 1971 2023 2075 2 + 36 86 2 1927 1972 2024 2076 2 + 38 86 2 1928 1973 2025 2077 2 + 40 86 2 1929 1974 2026 2078 2 + 42 86 2 1930 1975 2027 2079 2 + 44 86 2 1931 1976 2028 2080 2 + 46 86 2 1932 1977 2029 2081 2 + 48 86 2 1933 1978 2030 2082 2 + 50 86 2 1934 1979 2031 2083 2 + 52 86 2 1935 1980 2032 2084 2 + 54 86 2 1936 1981 2033 2085 2 + 56 86 2 1937 1982 2034 2086 2 + 58 86 2 1938 1983 2035 2087 2 + 60 86 2 1939 1984 2036 2088 2 + 62 86 2 1940 1985 2037 2089 2 + 64 86 2 1941 1986 2038 2090 2 + 66 86 2 1942 1987 2039 2091 2 + 68 86 2 1943 1988 2040 2092 2 + 70 86 2 1944 1989 2041 2093 2 + 72 86 2 1945 1990 2042 2094 2 + 74 86 2 1946 1991 2043 2095 2 + 76 86 2 1947 1992 2044 2096 2 + 78 86 2 1948 1993 2045 2097 2 + 80 86 2 1949 1994 2046 2098 2 + 82 86 2 1950 1995 2047 2099 2 + 84 86 2 1951 1996 2048 2100 2 + 86 86 2 1952 1997 2049 2101 2 + 88 86 2 1953 1998 2050 2102 2 + 90 86 2 177 1999 2051 2103 2 + 92 86 2 0 2000 2052 2104 2 + 94 86 2 0 2001 2053 2105 2 + 96 86 2 181 2002 2054 2106 2 + 98 86 2 184 2003 2055 2107 2 + 100 86 2 0 2004 2056 2108 2 + 102 86 2 -1 2005 2057 2109 2 + 0 88 2 1954 2006 2058 2110 2 + 2 88 2 1955 2007 2059 2111 2 + 4 88 2 1956 2008 2060 2112 2 + 6 88 2 1957 2009 2061 2113 2 + 8 88 2 1958 2010 2062 2114 2 + 10 88 2 1959 2011 2063 2115 2 + 12 88 2 1960 2012 2064 2116 2 + 14 88 2 1961 2013 2065 2117 2 + 16 88 2 1962 2014 2066 2118 2 + 18 88 2 1963 2015 2067 2119 2 + 20 88 2 1964 2016 2068 2120 2 + 22 88 2 1965 2017 2069 2121 2 + 24 88 2 1966 2018 2070 2122 2 + 26 88 2 1967 2019 2071 2123 2 + 28 88 2 1968 2020 2072 2124 2 + 30 88 2 1969 2021 2073 2125 2 + 32 88 2 1970 2022 2074 2126 2 + 34 88 2 1971 2023 2075 2127 2 + 36 88 2 1972 2024 2076 2128 2 + 38 88 2 1973 2025 2077 2129 2 + 40 88 2 1974 2026 2078 2130 2 + 42 88 2 1975 2027 2079 2131 2 + 44 88 2 1976 2028 2080 2132 2 + 46 88 2 1977 2029 2081 2133 2 + 48 88 2 1978 2030 2082 2134 2 + 50 88 2 1979 2031 2083 2135 2 + 52 88 2 1980 2032 2084 2136 2 + 54 88 2 1981 2033 2085 2137 2 + 56 88 2 1982 2034 2086 2138 2 + 58 88 2 1983 2035 2087 2139 2 + 60 88 2 1984 2036 2088 2140 2 + 62 88 2 1985 2037 2089 2141 2 + 64 88 2 1986 2038 2090 2142 2 + 66 88 2 1987 2039 2091 2143 2 + 68 88 2 1988 2040 2092 2144 2 + 70 88 2 1989 2041 2093 2145 2 + 72 88 2 1990 2042 2094 2146 2 + 74 88 2 1991 2043 2095 2147 2 + 76 88 2 1992 2044 2096 2148 2 + 78 88 2 1993 2045 2097 2149 2 + 80 88 2 1994 2046 2098 2150 2 + 82 88 2 1995 2047 2099 2151 2 + 84 88 2 1996 2048 2100 2152 2 + 86 88 2 1997 2049 2101 2153 2 + 88 88 2 1998 2050 2102 2154 2 + 90 88 2 1999 2051 2103 2155 2 + 92 88 2 2000 2052 2104 2156 2 + 94 88 2 2001 2053 2105 2157 2 + 96 88 2 2002 2054 2106 2158 2 + 98 88 2 2003 2055 2107 2159 2 + 100 88 2 2004 2056 2108 2160 2 + 102 88 2 2005 2057 2109 2161 2 + 0 90 2 2006 2058 2110 2162 2 + 2 90 2 2007 2059 2111 2163 2 + 4 90 2 2008 2060 2112 2164 2 + 6 90 2 2009 2061 2113 2165 2 + 8 90 2 2010 2062 2114 2166 2 + 10 90 2 2011 2063 2115 2167 2 + 12 90 2 2012 2064 2116 2168 2 + 14 90 2 2013 2065 2117 2169 2 + 16 90 2 2014 2066 2118 2170 2 + 18 90 2 2015 2067 2119 2171 2 + 20 90 2 2016 2068 2120 2172 2 + 22 90 2 2017 2069 2121 2173 2 + 24 90 2 2018 2070 2122 2174 2 + 26 90 2 2019 2071 2123 2175 2 + 28 90 2 2020 2072 2124 2176 2 + 30 90 2 2021 2073 2125 2177 2 + 32 90 2 2022 2074 2126 2178 2 + 34 90 2 2023 2075 2127 2179 2 + 36 90 2 2024 2076 2128 2180 2 + 38 90 2 2025 2077 2129 2181 2 + 40 90 2 2026 2078 2130 2182 2 + 42 90 2 2027 2079 2131 2183 2 + 44 90 2 2028 2080 2132 2184 2 + 46 90 2 2029 2081 2133 2185 2 + 48 90 2 2030 2082 2134 2186 2 + 50 90 2 2031 2083 2135 2187 2 + 52 90 2 2032 2084 2136 2188 2 + 54 90 2 2033 2085 2137 2189 2 + 56 90 2 2034 2086 2138 2190 2 + 58 90 2 2035 2087 2139 2191 2 + 60 90 2 2036 2088 2140 2192 2 + 62 90 2 2037 2089 2141 2193 2 + 64 90 2 2038 2090 2142 2194 2 + 66 90 2 2039 2091 2143 2195 2 + 68 90 2 2040 2092 2144 2196 2 + 70 90 2 2041 2093 2145 2197 2 + 72 90 2 2042 2094 2146 2198 2 + 74 90 2 2043 2095 2147 2199 2 + 76 90 2 2044 2096 2148 2200 2 + 78 90 2 2045 2097 2149 2201 2 + 80 90 2 2046 2098 2150 2202 2 + 82 90 2 2047 2099 2151 2203 2 + 84 90 2 2048 2100 2152 2204 2 + 86 90 2 2049 2101 2153 2205 2 + 88 90 2 2050 2102 2154 2206 2 + 90 90 2 2051 2103 2155 2207 2 + 92 90 2 2052 2104 2156 2208 2 + 94 90 2 2053 2105 2157 2209 2 + 96 90 2 2054 2106 2158 2210 2 + 98 90 2 2055 2107 2159 2211 2 + 100 90 2 2056 2108 2160 2212 2 + 102 90 2 2057 2109 2161 2213 2 + 0 92 2 2058 2110 2162 2214 2 + 2 92 2 2059 2111 2163 2215 2 + 4 92 2 2060 2112 2164 2216 2 + 6 92 2 2061 2113 2165 2217 2 + 8 92 2 2062 2114 2166 2218 2 + 10 92 2 2063 2115 2167 2219 2 + 12 92 2 2064 2116 2168 2220 2 + 14 92 2 2065 2117 2169 2221 2 + 16 92 2 2066 2118 2170 2222 2 + 18 92 2 2067 2119 2171 2223 2 + 20 92 2 2068 2120 2172 2224 2 + 22 92 2 2069 2121 2173 2225 2 + 24 92 2 2070 2122 2174 2226 2 + 26 92 2 2071 2123 2175 2227 2 + 28 92 2 2072 2124 2176 2228 2 + 30 92 2 2073 2125 2177 2229 2 + 32 92 2 2074 2126 2178 2230 2 + 34 92 2 2075 2127 2179 2231 2 + 36 92 2 2076 2128 2180 2232 2 + 38 92 2 2077 2129 2181 2233 2 + 40 92 2 2078 2130 2182 2234 2 + 42 92 2 2079 2131 2183 2235 2 + 44 92 2 2080 2132 2184 2236 2 + 46 92 2 2081 2133 2185 2237 2 + 48 92 2 2082 2134 2186 2238 2 + 50 92 2 2083 2135 2187 2239 2 + 52 92 2 2084 2136 2188 2240 2 + 54 92 2 2085 2137 2189 2241 2 + 56 92 2 2086 2138 2190 2242 2 + 58 92 2 2087 2139 2191 2243 2 + 60 92 2 2088 2140 2192 2244 2 + 62 92 2 2089 2141 2193 2245 2 + 64 92 2 2090 2142 2194 2246 2 + 66 92 2 2091 2143 2195 2247 2 + 68 92 2 2092 2144 2196 2248 2 + 70 92 2 2093 2145 2197 2249 2 + 72 92 2 2094 2146 2198 2250 2 + 74 92 2 2095 2147 2199 2251 2 + 76 92 2 2096 2148 2200 2252 2 + 78 92 2 2097 2149 2201 2253 2 + 80 92 2 2098 2150 2202 2254 2 + 82 92 2 2099 2151 2203 2255 2 + 84 92 2 2100 2152 2204 2256 2 + 86 92 2 2101 2153 2205 2257 2 + 88 92 2 2102 2154 2206 2258 2 + 90 92 2 2103 2155 2207 2259 2 + 92 92 2 2104 2156 2208 2260 2 + 94 92 2 2105 2157 2209 2261 2 + 96 92 2 2106 2158 2210 2262 2 + 98 92 2 2107 2159 2211 2263 2 + 100 92 2 2108 2160 2212 2264 2 + 102 92 2 2109 2161 2213 2265 2 + 0 94 2 2110 2162 2214 2266 2 + 2 94 2 2111 2163 2215 2267 2 + 4 94 2 2112 2164 2216 2268 2 + 6 94 2 2113 2165 2217 2269 2 + 8 94 2 2114 2166 2218 2270 2 + 10 94 2 2115 2167 2219 2271 2 + 12 94 2 2116 2168 2220 2272 2 + 14 94 2 2117 2169 2221 2273 2 + 16 94 2 2118 2170 2222 2274 2 + 18 94 2 2119 2171 2223 2275 2 + 20 94 2 2120 2172 2224 2276 2 + 22 94 2 2121 2173 2225 2277 2 + 24 94 2 2122 2174 2226 2278 2 + 26 94 2 2123 2175 2227 2279 2 + 28 94 2 2124 2176 2228 2280 2 + 30 94 2 2125 2177 2229 2281 2 + 32 94 2 2126 2178 2230 2282 2 + 34 94 2 2127 2179 2231 2283 2 + 36 94 2 2128 2180 2232 2284 2 + 38 94 2 2129 2181 2233 2285 2 + 40 94 2 2130 2182 2234 2286 2 + 42 94 2 2131 2183 2235 2287 2 + 44 94 2 2132 2184 2236 2288 2 + 46 94 2 2133 2185 2237 2289 2 + 48 94 2 2134 2186 2238 2290 2 + 50 94 2 2135 2187 2239 2291 2 + 52 94 2 2136 2188 2240 2292 2 + 54 94 2 2137 2189 2241 2293 2 + 56 94 2 2138 2190 2242 2294 2 + 58 94 2 2139 2191 2243 2295 2 + 60 94 2 2140 2192 2244 2296 2 + 62 94 2 2141 2193 2245 2297 2 + 64 94 2 2142 2194 2246 2298 2 + 66 94 2 2143 2195 2247 2299 2 + 68 94 2 2144 2196 2248 2300 2 + 70 94 2 2145 2197 2249 2301 2 + 72 94 2 2146 2198 2250 2302 2 + 74 94 2 2147 2199 2251 2303 2 + 76 94 2 2148 2200 2252 2304 2 + 78 94 2 2149 2201 2253 2305 2 + 80 94 2 2150 2202 2254 2306 2 + 82 94 2 2151 2203 2255 2307 2 + 84 94 2 2152 2204 2256 2308 2 + 86 94 2 2153 2205 2257 2309 2 + 88 94 2 2154 2206 2258 2310 2 + 90 94 2 2155 2207 2259 2311 2 + 92 94 2 2156 2208 2260 2312 2 + 94 94 2 2157 2209 2261 2313 2 + 96 94 2 2158 2210 2262 2314 2 + 98 94 2 2159 2211 2263 2315 2 + 100 94 2 2160 2212 2264 2316 2 + 102 94 2 2161 2213 2265 2317 2 + 0 96 2 2162 2214 2266 2318 2 + 2 96 2 2163 2215 2267 2319 2 + 4 96 2 2164 2216 2268 2320 2 + 6 96 2 2165 2217 2269 2321 2 + 8 96 2 2166 2218 2270 2322 2 + 10 96 2 2167 2219 2271 2323 2 + 12 96 2 2168 2220 2272 2324 2 + 14 96 2 2169 2221 2273 2325 2 + 16 96 2 2170 2222 2274 2326 2 + 18 96 2 2171 2223 2275 2327 2 + 20 96 2 2172 2224 2276 2328 2 + 22 96 2 2173 2225 2277 2329 2 + 24 96 2 2174 2226 2278 2330 2 + 26 96 2 2175 2227 2279 2331 2 + 28 96 2 2176 2228 2280 2332 2 + 30 96 2 2177 2229 2281 2333 2 + 32 96 2 2178 2230 2282 2334 2 + 34 96 2 2179 2231 2283 2335 2 + 36 96 2 2180 2232 2284 2336 2 + 38 96 2 2181 2233 2285 2337 2 + 40 96 2 2182 2234 2286 2338 2 + 42 96 2 2183 2235 2287 2339 2 + 44 96 2 2184 2236 2288 2340 2 + 46 96 2 2185 2237 2289 2341 2 + 48 96 2 2186 2238 2290 2342 2 + 50 96 2 2187 2239 2291 2343 2 + 52 96 2 2188 2240 2292 2344 2 + 54 96 2 2189 2241 2293 2345 2 + 56 96 2 2190 2242 2294 2346 2 + 58 96 2 2191 2243 2295 2347 2 + 60 96 2 2192 2244 2296 2348 2 + 62 96 2 2193 2245 2297 2349 2 + 64 96 2 2194 2246 2298 2350 2 + 66 96 2 2195 2247 2299 2351 2 + 68 96 2 2196 2248 2300 2352 2 + 70 96 2 2197 2249 2301 2353 2 + 72 96 2 2198 2250 2302 2354 2 + 74 96 2 2199 2251 2303 2355 2 + 76 96 2 2200 2252 2304 2356 2 + 78 96 2 2201 2253 2305 2357 2 + 80 96 2 2202 2254 2306 2358 2 + 82 96 2 2203 2255 2307 2359 2 + 84 96 2 2204 2256 2308 2360 2 + 86 96 2 2205 2257 2309 2361 2 + 88 96 2 2206 2258 2310 2362 2 + 90 96 2 2207 2259 2311 2363 2 + 92 96 2 2208 2260 2312 2364 2 + 94 96 2 2209 2261 2313 2365 2 + 96 96 2 2210 2262 2314 2366 2 + 98 96 2 2211 2263 2315 2367 2 + 100 96 2 2212 2264 2316 2368 2 + 102 96 2 2213 2265 2317 2369 2 + 0 98 2 2214 2266 2318 2370 2 + 2 98 2 2215 2267 2319 2371 2 + 4 98 2 2216 2268 2320 2372 2 + 6 98 2 2217 2269 2321 2373 2 + 8 98 2 2218 2270 2322 2374 2 + 10 98 2 2219 2271 2323 2375 2 + 12 98 2 2220 2272 2324 2376 2 + 14 98 2 2221 2273 2325 2377 2 + 16 98 2 2222 2274 2326 2378 2 + 18 98 2 2223 2275 2327 2379 2 + 20 98 2 2224 2276 2328 2380 2 + 22 98 2 2225 2277 2329 2381 2 + 24 98 2 2226 2278 2330 2382 2 + 26 98 2 2227 2279 2331 2383 2 + 28 98 2 2228 2280 2332 2384 2 + 30 98 2 2229 2281 2333 2385 2 + 32 98 2 2230 2282 2334 2386 2 + 34 98 2 2231 2283 2335 2387 2 + 36 98 2 2232 2284 2336 2388 2 + 38 98 2 2233 2285 2337 2389 2 + 40 98 2 2234 2286 2338 2390 2 + 42 98 2 2235 2287 2339 2391 2 + 44 98 2 2236 2288 2340 2392 2 + 46 98 2 2237 2289 2341 2393 2 + 48 98 2 2238 2290 2342 2394 2 + 50 98 2 2239 2291 2343 2395 2 + 52 98 2 2240 2292 2344 2396 2 + 54 98 2 2241 2293 2345 2397 2 + 56 98 2 2242 2294 2346 2398 2 + 58 98 2 2243 2295 2347 2399 2 + 60 98 2 2244 2296 2348 2400 2 + 62 98 2 2245 2297 2349 2401 2 + 64 98 2 2246 2298 2350 2402 2 + 66 98 2 2247 2299 2351 2403 2 + 68 98 2 2248 2300 2352 2404 2 + 70 98 2 2249 2301 2353 2405 2 + 72 98 2 2250 2302 2354 2406 2 + 74 98 2 2251 2303 2355 2407 2 + 76 98 2 2252 2304 2356 2408 2 + 78 98 2 2253 2305 2357 2409 2 + 80 98 2 2254 2306 2358 2410 2 + 82 98 2 2255 2307 2359 2411 2 + 84 98 2 2256 2308 2360 2412 2 + 86 98 2 2257 2309 2361 2413 2 + 88 98 2 2258 2310 2362 2414 2 + 90 98 2 2259 2311 2363 2415 2 + 92 98 2 2260 2312 2364 2416 2 + 94 98 2 2261 2313 2365 2417 2 + 96 98 2 2262 2314 2366 2418 2 + 98 98 2 2263 2315 2367 2419 2 + 100 98 2 2264 2316 2368 2420 2 + 102 98 2 2265 2317 2369 2421 2 + 0 100 2 2266 2318 2370 2422 2 + 2 100 2 2267 2319 2371 2423 2 + 4 100 2 2268 2320 2372 2424 2 + 6 100 2 2269 2321 2373 2425 2 + 8 100 2 2270 2322 2374 2426 2 + 10 100 2 2271 2323 2375 2427 2 + 12 100 2 2272 2324 2376 2428 2 + 14 100 2 2273 2325 2377 2429 2 + 16 100 2 2274 2326 2378 2430 2 + 18 100 2 2275 2327 2379 2431 2 + 20 100 2 2276 2328 2380 2432 2 + 22 100 2 2277 2329 2381 2433 2 + 24 100 2 2278 2330 2382 2434 2 + 26 100 2 2279 2331 2383 2435 2 + 28 100 2 2280 2332 2384 2436 2 + 30 100 2 2281 2333 2385 2437 2 + 32 100 2 2282 2334 2386 2438 2 + 34 100 2 2283 2335 2387 2439 2 + 36 100 2 2284 2336 2388 2440 2 + 38 100 2 2285 2337 2389 2441 2 + 40 100 2 2286 2338 2390 2442 2 + 42 100 2 2287 2339 2391 2443 2 + 44 100 2 2288 2340 2392 2444 2 + 46 100 2 2289 2341 2393 2445 2 + 48 100 2 2290 2342 2394 2446 2 + 50 100 2 2291 2343 2395 2447 2 + 52 100 2 2292 2344 2396 2448 2 + 54 100 2 2293 2345 2397 2449 2 + 56 100 2 2294 2346 2398 2450 2 + 58 100 2 2295 2347 2399 2451 2 + 60 100 2 2296 2348 2400 2452 2 + 62 100 2 2297 2349 2401 2453 2 + 64 100 2 2298 2350 2402 2454 2 + 66 100 2 2299 2351 2403 2455 2 + 68 100 2 2300 2352 2404 2456 2 + 70 100 2 2301 2353 2405 2457 2 + 72 100 2 2302 2354 2406 2458 2 + 74 100 2 2303 2355 2407 2459 2 + 76 100 2 2304 2356 2408 2460 2 + 78 100 2 2305 2357 2409 2461 2 + 80 100 2 2306 2358 2410 2462 2 + 82 100 2 2307 2359 2411 2463 2 + 84 100 2 2308 2360 2412 2464 2 + 86 100 2 2309 2361 2413 2465 2 + 88 100 2 2310 2362 2414 2466 2 + 90 100 2 2311 2363 2415 2467 2 + 92 100 2 2312 2364 2416 2468 2 + 94 100 2 2313 2365 2417 2469 2 + 96 100 2 2314 2366 2418 2470 2 + 98 100 2 2315 2367 2419 2471 2 + 100 100 2 2316 2368 2420 2472 2 + 102 100 2 2317 2369 2421 2473 2 + 0 102 2 2318 2370 2422 2474 2 + 2 102 2 2319 2371 2423 2475 2 + 4 102 2 2320 2372 2424 2476 2 + 6 102 2 2321 2373 2425 2477 2 + 8 102 2 2322 2374 2426 2478 2 + 10 102 2 2323 2375 2427 2479 2 + 12 102 2 2324 2376 2428 2480 2 + 14 102 2 2325 2377 2429 2481 2 + 16 102 2 2326 2378 2430 2482 2 + 18 102 2 2327 2379 2431 2483 2 + 20 102 2 2328 2380 2432 2484 2 + 22 102 2 2329 2381 2433 2485 2 + 24 102 2 2330 2382 2434 2486 2 + 26 102 2 2331 2383 2435 2487 2 + 28 102 2 2332 2384 2436 2488 2 + 30 102 2 2333 2385 2437 2489 2 + 32 102 2 2334 2386 2438 2490 2 + 34 102 2 2335 2387 2439 2491 2 + 36 102 2 2336 2388 2440 2492 2 + 38 102 2 2337 2389 2441 2493 2 + 40 102 2 2338 2390 2442 2494 2 + 42 102 2 2339 2391 2443 2495 2 + 44 102 2 2340 2392 2444 2496 2 + 46 102 2 2341 2393 2445 2497 2 + 48 102 2 2342 2394 2446 2498 2 + 50 102 2 2343 2395 2447 2499 2 + 52 102 2 2344 2396 2448 2500 2 + 54 102 2 2345 2397 2449 2501 2 + 56 102 2 2346 2398 2450 2502 2 + 58 102 2 2347 2399 2451 2503 2 + 60 102 2 2348 2400 2452 2504 2 + 62 102 2 2349 2401 2453 2505 2 + 64 102 2 2350 2402 2454 2506 2 + 66 102 2 2351 2403 2455 2507 2 + 68 102 2 2352 2404 2456 2508 2 + 70 102 2 2353 2405 2457 2509 2 + 72 102 2 2354 2406 2458 2510 2 + 74 102 2 2355 2407 2459 2511 2 + 76 102 2 2356 2408 2460 2512 2 + 78 102 2 2357 2409 2461 2513 2 + 80 102 2 2358 2410 2462 2514 2 + 82 102 2 2359 2411 2463 2515 2 + 84 102 2 2360 2412 2464 2516 2 + 86 102 2 2361 2413 2465 2517 2 + 88 102 2 2362 2414 2466 2518 2 + 90 102 2 2363 2415 2467 2519 2 + 92 102 2 2364 2416 2468 2520 2 + 94 102 2 2365 2417 2469 2521 2 + 96 102 2 2366 2418 2470 2522 2 + 98 102 2 2367 2419 2471 2523 2 + 100 102 2 2368 2420 2472 2524 2 + 102 102 2 2369 2421 2473 2525 2 + 0 104 2 2370 2422 2474 2526 2 + 2 104 2 2371 2423 2475 2527 2 + 4 104 2 2372 2424 2476 2528 2 + 6 104 2 2373 2425 2477 2529 2 + 8 104 2 2374 2426 2478 2530 2 + 10 104 2 2375 2427 2479 2531 2 + 12 104 2 2376 2428 2480 2532 2 + 14 104 2 2377 2429 2481 2533 2 + 16 104 2 2378 2430 2482 2534 2 + 18 104 2 2379 2431 2483 2535 2 + 20 104 2 2380 2432 2484 2536 2 + 22 104 2 2381 2433 2485 2537 2 + 24 104 2 2382 2434 2486 2538 2 + 26 104 2 2383 2435 2487 2539 2 + 28 104 2 2384 2436 2488 2540 2 + 30 104 2 2385 2437 2489 2541 2 + 32 104 2 2386 2438 2490 2542 2 + 34 104 2 2387 2439 2491 2543 2 + 36 104 2 2388 2440 2492 2544 2 + 38 104 2 2389 2441 2493 2545 2 + 40 104 2 2390 2442 2494 2546 2 + 42 104 2 2391 2443 2495 2547 2 + 44 104 2 2392 2444 2496 2548 2 + 46 104 2 2393 2445 2497 2549 2 + 48 104 2 2394 2446 2498 2550 2 + 50 104 2 2395 2447 2499 2551 2 + 52 104 2 2396 2448 2500 2552 2 + 54 104 2 2397 2449 2501 2553 2 + 56 104 2 2398 2450 2502 2554 2 + 58 104 2 2399 2451 2503 2555 2 + 60 104 2 2400 2452 2504 2556 2 + 62 104 2 2401 2453 2505 2557 2 + 64 104 2 2402 2454 2506 2558 2 + 66 104 2 2403 2455 2507 2559 2 + 68 104 2 2404 2456 2508 2560 2 + 70 104 2 2405 2457 2509 2561 2 + 72 104 2 2406 2458 2510 2562 2 + 74 104 2 2407 2459 2511 2563 2 + 76 104 2 2408 2460 2512 2564 2 + 78 104 2 2409 2461 2513 2565 2 + 80 104 2 2410 2462 2514 2566 2 + 82 104 2 2411 2463 2515 2567 2 + 84 104 2 2412 2464 2516 2568 2 + 86 104 2 2413 2465 2517 2569 2 + 88 104 2 2414 2466 2518 2570 2 + 90 104 2 2415 2467 2519 2571 2 + 92 104 2 2416 2468 2520 2572 2 + 94 104 2 2417 2469 2521 2573 2 + 96 104 2 2418 2470 2522 2574 2 + 98 104 2 2419 2471 2523 2575 2 + 100 104 2 2420 2472 2524 2576 2 + 102 104 2 2421 2473 2525 2577 2 + 0 106 2 2422 2474 2526 2578 2 + 2 106 2 2423 2475 2527 2579 2 + 4 106 2 2424 2476 2528 2580 2 + 6 106 2 2425 2477 2529 2581 2 + 8 106 2 2426 2478 2530 2582 2 + 10 106 2 2427 2479 2531 2583 2 + 12 106 2 2428 2480 2532 2584 2 + 14 106 2 2429 2481 2533 2585 2 + 16 106 2 2430 2482 2534 2586 2 + 18 106 2 2431 2483 2535 2587 2 + 20 106 2 2432 2484 2536 2588 2 + 22 106 2 2433 2485 2537 2589 2 + 24 106 2 2434 2486 2538 2590 2 + 26 106 2 2435 2487 2539 2591 2 + 28 106 2 2436 2488 2540 2592 2 + 30 106 2 2437 2489 2541 2593 2 + 32 106 2 2438 2490 2542 2594 2 + 34 106 2 2439 2491 2543 2595 2 + 36 106 2 2440 2492 2544 2596 2 + 38 106 2 2441 2493 2545 2597 2 + 40 106 2 2442 2494 2546 2598 2 + 42 106 2 2443 2495 2547 2599 2 + 44 106 2 2444 2496 2548 2600 2 + 46 106 2 2445 2497 2549 2601 2 + 48 106 2 2446 2498 2550 2602 2 + 50 106 2 2447 2499 2551 2603 2 + 52 106 2 2448 2500 2552 2604 2 + 54 106 2 2449 2501 2553 2605 2 + 56 106 2 2450 2502 2554 2606 2 + 58 106 2 2451 2503 2555 2607 2 + 60 106 2 2452 2504 2556 2608 2 + 62 106 2 2453 2505 2557 2609 2 + 64 106 2 2454 2506 2558 2610 2 + 66 106 2 2455 2507 2559 2611 2 + 68 106 2 2456 2508 2560 2612 2 + 70 106 2 2457 2509 2561 2613 2 + 72 106 2 2458 2510 2562 2614 2 + 74 106 2 2459 2511 2563 2615 2 + 76 106 2 2460 2512 2564 2616 2 + 78 106 2 2461 2513 2565 2617 2 + 80 106 2 2462 2514 2566 2618 2 + 82 106 2 2463 2515 2567 2619 2 + 84 106 2 2464 2516 2568 2620 2 + 86 106 2 2465 2517 2569 2621 2 + 88 106 2 2466 2518 2570 2622 2 + 90 106 2 2467 2519 2571 2623 2 + 92 106 2 2468 2520 2572 2624 2 + 94 106 2 2469 2521 2573 2625 2 + 96 106 2 2470 2522 2574 2626 2 + 98 106 2 2471 2523 2575 2627 2 + 100 106 2 2472 2524 2576 2628 2 + 102 106 2 2473 2525 2577 2629 2 + 0 108 2 2474 2526 2578 2630 2 + 2 108 2 2475 2527 2579 2631 2 + 4 108 2 2476 2528 2580 2632 2 + 6 108 2 2477 2529 2581 2633 2 + 8 108 2 2478 2530 2582 2634 2 + 10 108 2 2479 2531 2583 2635 2 + 12 108 2 2480 2532 2584 2636 2 + 14 108 2 2481 2533 2585 2637 2 + 16 108 2 2482 2534 2586 2638 2 + 18 108 2 2483 2535 2587 2639 2 + 20 108 2 2484 2536 2588 2640 2 + 22 108 2 2485 2537 2589 2641 2 + 24 108 2 2486 2538 2590 2642 2 + 26 108 2 2487 2539 2591 2643 2 + 28 108 2 2488 2540 2592 2644 2 + 30 108 2 2489 2541 2593 2645 2 + 32 108 2 2490 2542 2594 2646 2 + 34 108 2 2491 2543 2595 2647 2 + 36 108 2 2492 2544 2596 2648 2 + 38 108 2 2493 2545 2597 2649 2 + 40 108 2 2494 2546 2598 2650 2 + 42 108 2 2495 2547 2599 2651 2 + 44 108 2 2496 2548 2600 2652 2 + 46 108 2 2497 2549 2601 2653 2 + 48 108 2 2498 2550 2602 2654 2 + 50 108 2 2499 2551 2603 2655 2 + 52 108 2 2500 2552 2604 2656 2 + 54 108 2 2501 2553 2605 2657 2 + 56 108 2 2502 2554 2606 2658 2 + 58 108 2 2503 2555 2607 2659 2 + 60 108 2 2504 2556 2608 2660 2 + 62 108 2 2505 2557 2609 2661 2 + 64 108 2 2506 2558 2610 2662 2 + 66 108 2 2507 2559 2611 2663 2 + 68 108 2 2508 2560 2612 2664 2 + 70 108 2 2509 2561 2613 2665 2 + 72 108 2 2510 2562 2614 2666 2 + 74 108 2 2511 2563 2615 2667 2 + 76 108 2 2512 2564 2616 2668 2 + 78 108 2 2513 2565 2617 2669 2 + 80 108 2 2514 2566 2618 2670 2 + 82 108 2 2515 2567 2619 2671 2 + 84 108 2 2516 2568 2620 2672 2 + 86 108 2 2517 2569 2621 2673 2 + 88 108 2 2518 2570 2622 2674 2 + 90 108 2 2519 2571 2623 2675 2 + 92 108 2 2520 2572 2624 2676 2 + 94 108 2 2521 2573 2625 2677 2 + 96 108 2 2522 2574 2626 2678 2 + 98 108 2 2523 2575 2627 2679 2 + 100 108 2 2524 2576 2628 2680 2 + 102 108 2 2525 2577 2629 2681 2 + 0 110 2 2526 2578 2630 2682 2 + 2 110 2 2527 2579 2631 2683 2 + 4 110 2 2528 2580 2632 2684 2 + 6 110 2 2529 2581 2633 2685 2 + 8 110 2 2530 2582 2634 2686 2 + 10 110 2 2531 2583 2635 2687 2 + 12 110 2 2532 2584 2636 2688 2 + 14 110 2 2533 2585 2637 2689 2 + 16 110 2 2534 2586 2638 2690 2 + 18 110 2 2535 2587 2639 2691 2 + 20 110 2 2536 2588 2640 2692 2 + 22 110 2 2537 2589 2641 2693 2 + 24 110 2 2538 2590 2642 2694 2 + 26 110 2 2539 2591 2643 2695 2 + 28 110 2 2540 2592 2644 2696 2 + 30 110 2 2541 2593 2645 2697 2 + 32 110 2 2542 2594 2646 2698 2 + 34 110 2 2543 2595 2647 2699 2 + 36 110 2 2544 2596 2648 2700 2 + 38 110 2 2545 2597 2649 2701 2 + 40 110 2 2546 2598 2650 2702 2 + 42 110 2 2547 2599 2651 2703 2 + 44 110 2 2548 2600 2652 2704 2 + 46 110 2 2549 2601 2653 2705 2 + 48 110 2 2550 2602 2654 2706 2 + 50 110 2 2551 2603 2655 2707 2 + 52 110 2 2552 2604 2656 2708 2 + 54 110 2 2553 2605 2657 2709 2 + 56 110 2 2554 2606 2658 2710 2 + 58 110 2 2555 2607 2659 2711 2 + 60 110 2 2556 2608 2660 2712 2 + 62 110 2 2557 2609 2661 2713 2 + 64 110 2 2558 2610 2662 2714 2 + 66 110 2 2559 2611 2663 2715 2 + 68 110 2 2560 2612 2664 2716 2 + 70 110 2 2561 2613 2665 2717 2 + 72 110 2 2562 2614 2666 2718 2 + 74 110 2 2563 2615 2667 2719 2 + 76 110 2 2564 2616 2668 2720 2 + 78 110 2 2565 2617 2669 2721 2 + 80 110 2 2566 2618 2670 2722 2 + 82 110 2 2567 2619 2671 2723 2 + 84 110 2 2568 2620 2672 2724 2 + 86 110 2 2569 2621 2673 2725 2 + 88 110 2 2570 2622 2674 2726 2 + 90 110 2 2571 2623 2675 2727 2 + 92 110 2 2572 2624 2676 2728 2 + 94 110 2 2573 2625 2677 2729 2 + 96 110 2 2574 2626 2678 2730 2 + 98 110 2 2575 2627 2679 2731 2 + 100 110 2 2576 2628 2680 2732 2 + 102 110 2 2577 2629 2681 2733 2 + 0 112 2 2578 2630 2682 2734 2 + 2 112 2 2579 2631 2683 2735 2 + 4 112 2 2580 2632 2684 2736 2 + 6 112 2 2581 2633 2685 2737 2 + 8 112 2 2582 2634 2686 2738 2 + 10 112 2 2583 2635 2687 2739 2 + 12 112 2 2584 2636 2688 2740 2 + 14 112 2 2585 2637 2689 2741 2 + 16 112 2 2586 2638 2690 2742 2 + 18 112 2 2587 2639 2691 2743 2 + 20 112 2 2588 2640 2692 2744 2 + 22 112 2 2589 2641 2693 2745 2 + 24 112 2 2590 2642 2694 2746 2 + 26 112 2 2591 2643 2695 2747 2 + 28 112 2 2592 2644 2696 2748 2 + 30 112 2 2593 2645 2697 2749 2 + 32 112 2 2594 2646 2698 2750 2 + 34 112 2 2595 2647 2699 2751 2 + 36 112 2 2596 2648 2700 2752 2 + 38 112 2 2597 2649 2701 2753 2 + 40 112 2 2598 2650 2702 2754 2 + 42 112 2 2599 2651 2703 2755 2 + 44 112 2 2600 2652 2704 2756 2 + 46 112 2 2601 2653 2705 2757 2 + 48 112 2 2602 2654 2706 2758 2 + 50 112 2 2603 2655 2707 2759 2 + 52 112 2 2604 2656 2708 2760 2 + 54 112 2 2605 2657 2709 2761 2 + 56 112 2 2606 2658 2710 2762 2 + 58 112 2 2607 2659 2711 2763 2 + 60 112 2 2608 2660 2712 2764 2 + 62 112 2 2609 2661 2713 2765 2 + 64 112 2 2610 2662 2714 2766 2 + 66 112 2 2611 2663 2715 2767 2 + 68 112 2 2612 2664 2716 2768 2 + 70 112 2 2613 2665 2717 2769 2 + 72 112 2 2614 2666 2718 2770 2 + 74 112 2 2615 2667 2719 2771 2 + 76 112 2 2616 2668 2720 2772 2 + 78 112 2 2617 2669 2721 2773 2 + 80 112 2 2618 2670 2722 2774 2 + 82 112 2 2619 2671 2723 2775 2 + 84 112 2 2620 2672 2724 2776 2 + 86 112 2 2621 2673 2725 2777 2 + 88 112 2 2622 2674 2726 2778 2 + 90 112 2 2623 2675 2727 2779 2 + 92 112 2 2624 2676 2728 2780 2 + 94 112 2 2625 2677 2729 2781 2 + 96 112 2 2626 2678 2730 2782 2 + 98 112 2 2627 2679 2731 2783 2 + 100 112 2 2628 2680 2732 2784 2 + 102 112 2 2629 2681 2733 2785 2 + 0 114 2 2630 2682 2734 2786 2 + 2 114 2 2631 2683 2735 2787 2 + 4 114 2 2632 2684 2736 2788 2 + 6 114 2 2633 2685 2737 2789 2 + 8 114 2 2634 2686 2738 2790 2 + 10 114 2 2635 2687 2739 2791 2 + 12 114 2 2636 2688 2740 2792 2 + 14 114 2 2637 2689 2741 2793 2 + 16 114 2 2638 2690 2742 2794 2 + 18 114 2 2639 2691 2743 2795 2 + 20 114 2 2640 2692 2744 2796 2 + 22 114 2 2641 2693 2745 2797 2 + 24 114 2 2642 2694 2746 2798 2 + 26 114 2 2643 2695 2747 2799 2 + 28 114 2 2644 2696 2748 2800 2 + 30 114 2 2645 2697 2749 2801 2 + 32 114 2 2646 2698 2750 2802 2 + 34 114 2 2647 2699 2751 2803 2 + 36 114 2 2648 2700 2752 2804 2 + 38 114 2 2649 2701 2753 2805 2 + 40 114 2 2650 2702 2754 2806 2 + 42 114 2 2651 2703 2755 2807 2 + 44 114 2 2652 2704 2756 2808 2 + 46 114 2 2653 2705 2757 2809 2 + 48 114 2 2654 2706 2758 2810 2 + 50 114 2 2655 2707 2759 2811 2 + 52 114 2 2656 2708 2760 2812 2 + 54 114 2 2657 2709 2761 2813 2 + 56 114 2 2658 2710 2762 2814 2 + 58 114 2 2659 2711 2763 2815 2 + 60 114 2 2660 2712 2764 2816 2 + 62 114 2 2661 2713 2765 2817 2 + 64 114 2 2662 2714 2766 2818 2 + 66 114 2 2663 2715 2767 2819 2 + 68 114 2 2664 2716 2768 2820 2 + 70 114 2 2665 2717 2769 2821 2 + 72 114 2 2666 2718 2770 2822 2 + 74 114 2 2667 2719 2771 2823 2 + 76 114 2 2668 2720 2772 2824 2 + 78 114 2 2669 2721 2773 2825 2 + 80 114 2 2670 2722 2774 2826 2 + 82 114 2 2671 2723 2775 2827 2 + 84 114 2 2672 2724 2776 2828 2 + 86 114 2 2673 2725 2777 2829 2 + 88 114 2 2674 2726 2778 2830 2 + 90 114 2 2675 2727 2779 2831 2 + 92 114 2 2676 2728 2780 2832 2 + 94 114 2 2677 2729 2781 2833 2 + 96 114 2 2678 2730 2782 2834 2 + 98 114 2 2679 2731 2783 2835 2 + 100 114 2 2680 2732 2784 2836 2 + 102 114 2 2681 2733 2785 2837 2 + 0 116 2 2682 2734 2786 2838 2 + 2 116 2 2683 2735 2787 2839 2 + 4 116 2 2684 2736 2788 2840 2 + 6 116 2 2685 2737 2789 2841 2 + 8 116 2 2686 2738 2790 2842 2 + 10 116 2 2687 2739 2791 2843 2 + 12 116 2 2688 2740 2792 2844 2 + 14 116 2 2689 2741 2793 2845 2 + 16 116 2 2690 2742 2794 2846 2 + 18 116 2 2691 2743 2795 2847 2 + 20 116 2 2692 2744 2796 2848 2 + 22 116 2 2693 2745 2797 2849 2 + 24 116 2 2694 2746 2798 2850 2 + 26 116 2 2695 2747 2799 2851 2 + 28 116 2 2696 2748 2800 2852 2 + 30 116 2 2697 2749 2801 2853 2 + 32 116 2 2698 2750 2802 2854 2 + 34 116 2 2699 2751 2803 2855 2 + 36 116 2 2700 2752 2804 2856 2 + 38 116 2 2701 2753 2805 2857 2 + 40 116 2 2702 2754 2806 2858 2 + 42 116 2 2703 2755 2807 2859 2 + 44 116 2 2704 2756 2808 2860 2 + 46 116 2 2705 2757 2809 2861 2 + 48 116 2 2706 2758 2810 2862 2 + 50 116 2 2707 2759 2811 2863 2 + 52 116 2 2708 2760 2812 2864 2 + 54 116 2 2709 2761 2813 2865 2 + 56 116 2 2710 2762 2814 2866 2 + 58 116 2 2711 2763 2815 2867 2 + 60 116 2 2712 2764 2816 2868 2 + 62 116 2 2713 2765 2817 2869 2 + 64 116 2 2714 2766 2818 2870 2 + 66 116 2 2715 2767 2819 2871 2 + 68 116 2 2716 2768 2820 2872 2 + 70 116 2 2717 2769 2821 2873 2 + 72 116 2 2718 2770 2822 2874 2 + 74 116 2 2719 2771 2823 2875 2 + 76 116 2 2720 2772 2824 2876 2 + 78 116 2 2721 2773 2825 2877 2 + 80 116 2 2722 2774 2826 2878 2 + 82 116 2 2723 2775 2827 2879 2 + 84 116 2 2724 2776 2828 2880 2 + 86 116 2 2725 2777 2829 2881 2 + 88 116 2 2726 2778 2830 2882 2 + 90 116 2 2727 2779 2831 2883 2 + 92 116 2 2728 2780 2832 2884 2 + 94 116 2 2729 2781 2833 2885 2 + 96 116 2 2730 2782 2834 2886 2 + 98 116 2 2731 2783 2835 2887 2 + 100 116 2 2732 2784 2836 2888 2 + 102 116 2 2733 2785 2837 2889 2 + 0 118 2 2734 2786 2838 -1 2 + 2 118 2 2735 2787 2839 -1 2 + 4 118 2 2736 2788 2840 -1 2 + 6 118 2 2737 2789 2841 -1 2 + 8 118 2 2738 2790 2842 -1 2 + 10 118 2 2739 2791 2843 -1 2 + 12 118 2 2740 2792 2844 -1 2 + 14 118 2 2741 2793 2845 -1 2 + 16 118 2 2742 2794 2846 -1 2 + 18 118 2 2743 2795 2847 -1 2 + 20 118 2 2744 2796 2848 -1 2 + 22 118 2 2745 2797 2849 -1 2 + 24 118 2 2746 2798 2850 -1 2 + 26 118 2 2747 2799 2851 -1 2 + 28 118 2 2748 2800 2852 -1 2 + 30 118 2 2749 2801 2853 -1 2 + 32 118 2 2750 2802 2854 -1 2 + 34 118 2 2751 2803 2855 -1 2 + 36 118 2 2752 2804 2856 -1 2 + 38 118 2 2753 2805 2857 -1 2 + 40 118 2 2754 2806 2858 -1 2 + 42 118 2 2755 2807 2859 -1 2 + 44 118 2 2756 2808 2860 -1 2 + 46 118 2 2757 2809 2861 -1 2 + 48 118 2 2758 2810 2862 -1 2 + 50 118 2 2759 2811 2863 -1 2 + 52 118 2 2760 2812 2864 -1 2 + 54 118 2 2761 2813 2865 -1 2 + 56 118 2 2762 2814 2866 -1 2 + 58 118 2 2763 2815 2867 -1 2 + 60 118 2 2764 2816 2868 -1 2 + 62 118 2 2765 2817 2869 -1 2 + 64 118 2 2766 2818 2870 -1 2 + 66 118 2 2767 2819 2871 -1 2 + 68 118 2 2768 2820 2872 -1 2 + 70 118 2 2769 2821 2873 -1 2 + 72 118 2 2770 2822 2874 -1 2 + 74 118 2 2771 2823 2875 -1 2 + 76 118 2 2772 2824 2876 -1 2 + 78 118 2 2773 2825 2877 -1 2 + 80 118 2 2774 2826 2878 -1 2 + 82 118 2 2775 2827 2879 -1 2 + 84 118 2 2776 2828 2880 -1 2 + 86 118 2 2777 2829 2881 -1 2 + 88 118 2 2778 2830 2882 -1 2 + 90 118 2 2779 2831 2883 -1 2 + 92 118 2 2780 2832 2884 -1 2 + 94 118 2 2781 2833 2885 -1 2 + 96 118 2 2782 2834 2886 -1 2 + 98 118 2 2783 2835 2887 -1 2 + 100 118 2 2784 2836 2888 -1 2 + 102 118 2 2785 2837 2889 -1 2 + 0 120 2 2786 2838 -1 -1 2 + 2 120 2 2787 2839 -1 -1 2 + 4 120 2 2788 2840 -1 -1 2 + 6 120 2 2789 2841 -1 -1 2 + 8 120 2 2790 2842 -1 -1 2 + 10 120 2 2791 2843 -1 -1 2 + 12 120 2 2792 2844 -1 -1 2 + 14 120 2 2793 2845 -1 -1 2 + 16 120 2 2794 2846 -1 -1 2 + 18 120 2 2795 2847 -1 -1 2 + 20 120 2 2796 2848 -1 -1 2 + 22 120 2 2797 2849 -1 -1 2 + 24 120 2 2798 2850 -1 -1 2 + 26 120 2 2799 2851 -1 -1 2 + 28 120 2 2800 2852 -1 -1 2 + 30 120 2 2801 2853 -1 -1 2 + 32 120 2 2802 2854 -1 -1 2 + 34 120 2 2803 2855 -1 -1 2 + 36 120 2 2804 2856 -1 -1 2 + 38 120 2 2805 2857 -1 -1 2 + 40 120 2 2806 2858 -1 -1 2 + 42 120 2 2807 2859 -1 -1 2 + 44 120 2 2808 2860 -1 -1 2 + 46 120 2 2809 2861 -1 -1 2 + 48 120 2 2810 2862 -1 -1 2 + 50 120 2 2811 2863 -1 -1 2 + 52 120 2 2812 2864 -1 -1 2 + 54 120 2 2813 2865 -1 -1 2 + 56 120 2 2814 2866 -1 -1 2 + 58 120 2 2815 2867 -1 -1 2 + 60 120 2 2816 2868 -1 -1 2 + 62 120 2 2817 2869 -1 -1 2 + 64 120 2 2818 2870 -1 -1 2 + 66 120 2 2819 2871 -1 -1 2 + 68 120 2 2820 2872 -1 -1 2 + 70 120 2 2821 2873 -1 -1 2 + 72 120 2 2822 2874 -1 -1 2 + 74 120 2 2823 2875 -1 -1 2 + 76 120 2 2824 2876 -1 -1 2 + 78 120 2 2825 2877 -1 -1 2 + 80 120 2 2826 2878 -1 -1 2 + 82 120 2 2827 2879 -1 -1 2 + 84 120 2 2828 2880 -1 -1 2 + 86 120 2 2829 2881 -1 -1 2 + 88 120 2 2830 2882 -1 -1 2 + 90 120 2 2831 2883 -1 -1 2 + 92 120 2 2832 2884 -1 -1 2 + 94 120 2 2833 2885 -1 -1 2 + 96 120 2 2834 2886 -1 -1 2 + 98 120 2 2835 2887 -1 -1 2 + 100 120 2 2836 2888 -1 -1 2 + 102 120 2 2837 2889 -1 -1 2 diff --git a/regtests/ww3_tp2.14/input/BrestObstrs.dat b/regtests/ww3_tp2.14/input/BrestObstrs.dat new file mode 100644 index 000000000..a70a0e2e9 --- /dev/null +++ b/regtests/ww3_tp2.14/input/BrestObstrs.dat @@ -0,0 +1,2890 @@ + 2889 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 diff --git a/regtests/ww3_tp2.14/input/BrestSMCels.dat b/regtests/ww3_tp2.14/input/BrestSMCels.dat new file mode 100644 index 000000000..f7ad83709 --- /dev/null +++ b/regtests/ww3_tp2.14/input/BrestSMCels.dat @@ -0,0 +1,2890 @@ + 2889 185 2704 + 92 12 1 1 7 + 93 12 1 1 7 + 94 12 1 1 7 + 95 12 1 1 7 + 96 12 1 1 11 + 99 12 1 1 8 + 100 12 1 1 10 + 101 12 1 1 10 + 102 12 1 1 10 + 103 12 1 1 10 + 92 16 1 1 14 + 92 17 1 1 13 + 92 18 1 1 11 + 92 19 1 1 7 + 92 20 1 1 7 + 90 22 1 1 15 + 90 23 1 1 10 + 91 22 1 1 7 + 90 24 1 1 7 + 88 26 1 1 10 + 86 28 1 1 10 + 74 30 1 1 20 + 74 31 1 1 24 + 75 30 1 1 20 + 76 30 1 1 21 + 77 30 1 1 21 + 78 30 1 1 20 + 79 30 1 1 13 + 62 32 1 1 17 + 63 32 1 1 16 + 67 33 1 1 16 + 68 33 1 1 42 + 69 32 1 1 25 + 69 33 1 1 36 + 72 32 1 1 23 + 72 33 1 1 36 + 73 33 1 1 31 + 74 35 1 1 40 + 75 35 1 1 37 + 76 35 1 1 34 + 77 35 1 1 33 + 78 35 1 1 28 + 79 35 1 1 28 + 84 37 1 1 26 + 85 37 1 1 27 + 86 37 1 1 23 + 95 37 1 1 10 + 96 38 1 1 8 + 96 39 1 1 10 + 96 40 1 1 11 + 96 41 1 1 9 + 82 42 1 1 19 + 83 42 1 1 17 + 82 44 1 1 11 + 82 45 1 1 9 + 85 44 1 1 18 + 85 45 1 1 14 + 94 44 1 1 15 + 94 45 1 1 8 + 95 44 1 1 9 + 82 46 1 1 7 + 90 46 1 1 17 + 91 46 1 1 12 + 80 48 1 1 25 + 80 49 1 1 8 + 81 48 1 1 17 + 83 53 1 1 7 + 84 53 1 1 7 + 86 53 1 1 13 + 87 53 1 1 19 + 88 53 1 1 20 + 89 53 1 1 17 + 92 52 1 1 9 + 92 53 1 1 11 + 93 53 1 1 15 + 70 54 1 1 25 + 70 55 1 1 16 + 71 54 1 1 25 + 72 54 1 1 23 + 73 54 1 1 22 + 73 55 1 1 19 + 80 54 1 1 21 + 80 55 1 1 27 + 83 54 1 1 7 + 84 54 1 1 9 + 84 55 1 1 24 + 85 55 1 1 34 + 88 54 1 1 22 + 89 54 1 1 28 + 89 55 1 1 10 + 90 54 1 1 13 + 91 54 1 1 15 + 94 55 1 1 7 + 66 56 1 1 7 + 67 56 1 1 7 + 70 56 1 1 14 + 70 57 1 1 11 + 71 56 1 1 13 + 75 56 1 1 13 + 75 57 1 1 7 + 76 56 1 1 20 + 76 57 1 1 9 + 77 56 1 1 18 + 78 56 1 1 13 + 80 56 1 1 36 + 81 56 1 1 32 + 82 56 1 1 7 + 82 57 1 1 19 + 83 57 1 1 25 + 88 57 1 1 7 + 93 56 1 1 7 + 94 56 1 1 7 + 62 58 1 1 7 + 63 58 1 1 7 + 63 59 1 1 7 + 64 58 1 1 9 + 65 58 1 1 7 + 65 59 1 1 7 + 66 58 1 1 9 + 66 59 1 1 8 + 67 59 1 1 12 + 70 59 1 1 18 + 71 59 1 1 12 + 85 58 1 1 14 + 86 58 1 1 19 + 87 58 1 1 12 + 87 59 1 1 12 + 88 58 1 1 7 + 88 59 1 1 9 + 89 59 1 1 7 + 60 60 1 1 8 + 60 61 1 1 7 + 64 61 1 1 11 + 65 60 1 1 7 + 65 61 1 1 10 + 70 60 1 1 20 + 70 61 1 1 17 + 89 60 1 1 7 + 90 60 1 1 7 + 58 62 1 1 16 + 59 62 1 1 10 + 59 63 1 1 14 + 50 64 1 1 83 + 50 65 1 1 60 + 51 64 1 1 80 + 52 64 1 1 29 + 55 64 1 1 54 + 56 64 1 1 47 + 57 64 1 1 41 + 57 65 1 1 50 + 70 65 1 1 10 + 52 67 1 1 51 + 53 67 1 1 10 + 57 67 1 1 66 + 70 66 1 1 14 + 70 67 1 1 21 + 70 68 1 1 13 + 70 69 1 1 19 + 70 70 1 1 24 + 70 71 1 1 24 + 72 72 1 1 7 + 72 73 1 1 17 + 74 74 1 1 7 + 74 75 1 1 9 + 76 75 1 1 7 + 72 76 1 1 22 + 72 77 1 1 31 + 73 77 1 1 45 + 80 78 1 1 7 + 80 79 1 1 7 + 81 79 1 1 7 + 82 80 1 1 7 + 82 81 1 1 22 + 83 81 1 1 11 + 88 81 1 1 7 + 90 83 1 1 13 + 91 83 1 1 8 + 92 83 1 1 22 + 95 83 1 1 8 + 96 83 1 1 7 + 97 83 1 1 8 + 98 83 1 1 10 + 99 82 1 1 7 + 99 83 1 1 17 + 100 83 1 1 11 + 0 0 2 2 146 + 2 0 2 2 146 + 4 0 2 2 146 + 6 0 2 2 147 + 8 0 2 2 145 + 10 0 2 2 144 + 12 0 2 2 146 + 14 0 2 2 145 + 16 0 2 2 142 + 18 0 2 2 138 + 20 0 2 2 137 + 22 0 2 2 135 + 24 0 2 2 136 + 26 0 2 2 137 + 28 0 2 2 137 + 30 0 2 2 136 + 32 0 2 2 135 + 34 0 2 2 133 + 36 0 2 2 133 + 38 0 2 2 132 + 40 0 2 2 131 + 42 0 2 2 131 + 44 0 2 2 129 + 46 0 2 2 128 + 48 0 2 2 128 + 50 0 2 2 129 + 52 0 2 2 128 + 54 0 2 2 128 + 56 0 2 2 125 + 58 0 2 2 125 + 60 0 2 2 123 + 62 0 2 2 119 + 64 0 2 2 118 + 66 0 2 2 117 + 68 0 2 2 115 + 70 0 2 2 115 + 72 0 2 2 114 + 74 0 2 2 113 + 76 0 2 2 112 + 78 0 2 2 112 + 80 0 2 2 111 + 82 0 2 2 109 + 84 0 2 2 107 + 86 0 2 2 106 + 88 0 2 2 104 + 90 0 2 2 104 + 92 0 2 2 102 + 94 0 2 2 99 + 96 0 2 2 98 + 98 0 2 2 96 + 100 0 2 2 94 + 102 0 2 2 93 + 0 2 2 2 153 + 2 2 2 2 146 + 4 2 2 2 144 + 6 2 2 2 144 + 8 2 2 2 146 + 10 2 2 2 144 + 12 2 2 2 144 + 14 2 2 2 142 + 16 2 2 2 141 + 18 2 2 2 139 + 20 2 2 2 137 + 22 2 2 2 136 + 24 2 2 2 136 + 26 2 2 2 137 + 28 2 2 2 136 + 30 2 2 2 135 + 32 2 2 2 134 + 34 2 2 2 132 + 36 2 2 2 132 + 38 2 2 2 132 + 40 2 2 2 131 + 42 2 2 2 130 + 44 2 2 2 129 + 46 2 2 2 129 + 48 2 2 2 128 + 50 2 2 2 129 + 52 2 2 2 128 + 54 2 2 2 126 + 56 2 2 2 125 + 58 2 2 2 124 + 60 2 2 2 122 + 62 2 2 2 120 + 64 2 2 2 118 + 66 2 2 2 118 + 68 2 2 2 117 + 70 2 2 2 116 + 72 2 2 2 115 + 74 2 2 2 113 + 76 2 2 2 112 + 78 2 2 2 111 + 80 2 2 2 110 + 82 2 2 2 108 + 84 2 2 2 106 + 86 2 2 2 105 + 88 2 2 2 103 + 90 2 2 2 102 + 92 2 2 2 100 + 94 2 2 2 97 + 96 2 2 2 96 + 98 2 2 2 93 + 100 2 2 2 90 + 102 2 2 2 90 + 0 4 2 2 153 + 2 4 2 2 148 + 4 4 2 2 141 + 6 4 2 2 142 + 8 4 2 2 141 + 10 4 2 2 143 + 12 4 2 2 144 + 14 4 2 2 142 + 16 4 2 2 140 + 18 4 2 2 138 + 20 4 2 2 137 + 22 4 2 2 135 + 24 4 2 2 136 + 26 4 2 2 135 + 28 4 2 2 134 + 30 4 2 2 134 + 32 4 2 2 134 + 34 4 2 2 132 + 36 4 2 2 132 + 38 4 2 2 132 + 40 4 2 2 132 + 42 4 2 2 130 + 44 4 2 2 130 + 46 4 2 2 129 + 48 4 2 2 128 + 50 4 2 2 126 + 52 4 2 2 126 + 54 4 2 2 126 + 56 4 2 2 125 + 58 4 2 2 123 + 60 4 2 2 122 + 62 4 2 2 120 + 64 4 2 2 118 + 66 4 2 2 118 + 68 4 2 2 116 + 70 4 2 2 113 + 72 4 2 2 112 + 74 4 2 2 110 + 76 4 2 2 109 + 78 4 2 2 107 + 80 4 2 2 101 + 82 4 2 2 103 + 84 4 2 2 101 + 86 4 2 2 100 + 88 4 2 2 97 + 90 4 2 2 96 + 92 4 2 2 95 + 94 4 2 2 93 + 96 4 2 2 92 + 98 4 2 2 88 + 100 4 2 2 84 + 102 4 2 2 83 + 0 6 2 2 153 + 2 6 2 2 149 + 4 6 2 2 145 + 6 6 2 2 143 + 8 6 2 2 137 + 10 6 2 2 141 + 12 6 2 2 142 + 14 6 2 2 140 + 16 6 2 2 139 + 18 6 2 2 136 + 20 6 2 2 135 + 22 6 2 2 135 + 24 6 2 2 135 + 26 6 2 2 134 + 28 6 2 2 134 + 30 6 2 2 134 + 32 6 2 2 133 + 34 6 2 2 133 + 36 6 2 2 132 + 38 6 2 2 132 + 40 6 2 2 131 + 42 6 2 2 129 + 44 6 2 2 129 + 46 6 2 2 128 + 48 6 2 2 127 + 50 6 2 2 125 + 52 6 2 2 125 + 54 6 2 2 124 + 56 6 2 2 123 + 58 6 2 2 122 + 60 6 2 2 121 + 62 6 2 2 119 + 64 6 2 2 117 + 66 6 2 2 115 + 68 6 2 2 111 + 70 6 2 2 106 + 72 6 2 2 105 + 74 6 2 2 105 + 76 6 2 2 103 + 78 6 2 2 94 + 80 6 2 2 94 + 82 6 2 2 94 + 84 6 2 2 93 + 86 6 2 2 89 + 88 6 2 2 84 + 90 6 2 2 81 + 92 6 2 2 86 + 94 6 2 2 86 + 96 6 2 2 77 + 98 6 2 2 65 + 100 6 2 2 68 + 102 6 2 2 67 + 0 8 2 2 152 + 2 8 2 2 150 + 4 8 2 2 145 + 6 8 2 2 139 + 8 8 2 2 134 + 10 8 2 2 142 + 12 8 2 2 141 + 14 8 2 2 138 + 16 8 2 2 137 + 18 8 2 2 136 + 20 8 2 2 135 + 22 8 2 2 134 + 24 8 2 2 133 + 26 8 2 2 133 + 28 8 2 2 133 + 30 8 2 2 132 + 32 8 2 2 132 + 34 8 2 2 132 + 36 8 2 2 131 + 38 8 2 2 131 + 40 8 2 2 129 + 42 8 2 2 128 + 44 8 2 2 127 + 46 8 2 2 127 + 48 8 2 2 126 + 50 8 2 2 125 + 52 8 2 2 124 + 54 8 2 2 123 + 56 8 2 2 122 + 58 8 2 2 120 + 60 8 2 2 118 + 62 8 2 2 116 + 64 8 2 2 113 + 66 8 2 2 109 + 68 8 2 2 103 + 70 8 2 2 99 + 72 8 2 2 98 + 74 8 2 2 99 + 76 8 2 2 98 + 78 8 2 2 94 + 80 8 2 2 93 + 82 8 2 2 87 + 84 8 2 2 87 + 86 8 2 2 85 + 88 8 2 2 84 + 90 8 2 2 82 + 92 8 2 2 79 + 94 8 2 2 61 + 96 8 2 2 47 + 98 8 2 2 40 + 100 8 2 2 38 + 102 8 2 2 39 + 0 10 2 2 151 + 2 10 2 2 148 + 4 10 2 2 144 + 6 10 2 2 139 + 8 10 2 2 132 + 10 10 2 2 140 + 12 10 2 2 138 + 14 10 2 2 137 + 16 10 2 2 138 + 18 10 2 2 136 + 20 10 2 2 135 + 22 10 2 2 133 + 24 10 2 2 133 + 26 10 2 2 133 + 28 10 2 2 132 + 30 10 2 2 132 + 32 10 2 2 131 + 34 10 2 2 132 + 36 10 2 2 130 + 38 10 2 2 129 + 40 10 2 2 129 + 42 10 2 2 128 + 44 10 2 2 126 + 46 10 2 2 126 + 48 10 2 2 125 + 50 10 2 2 123 + 52 10 2 2 120 + 54 10 2 2 117 + 56 10 2 2 117 + 58 10 2 2 115 + 60 10 2 2 111 + 62 10 2 2 108 + 64 10 2 2 106 + 66 10 2 2 103 + 68 10 2 2 99 + 70 10 2 2 92 + 72 10 2 2 89 + 74 10 2 2 90 + 76 10 2 2 83 + 78 10 2 2 82 + 80 10 2 2 81 + 82 10 2 2 83 + 84 10 2 2 82 + 86 10 2 2 81 + 88 10 2 2 79 + 90 10 2 2 69 + 92 10 2 2 49 + 94 10 2 2 21 + 96 10 2 2 16 + 98 10 2 2 14 + 100 10 2 2 23 + 102 10 2 2 22 + 0 12 2 2 149 + 2 12 2 2 148 + 4 12 2 2 144 + 6 12 2 2 138 + 8 12 2 2 134 + 10 12 2 2 138 + 12 12 2 2 137 + 14 12 2 2 137 + 16 12 2 2 137 + 18 12 2 2 135 + 20 12 2 2 133 + 22 12 2 2 132 + 24 12 2 2 133 + 26 12 2 2 132 + 28 12 2 2 132 + 30 12 2 2 131 + 32 12 2 2 131 + 34 12 2 2 130 + 36 12 2 2 129 + 38 12 2 2 129 + 40 12 2 2 127 + 42 12 2 2 126 + 44 12 2 2 126 + 46 12 2 2 124 + 48 12 2 2 122 + 50 12 2 2 120 + 52 12 2 2 116 + 54 12 2 2 110 + 56 12 2 2 108 + 58 12 2 2 107 + 60 12 2 2 102 + 62 12 2 2 98 + 64 12 2 2 97 + 66 12 2 2 95 + 68 12 2 2 94 + 70 12 2 2 93 + 72 12 2 2 91 + 74 12 2 2 89 + 76 12 2 2 87 + 78 12 2 2 82 + 80 12 2 2 79 + 82 12 2 2 76 + 84 12 2 2 74 + 86 12 2 2 73 + 88 12 2 2 67 + 90 12 2 2 37 + 0 14 2 2 148 + 2 14 2 2 146 + 4 14 2 2 143 + 6 14 2 2 137 + 8 14 2 2 136 + 10 14 2 2 138 + 12 14 2 2 137 + 14 14 2 2 137 + 16 14 2 2 136 + 18 14 2 2 134 + 20 14 2 2 133 + 22 14 2 2 133 + 24 14 2 2 133 + 26 14 2 2 132 + 28 14 2 2 131 + 30 14 2 2 131 + 32 14 2 2 130 + 34 14 2 2 129 + 36 14 2 2 128 + 38 14 2 2 127 + 40 14 2 2 127 + 42 14 2 2 126 + 44 14 2 2 123 + 46 14 2 2 116 + 48 14 2 2 114 + 50 14 2 2 112 + 52 14 2 2 107 + 54 14 2 2 102 + 56 14 2 2 98 + 58 14 2 2 97 + 60 14 2 2 96 + 62 14 2 2 93 + 64 14 2 2 88 + 66 14 2 2 85 + 68 14 2 2 83 + 70 14 2 2 86 + 72 14 2 2 85 + 74 14 2 2 83 + 76 14 2 2 81 + 78 14 2 2 81 + 80 14 2 2 79 + 82 14 2 2 77 + 84 14 2 2 73 + 86 14 2 2 67 + 88 14 2 2 57 + 90 14 2 2 32 + 0 16 2 2 146 + 2 16 2 2 144 + 4 16 2 2 141 + 6 16 2 2 138 + 8 16 2 2 137 + 10 16 2 2 137 + 12 16 2 2 136 + 14 16 2 2 135 + 16 16 2 2 134 + 18 16 2 2 133 + 20 16 2 2 133 + 22 16 2 2 132 + 24 16 2 2 132 + 26 16 2 2 131 + 28 16 2 2 131 + 30 16 2 2 130 + 32 16 2 2 129 + 34 16 2 2 128 + 36 16 2 2 127 + 38 16 2 2 126 + 40 16 2 2 126 + 42 16 2 2 125 + 44 16 2 2 120 + 46 16 2 2 110 + 48 16 2 2 101 + 50 16 2 2 95 + 52 16 2 2 78 + 54 16 2 2 87 + 56 16 2 2 85 + 58 16 2 2 87 + 60 16 2 2 86 + 62 16 2 2 84 + 64 16 2 2 77 + 66 16 2 2 70 + 68 16 2 2 67 + 70 16 2 2 71 + 72 16 2 2 74 + 74 16 2 2 75 + 76 16 2 2 76 + 78 16 2 2 77 + 80 16 2 2 77 + 82 16 2 2 76 + 84 16 2 2 71 + 86 16 2 2 62 + 88 16 2 2 51 + 90 16 2 2 31 + 0 18 2 2 144 + 2 18 2 2 143 + 4 18 2 2 141 + 6 18 2 2 139 + 8 18 2 2 137 + 10 18 2 2 137 + 12 18 2 2 134 + 14 18 2 2 134 + 16 18 2 2 133 + 18 18 2 2 132 + 20 18 2 2 132 + 22 18 2 2 132 + 24 18 2 2 132 + 26 18 2 2 131 + 28 18 2 2 130 + 30 18 2 2 129 + 32 18 2 2 128 + 34 18 2 2 127 + 36 18 2 2 128 + 38 18 2 2 125 + 40 18 2 2 124 + 42 18 2 2 122 + 44 18 2 2 107 + 46 18 2 2 78 + 48 18 2 2 78 + 50 18 2 2 73 + 52 18 2 2 67 + 54 18 2 2 72 + 56 18 2 2 75 + 58 18 2 2 74 + 60 18 2 2 77 + 62 18 2 2 72 + 64 18 2 2 66 + 66 18 2 2 62 + 68 18 2 2 58 + 70 18 2 2 62 + 72 18 2 2 62 + 74 18 2 2 64 + 76 18 2 2 69 + 78 18 2 2 72 + 80 18 2 2 73 + 82 18 2 2 71 + 84 18 2 2 54 + 86 18 2 2 56 + 88 18 2 2 46 + 90 18 2 2 27 + 0 20 2 2 143 + 2 20 2 2 142 + 4 20 2 2 140 + 6 20 2 2 138 + 8 20 2 2 137 + 10 20 2 2 136 + 12 20 2 2 134 + 14 20 2 2 133 + 16 20 2 2 130 + 18 20 2 2 132 + 20 20 2 2 133 + 22 20 2 2 132 + 24 20 2 2 131 + 26 20 2 2 131 + 28 20 2 2 130 + 30 20 2 2 128 + 32 20 2 2 127 + 34 20 2 2 127 + 36 20 2 2 126 + 38 20 2 2 124 + 40 20 2 2 115 + 42 20 2 2 112 + 44 20 2 2 103 + 46 20 2 2 73 + 48 20 2 2 73 + 50 20 2 2 71 + 52 20 2 2 68 + 54 20 2 2 64 + 56 20 2 2 67 + 58 20 2 2 67 + 60 20 2 2 64 + 62 20 2 2 60 + 64 20 2 2 57 + 66 20 2 2 53 + 68 20 2 2 50 + 70 20 2 2 48 + 72 20 2 2 48 + 74 20 2 2 52 + 76 20 2 2 56 + 78 20 2 2 63 + 80 20 2 2 64 + 82 20 2 2 57 + 84 20 2 2 43 + 86 20 2 2 48 + 88 20 2 2 39 + 90 20 2 2 18 + 0 22 2 2 143 + 2 22 2 2 141 + 4 22 2 2 139 + 6 22 2 2 136 + 8 22 2 2 136 + 10 22 2 2 135 + 12 22 2 2 133 + 14 22 2 2 131 + 16 22 2 2 131 + 18 22 2 2 133 + 20 22 2 2 133 + 22 22 2 2 132 + 24 22 2 2 131 + 26 22 2 2 130 + 28 22 2 2 129 + 30 22 2 2 128 + 32 22 2 2 125 + 34 22 2 2 125 + 36 22 2 2 124 + 38 22 2 2 120 + 40 22 2 2 115 + 42 22 2 2 107 + 44 22 2 2 95 + 46 22 2 2 81 + 48 22 2 2 77 + 50 22 2 2 77 + 52 22 2 2 75 + 54 22 2 2 69 + 56 22 2 2 63 + 58 22 2 2 63 + 60 22 2 2 59 + 62 22 2 2 54 + 64 22 2 2 52 + 66 22 2 2 50 + 68 22 2 2 44 + 70 22 2 2 38 + 72 22 2 2 35 + 74 22 2 2 41 + 76 22 2 2 48 + 78 22 2 2 51 + 80 22 2 2 48 + 82 22 2 2 38 + 84 22 2 2 39 + 86 22 2 2 41 + 88 22 2 2 29 + 0 24 2 2 142 + 2 24 2 2 141 + 4 24 2 2 140 + 6 24 2 2 137 + 8 24 2 2 134 + 10 24 2 2 134 + 12 24 2 2 132 + 14 24 2 2 130 + 16 24 2 2 132 + 18 24 2 2 135 + 20 24 2 2 132 + 22 24 2 2 131 + 24 24 2 2 130 + 26 24 2 2 129 + 28 24 2 2 127 + 30 24 2 2 122 + 32 24 2 2 122 + 34 24 2 2 123 + 36 24 2 2 119 + 38 24 2 2 115 + 40 24 2 2 111 + 42 24 2 2 107 + 44 24 2 2 103 + 46 24 2 2 89 + 48 24 2 2 87 + 50 24 2 2 83 + 52 24 2 2 79 + 54 24 2 2 76 + 56 24 2 2 68 + 58 24 2 2 59 + 60 24 2 2 52 + 62 24 2 2 47 + 64 24 2 2 46 + 66 24 2 2 44 + 68 24 2 2 42 + 70 24 2 2 37 + 72 24 2 2 34 + 74 24 2 2 36 + 76 24 2 2 42 + 78 24 2 2 42 + 80 24 2 2 44 + 82 24 2 2 38 + 84 24 2 2 37 + 86 24 2 2 34 + 88 24 2 2 15 + 0 26 2 2 141 + 2 26 2 2 140 + 4 26 2 2 139 + 6 26 2 2 137 + 8 26 2 2 133 + 10 26 2 2 132 + 12 26 2 2 131 + 14 26 2 2 131 + 16 26 2 2 133 + 18 26 2 2 133 + 20 26 2 2 132 + 22 26 2 2 129 + 24 26 2 2 128 + 26 26 2 2 128 + 28 26 2 2 126 + 30 26 2 2 124 + 32 26 2 2 123 + 34 26 2 2 120 + 36 26 2 2 114 + 38 26 2 2 108 + 40 26 2 2 102 + 42 26 2 2 102 + 44 26 2 2 101 + 46 26 2 2 95 + 48 26 2 2 91 + 50 26 2 2 83 + 52 26 2 2 76 + 54 26 2 2 73 + 56 26 2 2 66 + 58 26 2 2 52 + 60 26 2 2 52 + 62 26 2 2 48 + 64 26 2 2 46 + 66 26 2 2 42 + 68 26 2 2 36 + 70 26 2 2 30 + 72 26 2 2 30 + 74 26 2 2 31 + 76 26 2 2 35 + 78 26 2 2 38 + 80 26 2 2 37 + 82 26 2 2 34 + 84 26 2 2 30 + 86 26 2 2 21 + 0 28 2 2 140 + 2 28 2 2 140 + 4 28 2 2 138 + 6 28 2 2 135 + 8 28 2 2 133 + 10 28 2 2 131 + 12 28 2 2 130 + 14 28 2 2 131 + 16 28 2 2 134 + 18 28 2 2 133 + 20 28 2 2 130 + 22 28 2 2 129 + 24 28 2 2 127 + 26 28 2 2 127 + 28 28 2 2 124 + 30 28 2 2 124 + 32 28 2 2 123 + 34 28 2 2 122 + 36 28 2 2 118 + 38 28 2 2 110 + 40 28 2 2 98 + 42 28 2 2 97 + 44 28 2 2 92 + 46 28 2 2 90 + 48 28 2 2 85 + 50 28 2 2 82 + 52 28 2 2 64 + 54 28 2 2 63 + 56 28 2 2 57 + 58 28 2 2 51 + 60 28 2 2 52 + 62 28 2 2 52 + 64 28 2 2 47 + 66 28 2 2 40 + 68 28 2 2 33 + 70 28 2 2 29 + 72 28 2 2 27 + 74 28 2 2 28 + 76 28 2 2 27 + 78 28 2 2 25 + 80 28 2 2 22 + 82 28 2 2 16 + 84 28 2 2 13 + 0 30 2 2 140 + 2 30 2 2 140 + 4 30 2 2 137 + 6 30 2 2 135 + 8 30 2 2 132 + 10 30 2 2 130 + 12 30 2 2 130 + 14 30 2 2 131 + 16 30 2 2 134 + 18 30 2 2 132 + 20 30 2 2 131 + 22 30 2 2 128 + 24 30 2 2 126 + 26 30 2 2 125 + 28 30 2 2 124 + 30 30 2 2 125 + 32 30 2 2 124 + 34 30 2 2 123 + 36 30 2 2 121 + 38 30 2 2 107 + 40 30 2 2 98 + 42 30 2 2 88 + 44 30 2 2 81 + 46 30 2 2 72 + 48 30 2 2 80 + 50 30 2 2 78 + 52 30 2 2 69 + 54 30 2 2 56 + 56 30 2 2 58 + 58 30 2 2 57 + 60 30 2 2 51 + 62 30 2 2 46 + 64 30 2 2 36 + 66 30 2 2 30 + 68 30 2 2 23 + 70 30 2 2 30 + 72 30 2 2 27 + 0 32 2 2 140 + 2 32 2 2 139 + 4 32 2 2 136 + 6 32 2 2 134 + 8 32 2 2 131 + 10 32 2 2 129 + 12 32 2 2 129 + 14 32 2 2 131 + 16 32 2 2 133 + 18 32 2 2 132 + 20 32 2 2 131 + 22 32 2 2 128 + 24 32 2 2 126 + 26 32 2 2 125 + 28 32 2 2 125 + 30 32 2 2 124 + 32 32 2 2 124 + 34 32 2 2 122 + 36 32 2 2 121 + 38 32 2 2 118 + 40 32 2 2 114 + 42 32 2 2 110 + 44 32 2 2 104 + 46 32 2 2 91 + 48 32 2 2 88 + 50 32 2 2 82 + 52 32 2 2 68 + 54 32 2 2 58 + 56 32 2 2 49 + 58 32 2 2 36 + 60 32 2 2 27 + 70 32 2 2 38 + 0 34 2 2 140 + 2 34 2 2 139 + 4 34 2 2 136 + 6 34 2 2 132 + 8 34 2 2 131 + 10 34 2 2 129 + 12 34 2 2 130 + 14 34 2 2 132 + 16 34 2 2 133 + 18 34 2 2 131 + 20 34 2 2 128 + 22 34 2 2 128 + 24 34 2 2 126 + 26 34 2 2 125 + 28 34 2 2 124 + 30 34 2 2 123 + 32 34 2 2 124 + 34 34 2 2 123 + 36 34 2 2 122 + 38 34 2 2 119 + 40 34 2 2 115 + 42 34 2 2 114 + 44 34 2 2 111 + 46 34 2 2 106 + 48 34 2 2 100 + 50 34 2 2 95 + 52 34 2 2 90 + 54 34 2 2 84 + 56 34 2 2 79 + 58 34 2 2 68 + 60 34 2 2 63 + 62 34 2 2 60 + 64 34 2 2 65 + 66 34 2 2 56 + 68 34 2 2 42 + 70 34 2 2 32 + 72 34 2 2 36 + 0 36 2 2 139 + 2 36 2 2 138 + 4 36 2 2 136 + 6 36 2 2 132 + 8 36 2 2 131 + 10 36 2 2 130 + 12 36 2 2 129 + 14 36 2 2 132 + 16 36 2 2 132 + 18 36 2 2 130 + 20 36 2 2 128 + 22 36 2 2 127 + 24 36 2 2 126 + 26 36 2 2 126 + 28 36 2 2 124 + 30 36 2 2 123 + 32 36 2 2 123 + 34 36 2 2 122 + 36 36 2 2 122 + 38 36 2 2 119 + 40 36 2 2 118 + 42 36 2 2 116 + 44 36 2 2 112 + 46 36 2 2 108 + 48 36 2 2 104 + 50 36 2 2 100 + 52 36 2 2 96 + 54 36 2 2 88 + 56 36 2 2 86 + 58 36 2 2 82 + 60 36 2 2 79 + 62 36 2 2 80 + 64 36 2 2 76 + 66 36 2 2 65 + 68 36 2 2 56 + 70 36 2 2 54 + 72 36 2 2 48 + 74 36 2 2 47 + 76 36 2 2 42 + 78 36 2 2 37 + 80 36 2 2 34 + 82 36 2 2 27 + 0 38 2 2 138 + 2 38 2 2 136 + 4 38 2 2 135 + 6 38 2 2 132 + 8 38 2 2 131 + 10 38 2 2 129 + 12 38 2 2 129 + 14 38 2 2 131 + 16 38 2 2 131 + 18 38 2 2 129 + 20 38 2 2 127 + 22 38 2 2 126 + 24 38 2 2 126 + 26 38 2 2 125 + 28 38 2 2 124 + 30 38 2 2 122 + 32 38 2 2 122 + 34 38 2 2 122 + 36 38 2 2 122 + 38 38 2 2 121 + 40 38 2 2 119 + 42 38 2 2 117 + 44 38 2 2 113 + 46 38 2 2 110 + 48 38 2 2 106 + 50 38 2 2 103 + 52 38 2 2 99 + 54 38 2 2 87 + 56 38 2 2 74 + 58 38 2 2 84 + 60 38 2 2 83 + 62 38 2 2 81 + 64 38 2 2 73 + 66 38 2 2 66 + 68 38 2 2 64 + 70 38 2 2 59 + 72 38 2 2 54 + 74 38 2 2 48 + 76 38 2 2 41 + 78 38 2 2 41 + 80 38 2 2 41 + 82 38 2 2 39 + 84 38 2 2 36 + 86 38 2 2 34 + 88 38 2 2 30 + 90 38 2 2 22 + 92 38 2 2 20 + 94 38 2 2 17 + 0 40 2 2 137 + 2 40 2 2 137 + 4 40 2 2 134 + 6 40 2 2 133 + 8 40 2 2 131 + 10 40 2 2 129 + 12 40 2 2 130 + 14 40 2 2 131 + 16 40 2 2 129 + 18 40 2 2 127 + 20 40 2 2 126 + 22 40 2 2 125 + 24 40 2 2 126 + 26 40 2 2 125 + 28 40 2 2 124 + 30 40 2 2 122 + 32 40 2 2 121 + 34 40 2 2 120 + 36 40 2 2 121 + 38 40 2 2 121 + 40 40 2 2 120 + 42 40 2 2 118 + 44 40 2 2 115 + 46 40 2 2 113 + 48 40 2 2 108 + 50 40 2 2 102 + 52 40 2 2 99 + 54 40 2 2 96 + 56 40 2 2 80 + 58 40 2 2 87 + 60 40 2 2 84 + 62 40 2 2 76 + 64 40 2 2 70 + 66 40 2 2 63 + 68 40 2 2 56 + 70 40 2 2 57 + 72 40 2 2 52 + 74 40 2 2 49 + 76 40 2 2 42 + 78 40 2 2 36 + 80 40 2 2 31 + 82 40 2 2 32 + 84 40 2 2 36 + 86 40 2 2 35 + 88 40 2 2 32 + 90 40 2 2 29 + 92 40 2 2 25 + 94 40 2 2 19 + 0 42 2 2 136 + 2 42 2 2 137 + 4 42 2 2 135 + 6 42 2 2 132 + 8 42 2 2 130 + 10 42 2 2 129 + 12 42 2 2 130 + 14 42 2 2 129 + 16 42 2 2 128 + 18 42 2 2 126 + 20 42 2 2 126 + 22 42 2 2 125 + 24 42 2 2 124 + 26 42 2 2 125 + 28 42 2 2 123 + 30 42 2 2 122 + 32 42 2 2 121 + 34 42 2 2 120 + 36 42 2 2 119 + 38 42 2 2 119 + 40 42 2 2 120 + 42 42 2 2 117 + 44 42 2 2 117 + 46 42 2 2 114 + 48 42 2 2 109 + 50 42 2 2 100 + 52 42 2 2 96 + 54 42 2 2 94 + 56 42 2 2 92 + 58 42 2 2 86 + 60 42 2 2 84 + 62 42 2 2 79 + 64 42 2 2 68 + 66 42 2 2 65 + 68 42 2 2 54 + 70 42 2 2 49 + 72 42 2 2 48 + 74 42 2 2 44 + 76 42 2 2 38 + 78 42 2 2 37 + 80 42 2 2 27 + 84 42 2 2 23 + 86 42 2 2 31 + 88 42 2 2 29 + 90 42 2 2 27 + 92 42 2 2 22 + 94 42 2 2 16 + 0 44 2 2 136 + 2 44 2 2 135 + 4 44 2 2 134 + 6 44 2 2 132 + 8 44 2 2 129 + 10 44 2 2 130 + 12 44 2 2 130 + 14 44 2 2 128 + 16 44 2 2 127 + 18 44 2 2 125 + 20 44 2 2 124 + 22 44 2 2 125 + 24 44 2 2 124 + 26 44 2 2 124 + 28 44 2 2 123 + 30 44 2 2 121 + 32 44 2 2 121 + 34 44 2 2 119 + 36 44 2 2 117 + 38 44 2 2 116 + 40 44 2 2 118 + 42 44 2 2 117 + 44 44 2 2 115 + 46 44 2 2 112 + 48 44 2 2 109 + 50 44 2 2 101 + 52 44 2 2 96 + 54 44 2 2 91 + 56 44 2 2 85 + 58 44 2 2 80 + 60 44 2 2 79 + 62 44 2 2 79 + 64 44 2 2 73 + 66 44 2 2 61 + 68 44 2 2 51 + 70 44 2 2 47 + 72 44 2 2 45 + 74 44 2 2 43 + 76 44 2 2 37 + 78 44 2 2 29 + 80 44 2 2 27 + 86 44 2 2 24 + 88 44 2 2 25 + 90 44 2 2 22 + 92 44 2 2 16 + 0 46 2 2 136 + 2 46 2 2 135 + 4 46 2 2 134 + 6 46 2 2 131 + 8 46 2 2 130 + 10 46 2 2 130 + 12 46 2 2 129 + 14 46 2 2 127 + 16 46 2 2 125 + 18 46 2 2 123 + 20 46 2 2 124 + 22 46 2 2 125 + 24 46 2 2 123 + 26 46 2 2 122 + 28 46 2 2 122 + 30 46 2 2 121 + 32 46 2 2 121 + 34 46 2 2 119 + 36 46 2 2 117 + 38 46 2 2 116 + 40 46 2 2 115 + 42 46 2 2 116 + 44 46 2 2 114 + 46 46 2 2 112 + 48 46 2 2 108 + 50 46 2 2 103 + 52 46 2 2 97 + 54 46 2 2 89 + 56 46 2 2 75 + 58 46 2 2 69 + 60 46 2 2 71 + 62 46 2 2 77 + 64 46 2 2 75 + 66 46 2 2 62 + 68 46 2 2 53 + 70 46 2 2 49 + 72 46 2 2 43 + 74 46 2 2 39 + 76 46 2 2 36 + 78 46 2 2 30 + 80 46 2 2 24 + 86 46 2 2 15 + 88 46 2 2 13 + 0 48 2 2 135 + 2 48 2 2 133 + 4 48 2 2 132 + 6 48 2 2 130 + 8 48 2 2 131 + 10 48 2 2 128 + 12 48 2 2 127 + 14 48 2 2 126 + 16 48 2 2 124 + 18 48 2 2 123 + 20 48 2 2 123 + 22 48 2 2 124 + 24 48 2 2 121 + 26 48 2 2 121 + 28 48 2 2 121 + 30 48 2 2 120 + 32 48 2 2 120 + 34 48 2 2 119 + 36 48 2 2 117 + 38 48 2 2 117 + 40 48 2 2 114 + 42 48 2 2 112 + 44 48 2 2 114 + 46 48 2 2 112 + 48 48 2 2 107 + 50 48 2 2 103 + 52 48 2 2 98 + 54 48 2 2 86 + 56 48 2 2 75 + 58 48 2 2 69 + 60 48 2 2 68 + 62 48 2 2 71 + 64 48 2 2 70 + 66 48 2 2 61 + 68 48 2 2 49 + 70 48 2 2 45 + 72 48 2 2 42 + 74 48 2 2 38 + 76 48 2 2 32 + 78 48 2 2 26 + 0 50 2 2 134 + 2 50 2 2 133 + 4 50 2 2 132 + 6 50 2 2 131 + 8 50 2 2 130 + 10 50 2 2 127 + 12 50 2 2 126 + 14 50 2 2 125 + 16 50 2 2 124 + 18 50 2 2 122 + 20 50 2 2 122 + 22 50 2 2 122 + 24 50 2 2 121 + 26 50 2 2 118 + 28 50 2 2 120 + 30 50 2 2 119 + 32 50 2 2 118 + 34 50 2 2 118 + 36 50 2 2 116 + 38 50 2 2 114 + 40 50 2 2 114 + 42 50 2 2 112 + 44 50 2 2 113 + 46 50 2 2 111 + 48 50 2 2 107 + 50 50 2 2 102 + 52 50 2 2 95 + 54 50 2 2 74 + 56 50 2 2 70 + 58 50 2 2 69 + 60 50 2 2 67 + 62 50 2 2 66 + 64 50 2 2 63 + 66 50 2 2 52 + 68 50 2 2 44 + 70 50 2 2 39 + 72 50 2 2 35 + 74 50 2 2 30 + 76 50 2 2 24 + 78 50 2 2 18 + 0 52 2 2 133 + 2 52 2 2 133 + 4 52 2 2 132 + 6 52 2 2 131 + 8 52 2 2 130 + 10 52 2 2 127 + 12 52 2 2 125 + 14 52 2 2 124 + 16 52 2 2 122 + 18 52 2 2 121 + 20 52 2 2 122 + 22 52 2 2 122 + 24 52 2 2 122 + 26 52 2 2 118 + 28 52 2 2 119 + 30 52 2 2 117 + 32 52 2 2 117 + 34 52 2 2 117 + 36 52 2 2 115 + 38 52 2 2 113 + 40 52 2 2 113 + 42 52 2 2 112 + 44 52 2 2 111 + 46 52 2 2 108 + 48 52 2 2 106 + 50 52 2 2 99 + 52 52 2 2 91 + 54 52 2 2 79 + 56 52 2 2 77 + 58 52 2 2 68 + 60 52 2 2 66 + 62 52 2 2 56 + 64 52 2 2 48 + 66 52 2 2 37 + 68 52 2 2 35 + 70 52 2 2 34 + 72 52 2 2 30 + 74 52 2 2 31 + 76 52 2 2 32 + 78 52 2 2 25 + 80 52 2 2 18 + 90 52 2 2 14 + 0 54 2 2 132 + 2 54 2 2 132 + 4 54 2 2 132 + 6 54 2 2 130 + 8 54 2 2 129 + 10 54 2 2 126 + 12 54 2 2 124 + 14 54 2 2 122 + 16 54 2 2 121 + 18 54 2 2 121 + 20 54 2 2 121 + 22 54 2 2 121 + 24 54 2 2 121 + 26 54 2 2 118 + 28 54 2 2 117 + 30 54 2 2 117 + 32 54 2 2 117 + 34 54 2 2 116 + 36 54 2 2 114 + 38 54 2 2 113 + 40 54 2 2 113 + 42 54 2 2 111 + 44 54 2 2 108 + 46 54 2 2 106 + 48 54 2 2 101 + 50 54 2 2 95 + 52 54 2 2 84 + 54 54 2 2 80 + 56 54 2 2 64 + 58 54 2 2 57 + 60 54 2 2 50 + 62 54 2 2 22 + 64 54 2 2 13 + 66 54 2 2 9 + 68 54 2 2 18 + 74 54 2 2 20 + 76 54 2 2 23 + 78 54 2 2 35 + 86 54 2 2 24 + 92 54 2 2 7 + 0 56 2 2 131 + 2 56 2 2 131 + 4 56 2 2 130 + 6 56 2 2 129 + 8 56 2 2 128 + 10 56 2 2 126 + 12 56 2 2 124 + 14 56 2 2 122 + 16 56 2 2 122 + 18 56 2 2 120 + 20 56 2 2 120 + 22 56 2 2 120 + 24 56 2 2 119 + 26 56 2 2 117 + 28 56 2 2 115 + 30 56 2 2 115 + 32 56 2 2 115 + 34 56 2 2 115 + 36 56 2 2 116 + 38 56 2 2 112 + 40 56 2 2 113 + 42 56 2 2 109 + 44 56 2 2 103 + 46 56 2 2 98 + 48 56 2 2 101 + 50 56 2 2 99 + 52 56 2 2 85 + 54 56 2 2 75 + 56 56 2 2 61 + 58 56 2 2 51 + 60 56 2 2 24 + 62 56 2 2 17 + 64 56 2 2 13 + 68 56 2 2 12 + 84 56 2 2 31 + 86 56 2 2 20 + 0 58 2 2 130 + 2 58 2 2 131 + 4 58 2 2 130 + 6 58 2 2 128 + 8 58 2 2 128 + 10 58 2 2 124 + 12 58 2 2 123 + 14 58 2 2 121 + 16 58 2 2 121 + 18 58 2 2 120 + 20 58 2 2 119 + 22 58 2 2 118 + 24 58 2 2 118 + 26 58 2 2 117 + 28 58 2 2 116 + 30 58 2 2 114 + 32 58 2 2 115 + 34 58 2 2 116 + 36 58 2 2 115 + 38 58 2 2 106 + 40 58 2 2 113 + 42 58 2 2 111 + 44 58 2 2 107 + 46 58 2 2 100 + 48 58 2 2 104 + 50 58 2 2 93 + 52 58 2 2 87 + 54 58 2 2 69 + 56 58 2 2 45 + 58 58 2 2 30 + 60 58 2 2 10 + 68 58 2 2 16 + 0 60 2 2 129 + 2 60 2 2 129 + 4 60 2 2 128 + 6 60 2 2 127 + 8 60 2 2 125 + 10 60 2 2 124 + 12 60 2 2 123 + 14 60 2 2 122 + 16 60 2 2 122 + 18 60 2 2 120 + 20 60 2 2 119 + 22 60 2 2 118 + 24 60 2 2 116 + 26 60 2 2 115 + 28 60 2 2 114 + 30 60 2 2 114 + 32 60 2 2 114 + 34 60 2 2 115 + 36 60 2 2 115 + 38 60 2 2 115 + 40 60 2 2 114 + 42 60 2 2 114 + 44 60 2 2 111 + 46 60 2 2 108 + 48 60 2 2 101 + 50 60 2 2 79 + 52 60 2 2 86 + 54 60 2 2 64 + 56 60 2 2 29 + 58 60 2 2 16 + 62 60 2 2 9 + 66 60 2 2 21 + 68 60 2 2 24 + 0 62 2 2 128 + 2 62 2 2 128 + 4 62 2 2 126 + 6 62 2 2 126 + 8 62 2 2 126 + 10 62 2 2 125 + 12 62 2 2 124 + 14 62 2 2 122 + 16 62 2 2 122 + 18 62 2 2 122 + 20 62 2 2 120 + 22 62 2 2 118 + 24 62 2 2 118 + 26 62 2 2 116 + 28 62 2 2 116 + 30 62 2 2 115 + 32 62 2 2 111 + 34 62 2 2 115 + 36 62 2 2 115 + 38 62 2 2 115 + 40 62 2 2 115 + 42 62 2 2 115 + 44 62 2 2 114 + 46 62 2 2 112 + 48 62 2 2 99 + 50 62 2 2 83 + 52 62 2 2 63 + 54 62 2 2 64 + 56 62 2 2 53 + 60 62 2 2 15 + 62 62 2 2 23 + 64 62 2 2 17 + 66 62 2 2 36 + 68 62 2 2 20 + 0 64 2 2 127 + 2 64 2 2 126 + 4 64 2 2 126 + 6 64 2 2 125 + 8 64 2 2 124 + 10 64 2 2 123 + 12 64 2 2 123 + 14 64 2 2 121 + 16 64 2 2 120 + 18 64 2 2 121 + 20 64 2 2 119 + 22 64 2 2 118 + 24 64 2 2 117 + 26 64 2 2 116 + 28 64 2 2 115 + 30 64 2 2 113 + 32 64 2 2 113 + 34 64 2 2 115 + 36 64 2 2 115 + 38 64 2 2 113 + 40 64 2 2 116 + 42 64 2 2 115 + 44 64 2 2 118 + 46 64 2 2 114 + 48 64 2 2 97 + 58 64 2 2 39 + 60 64 2 2 58 + 62 64 2 2 55 + 64 64 2 2 45 + 66 64 2 2 28 + 68 64 2 2 26 + 0 66 2 2 126 + 2 66 2 2 124 + 4 66 2 2 124 + 6 66 2 2 124 + 8 66 2 2 123 + 10 66 2 2 122 + 12 66 2 2 122 + 14 66 2 2 120 + 16 66 2 2 119 + 18 66 2 2 120 + 20 66 2 2 120 + 22 66 2 2 118 + 24 66 2 2 116 + 26 66 2 2 116 + 28 66 2 2 115 + 30 66 2 2 112 + 32 66 2 2 111 + 34 66 2 2 115 + 36 66 2 2 114 + 38 66 2 2 115 + 40 66 2 2 116 + 42 66 2 2 116 + 44 66 2 2 130 + 46 66 2 2 124 + 48 66 2 2 104 + 50 66 2 2 73 + 58 66 2 2 59 + 60 66 2 2 78 + 62 66 2 2 81 + 64 66 2 2 57 + 66 66 2 2 55 + 68 66 2 2 44 + 0 68 2 2 124 + 2 68 2 2 124 + 4 68 2 2 123 + 6 68 2 2 123 + 8 68 2 2 122 + 10 68 2 2 121 + 12 68 2 2 121 + 14 68 2 2 119 + 16 68 2 2 119 + 18 68 2 2 119 + 20 68 2 2 119 + 22 68 2 2 118 + 24 68 2 2 117 + 26 68 2 2 116 + 28 68 2 2 116 + 30 68 2 2 114 + 32 68 2 2 112 + 34 68 2 2 114 + 36 68 2 2 114 + 38 68 2 2 113 + 40 68 2 2 115 + 42 68 2 2 117 + 44 68 2 2 118 + 46 68 2 2 151 + 48 68 2 2 118 + 50 68 2 2 100 + 52 68 2 2 78 + 54 68 2 2 77 + 56 68 2 2 81 + 58 68 2 2 78 + 60 68 2 2 86 + 62 68 2 2 73 + 64 68 2 2 71 + 66 68 2 2 61 + 68 68 2 2 41 + 0 70 2 2 124 + 2 70 2 2 122 + 4 70 2 2 121 + 6 70 2 2 122 + 8 70 2 2 121 + 10 70 2 2 121 + 12 70 2 2 120 + 14 70 2 2 119 + 16 70 2 2 119 + 18 70 2 2 118 + 20 70 2 2 119 + 22 70 2 2 117 + 24 70 2 2 116 + 26 70 2 2 116 + 28 70 2 2 116 + 30 70 2 2 115 + 32 70 2 2 113 + 34 70 2 2 113 + 36 70 2 2 115 + 38 70 2 2 114 + 40 70 2 2 113 + 42 70 2 2 114 + 44 70 2 2 116 + 46 70 2 2 125 + 48 70 2 2 174 + 50 70 2 2 121 + 52 70 2 2 104 + 54 70 2 2 99 + 56 70 2 2 94 + 58 70 2 2 95 + 60 70 2 2 95 + 62 70 2 2 84 + 64 70 2 2 66 + 66 70 2 2 75 + 68 70 2 2 47 + 0 72 2 2 124 + 2 72 2 2 122 + 4 72 2 2 121 + 6 72 2 2 122 + 8 72 2 2 122 + 10 72 2 2 121 + 12 72 2 2 121 + 14 72 2 2 119 + 16 72 2 2 119 + 18 72 2 2 118 + 20 72 2 2 117 + 22 72 2 2 117 + 24 72 2 2 115 + 26 72 2 2 116 + 28 72 2 2 116 + 30 72 2 2 115 + 32 72 2 2 113 + 34 72 2 2 113 + 36 72 2 2 114 + 38 72 2 2 114 + 40 72 2 2 114 + 42 72 2 2 113 + 44 72 2 2 114 + 46 72 2 2 114 + 48 72 2 2 123 + 50 72 2 2 135 + 52 72 2 2 112 + 54 72 2 2 105 + 56 72 2 2 102 + 58 72 2 2 98 + 60 72 2 2 95 + 62 72 2 2 79 + 64 72 2 2 78 + 66 72 2 2 70 + 68 72 2 2 68 + 70 72 2 2 32 + 0 74 2 2 123 + 2 74 2 2 122 + 4 74 2 2 122 + 6 74 2 2 122 + 8 74 2 2 122 + 10 74 2 2 121 + 12 74 2 2 121 + 14 74 2 2 120 + 16 74 2 2 119 + 18 74 2 2 117 + 20 74 2 2 117 + 22 74 2 2 116 + 24 74 2 2 115 + 26 74 2 2 115 + 28 74 2 2 115 + 30 74 2 2 115 + 32 74 2 2 113 + 34 74 2 2 114 + 36 74 2 2 115 + 38 74 2 2 114 + 40 74 2 2 113 + 42 74 2 2 112 + 44 74 2 2 111 + 46 74 2 2 114 + 48 74 2 2 114 + 50 74 2 2 119 + 52 74 2 2 113 + 54 74 2 2 108 + 56 74 2 2 101 + 58 74 2 2 94 + 60 74 2 2 81 + 62 74 2 2 88 + 64 74 2 2 95 + 66 74 2 2 81 + 68 74 2 2 76 + 70 74 2 2 52 + 72 74 2 2 17 + 0 76 2 2 123 + 2 76 2 2 122 + 4 76 2 2 120 + 6 76 2 2 121 + 8 76 2 2 121 + 10 76 2 2 121 + 12 76 2 2 120 + 14 76 2 2 120 + 16 76 2 2 119 + 18 76 2 2 118 + 20 76 2 2 116 + 22 76 2 2 117 + 24 76 2 2 115 + 26 76 2 2 114 + 28 76 2 2 115 + 30 76 2 2 115 + 32 76 2 2 114 + 34 76 2 2 113 + 36 76 2 2 114 + 38 76 2 2 113 + 40 76 2 2 113 + 42 76 2 2 113 + 44 76 2 2 110 + 46 76 2 2 111 + 48 76 2 2 112 + 50 76 2 2 110 + 52 76 2 2 109 + 54 76 2 2 108 + 56 76 2 2 105 + 58 76 2 2 101 + 60 76 2 2 95 + 62 76 2 2 98 + 64 76 2 2 97 + 66 76 2 2 96 + 68 76 2 2 90 + 70 76 2 2 50 + 74 76 2 2 22 + 76 76 2 2 15 + 78 76 2 2 9 + 0 78 2 2 123 + 2 78 2 2 122 + 4 78 2 2 121 + 6 78 2 2 119 + 8 78 2 2 120 + 10 78 2 2 120 + 12 78 2 2 119 + 14 78 2 2 119 + 16 78 2 2 119 + 18 78 2 2 118 + 20 78 2 2 116 + 22 78 2 2 116 + 24 78 2 2 114 + 26 78 2 2 114 + 28 78 2 2 115 + 30 78 2 2 114 + 32 78 2 2 113 + 34 78 2 2 111 + 36 78 2 2 113 + 38 78 2 2 114 + 40 78 2 2 113 + 42 78 2 2 113 + 44 78 2 2 111 + 46 78 2 2 110 + 48 78 2 2 111 + 50 78 2 2 108 + 52 78 2 2 107 + 54 78 2 2 107 + 56 78 2 2 107 + 58 78 2 2 105 + 60 78 2 2 102 + 62 78 2 2 101 + 64 78 2 2 98 + 66 78 2 2 99 + 68 78 2 2 96 + 70 78 2 2 85 + 72 78 2 2 63 + 74 78 2 2 59 + 76 78 2 2 42 + 78 78 2 2 14 + 0 80 2 2 122 + 2 80 2 2 121 + 4 80 2 2 120 + 6 80 2 2 119 + 8 80 2 2 119 + 10 80 2 2 119 + 12 80 2 2 118 + 14 80 2 2 117 + 16 80 2 2 117 + 18 80 2 2 118 + 20 80 2 2 117 + 22 80 2 2 114 + 24 80 2 2 115 + 26 80 2 2 115 + 28 80 2 2 113 + 30 80 2 2 113 + 32 80 2 2 112 + 34 80 2 2 111 + 36 80 2 2 112 + 38 80 2 2 114 + 40 80 2 2 113 + 42 80 2 2 113 + 44 80 2 2 112 + 46 80 2 2 112 + 48 80 2 2 110 + 50 80 2 2 109 + 52 80 2 2 108 + 54 80 2 2 108 + 56 80 2 2 109 + 58 80 2 2 106 + 60 80 2 2 106 + 62 80 2 2 104 + 64 80 2 2 103 + 66 80 2 2 99 + 68 80 2 2 99 + 70 80 2 2 98 + 72 80 2 2 89 + 74 80 2 2 84 + 76 80 2 2 66 + 78 80 2 2 51 + 80 80 2 2 42 + 84 80 2 2 14 + 86 80 2 2 8 + 0 82 2 2 123 + 2 82 2 2 122 + 4 82 2 2 120 + 6 82 2 2 118 + 8 82 2 2 117 + 10 82 2 2 118 + 12 82 2 2 118 + 14 82 2 2 117 + 16 82 2 2 117 + 18 82 2 2 117 + 20 82 2 2 116 + 22 82 2 2 115 + 24 82 2 2 114 + 26 82 2 2 115 + 28 82 2 2 114 + 30 82 2 2 113 + 32 82 2 2 112 + 34 82 2 2 111 + 36 82 2 2 109 + 38 82 2 2 113 + 40 82 2 2 113 + 42 82 2 2 113 + 44 82 2 2 112 + 46 82 2 2 111 + 48 82 2 2 109 + 50 82 2 2 109 + 52 82 2 2 108 + 54 82 2 2 109 + 56 82 2 2 109 + 58 82 2 2 108 + 60 82 2 2 106 + 62 82 2 2 106 + 64 82 2 2 105 + 66 82 2 2 103 + 68 82 2 2 100 + 70 82 2 2 100 + 72 82 2 2 95 + 74 82 2 2 94 + 76 82 2 2 86 + 78 82 2 2 70 + 80 82 2 2 65 + 82 82 2 2 44 + 84 82 2 2 26 + 86 82 2 2 16 + 88 82 2 2 12 + 0 84 2 2 122 + 2 84 2 2 121 + 4 84 2 2 120 + 6 84 2 2 118 + 8 84 2 2 117 + 10 84 2 2 117 + 12 84 2 2 118 + 14 84 2 2 118 + 16 84 2 2 117 + 18 84 2 2 117 + 20 84 2 2 117 + 22 84 2 2 116 + 24 84 2 2 114 + 26 84 2 2 115 + 28 84 2 2 114 + 30 84 2 2 113 + 32 84 2 2 111 + 34 84 2 2 109 + 36 84 2 2 110 + 38 84 2 2 111 + 40 84 2 2 112 + 42 84 2 2 112 + 44 84 2 2 111 + 46 84 2 2 111 + 48 84 2 2 110 + 50 84 2 2 109 + 52 84 2 2 108 + 54 84 2 2 109 + 56 84 2 2 108 + 58 84 2 2 107 + 60 84 2 2 108 + 62 84 2 2 107 + 64 84 2 2 106 + 66 84 2 2 104 + 68 84 2 2 102 + 70 84 2 2 101 + 72 84 2 2 98 + 74 84 2 2 97 + 76 84 2 2 97 + 78 84 2 2 90 + 80 84 2 2 81 + 82 84 2 2 76 + 84 84 2 2 63 + 86 84 2 2 53 + 88 84 2 2 46 + 90 84 2 2 45 + 92 84 2 2 30 + 94 84 2 2 25 + 96 84 2 2 27 + 98 84 2 2 24 + 100 84 2 2 21 + 102 84 2 2 17 + 0 86 2 2 122 + 2 86 2 2 121 + 4 86 2 2 119 + 6 86 2 2 117 + 8 86 2 2 116 + 10 86 2 2 117 + 12 86 2 2 117 + 14 86 2 2 118 + 16 86 2 2 118 + 18 86 2 2 117 + 20 86 2 2 117 + 22 86 2 2 116 + 24 86 2 2 115 + 26 86 2 2 115 + 28 86 2 2 115 + 30 86 2 2 112 + 32 86 2 2 111 + 34 86 2 2 107 + 36 86 2 2 108 + 38 86 2 2 109 + 40 86 2 2 110 + 42 86 2 2 111 + 44 86 2 2 112 + 46 86 2 2 111 + 48 86 2 2 110 + 50 86 2 2 108 + 52 86 2 2 108 + 54 86 2 2 108 + 56 86 2 2 108 + 58 86 2 2 108 + 60 86 2 2 108 + 62 86 2 2 107 + 64 86 2 2 106 + 66 86 2 2 105 + 68 86 2 2 104 + 70 86 2 2 103 + 72 86 2 2 102 + 74 86 2 2 100 + 76 86 2 2 99 + 78 86 2 2 96 + 80 86 2 2 92 + 82 86 2 2 88 + 84 86 2 2 77 + 86 86 2 2 76 + 88 86 2 2 77 + 90 86 2 2 73 + 92 86 2 2 61 + 94 86 2 2 57 + 96 86 2 2 54 + 98 86 2 2 46 + 100 86 2 2 47 + 102 86 2 2 44 + 0 88 2 2 125 + 2 88 2 2 122 + 4 88 2 2 119 + 6 88 2 2 117 + 8 88 2 2 116 + 10 88 2 2 117 + 12 88 2 2 118 + 14 88 2 2 118 + 16 88 2 2 117 + 18 88 2 2 114 + 20 88 2 2 116 + 22 88 2 2 115 + 24 88 2 2 115 + 26 88 2 2 113 + 28 88 2 2 114 + 30 88 2 2 113 + 32 88 2 2 112 + 34 88 2 2 107 + 36 88 2 2 108 + 38 88 2 2 111 + 40 88 2 2 109 + 42 88 2 2 111 + 44 88 2 2 111 + 46 88 2 2 110 + 48 88 2 2 109 + 50 88 2 2 109 + 52 88 2 2 108 + 54 88 2 2 109 + 56 88 2 2 109 + 58 88 2 2 109 + 60 88 2 2 110 + 62 88 2 2 107 + 64 88 2 2 106 + 66 88 2 2 106 + 68 88 2 2 105 + 70 88 2 2 104 + 72 88 2 2 102 + 74 88 2 2 101 + 76 88 2 2 100 + 78 88 2 2 99 + 80 88 2 2 97 + 82 88 2 2 95 + 84 88 2 2 93 + 86 88 2 2 92 + 88 88 2 2 89 + 90 88 2 2 88 + 92 88 2 2 85 + 94 88 2 2 82 + 96 88 2 2 76 + 98 88 2 2 69 + 100 88 2 2 68 + 102 88 2 2 66 + 0 90 2 2 126 + 2 90 2 2 128 + 4 90 2 2 123 + 6 90 2 2 119 + 8 90 2 2 118 + 10 90 2 2 116 + 12 90 2 2 116 + 14 90 2 2 117 + 16 90 2 2 118 + 18 90 2 2 116 + 20 90 2 2 116 + 22 90 2 2 114 + 24 90 2 2 114 + 26 90 2 2 113 + 28 90 2 2 114 + 30 90 2 2 113 + 32 90 2 2 112 + 34 90 2 2 109 + 36 90 2 2 107 + 38 90 2 2 109 + 40 90 2 2 110 + 42 90 2 2 110 + 44 90 2 2 110 + 46 90 2 2 109 + 48 90 2 2 109 + 50 90 2 2 108 + 52 90 2 2 106 + 54 90 2 2 107 + 56 90 2 2 109 + 58 90 2 2 109 + 60 90 2 2 108 + 62 90 2 2 107 + 64 90 2 2 107 + 66 90 2 2 106 + 68 90 2 2 106 + 70 90 2 2 104 + 72 90 2 2 103 + 74 90 2 2 103 + 76 90 2 2 102 + 78 90 2 2 100 + 80 90 2 2 100 + 82 90 2 2 99 + 84 90 2 2 97 + 86 90 2 2 95 + 88 90 2 2 92 + 90 90 2 2 92 + 92 90 2 2 90 + 94 90 2 2 89 + 96 90 2 2 87 + 98 90 2 2 85 + 100 90 2 2 83 + 102 90 2 2 83 + 0 92 2 2 121 + 2 92 2 2 124 + 4 92 2 2 126 + 6 92 2 2 121 + 8 92 2 2 118 + 10 92 2 2 117 + 12 92 2 2 116 + 14 92 2 2 116 + 16 92 2 2 117 + 18 92 2 2 117 + 20 92 2 2 115 + 22 92 2 2 115 + 24 92 2 2 114 + 26 92 2 2 113 + 28 92 2 2 111 + 30 92 2 2 113 + 32 92 2 2 112 + 34 92 2 2 111 + 36 92 2 2 109 + 38 92 2 2 110 + 40 92 2 2 109 + 42 92 2 2 108 + 44 92 2 2 109 + 46 92 2 2 109 + 48 92 2 2 108 + 50 92 2 2 107 + 52 92 2 2 106 + 54 92 2 2 105 + 56 92 2 2 106 + 58 92 2 2 108 + 60 92 2 2 108 + 62 92 2 2 107 + 64 92 2 2 107 + 66 92 2 2 107 + 68 92 2 2 105 + 70 92 2 2 105 + 72 92 2 2 105 + 74 92 2 2 104 + 76 92 2 2 103 + 78 92 2 2 101 + 80 92 2 2 99 + 82 92 2 2 99 + 84 92 2 2 98 + 86 92 2 2 97 + 88 92 2 2 95 + 90 92 2 2 93 + 92 92 2 2 93 + 94 92 2 2 92 + 96 92 2 2 90 + 98 92 2 2 88 + 100 92 2 2 87 + 102 92 2 2 87 + 0 94 2 2 121 + 2 94 2 2 120 + 4 94 2 2 122 + 6 94 2 2 123 + 8 94 2 2 119 + 10 94 2 2 117 + 12 94 2 2 117 + 14 94 2 2 117 + 16 94 2 2 117 + 18 94 2 2 116 + 20 94 2 2 117 + 22 94 2 2 116 + 24 94 2 2 114 + 26 94 2 2 114 + 28 94 2 2 113 + 30 94 2 2 112 + 32 94 2 2 112 + 34 94 2 2 112 + 36 94 2 2 110 + 38 94 2 2 110 + 40 94 2 2 109 + 42 94 2 2 109 + 44 94 2 2 108 + 46 94 2 2 108 + 48 94 2 2 107 + 50 94 2 2 106 + 52 94 2 2 106 + 54 94 2 2 105 + 56 94 2 2 105 + 58 94 2 2 105 + 60 94 2 2 107 + 62 94 2 2 106 + 64 94 2 2 104 + 66 94 2 2 104 + 68 94 2 2 105 + 70 94 2 2 106 + 72 94 2 2 104 + 74 94 2 2 103 + 76 94 2 2 102 + 78 94 2 2 101 + 80 94 2 2 101 + 82 94 2 2 100 + 84 94 2 2 99 + 86 94 2 2 97 + 88 94 2 2 96 + 90 94 2 2 95 + 92 94 2 2 94 + 94 94 2 2 93 + 96 94 2 2 92 + 98 94 2 2 91 + 100 94 2 2 89 + 102 94 2 2 89 + 0 96 2 2 123 + 2 96 2 2 120 + 4 96 2 2 121 + 6 96 2 2 120 + 8 96 2 2 120 + 10 96 2 2 116 + 12 96 2 2 118 + 14 96 2 2 118 + 16 96 2 2 117 + 18 96 2 2 117 + 20 96 2 2 116 + 22 96 2 2 115 + 24 96 2 2 113 + 26 96 2 2 114 + 28 96 2 2 114 + 30 96 2 2 114 + 32 96 2 2 113 + 34 96 2 2 112 + 36 96 2 2 111 + 38 96 2 2 110 + 40 96 2 2 110 + 42 96 2 2 109 + 44 96 2 2 108 + 46 96 2 2 107 + 48 96 2 2 107 + 50 96 2 2 107 + 52 96 2 2 109 + 54 96 2 2 107 + 56 96 2 2 107 + 58 96 2 2 105 + 60 96 2 2 105 + 62 96 2 2 105 + 64 96 2 2 104 + 66 96 2 2 105 + 68 96 2 2 104 + 70 96 2 2 104 + 72 96 2 2 105 + 74 96 2 2 105 + 76 96 2 2 103 + 78 96 2 2 102 + 80 96 2 2 102 + 82 96 2 2 101 + 84 96 2 2 101 + 86 96 2 2 99 + 88 96 2 2 97 + 90 96 2 2 96 + 92 96 2 2 96 + 94 96 2 2 94 + 96 96 2 2 93 + 98 96 2 2 92 + 100 96 2 2 90 + 102 96 2 2 90 + 0 98 2 2 128 + 2 98 2 2 122 + 4 98 2 2 119 + 6 98 2 2 120 + 8 98 2 2 120 + 10 98 2 2 119 + 12 98 2 2 118 + 14 98 2 2 117 + 16 98 2 2 117 + 18 98 2 2 115 + 20 98 2 2 114 + 22 98 2 2 115 + 24 98 2 2 114 + 26 98 2 2 114 + 28 98 2 2 113 + 30 98 2 2 113 + 32 98 2 2 113 + 34 98 2 2 112 + 36 98 2 2 110 + 38 98 2 2 112 + 40 98 2 2 111 + 42 98 2 2 110 + 44 98 2 2 109 + 46 98 2 2 108 + 48 98 2 2 107 + 50 98 2 2 110 + 52 98 2 2 109 + 54 98 2 2 109 + 56 98 2 2 107 + 58 98 2 2 105 + 60 98 2 2 104 + 62 98 2 2 104 + 64 98 2 2 105 + 66 98 2 2 104 + 68 98 2 2 104 + 70 98 2 2 104 + 72 98 2 2 103 + 74 98 2 2 104 + 76 98 2 2 103 + 78 98 2 2 103 + 80 98 2 2 103 + 82 98 2 2 102 + 84 98 2 2 101 + 86 98 2 2 100 + 88 98 2 2 99 + 90 98 2 2 98 + 92 98 2 2 97 + 94 98 2 2 95 + 96 98 2 2 94 + 98 98 2 2 92 + 100 98 2 2 91 + 102 98 2 2 91 + 0 100 2 2 129 + 2 100 2 2 126 + 4 100 2 2 123 + 6 100 2 2 121 + 8 100 2 2 120 + 10 100 2 2 119 + 12 100 2 2 119 + 14 100 2 2 118 + 16 100 2 2 116 + 18 100 2 2 115 + 20 100 2 2 115 + 22 100 2 2 114 + 24 100 2 2 115 + 26 100 2 2 114 + 28 100 2 2 113 + 30 100 2 2 114 + 32 100 2 2 113 + 34 100 2 2 112 + 36 100 2 2 111 + 38 100 2 2 112 + 40 100 2 2 110 + 42 100 2 2 110 + 44 100 2 2 110 + 46 100 2 2 109 + 48 100 2 2 109 + 50 100 2 2 108 + 52 100 2 2 108 + 54 100 2 2 108 + 56 100 2 2 106 + 58 100 2 2 105 + 60 100 2 2 104 + 62 100 2 2 105 + 64 100 2 2 105 + 66 100 2 2 105 + 68 100 2 2 103 + 70 100 2 2 103 + 72 100 2 2 102 + 74 100 2 2 103 + 76 100 2 2 102 + 78 100 2 2 102 + 80 100 2 2 102 + 82 100 2 2 102 + 84 100 2 2 101 + 86 100 2 2 100 + 88 100 2 2 99 + 90 100 2 2 98 + 92 100 2 2 97 + 94 100 2 2 97 + 96 100 2 2 96 + 98 100 2 2 95 + 100 100 2 2 94 + 102 100 2 2 93 + 0 102 2 2 125 + 2 102 2 2 125 + 4 102 2 2 124 + 6 102 2 2 121 + 8 102 2 2 120 + 10 102 2 2 118 + 12 102 2 2 118 + 14 102 2 2 117 + 16 102 2 2 117 + 18 102 2 2 115 + 20 102 2 2 115 + 22 102 2 2 115 + 24 102 2 2 114 + 26 102 2 2 114 + 28 102 2 2 114 + 30 102 2 2 113 + 32 102 2 2 112 + 34 102 2 2 113 + 36 102 2 2 111 + 38 102 2 2 111 + 40 102 2 2 110 + 42 102 2 2 110 + 44 102 2 2 110 + 46 102 2 2 111 + 48 102 2 2 109 + 50 102 2 2 108 + 52 102 2 2 108 + 54 102 2 2 108 + 56 102 2 2 107 + 58 102 2 2 105 + 60 102 2 2 105 + 62 102 2 2 103 + 64 102 2 2 105 + 66 102 2 2 104 + 68 102 2 2 105 + 70 102 2 2 103 + 72 102 2 2 103 + 74 102 2 2 102 + 76 102 2 2 101 + 78 102 2 2 101 + 80 102 2 2 101 + 82 102 2 2 100 + 84 102 2 2 100 + 86 102 2 2 99 + 88 102 2 2 99 + 90 102 2 2 98 + 92 102 2 2 98 + 94 102 2 2 95 + 96 102 2 2 95 + 98 102 2 2 95 + 100 102 2 2 94 + 102 102 2 2 93 + 0 104 2 2 124 + 2 104 2 2 123 + 4 104 2 2 121 + 6 104 2 2 121 + 8 104 2 2 121 + 10 104 2 2 119 + 12 104 2 2 117 + 14 104 2 2 116 + 16 104 2 2 116 + 18 104 2 2 115 + 20 104 2 2 115 + 22 104 2 2 114 + 24 104 2 2 114 + 26 104 2 2 114 + 28 104 2 2 113 + 30 104 2 2 113 + 32 104 2 2 112 + 34 104 2 2 112 + 36 104 2 2 110 + 38 104 2 2 109 + 40 104 2 2 110 + 42 104 2 2 110 + 44 104 2 2 111 + 46 104 2 2 110 + 48 104 2 2 109 + 50 104 2 2 108 + 52 104 2 2 108 + 54 104 2 2 108 + 56 104 2 2 107 + 58 104 2 2 106 + 60 104 2 2 105 + 62 104 2 2 103 + 64 104 2 2 104 + 66 104 2 2 105 + 68 104 2 2 104 + 70 104 2 2 104 + 72 104 2 2 104 + 74 104 2 2 102 + 76 104 2 2 102 + 78 104 2 2 101 + 80 104 2 2 101 + 82 104 2 2 100 + 84 104 2 2 99 + 86 104 2 2 99 + 88 104 2 2 98 + 90 104 2 2 97 + 92 104 2 2 97 + 94 104 2 2 96 + 96 104 2 2 96 + 98 104 2 2 96 + 100 104 2 2 94 + 102 104 2 2 94 + 0 106 2 2 122 + 2 106 2 2 122 + 4 106 2 2 122 + 6 106 2 2 120 + 8 106 2 2 120 + 10 106 2 2 119 + 12 106 2 2 115 + 14 106 2 2 115 + 16 106 2 2 116 + 18 106 2 2 117 + 20 106 2 2 115 + 22 106 2 2 114 + 24 106 2 2 114 + 26 106 2 2 113 + 28 106 2 2 113 + 30 106 2 2 112 + 32 106 2 2 112 + 34 106 2 2 111 + 36 106 2 2 110 + 38 106 2 2 110 + 40 106 2 2 110 + 42 106 2 2 111 + 44 106 2 2 110 + 46 106 2 2 109 + 48 106 2 2 109 + 50 106 2 2 108 + 52 106 2 2 107 + 54 106 2 2 107 + 56 106 2 2 106 + 58 106 2 2 106 + 60 106 2 2 105 + 62 106 2 2 104 + 64 106 2 2 102 + 66 106 2 2 103 + 68 106 2 2 105 + 70 106 2 2 104 + 72 106 2 2 103 + 74 106 2 2 103 + 76 106 2 2 102 + 78 106 2 2 101 + 80 106 2 2 102 + 82 106 2 2 101 + 84 106 2 2 99 + 86 106 2 2 99 + 88 106 2 2 98 + 90 106 2 2 97 + 92 106 2 2 97 + 94 106 2 2 96 + 96 106 2 2 96 + 98 106 2 2 95 + 100 106 2 2 95 + 102 106 2 2 96 + 0 108 2 2 122 + 2 108 2 2 121 + 4 108 2 2 119 + 6 108 2 2 118 + 8 108 2 2 119 + 10 108 2 2 118 + 12 108 2 2 117 + 14 108 2 2 116 + 16 108 2 2 116 + 18 108 2 2 116 + 20 108 2 2 115 + 22 108 2 2 114 + 24 108 2 2 113 + 26 108 2 2 113 + 28 108 2 2 113 + 30 108 2 2 112 + 32 108 2 2 111 + 34 108 2 2 110 + 36 108 2 2 111 + 38 108 2 2 110 + 40 108 2 2 111 + 42 108 2 2 110 + 44 108 2 2 110 + 46 108 2 2 110 + 48 108 2 2 107 + 50 108 2 2 108 + 52 108 2 2 107 + 54 108 2 2 106 + 56 108 2 2 107 + 58 108 2 2 106 + 60 108 2 2 106 + 62 108 2 2 104 + 64 108 2 2 104 + 66 108 2 2 102 + 68 108 2 2 102 + 70 108 2 2 106 + 72 108 2 2 103 + 74 108 2 2 101 + 76 108 2 2 102 + 78 108 2 2 102 + 80 108 2 2 102 + 82 108 2 2 100 + 84 108 2 2 100 + 86 108 2 2 99 + 88 108 2 2 98 + 90 108 2 2 98 + 92 108 2 2 97 + 94 108 2 2 97 + 96 108 2 2 97 + 98 108 2 2 96 + 100 108 2 2 95 + 102 108 2 2 95 + 0 110 2 2 120 + 2 110 2 2 119 + 4 110 2 2 118 + 6 110 2 2 117 + 8 110 2 2 118 + 10 110 2 2 117 + 12 110 2 2 118 + 14 110 2 2 115 + 16 110 2 2 115 + 18 110 2 2 116 + 20 110 2 2 114 + 22 110 2 2 113 + 24 110 2 2 113 + 26 110 2 2 113 + 28 110 2 2 112 + 30 110 2 2 111 + 32 110 2 2 111 + 34 110 2 2 111 + 36 110 2 2 111 + 38 110 2 2 110 + 40 110 2 2 109 + 42 110 2 2 109 + 44 110 2 2 109 + 46 110 2 2 109 + 48 110 2 2 108 + 50 110 2 2 107 + 52 110 2 2 107 + 54 110 2 2 107 + 56 110 2 2 106 + 58 110 2 2 107 + 60 110 2 2 105 + 62 110 2 2 104 + 64 110 2 2 104 + 66 110 2 2 102 + 68 110 2 2 102 + 70 110 2 2 102 + 72 110 2 2 108 + 74 110 2 2 111 + 76 110 2 2 102 + 78 110 2 2 101 + 80 110 2 2 101 + 82 110 2 2 101 + 84 110 2 2 99 + 86 110 2 2 97 + 88 110 2 2 100 + 90 110 2 2 98 + 92 110 2 2 96 + 94 110 2 2 96 + 96 110 2 2 97 + 98 110 2 2 97 + 100 110 2 2 98 + 102 110 2 2 98 + 0 112 2 2 119 + 2 112 2 2 118 + 4 112 2 2 117 + 6 112 2 2 117 + 8 112 2 2 117 + 10 112 2 2 117 + 12 112 2 2 116 + 14 112 2 2 115 + 16 112 2 2 113 + 18 112 2 2 114 + 20 112 2 2 114 + 22 112 2 2 113 + 24 112 2 2 113 + 26 112 2 2 112 + 28 112 2 2 112 + 30 112 2 2 111 + 32 112 2 2 111 + 34 112 2 2 111 + 36 112 2 2 110 + 38 112 2 2 110 + 40 112 2 2 109 + 42 112 2 2 109 + 44 112 2 2 108 + 46 112 2 2 108 + 48 112 2 2 106 + 50 112 2 2 106 + 52 112 2 2 106 + 54 112 2 2 106 + 56 112 2 2 106 + 58 112 2 2 106 + 60 112 2 2 104 + 62 112 2 2 104 + 64 112 2 2 103 + 66 112 2 2 103 + 68 112 2 2 101 + 70 112 2 2 102 + 72 112 2 2 99 + 74 112 2 2 99 + 76 112 2 2 110 + 78 112 2 2 106 + 80 112 2 2 102 + 82 112 2 2 98 + 84 112 2 2 98 + 86 112 2 2 98 + 88 112 2 2 98 + 90 112 2 2 97 + 92 112 2 2 96 + 94 112 2 2 97 + 96 112 2 2 98 + 98 112 2 2 99 + 100 112 2 2 98 + 102 112 2 2 98 + 0 114 2 2 119 + 2 114 2 2 118 + 4 114 2 2 117 + 6 114 2 2 117 + 8 114 2 2 116 + 10 114 2 2 117 + 12 114 2 2 115 + 14 114 2 2 115 + 16 114 2 2 113 + 18 114 2 2 112 + 20 114 2 2 113 + 22 114 2 2 113 + 24 114 2 2 113 + 26 114 2 2 112 + 28 114 2 2 112 + 30 114 2 2 111 + 32 114 2 2 112 + 34 114 2 2 111 + 36 114 2 2 111 + 38 114 2 2 110 + 40 114 2 2 108 + 42 114 2 2 109 + 44 114 2 2 107 + 46 114 2 2 107 + 48 114 2 2 107 + 50 114 2 2 107 + 52 114 2 2 105 + 54 114 2 2 105 + 56 114 2 2 105 + 58 114 2 2 105 + 60 114 2 2 104 + 62 114 2 2 104 + 64 114 2 2 103 + 66 114 2 2 103 + 68 114 2 2 101 + 70 114 2 2 101 + 72 114 2 2 99 + 74 114 2 2 99 + 76 114 2 2 97 + 78 114 2 2 97 + 80 114 2 2 97 + 82 114 2 2 97 + 84 114 2 2 97 + 86 114 2 2 97 + 88 114 2 2 98 + 90 114 2 2 97 + 92 114 2 2 97 + 94 114 2 2 96 + 96 114 2 2 98 + 98 114 2 2 99 + 100 114 2 2 97 + 102 114 2 2 97 + 0 116 2 2 118 + 2 116 2 2 117 + 4 116 2 2 117 + 6 116 2 2 117 + 8 116 2 2 117 + 10 116 2 2 115 + 12 116 2 2 114 + 14 116 2 2 113 + 16 116 2 2 113 + 18 116 2 2 112 + 20 116 2 2 111 + 22 116 2 2 112 + 24 116 2 2 112 + 26 116 2 2 112 + 28 116 2 2 111 + 30 116 2 2 111 + 32 116 2 2 111 + 34 116 2 2 111 + 36 116 2 2 111 + 38 116 2 2 109 + 40 116 2 2 108 + 42 116 2 2 109 + 44 116 2 2 108 + 46 116 2 2 107 + 48 116 2 2 106 + 50 116 2 2 107 + 52 116 2 2 106 + 54 116 2 2 105 + 56 116 2 2 105 + 58 116 2 2 105 + 60 116 2 2 105 + 62 116 2 2 104 + 64 116 2 2 104 + 66 116 2 2 103 + 68 116 2 2 103 + 70 116 2 2 101 + 72 116 2 2 99 + 74 116 2 2 98 + 76 116 2 2 98 + 78 116 2 2 98 + 80 116 2 2 97 + 82 116 2 2 96 + 84 116 2 2 96 + 86 116 2 2 96 + 88 116 2 2 96 + 90 116 2 2 97 + 92 116 2 2 97 + 94 116 2 2 97 + 96 116 2 2 97 + 98 116 2 2 97 + 100 116 2 2 95 + 102 116 2 2 95 + 0 118 2 2 118 + 2 118 2 2 118 + 4 118 2 2 117 + 6 118 2 2 117 + 8 118 2 2 117 + 10 118 2 2 115 + 12 118 2 2 114 + 14 118 2 2 112 + 16 118 2 2 113 + 18 118 2 2 112 + 20 118 2 2 110 + 22 118 2 2 112 + 24 118 2 2 112 + 26 118 2 2 112 + 28 118 2 2 111 + 30 118 2 2 111 + 32 118 2 2 110 + 34 118 2 2 112 + 36 118 2 2 110 + 38 118 2 2 110 + 40 118 2 2 109 + 42 118 2 2 109 + 44 118 2 2 108 + 46 118 2 2 108 + 48 118 2 2 106 + 50 118 2 2 106 + 52 118 2 2 106 + 54 118 2 2 105 + 56 118 2 2 106 + 58 118 2 2 105 + 60 118 2 2 105 + 62 118 2 2 104 + 64 118 2 2 105 + 66 118 2 2 103 + 68 118 2 2 102 + 70 118 2 2 102 + 72 118 2 2 99 + 74 118 2 2 99 + 76 118 2 2 98 + 78 118 2 2 98 + 80 118 2 2 97 + 82 118 2 2 96 + 84 118 2 2 96 + 86 118 2 2 96 + 88 118 2 2 96 + 90 118 2 2 96 + 92 118 2 2 97 + 94 118 2 2 98 + 96 118 2 2 97 + 98 118 2 2 97 + 100 118 2 2 95 + 102 118 2 2 95 diff --git a/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM4 b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM4 new file mode 100755 index 000000000..9b4b994b5 --- /dev/null +++ b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM4 @@ -0,0 +1,14 @@ +&NAM_OASIS IL_NB_TIME_STEPS=10, + DELTA_T=360, + DATA_FILENAME='grid_toy_model.nc' / + +&NAM_FCT_SEND CTYPE_FCT='FILES', + CNAME_FILE='toy_coupled_field.nc', + VALUE=10 / + +&NAM_RECV_FIELDS NB_RECV_FIELDS=1, + CRCVFIELDS(1)='TOY__CHA' / + +&NAM_SEND_FIELDS NB_SEND_FIELDS=2, + CSNDFIELDS(1)='TOY_U10M', + CSNDFIELDS(2)='TOY_V10M' / diff --git a/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM5 b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM5 new file mode 100755 index 000000000..9b4b994b5 --- /dev/null +++ b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM5 @@ -0,0 +1,14 @@ +&NAM_OASIS IL_NB_TIME_STEPS=10, + DELTA_T=360, + DATA_FILENAME='grid_toy_model.nc' / + +&NAM_FCT_SEND CTYPE_FCT='FILES', + CNAME_FILE='toy_coupled_field.nc', + VALUE=10 / + +&NAM_RECV_FIELDS NB_RECV_FIELDS=1, + CRCVFIELDS(1)='TOY__CHA' / + +&NAM_SEND_FIELDS NB_SEND_FIELDS=2, + CSNDFIELDS(1)='TOY_U10M', + CSNDFIELDS(2)='TOY_V10M' / diff --git a/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM6 b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM6 new file mode 100755 index 000000000..14840249c --- /dev/null +++ b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM6 @@ -0,0 +1,14 @@ +&NAM_OASIS IL_NB_TIME_STEPS=20, + DELTA_T=180, + DATA_FILENAME='grid_toy_model.nc' / + +&NAM_FCT_SEND CTYPE_FCT='FILES', + CNAME_FILE='toy_coupled_field.nc', + VALUE=10 / + +&NAM_RECV_FIELDS NB_RECV_FIELDS=1, + CRCVFIELDS(1)='TOY__CHA' / + +&NAM_SEND_FIELDS NB_SEND_FIELDS=2, + CSNDFIELDS(1)='TOY_U10M', + CSNDFIELDS(2)='TOY_V10M' / diff --git a/regtests/ww3_tp2.14/input/namcouple.OASACM4 b/regtests/ww3_tp2.14/input/namcouple.OASACM4 new file mode 100755 index 000000000..56a6795dc --- /dev/null +++ b/regtests/ww3_tp2.14/input/namcouple.OASACM4 @@ -0,0 +1,135 @@ +# This is a typical input file for OASIS3-MCT. +# Keywords used in previous versions of OASIS3 +# but now obsolete are marked "Not used" +# Don't hesitate to ask precisions or make suggestions (oasishelp@cerfacs.fr). +# +# Any line beginning with # is ignored. Blank lines are not allowed. +# +######################################################################### + $NFIELDS +# The number of fields described in the second part of the namcouple. +# + 3 + $END +######################################################################### + $NBMODEL +# The number of models in this experiment + their names (6 characters) +# + 2 toyexe wwatch + $END +########################################################################### + $RUNTIME +# The total simulated time for this run in seconds +# + 3600 + $END +########################################################################### + $NLOGPRT +# The first (0 to 30) and second (0 to 3) numbers refer to the ammount of +# debug and time statistic information written by OASIS3-MCT for each model +# and processor (see user manual for more details) +# + 1 + $END +########################################################################### + $STRINGS +# +# The above variables are the general parameters for the experiment. +# Everything below has to do with the fields being exchanged. +# +# line 1: field in ww3 model, field in target model, unused, coupling +# period, number of transformation, restart file, field status +# line 2: nb of pts for ww3 grid without halo first dim, and second dim, +# for target grid first dim, and second dim (optionals, default=0), +# ww3 grid name, target grid name, lag index +# line 3: ww3 grid periodical (P) or regional (R), and nb of overlapping +# points, target grid periodical (P) or regional (R), and number of +# overlapping points +# line 4: list of transformations performed +# line 5: parameters for each transformation +# +# See the correspondances between WW3 and OASIS fields below: +# +# |--------------------------------------------------------------| +# | received fields by ww3 from Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_OWDH WW3_OWDU WW3_OWDV | +# | SSH | WW3__SSH | +# | CUR | WW3_OSSU WW3_OSSV | +# |--------------------------------------------------------------| +# | received fields by ww3 from Atmospheric model : WW3 | OASIS | +# --------------------------------------------------------------| +# | WND | WW3__U10 WW3__V10 | +# |--------------------------------------------------------------| +# | received fields by ww3 from Ice model : WW3 | OASIS | +# --------------------------------------------------------------| +# | ICE | WW3__ICE | +# | IC1 | WW3__IC1 | +# | IC5 | WW3__IC5 | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_ODRY | +# | T0M1 | WW3_T0M1 | +# | HS | WW3__OHS | +# | DIR | WW3_CDIR WW3_SDIR | +# | BHD | WW3__BHD | +# | TWO | WW3_TWOX WW3_TWOY | +# | UBR | WW3__UBR | +# | FOC | WW3__FOC | +# | TAW | WW3_TAWX WW3_TAWY | +# | LM | WW3___LM | +# | OCHA | WW3_OCHA | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Atmospheric model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | CUR | WW3_WSSU WW3_WSSV | +# | ACHA | WW3_ACHA | +# | HS | WW3__AHS | +# | FP | WW3___FP | +# | FWS | WW3__FWS | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ice model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | TWI | WW3_TWIX WW3_TWIY | +# | IC5 | WW3_ICEF | +# |--------------------------------------------------------------| +# +# +# +# ------------------------------------------ +# TOY (toyexe) ==> WW3 (wwatch) +# ------------------------------------------ +# +#~~~~~~~~~~~ +# Field 1 : +#~~~~~~~~~~~ +TOY_U10M WW3__U10 1 360 1 r-toy.nc EXPOUT +80 80 103 119 toyt ww3t +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# +#~~~~~~~~~~~ +# Field 2 : +#~~~~~~~~~~~ +TOY_V10M WW3__V10 1 360 1 r-toy.nc EXPOUT +80 80 103 119 toyt ww3t +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# +# ----------------------------------------- +# WW3 (wwatch) ==> TOY (toyexe) +# ----------------------------------------- +# +#~~~~~~~~~~~ +# Field 3 : +#~~~~~~~~~~~ +WW3_ACHA TOY__CHA 1 360 1 r-ww3.nc EXPOUT +103 119 80 80 ww3t toyt +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# + $END diff --git a/regtests/ww3_tp2.14/input/namcouple.OASACM5 b/regtests/ww3_tp2.14/input/namcouple.OASACM5 new file mode 100755 index 000000000..56a6795dc --- /dev/null +++ b/regtests/ww3_tp2.14/input/namcouple.OASACM5 @@ -0,0 +1,135 @@ +# This is a typical input file for OASIS3-MCT. +# Keywords used in previous versions of OASIS3 +# but now obsolete are marked "Not used" +# Don't hesitate to ask precisions or make suggestions (oasishelp@cerfacs.fr). +# +# Any line beginning with # is ignored. Blank lines are not allowed. +# +######################################################################### + $NFIELDS +# The number of fields described in the second part of the namcouple. +# + 3 + $END +######################################################################### + $NBMODEL +# The number of models in this experiment + their names (6 characters) +# + 2 toyexe wwatch + $END +########################################################################### + $RUNTIME +# The total simulated time for this run in seconds +# + 3600 + $END +########################################################################### + $NLOGPRT +# The first (0 to 30) and second (0 to 3) numbers refer to the ammount of +# debug and time statistic information written by OASIS3-MCT for each model +# and processor (see user manual for more details) +# + 1 + $END +########################################################################### + $STRINGS +# +# The above variables are the general parameters for the experiment. +# Everything below has to do with the fields being exchanged. +# +# line 1: field in ww3 model, field in target model, unused, coupling +# period, number of transformation, restart file, field status +# line 2: nb of pts for ww3 grid without halo first dim, and second dim, +# for target grid first dim, and second dim (optionals, default=0), +# ww3 grid name, target grid name, lag index +# line 3: ww3 grid periodical (P) or regional (R), and nb of overlapping +# points, target grid periodical (P) or regional (R), and number of +# overlapping points +# line 4: list of transformations performed +# line 5: parameters for each transformation +# +# See the correspondances between WW3 and OASIS fields below: +# +# |--------------------------------------------------------------| +# | received fields by ww3 from Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_OWDH WW3_OWDU WW3_OWDV | +# | SSH | WW3__SSH | +# | CUR | WW3_OSSU WW3_OSSV | +# |--------------------------------------------------------------| +# | received fields by ww3 from Atmospheric model : WW3 | OASIS | +# --------------------------------------------------------------| +# | WND | WW3__U10 WW3__V10 | +# |--------------------------------------------------------------| +# | received fields by ww3 from Ice model : WW3 | OASIS | +# --------------------------------------------------------------| +# | ICE | WW3__ICE | +# | IC1 | WW3__IC1 | +# | IC5 | WW3__IC5 | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_ODRY | +# | T0M1 | WW3_T0M1 | +# | HS | WW3__OHS | +# | DIR | WW3_CDIR WW3_SDIR | +# | BHD | WW3__BHD | +# | TWO | WW3_TWOX WW3_TWOY | +# | UBR | WW3__UBR | +# | FOC | WW3__FOC | +# | TAW | WW3_TAWX WW3_TAWY | +# | LM | WW3___LM | +# | OCHA | WW3_OCHA | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Atmospheric model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | CUR | WW3_WSSU WW3_WSSV | +# | ACHA | WW3_ACHA | +# | HS | WW3__AHS | +# | FP | WW3___FP | +# | FWS | WW3__FWS | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ice model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | TWI | WW3_TWIX WW3_TWIY | +# | IC5 | WW3_ICEF | +# |--------------------------------------------------------------| +# +# +# +# ------------------------------------------ +# TOY (toyexe) ==> WW3 (wwatch) +# ------------------------------------------ +# +#~~~~~~~~~~~ +# Field 1 : +#~~~~~~~~~~~ +TOY_U10M WW3__U10 1 360 1 r-toy.nc EXPOUT +80 80 103 119 toyt ww3t +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# +#~~~~~~~~~~~ +# Field 2 : +#~~~~~~~~~~~ +TOY_V10M WW3__V10 1 360 1 r-toy.nc EXPOUT +80 80 103 119 toyt ww3t +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# +# ----------------------------------------- +# WW3 (wwatch) ==> TOY (toyexe) +# ----------------------------------------- +# +#~~~~~~~~~~~ +# Field 3 : +#~~~~~~~~~~~ +WW3_ACHA TOY__CHA 1 360 1 r-ww3.nc EXPOUT +103 119 80 80 ww3t toyt +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# + $END diff --git a/regtests/ww3_tp2.14/input/namcouple.OASACM6 b/regtests/ww3_tp2.14/input/namcouple.OASACM6 new file mode 100755 index 000000000..390a7b3ff --- /dev/null +++ b/regtests/ww3_tp2.14/input/namcouple.OASACM6 @@ -0,0 +1,135 @@ +# This is a typical input file for OASIS3-MCT. +# Keywords used in previous versions of OASIS3 +# but now obsolete are marked "Not used" +# Don't hesitate to ask precisions or make suggestions (oasishelp@cerfacs.fr). +# +# Any line beginning with # is ignored. Blank lines are not allowed. +# +######################################################################### + $NFIELDS +# The number of fields described in the second part of the namcouple. +# + 3 + $END +######################################################################### + $NBMODEL +# The number of models in this experiment + their names (6 characters) +# + 2 toyexe wwatch + $END +########################################################################### + $RUNTIME +# The total simulated time for this run in seconds +# + 3600 + $END +########################################################################### + $NLOGPRT +# The first (0 to 30) and second (0 to 3) numbers refer to the ammount of +# debug and time statistic information written by OASIS3-MCT for each model +# and processor (see user manual for more details) +# + 1 + $END +########################################################################### + $STRINGS +# +# The above variables are the general parameters for the experiment. +# Everything below has to do with the fields being exchanged. +# +# line 1: field in ww3 model, field in target model, unused, coupling +# period, number of transformation, restart file, field status +# line 2: nb of pts for ww3 grid without halo first dim, and second dim, +# for target grid first dim, and second dim (optionals, default=0), +# ww3 grid name, target grid name, lag index +# line 3: ww3 grid periodical (P) or regional (R), and nb of overlapping +# points, target grid periodical (P) or regional (R), and number of +# overlapping points +# line 4: list of transformations performed +# line 5: parameters for each transformation +# +# See the correspondances between WW3 and OASIS fields below: +# +# |--------------------------------------------------------------| +# | received fields by ww3 from Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_OWDH WW3_OWDU WW3_OWDV | +# | SSH | WW3__SSH | +# | CUR | WW3_OSSU WW3_OSSV | +# |--------------------------------------------------------------| +# | received fields by ww3 from Atmospheric model : WW3 | OASIS | +# --------------------------------------------------------------| +# | WND | WW3__U10 WW3__V10 | +# |--------------------------------------------------------------| +# | received fields by ww3 from Ice model : WW3 | OASIS | +# --------------------------------------------------------------| +# | ICE | WW3__ICE | +# | IC1 | WW3__IC1 | +# | IC5 | WW3__IC5 | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_ODRY | +# | T0M1 | WW3_T0M1 | +# | HS | WW3__OHS | +# | DIR | WW3_CDIR WW3_SDIR | +# | BHD | WW3__BHD | +# | TWO | WW3_TWOX WW3_TWOY | +# | UBR | WW3__UBR | +# | FOC | WW3__FOC | +# | TAW | WW3_TAWX WW3_TAWY | +# | LM | WW3___LM | +# | OCHA | WW3_OCHA | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Atmospheric model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | CUR | WW3_WSSU WW3_WSSV | +# | ACHA | WW3_ACHA | +# | HS | WW3__AHS | +# | FP | WW3___FP | +# | FWS | WW3__FWS | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ice model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | TWI | WW3_TWIX WW3_TWIY | +# | IC5 | WW3_ICEF | +# |--------------------------------------------------------------| +# +# +# +# ------------------------------------------ +# TOY (toyexe) ==> WW3 (wwatch) +# ------------------------------------------ +# +#~~~~~~~~~~~ +# Field 1 : +#~~~~~~~~~~~ +TOY_U10M WW3__U10 1 180 1 r-toy.nc EXPOUT +80 80 2889 1 toyt ww3t +R 0 R 0 +MAPPING +../input/rmp_toyt_to_ww3t_NEARESTSTOD.nc +# +#~~~~~~~~~~~ +# Field 2 : +#~~~~~~~~~~~ +TOY_V10M WW3__V10 1 180 1 r-toy.nc EXPOUT +80 80 2889 1 toyt ww3t +R 0 R 0 +MAPPING +../input/rmp_toyt_to_ww3t_NEARESTSTOD.nc +# +# ----------------------------------------- +# WW3 (wwatch) ==> TOY (toyexe) +# ----------------------------------------- +# +#~~~~~~~~~~~ +# Field 3 : +#~~~~~~~~~~~ +WW3_ACHA TOY__CHA 1 180 1 r-ww3.nc EXPOUT +2889 1 80 80 ww3t toyt +R 0 R 0 +MAPPING +../input/rmp_ww3t_to_toyt_NEARESTSTOD.nc +# + $END diff --git a/regtests/ww3_tp2.14/input/namelists_BREST.nml b/regtests/ww3_tp2.14/input/namelists_BREST.nml new file mode 100644 index 000000000..9216a3692 --- /dev/null +++ b/regtests/ww3_tp2.14/input/namelists_BREST.nml @@ -0,0 +1,2 @@ +&PSMC DTIME=10800., RFMAXD=36., LvSMC=2, NBISMC=0, CFLTM=0.1 / +END OF NAMELISTS diff --git a/regtests/ww3_tp2.14/input/prep_env.sh b/regtests/ww3_tp2.14/input/prep_env.sh index 5262d33d7..bba5df192 100755 --- a/regtests/ww3_tp2.14/input/prep_env.sh +++ b/regtests/ww3_tp2.14/input/prep_env.sh @@ -78,7 +78,11 @@ ln -sf ../input/namcouple.$swtstr namcouple echo ' copy toy model inputs' cd $path_w -cp ../input/toy/r-toy.nc.$swtstr r-toy.nc +if [ -f ../input/toy/r-toy.nc.$swtstr ]; then + cp ../input/toy/r-toy.nc.$swtstr r-toy.nc +else + echo "WARNING: model input ../input/toy/r-toy.nc.$swtstr does not exist" +fi ln -sf ../input/toy/grid_toy_model.nc . ln -sf ../input/toy/toy_coupled_field.nc.$swtstr toy_coupled_field.nc ln -sf ../input/TOYNAMELIST.nam.$swtstr TOYNAMELIST.nam @@ -86,7 +90,11 @@ ln -sf ../input/toy/toy_model . echo ' copy ww3 model inputs' cd $path_w -cp ../input/r-ww3.nc.$swtstr r-ww3.nc +if [ -f ../input/r-ww3.nc.$swtstr ]; then + cp ../input/r-ww3.nc.$swtstr r-ww3.nc +else + echo "WARNING: model input ../input/toy/r-ww3.nc.$swtstr does not exist" +fi cp ../input/ww3_shel_${swtstr}.inp ../input/ww3_shel.inp cp ../input/ww3_shel_${swtstr}.nml ../input/ww3_shel.nml echo '' diff --git a/regtests/ww3_tp2.14/input/switch_OASACM3 b/regtests/ww3_tp2.14/input/switch_OASACM3 new file mode 100755 index 000000000..fad60d4f1 --- /dev/null +++ b/regtests/ww3_tp2.14/input/switch_OASACM3 @@ -0,0 +1 @@ +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.14/input/switch_OASACM4 b/regtests/ww3_tp2.14/input/switch_OASACM4 new file mode 100755 index 000000000..9fff33b21 --- /dev/null +++ b/regtests/ww3_tp2.14/input/switch_OASACM4 @@ -0,0 +1 @@ +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 COU OASIS OASACM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.14/input/switch_OASACM5 b/regtests/ww3_tp2.14/input/switch_OASACM5 new file mode 100755 index 000000000..9fff33b21 --- /dev/null +++ b/regtests/ww3_tp2.14/input/switch_OASACM5 @@ -0,0 +1 @@ +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 COU OASIS OASACM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.14/input/switch_OASACM6 b/regtests/ww3_tp2.14/input/switch_OASACM6 new file mode 100755 index 000000000..033675aaa --- /dev/null +++ b/regtests/ww3_tp2.14/input/switch_OASACM6 @@ -0,0 +1 @@ +F90 NOGRB NC4 TRKNC DIST MPI SMC FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 COU OASIS OASACM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.14/input/ww3_grid_OASACM6.inp b/regtests/ww3_tp2.14/input/ww3_grid_OASACM6.inp new file mode 100755 index 000000000..038af0771 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_grid_OASACM6.inp @@ -0,0 +1,290 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ Grid name (C*30, in quotes) +$ + '***** WW3 Brest3km Grid ***** ' +$ +$ Frequency increment factor and first frequency (Hz) ---------------- $ +$ number of frequencies (wavenumbers) and directions +$ +1.1 0.0373 32 24 0. +$ +$ Set model flags ---------------------------------------------------- $ +$ - FLDRY Dry run (input/output only, no calculation). +$ - FLCX, FLCY Activate X and Y component of propagation. +$ - FLCTH, FLCK Activate direction and wavenumber shifts. +$ - FLSOU Activate source terms. +$ + F T T T T T +$ +$ Set time steps ----------------------------------------------------- $ +$ - Time step information (this information is always read) +$ maximum global time step, maximum CFL time step for x-y and +$ k-theta, minimum source term time step (all in seconds). +$ + 180. 45. 45. 10. +$ +$ Start of namelist input section ------------------------------------ $ +$ Starting with WAVEWATCH III version 2.00, the tunable parameters +$ for source terms, propagation schemes, and numerics are read using +$ namelists. Any namelist found in the folowing sections up to the +$ end-of-section identifier string (see below) is temporarily written +$ to ww3_grid.scratch, and read from there if necessary. Namelists +$ not needed for the given switch settings will be skipped +$ automatically, and the order of the namelists is immaterial. +$ As an example, namelist input to change SWELLF and ZWND in the +$ Tolman and Chalikov input would be +$ +$ &SIN2 SWELLF = 0.1, ZWND = 15. / +$ +$ Define constants in source terms ----------------------------------- $ +$ +$ Input - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +$ WAM-3 : Namelist SIN1 +$ CINP : Proportionality constant. +$ &SIN1 CINP= 0.25 / +$ Tolman and Chalikov : Namelist SIN2 +$ ZWND : Height of wind (m). +$ SWELLF : swell factor in (2.48). +$ STABSH, STABOF, CNEG, CPOS, FNEG : +$ c0, ST0, c1, c2 and f1 in . (2.63) +$ through (2.65) for definition of +$ effective wind speed (!/STAB2). +$ +$ Nonlinear interactions - - - - - - - - - - - - - - - - - - - - - - - +$ Discrete I.A. : Namelist SNL1 +$ LAMBDA : Lambda in source term. +$ NLPROP : C in sourc term. NOTE : default +$ value depends on other source +$ terms selected. +$ KDCONV : Factor before kd in Eq. (2.24). +$ KDMIN, SNLCS1, SNLCS2, SNLCS3 : +$ Minimum kd, and constants c1-3 +$ in depth scaling function. +$ Exact interactions : Namelist SNL2 +$ IQTYPE : Type of depth treatment +$ 1 : Deep water +$ 2 : Deep water / WAM scaling +$ 3 : Shallow water +$ TAILNL : Parametric tail power. +$ NDEPTH : Number of depths in for which +$ integration space is established. +$ Used for IQTYPE = 3 only +$ Namelist ANL2 +$ DEPTHS : Array with depths for NDEPTH = 3 +$ +$ Dissipation - - - - - - - - - - - - - - - - - - - - - - - - - - - - +$ WAM-3 : Namelist SDS1 +$ CDIS, APM : As in source term. +$ +$ Tolman and Chalikov : Namelist SDS2 +$ SDSA0, SDSA1, SDSA2, SDSB0, SDSB1, PHIMIN : +$ Constants a0, a1, a2, b0, b1 and +$ PHImin. +$ +$ Bottom friction - - - - - - - - - - - - - - - - - - - - - - - - - - +$ JONSWAP : Namelist SBT1 +$ GAMMA : As it says. +$ +$ Propagation schemes ------------------------------------------------ $ +$ First order : Namelist PRO1 +$ CFLTM : Maximum CFL number for refraction. +$ +$ UQ with diffusion : Namelist PRO2 +$ CFLTM : Maximum CFL number for refraction. +$ FLSOFT : Flag for 'soft' land boundaries. +$ DTIME : Swell age (s) in garden sprinkler +$ correction. If 0., all diffusion +$ switched off. If small non-zero +$ (DEFAULT !!!) only wave growth +$ diffusion. +$ LATMIN : Maximum latitude used in calc. of +$ strength of diffusion for prop. +$ +$ UQ with averaging : Namelist PRO3 +$ CFLTM : Maximum CFL number for refraction. +$ FLSOFT : Flag for 'soft' land boundaries. +$ WDTHCG : Tuning factor propag. direction. +$ WDTHTH : Tuning factor normal direction. +$ +$ UQ with divergence : Namelist PRO4 +$ CFLTM : Maximum CFL number for refraction. +$ FLSOFT : Flag for 'soft' land boundaries. +$ QTFAC : Tuning factor Eq. (3.41). +$ RSFAC : Tuning factor Eq. (3.42). +$ RNFAC : Tuning factor Eq. (3.43). +$ +$ Miscellaneous ------------------------------------------------------ $ +$ Misc. parameters : Namelist MISC +$ CICE0 : Ice concentration cut-off. +$ CICEN : Ice concentration cut-off. +$ XSEED : Xseed in seeding alg. (!/SEED). +$ FLAGTR : Indicating presence and type of +$ subgrid information : +$ 0 : No subgrid information. +$ 1 : Transparancies at cell boun- +$ daries between grid points. +$ 2 : Transp. at cell centers. +$ 3 : Like 1 with cont. ice. +$ 4 : Like 2 with cont. ice. +$ XP, XR, XFILT +$ Xp, Xr and Xf for the dynamic +$ integration scheme. +$ +$ In the 'Out of the box' test setup we run with sub-grid obstacles +$ and with continuous ice treatment. +$ +$ &MISC CICE0 = 0.25, CICEN = 0.75, FLAGTR = 4 / +$ +$ Mandatory string to identify end of namelist input section. +$ + &PSMC DTIME=10800.,RFMAXD=36.,LvSMC=2,NBISMC=0,CFLTM=0.1 / +END OF NAMELISTS +$ +$ Define grid -------------------------------------------------------- $ +$ Four records containing : +$ 1 NX, NY. As the outer grid lines are always defined as land +$ points, the minimum size is 3x3. +$ 2 Grid increments SX, SY (degr.or m) and scaling (division) factor. +$ If NX*SX = 360., latitudinal closure is applied. +$ 3 Coordinates of (1,1) (degr.) and scaling (division) factor. +$ 4 Limiting bottom depth (m) to discriminate between land and sea +$ points, minimum water depth (m) as allowed in model, unit number +$ of file with bottom depths, scale factor for bottom depths (mult.), +$ IDLA, IDFM, format for formatted read, FROM and filename. +$ IDLA : Layout indicator : +$ 1 : Read line-by-line bottom to top. +$ 2 : Like 1, single read statement. +$ 3 : Read line-by-line top to bottom. +$ 4 : Like 3, single read statement. +$ IDFM : format indicator : +$ 1 : Free format. +$ 2 : Fixed format with above format descriptor. +$ 3 : Unformatted. +$ FROM : file type parameter +$ 'UNIT' : open file by unit number only. +$ 'NAME' : open file by name and assign to unit. +$ +$ Example for longitude-latitude grid (switch !/LLG), for Cartesian +$ grid the unit is meters (NOT km). +$ + 'RECT' T 'NONE' + 52 60 + 0.0380 0.0250 1. + -6.1285 47.6313 1. + -0.1 10.0 30 -1. 1 1 '(....)' 'NAME' 'SMC_unused_file' +$ +$ If the above unit number equals 10, the bottom data is read from +$ this file and follows below (no intermediate comment lines allowed). +$ +$ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +$ +$ If sub-grid information is avalaible as indicated by FLAGTR above, +$ additional input to define this is needed below. In such cases a +$ field of fractional obstructions at or between grid points needs to +$ be supplied. First the location and format of the data is defined +$ by (as above) : +$ - Unit number of file (can be 10, and/or identical to bottem depth +$ unit), scale factor for fractional obstruction, IDLA, IDFM, +$ format for formatted read, FROM and filename +$ +$ 10 0.2 3 1 '(....)' 'NAME' 'obstr.inp' +$ +$ *** NOTE if this unit number is the same as the previous bottom +$ depth unit number, it is assumed that this is the same file +$ without further checks. *** +$ +$ If the above unit number equals 10, the bottom data is read from +$ this file and follows below (no intermediate comment lines allowed, +$ except between the two fields). +$ +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 5 0 0 0 0 0 +$ 0 0 0 0 0 0 5 0 0 0 0 0 +$ 0 0 0 0 0 0 4 0 0 0 0 0 +$ 0 0 0 0 0 0 4 0 0 0 0 0 +$ 0 0 0 0 0 0 5 0 0 0 0 0 +$ 0 0 0 0 0 0 5 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 5 5 5 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 +$ +$ *** NOTE size of fields is always NX * NY *** +$ +$ 10 3 1 '(....)' 'PART' 'mapsta.inp' +$ *** NOTE size of fields is always NX * NY *** +$ +$ ----------------------------------------------------------------------------- +$ SMC grid cell and face arrays from 3 spearate files. --------- $ +$ ----------------------------------------------------------------------------- +$ The first line of each file will have the array dimension parameters. +$ So the first line are read first to determine the array sizes for the +$ following array read calls. JGLi18Dec2012 +$ + 32 1 1 '(....)' '../input/BrestSMCels.dat' + 33 1 1 '(....)' '../input/BrestISides.dat' + 34 1 1 '(....)' '../input/BrestJSides.dat' + 31 1 1 '(....)' '../input/BrestObstrs.dat' +$ +$ Input boundary points ---------------------------------------------- $ +$ An unlimited number of lines identifying points at which input +$ boundary conditions are to be defined. If the actual input data is +$ not defined in the actual wave model run, the initial conditions +$ will be applied as constant boundary conditions. Each line contains: +$ Discrete grid counters (IX,IY) of the active point and a +$ connect flag. If this flag is true, and the present and previous +$ point are on a grid line or diagonal, all intermediate points +$ are also defined as boundary points. +$ +$ 103 86 F +$ 103 119 T +$ 1 119 T +$ 1 1 T +$ 103 1 T +$ 103 11 T + 39 1 1 '(....)' 'NAME' 'SMC_unused_file' +$ +$ Close list by defining point (0,0) (mandatory) +$ +$ 0 0 F +$ Excluded grid points from segment data ( FROM != PART ) +$ First defined as lines, identical to the definition of the input +$ boundary points, and closed the same way. +$ +$ 0 0 F +$ +$ Second, define a point in a closed body of sea points to remove +$ the entire body os sea points. Also close by point (0,0) +$ +$ 0 0 +$ +$ Output boundary points --------------------------------------------- $ +$ Output boundary points are defined as a number of straight lines, +$ defined by its starting point (X0,Y0), increments (DX,DY) and number +$ of points. A negative number of points starts a new output file. +$ Note that this data is only generated if requested by the actual +$ program. Example again for spherical grid in degrees. +$ +$ Close list by defining line with 0 points (mandatory) +$ + 0. 0. 0. 0. 0 +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.14/input/ww3_grid_OASACM6.nml b/regtests/ww3_tp2.14/input/ww3_grid_OASACM6.nml new file mode 100644 index 000000000..8fcd36021 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_grid_OASACM6.nml @@ -0,0 +1,319 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.1 + SPECTRUM%FREQ1 = 0.0373 + SPECTRUM%NK = 32 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLCX = T + RUN%FLCY = T + RUN%FLCTH = T + RUN%FLCK = T + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 180. + TIMESTEPS%DTXY = 45. + TIMESTEPS%DTKTH = 45. + TIMESTEPS%DTMIN = 10. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = '***** WW3 Brest3km Grid ***** ' + GRID%NML = '../input/namelists_BREST.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.1 + GRID%DMIN = 10.0 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 52 + RECT%NY = 60 + RECT%SX = 0.0380 + RECT%SY = 0.0250 + RECT%X0 = -6.1285 + RECT%Y0 = 47.6313 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -1. + DEPTH%FROM = 'NAME' + DEPTH%FILENAME = 'SMC_unused_file' + DEPTH%IDF = 30 + DEPTH%FORMAT = '(....)' +/ + +! -------------------------------------------------------------------- ! +! Define the SMC grid +! -------------------------------------------------------------------- ! +&SMC_NML + SMC%MCELS%IDF = 32 + SMC%MCELS%IDLA = 1 + SMC%MCELS%IDFM = 1 + SMC%MCELS%FORMAT = '(....)' + SMC%MCELS%FILENAME = '../input/BrestSMCels.dat' + + SMC%ISIDE%IDF = 33 + SMC%ISIDE%IDLA = 1 + SMC%ISIDE%IDFM = 1 + SMC%ISIDE%FORMAT = '(....)' + SMC%ISIDE%FILENAME = '../input/BrestISides.dat' + + SMC%JSIDE%IDF = 34 + SMC%JSIDE%IDLA = 1 + SMC%JSIDE%IDFM = 1 + SMC%JSIDE%FORMAT = '(....)' + SMC%JSIDE%FILENAME = '../input/BrestJSides.dat' + + SMC%SUBTR%IDF = 31 + SMC%SUBTR%IDLA = 1 + SMC%SUBTR%IDFM = 1 + SMC%SUBTR%FORMAT = '(....)' + SMC%SUBTR%FILENAME = '../input/BrestObstrs.dat' +/ + +! -------------------------------------------------------------------- ! +! Define the mask +! -------------------------------------------------------------------- ! +&MASK_NML + MASK%IDF = 39 + MASK%IDLA = 1 + MASK%IDFM = 1 + MASK%FORMAT = '(....)' + MASK%FROM = 'NAME' + MASK%FILENAME = 'SMC_unused_file' +/ + +! -------------------------------------------------------------------- ! +! Define the input boundary points via INBND_COUNT_NML and +! INBND_POINT_NML namelist +! - for RECT, CURV and UNST grids - +! +! * If no mask defined, INBOUND can be used +! +! * If the actual input data is not defined in the actual wave model run +! the initial conditions will be applied as constant boundary conditions. +! +! * The number of points is defined by INBND_COUNT +! +! * The points must start from index 1 to N +! +! * Each line contains: +! Discrete grid counters (IX,IY) of the active point and a +! connect flag. If this flag is true, and the present and previous +! point are on a grid line or diagonal, all intermediate points +! are also defined as boundary points. +! +! * Included point : +! grid points from segment data +! Defines as lines identifying points at which +! input boundary conditions are to be defined. +! +! * namelist must be terminated with / +! * definitions & defaults: +! INBND_COUNT%N_POINT = 0 ! number of segments +! +! INBND_POINT(I)%X_INDEX = 0 ! x index included point +! INBND_POINT(I)%Y_INDEX = 0 ! y index included point +! INBND_POINT(I)%CONNECT = F ! connect flag +! +! OR +! INBND_POINT(I) = 0 0 F ! included point +! -------------------------------------------------------------------- ! +&INBND_COUNT_NML + INBND_COUNT%N_POINT = 6 +/ + +&INBND_POINT_NML + INBND_POINT(1) = 103 86 F + INBND_POINT(2) = 103 119 T + INBND_POINT(3) = 1 119 T + INBND_POINT(4) = 1 1 T + INBND_POINT(5) = 103 1 T + INBND_POINT(6) = 103 11 T +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.14/input/ww3_ounf.inp-OASACM6 b/regtests/ww3_tp2.14/input/ww3_ounf.inp-OASACM6 new file mode 100755 index 000000000..b192de6cd --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_ounf.inp-OASACM6 @@ -0,0 +1,42 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 20080310 000000 180 100 +$ +$ Output request flags identifying fields as in ww3_shel.inp. See that +$ file for a full documentation of field output options. Namelist type +$ selection is used here (for alternative F/T flags, see ww3_shel.inp). +$ + N + HS FP DIR DP CHA UST DPT CUR WND ICE IC1 IC5 TWI +$ +$--------------------------------------------------------------------- $ +$ netCDF version [3,4] +$ and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ swell partitions [0 1 2 3 4 5] +$ variables in same file [T] or not [F] +$ + 3 4 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +$ IX and IY ranges [regular:IX NX IY NY DX DY, unstructured:IP NP DP DP] +$ +ww3. +6 +2 +-999.9 -999.9 -999.9 -999.9 1 +$ +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time indicator with S3 +$ characters, and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.inp new file mode 100755 index 000000000..83ff190ce --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.inp @@ -0,0 +1,153 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shell input file $ +$ -------------------------------------------------------------------- $ +$ Define input to be used with F/T/C flag for use or nor or coupling and +$ T/F flag for definition as a homogeneous field. +$ +$ Include ice and mud parameters only if IC1/2/3/4 used : + F F Ice parameter 1 + F F Ice parameter 2 + F F Ice parameter 3 + F F Ice parameter 4 + F F Ice parameter 5 + F F Mud parameter 1 + F F Mud parameter 2 + F F Mud parameter 3 + F F Water levels + F F Currents + F F Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ +$ Time frame of calculations ----------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ - Ending time in yyyymmdd hhmmss format. +$ + 20110902 000000 + 20110902 010000 +$ +$ Define output data ------------------------------------------------- $ +$ +$ Define output server mode. This is used only in the parallel version +$ of the model. To keep the input file consistent, it is always needed. +$ IOSTYP = 1 is generally recommended. IOSTYP > 2 may be more efficient +$ for massively parallel computations. Only IOSTYP = 0 requires a true +$ parallel file system like GPFS. +$ +$ IOSTYP = 0 : No data server processes, direct access output from +$ each process (requires true parallel file system). +$ 1 : No data server process. All output for each type +$ performed by process that performs computations too. +$ 2 : Last process is reserved for all output, and does no +$ computing. +$ 3 : Multiple dedicated output processes. +$ + 1 +$ +$ Five output types are available (see below). All output types share +$ a similar format for the first input line: +$ - first time in yyyymmdd hhmmss format, output interval (s), and +$ last time in yyyymmdd hhmmss format (all integers). +$ Output is disabled by setting the output interval to 0. +$ +$ ------------------------------------------------------------------- $ +$ +$ Type 1 : Fields of mean wave parameters +$ Standard line and line with logical flags to activate output +$ fields as defined in section 2.4 of the manual. The logical +$ flags are not supplied if no output is requested. The logical +$ flags can be placed on multiple consecutive lines. However, +$ the total number and order of the logical flags is fixed. +$ The raw data file is out_grd.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 000000 180 20110902 010000 +$---------------------------------------------------------------- +$ Output request flags identifying fields. +$ +N +$ +HS FP DIR DP CHA UST DPT CUR WND +$ +$---------------------------------------------------------------- +$ +$ Type 2 : Point output +$ Standard line and a number of lines identifying the +$ longitude, latitude and name (C*40) of output points. +$ The list is closed by defining a point with the name +$ 'STOPSTRING'. No point info read if no point output is +$ requested (i.e., no 'STOPSTRING' needed). +$ The raw data file is out_pnt.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 000000 0 20110902 010000 +$ -4.97 48.29 '62069' +$ -6.00 48.29 'Boundary' +$ 0.0 0.0 'STOPSTRING' +$ +$ +$ Type 3 : Output along track. +$ Flag for formatted input file. +$ The data files are track_i.ww3 and +$ track_o.ww3, see w3iotr.ftn for ad. doc. +$ + 20110902 000000 0 20110902 010000 +$ T +$ +$ Type 4 : Restart files (no additional data required). +$ The data file is restartN.ww3, see +$ w3iors.ftn for additional doc. +$ + 20110902 010000 3600 20110902 020000 F T +CHA +$ +$ Type 5 : Boundary data (no additional data required). +$ The data file is nestN.ww3, see +$ w3iobcmd.ftn for additional doc. +$ + 20110902 000000 0 20110902 010000 +$ +$ Type 6 : Separated wave field data (dummy for now). +$ First, last step IX and IY, flag for formatted file +$ + 20110902 000000 0 20110902 010000 +$ 0 999 1 0 999 1 T +$ +$ Type 7 : Coupling. (must be fully commented if not used with switch COU) +$ Namelist type selection is used here. +$ Diagnostic fields to exchange. (see namcouple for more information) +$ +$ 20110902 000000 360 20110902 010000 +$ N +$ +$ - Sent fields by ww3: +$ - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +$ - Atmospheric model : ACHA AHS TP (or FP) FWS +$ - Ice model : IC5 TWI +$ +$ ACHA +$ +$ - Received fields by ww3: +$ - Ocean model : SSH CUR +$ - Atmospheric model : WND +$ - Ice model : ICE IC1 IC5 +$ +$ WND +$ +$ Homogeneous field data --------------------------------------------- $ +$ Homogeneous fields can be defined by a list of lines containing an ID +$ string 'LEV' 'CUR' 'WND', date and time information (yyyymmdd +$ hhmmss), value (S.I. units), direction (current and wind, oceanogr. +$ convention degrees)) and air-sea temperature difference (degrees C). +$ 'STP' is mandatory stop string. +$ Also defined here are the speed with which the grid is moved +$ continuously, ID string 'MOV', parameters as for 'CUR'. +$ +$ 'CUR' 20110902 000000 2.0 25. + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.nml new file mode 100644 index 000000000..fbd9fb30e --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.nml @@ -0,0 +1,337 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '20110902 000000' + DOMAIN%STOP = '20110902 010000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'F' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! longitude latitude 'name' (C*40) +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS FP DIR DP CHA UST DPT CUR WND' + TYPE%RESTART%EXTRA = 'CHA' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '20110902 000000' '180' '20110902 010000' + DATE%RESTART = '20110902 010000' '3600' '20110902 020000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.inp new file mode 100755 index 000000000..9d6dcd989 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.inp @@ -0,0 +1,152 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shell input file $ +$ -------------------------------------------------------------------- $ +$ Define input to be used with F/T/C flag for use or nor or coupling and +$ T/F flag for definition as a homogeneous field. +$ +$ Include ice and mud parameters only if IC1/2/3/4 used : + F F Ice parameter 1 + F F Ice parameter 2 + F F Ice parameter 3 + F F Ice parameter 4 + F F Ice parameter 5 + F F Mud parameter 1 + F F Mud parameter 2 + F F Mud parameter 3 + F F Water levels + F F Currents + C F Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ +$ Time frame of calculations ----------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ - Ending time in yyyymmdd hhmmss format. +$ + 20110902 010000 + 20110902 020000 +$ +$ Define output data ------------------------------------------------- $ +$ +$ Define output server mode. This is used only in the parallel version +$ of the model. To keep the input file consistent, it is always needed. +$ IOSTYP = 1 is generally recommended. IOSTYP > 2 may be more efficient +$ for massively parallel computations. Only IOSTYP = 0 requires a true +$ parallel file system like GPFS. +$ +$ IOSTYP = 0 : No data server processes, direct access output from +$ each process (requires true parallel file system). +$ 1 : No data server process. All output for each type +$ performed by process that performs computations too. +$ 2 : Last process is reserved for all output, and does no +$ computing. +$ 3 : Multiple dedicated output processes. +$ + 1 +$ +$ Five output types are available (see below). All output types share +$ a similar format for the first input line: +$ - first time in yyyymmdd hhmmss format, output interval (s), and +$ last time in yyyymmdd hhmmss format (all integers). +$ Output is disabled by setting the output interval to 0. +$ +$ ------------------------------------------------------------------- $ +$ +$ Type 1 : Fields of mean wave parameters +$ Standard line and line with logical flags to activate output +$ fields as defined in section 2.4 of the manual. The logical +$ flags are not supplied if no output is requested. The logical +$ flags can be placed on multiple consecutive lines. However, +$ the total number and order of the logical flags is fixed. +$ The raw data file is out_grd.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 010000 180 20110902 020000 +$---------------------------------------------------------------- +$ Output request flags identifying fields. +$ +N +$ +HS FP DIR DP CHA UST DPT CUR WND +$ +$---------------------------------------------------------------- +$ +$ Type 2 : Point output +$ Standard line and a number of lines identifying the +$ longitude, latitude and name (C*40) of output points. +$ The list is closed by defining a point with the name +$ 'STOPSTRING'. No point info read if no point output is +$ requested (i.e., no 'STOPSTRING' needed). +$ The raw data file is out_pnt.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 010000 0 20110902 020000 +$ -4.97 48.29 '62069' +$ -6.00 48.29 'Boundary' +$ 0.0 0.0 'STOPSTRING' +$ +$ +$ Type 3 : Output along track. +$ Flag for formatted input file. +$ The data files are track_i.ww3 and +$ track_o.ww3, see w3iotr.ftn for ad. doc. +$ + 20110902 010000 0 20110902 020000 +$ T +$ +$ Type 4 : Restart files (no additional data required). +$ The data file is restartN.ww3, see +$ w3iors.ftn for additional doc. +$ + 20110902 020000 3600 20110902 030000 +$ +$ Type 5 : Boundary data (no additional data required). +$ The data file is nestN.ww3, see +$ w3iobcmd.ftn for additional doc. +$ + 20110902 010000 0 20110902 020000 +$ +$ Type 6 : Separated wave field data (dummy for now). +$ First, last step IX and IY, flag for formatted file +$ + 20110902 010000 0 20110902 020000 +$ 0 999 1 0 999 1 T +$ +$ Type 7 : Coupling. (must be fully commented if not used with switch COU) +$ Namelist type selection is used here. +$ Diagnostic fields to exchange. (see namcouple for more information) +$ + 20110902 010000 360 20110902 020000 T + N +$ +$ - Sent fields by ww3: +$ - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +$ - Atmospheric model : ACHA AHS TP (or FP) FWS +$ - Ice model : IC5 TWI +$ + ACHA +$ +$ - Received fields by ww3: +$ - Ocean model : SSH CUR +$ - Atmospheric model : WND +$ - Ice model : ICE IC1 IC5 +$ + WND +$ +$ Homogeneous field data --------------------------------------------- $ +$ Homogeneous fields can be defined by a list of lines containing an ID +$ string 'LEV' 'CUR' 'WND', date and time information (yyyymmdd +$ hhmmss), value (S.I. units), direction (current and wind, oceanogr. +$ convention degrees)) and air-sea temperature difference (degrees C). +$ 'STP' is mandatory stop string. +$ Also defined here are the speed with which the grid is moved +$ continuously, ID string 'MOV', parameters as for 'CUR'. +$ +$ 'CUR' 20110902 000000 2.0 25. + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.nml new file mode 100644 index 000000000..d6d9c83af --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.nml @@ -0,0 +1,340 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '20110902 010000' + DOMAIN%STOP = '20110902 020000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'C' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! longitude latitude 'name' (C*40) +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS FP DIR DP CHA UST DPT CUR WND' + TYPE%COUPLING%SENT = 'ACHA' + TYPE%COUPLING%RECEIVED = 'WND' + TYPE%COUPLING%COUPLET0 = .TRUE. +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '20110902 010000' '180' '20110902 020000' + DATE%RESTART = '20110902 020000' '3600' '20110902 030000' + DATE%COUPLING = '20110902 010000' '360' '20110902 020000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.inp new file mode 100755 index 000000000..b58a52a87 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.inp @@ -0,0 +1,152 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shell input file $ +$ -------------------------------------------------------------------- $ +$ Define input to be used with F/T/C flag for use or nor or coupling and +$ T/F flag for definition as a homogeneous field. +$ +$ Include ice and mud parameters only if IC1/2/3/4 used : + F F Ice parameter 1 + F F Ice parameter 2 + F F Ice parameter 3 + F F Ice parameter 4 + F F Ice parameter 5 + F F Mud parameter 1 + F F Mud parameter 2 + F F Mud parameter 3 + F F Water levels + F F Currents + C F Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ +$ Time frame of calculations ----------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ - Ending time in yyyymmdd hhmmss format. +$ + 20110902 020000 + 20110902 030000 +$ +$ Define output data ------------------------------------------------- $ +$ +$ Define output server mode. This is used only in the parallel version +$ of the model. To keep the input file consistent, it is always needed. +$ IOSTYP = 1 is generally recommended. IOSTYP > 2 may be more efficient +$ for massively parallel computations. Only IOSTYP = 0 requires a true +$ parallel file system like GPFS. +$ +$ IOSTYP = 0 : No data server processes, direct access output from +$ each process (requires true parallel file system). +$ 1 : No data server process. All output for each type +$ performed by process that performs computations too. +$ 2 : Last process is reserved for all output, and does no +$ computing. +$ 3 : Multiple dedicated output processes. +$ + 1 +$ +$ Five output types are available (see below). All output types share +$ a similar format for the first input line: +$ - first time in yyyymmdd hhmmss format, output interval (s), and +$ last time in yyyymmdd hhmmss format (all integers). +$ Output is disabled by setting the output interval to 0. +$ +$ ------------------------------------------------------------------- $ +$ +$ Type 1 : Fields of mean wave parameters +$ Standard line and line with logical flags to activate output +$ fields as defined in section 2.4 of the manual. The logical +$ flags are not supplied if no output is requested. The logical +$ flags can be placed on multiple consecutive lines. However, +$ the total number and order of the logical flags is fixed. +$ The raw data file is out_grd.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 020000 180 20110902 030000 +$---------------------------------------------------------------- +$ Output request flags identifying fields. +$ +N +$ +HS FP DIR DP CHA UST DPT CUR WND +$ +$---------------------------------------------------------------- +$ +$ Type 2 : Point output +$ Standard line and a number of lines identifying the +$ longitude, latitude and name (C*40) of output points. +$ The list is closed by defining a point with the name +$ 'STOPSTRING'. No point info read if no point output is +$ requested (i.e., no 'STOPSTRING' needed). +$ The raw data file is out_pnt.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 020000 0 20110902 030000 +$ -4.97 48.29 '62069' +$ -6.00 48.29 'Boundary' +$ 0.0 0.0 'STOPSTRING' +$ +$ +$ Type 3 : Output along track. +$ Flag for formatted input file. +$ The data files are track_i.ww3 and +$ track_o.ww3, see w3iotr.ftn for ad. doc. +$ + 20110902 020000 0 20110902 030000 +$ T +$ +$ Type 4 : Restart files (no additional data required). +$ The data file is restartN.ww3, see +$ w3iors.ftn for additional doc. +$ + 20110902 020000 0 20110902 030000 +$ +$ Type 5 : Boundary data (no additional data required). +$ The data file is nestN.ww3, see +$ w3iobcmd.ftn for additional doc. +$ + 20110902 020000 0 20110902 030000 +$ +$ Type 6 : Separated wave field data (dummy for now). +$ First, last step IX and IY, flag for formatted file +$ + 20110902 020000 0 20110902 030000 +$ 0 999 1 0 999 1 T +$ +$ Type 7 : Coupling. (must be fully commented if not used with switch COU) +$ Namelist type selection is used here. +$ Diagnostic fields to exchange. (see namcouple for more information) +$ + 20110902 020000 360 20110902 030000 T + N +$ +$ - Sent fields by ww3: +$ - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +$ - Atmospheric model : ACHA AHS TP (or FP) FWS +$ - Ice model : IC5 TWI +$ + ACHA +$ +$ - Received fields by ww3: +$ - Ocean model : SSH CUR +$ - Atmospheric model : WND +$ - Ice model : ICE IC1 IC5 +$ + WND +$ +$ Homogeneous field data --------------------------------------------- $ +$ Homogeneous fields can be defined by a list of lines containing an ID +$ string 'LEV' 'CUR' 'WND', date and time information (yyyymmdd +$ hhmmss), value (S.I. units), direction (current and wind, oceanogr. +$ convention degrees)) and air-sea temperature difference (degrees C). +$ 'STP' is mandatory stop string. +$ Also defined here are the speed with which the grid is moved +$ continuously, ID string 'MOV', parameters as for 'CUR'. +$ +$ 'CUR' 20110902 000000 2.0 25. + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.nml new file mode 100644 index 000000000..ebf38d427 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.nml @@ -0,0 +1,339 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '20110902 020000' + DOMAIN%STOP = '20110902 030000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'C' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! longitude latitude 'name' (C*40) +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS FP DIR DP CHA UST DPT CUR WND' + TYPE%COUPLING%SENT = 'ACHA' + TYPE%COUPLING%RECEIVED = 'WND' + TYPE%COUPLING%COUPLET0 = .TRUE. +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '20110902 020000' '180' '20110902 030000' + DATE%COUPLING = '20110902 020000' '360' '20110902 030000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.inp new file mode 100755 index 000000000..23a141cf1 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.inp @@ -0,0 +1,152 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shell input file $ +$ -------------------------------------------------------------------- $ +$ Define input to be used with F/T/C flag for use or nor or coupling and +$ T/F flag for definition as a homogeneous field. +$ +$ Include ice and mud parameters only if IC1/2/3/4 used : + F F Ice parameter 1 + F F Ice parameter 2 + F F Ice parameter 3 + F F Ice parameter 4 + F F Ice parameter 5 + F F Mud parameter 1 + F F Mud parameter 2 + F F Mud parameter 3 + F F Water levels + F F Currents + C F Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ +$ Time frame of calculations ----------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ - Ending time in yyyymmdd hhmmss format. +$ + 20110902 000000 + 20110902 010000 +$ +$ Define output data ------------------------------------------------- $ +$ +$ Define output server mode. This is used only in the parallel version +$ of the model. To keep the input file consistent, it is always needed. +$ IOSTYP = 1 is generally recommended. IOSTYP > 2 may be more efficient +$ for massively parallel computations. Only IOSTYP = 0 requires a true +$ parallel file system like GPFS. +$ +$ IOSTYP = 0 : No data server processes, direct access output from +$ each process (requires true parallel file system). +$ 1 : No data server process. All output for each type +$ performed by process that performs computations too. +$ 2 : Last process is reserved for all output, and does no +$ computing. +$ 3 : Multiple dedicated output processes. +$ + 1 +$ +$ Five output types are available (see below). All output types share +$ a similar format for the first input line: +$ - first time in yyyymmdd hhmmss format, output interval (s), and +$ last time in yyyymmdd hhmmss format (all integers). +$ Output is disabled by setting the output interval to 0. +$ +$ ------------------------------------------------------------------- $ +$ +$ Type 1 : Fields of mean wave parameters +$ Standard line and line with logical flags to activate output +$ fields as defined in section 2.4 of the manual. The logical +$ flags are not supplied if no output is requested. The logical +$ flags can be placed on multiple consecutive lines. However, +$ the total number and order of the logical flags is fixed. +$ The raw data file is out_grd.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 000000 180 20110902 010000 +$---------------------------------------------------------------- +$ Output request flags identifying fields. +$ +N +$ +HS FP DIR DP CHA UST DPT CUR WND +$ +$---------------------------------------------------------------- +$ +$ Type 2 : Point output +$ Standard line and a number of lines identifying the +$ longitude, latitude and name (C*40) of output points. +$ The list is closed by defining a point with the name +$ 'STOPSTRING'. No point info read if no point output is +$ requested (i.e., no 'STOPSTRING' needed). +$ The raw data file is out_pnt.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 000000 0 20110902 020000 +$ -4.97 48.29 '62069' +$ -6.00 48.29 'Boundary' +$ 0.0 0.0 'STOPSTRING' +$ +$ +$ Type 3 : Output along track. +$ Flag for formatted input file. +$ The data files are track_i.ww3 and +$ track_o.ww3, see w3iotr.ftn for ad. doc. +$ + 20110902 000000 0 20110902 020000 +$ T +$ +$ Type 4 : Restart files (no additional data required). +$ The data file is restartN.ww3, see +$ w3iors.ftn for additional doc. +$ + 20110902 000000 0 20110902 020000 +$ +$ Type 5 : Boundary data (no additional data required). +$ The data file is nestN.ww3, see +$ w3iobcmd.ftn for additional doc. +$ + 20110902 000000 0 20110902 020000 +$ +$ Type 6 : Separated wave field data (dummy for now). +$ First, last step IX and IY, flag for formatted file +$ + 20110902 000000 0 20110902 020000 +$ 0 999 1 0 999 1 T +$ +$ Type 7 : Coupling. (must be fully commented if not used with switch COU) +$ Namelist type selection is used here. +$ Diagnostic fields to exchange. (see namcouple for more information) +$ + 20110902 000000 180 20110902 010000 T + N +$ +$ - Sent fields by ww3: +$ - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +$ - Atmospheric model : ACHA AHS TP (or FP) FWS +$ - Ice model : IC5 TWI +$ + ACHA +$ +$ - Received fields by ww3: +$ - Ocean model : SSH CUR +$ - Atmospheric model : WND +$ - Ice model : ICE IC1 IC5 +$ + WND +$ +$ Homogeneous field data --------------------------------------------- $ +$ Homogeneous fields can be defined by a list of lines containing an ID +$ string 'LEV' 'CUR' 'WND', date and time information (yyyymmdd +$ hhmmss), value (S.I. units), direction (current and wind, oceanogr. +$ convention degrees)) and air-sea temperature difference (degrees C). +$ 'STP' is mandatory stop string. +$ Also defined here are the speed with which the grid is moved +$ continuously, ID string 'MOV', parameters as for 'CUR'. +$ +$ 'CUR' 20110902 000000 2.0 25. + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.nml new file mode 100644 index 000000000..84d3e15c6 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.nml @@ -0,0 +1,340 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '20110902 000000' + DOMAIN%STOP = '20110902 010000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'C' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! longitude latitude 'name' (C*40) +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! TYPE%COUPLING%COUPLET0 = .FALSE. +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS FP DIR DP CHA UST DPT CUR WND' + TYPE%COUPLING%SENT = 'ACHA' + TYPE%COUPLING%RECEIVED = 'WND' + TYPE%COUPLING%COUPLET0 = .TRUE. +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '20110902 000000' '180' '20110902 010000' + DATE%COUPLING = '20110902 000000' '180' '20110902 010000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! From 5e7a51c4eade51d957dec10c4abe01fa79421ece Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Thu, 3 Dec 2020 01:35:39 +0000 Subject: [PATCH 58/84] WW3_OUNF configurable metadata (#266) * Initial changes ot split out meta data to seperate module * Added w3ncmetamd module to allow optional extra meta data for each field. Fixed issue where ENAME was not being set Fixed issue where scaling factor FSC was only being set on first pass. * Added w3nmlounfmeta.ftn - this module provides all netCDF meta data for ww3_ounf via a set of namelists that enables runtime overriding of values. * Commented out some temporary variables. Added initialisation of AMETA (array of meta data) * renamed file * Added new version of w3nmlounfmeta.ftn (old move to _v1) Required update to w3iogomd to factor out the "output flag" => "IFI,IFJ" functionality. * Bugfix to extra attribute writing. * - Changed the way meta data arrays are initialised. - Small change to w3odatmd to ensure NOGE(1) is correctly set when BT4, IS2 or SETUP switches are enabled. * Removed some old source files * Renamed ounf meta module * Moved NCVARTYPE from ww3_ounf to w3ounfmetamd module. * Cleaned up w3ounfmetamd a bit and added subroutine/module header comments. Also - had to reinstate IDOUT(5,11) in w3iogomd as that field is used in ww3_outf (increased NOSE(5) to 11) * - Tidied up some stuff - removed some comments/debug. - Fixed typo in partitioned output metadata * Alternative input method for meta data using a structure text file rather than a fortran namelist file * Added handling of TABS in input file. Added subroutune header comments. * Removed some hidden control characters from the module comments (probably ended up there due a copy and paste) * - Added ability to specify "global" netCDF attributes. - Factored out some common functionality into seperate subroutines. - Fixed incorrect scale_value attrbute name (scale_factor) * Fixed some missing calls to CHECK_ERROR * Updated all error outputs. * Removed some unused variables and commented lines * VMIN and VMAX (valid_min and valid_max) are now read in via ounfmeta.inp as floating point values representing the range in the units specified. Prior to writing out, these values are scaled using "scale_factor" and converted to integer values (as per the original ww3_ounf behaviour). * Finished refactoring w3iogomd (name to flag handling). * Updated revision numbers to 7.XX milestone * 1. scale_factor and _FillValue now set in w3ounfmetamd. 2. fixed bug where local copy of NCVARTYPE was being used 3. meta data for all components of IFI,IFJ combination now loaded once and stored in an array. Avoids having to call GETMETA multiple times and also makes FSC3 redundant * Fixed incorrect min/max for WND * Fixed wrong min/max for WND (again!) * - Fixed bug where NCVARTYPE could be set incorrcetly due to it being a module variable. Use new NCVARTYPEI variable (original user value) in ww3_ounf. - Fixed some more incorrect metadata - Removed redundant variables from ww3_ounf. - Removed some commented out code * Tidying up. * Added manual entry * Removed old unused file * Missing FLAGUNR USE import when RTD switch enabled. * Trim a string * Make ENAME 10 characters, as per original ww3_ounf, and modified ww3_ounf screen output to keep consistent output for regtests. * Re-instated 20 char length for ENAME - extra lengxpht needed if placeholders are used. Set format to A10 in screen output to keep log files comparible. * Updating file version and name of FTP tar file. * Added regtest for configurable netCDF metadata in ww3_ounf * Changes from review: - Fixed some typos. - Updated some comments. - Added missing CHECK_ERR call. * valid_min and valid_max are now floats when output variable type is 4 (float) * Made META keyword and field name strings case insensitive in ounfmeta.inp file * Added output name as comment on each IF-ELSEIF entry for clarity. * Manual entry updated * Typo correction * Removed some commented out vmin/vmax entries * Fixed format statememt to make ww3_ounf log output consistent with previous version. * - Fixed typo in ounfmeta.inp (wrong closing quote). -Updated w3ounfmetamd to: - Handle empty attribute values more robustly (intel compiler needs an empty string to be specifed as "") - Better error reporting if internal list directed read fails. * Added blank globawave_entry to test empty attribute value processing --- manual/run/ww3_ounf.tex | 106 +- model/bin/make_makefile.sh | 3 +- model/bin/ww3_from_ftp.sh | 4 +- model/ftn/w3iogomd.ftn | 874 ++++---- model/ftn/w3odatmd.ftn | 7 +- model/ftn/w3ounfmetamd.ftn | 2841 +++++++++++++++++++++++++ model/ftn/ww3_ounf.ftn | 1854 ++-------------- regtests/bin/matrix.base | 10 +- regtests/bin/matrix.comp | 2 +- regtests/bin/matrix_datarmor | 1 + regtests/bin/matrix_ncep | 1 + regtests/bin/matrix_ukmo_cray | 1 + regtests/bin/matrix_zeus_HLT | 1 + regtests/bin/run_test | 5 + regtests/ww3_tnc1/info | 25 + regtests/ww3_tnc1/input/grid.bot | 11 + regtests/ww3_tnc1/input/grid.mask | 11 + regtests/ww3_tnc1/input/namelists.nml | 2 + regtests/ww3_tnc1/input/ounfmeta.inp | 88 + regtests/ww3_tnc1/input/switch | 1 + regtests/ww3_tnc1/input/ww3_grid.inp | 38 + regtests/ww3_tnc1/input/ww3_grid.nml | 222 ++ regtests/ww3_tnc1/input/ww3_ounf.inp | 34 + regtests/ww3_tnc1/input/ww3_ounf.nml | 90 + regtests/ww3_tnc1/input/ww3_shel.inp | 50 + regtests/ww3_tnc1/input/ww3_shel.nml | 369 ++++ 26 files changed, 4534 insertions(+), 2117 deletions(-) create mode 100644 model/ftn/w3ounfmetamd.ftn create mode 100644 regtests/ww3_tnc1/info create mode 100644 regtests/ww3_tnc1/input/grid.bot create mode 100644 regtests/ww3_tnc1/input/grid.mask create mode 100644 regtests/ww3_tnc1/input/namelists.nml create mode 100644 regtests/ww3_tnc1/input/ounfmeta.inp create mode 100644 regtests/ww3_tnc1/input/switch create mode 100644 regtests/ww3_tnc1/input/ww3_grid.inp create mode 100644 regtests/ww3_tnc1/input/ww3_grid.nml create mode 100644 regtests/ww3_tnc1/input/ww3_ounf.inp create mode 100644 regtests/ww3_tnc1/input/ww3_ounf.nml create mode 100644 regtests/ww3_tnc1/input/ww3_shel.inp create mode 100644 regtests/ww3_tnc1/input/ww3_shel.nml diff --git a/manual/run/ww3_ounf.tex b/manual/run/ww3_ounf.tex index 069928ba4..c1eb1f38d 100644 --- a/manual/run/ww3_ounf.tex +++ b/manual/run/ww3_ounf.tex @@ -7,14 +7,118 @@ \subsubsection{Gridded output NetCDF post-processor} \label{sec:ww3ounf} \proddefa{ww3\_ounf.inp}{Tradition configuration file.}{10} (App.~\ref{sec:config131}) \proddefa{mod\_def.ww3}{Model definition file.}{20} \proddefa{out\_grd.ww3}{Raw gridded output data.}{20} -\proddefa{NC\_globatt.inp}{Additional global attributes.}{994} +\proddefa{NC\_globatt.inp}{Additional global attributes (deprecated)}{994} +\proddefa{ounfmeta.inp}{User defined meta data attributes}{60} \proddeff{Output}{standard out}{Formatted output of program.}{6} \proddefa{\opt .nc}{NetCDF file}{} + \vspace{\baselineskip} + \noindent When a single field is put in the file, the abbreviated field name (file extensions from ww3\_outf) for each data type is given in Table~\ref{tab:fields} on page~\pageref{tab:fields}. +\noindent +If desired, it is possible to override the default metadata (attributes) +for each variable by providing values in the ounfmeta.inp file. + +\noindent +Entries in the ounfmeta.inp file are formatted as follows: +\begin{verbatim} + META ( [ IFI IFJ ] | FLDID ) [ IFC ] + attr_name = attr_value + attr_name = attr_value + extra_attr = extra_value [type] + ... repeated as many times as required. +\end{verbatim} + +\noindent +An output field is selected using the \texttt{META} keyword followed by +the `field name` or an [IFI, IFJ] integer pair that relates to the +group (IFI) and field (IFJ) flags. See ww3\_shel for details of +field names and flags. + +\noindent +Either form may be followed by an integer value (IFC) to select the +component in multi-component fields (such as wind). + +\noindent +Blank lines and comments lines (starting with \$) are ignored. + +\noindent +Each \texttt{`attr\_name`} relates to an existing variable attribute and +can be one of the following (altnerative internal name shown in parenthesis): +\begin{itemize} + \item standard\_name (varns) [string] : CF Standard name + \item long\_name (varnl) [string] : Descriptive long name + \item globwave\_name (varng) [string] : Optional GlobaWAVE name + \item direction\_reference or dir\_ref (varnd) [string] : Optional reference + frame for directional fields. + \item comment (varnc) [string] : Optional comment. + \item units [string] : Units of field + \item valid\_min (vmin) [float] : Minimum valid value of data + \item valid\_max (vmax) [float] : Maximum valud value of data + \item scale\_factor (fsc) [float] : Scaling factor for data - used only when + variable type is SHORT. +\end{itemize} + +\noindent +Additionaly, the following fields are also configurable: +\begin{itemize} + \item varnm : the netCDF variable name + \item ename : the identifier for single field per file output +\end{itemize} + +\noindent +Any other attribute name is assumed to be an optional "extra" +attribute. This extra attribute can take an optional "type" +keyword to specify the variable tpye of the metadata. If +no type is supplied, it defaults to a characer type. Valid +types are one of ["c", "r", "i"] for character/string, +real/float or integer values respectively. + +\noindent Some default attibutes can be disabled by setting +the attribute value to a blank string (""). This will prevent +the attribute from being written in the netCDF file. This +applies only to the \texttt{globawave\_name}, \texttt{comment} +and \texttt{direction\_reference} attributes. + +\noindent +Global meta data can be specified with a special \texttt{META global} line. + +\noindent +Example ounfmeta.inp file: + +\begin{verbatim} +$ Lines starting with dollars are comments. +$ The folowing line starts a meta-data section for the depth field +META DPT + standard_name = depth + long_name = "can be quoted string" + comment = or an unquoted string + vmax = 999.9 + +$ Next one is HSig (group 2, field 1) +META 2 1 + $ varns is same as standard_name + varns = "sig. wave height" + $ varnl is same as long_name + varnl = "this is long name" + +$ Next one is second component of wind. It also sets an +$ "extra" meta data value (height - a float) +META WND 2 + standard_name = "v-wind" + height = 10.0 "r" + +$ Global metadata: +META global + institution = UKMO + comment "space seperated strings should be quoted" c + version = 1.0 r + +\end{verbatim} + \pb diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 6b93f072f..dec155c22 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -1003,7 +1003,7 @@ source="$pdlibcode $pdlibyow $db $bt $setupcode w3parall w3triamd $stx $nlx $btx $is $uostmd" IO='w3iogrmd w3iogomd w3iorsmd w3iopomd' aux="constants w3servmd w3timemd w3arrymd w3dispmd w3gsrumd" - aux="$aux w3nmlounfmd $smco" ;; + aux="$aux w3nmlounfmd $smco w3ounfmetamd" ;; ww3_outp) IDstring='Point output' core= data="wmmdatmd w3parall w3triamd $memcode w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd" @@ -1389,6 +1389,7 @@ 'PDLIB_W3PROFSMD' ) modtest=w3profsmd_pdlib.o ;; 'W3PARALL' ) modtest=w3parall.o ;; 'W3SMCOMD' ) modtest=w3smcomd.o ;; + 'W3OUNFMETAMD' ) modtest=w3ounfmetamd.o ;; * ) modfound=no ;; esac diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index 14da5d2d7..fa7178274 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -8,7 +8,7 @@ curr_dir=`pwd` # Set WW3 code version -ww3ver=v7.06 +ww3ver=v7.07 #Get top level directory of ww3 from user: echo -e "\n\n This script will download data from the ftp for WAVEWATCH III " @@ -22,7 +22,7 @@ cd $ww3dir #Download from ftp and uptar: echo -e "Downloading and untaring file from ftp:" -wget ftp://polar.ncep.noaa.gov/tempor/ww3ftp/ww3_from_ftp.${ww3ver}.tar.gz +wget https://ftp.emc.ncep.noaa.gov/static_files/public/WW3/ww3_from_ftp.${ww3ver}.tar.gz tar -xvzf ww3_from_ftp.${ww3ver}.tar.gz #Move regtest info from data_regtests to regtests: diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 5a07b269d..9321ef94c 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 05-Jun-2018 | +!/ | Last update : 03-Nov-2020 | !/ +-----------------------------------+ !/ !/ 04-Jan-2001 : Origination. ( version 2.00 ) @@ -55,6 +55,8 @@ !/ calculations. (J Dykes, NRL) !/ 04-Oct-2019 : Optional one file per output stride ( version 7.00 ) !/ (Roberto Padilla-Hernandez & J.H. Alves) +!/ 03-Nov-2020 : Factored out NAME matching into ( version 7.XX ) +!/ seperate subroutine. (C. Bunney) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -291,6 +293,8 @@ !/ 31-Jan-2014 : Bug fix warning output (Tolman). ( version 4.18 ) !/ 30-Apr-2014 : Add th2m and sth2m calculation ( version 5.01 ) !/ 25-Sep-2020 : Calculate FLG1D for any processor ( version 7.xx ) +!/ 03-Nov-2020 : Factored out NAME matching into ( version 7.XX ) +!/ seperate subroutine (C. Bunney) !/ ! 1. Purpose : ! @@ -424,242 +428,12 @@ ! ! 2. Matches names with expected ... ! - TESTSTR=OUT_NAMES(IOUT+1) - SELECT CASE(TRIM(TESTSTR(1:6))) -! -! Group 1 -! - CASE('DPT') - FLG2D(1,1)=.TRUE. - CASE('CUR') - FLG2D(1,2)=.TRUE. - CASE('WND') - FLG2D(1,3)=.TRUE. - CASE('AST') - FLG2D(1,4)=.TRUE. - CASE('WLV') - FLG2D(1,5)=.TRUE. - CASE('ICE') - FLG2D(1,6)=.TRUE. - CASE('IBG') - FLG2D(1,7)=.TRUE. -!/BT4 CASE('D50') -!/BT4 FLG2D(1,8)=.TRUE. -!/IS2 CASE('IC1') -!/IS2 FLG2D(1,9)=.TRUE. -!/IS2 CASE('IC5') -!/IS2 FLG2D(1,10)=.TRUE. -!/SETUP CASE('STP') -!/SETUP FLG2D(1,11)=.TRUE. -! -! -! Group 2 -! -!/OASACM CASE('AHS') -!/OASACM FLG2D(2,1)=.TRUE. -!/OASOCM CASE('OHS') -!/OASOCM FLG2D(2,1)=.TRUE. - CASE('HS') - FLG2D(2,1)=.TRUE. - CASE('LM') - FLG2D(2,2)=.TRUE. - CASE('T02') - FLG2D(2,3)=.TRUE. - CASE('T0M1') - FLG2D(2,4)=.TRUE. - CASE('T01') - FLG2D(2,5)=.TRUE. - CASE('FP') - FLG2D(2,6)=.TRUE. - CASE('DIR') - FLG2D(2,7)=.TRUE. - CASE('SPR') - FLG2D(2,8)=.TRUE. - CASE('DP') - FLG2D(2,9)=.TRUE. - CASE('HIG') - FLG2D(2,10)=.TRUE. - CASE('MXE') - FLG2D(2,11)=.TRUE. - CASE('MXES') - FLG2D(2,12)=.TRUE. - CASE('MXH') - FLG2D(2,13)=.TRUE. - CASE('MXHC') - FLG2D(2,14)=.TRUE. - CASE('SDMH') - FLG2D(2,15)=.TRUE. - CASE('SDMHC') - FLG2D(2,16)=.TRUE. - CASE('WBT') - FLG2D(2,17)=.TRUE. -! -! Group 3 -! - CASE('EF') - FLG2D(3,1)=.TRUE. - CASE('TH1M') - FLG2D(3,2)=.TRUE. - CASE('STH1M') - FLG2D(3,3)=.TRUE. - CASE('TH2M') - FLG2D(3,4)=.TRUE. - CASE('STH2M') - FLG2D(3,5)=.TRUE. - CASE('WN') - FLG2D(3,6)=.TRUE. -! -! Group 4 -! - CASE('PHS') - FLG2D(4,1)=.TRUE. - CASE('PTP') - FLG2D(4,2)=.TRUE. - CASE('PLP') - FLG2D(4,3)=.TRUE. - CASE('PDIR') - FLG2D(4,4)=.TRUE. - CASE('PSPR') - FLG2D(4,5)=.TRUE. - CASE('PWS') - FLG2D(4,6)=.TRUE. - CASE('PDP') - FLG2D(4,7)=.TRUE. - CASE('PQP') - FLG2D(4,8)=.TRUE. - CASE('PPE') - FLG2D(4,9)=.TRUE. - CASE('PGW') - FLG2D(4,10)=.TRUE. - CASE('PSW') - FLG2D(4,11)=.TRUE. - CASE('PTM10') - FLG2D(4,12)=.TRUE. - CASE('PT01') - FLG2D(4,13)=.TRUE. - CASE('PT02') - FLG2D(4,14)=.TRUE. - CASE('PEP') - FLG2D(4,15)=.TRUE. - CASE('TWS') - FLG2D(4,16)=.TRUE. - CASE('PNR') - FLG2D(4,17)=.TRUE. -! -! Group 5 -! - CASE('UST') - FLG2D(5,1)=.TRUE. -!/OASACM CASE('ACHA') -!/OASACM FLG2D(5,2)=.TRUE. -!/OASOCM CASE('OCHA') -!/OASOCM FLG2D(5,2)=.TRUE. - CASE('CHA') - FLG2D(5,2)=.TRUE. - CASE('CGE') - FLG2D(5,3)=.TRUE. - CASE('FAW') - FLG2D(5,4)=.TRUE. - CASE('TAW') - FLG2D(5,5)=.TRUE. - CASE('TWA') - FLG2D(5,6)=.TRUE. - CASE('WCC') - FLG2D(5,7)=.TRUE. - CASE('WCF') - FLG2D(5,8)=.TRUE. - CASE('WCH') - FLG2D(5,9)=.TRUE. - CASE('WCM') - FLG2D(5,10)=.TRUE. - CASE('FWS') - FLG2D(5,11)=.TRUE. -! -! Group 6 -! - CASE('SXY') - FLG2D(6,1)=.TRUE. - CASE('TWO') - FLG2D(6,2)=.TRUE. - CASE('BHD') - FLG2D(6,3)=.TRUE. - CASE('FOC') - FLG2D(6,4)=.TRUE. - CASE('TUS') - FLG2D(6,5)=.TRUE. - CASE('USS') - FLG2D(6,6)=.TRUE. - CASE('P2S') - FLG2D(6,7)=.TRUE. - CASE('USF') - IF (US3DF(1).GE.1) THEN - FLG2D(6,8)=.TRUE. - ELSE - IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USF','US3D' - END IF - CASE('P2L') - FLG2D(6,9)=.TRUE. - CASE('TWI') - FLG2D(6,10)=.TRUE. - CASE('FIC') - FLG2D(6,11)=.TRUE. - CASE('USP') - IF (USSPF(1).GE.1) THEN - FLG2D(6,12)=.TRUE. - ELSE - IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USP','USSP' - END IF -! -! Group 7 -! - CASE('ABR') - FLG2D(7,1)=.TRUE. - CASE('UBR') - FLG2D(7,2)=.TRUE. - CASE('BED') - FLG2D(7,3)=.TRUE. - CASE('FBB') - FLG2D(7,4)=.TRUE. - CASE('TBB') - FLG2D(7,5)=.TRUE. -! -! Group 8 -! - CASE('MSS') - FLG2D(8,1)=.TRUE. - CASE('MSC') - FLG2D(8,2)=.TRUE. - CASE('MSD') - FLG2D(8,3)=.TRUE. - CASE('MCD') - FLG2D(8,4)=.TRUE. - CASE('QP') - FLG2D(8,5)=.TRUE. -! -! Group 9 -! - CASE('DTD') - FLG2D(9,1)=.TRUE. - CASE('FC') - FLG2D(9,2)=.TRUE. - CASE('CFX') - FLG2D(9,3)=.TRUE. - CASE('CFD') - FLG2D(9,4)=.TRUE. - CASE('CFK') - FLG2D(9,5)=.TRUE. -! -! Group 10 -! - CASE('U1') - FLG2D(10,1)=.TRUE. - CASE('U2') - FLG2D(10,2)=.TRUE. -!/COU CASE('DRY') - CASE('UNSET') - CASE DEFAULT - IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSEN,1004) TRIM(TESTSTR) - END SELECT + TESTSTR=OUT_NAMES(IOUT+1) + CALL W3FLDTOIJ(TESTSTR, IFI, IFJ, IAPROC, NAPOUT, NDSEN) + + IF(IFI .NE. -1) THEN + FLG2D(IFI, IFJ) = .TRUE. + ENDIF ! IOUT=IOUT+1 ! @@ -719,9 +493,6 @@ 1003 FORMAT (/' *** WAVEWATCH III ERROR : '/ & ' ERROR READING OUTPUT FIELD NAMES FROM INPUT FILE'/& ' IOSTAT =',I5/) -! - 1004 FORMAT (/' *** WAVEWATCH III WARNING : '/ & - ' REQUESTED OUTPUT FIELD ',A,' WAS NOT RECOGNIZED.'/) ! 1005 FORMAT (/' *** WAVEWATCH III ERROR : '/ & ' WAS EXPECTING "T" "F" or "N", but found "',A,'".'/) @@ -733,10 +504,6 @@ 1007 FORMAT (/' *** WAVEWATCH III WARNING : '/ & ' NUMBER OF REQUESTED OUTPUT FIELD FLAGS IN GROUP ',& I2, /,' LESS THAN AVAILABLE, CHECK DOCS FOR MORE OPTIONS') -! - 1008 FORMAT (/' *** WAVEWATCH III WARNING : '/ & - ' PARAMETER ',A,' not allowed: need to set', & - ' parameter ',A,' in OUTS namelist (in ww3_grid.inp)') ! END SUBROUTINE W3READFLGRD @@ -756,6 +523,8 @@ !/ 30-Apr-2014 : Add th2m and sth2m calculation ( version 5.01 ) !/ 17-Feb-2016 : New version for namelist use ( version 5.11 ) !/ 25-Sep-2020 : Calculate FLG1D for any processor ( version 7.xx ) +!/ 03-Nov-2020 : Factored out NAME matching into ( version 7.XX ) +!/ seperate subroutine (C. Bunney) !/ ! 1. Purpose : ! @@ -843,276 +612,431 @@ ! ! 2. Splits list of output field names ! - OUT_NAMES(:)='' - CALL STRSPLIT(FLDOUT,OUT_NAMES) - IOUT=0 - DO WHILE (len_trim(OUT_NAMES(IOUT+1)).NE.0) - CALL STR_TO_UPPER(OUT_NAMES(IOUT+1)) + OUT_NAMES(:)='' + CALL STRSPLIT(FLDOUT,OUT_NAMES) + IOUT=0 + DO WHILE (len_trim(OUT_NAMES(IOUT+1)).NE.0) + CALL STR_TO_UPPER(OUT_NAMES(IOUT+1)) ! ! 2. Matches names with expected ... ! - TESTSTR=OUT_NAMES(IOUT+1) - SELECT CASE(TRIM(TESTSTR(1:6))) + TESTSTR=OUT_NAMES(IOUT+1) + CALL W3FLDTOIJ(TESTSTR, IFI, IFJ, IAPROC, NAPOUT, NDSEN) + + IF(IFI .NE. -1) THEN + FLG2D(IFI, IFJ) = .TRUE. + ENDIF +! + IOUT=IOUT+1 +! + END DO +! + FLT = .TRUE. + DO IFI=1, NOGRP + IF ( IAPROC .EQ. NAPOUT ) THEN + DO IFJ=1, NGRPP + IF ( FLG2D(IFI,IFJ) ) THEN + IF ( FLT ) THEN + WRITE (NDSO,1945) IDOUT(IFI,IFJ) + FLT = .FALSE. + ELSE + WRITE (NDSO,1946) IDOUT(IFI,IFJ) + END IF + END IF + END DO + ENDIF + IF(ANY(FLG2D(IFI,:))) FLG1D(IFI)=.TRUE. !Update FLG1D + END DO + IF ( IAPROC .EQ. NAPOUT ) THEN + IF ( FLT ) WRITE (NDSO,1945) 'no fields defined' + ENDIF +! + RETURN +! + 1945 FORMAT ( ' Fields : ',A) + 1946 FORMAT ( ' ',A) +! +! 1004 FORMAT (/' *** WAVEWATCH III WARNING : '/ & +! ' REQUESTED OUTPUT FIELD ',A,' WAS NOT RECOGNIZED.'/) +!! +! 1008 FORMAT (/' *** WAVEWATCH III WARNING : '/ & +! ' PARAMETER ',A,' not allowed: need to set', & +! ' parameter ',A,' in OUTS namelist (in ww3_grid.inp)') +! + END SUBROUTINE W3FLGRDFLAG + +!/ ------------------------------------------------------------------- / + SUBROUTINE W3FLDTOIJ(FLD, I, J, IAPROC, NAPOUT, NDSEN) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | FORTRAN 90 | +!/ | Last update : 03-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 03-Nov-2020 : Origination. ( version 7.XX ) +! +! 1. Purpose : +! +! Returns the group/field (I/J) indices for a named output field. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! FLD Cha. I Field names +! I Int. O Output group number (IFI) +! J Int. O Output field number (IFJ) +! IAPROC Int. I index of current processor +! NAPOUT Int. I index of processor for output (screen) +! NDSEN R.A. I Error output file logical unit number +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + USE W3GDATMD, ONLY: US3DF, USSPF + IMPLICIT NONE +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + CHARACTER(LEN=*), INTENT(IN) :: FLD + INTEGER, INTENT(IN) :: IAPROC, NAPOUT, NDSEN + INTEGER, INTENT(OUT) :: I, J + + I = -1 + J = -1 + + SELECT CASE(TRIM(FLD(1:6))) ! ! Group 1 ! - CASE('DPT') - FLG2D(1,1)=.TRUE. - CASE('CUR') - FLG2D(1,2)=.TRUE. - CASE('WND') - FLG2D(1,3)=.TRUE. - CASE('AST') - FLG2D(1,4)=.TRUE. - CASE('WLV') - FLG2D(1,5)=.TRUE. - CASE('ICE') - FLG2D(1,6)=.TRUE. - CASE('IBG') - FLG2D(1,7)=.TRUE. + CASE('DPT') + I = 1 + J = 1 + CASE('CUR') + I = 1 + J = 2 + CASE('WND') + I = 1 + J = 3 + CASE('AST') + I = 1 + J = 4 + CASE('WLV') + I = 1 + J = 5 + CASE('ICE') + I = 1 + J = 6 + CASE('IBG') + I = 1 + J = 7 !/BT4 CASE('D50') -!/BT4 FLG2D(1,8)=.TRUE. +!/BT4 I = 1 +!/BT4 J = 8 !/IS2 CASE('IC1') -!/IS2 FLG2D(1,9)=.TRUE. +!/IS2 I = 1 +!/IS2 J = 9 !/IS2 CASE('IC5') -!/IS2 FLG2D(1,10)=.TRUE.! +!/IS2 I = 1 +!/IS2 J = 10 ! Group 2 ! !/OASACM CASE('AHS') -!/OASACM FLG2D(2,1)=.TRUE. +!/OASACM I = 2 +!/OASACM J = 1 !/OASOCM CASE('OHS') -!/OASOCM FLG2D(2,1)=.TRUE. - CASE('HS') - FLG2D(2,1)=.TRUE. - CASE('LM') - FLG2D(2,2)=.TRUE. - CASE('T02') - FLG2D(2,3)=.TRUE. - CASE('T0M1') - FLG2D(2,4)=.TRUE. - CASE('T01') - FLG2D(2,5)=.TRUE. - CASE('FP') - FLG2D(2,6)=.TRUE. - CASE('DIR') - FLG2D(2,7)=.TRUE. - CASE('SPR') - FLG2D(2,8)=.TRUE. - CASE('DP') - FLG2D(2,9)=.TRUE. - CASE('HIG') - FLG2D(2,10)=.TRUE. - CASE('MXE') - FLG2D(2,11)=.TRUE. - CASE('MXES') - FLG2D(2,12)=.TRUE. - CASE('MXH') - FLG2D(2,13)=.TRUE. - CASE('MXHC') - FLG2D(2,14)=.TRUE. - CASE('SDMH') - FLG2D(2,15)=.TRUE. - CASE('SDMHC') - FLG2D(2,16)=.TRUE. - CASE('WBT') - FLG2D(2,17)=.TRUE. +!/OASOCM I = 2 +!/OASACM J = 1 + CASE('HS') + I = 2 + J = 1 + CASE('LM') + I = 2 + J = 2 + CASE('T02') + I = 2 + J = 3 + CASE('T0M1') + I = 2 + J = 4 + CASE('T01') + I = 2 + J = 5 + CASE('FP') + I = 2 + J = 6 + CASE('DIR') + I = 2 + J = 7 + CASE('SPR') + I = 2 + J = 8 + CASE('DP') + I = 2 + J = 9 + CASE('HIG') + I = 2 + J = 10 + CASE('MXE') + I = 2 + J = 11 + CASE('MXES') + I = 2 + J = 12 + CASE('MXH') + I = 2 + J = 13 + CASE('MXHC') + I = 2 + J = 14 + CASE('SDMH') + I = 2 + J = 15 + CASE('SDMHC') + I = 2 + J = 16 + CASE('WBT') + I = 2 + J = 17 ! ! Group 3 ! - CASE('EF') - FLG2D(3,1)=.TRUE. - CASE('TH1M') - FLG2D(3,2)=.TRUE. - CASE('STH1M') - FLG2D(3,3)=.TRUE. - CASE('TH2M') - FLG2D(3,4)=.TRUE. - CASE('STH2M') - FLG2D(3,5)=.TRUE. - CASE('WN') - FLG2D(3,6)=.TRUE. + CASE('EF') + I = 3 + J = 1 + CASE('TH1M') + I = 3 + J = 2 + CASE('STH1M') + I = 3 + J = 3 + CASE('TH2M') + I = 3 + J = 4 + CASE('STH2M') + I = 3 + J = 5 + CASE('WN') + I = 3 + J = 6 ! ! Group 4 ! - CASE('PHS') - FLG2D(4,1)=.TRUE. - CASE('PTP') - FLG2D(4,2)=.TRUE. - CASE('PLP') - FLG2D(4,3)=.TRUE. - CASE('PDIR') - FLG2D(4,4)=.TRUE. - CASE('PSPR') - FLG2D(4,5)=.TRUE. - CASE('PWS') - FLG2D(4,6)=.TRUE. - CASE('PDP') - FLG2D(4,7)=.TRUE. - CASE('PQP') - FLG2D(4,8)=.TRUE. - CASE('PPE') - FLG2D(4,9)=.TRUE. - CASE('PGW') - FLG2D(4,10)=.TRUE. - CASE('PSW') - FLG2D(4,11)=.TRUE. - CASE('PTM10') - FLG2D(4,12)=.TRUE. - CASE('PT01') - FLG2D(4,13)=.TRUE. - CASE('PT02') - FLG2D(4,14)=.TRUE. - CASE('PEP') - FLG2D(4,15)=.TRUE. - CASE('TWS') - FLG2D(4,16)=.TRUE. - CASE('PNR') - FLG2D(4,17)=.TRUE. + CASE('PHS') + I = 4 + J = 1 + CASE('PTP') + I = 4 + J = 2 + CASE('PLP') + I = 4 + J = 3 + CASE('PDIR') + I = 4 + J = 4 + CASE('PSPR') + I = 4 + J = 5 + CASE('PWS') + I = 4 + J = 6 + CASE('PDP') + I = 4 + J = 7 + CASE('PQP') + I = 4 + J = 8 + CASE('PPE') + I = 4 + J = 9 + CASE('PGW') + I = 4 + J = 10 + CASE('PSW') + I = 4 + J = 11 + CASE('PTM10') + I = 4 + J = 12 + CASE('PT01') + I = 4 + J = 13 + CASE('PT02') + I = 4 + J = 14 + CASE('PEP') + I = 4 + J = 15 + CASE('TWS') + I = 4 + J = 16 + CASE('PNR') + I = 4 + J = 17 ! ! Group 5 ! - CASE('UST') - FLG2D(5,1)=.TRUE. + CASE('UST') + I = 5 + J = 1 !/OASACM CASE('ACHA') -!/OASACM FLG2D(5,2)=.TRUE. +!/OASACM I = 5 +!/OASACM J = 2 !/OASOCM CASE('OCHA') -!/OASOCM FLG2D(5,2)=.TRUE. - CASE('CHA') - FLG2D(5,2)=.TRUE. - CASE('CGE') - FLG2D(5,3)=.TRUE. - CASE('FAW') - FLG2D(5,4)=.TRUE. - CASE('TAW') - FLG2D(5,5)=.TRUE. - CASE('TWA') - FLG2D(5,6)=.TRUE. - CASE('WCC') - FLG2D(5,7)=.TRUE. - CASE('WCF') - FLG2D(5,8)=.TRUE. - CASE('WCH') - FLG2D(5,9)=.TRUE. - CASE('WCM') - FLG2D(5,10)=.TRUE. - CASE('FWS') - FLG2D(5,11)=.TRUE. +!/OASOCM I = 5 +!/OASACM J = 2 + CASE('CHA') + I = 5 + J = 2 + CASE('CGE') + I = 5 + J = 3 + CASE('FAW') + I = 5 + J = 4 + CASE('TAW') + I = 5 + J = 5 + CASE('TWA') + I = 5 + J = 6 + CASE('WCC') + I = 5 + J = 7 + CASE('WCF') + I = 5 + J = 8 + CASE('WCH') + I = 5 + J = 9 + CASE('WCM') + I = 5 + J = 10 + CASE('FWS') + I = 5 + J = 11 ! ! Group 6 ! - CASE('SXY') - FLG2D(6,1)=.TRUE. - CASE('TWO') - FLG2D(6,2)=.TRUE. - CASE('BHD') - FLG2D(6,3)=.TRUE. - CASE('FOC') - FLG2D(6,4)=.TRUE. - CASE('TUS') - FLG2D(6,5)=.TRUE. - CASE('USS') - FLG2D(6,6)=.TRUE. - CASE('P2S') - FLG2D(6,7)=.TRUE. - CASE('USF') - IF (US3DF(1).GE.1) THEN - FLG2D(6,8)=.TRUE. - ELSE - IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USF','US3D' - END IF - CASE('P2L') - FLG2D(6,9)=.TRUE. - CASE('TWI') - FLG2D(6,10)=.TRUE. - CASE('FIC') - FLG2D(6,11)=.TRUE. - CASE('USP') - IF (USSPF(1).GE.1) THEN - FLG2D(6,12)=.TRUE. - ELSE - IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USP','USSP' - END IF + CASE('SXY') + I = 6 + J = 1 + CASE('TWO') + I = 6 + J = 2 + CASE('BHD') + I = 6 + J = 3 + CASE('FOC') + I = 6 + J = 4 + CASE('TUS') + I = 6 + J = 5 + CASE('USS') + I = 6 + J = 6 + CASE('P2S') + I = 6 + J = 7 + CASE('USF') + IF (US3DF(1).GE.1) THEN + I = 6 + J = 8 + ELSE + IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USF','US3D' + END IF + CASE('P2L') + I = 6 + J = 9 + CASE('TWI') + I = 6 + J = 10 + CASE('FIC') + I = 6 + J = 11 + CASE('USP') + IF (USSPF(1).GE.1) THEN + I = 6 + J = 12 + ELSE + IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USP','USSP' + END IF ! ! Group 7 ! - CASE('ABR') - FLG2D(7,1)=.TRUE. - CASE('UBR') - FLG2D(7,2)=.TRUE. - CASE('BED') - FLG2D(7,3)=.TRUE. - CASE('FBB') - FLG2D(7,4)=.TRUE. - CASE('TBB') - FLG2D(7,5)=.TRUE. + CASE('ABR') + I = 7 + J = 1 + CASE('UBR') + I = 7 + J = 2 + CASE('BED') + I = 7 + J = 3 + CASE('FBB') + I = 7 + J = 4 + CASE('TBB') + I = 7 + J = 5 ! ! Group 8 ! - CASE('MSS') - FLG2D(8,1)=.TRUE. - CASE('MSC') - FLG2D(8,2)=.TRUE. - CASE('MSD') - FLG2D(8,3)=.TRUE. - CASE('MCD') - FLG2D(8,4)=.TRUE. - CASE('QP') - FLG2D(8,5)=.TRUE. + CASE('MSS') + I = 8 + J = 1 + CASE('MSC') + I = 8 + J = 2 + CASE('MSD') + I = 8 + J = 3 + CASE('MCD') + I = 8 + J = 4 + CASE('QP') + I = 8 + J = 5 ! ! Group 9 ! - CASE('DTD') - FLG2D(9,1)=.TRUE. - CASE('FC') - FLG2D(9,2)=.TRUE. - CASE('CFX') - FLG2D(9,3)=.TRUE. - CASE('CFD') - FLG2D(9,4)=.TRUE. - CASE('CFK') - FLG2D(9,5)=.TRUE. + CASE('DTD') + I = 9 + J = 1 + CASE('FC') + I = 9 + J = 2 + CASE('CFX') + I = 9 + J = 3 + CASE('CFD') + I = 9 + J = 4 + CASE('CFK') + I = 9 + J = 5 ! ! Group 10 ! - CASE('U1') - FLG2D(10,1)=.TRUE. - CASE('U2') - FLG2D(10,1)=.TRUE. -!/COU CASE('DRY') - CASE DEFAULT - IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSEN,1004) TRIM(TESTSTR) - END SELECT -! - IOUT=IOUT+1 -! - END DO -! - FLT = .TRUE. - DO IFI=1, NOGRP - IF ( IAPROC .EQ. NAPOUT ) THEN - DO IFJ=1, NGRPP - IF ( FLG2D(IFI,IFJ) ) THEN - IF ( FLT ) THEN - WRITE (NDSO,1945) IDOUT(IFI,IFJ) - FLT = .FALSE. - ELSE - WRITE (NDSO,1946) IDOUT(IFI,IFJ) - END IF - END IF - END DO - ENDIF - IF(ANY(FLG2D(IFI,:))) FLG1D(IFI)=.TRUE. !Update FLG1D - END DO - IF ( IAPROC .EQ. NAPOUT ) THEN - IF ( FLT ) WRITE (NDSO,1945) 'no fields defined' - ENDIF -! - RETURN -! - 1945 FORMAT ( ' Fields : ',A) - 1946 FORMAT ( ' ',A) -! + CASE('U1') + I = 10 + J = 1 + CASE('U2') + I = 10 + J = 1 +! Not found: +!/COU CASE('DRY') + CASE('UNSET') + CASE DEFAULT + I = -1 + J = -1 + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSEN,1004) TRIM(FLD) + END SELECT + 1004 FORMAT (/' *** WAVEWATCH III WARNING : '/ & ' REQUESTED OUTPUT FIELD ',A,' WAS NOT RECOGNIZED.'/) ! @@ -1120,7 +1044,7 @@ ' PARAMETER ',A,' not allowed: need to set', & ' parameter ',A,' in OUTS namelist (in ww3_grid.inp)') ! - END SUBROUTINE W3FLGRDFLAG + END SUBROUTINE W3FLDTOIJ !/ ------------------------------------------------------------------- / SUBROUTINE W3OUTG ( A, FLPART, FLOUTG, FLOUTG2 ) diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 580e1e31d..549248f61 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -671,6 +671,8 @@ ! NOGE(1) = 7 !/BT4 NOGE(1) = 8 +!/IS2 NOGE(1) = 10 ! CB +!/SETUP NOGE(1) = 11 ! CB ! IDOUT( 1, 1) = 'Water depth ' IDOUT( 1, 2) = 'Current vel. ' @@ -746,7 +748,7 @@ ! ! 5) Atmosphere-waves layer ! - NOGE(5) = 10 + NOGE(5) = 11 ! IDOUT( 5, 1) = 'Friction velocity ' IDOUT( 5, 2) = 'Charnock parameter ' @@ -758,7 +760,8 @@ IDOUT( 5, 8) = 'Whitecap mean thick.' IDOUT( 5, 9) = 'Mean breaking height' IDOUT( 5,10) = 'Dominant break prob ' -! IDOUT( 5,11) = 'Breaker passage rate' + IDOUT( 5,11) = 'Wind sea period' ! C.Bunney - reinstated this as is used in ww3_ounf + ! Is it suposed to be defunct? It is not in ww3_outf... ! ! 6) Wave-ocean layer ! diff --git a/model/ftn/w3ounfmetamd.ftn b/model/ftn/w3ounfmetamd.ftn new file mode 100644 index 000000000..d0b82ec58 --- /dev/null +++ b/model/ftn/w3ounfmetamd.ftn @@ -0,0 +1,2841 @@ +!/ ------------------------------------------------------------------- / + MODULE W3OUNFMETAMD +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 02-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 02-Nov-2020 : Creation ( version 7.XX ) +!/ +! 1. Purpose : +! +! Manages user configurable netCDF meta-data for ww3_ounf program. +! +! 2. Method : +! +! Default netCDF meta data is provided for each WW3 output variable +! and is stored intentally via the META_T type. The meta values are +! grouped by component (max 3), field (IFI) and group (IFJ). +! +! The user can override this meta data via an input text file +! with the filename `ounfmeta.inp`. +! +! Entries in the file are formatted as follows: +! +! META [ IFI [ IFJ ] | FLDID ] [ IFC ] +! attr_name = attr_value +! attr_name = attr_value +! extra_attr = extra_value [type] +! ... repeated as many times as required. +! +! An output field is selected using the META keyword followed by +! either an [IFI, IFJ] integer pair or a FieldID string. Optionally, +! either form may be followed by an integer value to select the +! component in multi-component fields (such as wind). +! +! Blank lines and comments lines (starting with $) are ignored. +! +! attr_name is the netCDF attribute name that you wish to override. +! This can be one of the following: +! - "varnm" +! - "ename" +! - "standard_name", or "varns" +! - "long_name" or "varnl" +! - "globwave_name" or "varng" +! - "direction_reference", "dir_ref" or "varnd" +! - "comment" or "varnc" +! - "units" +! - "valid_min" or "vmin" +! - "valid_max" or "vmax" +! - "scale_factor" or "fsc" +! +! Any other attribute name is assumed to be an optional "extra" +! attribute. This extra attribute can take an optional "type" +! keyworkd to specify the variable tpye of the metadata. If +! no type is supplied, it defaults to a characer type. Valud +! types are one of ["c", "r", "i"] for character/string, +! real/float or integer values respectively. +! +! Global meta data can be specified with a special "META global" line: +! +! META global +! extra_attr = extra_value [type] +! extra_attr = extra_value [type] +! +! Note: The "META" keyword and the Field Name ID strings (e.g. HS) +! are case insensitive. All netCDF attribute names are case sensitive. +! +! +! Example file: +! +! $ Lines starting with dollars are comments. +! $ The line starts a meta-data section for the depth field +! META DPT +! standard_name = depth +! long_name = "can be quoted string" +! comment = or an unquoted string +! vmax = 999.9 +! +! $ Next one is HSig (group 2, field 1) +! META 2 1 +! varns = "sig. wave height" +! varnl = "this is long name" +! +! $ Next one is second component of wind. It also sets an +! $ "extra" meta data value (height - a float) +! META WND 2 +! standard_name = "v-wind" +! height = 10.0 "r" +! +! $ Global metadata: +! META global +! institution = UKMO +! comment "space seperated strings should be quoted" c +! version = 1.0 r +! +!/ ------------------------------------------------------------------- / +!/ + USE NETCDF + USE CONSTANTS, ONLY: TPIINV + USE W3GDATMD, ONLY: SIG, NK +!/RTD USE W3GDATMD, ONLY : FLAGUNR + USE W3ODATMD, ONLY: PTMETH, PTFCUT, NOGRP, NOGE, NGRPP, & + NDSE, FNMPRE + USE W3SERVMD, ONLY: EXTCDE, STR_TO_UPPER + + IMPLICIT NONE + + PUBLIC + + LOGICAL :: DEBUG = .FALSE. + + CHARACTER(LEN=*), PARAMETER :: FN_META = "ounfmeta.inp" + + ! String token used to merge in partition number: + CHARACTER(LEN=*), PARAMETER :: PART_TOKEN = "" + + ! Values to represent "unset" data: + CHARACTER(LEN=*), PARAMETER :: UNSETC = "unset" + REAL, PARAMETER :: UNSETR = HUGE(1.0) + + ! Type for storing a user defined metadata pair: + TYPE META_PAIR_T + CHARACTER(LEN=64) :: ATTNAME = UNSETC + CHARACTER(LEN=120) :: ATTVAL = UNSETC + CHARACTER :: TYPE = 'c' ! c,i,f/r + END TYPE META_PAIR_T + + ! Type for storing WW3 netCDF metadata for a variable + TYPE META_T + REAL :: FSC, VMIN, VMAX = UNSETR + CHARACTER(LEN=24) :: UNITS = UNSETC + CHARACTER(LEN=20) :: ENAME = UNSETC + CHARACTER(LEN=80) :: VARNM = UNSETC, VARNL = UNSETC + CHARACTER(LEN=120) :: VARNS = UNSETC ,VARNG = UNSETC, VARND = UNSETC + CHARACTER(LEN=512) :: VARNC = UNSETC + TYPE(META_PAIR_T) :: EXTRA + + ! For updating meta only: + INTEGER :: IFI = 0, IFJ = 0, IFC = 1 + CHARACTER(LEN=6) :: FLDID = '' + ENDTYPE META_T + + ! Storage for meta data aggregated by component (NFIELD) ... + TYPE FIELD_T + TYPE(META_T), POINTER :: META(:) + END TYPE FIELD_T + + ! ... field (IFJ) ... + TYPE GROUP_T + TYPE(FIELD_T), ALLOCATABLE :: FIELD(:) + END TYPE GROUP_T + + ! ... and group (IFI). + TYPE(GROUP_T), ALLOCATABLE :: GROUP(:) + + ! Storage for the Global meta data (free form): + ! TODO - maybe implement as a linked list? + TYPE(META_PAIR_T), ALLOCATABLE :: GLOBAL_META(:) + INTEGER, PARAMETER :: MAX_GBLMETA = 30 + INTEGER :: N_GBLMETA + + INTEGER :: NCVARTYPE ! netCDF variable type + CHARACTER(LEN=30) :: DIRCOM ! Direction convention comment + CHARACTER(LEN=128) :: PARTCOM ! Partitioning method comment + + CONTAINS + +!/ ------------------------------------------------------------------- / + SUBROUTINE INIT_META() +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 09-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Allocates space for the META_T arrays and sets some constants. +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + LOGICAL :: FLGNML + INTEGER :: I, J + + ! 1. Allocate nested GROUP, FIELD structure: + ALLOCATE(GROUP(NOGRP)) + DO I = 1,NOGRP + ALLOCATE(GROUP(I)%FIELD(NOGE(I))) + DO J = 1,NOGE(I) + ALLOCATE(GROUP(I)%FIELD(J)%META(3)) ! Hardcode to 3 components for the moment + ENDDO + ENDDO + + ! Allocate storage for Global meta-data + ALLOCATE(GLOBAL_META(MAX_GBLMETA)) + N_GBLMETA = 0 + + ! 2. Set direction convention: + DIRCOM = "" +!/RTD IF ( FLAGUNR ) THEN +!/RTD DIRCOM = 'True North' +!/RTD ELSE IF ( .NOT. FLAGUNR ) THEN +!/RTD DIRCOM = 'Rotated Pole Grid North' +!/RTD ENDIF + ! Set partitioning method comment: + IF ( PTMETH .EQ. 1 ) THEN + PARTCOM = "Wind sea and swells defined using topographic " // & + "partitions and partition wave-age cut-off " // & + "(WWIII default scheme)" + ELSE IF ( PTMETH .EQ. 2 ) THEN + PARTCOM = "Wind sea and swells defined using topographic " // & + "partitions and spectral wave-age cut-off" + ELSE IF ( PTMETH .EQ. 3 ) THEN + PARTCOM = "Wave components defined using topographic " // & + "partitions only" + ELSE IF ( PTMETH .EQ. 4 ) THEN + PARTCOM = "Wind sea and swell defined using spectral " // & + "wave-age cut-off" + ELSE IF ( PTMETH .EQ. 5 ) THEN + WRITE(PARTCOM, '("Wave components defined using ",F5.3,' // & + '"Hz spectral frequency cutoff")') PTFCUT + ELSE + WRITE(PARTCOM, '("PTM_",I1,"_Unknown")') PTMETH + ENDIF + + ! 3. Set the default values for the OUNF netCDF meta data. + CALL DEFAULT_META() + + ! If the ounfmeta.inp exists, read this in to override defaults: + INQUIRE(FILE=TRIM(FNMPRE)//"ounfmeta.inp", EXIST=FLGNML) + IF(FLGNML) THEN + CALL READ_META() + ENDIF + + END SUBROUTINE INIT_META +! +!/ ------------------------------------------------------------------- / + SUBROUTINE TEARDOWN_META() +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 09-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! De-allocates memory used for the META_T arrays +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: I, J + + DO I = 1,NOGRP + DO J = 1,NOGE(I) + DEALLOCATE(GROUP(I)%FIELD(J)%META) + ENDDO + DEALLOCATE(GROUP(I)%FIELD) + ENDDO + DEALLOCATE(GROUP) + + DEALLOCATE(GLOBAL_META) + + END SUBROUTINE TEARDOWN_META + +!/ ------------------------------------------------------------------- / + SUBROUTINE NEXT_LINE(NDMI, BUF, ILINE, EOF) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 09-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Reads the next valid line from the user meta input file. +! +! 2. Method : +! Lines are repeatedly read in from the input file until +! a valid input line is reached. Blank lines and comment lines +! (starting with $) are skipped. +! +! If the end of file is reached before any valid line is read +! then EOF is set to true. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NDMI Int. I Unit number of input file +! BUF Char. O Next input line read from file +! ILINE Int. I/O Line number of file +! EOF Bool. O True if end-of-file is reached. +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NDMI + CHARACTER(*), INTENT(OUT) :: BUF + INTEGER, INTENT(INOUT) :: ILINE + LOGICAL, INTENT(OUT) :: EOF +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: IERR + CHARACTER(LEN=10) :: TEST + + EOF = .FALSE. + + ! Keep reading from file until we read a line that is not: + ! - a blank line + ! - a comment line (starting with $) + ! - the end of the file + DO + READ(NDMI, '(A)', iostat=IERR, err=101, end=100) BUF + + ILINE = ILINE + 1 + + ! Remove any tab characters from buffer (replace with a space) + CALL NOTABS(BUF) + + ! Empty line? + IF(TRIM(BUF) == '') THEN + IF(DEBUG) WRITE(*,'(I5,1X,A20)') ILINE, '[blank line]' + CYCLE + ENDIF + + ! Read first token on line: + READ(BUF, *) TEST + + ! Check for comment: + IF(TEST(1:1) == "$" .OR. TRIM(BUF) == '') THEN + IF(DEBUG) WRITE(*,'(I5,1X,A20)') ILINE, '[comment line]' + CYCLE + ENDIF + + ! Anything else can be considered the "next line" + RETURN + ENDDO + +!/ Escape locations +! +! End of file + 100 CONTINUE + BUF = '' + EOF = .TRUE. + RETURN +! +! I/O Error + 101 CONTINUE + WRITE(NDSE, 1000) FN_META, ILINE, IERR + CALL EXTCDE(10) +! + 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' ERROR READING METADATA FILE'/ & + ' FILENAME = ', A / & + ' LINE NO = ', I5 / & + ' IOSTAT =',I5 /) +! + END SUBROUTINE NEXT_LINE + +!/ ------------------------------------------------------------------- / + SUBROUTINE NOTABS(STR) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 02-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 02-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Replaces tab characters in a string with spaces. +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! STR Char. I/O Character string to process +! ---------------------------------------------------------------- +! +! 3. Remarks : +! +! Assumes ASCII encoding! Tab character is ASCII value 9. +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + CHARACTER(*), INTENT(INOUT) :: STR +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER, PARAMETER :: ASCII_TAB = 9 + INTEGER :: SLEN + INTEGER :: I +! + SLEN = LEN_TRIM(STR) + + DO I=1,SLEN + IF(ICHAR(STR(I:I)) == ASCII_TAB) THEN + STR(I:I) = ' ' + ENDIF + ENDDO + + END SUBROUTINE NOTABS + +!/ ------------------------------------------------------------------- / + SUBROUTINE READ_META() +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 09-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Reads meta data entries from the ountmeta.inp file and update +! default values set via the DEFAULT_META subroutine. +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: IERR, I, NDMI + CHARACTER(LEN=256) :: BUF + TYPE(META_T), POINTER :: PMETA + CHARACTER(LEN=32) :: TEST, TESTU + + INTEGER :: IFI, IFJ, IFC + INTEGER :: ILINE, MCNT + !INTEGER :: MCNT + LOGICAL :: EOF + + NDMI = 60 + ILINE = 0 + MCNT = 0 + + OPEN(UNIT=NDMI, FILE=TRIM(FNMPRE)//TRIM(FN_META), & + STATUS="OLD", IOSTAT=IERR) + + IF(IERR .NE. 0) THEN + WRITE(NDSE, 5010) TRIM(FNMPRE)//TRIM(FN_META), IERR + CALL EXTCDE(10) + ENDIF + + ! Loop over file, skipping comments or blank lines, until we find + ! a META line. + DO + CALL NEXT_LINE(NDMI, BUF, ILINE, EOF) + IF(EOF) EXIT !GOTO 500 + + ! Read first token on line: + READ(BUF, *) TEST + + ! A new meta-data section will start with the keyword "META" + TESTU = TEST + CALL STR_TO_UPPER(TESTU) + IF(TESTU == "META") THEN + MCNT = MCNT + 1 + + IF(DEBUG) WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[META header]', TRIM(BUF) + + ! Get the IFI, IFJ, IFC values from the header: + !I = INDEX(BUF,'META') + 4 + I = INDEX(BUF, TRIM(TEST)) + 4 ! Handles lower/mixed-case META keyword + CALL DECODE_HEADER(BUF(I:), ILINE, IFI, IFJ, IFC) + IF(IFI .EQ. -1) THEN + WRITE(NDSE, 5011) TRIM(BUF(I:)), TRIM(FN_META), ILINE + CALL EXTCDE(10) + ENDIF + + ! IFI = 999 is a section for the "global" meta data + IF(IFI .EQ. 999) THEN + CALL READ_GLOBAL_META(NDMI, ILINE) + CYCLE + ENDIF + + ! Error checking on size of IFJ, ICOMP, IPART. + IF(IFI .LT. 1 .OR. IFI .GT. NOGRP) THEN + WRITE(NDSE,5013) NOGRP, TRIM(FN_META), ILINE + CALL EXTCDE(1) + ENDIF + IF(IFJ .LT. 1 .OR. IFJ .GT. NOGE(IFI)) THEN + WRITE(NDSE,5014) NOGE(IFI), TRIM(FN_META), ILINE + CALL EXTCDE(1) + ENDIF + IF(IFC .LT. 1 .OR. IFC .GT. 3) THEN + WRITE(NDSE,5015) TRIM(FN_META), ILINE + CALL EXTCDE(1) + ENDIF + + ! Select correct variable metadata entry: + PMETA => GROUP(IFI)%FIELD(IFJ)%META(IFC) + + ! Update the metadata with values from file: + CALL READ_META_PAIRS(NDMI, PMETA, ILINE) + ELSE + ! Anything else is a syntax error + WRITE(NDSE, 5012) TRIM(FN_META), ILINE, TRIM(BUF) + CALL EXTCDE(10) + ENDIF + ENDDO + + !500 CONTINUE + CLOSE(NDMI) + WRITE(*, 5000) MCNT, N_GBLMETA + RETURN +! + 5000 FORMAT(/' Read in: ',I3,' variable metadata entries' / & + ' and: ',I3,' global meta data entries' /) +! + 5010 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' ERROR OPENING METADATA FILE'/ & + ' FILENAME = ', A / & + ' IOSTAT =', I5 /) +! + 5011 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' UNKNOWN FIELD ID: ',A / & + ' FILENAME = ', A / & + ' LINE =', I5 /) +! + 5012 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' SYNTAX ERROR ' / & + ' FILENAME = ', A / & + ' LINE =', I5 / & + ' => ', A /) +! + 5013 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & + ' IFI value should be in range 1,',I2 / & + ' FILENAME = ', A / & + ' LINE =', I5 / & + ' => ', A /) +! + 5014 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & + ' IFJ value should be in range 1,',I2 / & + ' FILENAME = ', A / & + ' LINE =', I5 / & + ' => ', A /) +! + 5015 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & + ' IFC value should be in range 1,3' / & + ' FILENAME = ', A / & + ' LINE =', I5 / & + ' => ', A /) +! + END SUBROUTINE READ_META + +!/ ------------------------------------------------------------------- / + SUBROUTINE DECODE_HEADER(BUF, ILINE, IFI, IFJ, IFC) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 09-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Decode the META header line. +! +! 2. Method: +! +! The internal WW3 field can be specified either as an [IFI, IFJ] +! integer combination, or a field ID tag (such as "HS"). +! +! Both forms can also specify an optional component (IFC) integer +! value for multi-component fields (defaults to 1). +! +! Field name ID tags are case-insensitive, HS == hs == Hs. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! BUF Char. I Input header string (without leading META tag) +! ILINE Int. I Line number (for error reporting) +! IFI Int. O Output group number +! IFJ Int. O Output field number +! IFC Int. O Component number (defaults to 1) +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + USE W3IOGOMD, ONLY: W3FLDTOIJ + + IMPLICIT NONE + + CHARACTER(*), INTENT(IN) :: BUF + INTEGER, INTENT(IN) :: ILINE + INTEGER, INTENT(OUT) :: IFI, IFJ, IFC +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: IERR + CHARACTER(LEN=10) :: FLD + + IFI = 0 + IFJ = 1 + IFC = 1 + FLD = '' + + ! Is first value an int? + READ(BUF, *, IOSTAT=IERR) IFI + IF(IERR .EQ. 0) THEN + ! Try reading 3 values: + READ(BUF, *, iostat=IERR) IFI, IFJ, IFC + IF(IERR .NE. 0) THEN + ! Try just two values: + READ(BUF, *, IOSTAt=IERR) IFI, IFJ + ENDIF + ELSE + ! Try reading field ID plus component + READ(BUF, *, IOSTAT=IERR) FLD, IFC + + IF(ierr .NE. 0) THEN + ! Try just fldid + READ(BUF, *, IOSTAT=IERR) FLD + ENDIF + ENDIF + + IF(IERR .NE. 0) THEN + WRITE(NDSE, 6000) TRIM(FN_META), ILINE, TRIM(BUF) + CALL EXTCDE(10) + ENDIf + + CALL STR_TO_UPPER(FLD) ! field names are case insensitive + + ! If string value (FLDID), then decode into IFI,IFJ value: + IF(FLD /= '') THEN + ! Special case for "global" attributes + IF(TRIM(FLD) == "GLOBAL") THEN + IF(DEBUG) WRITE(*,'(6X,A20,1X,A)') '[GLOBAL meta sec.]', TRIM(BUF) + IFI = 999 ! Marker for global section + ELSE + IF(DEBUG) WRITE(*,'(6X,A20,1X,A)') '[Decoding field ID]', TRIM(BUF) + CALL W3FLDTOIJ(FLD, IFI, IFJ, 1, 1, 1) + ENDIF + ENDIF + + IF(DEBUG) WRITE(*,'(6X,A20,1X,3I2)') '[IFI, IFJ, IFC]', IFI,IFJ,IFC +! + 6000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' SYNTAX ERROR IN SECTION HEADER. ' / & + ' FILENAME = ', A / & + ' LINE NO =', I5 / & + ' => ', A /) +! + END SUBROUTINE DECODE_HEADER + +!/ ------------------------------------------------------------------- / + SUBROUTINE READ_META_PAIRS(NDMI, META, ILINE) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 09-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Reads in attribute name/value pairs and updates the relevant +! values in the META type. +! +! 2. Method: +! +! Keeps looping over input lines in file until next META section +! or EOF is found. Splits meta pairs on the = character. +! +! Note - the "extra" metadata pair can also provide a variable +! type ("c", "i", or "r"; for character, int or real respectively) +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NDMI Int. I Unit number of metadata input file +! META Int.Ptr. O Pointer to META type +! ILINE Int. I/O Current line number in file +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + INTEGER, INTENT(IN) :: NDMI + TYPE(META_T), INTENT(IN), POINTER :: META + INTEGER, INTENT(INOUT) :: ILINE +!/ ------------------------------------------------------------------- / +!/ Local parameters +! + CHARACTER(LEN=256) :: BUF + CHARACTER(LEN=128) :: ATTN, ATTV, TMP, EXTRA + CHARACTER(LEN=16) :: ATT_TYPE, TEST + INTEGER :: I, IERR + REAL :: R + LOGICAL :: EOF +! + EXTRA = '' + + ! Keep reading lines until we hit EOF or anoter META keyword + DO + CALL NEXT_LINE(NDMI, BUF, ILINE, EOF) + IF(EOF) THEN + BACKSPACE(NDMI) + RETURN + ENDIF + + ! Read first token on line: + READ(BUF, *) TEST + + CALL STR_TO_UPPER(TEST) + IF(TEST == "META") THEN + ! Start of new meta data entry + IF(DEBUG) WRITE(*,'(I5,1X,A20)') ILINE, '[--end of section--]' + ILINE = ILINE - 1 + BACKSPACE(NDMI) + EXIT + ENDIF + + IF(DEBUG) WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[META pair]', TRIM(BUF) + + ! Meta data should be formatted as "attr_name = attr_value" + I = INDEX(BUF, "=") + IF( I .LT. 1 ) THEN + WRITE(NDSE, 7000) FN_META, ILINE, TRIM(BUF) + CALL EXTCDE(10) + ENDIF + + ATTN = ADJUSTL(BUF(1:I-1)) + ATTV = ADJUSTL(BUF(I+1:)) + + ! Some compilers won't read an "empty" string unless quoted: + IF(TRIM(ATTV) == '') THEN + ATTV='""' + ENDIF + + IERR = 0 + SELECT CASE(TRIM(attn)) + ! Character variables + ! Note: Using internal reads will allow the use of quote marks in strings + CASE("varnm") + READ(attv, *, IOSTAT=IERR) META%VARNM + + CASE("ename") + READ(attv, *, IOSTAT=IERR) META%ENAME + + CASE("standard_name", "varns") + READ(attv, *, IOSTAT=IERR) META%VARNS + + CASE("long_name", "varnl") + READ(attv, *, IOSTAT=IERR) META%VARNL + + CASE("globwave_name", "varng") + READ(attv, *, IOSTAT=IERR) META%VARNG + + CASE("direction_reference", "dir_ref", "varnd") + READ(attv, *, IOSTAT=IERR) META%VARND + + CASE("comment", "varnc") + READ(attv, *, IOSTAT=IERR) META%VARNC + + CASE("units") + READ(attv, *, IOSTAT=IERR) META%UNITS + + ! Real variables + CASE("valid_min", "vmin") + READ(attv, *, IOSTAT=IERR) META%VMIN + + CASE("valid_max", "vmax") + READ(attv, *, IOSTAT=IERR) META%VMAX + + CASE("scale_factor", "fsc") + READ(attv, *, IOSTAT=IERR) META%FSC + + ! Default case will be the "extra" meta data variable + CASE DEFAULT + ! Check EXTRA attribute not already set + IF(EXTRA /= '') THEN + WRITE(NDSE, 7001) FN_META, ILINE, TRIM(BUF) + CALL EXTCDE(10) + ENDIF + + TMP = ATTV + CALL GET_ATTVAL_TYPE(TMP, ILINE, ATTV, ATT_TYPE) + + IF(DEBUG) THEN + WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[META extra]', & + TRIM(attn)//' = '//TRIM(attv)//' (type: '//TRIM(att_type)//")" + ENDIF + + ! Set "extra" data + META%EXTRA%ATTNAME = TRIM(attn) + META%EXTRA%ATTVAL = TRIM(attv) + META%EXTRA%TYPE = TRIM(att_type) + + EXTRA = ATTN + + END SELECT + + IF(IERR /= 0) THEN + WRITE(NDSE, 7002) FN_META, ILINE, TRIM(BUF) + CALL EXTCDE(10) + ENDIF + + ENDDO + + RETURN +! + 7000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' SYNTAX ERROR IN METADATA FILE ' / & + ' SHOULD BE "attr_name = attr_value" ' / & + ' FILENAME = ', A / & + ' LINE NO =', I5 / & + ' => ', A /) +! + 7001 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' "EXTRA" ATTRIBUTE ALREADY SET FOR VARIABLE' / & + ' FILENAME = ', A / & + ' LINE NO =', I5 / & + ' => ', A /) +! + 7002 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' IO ERROR READING ATTRIBUTE' / & + ' FILENAME = ', A / & + ' LINE NO =', I5 / & + ' => ', A /) +! + END SUBROUTINE READ_META_PAIRS + +!/ ------------------------------------------------------------------- / + SUBROUTINE GET_ATTVAL_TYPE(BUF, ILINE, ATTV, ATT_TYPE) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 09-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Gets the attribute value and optional variable type from +! the passed in string. +! +! 2. Method: +! +! If two freeform values can be read from the input string, it is +! assumed to be a value and type, otherwise if only one value can +! be read the type is assumed to be "character". +! +! It is important to quote strings if they contain spaces. +! +! Valid types are "c" "r/f", and "i" for character, real/float and +! integer values. + +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! BUF Char. I Input string to process +! ILINE Int. I Line number (for error reporting) +! ATTV Char. O Attribute value +! ATT_TYPE Char. O Attribute type +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + CHARACTER(*), INTENT(IN) :: BUF + INTEGER, INTENT(IN) :: ILINE + CHARACTER(*), INTENT(OUT) :: ATTV, ATT_TYPE +!/ ------------------------------------------------------------------- / +!/ Local parameters +! + REAL :: R + INTEGER :: I, IERR + + ! Get attribute and type (default to "c" if no type set) + ATT_TYPE = 'c' + ATTV = '' + READ(BUF, *, IOSTAT=IERR) ATTV, ATT_TYPE + IF(IERR /= 0) READ(BUF, *, IOSTAT=IERR) ATTV + + ! Check attr values are valid w.r.t. attr type + SELECT CASE(TRIM(att_type)) + + CASE("i") + READ(attv, *, iostat=ierr) i + IF(ierr .ne. 0) then + WRITE(NDSE, 8001) "INTEGER", TRIM(FN_META), ILINE, TRIM(ATTV) + CALL EXTCDE(10) + ENDIF + + CASE("r", "f") + READ(attv, *, iostat=ierr) r + IF(ierr .ne. 0) THEN + WRITE(NDSE, 8001) "REAL/FLOAT", TRIM(FN_META), ILINE, TRIM(ATTV) + CALL EXTCDE(10) + ENDIF + + CASE("c") + ! Always ok. + + CASE DEFAULT + WRITE(NDSE, 8002) TRIM(FN_META), ILINE, TRIM(BUF) + CALL EXTCDE(10) + + END SELECT +! + 8001 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' VALUE IS NOT A VALID ', A / & + ' FILENAME = ', A / & + ' LINE NO =', I5 / & + ' => ', A /) +! + 8002 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' ATTRIBUTE TYPE SHOULD BE ONE OF [c,i,r] '/ & + ' FILENAME = ', A / & + ' LINE NO =', I5 / & + ' => ', A /) +! + END SUBROUTINE GET_ATTVAL_TYPE + + +!/ ------------------------------------------------------------------- / + SUBROUTINE READ_GLOBAL_META(NDMI, ILINE) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 09-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Reads in attribute name/value pairs for the "global" section. +! +! 2. Method: +! +! Keeps looping over input lines in file until next META section +! or EOF is found. Splits meta pairs on the = character. +! +! Global metadata pair can also provide a variable type +! ("c", "i", or "r"; for character, int or real respectively). +! String values with spaces should be quoted. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NDMI Char. I Unit number of metadata input file +! ILINE Int. I/O Current line number in file +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + INTEGER, INTENT(IN) :: NDMI + INTEGER, INTENT(INOUT) :: ILINE +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + CHARACTER(LEN=256) :: BUF + CHARACTER(LEN=128) :: ATTN, ATTV, TMP, EXTRA + CHARACTER(LEN=16) :: ATT_TYPE, TEST + INTEGER :: I, IERR + REAL :: R + LOGICAL :: EOF +! + ! Keep reading lines until we hit EOF or anoter META keyword + DO + CALL NEXT_LINE(NDMI, BUF, ILINE, EOF) + IF(EOF) THEN + BACKSPACE(NDMI) + RETURN + ENDIF + + ! Read first token on line: + READ(BUF, *) TEST + + CALL STR_TO_UPPER(TEST) + IF(TEST == "META") THEN + ! Start of new meta data entry + IF(DEBUG) WRITE(*,'(I5,1X,A20)') ILINE, '[--end of section--]' + ILINE = ILINE - 1 + BACKSPACE(NDMI) + EXIT + ENDIF + + ! Split attr name/value pair + I = INDEX(BUF, "=") + IF( I .LT. 1 ) THEN + WRITE(NDSE, 9000) TRIM(FN_META), ILINE, TRIM(BUF) + CALL EXTCDE(10) + ENDIF + + ATTN = ADJUSTL(BUF(1:I-1)) + TMP = ADJUSTL(BUF(I+1:)) + + ! Get type, if set: + CALL GET_ATTVAL_TYPE(TMP, ILINE, ATTV, ATT_TYPE) + + IF(DEBUG) THEN + WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[GLOBAL meta]', & + TRIM(attn)//' = '//TRIM(attv)//' (type: '//TRIM(att_type)//")" + ENDIF + + N_GBLMETA = N_GBLMETA + 1 + GLOBAL_META(N_GBLMETA)%ATTNAME = TRIM(ATTN) + GLOBAL_META(N_GBLMETA)%ATTVAL = TRIM(ATTV) + GLOBAL_META(N_GBLMETA)%TYPE = TRIM(ATT_TYPE) + + ENDDO +! + 9000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' SYNTAX ERROR IN METADATA FILE ' / & + ' SHOULD BE "attr_name = attr_value" ' / & + ' FILENAME = ', A / & + ' LINE NO =', I5 / & + ' => ', A /) +! + END SUBROUTINE READ_GLOBAL_META + +!/ ------------------------------------------------------------------- / + FUNCTION GETMETA(IFI, IFJ, ICOMP, IPART) RESULT(META) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 02-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Returns a META_T type containig the netCDF matadata for the +! requested field +! +! 2. Method : +! +! A copy of the meta-data is returned, rather than a pointer. This +! is because in the case of paritioned parameters, the metadata +! will be updated with the partition number. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! IFI Int. I Output group number +! IFJ Int. I Output field number +! ICOMP Int. I Component number (defaults to 1) +! IPART Int. I Partition number (defaults to 1) +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + INTEGER, INTENT(IN) :: IFI, IFJ + INTEGER, INTENT(IN), OPTIONAL :: ICOMP, IPART +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: IFP, IFC + TYPE(META_T) :: META ! Not pointer as we might need to modify it + + IFC = 1 + IFP = 1 + IF(PRESENT(ICOMP)) IFC = ICOMP + IF(PRESENT(IPART)) IFP = IPART + + ! Error checking on size of IFJ, ICOMP, IPART. + IF(IFI .LT. 1 .OR. IFI .GT. NOGRP) THEN + WRITE(NDSE,1000) NOGRP + CALL EXTCDE(1) + ENDIF + IF(IFJ .LT. 1 .OR. IFJ .GT. NOGE(IFI)) THEN + WRITE(NDSE,1001) NOGE(IFI) + CALL EXTCDE(1) + ENDIF + IF(IFC .LT. 1 .OR. IFC .GT. 3) THEN + WRITE(NDSE,1002) + CALL EXTCDE(1) + ENDIF + + META = GROUP(IFI)%FIELD(IFJ)%META(IFC) + + ! For partitioned data, expand in the partition number: + IF(IFI .EQ. 4) THEN + CALL ADD_PARTNO(META, IFP) + ENDIF + + RETURN + + 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & + ' GETMETA: IFI value should be in range 1,',I2 / ) +! + 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & + ' GETMETA: IFJ value should be in range 1,',I2 / ) +! + 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & + ' GETMETA: IFC value should be in range 1,3' / ) +! + END FUNCTION GETMETA + +!/ ------------------------------------------------------------------- / + SUBROUTINE ADD_PARTNO(META, IPART) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 02-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Adds partition number to meta-data. +! +! 2. Method : +! +! Replaces all instances of "" in the provided meta data with +! the partition number IPART. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! META META_T I Meta data type +! IPART Int. I Partition number +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + TYPE(META_T), INTENT(INOUT) :: META + INTEGER, INTENT(IN) :: IPART +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + CHARACTER(LEN=80) :: TMP + INTEGER :: I, J + + CALL PARTNO_STRING_SUB(META%ENAME, IPART) + CALL PARTNO_STRING_SUB(META%VARNM, IPART) + CALL PARTNO_STRING_SUB(META%VARNL, IPART) + CALL PARTNO_STRING_SUB(META%VARNS, IPART) + CALL PARTNO_STRING_SUB(META%VARNG, IPART) + CALL PARTNO_STRING_SUB(META%VARNC, IPART) + CALL PARTNO_STRING_SUB(META%VARND, IPART) + CALL PARTNO_STRING_SUB(META%EXTRA%ATTNAME, IPART) + CALL PARTNO_STRING_SUB(META%EXTRA%ATTVAL, IPART) + + END SUBROUTINE ADD_PARTNO + +!/ ------------------------------------------------------------------- / + SUBROUTINE PARTNO_STRING_SUB(INSTR, IPART) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 02-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Replaces occurancs of "" in a string with the value provided +! in IPART. +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! INSTR Char. I/O Input string +! IPART Int. I Partition number +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + CHARACTER(LEN=*), INTENT(INOUT) :: INSTR + INTEGER, INTENT(IN) :: IPART +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: I, J + + I = INDEX(INSTR, "") + J = I + LEN_TRIM("") + IF(I .GT. 0) THEN + WRITE(INSTR,'(A,I1,A)') INSTR(1:I-1), IPART, INSTR(J:LEN(INSTR)) + ENDIF + + END SUBROUTINE PARTNO_STRING_SUB + +!/ ------------------------------------------------------------------- / + SUBROUTINE WRITE_META(NCID, VARID, META, ERR) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 02-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Writes the meta-data entries for a variable. +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NCID Int. I/O NetCDF file ID +! VARID Int. I/O NetCDF variable ID +! META Int. I Meta data type +! ERR Int. O Error value +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NCID, VARID + TYPE(META_T), INTENT(IN) :: META + INTEGER, INTENT(OUT) :: ERR +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: IVAL, VAL + REAL :: RVAL +!/ + ERR = NF90_PUT_ATT(NCID, VARID, 'long_name', META%VARNL) + IF(ERR /= NF90_NOERR) RETURN + + ERR = NF90_PUT_ATT(NCID, VARID, 'standard_name', META%VARNS) + IF(ERR /= NF90_NOERR) RETURN + + IF(META%VARNG .NE. '' .AND. META%VARNG .NE. UNSETC) THEN + ERR = NF90_PUT_ATT(NCID, VARID, 'globwave_name', META%VARNG) + IF(ERR /= NF90_NOERR) RETURN + ENDIF + + ERR = NF90_PUT_ATT(NCID, VARID, 'units', META%UNITS) + IF(ERR /= NF90_NOERR) RETURN + + ! Fill value dependent on variable type + IF(NCVARTYPE .EQ. 2) THEN + ERR = NF90_PUT_ATT(NCID, VARID, '_FillValue', NF90_FILL_SHORT) + ELSE + ERR = NF90_PUT_ATT(NCID, VARID, '_FillValue', NF90_FILL_FLOAT) + END IF + IF(ERR /= NF90_NOERR) RETURN + + ERR = NF90_PUT_ATT(NCID, VARID, 'scale_factor', META%FSC) + IF(ERR /= NF90_NOERR) RETURN + + ERR = NF90_PUT_ATT(NCID, VARID, 'add_offset', 0.) + IF(ERR /= NF90_NOERR) RETURN + + ! For variables with vartype SHORT, the valid min/max + ! are scaled by scale_factor and converted to integers. + ! If vartype is FLOAT, then no scaling is performed and + ! valid min/max are written out directly as floats. + IF(NCVARTYPE .EQ. 2) THEN + VAL = NINT(META%VMIN / META%FSC) + ERR = NF90_PUT_ATT(NCID, VARID,'valid_min', VAL) + IF(ERR /= NF90_NOERR) RETURN + + VAL = NINT(META%VMAX / META%FSC) + ERR = NF90_PUT_ATT(NCID, VARID,'valid_max', VAL) + IF(ERR /= NF90_NOERR) RETURN + ELSE + ERR = NF90_PUT_ATT(NCID, VARID,'valid_min', META%VMIN) + IF(ERR /= NF90_NOERR) RETURN + + ERR = NF90_PUT_ATT(NCID, VARID,'valid_max', META%VMAX) + IF(ERR /= NF90_NOERR) RETURN + ENDIF + + IF(META%VARNC .NE. '' .AND. META%VARNC .NE. UNSETC) THEN + ERR = NF90_PUT_ATT(NCID, VARID, 'comment', META%VARNC) + IF(ERR /= NF90_NOERR) RETURN + ENDIF + + IF (META%VARND .NE. '' .AND. META%VARND .NE. UNSETC) THEN + ERR = NF90_PUT_ATT(NCID, VARID, 'direction_reference', META%VARND) + IF(ERR /= NF90_NOERR) RETURN + END IF + + IF (META%EXTRA%ATTNAME .NE. '' .AND. & + META%EXTRA%ATTNAME .NE. UNSETC) THEN + + SELECT CASE(META%EXTRA%TYPE) + + CASE('i') + READ(META%EXTRA%ATTVAL, *) IVAL + ERR = NF90_PUT_ATT(NCID, VARID, META%EXTRA%ATTNAME, IVAL) + IF(ERR /= NF90_NOERR) RETURN + + CASE('r', 'f') + READ(META%EXTRA%ATTVAL, *) RVAL + ERR = NF90_PUT_ATT(NCID, VARID, META%EXTRA%ATTNAME, RVAL) + IF(ERR /= NF90_NOERR) RETURN + + CASE('c') + ERR = NF90_PUT_ATT(NCID, VARID, META%EXTRA%ATTNAME, & + META%EXTRA%ATTVAL) + IF(ERR /= NF90_NOERR) RETURN + + CASE DEFAULT + WRITE(1000,*) META%EXTRA%TYPE + CALL EXTCDE(10) + END SELECT + ENDIF + + RETURN +! + 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & + ' WRITEMETA: Unknown meta data type: ', A1 / ) +! + END SUBROUTINE WRITE_META + +!/ ------------------------------------------------------------------- / + SUBROUTINE WRITE_GLOBAL_META(NCID, ERR) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 09-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Writes the user meta-data entries for the global attributes +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NCID Int. I/O NetCDF file ID +! ERR Int. O Error value +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NCID + INTEGER, INTENT(OUT) :: ERR +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: VARID = NF90_GLOBAL + INTEGER :: I, IVAL + REAL :: RVAL + + ! Loop over global metadata pairs: + DO I=1,N_GBLMETA + + IF (GLOBAL_META(I)%ATTNAME .EQ. '' .OR. & + GLOBAL_META(I)%ATTNAME .EQ. UNSETC) CYCLE + + SELECT CASE(GLOBAL_META(I)%TYPE) + + CASE('i') + READ(GLOBAL_META(I)%ATTVAL, *) IVAL + ERR = NF90_PUT_ATT(NCID, VARID, GLOBAL_META(I)%ATTNAME, IVAL) + IF(ERR /= NF90_NOERR) RETURN + + CASE('r', 'f') + READ(GLOBAL_META(I)%ATTVAL, *) RVAL + ERR = NF90_PUT_ATT(NCID, VARID, GLOBAL_META(I)%ATTNAME, RVAL) + IF(ERR /= NF90_NOERR) RETURN + + CASE('c') + ERR = NF90_PUT_ATT(NCID, VARID, GLOBAL_META(I)%ATTNAME, & + GLOBAL_META(I)%ATTVAL) + IF(ERR /= NF90_NOERR) RETURN + + CASE DEFAULT + WRITE(1000,*) GLOBAL_META(I)%TYPE + CALL EXTCDE(10) + END SELECT + ENDDO +! + 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & + ' WRITEMETA: Unknown meta data type: ', A1 / ) +! + END SUBROUTINE WRITE_GLOBAL_META + +!/ ------------------------------------------------------------------- / + SUBROUTINE PRINT_META(META) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 02-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Writes meta-data to the screen - for debugging purposes. +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! VARID Int. I/O NetCDF variable ID +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + TYPE(META_T), INTENT(IN) :: META + + WRITE(*,*) META%VARNM + WRITE(*,"(A20,':',1X,A)") "Standard name", TRIM(META%VARNS) + WRITE(*,"(A20,':',1X,A)") "Long name", TRIM(META%VARNL) + WRITE(*,"(A20,':',1X,A)") "Units", TRIM(META%UNITS) + WRITE(*,"(A20,':',1X,A)") "GLOBWAVE name", TRIM(META%VARNG) + WRITE(*,"(A20,':',1X,A)") "Direction conv", TRIM(META%VARND) + WRITE(*,"(A20,':',1X,A)") "Comment", TRIM(META%VARNC) + WRITE(*,"(A20,':',1X,2F12.3)") "Min/Max", META%VMIN, META%VMAX + WRITE(*,"(A20,':')") "Extra metadata" + WRITE(*,"(2X,A20,':',1X,'[',A1,']')") "Type", META%EXTRA%TYPE + WRITE(*,"(2X,A20,':',1X,A)") TRIM(META%EXTRA%ATTNAME), TRIM(META%EXTRA%ATTNAME) + + END SUBROUTINE PRINT_META + +!/ ------------------------------------------------------------------- / + SUBROUTINE DEFAULT_META() +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 02-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 02-Nov-2020 : Creation ( version 7.XX ) +!/ +! +! 1. Purpose : +! +! Populates the default meta data for ww3_ounf. +! +! 2. Remarks : +! +! VMIN and VMAX are now set in the units of the output field. +! Previously, they were set with scaled values based on the scaling +! factor FSC. The scaling is now performed (if necessary) in the +! WRITE_META subroutine. +! +! FSC (scale factor) is only applied to data and valid_min/max if +! the netCDF variable type is NF90_SHORT. +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + TYPE(META_T), POINTER :: META(:) +! +!----------GROUP 1 ---------------- +! +! IFI=1, IFJ=1 + META => GROUP(1)%FIELD(1)%META + META(1)%FSC = 0.5 + META(1)%UNITS = 'm' + META(1)%ENAME = '.dpt' + META(1)%VARNM = 'dpt' + META(1)%VARNL ='depth' + META(1)%VARNS ='depth' + META(1)%VARNG ='depth' + META(1)%VARNC ='' + META(1)%VARND ='' + META(1)%VMIN = -45000 + META(1)%VMAX = 70000 +! IFI=1, IFJ=2 + META => GROUP(1)%FIELD(2)%META + META(1)%FSC = 0.01 + META(1)%ENAME = '.cur' + META(1)%UNITS = 'm s-1' + META(1)%VMIN = -9.9 + META(1)%VMAX = 9.9 + META(1)%VARNM='ucur' + META(1)%VARNL='eastward current' + META(1)%VARNS='eastward_sea_water_velocity' + META(1)%VARNG='eastward_sea_water_velocity' + META(1)%VARNC='cur=sqrt(U**2+V**2)' + META(1)%VARND = DIRCOM + + ! Second component + META(2) = META(1) + META(2)%VARNM='vcur' + META(2)%VARNL='northward current' + META(2)%VARNS='northward_sea_water_velocity' + META(2)%VARNG='northward_sea_water_velocity' + META(2)%VARNC='cur=sqrt(U**2+V**2)' +! IFI=1, IFJ=3 + META => GROUP(1)%FIELD(3)%META + META(1)%FSC = 0.1 + META(1)%ENAME = '.wnd' + META(1)%UNITS = 'm s-1' + META(1)%VARNM='uwnd' + META(1)%VARNL='eastward_wind' + META(1)%VARNS='eastward_wind' + META(1)%VARNG='eastward_wind' + META(1)%VARNC='wind=sqrt(U10**2+V10**2)' + META(1)%VMIN = -99.0 + META(1)%VMAX = 99.0 + META(1)%VARND = DIRCOM + + ! Second component + META(2) = META(1) + META(2)%VARNM='vwnd' + META(2)%VARNL='northward_wind' + META(2)%VARNS='northward_wind' + META(2)%VARNG='northward_wind' + META(2)%VARNC='wind=sqrt(U10**2+V10**2)' +! IFI=1, IFJ=4 + META => GROUP(1)%FIELD(4)%META + META(1)%FSC = 0.1 + META(1)%ENAME = '.ast' + META(1)%UNITS = 'K' + META(1)%VARNM='ast' + META(1)%VARNL='air sea temperature difference' + META(1)%VARNS='air_sea_temperature_difference' + META(1)%VARNG='air_sea_temperature_difference' + META(1)%VMIN = 0 + META(1)%VMAX = 400 +! IFI=1, IFJ=5 + META => GROUP(1)%FIELD(5)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 'm' + META(1)%ENAME = '.wlv' + META(1)%VARNM='wlv' + META(1)%VARNL='sea surface height above sea level' + META(1)%VARNS='sea_surface_height_above_sea_level' + META(1)%VARNG='sea_surface_height_above_sea_level' + META(1)%VMIN = 0 + META(1)%VMAX = 100 +! IFI=1, IFJ=6 + META => GROUP(1)%FIELD(6)%META + META(1)%FSC = 0.001 + META(1)%UNITS = '1' + META(1)%ENAME = '.ice' + META(1)%VARNM='ice' + META(1)%VARNL='sea ice area fraction' + META(1)%VARNS='sea_ice_area_fraction' + META(1)%VARNG='sea_ice_area_fraction' + META(1)%VMIN = 0 + META(1)%VMAX = 1 +! IFI=1, IFJ=7 + META => GROUP(1)%FIELD(7)%META + META(1)%FSC = 0.0001 + META(1)%UNITS = 'km-1' + META(1)%ENAME = '.ibg' + META(1)%VARNM='ibg' + META(1)%VARNL='icebergs_damping' + META(1)%VARNS='icebergs_induced_attenuation_scale_for_waves' + META(1)%VARNG='icebergs_damping' + META(1)%VMIN = 0 + META(1)%VMAX = 3.2 +! IFI=1, IFJ=8 +!/BT4 META => GROUP(1)%FIELD(8)%META +!/BT4 META(1)%FSC = 0.001 +!/BT4 META(1)%UNITS = 'Krumbein phi scale' +!/BT4 META(1)%ENAME = '.d50' +!/BT4 META(1)%VARNM='d50' +!/BT4 META(1)%VARNL='grain_size' +!/BT4 META(1)%VARNS='sediment_grain_size' +!/BT4 META(1)%VARNG='sediment_grain_size' +!/BT4 META(1)%VMIN = -10.0 +!/BT4 META(1)%VMAX = 32.0 +! IFI=1, IFJ=9 +!/IS2 META => GROUP(1)%FIELD(9)%META +!/IS2 META(1)%FSC = 0.001 +!/IS2 META(1)%UNITS = 'm' +!/IS2 META(1)%ENAME = '.ic1' +!/IS2 META(1)%VARNM='ic1' +!/IS2 META(1)%VARNL='ice thickness' +!/IS2 META(1)%VARNS='ice_thickness' +!/IS2 META(1)%VARNG='ice_thickness' +!/IS2 META(1)%VMIN = 0 +!/IS2 META(1)%VMAX = 30 +! IFI=1, IFJ=10 +!/IS2 META => GROUP(1)%FIELD(10)%META +!/IS2 META(1)%FSC = 0.05 +!/IS2 META(1)%UNITS = 'm' +!/IS2 META(1)%ENAME = '.ic5' +!/IS2 META(1)%VARNM='ic5' +!/IS2 META(1)%VARNL='maximum floe diameter' +!/IS2 META(1)%VARNS='maximum_ice_floe_diameter' +!/IS2 META(1)%VARNG='maximum_ice_floe_diameter' +!/IS2 META(1)%VMIN = 0 +!/IS2 META(1)%VMAX = 1500 +! +!----------GROUP 2 ---------------- +! +! IFI=2, IFJ=1 + META => GROUP(2)%FIELD(1)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.hs' + META(1)%VARNM='hs' + META(1)%VARNL='significant height of wind and swell waves' + META(1)%VARNS='sea_surface_wave_significant_height' + META(1)%VARNG='significant_wave_height' + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! IFI=2, IFJ=2 + META => GROUP(2)%FIELD(2)%META + META(1)%FSC = 1. + META(1)%UNITS = 'm' + META(1)%ENAME = '.lm' + META(1)%VARNM='lm' + META(1)%VARNL='mean wave length' + META(1)%VARNS='mean_wave_length' + META(1)%VARNG='mean_wave_length' + META(1)%VMIN = 0 + META(1)%VMAX = 3200 +! IFI=2, IFJ=3 + META => GROUP(2)%FIELD(3)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 's' + META(1)%ENAME = '.t02' + META(1)%VARNM='t02' + META(1)%VARNL='mean period T02' + META(1)%VARNS='sea_surface_wind_wave_mean_period' // & + '_from_variance_spectral_density_second_frequency_moment' + META(1)%VARNG='mean_period_t02' + META(1)%VMIN = 0 + META(1)%VMAX = 50 +! IFI=2, IFJ=4 + META => GROUP(2)%FIELD(4)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 's' + META(1)%ENAME = '.t0m1' + META(1)%VARNM='t0m1' + META(1)%VARNL='mean period T0m1' + META(1)%VARNS='sea_surface_wind_wave_mean_period_from_variance' // & + '_spectral_density_inverse_frequency_moment' + META(1)%VARNG='mean_period_t0m1' + META(1)%VMIN = 0 + META(1)%VMAX = 50 +! IFI=2, IFJ=5 + META => GROUP(2)%FIELD(5)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 's' + META(1)%ENAME = '.t01' + META(1)%VARNM='t01' + META(1)%VARNL='mean period T01' + META(1)%VARNS='sea_surface_wind_wave_mean_period_from_variance' // & + '_spectral_density_first_frequency_moment' + META(1)%VARNG='mean_period_t01' + META(1)%VMIN = 0 + META(1)%VMAX = 50 +! IFI=2, IFJ=6 + META => GROUP(2)%FIELD(6)%META + META(1)%FSC = 0.001 + META(1)%UNITS = 's-1' + META(1)%ENAME = '.fp' + META(1)%VARNM='fp' + META(1)%VARNL='wave peak frequency' + META(1)%VARNS='sea_surface_wave_peak_frequency' + META(1)%VARNG='dominant_wave_frequency' + META(1)%VMIN = 0 + META(1)%VMAX = 10 +! IFI=2, IFJ=7 + META => GROUP(2)%FIELD(7)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'degree' + META(1)%ENAME = '.dir' + META(1)%VARNM='dir' + META(1)%VARNL='wave mean direction' + META(1)%VARNS='sea_surface_wave_from_direction' + META(1)%VARNG='wave_from_direction' + META(1)%VARND=DIRCOM + META(1)%VMIN = 0 + META(1)%VMAX = 360 +! IFI=2, IFJ=8 + META => GROUP(2)%FIELD(8)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'degree' + META(1)%ENAME = '.spr' + META(1)%VARNM='spr' + META(1)%VARNL='directional spread' + META(1)%VARNS='sea_surface_wave_directional_spread' + META(1)%VARNG='directional_spread' + META(1)%VMIN = 0 + META(1)%VMAX = 90 +! IFI=2, IFJ=9 + META => GROUP(2)%FIELD(9)%META + META(1)%FSC = 1. + META(1)%UNITS = 'degree' + META(1)%ENAME = '.dp' + META(1)%VARNM='dp' + META(1)%VARNL='peak direction' + META(1)%VARNS='sea_surface_wave_peak_direction' + META(1)%VARNG='dominant_wave_direction' + META(1)%VARND=DIRCOM + META(1)%VMIN = 0 + META(1)%VMAX = 360 +! IFI=2, IFJ=10 + META => GROUP(2)%FIELD(10)%META + META(1)%FSC = 0.0002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.hig' + META(1)%VARNM='hig' + META(1)%VARNL='infragravity_wave_height' + META(1)%VARNS='sea_surface_wave_infragravity_significant_height' + META(1)%VARNG='infragravity_significant_wave_height' + META(1)%VMIN = 0 + META(1)%VMAX = 1.0 +! IFI=2, IFJ=11 + META => GROUP(2)%FIELD(11)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.mxe' + META(1)%VARNM='stmaxe' + META(1)%VARNL='expected maximum sea surface elevation (nonlinear,2nd order)' + META(1)%VARNS='expected maximum sea surface elevation (nonlinear,2nd order)' + META(1)%VARNG='expected maximum sea surface elevation (nonlinear,2nd order)' + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! IFI=2, IFJ=12 + META => GROUP(2)%FIELD(12)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.mxes' + META(1)%VARNM='stmaxd' + META(1)%VARNL='standard deviation of maximum sea surface elevation (nonlinear,2nd order)' + META(1)%VARNS='std of expected maximum sea surface elevation (nonlinear,2nd order)' + META(1)%VARNG='standard deviation of maximum sea surface elevation (nonlinear,2nd order)' + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! IFI=2, IFJ=13 + META => GROUP(2)%FIELD(13)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.mxh' + META(1)%VARNM='hmaxe' + META(1)%VARNL='expected maximum wave height (linear, 1st order)' + META(1)%VARNS='expected maximum wave height (linear, 1st order)' + META(1)%VARNG='expected maximum wave height (linear, 1st order)' + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! IFI=2, IFJ=14 + META => GROUP(2)%FIELD(14)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.mxhc' + META(1)%VARNM='hcmaxe' + META(1)%VARNL='expected maximum wave height from crest (linear, 1st order)' + META(1)%VARNS='expected maximum wave height from crest (linear, 1st order)' + META(1)%VARNG='expected maximum wave height from crest (linear, 1st order)' + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! IFI=2, IFJ=15 + META => GROUP(2)%FIELD(15)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.sdmh' + META(1)%VARNM='hmaxd' + META(1)%VARNL='STD of maximum wave height (linear, 1st order)' + META(1)%VARNS='STD of maximum wave height (linear, 1st order)' + META(1)%VARNG='STD of maximum wave height (linear, 1st order)' + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! IFI=2, IFJ=16 + META => GROUP(2)%FIELD(16)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.sdmhc' + META(1)%VARNM='hcmaxd' + META(1)%VARNL='STD of maximum wave height from crest (linear, 1st order)' + META(1)%VARNS='STD of maximum wave height from crest (linear, 1st order)' + META(1)%VARNG='STD of maximum wave height from crest (linear, 1st order)' + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! IFI=2, IFJ=17 + META => GROUP(2)%FIELD(17)%META + META(1)%FSC = 0.001 + META(1)%UNITS = '1' + META(1)%ENAME = '.wbt' + META(1)%VARNM='wbt' + META(1)%VARNL='dominant wave breaking probability' + META(1)%VARNS='dominant_wave_breaking_probability' + META(1)%VARNG='dominant_wave_breaking_probability' + META(1)%VMIN = 0 + META(1)%VMAX = 1 +! +!---------- GROUP 3 ---------------- +! +! IFI=3, IFJ=1 + META => GROUP(3)%FIELD(1)%META + META(1)%VARNM='ef' + META(1)%VARNL='wave_elevation_spectrum' + IF (NCVARTYPE.LE.3) THEN + META(1)%UNITS = 'log10(m2 s+1E-12)' + META(1)%VARNS='base_ten_logarithm_of_power_spectral_density_of_surface_elevation' + META(1)%FSC = 0.0004 + ELSE + META(1)%UNITS = 'm2 s' + META(1)%VARNS='power_spectral_density_of_surface_elevation' + META(1)%FSC = 1. + END IF + META(1)%ENAME = '.ef' + META(1)%VARNG = META(1)%VARNS + META(1)%VMIN = -12 + META(1)%VMAX = -12.8 +! IFI=3, IFJ=2 + META => GROUP(3)%FIELD(2)%META + ! Information for spectral + META(1)%FSC = 0.1 + META(1)%VARNM='th1m' + META(1)%VARNL='mean wave direction frequency spectrum' + META(1)%VARNS='sea_surface_wave_from_direction_frequency_spectrum' + META(1)%VARNG = META(1)%VARNS + META(1)%VARND=DIRCOM + META(1)%UNITS = 'degree' + META(1)%ENAME = '.th1m' + META(1)%VMIN = 0 + META(1)%VMAX = 360 +! IFI=3, IFJ=3 + META => GROUP(3)%FIELD(3)%META + ! Information for spectral + META(1)%FSC = 0.01 + META(1)%VARNM='sth1m' + META(1)%VARNL='spreading frequency spectrum' + META(1)%VARNS='sea_surface_wave_spreading_spectrum' + META(1)%VARNG = META(1)%VARNS + META(1)%UNITS = 'degree' + META(1)%ENAME = '.sth1m' + META(1)%VMIN = 0 + META(1)%VMAX = 90 +! IFI=3, IFJ=4 + META => GROUP(3)%FIELD(4)%META + META(1)%FSC = 0.1 + META(1)%VARNM='th2m' + META(1)%VARNL='second mean wave direction frequency spectrum' + META(1)%VARNS='sea_surface_wave_from_direction_frequency_spectrum_from_second_moments' + META(1)%VARNG = META(1)%VARNS + META(1)%VARND=DIRCOM + META(1)%UNITS = 'degree' + META(1)%ENAME = '.th2m' + META(1)%VMIN = 0 + META(1)%VMAX = 360 +! IFI=3, IFJ=5 + META => GROUP(3)%FIELD(5)%META + META(1)%FSC = 0.01 + META(1)%VARNM='sth2m' + META(1)%VARNL='second spreading frequency spectrum' + META(1)%VARNS='sea_surface_wave_spreading_spectrum_from_second_moments' + META(1)%VARNG = META(1)%VARNS + META(1)%UNITS = 'degree' + META(1)%ENAME = '.sth2m' + META(1)%VMIN = 0 + META(1)%VMAX = 90 +! IFI=3, IFJ=6 + META => GROUP(3)%FIELD(6)%META + ! Information for spectral + META(1)%FSC = 0.001 + META(1)%UNITS = 'm-1' + META(1)%ENAME = '.wn' + META(1)%VARNM='wn' + META(1)%VARNL='wave numbers' + META(1)%VARNS='wave_numbers' + META(1)%VARNG='wave_numbers' + META(1)%VMIN = 0 + META(1)%VMAX = 32 +! +!---------- GROUP 4 ---------------- +! +! IFI=4, IFJ=1 + META => GROUP(4)%FIELD(1)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.phs' + META(1)%VARNM = 'phs' + META(1)%VARNL = 'wave significant height partition ' + META(1)%VARNS = 'sea_surface_wave_significant_height_partition_' + META(1)%VARNG = 'significant_wave_height_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! IFI=4, IFJ=2 + META => GROUP(4)%FIELD(2)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 's' + META(1)%ENAME = '.ptp' + META(1)%VARNM = 'ptp' + META(1)%VARNL = 'peak period partition ' + META(1)%VARNS = 'sea_surface_wave_period_at_variance_spectral' // & + '_density_maximum_partition_' + META(1)%VARNG = 'dominant_wave_period_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 100 +! IFI=4, IFJ=3 + META => GROUP(4)%FIELD(3)%META + META(1)%FSC = 1. + META(1)%UNITS = 'm' + META(1)%ENAME = '.plp' + META(1)%VARNM = 'plp' + META(1)%VARNL = 'peak wave length partition ' + META(1)%VARNS = 'peak_wave_length_partition_' + META(1)%VARNG = 'peak_wave_length_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 10000 +! IFI=4, IFJ=4 + META => GROUP(4)%FIELD(4)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'degree' + META(1)%ENAME = '.pdir' + META(1)%VARNM = 'pdir' + META(1)%VARNL = 'wave mean direction partition ' + META(1)%VARNS = 'sea_surface_wave_from_direction_partition_' + META(1)%VARNG = 'wave_from_direction_partition_' + META(1)%VARNC = PARTCOM + META(1)%VARND = DIRCOM + META(1)%VMIN = 0 + META(1)%VMAX = 360 +! IFI=4, IFJ=5 + META => GROUP(4)%FIELD(5)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'degree' + META(1)%ENAME = '.pspr' + META(1)%VARNM = 'pspr' + META(1)%VARNL = 'directional spread partition ' + META(1)%VARNS = 'sea_surface_wave_directional_spread_partition_' + META(1)%VARNG = 'directional_spread_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 90 +! IFI=4, IFJ=6 + META => GROUP(4)%FIELD(6)%META + META(1)%FSC = 0.001 + META(1)%UNITS = '1' + META(1)%ENAME = '.pws' + META(1)%VARNM = 'pws' + META(1)%VARNL = 'wind sea fraction in partition ' + META(1)%VARNS = 'wind_sea_fraction_in_partition_' + META(1)%VARNG = 'wind_sea_fraction_in_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 1 +! IFI=4, IFJ=7 + META => GROUP(4)%FIELD(7)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'degree' + META(1)%ENAME = '.pdp' + META(1)%VARNM = 'pdp' + META(1)%VARNL = 'peak direction partition ' + META(1)%VARNS = 'sea_surface_wave_peak_from_direction_partition_' + META(1)%VARNG = 'dominant_wave_from_direction_partition_' + META(1)%VARNC = PARTCOM + META(1)%VARND = DIRCOM + META(1)%VMIN = 0 + META(1)%VMAX = 360 +! IFI=4, IFJ=8 + META => GROUP(4)%FIELD(8)%META + META(1)%FSC = 0.01 + META(1)%UNITS = '1' + META(1)%ENAME = '.pqp' + META(1)%VARNM = 'pqp' + META(1)%VARNL = 'peakedness partition ' + META(1)%VARNS = 'sea_surface_wave_peakedness_partition_' + META(1)%VARNG = 'wave_peakedness_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 320 +! IFI=4, IFJ=9 + META => GROUP(4)%FIELD(9)%META + META(1)%FSC = 0.01 + META(1)%UNITS = '1' + META(1)%ENAME = '.ppe' + META(1)%VARNM = 'ppe' + META(1)%VARNL = 'peak enhancement factor partition ' + META(1)%VARNS = 'wave_peak_enhancement_factor_partition_' + META(1)%VARNG = 'wave_peak_enhancement_factor_partition_' + META(1)%VARNC = 'JONSWAP peak enhancement factor; ' // PARTCOM + META(1)%VARND = '' + META(1)%VMIN = 0 + META(1)%VMAX = 320 +! IFI=4, IFJ=10 + META => GROUP(4)%FIELD(10)%META + META(1)%FSC = 0.0001 + META(1)%UNITS = 's-1' + META(1)%ENAME = '.pgw' + META(1)%VARNM = 'pgw' + META(1)%VARNL = 'frequency width partition ' + META(1)%VARNS = 'Gaussian_frequency_spread_partition_' + META(1)%VARNG = 'Gaussian_frequency_spread_partition_' + META(1)%VARNC = 'Gaussian least-square fit to ' // & + 'omni-directional spectral partition; ' // PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 3.2 +! IFI=4, IFJ=11 + META => GROUP(4)%FIELD(11)%META + META(1)%FSC = 0.0001 + META(1)%UNITS = '1' + META(1)%ENAME = '.psw' + META(1)%VARNM = 'psw' + META(1)%VARNL = 'spectral width partition ' + META(1)%VARNS = 'sea_surface_wave_spectral_width_partition_' + META(1)%VARNG = 'wave_spectral_width_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 3.2 +! IFI=4, IFJ=12 + META => GROUP(4)%FIELD(12)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 's' + META(1)%ENAME = '.ptm10c' + META(1)%VARNM = 'ptm10c' + META(1)%VARNL = 'mean period Tm10 partition ' + META(1)%VARNS = 'sea_surface_wave_mean_period_tm10_partition_' + META(1)%VARNG = 'mean_wave_period_Tm10_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 100 +! IFI=4, IFJ=13 + META => GROUP(4)%FIELD(13)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 's' + META(1)%ENAME = '.pt01c' + META(1)%VARNM = 'pt01c' + META(1)%VARNL = 'mean period T01 partition ' + META(1)%VARNS = 'sea_surface_wave_mean_period_t01_partition_' + META(1)%VARNG = 'mean_wave_period_T01_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 100 +! IFI=4, IFJ=14 + META => GROUP(4)%FIELD(14)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 's' + META(1)%ENAME = '.pt02c' + META(1)%VARNM = 'pt02c' + META(1)%VARNL = 'mean period T02 partition ' + META(1)%VARNS = 'sea_surface_wave_mean_period_t02_partition_' + META(1)%VARNG = 'mean_wave_period_T02_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 100 +! IFI=4, IFJ=15 + META => GROUP(4)%FIELD(15)%META + META(1)%FSC = 0.02 + META(1)%UNITS = 'm2 s rad-1' + META(1)%ENAME = '.pep' + META(1)%VARNM = 'pep' + META(1)%VARNL = 'energy at peak frequency partition ' + META(1)%VARNS = 'sea_surface_wave_energy_at_variance_spectral_density_maximum_partition_' + META(1)%VARNG = 'wave_energy_at_variance_spectral_density_maximum_partition_' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 200 +! IFI=4, IFJ=16 + META => GROUP(4)%FIELD(16)%META + META(1)%FSC = 0.001 + META(1)%UNITS = '1' + META(1)%ENAME = '.tws' + META(1)%VARNM = 'tws' + META(1)%VARNL = 'wind sea fraction' + META(1)%VARNS = 'wind_sea_fraction' + META(1)%VARNG = 'wind_sea_fraction' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 1 +! IFI=4, IFJ=17 + META => GROUP(4)%FIELD(17)%META + META(1)%FSC = 1. + META(1)%UNITS = '1' + META(1)%ENAME = '.pnr' + META(1)%VARNM = 'pnr' + META(1)%VARNL = 'number of wave partitions' + META(1)%VARNS = 'number_of_wave_partitions' + META(1)%VARNG = 'number_of_wave_partitions' + META(1)%VARNC = PARTCOM + META(1)%VMIN = 0 + META(1)%VMAX = 100 +! +!---------- GROUP 5 ---------------- +! +! IFI=5, IFJ=1 + META => GROUP(5)%FIELD(1)%META + ! First component + META(1)%FSC = 0.01 + META(1)%ENAME = '.ust' + META(1)%UNITS = 'm s-1' + META(1)%VARNM='uust' + META(1)%VARNL='eastward friction velocity' + META(1)%VARNS='eastward_friction_velocity' + META(1)%VARNG='eastward_friction_velocity' + META(1)%VARNC='ust=sqrt(uust**2+vust**2)' + META(1)%VARND=DIRCOM + META(1)%VMIN = -99.0 + META(1)%VMAX = 99.0 + + ! Second component + META(2) = META(1) + META(2)%VARNM='vust' + META(2)%VARNL='northward friction velocity' + META(2)%VARNS='northward_friction_velocity' + META(2)%VARNG='northward_friction_velocity' +! IFI=5, IFJ=2 + META => GROUP(5)%FIELD(2)%META + META(1)%FSC = 1.E-5 + META(1)%UNITS = '1' + META(1)%ENAME = '.cha' + META(1)%VARNM='cha' + META(1)%VARNL='charnock coefficient for surface roughness length for momentum in air' + META(1)%VARNS='charnock_coefficient_for_surface_roughness_length_for_momentum_in_air' + META(1)%VARNG='charnock_coefficient' + META(1)%VMIN = 0 + META(1)%VMAX = 0.327 +! IFI=5, IFJ=3 + META => GROUP(5)%FIELD(3)%META + META(1)%FSC = 0.1 !0.01 + META(1)%UNITS = 'kW m-1' + META(1)%ENAME = '.cge' + META(1)%VARNM='cge' + META(1)%VARNL='wave energy flux' + META(1)%VARNS='sea_surface_wind_wave_energy_flux' + META(1)%VARNG='wave_energy_flux' + META(1)%VMIN = 0 + META(1)%VMAX = 999 +! IFI=5, IFJ=4 + META => GROUP(5)%FIELD(4)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'W m-2' + META(1)%ENAME = '.faw' + META(1)%VARNM='faw' + META(1)%VARNL='wind to wave energy flux' + META(1)%VARNS='wind_mixing_energy_flux_into_sea_water' + META(1)%VARNG='wind_to_wave_energy_flux' + META(1)%VMIN = 0 + META(1)%VMAX = 999 +! IFI=5, IFJ=5 + META => GROUP(5)%FIELD(5)%META + ! First component + META(1)%FSC = 0.000001 + META(1)%UNITS = 'm2 s-2' + META(1)%ENAME = '.taw' + META(1)%VARNM='utaw' + META(1)%VARNL='eastward wave supported wind stress' + META(1)%VARNS='eastward_wave_supported_wind_stress' + META(1)%VARNC='taw=sqrt(utaw**2+vtaw**2)' + META(1)%VARNG='eastward_wave_supported_wind_stress' + META(1)%VARND=DIRCOM + META(1)%VMIN = -0.032 + META(1)%VMAX = 0.032 + + ! Second component + META(2) = META(1) + META(2)%VARNM='vtaw' + META(2)%VARNL='northward wave supported wind stress' + META(2)%VARNS='northward_wave_supported_wind_stress' + META(2)%VARNG='northward_wave_supported_wind_stress' + META(2)%VARNC='taw=sqrt(utaw**2+vtaw**2)' +! IFI=5, IFJ=6 + META => GROUP(5)%FIELD(6)%META + ! First component + META(1)%FSC = 0.0001 + META(1)%ENAME = '.twa' + META(1)%UNITS = 'm2 s-2' + META(1)%VARNM='utwa' + META(1)%VARNL='eastward wave to wind stress' + META(1)%VARNS='eastward_wave_to_wind_stress' + META(1)%VARNG='eastward_wave_to_wind_stress' + META(1)%VARNC='twa=sqrt(utwa**2+vtwa**2)' + META(1)%VARND=DIRCOM + META(1)%VMIN = -3.2 + META(1)%VMAX = 3.2 + + ! Second component + META(2) = META(1) + META(2)%VARNM='vtwa' + META(2)%VARNL='northward wave to wind stress' + META(2)%VARNS='northward_wave_to_wind_stress' + META(2)%VARNG='northward_wave_to_wind_stress' + META(2)%VARNC='twa=sqrt(utwa**2+vtwa**2)' +! IFI=5, IFJ=7 + META => GROUP(5)%FIELD(7)%META + META(1)%FSC = 0.0001 + META(1)%UNITS = '1' + META(1)%ENAME = '.wcc' + META(1)%VARNM='wcc' + META(1)%VARNL='whitecap coverage' + META(1)%VARNS='whitecap_coverage' + META(1)%VARNG='whitecap_coverage' + META(1)%VARNC='' + META(1)%VARND='' + META(1)%VMIN = 0 + META(1)%VMAX = 1 +! IFI=5, IFJ=8 + META => GROUP(5)%FIELD(8)%META + META(1)%FSC = 0.001 + META(1)%UNITS = 'm' + META(1)%ENAME = '.wcf' + META(1)%VARNM='wcf' + META(1)%VARNL='whitecap foam thickness' + META(1)%VARNS='whitecap_foam_thickness' + META(1)%VARNG='whitecap_foam_thickness' + META(1)%VMIN = 0 + META(1)%VMAX = 10 +! IFI=5, IFJ=9 + META => GROUP(5)%FIELD(9)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 'm' + META(1)%ENAME = '.wch' + META(1)%VARNM='wch' + META(1)%VARNL='significant breaking wave height' + META(1)%VARNS='significant_breaking_wave_height' + META(1)%VARNG='significant_breaking_wave_height' + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! IFI=5, IFJ=10 + META => GROUP(5)%FIELD(10)%META + META(1)%FSC = 0.0001 + META(1)%UNITS = '1' + META(1)%ENAME = '.wcm' + META(1)%VARNM='wcm' + META(1)%VARNL='whitecap moment' + META(1)%VARNS='whitecap_moment' + META(1)%VARNG='whitecap_moment' + META(1)%VMIN = 0 + META(1)%VMAX = 1 +! IFI=5, IFJ=11 + META => GROUP(5)%FIELD(11)%META + META(1)%FSC = 0.002 + META(1)%UNITS = 's' + META(1)%ENAME = '.fws' + META(1)%VARNM='fws' + META(1)%VARNL='Wind_sea_mean_period_T0M1' + META(1)%VARNS='Wind_sea_mean_period_T0M1' + META(1)%VARNG='Wind_sea_mean_period_T0M1' + META(1)%VARNC='' + META(1)%VARND='' + META(1)%VMIN = 0 + META(1)%VMAX = 64 +! +!---------- GROUP 6 ---------------- +! +! IFI=6, IFJ=1 + META => GROUP(6)%FIELD(1)%META + META(1)%FSC = 10. + META(1)%UNITS = 'N m-1' + META(1)%ENAME = '.sxy' + META(1)%VARND = DIRCOM + META(1)%VMIN = -30000 + META(1)%VMAX = 30000 + + ! First component + META(1)%VARNM='sxx' + META(1)%VARNL='Radiation stress component Sxx' + META(1)%VARNS='Radiation_stress_component_Sxx' + META(1)%VARNS='radiation_stress_component_sxx' + + ! S6cond component + META(2) = META(1) + META(2)%VARNM='syy' + META(2)%VARNL='Radiation stress component Syy' + META(2)%VARNS='Radiation_stress_component_Syy' + META(2)%VARNS='radiation_stress_component_syy' + + ! Third component + META(3) = META(1) + META(3)%FSC = 1. + META(3)%VARNM='sxy' + META(3)%VARNL='Radiation stress component Sxy' + META(3)%VARNS='Radiation_stress_component_Sxy' + META(3)%VARNS='radiation_stress_component_sxy' +! IFI=6, IFJ=2 + META => GROUP(6)%FIELD(2)%META + META(1)%FSC = 0.000001 + META(1)%UNITS = 'm2 s-2' + META(1)%ENAME = '.two' + META(1)%VMIN = -0.032 + META(1)%VMAX = 0.032 + META(1)%VARND = DIRCOM + + ! First component + META(1)%VARNM='utwo' + META(1)%VARNL='eastward wave to ocean stress' + META(1)%VARNS='eastward_wave_to_ocean_stress' + META(1)%VARNG='eastward_wave_to_ocean_stress' + META(1)%VARNC='two=sqrt(utwo**2+vtwo**2)' + + ! Second component + META(2) = META(1) + META(2)%VARNM='vtwo' + META(2)%VARNL='northward wave to ocean stress' + META(2)%VARNS='northward_wave_to_ocean_stress' + META(2)%VARNG='northward_wave_to_ocean_stress' + META(2)%VARNC='two=sqrt(utwo**2+vtwo**2)' +! IFI=6, IFJ=3 + META => GROUP(6)%FIELD(3)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'm2 s-2' + META(1)%ENAME = '.bhd' + META(1)%VARNM='bhd' + META(1)%VARNL='radiation pressure (Bernouilli Head)' + META(1)%VARNS='radiation_pressure' + META(1)%VARNG='radiation_pressure' + META(1)%VMIN = 0 + META(1)%VMAX = 100 +! IFI=6, IFJ=4 + META => GROUP(6)%FIELD(4)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'W m-2' + META(1)%ENAME = '.foc' + META(1)%VARNM='foc' + META(1)%VARNL='wave to ocean energy flux' + META(1)%VARNS='wave_to_ocean_energy_flux' + META(1)%VARNG='wave_to_ocean_energy_flux' + META(1)%VMIN = 0 + META(1)%VMAX = 999 +! IFI=6, IFJ=5 + META => GROUP(6)%FIELD(5)%META + META(1)%FSC = 0.001 + META(1)%UNITS = 'm2 s-1' + META(1)%ENAME = '.tus' + META(1)%VARND = DIRCOM + META(1)%VMIN = -9.9 + !TODO WHERE IS VMAX? + + ! First component + META(1)%VARNM='utus' + META(1)%VARNL='eastward stokes transport' + META(1)%VARNS='eastward_stokes_transport' + META(1)%VARNG='eastward_stokes_transport' + META(1)%VARNC='tus=sqrt(utus**2+vtus**2)' + + ! Second component + META(2) = META(1) + META(2)%VARNM='vtus' + META(2)%VARNL='northward stokes transport' + META(2)%VARNS='northward_stokes_transport' + META(2)%VARNG='northward_stokes_transport' + META(2)%VARNC='tus=sqrt(utus**2+vtus**2)' + +! IFI=6, IFJ=6 + META => GROUP(6)%FIELD(6)%META + META(1)%FSC = 0.0005 + META(1)%UNITS = 'm s-1' + META(1)%ENAME = '.uss' + + ! First component + META(1)%VARNM='uuss' + META(1)%VARNL='eastward surface stokes drift' + META(1)%VARNS='eastward_surface_stokes_drift' + META(1)%VARNG='eastward_surface_stokes_drift' + META(1)%VARNC='uss=sqrt(uuss**2+vuss**2)' + META(1)%VARND=DIRCOM + META(1)%VMIN = -4.95 + META(1)%VMAX = 4.95 + + ! Second component + META(2) = META(1) + META(2)%VARNM='vuss' + META(2)%VARNL='northward surface stokes drift' + META(2)%VARNS='northward_surface_stokes_drift' + META(2)%VARNG='northward_surface_stokes_drift' + WRITE(META(2)%VARNC,'(A,F8.4,A,F8.4,A)') 'Frequency range ',SIG(1)*TPIINV,' to ',SIG(NK)*TPIINV,' Hz' +! IFI=6, IFJ=7 + META => GROUP(6)%FIELD(7)%META + META(1)%FSC = 0.01 + META(1)%ENAME = '.p2s' + META(1)%UNITS = 'm4' + META(1)%VMIN = -150 + META(1)%VMAX = 320 + + ! First component + META(1)%VARNL='power spectral density of equivalent surface pressure' + META(1)%VARNS='power_spectral_density_of_equivalent_surface_pressure' + META(1)%VARNG='power_spectral_density_of_equivalent_surface_pressure' + META(1)%VARNM='fp2s' + + ! Second component + META(2) = META(1) + META(2)%VARNM='pp2s' + META(2)%UNITS= 's-1' + META(2)%VARNL='peak period of power spectral density of equivalent surface pressure' + META(2)%VARNS='peak_period_of_power_spectral_density_of_equivalent_surface_pressure' + META(2)%VARNG='peak_period_of_power_spectral_density_of_equivalent_surface_pressure' + +! IFI=6, IFJ=8 + META => GROUP(6)%FIELD(8)%META + META(1)%UNITS = 'm s-1 Hz-1' + META(1)%FSC = 0.0005 + META(1)%ENAME = '.usf' + META(1)%VMIN = -4.95 + META(1)%VMAX = 4.95 + META(1)%VARND = DIRCOM + + ! First component + META(1)%VARNM='uusf' + META(1)%VARNL='eastward spectral variance of surface stokes drift' + META(1)%VARNS='eastward_spectral_variance_of_surface_stokes_drift' + META(1)%VARNC='usf=sqrt(uusf**2+vusf**2)' + META(1)%VARNG='eastward_spectral_variance_of_surface_stokes_drift' + + ! Second component + META(2) = META(1) + META(2)%VARNM='vusf' + META(2)%VARNL='northward spectral variance of surface stokes drift' + META(2)%VARNS='northward_spectral_variance_of_surface_stokes_drift' + META(2)%VARNG='northward_spectral_variance_of_surface_stokes_drift' + META(2)%VARNC='usf=sqrt(uusf**2+vusf**2)' +! IFI=6, IFJ=9 + META => GROUP(6)%FIELD(9)%META + ! Information for spectral microseismic generation data (2nd file) + META(1)%FSC = 0.0004 + META(1)%VARNM='p2l' + META(1)%VARNL='base ten logarithm of power spectral density of equivalent surface pressure' + META(1)%VARNS='base_ten_logarithm_of_power_spectral_density_of_equivalent_surface_pressure' + META(1)%VARNG='base_ten_logarithm_of_power_spectral_density_of_equivalent_surface_pressure' + IF (NCVARTYPE.EQ.2) THEN + META(1)%UNITS='log10(Pa2 m2 s+1E-12)' + ELSE + META(1)%UNITS='Pa2 m2 s' + ENDIF + META(1)%VARNC='' + META(1)%VARND='' + META(1)%ENAME='.p2l' + META(1)%VMIN = -12 + META(1)%VMAX = 12 +! IFI=6, IFJ=10 + META => GROUP(6)%FIELD(10)%META + META(1)%FSC = 0.000001 + META(1)%UNITS = 'm2 s-2' + META(1)%ENAME = '.tic' + META(1)%VMIN = -0.032 + META(1)%VMAX = 0.032 + META(1)%VARND = DIRCOM + + ! First component + META(1)%VARNL='eastward wave to sea ice stress' + META(1)%VARNM='utic' + META(1)%VARNS='eastward_wave_to_sea_ice_stress' + META(1)%VARNG='eastward_wave_to_sea_ice_stress' + META(1)%VARNC='two=sqrt(utwo**2+vtwo**2)' + ! Second component + META(2) = META(1) + META(2)%VARNM='vtic' + META(2)%VARNL='northward wave to sea ice stress' + META(2)%VARNS='northward_wave_to_sea_ice_stress' + META(2)%VARNG='northward_wave_to_sea_ice_stress' + META(2)%VARNC='two=sqrt(utwo**2+vtwo**2)' +! IFI=6, IFJ=11 + META => GROUP(6)%FIELD(11)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'W m-2' + META(1)%ENAME = '.fic' + META(1)%VARNM='fic' + META(1)%VARNL='wave to sea ice energy flux' + META(1)%VARNS='wave_to_sea_ice_energy_flux' + META(1)%VARNG='wave_to_sea_ice_energy_flux' + META(1)%VMIN = 0 + META(1)%VMAX = 999 +! IFI=6, IFJ=12 + META => GROUP(6)%FIELD(12)%META + META(1)%UNITS = 'm s-1' + META(1)%FSC = 0.0005 + META(1)%ENAME = '.usp' + META(1)%VARND = DIRCOM + + ! First component + META(1)%VARNM='ussp' + META(1)%VARNL='eastward partitioned surface stokes drift' + META(1)%VARNS='eastward_partitioned_surface_stokes_drift' + META(1)%VARNG='eastward_partitioned_surface_stokes_drift' + META(1)%VARNC='usp=sqrt(ussp**2+vssp**2)' + + ! Second component + META(2) = META(1) + META(2)%VARNM='vssp' + META(2)%VARNL='northward partitioned surface stokes drift' + META(2)%VARNS='northward_partitioned_surface_stokes_drift' + META(2)%VARNG='northward_partitioned_surface_stokes_drift' + META(2)%VARNC='usp=sqrt(ussp**2+vssp**2)' +! +!---------- GROUP 7 ---------------- +! +! IFI=7, IFJ=1 + META => GROUP(7)%FIELD(1)%META + META(1)%FSC = 0.01 + META(1)%ENAME = '.abr' + META(1)%UNITS = 'm' + META(1)%VMIN = -180 + META(1)%VMAX = 180 + META(1)%VARND = DIRCOM + + ! First component + META(1)%VARNM='uabr' + META(1)%VARNL='rms of bottom displacement amplitude zonal' + META(1)%VARNS='rms_of_bottom_displacement_amplitude_zonal' + META(1)%VARNG='rms_of_bottom_displacement_amplitude_zonal' + META(1)%VARNC='abr=sqrt(uabr**2+vabr**2)' + + ! Second component + META(2) = META(1) + META(2)%VARNM='vabr' + META(2)%VARNL='rms of bottom displacement amplitude meridional' + META(2)%VARNS='rms_of_bottom_displacement_amplitude_meridional' + META(2)%VARNG='rms_of_bottom_displacement_amplitude_meridional' + META(2)%VARNC='abr=sqrt(uabr**2+vabr**2)' +! IFI=7, IFJ=2 + META => GROUP(7)%FIELD(2)%META + META(1)%FSC = 0.01 + META(1)%ENAME = '.ubr' + META(1)%UNITS = 'm s-1' + META(1)%VMIN = -180 + META(1)%VMAX = 180 + META(1)%VARND = DIRCOM + + ! First component + META(1)%VARNM='uubr' + META(1)%VARNL='rms of bottom velocity amplitude zonal' + META(1)%VARNS='rms_of_bottom_velocity_amplitude_zonal' + META(1)%VARNG='rms_of_bottom_velocity_amplitude_zonal' + META(1)%VARNC='ubr=sqrt(uubr**2+vubr**2)' + + ! Second component + META(2) = META(1) + META(2)%VARNM='vubr' + META(2)%VARNL='rms of bottom velocity amplitude meridional' + META(2)%VARNS='rms_of_bottom_velocity_amplitude_meridional' + META(2)%VARNG='rms_of_bottom_velocity_amplitude_meridional' +! IFI=7, IFJ=3 + META => GROUP(7)%FIELD(3)%META + META(1)%FSC = 0.001 + META(1)%UNITS = 'm' + META(1)%ENAME = '.bed' + META(1)%VMIN = 0 + META(1)%VMAX = 30 + META(1)%VARND = DIRCOM + + ! First component + META(1)%VARNM='bed' + META(1)%VARNL='bottom roughness' + META(1)%VARNS='sea bottom roughness length' + META(1)%VARNG='ripple_wavelength' + META(1)%VARNC='ripple_length=sqrt(ripplex**2+rippley**2)' + + ! Second component + META(2) = META(1) + META(2)%VARNM='ripplex' + META(2)%VARNL='eastward sea bottom ripple wavelength' + META(2)%VARNS='eastward_ripple_wavelength' + META(2)%VARNG='eastward_ripple_wavelength' + META(2)%VARNC='ripple_length=sqrt(ripplex**2+rippley**2)' + + ! Third component + META(3) = META(1) + META(3)%VARNM='rippley' + META(3)%VARNL='northward sea bottom ripple wavelength' + META(3)%VARNS='northward_ripple_wavelength' + META(3)%VARNG='northward_ripple_wavelength' + META(3)%VARNC='ripple_length=sqrt(ripplex**2+rippley**2)' +! IFI=7, IFJ=4 + META => GROUP(7)%FIELD(4)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'W m-2' + META(1)%ENAME = '.fbb' + META(1)%VARNM='fbb' + META(1)%VARNL='wave dissipation in bbl' + META(1)%VARNS='wave_energy_dissipation_in_bottom_boundary_layer' + META(1)%VARNG='wave_dissipation_in_bbl' + META(1)%VMIN = 0 + META(1)%VMAX = 999 +! IFI=7, IFJ=5 + META => GROUP(7)%FIELD(5)%META + META(1)%FSC = 0.000001 + META(1)%UNITS = 'm2 s-2' + META(1)%ENAME = '.tbb' + META(1)%VMIN = -0.032 + META(1)%VMAX = 0.032 + META(1)%VARND = DIRCOM + + ! First component + META(1)%VARNM='utbb' + META(1)%VARNL='eastward wave to bbl stress' + META(1)%VARNS='eastward_wave_to_bottom_boundary_layer_stress' + META(1)%VARNG='eastward_wave_to_bbl_stress' + META(1)%VARNC='tbb=sqrt(utbb**2+vtbb**2)' + + ! Second component + META(2) = META(1) + META(2)%VARNM='vtbb' + META(2)%VARNL='northward wave to bbl stress' + META(2)%VARNS='northward_wave_to_bottom_boundary_layer_stress' + META(2)%VARNG='northward_wave_to_bbl_stress' + META(2)%VARNC='tbb=sqrt(utbb**2+vtbb**2)' +! +!---------- GROUP 8 ---------------- +! IFI=8, IFJ=1 + META => GROUP(8)%FIELD(1)%META + META(1)%FSC = 0.00001 + META(1)%ENAME = '.mss' + META(1)%UNITS = '1' + META(1)%VMIN = 0 + META(1)%VMAX = 0.3 + META(1)%VARND = DIRCOM + WRITE(META(1)%VARNC,'(A,F8.4,A,F8.4,A)') 'Frequency range ',SIG(1)*TPIINV,' to ',SIG(NK)*TPIINV,' Hz' + + ! First component + META(1)%VARNM='mssu' + META(1)%VARNL='downwave mean square slope' + META(1)%VARNS='x_mean_square_slope' + META(1)%VARNG='x_mean_square_slope' + META(1)%VARNC='mss=mssu+mssc' + + ! Second component + META(2) = META(1) + META(2)%VARNM='mssc' + META(2)%VARNL='crosswave mean square slope' + META(2)%VARNS='y_mean_square_slope' + META(2)%VARNG='y_mean_square_slope' +! IFI=8, IFJ=2 + META => GROUP(8)%FIELD(2)%META + META(2)%FSC = 1E-7 + META(2)%ENAME = '.msc' + META(2)%UNITS = '1' + META(2)%VMIN = 0 + META(2)%VMAX = 0.003 + META(2)%VARND = DIRCOM + + ! First component + META(1)%VARNM='mscx' + META(1)%VARNL='eastward phillips constant' + META(1)%VARNS='eastward_phillips_constant' + META(1)%VARNG='eastward_phillips_constant' + META(1)%VARNC='msc=mscx+mscy' + + ! Second component + META(2) = META(1) + META(2)%VARNM='mscy' + META(2)%VARNL='northward phillips constant' + META(2)%VARNS='northward_phillips_constant' + META(2)%VARNG='northward_phillips_constant' + META(2)%VARNC='msc=mscx+mscy' +! IFI=8, IFJ=3 + META => GROUP(8)%FIELD(3)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'degree' + META(1)%ENAME = '.msd' + META(1)%VARNM='mssd' + META(1)%VARNL='u direction for mss' + META(1)%VARNS='sea_surface_wave_dominant_mean_square_slope_direction' + META(1)%VARNG='sea_surface_wave_dominant_mean_square_slope_direction' + WRITE(META(1)%VARNC,'(A,F8.4,A,F8.4,A)') 'Frequency range ',SIG(1)*TPIINV,' to ',SIG(NK)*TPIINV,' Hz' + META(1)%VARND = DIRCOM + META(1)%VMIN = 0 + META(1)%VMAX = 360 +! IFI=8, IFJ=4 + META => GROUP(8)%FIELD(4)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'degree' + META(1)%ENAME = '.mcd' + META(1)%VARNM='mscd' + META(1)%VARNL='x direction for msc' + META(1)%VARNS='sea_surface_wave_dominant_mean_square_slope_direction_in_highest_frequency' + META(1)%VARNG='sea_surface_wave_dominant_mean_square_slope_direction_in_highest_frequency' + META(1)%VARND = DIRCOM + META(1)%VMIN = 0 + META(1)%VMAX = 360 +! IFI=8, IFJ=5 + META => GROUP(8)%FIELD(5)%META + META(1)%FSC = 0.001 + META(1)%UNITS = '1' + META(1)%ENAME = '.qp' + META(1)%VARNM='qp' + META(1)%VARNL='peakedness' + META(1)%VARNS='sea_surface_wave_peakedness' + META(1)%VARNG='wave_peakedness' + META(1)%VARNC='Goda wave peakedness parameter' + META(1)%VMIN = 0 + META(1)%VMAX = 32 +! +!---------- GROUP 9 ---------------- +! +! IFI=9, IFJ=1 + META => GROUP(9)%FIELD(1)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'min.' + META(1)%ENAME = '.dtd' + META(1)%VARNM='dtd' + META(1)%VARNL='dynamic time step' + META(1)%VARNS='dynamic_time_step' + META(1)%VARNG='dynamic_time_step' + META(1)%VMIN = 0 + META(1)%VMAX = 3200 +! IFI=9, IFJ=2 + META => GROUP(9)%FIELD(2)%META + META(1)%FSC = 0.001 + META(1)%UNITS = 's-1' + META(1)%ENAME = '.fc' + META(1)%VARNM='fc' + META(1)%VARNL='cut off frequency' + META(1)%VARNS='cut_off_frequency' + META(1)%VARNG='cut_off_frequency' + META(1)%VMIN = 0 + META(1)%VMAX = 8 +! IFI=9, IFJ=3 + META => GROUP(9)%FIELD(3)%META + META(1)%FSC = 0.01 + META(1)%UNITS = '1' + META(1)%ENAME = '.cfx' + META(1)%VARNM='cfx' + META(1)%VARNL='maximum cfl for spatial advection' + META(1)%VARNS='maximum_cfl_for_spatial_advection' + META(1)%VARNG='maximum_cfl_for_spatial_advection' + META(1)%VMIN = 0 + META(1)%VMAX = 320 +! IFI=9, IFJ=4 + META => GROUP(9)%FIELD(4)%META + META(1)%FSC = 0.01 + META(1)%UNITS = '1' + META(1)%ENAME = '.cfd' + META(1)%VARNM='cfd' + META(1)%VARNL='maximum cfl for direction advection' + META(1)%VARNS='maximum_cfl_for_direction_advection' + META(1)%VARNG='maximum_cfl_for_direction_advection' + META(1)%VMIN = 0 + META(1)%VMAX = 320 +! IFI=9, IFJ=5 + META => GROUP(9)%FIELD(5)%META + META(1)%FSC = 0.01 + META(1)%UNITS = '1' + META(1)%ENAME = '.cfk' + META(1)%VARNM='cfk' + META(1)%VARNL='maximum cfl for frequency advection' + META(1)%VARNS='maximum_cfl_for_frequency_advection' + META(1)%VARNG='maximum_cfl_for_frequency_advection' + META(1)%VMIN = 0 + META(1)%VMAX = 320 +! +! ------ Group 10 (User defined) ------- +! +! IFI=10, IFJ=1 + META => GROUP(10)%FIELD(1)%META + META(1)%FSC = 0.1 + META(1)%UNITS = 'm' + META(1)%VMIN = 0 + META(1)%VMAX = 0 + WRITE (META(1)%ENAME,'(A2,I2.2)') '.u' + WRITE (META(1)%VARNM,'(A1,I2.2)') 'u' + WRITE (META(1)%VARNL,'(A12,I2.2)') 'User_defined' + WRITE (META(1)%VARNS,'(A12,I2.2)') 'User_defined' + WRITE (META(1)%VARNG,'(A12,I2.2)') 'user_defined' +! + END SUBROUTINE DEFAULT_META +!/ ------------------------------------------------------------------- / + + END MODULE W3OUNFMETAMD diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index e2ba66682..8958d6b91 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -1,4 +1,5 @@ #include "w3macros.h" +#define CHECK_ERR(I) CHECK_ERROR(I, __LINE__) !/ ------------------------------------------------------------------- / PROGRAM W3OUNF !/ @@ -35,6 +36,8 @@ !/ 18-Jun-2020 : Support for 360-day calendar. ( version 7.08 ) !/ 07-Oct-2019 : RTD option with standard lat-lon !/ grid when nesting to rotated grid ( version 7.11 ) +!/ 03-Nov-2020 : Moved NetCDF metadata to separate ( version 7.XX ) +!/ module. !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -139,6 +142,11 @@ UNDEF, FLOGRD, FNMPRE, NOSWLL, NOGE ! USE W3NMLOUNFMD +! + USE W3OUNFMETAMD, ONLY: INIT_META, TEARDOWN_META, GETMETA, & + WRITE_META, WRITE_GLOBAL_META, & + META_T, NCVARTYPE +! USE NETCDF !/SMC USE W3SMCOMD @@ -158,7 +166,7 @@ IOTEST, NOUT, & IFI, IFJ, NCTYPE, IX1, IXN, IY1, IYN, & IOUT, S3, IRET, HASNC4, & - NBIPART, CNTIPART, NCVARTYPE, IPART, & + NBIPART, CNTIPART, NCVARTYPEI, IPART, & RTDNX, RTDNY INTEGER :: TOUT(2), TDUM(2), STOPDATE(8) ! @@ -326,6 +334,8 @@ END IF ! .NOT. FLGNML + ! Keep track of original NCVARTYPE, as it may change + NCVARTYPEI = NCVARTYPE ! ! 4.1 Time setup @@ -458,6 +468,9 @@ VECTOR = .TRUE. ! +! 4.4 Initialise meta-data + CALL INIT_META() +! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 5. Time management. ! @@ -491,7 +504,7 @@ ! 5.1.2 Processes the variable value for the time step IOUT CALL W3EXNC ( NX, NY, IX1, IXN, IY1, IYN, NSEA, FILEPREFIX, & - E3DF, P2MSF, US3DF, USSPF, NCTYPE, TOGETHER, NCVARTYPE,& + E3DF, P2MSF, US3DF, USSPF, NCTYPE, TOGETHER, NCVARTYPEI,& FLG2D, NCIDS, S3, STRSTOPDATE ) ! 5.1.3 Defines the stop date @@ -503,6 +516,8 @@ IF ( IOUT .GE. NOUT ) EXIT END DO + CALL TEARDOWN_META() + ! 5.2 Closes the netCDF file IF (TOGETHER .AND. NCIDS(1,1,1).NE.0) THEN @@ -682,6 +697,8 @@ !/ 30-Apr-2014 : Correct group3 freq dim. ( version 5.00 ) !/ 23-May-2014 : Adding ice fluxes to W3SRCE ( version 5.01 ) !/ 14-Oct-2014 : Keep the output files opened ( version 5.01 ) +!/ 03-Nov-2020 : NetCDF metadata moved to separate ( version 7.XX ) +!/ module. !/ ! 1. Purpose : ! @@ -764,7 +781,7 @@ CHARACTER(30) :: FILEPREFIX LOGICAL, INTENT(IN) :: TOGETHER LOGICAL, INTENT(IN) :: FLG2D(NOGRP,NGRPP) - INTEGER, INTENT(INOUT) :: NCIDS(NOGRP,NGRPP,NOSWLL + 1), S3 + INTEGER, INTENT(INOUT) :: NCIDS(NOGRP,NGRPP,NOSWLL + 1), S3 CHARACTER*30,INTENT(IN) :: STRSTOPDATE !/ !/ ------------------------------------------------------------------- / @@ -773,9 +790,9 @@ INTEGER :: IFI, IFJ, MFILL, I, J, ISEA, IX, IY, & I1, J1, IPART, INDEXIPART, COORDTYPE INTEGER :: S1, S2, S4, S5, NCID, OLDNCID, & - MAPSTAOUT, NDSDAT, VMIN, VMAX, & + MAPSTAOUT, NDSDAT, & NFIELD, N, IRET, IK, EXTRADIM, IVAR, & - IVAR1, IDVAROUT, NCVARTYPE + IVAR1, IDVAROUT INTEGER :: DIMID(6), VARID(300), START(4), & COUNT(4), DIMLN(6),START1D(2), & COUNT1D(2), DIMFIELD(3), & @@ -790,7 +807,7 @@ INTEGER(KIND=2), ALLOCATABLE :: MX1(:,:), MXX(:,:), MYY(:,:), & MXY(:,:), MAPOUT(:,:) ! - REAL :: FSC, FSC3, CABS, UABS, MFILLR + REAL :: CABS, UABS, MFILLR !/BT4 REAL, PARAMETER :: LOG2=LOG(2.) ! REAL,DIMENSION(:), ALLOCATABLE :: LON, LAT, FREQ @@ -804,14 +821,14 @@ ! DOUBLE PRECISION :: OUTJULDAY DOUBLE PRECISION :: SXD, SYD, X0D, Y0D -! - CHARACTER*80 :: VARNM(8),VARNL(8) - CHARACTER*120 :: VARNS(8),VARNG(8), VARND(8), STR2 - CHARACTER*512 :: VARNC(8), PARTCOM - CHARACTER*30 :: UNITVAR(3),FORMAT1 +! + CHARACTER*120 :: STR2 + CHARACTER*512 :: PARTCOM + !CHARACTER*30 :: UNITVAR(3),FORMAT1 + CHARACTER*30 :: FORMAT1 CHARACTER*30 :: STRSTARTDATE CHARACTER :: FNAMENC*50, & - ENAME*10,FORMF*11, UNITS*24, UNITS2*24 + FORMF*11 CHARACTER, SAVE :: OLDTIMEID*16 = '0000000000000000' CHARACTER, SAVE :: TIMEID*16 = '0000000000000000' ! @@ -821,6 +838,9 @@ !/RTD ! RTDL == False for a standard lat-lon grid. Will be set to True if the !/RTD ! grid is rotated !/RTD LOGICAL :: RTDL = .FALSE. + + TYPE(META_T) :: META(3) + !TYPE(META_T) :: META !/ !/ ------------------------------------------------------------------- / !/ @@ -921,25 +941,7 @@ FNAMENC(1:S1)=FILEPREFIX(1:S1) FNAMENC(S1+1:S1+S4) = TIMEID(1:S4) - ! Create partitioning method comment string: - IF ( PTMETH .EQ. 1 ) THEN - PARTCOM = "Wind sea and swells defined using topographic " // & - "partitions and partition wave-age cut-off " // & - "(WWIII default scheme)" - ELSE IF ( PTMETH .EQ. 2 ) THEN - PARTCOM = "Wind sea and swells defined using topographic " // & - "partitions and spectral wave-age cut-off" - ELSE IF ( PTMETH .EQ. 3 ) THEN - PARTCOM = "Wave components defined using topographic " // & - "partitions only" - ELSE IF ( PTMETH .EQ. 4 ) THEN - PARTCOM = "Wind sea and swell defined using spectral wave-age cut-off" - ELSE IF ( PTMETH .EQ. 5 ) THEN - WRITE(PARTCOM, '("Wave components defined using ",F5.3,' // & - '"Hz spectral frequency cutoff")') PTFCUT - ELSE - WRITE(PARTCOM, '("PTM_",I1,"_Unknown")') PTMETH - ENDIF + ! !/SMC! !/SMC!--- Update MAPSMC for SMC type 2 output. This needs to be @@ -958,13 +960,12 @@ ! DO IFI=1, NOGRP DO IFJ=1, NGRPP - ENAME=' ' ! If the flag for the variable IFI of the group IFJ is .TRUE. IF ( FLG2D(IFI,IFJ) ) THEN ! Instanciates the partition array INDEXIPART=1 IPART=TABIPART(INDEXIPART) - VARNS(:)='' + NFIELD=1 ! Default is one field ! Loop over IPART for partition variables @@ -981,33 +982,19 @@ ! Initializes the flags for freq and direction dimensions FLFRQ = .FALSE. FLDIR = .FALSE. - UNITS2='SAME' IF (NCVARTYPEI.EQ.3) NCVARTYPE=2 ! + ! Depth IF ( IFI .EQ. 1 .AND. IFJ .EQ. 1 ) THEN - FSC = 0.5 - UNITS = 'm' - NFIELD = 1 - ENAME = '.dpt' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( DW(1:NSEA), X1 ) ELSE ! IF(SMCGRD) CALL W3S2XY ( NSEA, NSEA, NX+1, NY, DW(1:NSEA) & , MAPSF, X1 ) ENDIF - VARNM(1)='dpt' - VARNL(1)='depth' - VARNS(1)='depth' - VARNG(1)='depth' - VARNC(1)='' - VARND(1)='' - VMIN = -90000 - VMAX = 140000 -! + + ! Surface current ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 2 ) THEN - FSC = 0.01 - ENAME = '.cur' - UNITS = 'm s-1' !! Note - CX and CY read in from .ww3 file are X-Y vectors !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, CX(1:NSEA), CY(1:NSEA), AnglD) @@ -1020,51 +1007,10 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CY(1:NSEA) & , MAPSF, XY ) ENDIF - !! Commented out unnecessary statements below for time being - !! CX,CY are in north-east convention and X1,X2 - !! are not actually written out below - !DO ISEA=1, NSEA - ! CABS = SQRT(CX(ISEA)**2+CY(ISEA)**2) - ! IF ( CABS .GT. 0.05 ) THEN - ! CY(ISEA) = MOD ( 630. - & - ! RADE*ATAN2(CY(ISEA),CX(ISEA)) , 360. ) - ! ELSE - ! CY(ISEA) = UNDEF - ! END IF - ! CX(ISEA) = CABS - ! END DO - !CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CX(1:NSEA) & - ! , MAPSF, X1 ) - !CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CY(1:NSEA) & - ! , MAPSF, X2 ) NFIELD=2 - VARNM(1)='ucur' - VARNM(2)='vcur' - VARNL(1)='eastward current' - VARNL(2)='northward current' - VARNS(1)='eastward_sea_water_velocity' - VARNS(2)='northward_sea_water_velocity' - VARNG(1)='eastward_sea_water_velocity' - VARNG(2)='northward_sea_water_velocity' - VARNC(1)='cur=sqrt(U**2+V**2)' - VARNC(2)='cur=sqrt(U**2+V**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -990 - VMAX = 990 ! + ! Wind ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 3 ) THEN - FSC = 0.1 - ENAME = '.wnd' - UNITS = 'm s-1' !! Note - UA and UD read in from .ww3 file are UX,UY !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, UA(1:NSEA), UD(1:NSEA), AnglD) @@ -1078,307 +1024,111 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, UD(1:NSEA) & , MAPSF, XY ) ENDIF - !! Commented out unnecessary statements below for time being - !! UA,UD are in north-east convention and X1,X2 - !! are not actually written out below - !DO ISEA=1, NSEA - ! UABS = SQRT(UA(ISEA)**2+UD(ISEA)**2) - ! IF ( UABS .GT. 1.0 ) THEN - ! UD(ISEA) = MOD ( 630. - & - ! RADE*ATAN2(UD(ISEA),UA(ISEA)) , 360. ) - ! ELSE - ! UD(ISEA) = UNDEF - ! END IF - ! UA(ISEA) = UABS - !END DO - !CALL W3S2XY ( NSEA, NSEA, NX+1, NY, UA(1:NSEA) & - ! , MAPSF, X1 ) - !CALL W3S2XY ( NSEA, NSEA, NX+1, NY, UD(1:NSEA) & - ! , MAPSF, X2 ) NFIELD=2 - VARNM(1)='uwnd' - VARNM(2)='vwnd' - VARNL(1)='eastward_wind' - VARNL(2)='northward_wind' - VARNS(1)='eastward_wind' - VARNS(2)='northward_wind' - VARNG(1)='eastward_wind' - VARNG(2)='northward_wind' - VARNC(1)='wind=sqrt(U10**2+V10**2)' - VARNC(2)='wind=sqrt(U10**2+V10**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -990 - VMAX = 990 ! + ! Air-sea temperature difference ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 4 ) THEN - FSC = 0.1 - ENAME = '.ast' - UNITS = 'K' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC(AS(1:NSEA), X1) ELSE ! IF(SMCGRD) CALL W3S2XY ( NSEA, NSEA, NX+1, NY, AS(1:NSEA) & , MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='ast' - VARNL(1)='air sea temperature difference' - VARNS(1)='air_sea_temperature_difference' - VARNG(1)='air_sea_temperature_difference' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 4000 ! + ! Sea surface height above sea level ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 5 ) THEN - FSC = 0.01 - UNITS = 'm' - ENAME = '.wlv' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC(WLV, X1) ELSE ! IF(SMCGRD) CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WLV , MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='wlv' - VARNL(1)='sea surface height above sea level' - VARNS(1)='sea_surface_height_above_sea_level' - VARNG(1)='sea_surface_height_above_sea_level' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Sea ice area fraction ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 6 ) THEN - FSC = 0.001 - UNITS = '1' - ENAME = '.ice' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC(ICE, X1) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, ICE(1:NSEA), MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='ice' - VARNL(1)='sea ice area fraction' - VARNS(1)='sea_ice_area_fraction' - VARNG(1)='sea_ice_area_fraction' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 1000 -! + ! Icebergs_damping ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 7 ) THEN - FSC = 0.0001 - UNITS = 'km-1' - ENAME = '.ibg' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC(BERG, X1) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, BERG , MAPSF, X1 ) ENDIF WHERE ( X1.NE.UNDEF) X1 = X1*0.1 - NFIELD=1 - VARNM(1)='ibg' - VARNL(1)='icebergs_damping' - VARNS(1)='icebergs_induced_attenuation_scale_for_waves' - VARNG(1)='icebergs_damping' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! +!/BT4 ! Krumbein phi scale !/BT4 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 8 ) THEN -!/BT4 FSC = 0.001 -!/BT4 UNITS = 'Krumbein phi scale' -!/BT4 ENAME = '.d50' !/BT4 CALL W3S2XY ( NSEA, NSEA, NX+1, NY, SED_D50 , MAPSF, X1 ) !/BT4 WHERE ( X1.NE.UNDEF) X1 = -LOG(X1/0.001)/LOG2 !/BT4 NFIELD=1 -!/BT4 VARNM(1)='d50' -!/BT4 VARNL(1)='grain_size' -!/BT4 VARNS(1)='sediment_grain_size' -!/BT4 VARNG(1)='sediment_grain_size' -!/BT4 VARNC(1)='' -!/BT4 VARND(1)='' -!/BT4 VMIN = -10000 -!/BT4 VMAX = 32000 ! +!/IS2 ! Ice thickness !/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 9 ) THEN -!/IS2 FSC = 0.001 -!/IS2 UNITS = 'm' -!/IS2 ENAME = '.ic1' !/IS2 CALL W3S2XY (NSEA, NSEA, NX+1, NY, ICEH(1:NSEA), MAPSF, X1 ) !/IS2 NFIELD=1 -!/IS2 VARNM(1)='ic1' -!/IS2 VARNL(1)='ice thickness' -!/IS2 VARNS(1)='ice_thickness' -!/IS2 VARNG(1)='ice_thickness' -!/IS2 VARNC(1)='' -!/IS2 VARND(1)='' -!/IS2 VMIN = 0 -!/IS2 VMAX = 30000 -! ! +!/IS2 ! Maximum ice floe diameter !/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN -!/IS2 FSC = 0.05 -!/IS2 UNITS = 'm' -!/IS2 ENAME = '.ic5' !/IS2 CALL W3S2XY (NSEA, NSEA, NX+1, NY, ICEF(1:NSEA), MAPSF, X1 ) !/IS2 NFIELD=1 -!/IS2 VARNM(1)='ic5' -!/IS2 VARNL(1)='maximum floe diameter' -!/IS2 VARNS(1)='maximum_ice_floe_diameter' -!/IS2 VARNG(1)='maximum_ice_floe_diameter' -!/IS2 VARNC(1)='' -!/IS2 VARND(1)='' -!/IS2 VMIN = 0 -!/IS2 VMAX = 30000 + ! Significant wave height ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 1 ) THEN -! - NFIELD=1 IF (NCVARTYPEI.EQ.3) NCVARTYPE=2 - FSC = 0.002 - UNITS = 'm' - ENAME = '.hs' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( HS, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HS , MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='hs' - VARNL(1)='significant height of wind and swell waves' - VARNS(1)='sea_surface_wave_significant_height' - VARNG(1)='significant_wave_height' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 + ! Mean wave length ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 2 ) THEN - FSC = 1. - UNITS = 'm' - ENAME = '.lm' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC(WLM, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WLM, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='lm' - VARNL(1)='mean wave length' - VARNS(1)='mean_wave_length' - VARNG(1)='mean_wave_length' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 3200 ! + ! Mean period T02 ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 3 ) THEN - FSC = 0.01 - UNITS = 's' - ENAME = '.t02' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( T02, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, T02, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='t02' - VARNL(1)='mean period T02' - VARNS(1)='sea_surface_wind_wave_mean_period_from_variance_' // & - 'spectral_density_second_frequency_moment' - VARNG(1)='mean_period_t02' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 5000 ! + ! Mean period T0m1 ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 4 ) THEN - FSC = 0.01 - UNITS = 's' - ENAME = '.t0m1' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( T0M1, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, T0M1, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='t0m1' - VARNL(1)='mean period T0m1' - VARNS(1)='sea_surface_wind_wave_mean_period_from_variance' // & - '_spectral_density_inverse_frequency_moment' - VARNG(1)='mean_period_t0m1' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 5000 ! + ! Mean period T01 ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 5 ) THEN - FSC = 0.01 - UNITS = 's' - ENAME = '.t01' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( T01, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, T01 , MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='t01' - VARNL(1)='mean period T01' - VARNS(1)='sea_surface_wind_wave_mean_period_from_variance' // & - '_spectral_density_first_frequency_moment' - VARNG(1)='mean_period_t01' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 5000 ! + ! Wave peak frequency ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 6 ) THEN - FSC = 0.001 - UNITS = 's-1' - ENAME = '.fp' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC(FP0, X1) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, FP0 , MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='fp' - VARNL(1)='wave peak frequency' - VARNS(1)='sea_surface_wave_peak_frequency' - VARNG(1)='dominant_wave_frequency' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Wave mean direction ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 7 ) THEN - FSC = 0.1 - UNITS = 'degree' - ENAME = '.dir' !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, THM, AnglD, .FALSE.) - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( THM, X1, .TRUE. ) ELSE @@ -1389,49 +1139,19 @@ END DO CALL W3S2XY ( NSEA, NSEA, NX+1, NY, THM, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='dir' - VARNL(1)='wave mean direction' - VARNS(1)='sea_surface_wave_from_direction' - VARNG(1)='wave_from_direction' - VARNC(1)='' - VARND(1)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = 0 - VMAX = 3600 ! + ! Directional spread ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 8 ) THEN - FSC = 0.1 - UNITS = 'degree' - ENAME = '.spr' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( THS, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, THS , MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='spr' - VARNL(1)='directional spread' - VARNS(1)='sea_surface_wave_directional_spread' - VARNG(1)='directional_spread' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 900 ! + ! Peak direction ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 9 ) THEN - FSC = 1. - UNITS = 'degree' - ENAME = '.dp' !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, THP0, AnglD, .FALSE.) - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( THP0, X1, .TRUE. ) ELSE @@ -1442,196 +1162,75 @@ END DO CALL W3S2XY ( NSEA, NSEA, NX+1, NY, THP0 , MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='dp' - VARNL(1)='peak direction' - VARNS(1)='sea_surface_wave_peak_direction' - VARNG(1)='dominant_wave_direction' - VARNC(1)='' - VARND(1)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = 0 - VMAX = 360 ! + ! Infragravity wave height ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 10 ) THEN - FSC = 0.0002 - UNITS = 'm' - ENAME = '.hig' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( HSIG, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HSIG, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='hig' - VARNL(1)='infragravity_wave_height' - VARNS(1)='sea_surface_wave_infragravity_significant_height' - VARNG(1)='infragravity_significant_wave_height' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 5000 ! + ! Expected maximum sea surface elevation ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 11 ) THEN - FSC = 0.002 - UNITS = 'm' - ENAME = '.mxe' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( STMAXE, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, STMAXE, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='stmaxe' - VARNL(1)='expected maximum sea surface elevation (nonlinear,2nd order)' - VARNS(1)='expected maximum sea surface elevation (nonlinear,2nd order)' - VARNG(1)='expected maximum sea surface elevation (nonlinear,2nd order)' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Standard deviation of maximum sea surface elevation ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 12 ) THEN - FSC = 0.002 - UNITS = 'm' - ENAME = '.mxes' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( STMAXD, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, STMAXD, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='stmaxd' - VARNL(1)='standard deviation of maximum sea surface elevation (nonlinear,2nd order)' - VARNS(1)='std of expected maximum sea surface elevation (nonlinear,2nd order)' - VARNG(1)='standard deviation of maximum sea surface elevation (nonlinear,2nd order)' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Expected maximum wave height ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 13 ) THEN - FSC = 0.002 - UNITS = 'm' - ENAME = '.mxh' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( HMAXE, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HMAXE, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='hmaxe' - VARNL(1)='expected maximum wave height (linear, 1st order)' - VARNS(1)='expected maximum wave height (linear, 1st order)' - VARNG(1)='expected maximum wave height (linear, 1st order)' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Expected maximum wave height from crest ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 14 ) THEN - FSC = 0.002 - UNITS = 'm' - ENAME = '.mxhc' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( HCMAXE, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HCMAXE, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='hcmaxe' - VARNL(1)='expected maximum wave height from crest (linear, 1st order)' - VARNS(1)='expected maximum wave height from crest (linear, 1st order)' - VARNG(1)='expected maximum wave height from crest (linear, 1st order)' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! STD of maximum wave height ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 15 ) THEN - FSC = 0.002 - UNITS = 'm' - ENAME = '.sdmh' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( HMAXD, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HMAXD, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='hmaxd' - VARNL(1)='STD of maximum wave height (linear, 1st order)' - VARNS(1)='STD of maximum wave height (linear, 1st order)' - VARNG(1)='STD of maximum wave height (linear, 1st order)' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! STD of maximum wave height from crest ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 16 ) THEN - FSC = 0.002 - UNITS = 'm' - ENAME = '.sdmhc' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( HCMAXD, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HCMAXD, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='hcmaxd' - VARNL(1)='STD of maximum wave height from crest (linear, 1st order)' - VARNS(1)='STD of maximum wave height from crest (linear, 1st order)' - VARNG(1)='STD of maximum wave height from crest (linear, 1st order)' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Dominant wave breaking probability ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 17 ) THEN - FSC = 0.001 - UNITS = '1' - ENAME = '.wbt' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( WBT, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WBT, MAPSF, X1 ) END IF - NFIELD=1 - VARNM(1)='wbt' - VARNL(1)='domiant wave breaking probability' - VARNS(1)='domiant_wave_breaking_probability' - VARNG(1)='domiant_wave_breaking_probability' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 1000 ! + ! Wave elevation spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 1 ) THEN ! Information for spectral FLFRQ = .TRUE. - NFIELD = 1 - VARNM(1)='ef' - VARNL(1)='wave_elevation_spectrum' - VARNG(1)=VARNS(1) - VARNC(1)='' - VARND(1)='' - IF (NCVARTYPE.LE.3) THEN - UNITS = 'log10(m2 s+1E-12)' - VARNS(1)='base_ten_logarithm_of_power_spectral_density_of_surface_elevation' - FSC = 0.0004 - ELSE - UNITS = 'm2 s' - VARNS(1)='power_spectral_density_of_surface_elevation' - FSC = 1. - END IF - ENAME = '.ef' - VARNG(1)=VARNS(1) - VARNG(1)=VARNS(1) I1F=E3DF(2,1) I2F=E3DF(3,1) DO IK=I1F,I2F @@ -1643,28 +1242,11 @@ IF (NCVARTYPE.EQ.2) WHERE ( XX.GE.0.) XX = ALOG10(XX+1E-12) XK(:,:,IK)=XX END DO - VMIN = -30000 - VMAX = 32000 ! + ! Mean wave direction frequency spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 2 ) THEN ! Information for spectral FLFRQ = .TRUE. - NFIELD = 1 - FSC = 0.1 - VARNM(1)='th1m' - VARNL(1)='mean wave direction frequency spectrum' - VARNS(1)='sea_surface_wave_from_direction_frequency_spectrum' - VARNG(1)=VARNS(1) - VARNC(1)='' - VARND(1)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD END IF - UNITS = 'degree' - ENAME = '.th1m' I1F=E3DF(2,2) I2F=E3DF(3,2) DO IK=I1F,I2F @@ -1677,22 +1259,11 @@ ENDIF XK(:,:,IK)=XX END DO - VMIN = 0 - VMAX = 3600 ! + ! Spreading frequency spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 3 ) THEN ! Information for spectral FLFRQ = .TRUE. - NFIELD = 1 - FSC = 0.01 - VARNM(1)='sth1m' - VARNL(1)='spreading frequency spectrum' - VARNS(1)='sea_surface_wave_spreading_spectrum' - VARNG(1)=VARNS(1) - VARNC(1)='' - VARND(1)='' - UNITS = 'degree' - ENAME = '.sth1m' I1F=E3DF(2,3) I2F=E3DF(3,3) DO IK=I1F,I2F @@ -1703,28 +1274,11 @@ ENDIF XK(:,:,IK)=XX END DO - VMIN = 0 - VMAX = 9000 ! + ! Second mean wave direction frequency spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 4 ) THEN ! Information for spectral FLFRQ = .TRUE. - NFIELD = 1 - FSC = 0.1 - VARNM(1)='th2m' - VARNL(1)='second mean wave direction frequency spectrum' - VARNS(1)='sea_surface_wave_from_direction_frequency_spectrum_from_second_moments' - VARNG(1)=VARNS(1) - VARNC(1)='' - VARND(1)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD END IF - UNITS = 'degree' - ENAME = '.th2m' I1F=E3DF(2,4) I2F=E3DF(3,4) DO IK=I1F,I2F @@ -1737,22 +1291,11 @@ ENDIF XK(:,:,IK)=XX END DO - VMIN = 0 - VMAX = 3600 ! + ! Second spreading frequency spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 5 ) THEN ! Information for spectral FLFRQ = .TRUE. - NFIELD = 1 - FSC = 0.01 - VARNM(1)='sth2m' - VARNL(1)='second spreading frequency spectrum' - VARNS(1)='sea_surface_wave_spreading_spectrum_from_second_moments' - VARNG(1)=VARNS(1) - VARNC(1)='' - VARND(1)='' - UNITS = 'degree' - ENAME = '.sth2m' I1F=E3DF(2,5) I2F=E3DF(3,5) DO IK=I1F,I2F @@ -1763,15 +1306,11 @@ ENDIF XK(:,:,IK)=XX END DO - VMIN = 0 - VMAX = 9000 ! + ! Wave numbers ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 6 ) THEN ! Information for spectral FLFRQ = .TRUE. - FSC = 0.001 - UNITS = 'm-1' - ENAME = '.wn' I1F=1 I2F=NK DO IK=1,NK @@ -1781,84 +1320,34 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WN(IK,:), MAPSF, XX ) ENDIF XK(:,:,IK)=XX - END DO - NFIELD=1 - VARNM(1)='wn' - VARNL(1)='wave numbers' - VARNS(1)='wave_numbers' - VARNG(1)='wave_numbers' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 + END DO ! + ! Partition wave significant height ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 1 ) THEN - FSC = 0.002 - UNITS = 'm' - WRITE(ENAME,'(A4,I1)') '.phs',IPART - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PHS(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHS(:,IPART), MAPSF, X1 ) ENDIF - - NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'phs',IPART - WRITE(VARNL(1),'(A,I1)') 'wave significant height partition ',IPART - WRITE(VARNS(1),'(A,I1)') 'sea_surface_wave_significant_height_partition_',IPART - WRITE(VARNG(1),'(A,I1)') 'significant_wave_height_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Partition peak period ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 2 ) THEN - FSC = 0.01 - UNITS = 's' - WRITE(ENAME,'(A4,I1)') '.ptp',IPART - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PTP(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PTP(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'ptp',IPART - WRITE(VARNL(1),'(A,I1)') 'peak period partition ',IPART - WRITE(VARNS(1),'(A,I1)') 'sea_surface_wave_period_at_' // & - 'variance_spectral_density_maximum_partition_',IPART - WRITE(VARNG(1),'(A,I1)') 'dominant_wave_period_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 10000 -! + ! Partition peak wave length ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 3 ) THEN - FSC = 1. - UNITS = 'm' - WRITE(ENAME,'(A4,I1)') '.plp',IPART IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PLP(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PLP(:,IPART), MAPSF, X1 ) ENDIF - - NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'plp',IPART - WRITE(VARNL(1),'(A,I1)') 'peak wave length partition ',IPART - WRITE(VARNS(1),'(A,I1)') 'peak_wave_length_partition_',IPART - WRITE(VARNG(1),'(A,I1)') 'peak_wave_length_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Partition wave mean direction ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 4 ) THEN - FSC = 0.1 - UNITS = 'degree' - WRITE(ENAME,'(A5,I1)') '.pdir',IPART !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, PDIR(:,IPART), AnglD, .FALSE.) IF( SMCGRD ) THEN @@ -1871,68 +1360,25 @@ END DO CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PDIR(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A4,I1)') 'pdir',IPART - WRITE(VARNL(1),'(A,I1)') 'wave mean direction partition ',IPART - WRITE(VARNS(1),'(A,I1)') 'sea_surface_wave_from_direction_partition_',IPART - WRITE(VARNG(1),'(A,I1)') 'wave_from_direction_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = 0 - VMAX = 3600 ! + ! Partition directional spread ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 5 ) THEN - FSC = 0.1 - UNITS = 'degree' - WRITE(ENAME,'(A5,I1)') '.pspr',IPART - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PSI(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PSI(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A4,I1)') 'pspr',IPART - WRITE(VARNL(1),'(A,I1)') 'directional spread partition ',IPART - WRITE(VARNS(1),'(A,I1)') 'sea_surface_wave_directional_spread_partition_',IPART - WRITE(VARNG(1),'(A,I1)') 'directional_spread_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 900 -! + ! Partition wind sea fraction ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 6 ) THEN - FSC = 0.001 - UNITS = '1' - WRITE(ENAME,'(A4,I1)') '.pws',IPART - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PWS(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PWS(:,IPART), MAPSF, X1 ) ENDIF - - NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'pws',IPART - WRITE(VARNL(1),'(A,I1)') 'wind sea fraction in partition ',IPART - WRITE(VARNS(1),'(A,I1)') 'wind_sea_fraction_in_partition_',IPART - WRITE(VARNG(1),'(A,I1)') 'wind_sea_fraction_in_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 1000 ! + ! Partition peak direction ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 7 ) THEN - FSC = 0.1 - UNITS = 'degree' - WRITE(ENAME,'(A4,I1)') '.pdp',IPART !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, PTHP0(:,IPART), AnglD, .FALSE.) IF( SMCGRD ) THEN @@ -1945,242 +1391,90 @@ END DO CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PTHP0(:,IPART), MAPSF, X1 ) END IF - NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'pdp',IPART - WRITE(VARNL(1),'(A,I1)') & - 'peak direction partition ',IPART - WRITE(VARNS(1),'(A,I1)') & - 'sea_surface_wave_peak_from_direction_partition_',IPART - WRITE(VARNG(1),'(A,I1)') & - 'dominant_wave_from_direction_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = 0 - VMAX = 3600 ! + ! Partition peakedness ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 8 ) THEN - FSC = 0.01 - UNITS = '1' - WRITE(ENAME,'(A4,I1)') '.pqp',IPART IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PQP(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PQP(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'pqp',IPART - WRITE(VARNL(1),'(A,I1)') 'peakedness partition ',IPART - WRITE(VARNS(1),'(A,I1)') & - 'sea_surface_wave_peakedness_partition_',IPART - WRITE(VARNG(1),'(A,I1)') & - 'wave_peakedness_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Partition peak enhancement factor ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 9 ) THEN - FSC = 0.01 - UNITS = '1' - WRITE(ENAME,'(A4,I1)') '.ppe',IPART IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PPE(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PPE(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'ppe',IPART - WRITE(VARNL(1),'(A,I1)') & - 'peak enhancement factor partition ',IPART - WRITE(VARNS(1),'(A,I1)') & - 'wave_peak_enhancement_factor_partition_',IPART - WRITE(VARNG(1),'(A,I1)') & - 'wave_peak_enhancement_factor_partition_',IPART - VARNC(1)='JONSWAP peak enhancement factor; ' // PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Partition frequency width ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 10 ) THEN - FSC = 0.0001 - UNITS = 's-1' - WRITE(ENAME,'(A4,I1)') '.pgw',IPART IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PGW(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PGW(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'pgw',IPART - WRITE(VARNL(1),'(A,I1)') & - 'frequency width partition ',IPART - WRITE(VARNS(1),'(A,I1)') & - 'Gaussian_frequency_spread_partition_',IPART - WRITE(VARNG(1),'(A,I1)') & - 'Gaussian_frequency_spread_partition_',IPART - VARNC(1)='Gaussian least-square fit to ' // & - 'omni-directional spectral partition; ' // PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Partition spectral width ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 11 ) THEN - FSC = 0.0001 - UNITS = '1' - WRITE(ENAME,'(A4,I1)') '.psw',IPART IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PSW(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PSW(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'psw',IPART - WRITE(VARNL(1),'(A,I1)') 'spectral width partition ',IPART - WRITE(VARNS(1),'(A,I1)') & - 'sea_surface_wave_spectral_width_partition_',IPART - WRITE(VARNG(1),'(A,I1)') & - 'wave_spectral_width_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Partition mean period Tm10 ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 12 ) THEN - FSC = 0.01 - UNITS = 's' - WRITE(ENAME,'(A7,I1)') '.ptm10c',IPART IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PTM1(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PTM1(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A6,I1)') 'ptm10c',IPART - WRITE(VARNL(1),'(A,I1)') 'mean period Tm10 partition ',IPART - WRITE(VARNS(1),'(A,I1)') & - 'sea_surface_wave_mean_period_tm10_partition_',IPART - WRITE(VARNG(1),'(A,I1)') & - 'mean_wave_period_Tm10_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Partition mean period T01 ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 13 ) THEN - FSC = 0.01 - UNITS = 's' - WRITE(ENAME,'(A6,I1)') '.pt01c',IPART IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PT1(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PT1(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A5,I1)') 'pt01c',IPART - WRITE(VARNL(1),'(A,I1)') 'mean period T01 partition ',IPART - WRITE(VARNS(1),'(A,I1)') & - 'sea_surface_wave_mean_period_t01_partition_',IPART - WRITE(VARNG(1),'(A,I1)') & - 'mean_wave_period_T01_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Partition mean period T02 ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 14 ) THEN - FSC = 0.01 - UNITS = 's' - WRITE(ENAME,'(A6,I1)') '.pt02c',IPART IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PT2(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PT2(:,IPART), MAPSF, X1 ) ENDIF - NFIELD=1 - WRITE(VARNM(1),'(A5,I1)') 'pt02c',IPART - WRITE(VARNL(1),'(A,I1)') 'mean period T02 partition ',IPART - WRITE(VARNS(1),'(A,I1)') & - 'sea_surface_wave_mean_period_t02_partition_',IPART - WRITE(VARNG(1),'(A,I1)') & - 'mean_wave_period_T02_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Partition energy at peak frequency ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 15 ) THEN - FSC = 0.02 - UNITS = 'm2 s rad-1' - WRITE(ENAME,'(A4,I1)') '.pep',IPART IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PEP(:,IPART), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PEP(:,IPART), MAPSF, X1 ) ENDIF NFIELD=1 - WRITE(VARNM(1),'(A3,I1)') 'pep',IPART - WRITE(VARNL(1),'(A,I1)') 'energy at peak frequency partition ',IPART - WRITE(VARNS(1),'(A,I1)') & - 'sea_surface_wave_energy_at_variance_spectral_density_maximum_partition_',IPART - WRITE(VARNG(1),'(A,I1)') & - 'wave_energy_at_variance_spectral_density_maximum_partition_',IPART - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Partition wind sea fraction ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 16 ) THEN - FSC = 0.001 - UNITS = '1' - ENAME = '.tws' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PWST(:), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PWST(:), MAPSF, X1 ) ENDIF - - NFIELD=1 - VARNM(1)='tws' - VARNL(1)='wind sea fraction' - VARNS(1)='wind_sea_fraction' - VARNG(1)='wind_sea_fraction' - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 1000 ! + ! Number of wave partitions ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 17 ) THEN - FSC = 1. - UNITS = '1' - ENAME = '.pnr' - IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PNR(:), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PNR(:), MAPSF, X1 ) ENDIF - - NFIELD=1 - VARNM(1)='pnr' - VARNL(1)='number of wave partitions' - VARNS(1)='number_of_wave_partitions' - VARNG(1)='number_of_wave_partitions' - VARNC(1)=PARTCOM - VARND(1)='' - VMIN = 0 - VMAX = 100 ! + ! Friction velocity ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 1 ) THEN - FSC = 0.01 - ENAME = '.ust' - UNITS = 'm s-1' !! Note - UST and USTDIR read in from .ww3 file are X-Y vectors DO ISEA=1, NSEA UABS = SQRT(UST(ISEA)**2+USTDIR(ISEA)**2) @@ -2217,92 +1511,35 @@ !CALL W3S2XY (NSEA,NSEA,NX+1,NY, UST (1:NSEA) , MAPSF, X1 ) !CALL W3S2XY (NSEA,NSEA,NX+1,NY, USTDIR(1:NSEA) , MAPSF, X2 ) NFIELD=2 - VARNM(1)='uust' - VARNM(2)='vust' - VARNL(1)='eastward friction velocity' - VARNL(2)='northward friction velocity' - VARNS(1)='eastward_friction_velocity' - VARNS(2)='northward_friction_velocity' - VARNG(1)='eastward_friction_velocity' - VARNG(2)='northward_friction_velocity' - VARNC(1)='ust=sqrt(uust**2+vust**2)' - VARNC(2)='ust=sqrt(uust**2+vust**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -9900 - VMAX = 9900 ! + ! Charnock coefficient ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 2 ) THEN - FSC = 1.E-5 - UNITS = '1' - ENAME = '.cha' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( CHARN(1:NSEA), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CHARN(1:NSEA), MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='cha' - VARNL(1)='charnock coefficient for surface roughness length for momentum in air' - VARNS(1)='charnock_coefficient_for_surface_roughness_length_for_momentum_in_air' - VARNG(1)='charnock_coefficient' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32700 ! + ! Wave energy flux ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 3 ) THEN - FSC = 0.1 !0.01 - UNITS = 'kW m-1' - ENAME = '.cge' CGE=CGE*0.001 ! from W / m to kW / m IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( CGE(1:NSEA), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CGE(1:NSEA), MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='cge' - VARNL(1)='wave energy flux' - VARNS(1)='sea_surface_wind_wave_energy_flux' - VARNG(1)='wave_energy_flux' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 9990 ! + ! Wind to wave energy flux ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 4 ) THEN IF (NCVARTYPEI.EQ.3) NCVARTYPE=4 - FSC = 0.1 - UNITS = 'W m-2' - ENAME = '.faw' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PHIAW(1:NSEA), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHIAW(1:NSEA) , MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='faw' - VARNL(1)='wind to wave energy flux' - VARNS(1)='wind_mixing_energy_flux_into_sea_water' - VARNG(1)='wind_to_wave_energy_flux' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 9990 ! + ! Wave supported wind stress ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 5 ) THEN - FSC = 0.000001 - UNITS = 'm2 s-2' - ENAME = '.taw' !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUWIX(1:NSEA), TAUWIY(1:NSEA), AnglD) IF( SMCGRD ) THEN @@ -2330,33 +1567,9 @@ !CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUWIX, MAPSF, X1 ) !CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUWIY, MAPSF, X2 ) NFIELD=2 - VARNM(1)='utaw' - VARNM(2)='vtaw' - VARNL(1)='eastward wave supported wind stress' - VARNL(2)='northward wave supported wind stress' - VARNS(1)='eastward_wave_supported_wind_stress' - VARNS(2)='northward_wave_supported_wind_stress' - VARNG(1)='eastward_wave_supported_wind_stress' - VARNG(2)='northward_wave_supported_wind_stress' - VARNC(1)='taw=sqrt(utaw**2+vtaw**2)' - VARNC(2)='taw=sqrt(utaw**2+vtaw**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -32000 - VMAX = 32000 ! + ! Wave to wind stress ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 6 ) THEN - FSC = 0.0001 - ENAME = '.twa' - UNITS = 'm2 s-2' !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUWNX(1:NSEA), TAUWNY(1:NSEA), AnglD) IF( SMCGRD ) THEN @@ -2369,133 +1582,53 @@ , MAPSF, XY ) ENDIF ! SMCGRD NFIELD=2 - VARNM(1)='utwa' - VARNM(2)='vtwa' - VARNL(1)='eastward wave to wind stress' - VARNL(2)='northward wave to wind stress' - VARNS(1)='eastward_wave_to_wind_stress' - VARNS(2)='northward_wave_to_wind_stress' - VARNG(1)='eastward_wave_to_wind_stress' - VARNG(2)='northward_wave_to_wind_stress' - VARNC(1)='twa=sqrt(utwa**2+vtwa**2)' - VARNC(2)='twa=sqrt(utwa**2+vtwa**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -32000 - VMAX = 32000 ! + ! Whitecap coverage ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 7 ) THEN - FSC = 0.0001 - UNITS = '1' - ENAME = '.wcc' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( WHITECAP(1:NSEA,1), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WHITECAP(1:NSEA,1) & , MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='wcc' - VARNL(1)='whitecap coverage' - VARNS(1)='whitecap_coverage' - VARNG(1)='whitecap_coverage' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Whitecap foam thickness ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 8 ) THEN - FSC = 0.001 - UNITS = 'm' - ENAME = '.wcf' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( WHITECAP(1:NSEA,2), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WHITECAP(1:NSEA,2) & , MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='wcf' - VARNL(1)='whitecap foam thickness' - VARNS(1)='whitecap_foam_thickness' - VARNG(1)='whitecap_foam_thickness' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Significant breaking wave height ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 9 ) THEN - FSC = 0.002 - UNITS = 'm' - ENAME = '.wch' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( WHITECAP(1:NSEA,3), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WHITECAP(1:NSEA,3) & , MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='wch' - VARNL(1)='significant breaking wave height' - VARNS(1)='significant_breaking_wave_height' - VARNG(1)='significant_breaking_wave_height' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Whitecap moment ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 10 ) THEN - FSC = 0.0001 - UNITS = '1' - ENAME = '.wcm' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( WHITECAP(1:NSEA,4), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WHITECAP(1:NSEA,4) & , MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='wcm' - VARNL(1)='whitecap moment' - VARNS(1)='whitecap_moment' - VARNG(1)='whitecap_moment' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 10000 ! + ! Wind sea mean period T0M1 ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 11 ) THEN - FSC = 0.002 - UNITS = 's' - ENAME = '.fws' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( TWS(1:NSEA), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TWS(1:NSEA), MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='fws' - VARNL(1)='Wind_sea_mean_period_T0M1' - VARNS(1)='Wind_sea_mean_period_T0M1' - VARNG(1)='Wind_sea_mean_period_T0M1' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Radiation stress ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 1 ) THEN - FSC = 10. - FSC3 = 1. - UNITS = 'N m-1' - ENAME = '.sxy' !/RTD ! Radition stress components are always left on rotated pole !/RTD ! at present - need to confirm how to de-rotate @@ -2512,37 +1645,9 @@ , MAPSF, XY ) ENDIF ! SMCGRD NFIELD=3 - VARNM(1)='sxx' - VARNM(2)='syy' - VARNM(3)='sxy' - VARNL(1)='Radiation stress component Sxx' - VARNL(2)='Radiation stress component Syy' - VARNL(3)='Radiation stress component Sxy' - VARNS(1)='Radiation_stress_component_Sxx' - VARNS(2)='Radiation_stress_component_Syy' - VARNS(3)='Radiation_stress_component_Sxy' - VARNS(1)='radiation_stress_component_sxx' - VARNS(2)='radiation_stress_component_syy' - VARNS(3)='radiation_stress_component_sxy' - VARNC(1)='' - VARNC(2)='' - VARNC(3)='' - VARND(1)='' - VARND(2)='' - VARND(3)='' -!/RTD ! Override standard direction comment -!/RTD IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD VARND(3) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -3000 - VMAX = 3000 ! + ! Wave to ocean stress ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 2 ) THEN - FSC = 0.000001 - UNITS = 'm2 s-2' - ENAME = '.two' !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUOX(1:NSEA), TAUOY(1:NSEA), AnglD) IF( SMCGRD ) THEN @@ -2555,54 +1660,19 @@ , MAPSF, XY ) ENDIF ! SMCGRD NFIELD=2 - VARNM(1)='utwo' - VARNM(2)='vtwo' - VARNL(1)='eastward wave to ocean stress' - VARNL(2)='northward wave to ocean stress' - VARNS(1)='eastward_wave_to_ocean_stress' - VARNS(2)='northward_wave_to_ocean_stress' - VARNG(1)='eastward_wave_to_ocean_stress' - VARNG(2)='northward_wave_to_ocean_stress' - VARNC(1)='two=sqrt(utwo**2+vtwo**2)' - VARNC(2)='two=sqrt(utwo**2+vtwo**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -32000 - VMAX = 32000 ! + ! Radiation pressure (Bernouilli Head) ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 3 ) THEN - FSC = 0.1 - UNITS = 'm2 s-2' - ENAME = '.bhd' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( BHD(1:NSEA), X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, BHD(1:NSEA) & , MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='bhd' - VARNL(1)='radiation pressure (Bernouilli Head)' - VARNS(1)='radiation_pressure' - VARNG(1)='radiation_pressure' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 1000 ! + ! Wave to ocean energy flux ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 4 ) THEN IF (NCVARTYPEI.EQ.3) NCVARTYPE=4 - FSC = 0.1 - UNITS = 'W m-2' - ENAME = '.foc' DO ISEA=1, NSEA PHIOC(ISEA)=MIN(3000.,PHIOC(ISEA)) END DO @@ -2612,20 +1682,9 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHIOC(1:NSEA) & , MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='foc' - VARNL(1)='wave to ocean energy flux' - VARNS(1)='wave_to_ocean_energy_flux' - VARNG(1)='wave_to_ocean_energy_flux' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 9990 ! + ! Stokes transport ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 5 ) THEN - FSC = 0.001 - UNITS = 'm2 s-1' - ENAME = '.tus' !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TUSX(1:NSEA), TUSY(1:NSEA), AnglD) IF( SMCGRD ) THEN @@ -2659,32 +1718,9 @@ ! CALL W3S2XY ( NSEA, NSEA, NX+1, NY,TUSY,MAPSF, X2 ) !ENDIF ! SMCGRD NFIELD=2 - VARNM(1)='utus' - VARNM(2)='vtus' - VARNL(1)='eastward stokes transport' - VARNL(2)='northward stokes transport' - VARNS(1)='eastward_stokes_transport' - VARNS(2)='northward_stokes_transport' - VARNG(1)='eastward_stokes_transport' - VARNG(2)='northward_stokes_transport' - VARNC(1)='tus=sqrt(utus**2+vtus**2)' - VARNC(2)='tus=sqrt(utus**2+vtus**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -9900 ! + ! Surface stokes drift ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 6 ) THEN - FSC = 0.0005 - UNITS = 'm s-1' - ENAME = '.uss' DO ISEA=1, NSEA USSX(ISEA)=MAX(-0.9998,MIN(0.9998,USSX(ISEA))) USSY(ISEA)=MAX(-0.9998,MIN(0.9998,USSY(ISEA))) @@ -2716,49 +1752,10 @@ !CALL W3S2XY ( NSEA, NSEA, NX+1, NY,USSX,MAPSF, X1 ) !CALL W3S2XY ( NSEA, NSEA, NX+1, NY,USSY,MAPSF, X2 ) NFIELD=2 - VARNM(1)='uuss' - VARNM(2)='vuss' - VARNL(1)='eastward surface stokes drift' - VARNL(2)='northward surface stokes drift' - VARNS(1)='eastward_surface_stokes_drift' - VARNS(2)='northward_surface_stokes_drift' - VARNG(1)='eastward_surface_stokes_drift' - VARNG(2)='northward_surface_stokes_drift' - VARNC(1)='uss=sqrt(uuss**2+vuss**2)' - WRITE(VARNC(2),'(A,F8.4,A,F8.4,A)') 'Frequency range ',SIG(1)*TPIINV,' to ',SIG(NK)*TPIINV,' Hz' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -9900 - VMAX = 9900 ! + ! Power spectral density of equivalent surface pressure ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 7 ) THEN NFIELD=2 - FSC = 0.01 - ENAME = '.p2s' - UNITS = 'm4' - UNITS2 = 's-1' - VARNM(1)='fp2s' - VARNM(2)='pp2s' - VARNL(1)='power spectral density of equivalent surface pressure' - VARNL(2)='peak period of power spectral density of equivalent surface pressure' - VARNS(1)='power_spectral_density_of_equivalent_surface_pressure' - VARNS(2)='peak_period_of_power_spectral_density_of_equivalent_surface_pressure' - VARNG(1)='power_spectral_density_of_equivalent_surface_pressure' - VARNG(2)='peak_period_of_power_spectral_density_of_equivalent_surface_pressure' - VARNC(1)='' - VARNC(2)='' - VARND(1)='' - VARND(2)='' - VMIN = -15000 - VMAX = 32000 IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( PRMS(1:NSEA), XX ) !/SMC CALL W3S2XY_SMC( TPMS(1:NSEA), XY ) @@ -2769,31 +1766,11 @@ , MAPSF, XY ) ENDIF ! SMCGRD ! + ! Spectral variance of surface stokes drift ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 8 ) THEN ! Information for spectral distribution of surface Stokes drift (2nd file) FLFRQ=.TRUE. NFIELD=2 - VARNM(1)='uusf' - VARNM(2)='vusf' - VARNL(1)='eastward spectral variance of surface stokes drift' - VARNL(2)='northward spectral variance of surface stokes drift' - VARNS(1)='eastward_spectral_variance_of_surface_stokes_drift' - VARNS(2)='northward_spectral_variance_of_surface_stokes_drift' - VARNG(1)='eastward_spectral_variance_of_surface_stokes_drift' - VARNG(2)='northward_spectral_variance_of_surface_stokes_drift' - VARNC(1)='usf=sqrt(uusf**2+vusf**2)' - VARNC(2)='usf=sqrt(uusf**2+vusf**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - UNITS = 'm s-1 Hz-1' I1F=US3DF(2) I2F=US3DF(3) DO IK= I1F,I2F @@ -2809,24 +1786,11 @@ XXK(:,:,IK)=XX XYK(:,:,IK)=XY END DO - FSC = 0.0005 - ENAME = '.usf' - - VMIN = -9900 - VMAX = 9900 ! + ! Base10 logarithm of power spectral density of equivalent surface pressure ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 9 ) THEN ! Information for spectral microseismic generation data (2nd file) FLFRQ=.TRUE. - NFIELD=1 - FSC = 0.0004 - VARNM(1)='p2l' - VARNL(1)='base ten logarithm of power spectral density of equivalent surface pressure' - VARNS(1)='base_ten_logarithm_of_power_spectral_density_of_equivalent_surface_pressure' - VARNG(1)='base_ten_logarithm_of_power_spectral_density_of_equivalent_surface_pressure' - VARNC(1)='' - VARND(1)='' - ENAME = '.p2l' I1F=P2MSF(2) I2F=P2MSF(3) DO IK=I1F,I2F @@ -2837,21 +1801,15 @@ ENDIF ! SMCGRD IF (NCVARTYPE.EQ.2) THEN WHERE ( XX.GE.0.) XX = ALOG10(XX*(DWAT*GRAV)**2+1E-12) - UNITS = 'log10(Pa2 m2 s+1E-12)' ELSE WHERE ( XX.GE.0.) XX = XX*(DWAT*GRAV)**2 - UNITS = 'Pa2 m2 s' END IF XK(:,:,IK)=XX - END DO - VMIN = -30000 - VMAX = 30000 + END DO ! + ! Wave to sea ice stress ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 10 ) THEN - FSC = 0.000001 - UNITS = 'm2 s-2' - ENAME = '.tic' !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUICE(1:NSEA,1), TAUICE(1:NSEA,2), AnglD) IF( SMCGRD ) THEN @@ -2864,34 +1822,10 @@ , MAPSF, XY ) ENDIF ! SMCGRD NFIELD=2 - VARNM(1)='utic' - VARNM(2)='vtic' - VARNL(1)='eastward wave to sea ice stress' - VARNL(2)='northward wave to sea ice stress' - VARNS(1)='eastward_wave_to_sea_ice_stress' - VARNS(2)='northward_wave_to_sea_ice_stress' - VARNG(1)='eastward_wave_to_sea_ice_stress' - VARNG(2)='northward_wave_to_sea_ice_stress' - VARNC(1)='two=sqrt(utwo**2+vtwo**2)' - VARNC(2)='two=sqrt(utwo**2+vtwo**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -32000 - VMAX = 32000 ! + ! Wave to sea ice energy flux ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 11 ) THEN IF (NCVARTYPEI.EQ.3) NCVARTYPE=4 - FSC = 0.1 - UNITS = 'W m-2' - ENAME = '.fic' DO ISEA=1, NSEA PHIOC(ISEA)=MIN(3000.,PHIOC(ISEA)) END DO @@ -2901,16 +1835,8 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHICE(1:NSEA) & , MAPSF, X1 ) ENDIF ! SMCGRD - NFIELD=1 - VARNM(1)='fic' - VARNL(1)='wave to sea ice energy flux' - VARNS(1)='wave_to_sea_ice_energy_flux' - VARNG(1)='wave_to_sea_ice_energy_flux' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 9990 + ! Partitioned surface stokes drift ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 12 ) THEN ! Information for spectral distribution of surface Stokes drift (2nd file) FLFRQ=.TRUE. @@ -2918,27 +1844,6 @@ CUSTOMFRQ=.TRUE. ENDIF NFIELD=2 - VARNM(1)='ussp' - VARNM(2)='vssp' - VARNL(1)='eastward partitioned surface stokes drift' - VARNL(2)='northward partitioned surface stokes drift' - VARNS(1)='eastward_partitioned_surface_stokes_drift' - VARNS(2)='northward_partitioned_surface_stokes_drift' - VARNG(1)='eastward_partitioned_surface_stokes_drift' - VARNG(2)='northward_partitioned_surface_stokes_drift' - VARNC(1)='usp=sqrt(ussp**2+vssp**2)' - VARNC(2)='usp=sqrt(ussp**2+vssp**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - UNITS = 'm s-1' I1F=1 I2F=USSPF(2) DO IK= I1F,I2F @@ -2954,13 +1859,9 @@ XXK(:,:,IK)=XX XYK(:,:,IK)=XY END DO - FSC = 0.0005 - ENAME = '.usp' ! + ! RMS of bottom displacement amplitude ELSE IF ( IFI .EQ. 7 .AND. IFJ .EQ. 1 ) THEN - FSC = 0.01 - ENAME = '.abr' - UNITS = 'm' ! NB: ABA and ABD are the X and Y components of the bottom displacement !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, ABA(1:NSEA), ABD(1:NSEA), AnglD) @@ -2974,33 +1875,9 @@ , MAPSF, XY ) ENDIF ! SMCGRD NFIELD=2 - VARNM(1)='uabr' - VARNM(2)='vabr' - VARNL(1)='rms of bottom displacement amplitude zonal' - VARNL(2)='rms of bottom displacement amplitude meridional' - VARNS(1)='rms_of_bottom_displacement_amplitude_zonal' - VARNS(2)='rms_of_bottom_displacement_amplitude_meridional' - VARNG(1)='rms_of_bottom_displacement_amplitude_zonal' - VARNG(2)='rms_of_bottom_displacement_amplitude_meridional' - VARNC(1)='abr=sqrt(uabr**2+vabr**2)' - VARNC(2)='abr=sqrt(uabr**2+vabr**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -18000 - VMAX = 18000 ! + ! RMS of bottom velocity amplitude ELSE IF ( IFI .EQ. 7 .AND. IFJ .EQ. 2 ) THEN - FSC = 0.01 - ENAME = '.ubr' - UNITS = 'm s-1' ! NB: UBA and UBD are the X and Y components of the bottom velocity !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, UBA(1:NSEA), UBD(1:NSEA), AnglD) @@ -3009,33 +1886,9 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, UBD(1:NSEA) & , MAPSF, XY ) NFIELD=2 - VARNM(1)='uubr' - VARNM(2)='vubr' - VARNL(1)='rms of bottom velocity amplitude zonal' - VARNL(2)='rms of bottom velocity amplitude meridional' - VARNS(1)='rms_of_bottom_velocity_amplitude_zonal' - VARNS(2)='rms_of_bottom_velocity_amplitude_meridional' - VARNG(1)='rms_of_bottom_velocity_amplitude_zonal' - VARNG(2)='rms_of_bottom_velocity_amplitude_meridional' - VARNC(1)='ubr=sqrt(uubr**2+vubr**2)' - VARNC(2)='ubr=sqrt(uubr**2+vubr**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -18000 - VMAX = 18000 ! + ! Bottom roughness ELSE IF ( IFI .EQ. 7 .AND. IFJ .EQ. 3 ) THEN - FSC = 0.001 - UNITS = 'm' - ENAME = '.bed' !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, BEDFORMS(1:NSEA,2), & !/RTD BEDFORMS(1:NSEA,3), AnglD) @@ -3046,55 +1899,14 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, BEDFORMS(1:NSEA,3) & , MAPSF, XY ) NFIELD=3 - VARNM(1)='bed' - VARNM(2)='ripplex' - VARNM(3)='rippley' - VARNL(1)='bottom roughness' - VARNL(2)='eastward sea bottom ripple wavelength' - VARNL(3)='northward sea bottom ripple wavelength' - VARNS(1)='sea bottom roughness length' - VARNS(2)='eastward_ripple_wavelength' - VARNS(3)='northward_ripple_wavelength' - VARNG(1)='ripple_wavelength' - VARNG(2)='eastward_ripple_wavelength' - VARNG(3)='northward_ripple_wavelength' - VARNC(1)='ripple_length=sqrt(ripplex**2+rippley**2)' - VARNC(2)='ripple_length=sqrt(ripplex**2+rippley**2)' - VARNC(3)='ripple_length=sqrt(ripplex**2+rippley**2)' - VARND(1)='' - VARND(2)='' - VARND(3)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(2) = 'True North' -!/RTD VARND(3) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD VARND(3) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = 0 - VMAX = 30000 ! + ! Wave dissipation in bottom boundary layer ELSE IF ( IFI .EQ. 7 .AND. IFJ .EQ. 4 ) THEN - FSC = 0.1 - UNITS = 'W m-2' - ENAME = '.fbb' CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHIBBL(1:NSEA) & , MAPSF, X1 ) - NFIELD=1 - VARNM(1)='fbb' - VARNL(1)='wave dissipation in bbl' - VARNS(1)='wave_energy_dissipation_in_bottom_boundary_layer' - VARNG(1)='wave_dissipation_in_bbl' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 9990 ! + ! Wave to bottom boundary layer stress ELSE IF ( IFI .EQ. 7 .AND. IFJ .EQ. 5 ) THEN - FSC = 0.000001 - UNITS = 'm2 s-2' - ENAME = '.tbb' !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUBBL(1:NSEA,1), & !/RTD TAUBBL(1:NSEA,2), AnglD) @@ -3103,97 +1915,25 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUBBL(1:NSEA,2) & , MAPSF, XY ) NFIELD=2 - VARNM(1)='utbb' - VARNM(2)='vtbb' - VARNL(1)='eastward wave to bbl stress' - VARNL(2)='northward wave to bbl stress' - VARNS(1)='eastward_wave_to_bottom_boundary_layer_stress' - VARNS(2)='northward_wave_to_bottom_boundary_layer_stress' - VARNG(1)='eastward_wave_to_bbl_stress' - VARNG(2)='northward_wave_to_bbl_stress' - VARNC(1)='tbb=sqrt(utbb**2+vtbb**2)' - VARNC(2)='tbb=sqrt(utbb**2+vtbb**2)' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = -32000 - VMAX = 32000 ! + ! Mean square slope ELSE IF ( IFI .EQ. 8 .AND. IFJ .EQ. 1 ) THEN - FSC = 0.00001 - ENAME = '.mss' - UNITS = '1' !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, MSSX, MSSY, AnglD) CALL W3S2XY ( NSEA, NSEA, NX+1,NY,MSSX,MAPSF, XX ) CALL W3S2XY ( NSEA, NSEA, NX+1,NY,MSSY,MAPSF, XY ) NFIELD=2 - VARNM(1)='mssu' - VARNM(2)='mssc' - VARNL(1)='downwave mean square slope' - VARNL(2)='crosswave mean square slope' - VARNS(1)='x_mean_square_slope' - VARNS(2)='y_mean_square_slope' - VARNG(1)='x_mean_square_slope' - VARNG(2)='y_mean_square_slope' - VARNC(1)='mss=mssu+mssc' - WRITE(VARNC(1),'(A,F8.4,A,F8.4,A)') 'Frequency range ',SIG(1)*TPIINV,' to ',SIG(NK)*TPIINV,' Hz' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = 0 - VMAX = 30000 ! + ! Phillips constant ELSE IF ( IFI .EQ. 8 .AND. IFJ .EQ. 2 ) THEN - FSC = 1E-7 - ENAME = '.msc' - UNITS = '1' !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, MSCX, MSCY, AnglD) CALL W3S2XY ( NSEA, NSEA, NX+1,NY,MSCX,MAPSF, XX ) CALL W3S2XY ( NSEA, NSEA, NX+1,NY,MSCY,MAPSF, XY ) NFIELD=2 - VARNM(1)='mscx' - VARNM(2)='mscy' - VARNL(1)='eastward phillips constant' - VARNL(2)='northward phillips constant' - VARNS(1)='eastward_phillips_constant' - VARNS(2)='northward_phillips_constant' - VARNG(1)='eastward_phillips_constant' - VARNG(2)='northward_phillips_constant' - VARNC(1)='msc=mscx+mscy' - VARNC(2)='msc=mscx+mscy' - VARND(1)='' - VARND(2)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD VARND(2) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD VARND(2) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = 0 - VMAX = 30000 ! + ! u direction for mss ELSE IF ( IFI .EQ. 8 .AND. IFJ .EQ. 3 ) THEN - FSC = 0.1 - UNITS = 'degree' - ENAME = '.msd' !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, MSSD, AnglD, .FALSE.) DO ISEA=1, NSEA @@ -3202,26 +1942,9 @@ END IF END DO CALL W3S2XY ( NSEA, NSEA, NX+1, NY, MSSD , MAPSF, X1 ) - NFIELD=1 - VARNM(1)='mssd' - VARNL(1)='u direction for mss' - VARNS(1)='sea_surface_wave_dominant_mean_square_slope_direction' - VARNG(1)='sea_surface_wave_dominant_mean_square_slope_direction' - WRITE(VARNC(1),'(A,F8.4,A,F8.4,A)') 'Frequency range ',SIG(1)*TPIINV,' to ',SIG(NK)*TPIINV,' Hz' - VARND(1)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = 0 - VMAX = 3600 ! + ! x direction for msc ELSE IF ( IFI .EQ. 8 .AND. IFJ .EQ. 4 ) THEN - FSC = 0.1 - UNITS = 'degree' - ENAME = '.mcd' !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, MSCD, AnglD, .FALSE.) DO ISEA=1, NSEA @@ -3230,147 +1953,55 @@ END IF END DO CALL W3S2XY ( NSEA, NSEA, NX+1, NY, MSCD , MAPSF, X1 ) - NFIELD=1 - VARNM(1)='mscd' - VARNL(1)='x direction for msc' - VARNS(1)='sea_surface_wave_dominant_mean_square_slope_direction_in_highest_frequency' - VARNG(1)='sea_surface_wave_dominant_mean_square_slope_direction_in_highest_frequency' - VARNC(1)='' - VARND(1)='' -!/RTD ! Override standard direction comment -!/RTD IF ( FLAGUNR ) THEN -!/RTD VARND(1) = 'True North' -!/RTD ELSE IF ( RTDL ) THEN -!/RTD VARND(1) = 'Rotated Pole Grid North' -!/RTD END IF - VMIN = 0 - VMAX = 3600 ! + ! Peakedness ELSE IF ( IFI .EQ. 8 .AND. IFJ .EQ. 5 ) THEN - FSC = 0.001 - UNITS = '1' - ENAME = '.qp' IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( QP, X1 ) ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, QP, MAPSF, X1 ) ENDIF - NFIELD=1 - VARNM(1)='qp' - VARNL(1)='peakedness' - VARNS(1)='sea_surface_wave_peakedness' - VARNG(1)='wave_peakedness' - VARNC(1)='Goda wave peakedness parameter' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Dynamic time step ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 1 ) THEN - FSC = 0.1 - UNITS = 'min.' - ENAME = '.dtd' DO ISEA=1, NSEA IF ( DTDYN(ISEA) .NE. UNDEF ) THEN DTDYN(ISEA) = DTDYN(ISEA) / 60. END IF END DO CALL W3S2XY ( NSEA, NSEA, NX+1, NY, DTDYN , MAPSF, X1 ) - NFIELD=1 - VARNM(1)='dtd' - VARNL(1)='dynamic time step' - VARNS(1)='dynamic_time_step' - VARNG(1)='dynamic_time_step' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Cut off frequency ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 2 ) THEN - FSC = 0.001 - UNITS = 's-1' - ENAME = '.fc' CALL W3S2XY ( NSEA, NSEA, NX+1, NY, FCUT , MAPSF, X1 ) - NFIELD=1 - VARNM(1)='fc' - VARNL(1)='cut off frequency' - VARNS(1)='cut_off_frequency' - VARNG(1)='cut_off_frequency' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 8000 ! + ! Maximum CFL for spatial advection ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 3 ) THEN - FSC = 0.01 - UNITS = '1' - ENAME = '.cfx' CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CFLXYMAX , MAPSF, X1 ) - NFIELD=1 - VARNM(1)='cfx' - VARNL(1)='maximum cfl for spatial advection' - VARNS(1)='maximum_cfl_for_spatial_advection' - VARNG(1)='maximum_cfl_for_spatial_advection' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Maximum CFL for direction advection ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 4 ) THEN - FSC = 0.01 - UNITS = '1' - ENAME = '.cfd' CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CFLTHMAX , MAPSF, X1 ) - NFIELD=1 - VARNM(1)='cfd' - VARNL(1)='maximum cfl for direction advection' - VARNS(1)='maximum_cfl_for_direction_advection' - VARNG(1)='maximum_cfl_for_direction_advection' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! Maximum CFL for frequency advection ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 5 ) THEN - FSC = 0.01 - UNITS = '1' - ENAME = '.cfk' CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CFLKMAX , MAPSF, X1 ) - NFIELD=1 - VARNM(1)='cfk' - VARNL(1)='maximum cfl for frequency advection' - VARNS(1)='maximum_cfl_for_frequency_advection' - VARNG(1)='maximum_cfl_for_frequency_advection' - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 32000 ! + ! User defined... ELSE IF ( IFI .EQ. 10 ) THEN - FSC = 0.1 - UNITS = 'm' - WRITE (ENAME,'(A2,I2.2)') '.u', IFJ + !CB WRITE (ENAME,'(A2,I2.2)') '.u', IFJ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, USERO(:,IFJ) & , MAPSF, X1 ) - NFIELD=1 - WRITE (VARNM(1),'(A1,I2.2)') 'u', IFJ - WRITE (VARNL(1),'(A12,I2.2)') 'User_defined', IFJ - WRITE (VARNS(1),'(A12,I2.2)') 'User_defined', IFJ - WRITE (VARNG(1),'(A12,I2.2)') 'user_defined', IFJ - VARNC(1)='' - VARND(1)='' - VMIN = 0 - VMAX = 9990 -! ELSE WRITE (NDSE,999) IFI, IFJ CALL EXTCDE ( 1 ) ! END IF ! IFI AND IFJ - ! Defines a differents for the second variable if specified - UNITVAR(:)=UNITS - IF (UNITS2.NE.'SAME') UNITVAR(2)=UNITS2 - + ! CB Get netCDF metadata for IFI, IFJ combination (all components). + DO I=1,NFIELD + META(I) = GETMETA(IFI, IFJ, ICOMP=I, IPART=IPART) + ENDDO ! 2.2 Make map @@ -3402,7 +2033,7 @@ ! 2.3 Setups the output type 4 ( NetCDF file ) - S2=LEN_TRIM(ENAME) + S2=LEN_TRIM(META(1)%ENAME) S1=LEN_TRIM(FILEPREFIX)+S4 FNAMENC(S1+1:50)=' ' FNAMENC(S1+1:S1+1) = '_' @@ -3414,14 +2045,13 @@ ! If NOT flag TOGETHER or variable with freq dim & ! (ef, p2l, ...), add variable name in file name ELSE - FNAMENC(S1+2:S1+S2) = ENAME(2:S2) + FNAMENC(S1+2:S1+S2) = META(1)%ENAME(2:S2) ENDIF ! Defines the netcdf extension FNAMENC(S1+S2+1:S1+S2+3) = '.nc' FNAMENC(S1+S2+4:S1+S2+6) = ' ' ! If the flag frequency is .TRUE., defines the fourth dimension IF (FLFRQ) THEN - UNITVAR(:)=UNITS DIMLN(4)=I2F-I1F+1 EXTRADIM=1 ELSE @@ -3509,21 +2139,18 @@ DIMLN(1)=1 ! If NOT unstructure mesh (i.e. regular grid) - IF (GTYPE.NE.UNGTYPE) THEN - ! If spherical coordinate - IF (FLAGLL) THEN - VARNM(NFIELD+1)='Longitude' - VARNM(NFIELD+2)='Latitude' - ! If cartesian coordinate - ELSE - VARNM(NFIELD+1)='x' - VARNM(NFIELD+2)='y' - END IF - END IF - - - - +!! CHRISB: VARNM for lat/lon not actually used below. +! IF (GTYPE.NE.UNGTYPE) THEN +! ! If spherical coordinate +! IF (FLAGLL) THEN +! VARNM(NFIELD+1)='Longitude' +! VARNM(NFIELD+2)='Latitude' +! ! If cartesian coordinate +! ELSE +! VARNM(NFIELD+1)='x' +! VARNM(NFIELD+2)='y' +! END IF +! END IF ! Initializes the time iteration counter n N=1 @@ -3874,80 +2501,58 @@ IF( SMCGRD ) THEN !/SMC IF( SMCTYPE .EQ. 1 ) THEN !/SMC ! SMC Flat file -!/SMC IRET = NF90_DEF_VAR(NCID,varnm(I), NF90_SHORT, (/DIMID(2), DIMID(4+EXTRADIM)/), VARID(IVAR)) +!/SMC IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_SHORT, (/DIMID(2), DIMID(4+EXTRADIM)/), VARID(IVAR)) !/SMC ELSE !/SMC ! SMC Regridded file -!/SMC IRET = NF90_DEF_VAR(NCID,varnm(I), NF90_SHORT, DIMID(2:4+EXTRADIM), VARID(IVAR)) +!/SMC IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_SHORT, DIMID(2:4+EXTRADIM), VARID(IVAR)) !/SMC ENDIF +!/SMC CALL CHECK_ERR(IRET) ELSE ! SMCGRD - IRET=NF90_DEF_VAR(NCID,VARNM(I), NF90_SHORT, DIMID(2:4+EXTRADIM), VARID(IVAR)) + IRET=NF90_DEF_VAR(NCID,META(I)%VARNM, NF90_SHORT, DIMID(2:4+EXTRADIM), VARID(IVAR)) + CALL CHECK_ERR(IRET) !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) +!/NC4 CALL CHECK_ERR(IRET) ENDIF ! SMCGRD ELSE IF( SMCGRD ) THEN !/SMC IF( SMCTYPE .EQ. 1 ) THEN !/SMC ! SMC Flat file -!/SMC IRET = NF90_DEF_VAR(NCID,varnm(I), NF90_FLOAT, (/DIMID(2), DIMID(4+EXTRADIM)/), VARID(IVAR)) +!/SMC IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_FLOAT, (/DIMID(2), DIMID(4+EXTRADIM)/), VARID(IVAR)) !/SMC ELSE !/SMC ! SMC Regridded file -!/SMC IRET = NF90_DEF_VAR(NCID,varnm(I), NF90_FLOAT, DIMID(2:4+EXTRADIM), VARID(IVAR)) +!/SMC IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_FLOAT, DIMID(2:4+EXTRADIM), VARID(IVAR)) !/SMC ENDIF +!/SMC CALL CHECK_ERR(IRET) ELSE ! SMCGRD - IRET=NF90_DEF_VAR(NCID,VARNM(I), NF90_FLOAT, DIMID(2:4+EXTRADIM), VARID(IVAR)) + IRET=NF90_DEF_VAR(NCID,META(I)%VARNM, NF90_FLOAT, DIMID(2:4+EXTRADIM), VARID(IVAR)) !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) +!/NC4 CALL CHECK_ERR(IRET) ENDIF ! SMCGRD END IF - CALL CHECK_ERR(IRET) ELSE DIMFIELD(1)=DIMID(2) DIMFIELD(2)=DIMID(4) DIMFIELD(3)=DIMID(5) IF (NCVARTYPE.EQ.2) THEN - IRET = NF90_DEF_VAR(NCID,VARNM(I), NF90_SHORT, DIMFIELD(1:2+EXTRADIM), VARID(IVAR)) + IRET = NF90_DEF_VAR(NCID,META(I)%VARNM, NF90_SHORT, DIMFIELD(1:2+EXTRADIM), VARID(IVAR)) + CALL CHECK_ERR(IRET) !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) +!/NC4 CALL CHECK_ERR(IRET) ELSE - IRET = NF90_DEF_VAR(NCID,VARNM(I), NF90_FLOAT, DIMFIELD(1:2+EXTRADIM), VARID(IVAR)) + IRET = NF90_DEF_VAR(NCID,META(I)%VARNM, NF90_FLOAT, DIMFIELD(1:2+EXTRADIM), VARID(IVAR)) + CALL CHECK_ERR(IRET) !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) +!/NC4 CALL CHECK_ERR(IRET) END IF - CALL CHECK_ERR(IRET) END IF + + ! Set scale factor to 1.0 if using FLOAT variables for output + IF(NCVARTYPE .GT. 2) META(I)%FSC = 1.0 + + !! CB - USE NEW W3META MODULE + CALL WRITE_META(NCID, VARID(IVAR), META(I), IRET) ! CB + CALL CHECK_ERR(IRET) ! CB ! - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'long_name',VARNL(I)) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'standard_name',VARNS(I)) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'globwave_name',VARNG(I)) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'units',UNITVAR(I)) - CALL CHECK_ERR(IRET) - IF (NCVARTYPE.EQ.2) THEN - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'_FillValue',NF90_FILL_SHORT) - ELSE - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'_FillValue',NF90_FILL_FLOAT) - FSC=1. - FSC3=1. - END IF - CALL CHECK_ERR(IRET) - IF (I.LE.2) THEN - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'scale_factor',FSC) - ELSE - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'scale_factor',FSC3) - ENDIF - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'add_offset',0.) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'valid_min',VMIN) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'valid_max',VMAX) - CALL CHECK_ERR(IRET) - IF (VARNC(I).NE.'') THEN - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'comment',VARNC(I)) - CALL CHECK_ERR(IRET) - END IF - IF (VARND(I).NE.'') THEN - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'direction_reference',VARND(I)) - CALL CHECK_ERR(IRET) - END IF !/RTD !/RTD IF ( RTDL ) THEN !/RTD ! Add grid mapping attribute for rotated pole grids: @@ -4034,26 +2639,27 @@ IF( SMCGRD ) THEN !/SMC IF( SMCTYPE .EQ. 1 ) THEN !/SMC ! SMC Flat file -!/SMC IRET = NF90_DEF_VAR(NCID,varnm(I), NF90_SHORT, (/DIMID(2), DIMID(4+EXTRADIM)/), VARID(IVAR)) +!/SMC IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_SHORT, (/DIMID(2), DIMID(4+EXTRADIM)/), VARID(IVAR)) !/SMC ELSE !/SMC ! SMC Regridded file -!/SMC IRET = NF90_DEF_VAR(NCID,varnm(I), NF90_SHORT, DIMID(2:4+EXTRADIM), VARID(IVAR)) +!/SMC IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_SHORT, DIMID(2:4+EXTRADIM), VARID(IVAR)) !/SMC ENDIF ELSE - IRET = NF90_DEF_VAR(NCID,VARNM(I), NF90_SHORT, DIMID(2:4+EXTRADIM), VARID(IVAR)) + IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_SHORT, DIMID(2:4+EXTRADIM), VARID(IVAR)) + CALL CHECK_ERR(IRET) ENDIF ! SMCGRD !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) ELSE IF( SMCGRD ) THEN !/SMC IF( SMCTYPE .EQ. 1 ) THEN !/SMC ! SMC Flat file -!/SMC IRET = NF90_DEF_VAR(NCID,varnm(I), NF90_FLOAT, (/DIMID(2), DIMID(4+EXTRADIM)/), VARID(IVAR)) +!/SMC IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_FLOAT, (/DIMID(2), DIMID(4+EXTRADIM)/), VARID(IVAR)) !/SMC ELSE !/SMC ! SMC Regridded file -!/SMC IRET = NF90_DEF_VAR(NCID,varnm(I), NF90_FLOAT, DIMID(2:4+EXTRADIM), VARID(IVAR)) +!/SMC IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_FLOAT, DIMID(2:4+EXTRADIM), VARID(IVAR)) !/SMC ENDIF ELSE - IRET = NF90_DEF_VAR(NCID,VARNM(I), NF90_FLOAT, DIMID(2:4+EXTRADIM), VARID(IVAR)) + IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_FLOAT, DIMID(2:4+EXTRADIM), VARID(IVAR)) CALL CHECK_ERR(IRET) ENDIF ! SMCGRD !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) @@ -4064,52 +2670,25 @@ DIMFIELD(2)=DIMID(4) DIMFIELD(3)=DIMID(5) IF (NCVARTYPE.EQ.2) THEN - IRET = NF90_DEF_VAR(NCID,VARNM(I), NF90_SHORT, DIMFIELD(1:2+EXTRADIM), VARID(IVAR)) + IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_SHORT, DIMFIELD(1:2+EXTRADIM), VARID(IVAR)) + CALL CHECK_ERR(IRET) !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) +!/NC4 CALL CHECK_ERR(IRET) ELSE - IRET = NF90_DEF_VAR(NCID,VARNM(I), NF90_FLOAT, DIMFIELD(1:2+EXTRADIM), VARID(IVAR)) + IRET = NF90_DEF_VAR(NCID,META(I)%varnm, NF90_FLOAT, DIMFIELD(1:2+EXTRADIM), VARID(IVAR)) + CALL CHECK_ERR(IRET) !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) +!/NC4 CALL CHECK_ERR(IRET) END IF END IF - CALL CHECK_ERR(IRET) -! - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'long_name',VARNL(I)) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'standard_name',VARNS(I)) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'globwave_name',VARNG(I)) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'units',UNITVAR(I)) - CALL CHECK_ERR(IRET) -! - IF (NCVARTYPE.EQ.2) THEN - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'_FillValue',NF90_FILL_SHORT) - ELSE - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'_FillValue',NF90_FILL_FLOAT) - FSC=1. - FSC3=1. - END IF - CALL CHECK_ERR(IRET) ! - IF (I.LE.2) THEN - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'scale_factor',FSC) - ELSE - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'scale_factor',FSC3) - ENDIF - CALL CHECK_ERR(IRET) + ! Set scale factor to 1.0 if using FLOAT variables for output + IF(NCVARTYPE .GT. 2) META(I)%FSC = 1.0 + + !! CB - USE NEW W3META MODULE + CALL WRITE_META(NCID, VARID(IVAR), META(I), IRET) ! CB + CALL CHECK_ERR(IRET) ! CB ! - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'add_offset',0.) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'valid_min',VMIN) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'valid_max',VMAX) - CALL CHECK_ERR(IRET) - IF (VARNC(I).NE.'') THEN - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'comment',VARNC(I)) - CALL CHECK_ERR(IRET) - END IF - IF (VARND(I).NE.'') THEN - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'direction_reference',VARND(I)) - CALL CHECK_ERR(IRET) - END IF !/RTD !/RTD IF ( RTDL ) THEN !/RTD ! Add grid mapping attribute for rotated pole grids: @@ -4127,12 +2706,14 @@ IRET=NF90_REDEF(NCID) CALL CHECK_ERR(IRET) DO I=1,NFIELD + ! Get meta-data for field + !META = GETMETA(IFI, IFJ, ICOMP=I, IPART=IPART) IVAR=IVAR1+I - IRET=NF90_INQ_VARID (NCID, VARNM(I), VARID(IVAR)) + IRET=NF90_INQ_VARID (NCID, META(I)%VARNM, VARID(IVAR)) CALL CHECK_ERR(IRET) END DO IRET=NF90_ENDDEF(NCID) - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET) END IF ! N.EQ.1 END IF ! IERR.EQ.0 @@ -4140,8 +2721,8 @@ CALL T2D(TIME,CURDATE,IERR) OUTJULDAY=TSUB(REFDATE,CURDATE) - WRITE(NDSO,'(3A,I6,A,I4,A,I2.2,A,I2.2,A,I2.2,A,I2.2,A,I2.2,2A)') & - 'Writing new record ', ENAME(2:) ,'number ',N, & + WRITE(NDSO,'(A,A9,A,I6,A,I4,A,I2.2,A,I2.2,A,I2.2,A,I2.2,A,I2.2,2A)') & + 'Writing new record ', META(1)%ENAME(2:) ,'number ',N, & ' for ',CURDATE(1),':',CURDATE(2),':',CURDATE(3),'T',CURDATE(5),& ':',CURDATE(6),':',CURDATE(7),' in file ',TRIM(FNAMENC) @@ -4186,9 +2767,9 @@ !/SMC MYY(IX,IY) = MFILL !/SMC MXY(IX,IY) = MFILL !/SMC ELSE -!/SMC MXX(IX,IY) = NINT(X1(IX,IY)/FSC) -!/SMC MYY(IX,IY) = NINT(X2(IX,IY)/FSC) -!/SMC MXY(IX,IY) = NINT(XY(IX,IY)/FSC3) +!/SMC MXX(IX,IY) = NINT(X1(IX,IY)/META(1)%FSC) +!/SMC MYY(IX,IY) = NINT(X2(IX,IY)/META(2)%FSC) +!/SMC MXY(IX,IY) = NINT(XY(IX,IY)/META(3)%FSC) !/SMC END IF !/SMC END DO !/SMC END DO @@ -4221,9 +2802,9 @@ MYY(IX,IY) = MFILL MXY(IX,IY) = MFILL ELSE - MXX(IX,IY) = NINT(X1(IX,IY)/FSC) - MYY(IX,IY) = NINT(X2(IX,IY)/FSC) - MXY(IX,IY) = NINT(XY(IX,IY)/FSC3) + MXX(IX,IY) = NINT(X1(IX,IY)/META(1)%FSC) + MYY(IX,IY) = NINT(X2(IX,IY)/META(2)%FSC) + MXY(IX,IY) = NINT(XY(IX,IY)/META(3)%FSC) END IF END DO END DO @@ -4250,8 +2831,8 @@ !/SMC MXX(IX,IY) = MFILL !/SMC MYY(IX,IY) = MFILL !/SMC ELSE -!/SMC MXX(IX,IY) = NINT(XX(IX,IY)/FSC) -!/SMC MYY(IX,IY) = NINT(XY(IX,IY)/FSC) +!/SMC MXX(IX,IY) = NINT(XX(IX,IY)/META(1)%FSC) +!/SMC MYY(IX,IY) = NINT(XY(IX,IY)/META(2)%FSC) !/SMC END IF !/SMC END DO !/SMC END DO @@ -4277,8 +2858,8 @@ MXX(IX,IY) = MFILL MYY(IX,IY) = MFILL ELSE - MXX(IX,IY) = NINT(XX(IX,IY)/FSC) - MYY(IX,IY) = NINT(XY(IX,IY)/FSC) + MXX(IX,IY) = NINT(XX(IX,IY)/META(1)%FSC) + MYY(IX,IY) = NINT(XY(IX,IY)/META(2)%FSC) END IF END DO END DO @@ -4303,8 +2884,8 @@ !/SMC MXX(IX,IY) = MFILL !/SMC MYY(IX,IY) = MFILL !/SMC ELSE -!/SMC MXX(IX,IY) = NINT(XXK(IX,IY,IK)/FSC) -!/SMC MYY(IX,IY) = NINT(XYK(IX,IY,IK)/FSC) +!/SMC MXX(IX,IY) = NINT(XXK(IX,IY,IK)/META(1)%FSC) +!/SMC MYY(IX,IY) = NINT(XYK(IX,IY,IK)/META(2)%FSC) !/SMC END IF !/SMC END DO !/SMC END DO @@ -4332,8 +2913,8 @@ MXX(IX,IY) = MFILL MYY(IX,IY) = MFILL ELSE - MXX(IX,IY) = NINT(XXK(IX,IY,IK)/FSC) - MYY(IX,IY) = NINT(XYK(IX,IY,IK)/FSC) + MXX(IX,IY) = NINT(XXK(IX,IY,IK)/META(1)%FSC) + MYY(IX,IY) = NINT(XYK(IX,IY,IK)/META(2)%FSC) END IF END DO END DO @@ -4355,7 +2936,7 @@ !/SMC IF ( X1(IX,IY) .EQ. UNDEF ) THEN !/SMC MX1(IX,IY) = MFILL !/SMC ELSE -!/SMC MX1(IX,IY) = NINT(X1(IX,IY)/FSC) +!/SMC MX1(IX,IY) = NINT(X1(IX,IY)/META(1)%FSC) !/SMC END IF !/SMC END DO !/SMC END DO @@ -4374,7 +2955,7 @@ IF ( MAPSTA(IY,IX) .LE. 0 .OR.X1(IX,IY) .EQ. UNDEF ) THEN MX1(IX,IY) = MFILL ELSE - MX1(IX,IY) = NINT(X1(IX,IY)/FSC) + MX1(IX,IY) = NINT(X1(IX,IY)/META(1)%FSC) END IF END DO END DO @@ -4395,7 +2976,7 @@ !/SMC IF ( XK(IX,IY,IK) .EQ. UNDEF ) THEN !/SMC MX1(IX,IY) = MFILL !/SMC ELSE -!/SMC MX1(IX,IY) = NINT(XK(IX,IY,IK)/FSC) +!/SMC MX1(IX,IY) = NINT(XK(IX,IY,IK)/META(1)%FSC) !/SMC END IF !/SMC END DO !/SMC END DO @@ -4414,7 +2995,7 @@ IF ( MAPSTA(IY,IX) .LE. 0 .OR.XK(IX,IY,IK) .EQ. UNDEF ) THEN MX1(IX,IY) = MFILL ELSE - MX1(IX,IY) = NINT(XK(IX,IY,IK)/FSC) + MX1(IX,IY) = NINT(XK(IX,IY,IK)/META(1)%FSC) END IF END DO END DO @@ -5104,6 +3685,10 @@ !/SMC ENDIF ENDIF + ! ChrisB: Write user global attributes: + CALL WRITE_GLOBAL_META(NCID, IRET) + CALL CHECK_ERR(IRET) + open(unit=994,file='NC_globatt.inp',status='old',iostat=ICODE) IF (ICODE.EQ.0) THEN DO WHILE (ICODE.EQ.0) @@ -5129,7 +3714,7 @@ !============================================================================== - SUBROUTINE CHECK_ERR(IRET) + SUBROUTINE CHECK_ERROR(IRET, ILINE) USE NETCDF USE W3ODATMD, ONLY: NDSE @@ -5137,17 +3722,18 @@ IMPLICIT NONE - INTEGER IRET + INTEGER IRET, ILINE IF (IRET .NE. NF90_NOERR) THEN WRITE(NDSE,*) ' *** WAVEWATCH III ERROR IN OUNF :' + WRITE(NDSE,*) ' LINE NUMBER ', ILINE WRITE(NDSE,*) ' NETCDF ERROR MESSAGE: ' WRITE(NDSE,*) NF90_STRERROR(IRET) CALL EXTCDE ( 59 ) END IF RETURN - END SUBROUTINE CHECK_ERR + END SUBROUTINE CHECK_ERROR !============================================================================== diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 0afb37309..2d626a8e1 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -31,7 +31,8 @@ prop1D prop2D time fetch hur1mg \ multi01 multi02 multi03 multi04 multi05 \ hybd shwtr unstr pdlib smcgr rtd mudice infgrv \ - uost assim calendar oasis multi06 multi07 multi08 + uost assim calendar confignc oasis \ + multi06 multi07 multi08 do eval " value=\$$par" # echo "$par = $value" @@ -2062,6 +2063,13 @@ echo "$rtst -g C365 -w work_C365 -o netcdf $ww3 ww3_tc1" >> matrix.body fi + # Configurable netCDF metadata in ww3_ounf + if [ "$confignc" = 'y' ] && [ "$shrd" = 'y' ] + then + echo ' ' >> matrix.body + echo "$rtst -o netcdf $ww3 ww3_tnc1" >> matrix.body + fi + # --------------------------------------------------------------------------- # # 3. End of script output # # --------------------------------------------------------------------------- # diff --git a/regtests/bin/matrix.comp b/regtests/bin/matrix.comp index 609675914..072583e90 100755 --- a/regtests/bin/matrix.comp +++ b/regtests/bin/matrix.comp @@ -71,7 +71,7 @@ if [ "$ctest" = 'all' ] ; then - ctest=`ls -d ww3_tp1.? ww3_tp2.? ww3_ts? ww3_tbt1.? ww3_tbt2.? ww3_tic1.? ww3_tic2.? ww3_tig1.? ww3_tp2.1? ww3_ta? ww3_tr? mww3_test_0?` ; fi + ctest=`ls -d ww3_tp1.? ww3_tp2.? ww3_ts? ww3_tbt1.? ww3_tbt2.? ww3_tic1.? ww3_tic2.? ww3_tig1.? ww3_tp2.1? ww3_ta? ww3_tr? ww3_tnc? mww3_test_0?` ; fi echo "base directory : $base_dir" >> $home_dir/header.tmp echo "comp directory : $comp_dir" >> $home_dir/header.tmp echo "test(s) : " >> $home_dir/header.tmp diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index 3fcbbf010..5d6000516 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -141,6 +141,7 @@ export assim='y' # Restart spectra update export oasis='y' # Atmosphere, ocean, and ice coupling using oasis export calendar='y' # Calendar type + export confignc='y' # Configurable netCDF meta data (ww3_ounf) export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index 8f63de335..b121f8e10 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -157,6 +157,7 @@ fi export assim='y' # Restart spectra update export oasis='y' # Atmosphere, ocean, and ice coupling using OASIS export calendar='y' # Calendar type + export confignc='y' # Configurable netCDF meta data (ww3_ounf) export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/matrix_ukmo_cray b/regtests/bin/matrix_ukmo_cray index 2448edfe7..88196a935 100755 --- a/regtests/bin/matrix_ukmo_cray +++ b/regtests/bin/matrix_ukmo_cray @@ -126,6 +126,7 @@ fi export assim='y' # Restart spectra update export oasis='y' # Atmosphere, ocean, and ice coupling using oasis export calendar='y' # Calendar type + export confignc='y' # Configurable netCDF meta data (ww3_ounf) export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/matrix_zeus_HLT b/regtests/bin/matrix_zeus_HLT index 5a7328db4..a0da496cd 100755 --- a/regtests/bin/matrix_zeus_HLT +++ b/regtests/bin/matrix_zeus_HLT @@ -102,6 +102,7 @@ export assim='y' # Restart spectra update export oasis='y' # Atmosphere, ocean, and ice coupling using oasis export calendar='y' # Calendar type + export confignc='y' # Configurable netCDF meta data (ww3_ounf) export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/run_test b/regtests/bin/run_test index 0ff6b5495..b21a2bbea 100755 --- a/regtests/bin/run_test +++ b/regtests/bin/run_test @@ -1961,6 +1961,11 @@ do then # Add time counter if -T Tstart=`date +"%s.%2N"` fi + + # Link in ounfmeta.inp for ww3_ounf, if exists: + if [ $prog == 'ww3_ounf' ] && [ ! -z ${path_i}/ounfmeta.inp ]; then + ln -sf ${path_i}/ounfmeta.inp . + fi if $path_e/$prog > $ofile then diff --git a/regtests/ww3_tnc1/info b/regtests/ww3_tnc1/info new file mode 100644 index 000000000..90be5ac79 --- /dev/null +++ b/regtests/ww3_tnc1/info @@ -0,0 +1,25 @@ +############################################################################# +# # +# ww3_tnc1 Test script for WW-III, configurable netCDF metadata in # +# ww3_ounf progeam. # +# # +# Remarks : # +# # +# Uses the ounfmeta.inp file to override default variable attributes in # +# gridded output netCDF file produced by ww3_ounf. # +# # +# The aim of this test is to check the output from WW3_OUNF, so WW3_SHEL # +# is run with just source terms and no propagation over a small 11x11 grid # +# # +# Sample run_test commands : # +# ./bin/run_test -N -o netcdf ../model ww3_tnc1 # +# # +# Chris Bunney, UK Met Office, Nov 2020 # +# Last Mod : Nov 2020 # +# # +# 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. # +# # +############################################################################# diff --git a/regtests/ww3_tnc1/input/grid.bot b/regtests/ww3_tnc1/input/grid.bot new file mode 100644 index 000000000..002672997 --- /dev/null +++ b/regtests/ww3_tnc1/input/grid.bot @@ -0,0 +1,11 @@ +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 diff --git a/regtests/ww3_tnc1/input/grid.mask b/regtests/ww3_tnc1/input/grid.mask new file mode 100644 index 000000000..9a9d86031 --- /dev/null +++ b/regtests/ww3_tnc1/input/grid.mask @@ -0,0 +1,11 @@ +3 3 3 3 3 3 3 3 3 3 3 +3 1 1 1 1 1 1 1 1 1 3 +3 1 1 1 1 1 1 1 1 1 3 +3 1 1 1 1 1 1 1 1 1 3 +3 1 1 1 1 1 1 1 1 1 3 +3 1 1 1 1 1 1 1 1 1 3 +3 1 1 1 1 1 1 1 1 1 3 +3 1 1 1 1 1 1 1 1 1 3 +3 1 1 1 1 1 1 1 1 1 3 +3 1 1 1 1 1 1 1 1 1 3 +3 3 3 3 3 3 3 3 3 3 3 diff --git a/regtests/ww3_tnc1/input/namelists.nml b/regtests/ww3_tnc1/input/namelists.nml new file mode 100644 index 000000000..34e9d1d42 --- /dev/null +++ b/regtests/ww3_tnc1/input/namelists.nml @@ -0,0 +1,2 @@ + +&MISC FLAGTR = 0 / diff --git a/regtests/ww3_tnc1/input/ounfmeta.inp b/regtests/ww3_tnc1/input/ounfmeta.inp new file mode 100644 index 000000000..8f23e1ca3 --- /dev/null +++ b/regtests/ww3_tnc1/input/ounfmeta.inp @@ -0,0 +1,88 @@ +$ This is an input file for setting user attributes +$ in the netCDF file generated by ww3_ounf. +$ +$ This example overrides the default values with +$ attributes based on the CMEMS specification. + +META HS + ename=".vhm0" + varnm="VHM0" + long_name="Spectral significant wave height (Hm0)" + globwave_name= + vmin=0.0 + vmax=50.0 + $ an "extra" user attribute (of type "real"): + pointless_number = 99.9 r + +$ Fields can aslo be specified by their Group(IFI) and Field(IFJ) indices: +META 2 5 + ename=".vt0m1" + varnm="VT0M1" + $ attributes can also be specificed with the internal names (varXX) + varns="sea_surface_wave_mean_period_from_variance_spectral_density_inverse_frequency_moment" + varnl="Wave period at spectral peak / peak period (T0M1)" + varng="" + +META T02 + ename=".vtm02" + varnm="VTM02" + standard_name="sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment" + long_name="Spectral moments (0,2) wave period (Tm02)" + globwave_name="" + +$ Multi-component fields (like wind) can take an extra integer +$ parameter to select the component (1 - 3) +META WND 1 + $ First component of wind + ename=".w10" + varnm="WU10" + standard_name="eastward_wind" + +META WND 2 + $ Second component of wind + varnm="WV10" + standard_name="northward_wind" + +META DIR + ename=".vmdr" + varnm="VMDR" + long_name="Mean wave direction from (Mdir)" + globwave_name="" + +META DP + ename=".vpdr" + varnm="VPDR" + long_name="Peak wave direction" + globwave_name="" + +$ Partitioned parameters can use the placeholder: +META PHS + ename=".vhm0_" + varnm="VHM0_" + long_name="Spectral significant wind wave height" + globwave_name="" + +META PTP + ename=".vtpk_" + varnm="VTPK_" + long_name="Wind wave peak period" + globwave_name="" + +META PDIR + ename=".vmdr_" + varnm="VMDR_" + long_name="Mean wind wave direction from" + globwave_name="" + +META PT01 + ename=".vtm01_" + varnm="VTM01_" + long_name="sea_surface_wind_wave_mean_period_from_variance_spectral_density_first_frequency_moment" + long_name="Wind wave spectral moments (0,1) wave period (Tm01)" + globwave_name="" + +$ Special section for "global" netCDF parameters +META global + institution="Met Office" + grid_version=1.0 "r" + suite_version=44 "i" diff --git a/regtests/ww3_tnc1/input/switch b/regtests/ww3_tnc1/input/switch new file mode 100644 index 000000000..e3c8200e6 --- /dev/null +++ b/regtests/ww3_tnc1/input/switch @@ -0,0 +1 @@ +F90 SHRD LRB4 NOPA PR0 FLX0 LN1 ST3 STAB0 NL1 BT1 IC0 REF0 DB1 TR0 BS0 XX0 WNT1 WNX1 CRT1 CRX1 RWND MOPART NOGRB NC4 IS0 diff --git a/regtests/ww3_tnc1/input/ww3_grid.inp b/regtests/ww3_tnc1/input/ww3_grid.inp new file mode 100644 index 000000000..af839a8bf --- /dev/null +++ b/regtests/ww3_tnc1/input/ww3_grid.inp @@ -0,0 +1,38 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ Grid name (C*30, in quotes) +$ + 'NC META TEST' +$ +$ Frequency increment factor and first frequency (Hz) ---------------- $ + 1.1 0.04118 25 12 0. +$ +$ Set model flags ---------------------------------------------------- $ + F F F F F T +$ +$ Set time steps ----------------------------------------------------- $ + 1800. 0. 0. 15. +$ +$ Start of namelist input section ------------------------------------ $ + &MISC FLAGTR = 0 / +END OF NAMELISTS +$ +$ Define grid -------------------------------------------------------- $ + 'RECT' T 'NONE' + 11 11 + 0.1 0.1 1. + -0.5 -0.5 1. + -0.1 2.50 20 -100. 2 1 '(....)' 'NAME' '../input/grid.bot' +$ +$ Input boundary points and excluded points -------------------------- $ + 21 2 1 '(....)' 'NAME' '../input/grid.mask' +$ +$ Output boundary points --------------------------------------------- $ +$ Close list by defining line with 0 points (mandatory) +$ + 0. 0. 0. 0. 0 +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tnc1/input/ww3_grid.nml b/regtests/ww3_tnc1/input/ww3_grid.nml new file mode 100644 index 000000000..dd31df322 --- /dev/null +++ b/regtests/ww3_tnc1/input/ww3_grid.nml @@ -0,0 +1,222 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.10 + SPECTRUM%FREQ1 = 0.04118 + SPECTRUM%NK = 25 + SPECTRUM%NTH = 12 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 1800. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'NC META TEST' + GRID%NML = '../input/namelists.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.10 + GRID%DMIN = 2.5 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 11 + RECT%NY = 11 + RECT%SX = 0.1 + RECT%SY = 0.1 + RECT%X0 = -0.5 + RECT%Y0 = -0.5 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%IDLA = 2 + DEPTH%IDFM = 1 + DEPTH%SF = -100 + DEPTH%FILENAME = '../input/grid.bot' +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tnc1/input/ww3_ounf.inp b/regtests/ww3_tnc1/input/ww3_ounf.inp new file mode 100644 index 000000000..ebaf673ae --- /dev/null +++ b/regtests/ww3_tnc1/input/ww3_ounf.inp @@ -0,0 +1,34 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ + 20100101 000000 3600. 3 +$ +$ Fields requested --------------------------------------------------- $ + N + HS DIR WND T01 T02 PHS PTP +$ +$--------------------------------------------------------------------- $ +$ netCDF version [3,4] +$ and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ swell partitions [0 1 2 3 4 5] +$ variables in same file [T] or not [F] +$ + 3 2 + 0 1 2 + F +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +$ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] +$ + ww3. + 6 +$ +$ -------------------------------------------------------------------- $ +$ IX, IY range: + 1 11 1 11 +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tnc1/input/ww3_ounf.nml b/regtests/ww3_tnc1/input/ww3_ounf.nml new file mode 100644 index 000000000..45a49670a --- /dev/null +++ b/regtests/ww3_tnc1/input/ww3_ounf.nml @@ -0,0 +1,90 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '20100101 000000' + FIELD%TIMESTRIDE = '3600' + FIELD%TIMECOUNT = '3' + FIELD%LIST = 'HS DIR WND T01 T02 PHS PTP' + FIELD%SAMEFILE = F + FIELD%TYPE = 2 +/ + + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%NETCDF = 3 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via SMC_NML namelist +! +! * For SMC grids, IX0, IXN, IY0 and IYN from FILE_NML are not used. +! Two types of output are available: +! * TYPE=1: Flat 1D "seapoint" array of grid cells. +! * TYPE=2: Re-gridded regular grid with cell sizes being an integer +! * multiple of the smallest SMC grid cells size. +! +! * Note that the first/last longitudes and latitudes will be adjusted +! to snap to the underlying SMC grid edges. CELFAC is only used for +! type 2 output and defines the output cell sizes as an integer +! multiple of the smallest SMC Grid cell size. CELFAC should be a +! power of 2, e.g: 1,2,4,8,16, etc... +! +! * namelist must be terminated with / +! * definitions & defaults: +! SMC%TYPE = 1 ! SMC Grid type (1 or 2) +! SMC%SXO = -999.9 ! First longitude +! SMC%EXO = -999.9 ! Last longitude +! SMC%SYO = -999.9 ! First latitude +! SMC%EYO = -999.9 ! Last latitude +! SMC%CELFAC = 1 ! Cell size factor (SMCTYPE=2 only) +! SMC%NOVAL = UNDEF ! Fill value for wet cells with no data +! -------------------------------------------------------------------- ! +&SMC_NML +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + diff --git a/regtests/ww3_tnc1/input/ww3_shel.inp b/regtests/ww3_tnc1/input/ww3_shel.inp new file mode 100644 index 000000000..5f98154d7 --- /dev/null +++ b/regtests/ww3_tnc1/input/ww3_shel.inp @@ -0,0 +1,50 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shel input file $ +$ -------------------------------------------------------------------- $ +$ T/F flag for definition as a homogeneous field. + F F Water levels + F F Currents + T T Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ +$ Time frame of calculations ----------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ - Ending time in yyyymmdd hhmmss format. +$ + 20100101 000000 + 20100101 020000 +$ +$ Define output data ------------------------------------------------- $ + 1 +$ +$ Type 1 : Fields of mean wave parameters + 20100101 000000 3600 20100101 020000 + N + HS DIR WND T01 T02 PHS PTP +$ +$ Type 2 : Point output + 20100101 000000 0 20100101 000000 +$ +$ Type 3 : Output along track. + 20100101 000000 0 20100101 000000 +$ +$ Type 4 : Restart files (no additional data required). + 20100101 000000 0 20100101 000000 F F +$ +$ Type 5 : Boundary data (no additional data required). + 20100101 000000 0 20100101 000000 +$ +$ Type 6 : Separated wave field data (dummy for now). + 20100101 000000 0 20100101 000000 +$ +$ +$ Homogeneous field data --------------------------------------------- $ + 'WND' 20100101 000000 10. 90. 0.0 + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tnc1/input/ww3_shel.nml b/regtests/ww3_tnc1/input/ww3_shel.nml new file mode 100644 index 000000000..3133c5583 --- /dev/null +++ b/regtests/ww3_tnc1/input/ww3_shel.nml @@ -0,0 +1,369 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '20100101 000000' + DOMAIN%STOP = '20100101 020000' +/ + + + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'H' +/ + + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 T0M1 T0M1 Mean wave period (Tm0,-1). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Dominant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PDP PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (m-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (m0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (m0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! F F 6 12 USSP USP Partitioned surface Stokes drift +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * Coupling at T+0 (extra fields in the restart needed) +! +! * extra fields to be written to the restart: +! - The list includes all fields sent by coupling exchange only +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! TYPE%COUPLING%COUPLET0 = .FALSE. +! TYPE%RESTART%EXTRA = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS DIR WND T01 T02 PHS PTP' +/ + + + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD%START = '20100101 000000' + DATE%FIELD%STRIDE = '3600' + DATE%FIELD%STOP = '20100101 020000' + DATE%POINT%START = '20100101 000000' + DATE%POINT%STRIDE = '0' + DATE%POINT%STOP = '20100101 000000' + DATE%RESTART = '20100101 000000' '0' '20100101 000000' +/ + + + + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML + HOMOG_COUNT%N_WND = 1 +/ + +&HOMOG_INPUT_NML + HOMOG_INPUT(1)%NAME = 'WND' + HOMOG_INPUT(1)%DATE ='20100101 000000' + HOMOG_INPUT(1)%VALUE1 = 10. + HOMOG_INPUT(1)%VALUE2 = 90. +/ + + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! + + + + + + From a89e2a6339a016522d3a84188756d0a4bb11be87 Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Mon, 7 Dec 2020 15:07:19 +0000 Subject: [PATCH 59/84] develop: Updated version number to 7.12 (#271) Also retrospectively added missing version 7.10 values to relevant change log messages. --- guide/guide.tex | 2 +- manual/defs.tex | 2 +- model/ftn/w3fldsmd.ftn | 2 +- model/ftn/w3initmd.ftn | 4 ++-- model/ftn/w3iogomd.ftn | 12 ++++++------ model/ftn/w3iorsmd.ftn | 2 +- model/ftn/w3nmlmultimd.ftn | 4 ++-- model/ftn/w3oacpmd.ftn | 2 +- model/ftn/w3odatmd.ftn | 4 ++-- model/ftn/w3ounfmetamd.ftn | 34 +++++++++++++++++----------------- model/ftn/w3wavemd.ftn | 2 +- model/ftn/ww3_ounf.ftn | 4 ++-- model/ftn/ww3_shel.ftn | 2 +- 13 files changed, 38 insertions(+), 38 deletions(-) diff --git a/guide/guide.tex b/guide/guide.tex index 714cb4c2c..dd235a5fb 100644 --- a/guide/guide.tex +++ b/guide/guide.tex @@ -17,7 +17,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % proper link to most recent manual % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newcommand{\manver}{6.07} +\newcommand{\manver}{7.12} \newcommand{\manref}{ww3man2019} \newcommand{\manregtestsec}{5.6} diff --git a/manual/defs.tex b/manual/defs.tex index 07839d71d..44719b2c9 100644 --- a/manual/defs.tex +++ b/manual/defs.tex @@ -1,4 +1,4 @@ -\newcommand{\WWver}{7.00} +\newcommand{\WWver}{7.12} \newcommand{\guidever}{1.2} \newcommand{\guideref}{tol:MMABguide} \newcommand{\genever}{1.5} diff --git a/model/ftn/w3fldsmd.ftn b/model/ftn/w3fldsmd.ftn index e0478f5de..d936847d9 100644 --- a/model/ftn/w3fldsmd.ftn +++ b/model/ftn/w3fldsmd.ftn @@ -929,7 +929,7 @@ !/ 26-Dec-2012 : Modified obsolete declarations. ( version 4.11 ) !/ 24-Apr-2015 : Adding OASIS coupling calls ( version 5.07 ) !/ (M. Accensi & F. Ardhuin, IFREMER) -!/ 25-Sep-2020 : Receive coupled fields at T+0 ( version 7.xx ) +!/ 25-Sep-2020 : Receive coupled fields at T+0 ( version 7.10 ) !/ ! 1. Purpose : ! diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 051215bd0..ee5927dd5 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -57,7 +57,7 @@ !/ 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 ) -!/ 25-Sep-2020 : Extra fields for coupling restart ( version 7.xx ) +!/ 25-Sep-2020 : Extra fields for coupling restart ( version 7.10 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -110,7 +110,7 @@ PUBLIC !/ REAL, PARAMETER :: CRITOS = 15. - CHARACTER(LEN=10), PARAMETER :: WWVER = '7.00 ' + CHARACTER(LEN=10), PARAMETER :: WWVER = '7.12 ' CHARACTER(LEN=512), PARAMETER :: SWITCHES = & 'PUT_SW1' // & 'PUT_SW2' // & diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 9321ef94c..4320f39c4 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -55,7 +55,7 @@ !/ calculations. (J Dykes, NRL) !/ 04-Oct-2019 : Optional one file per output stride ( version 7.00 ) !/ (Roberto Padilla-Hernandez & J.H. Alves) -!/ 03-Nov-2020 : Factored out NAME matching into ( version 7.XX ) +!/ 03-Nov-2020 : Factored out NAME matching into ( version 7.12 ) !/ seperate subroutine. (C. Bunney) !/ !/ Copyright 2009-2014 National Weather Service (NWS), @@ -292,8 +292,8 @@ !/ 15-Apr-2013 : Origination. ( version 4.10 ) !/ 31-Jan-2014 : Bug fix warning output (Tolman). ( version 4.18 ) !/ 30-Apr-2014 : Add th2m and sth2m calculation ( version 5.01 ) -!/ 25-Sep-2020 : Calculate FLG1D for any processor ( version 7.xx ) -!/ 03-Nov-2020 : Factored out NAME matching into ( version 7.XX ) +!/ 25-Sep-2020 : Calculate FLG1D for any processor ( version 7.10 ) +!/ 03-Nov-2020 : Factored out NAME matching into ( version 7.12 ) !/ seperate subroutine (C. Bunney) !/ ! 1. Purpose : @@ -522,8 +522,8 @@ !/ 31-Jan-2014 : Bug fix warning output (Tolman). ( version 4.18 ) !/ 30-Apr-2014 : Add th2m and sth2m calculation ( version 5.01 ) !/ 17-Feb-2016 : New version for namelist use ( version 5.11 ) -!/ 25-Sep-2020 : Calculate FLG1D for any processor ( version 7.xx ) -!/ 03-Nov-2020 : Factored out NAME matching into ( version 7.XX ) +!/ 25-Sep-2020 : Calculate FLG1D for any processor ( version 7.10 ) +!/ 03-Nov-2020 : Factored out NAME matching into ( version 7.12 ) !/ seperate subroutine (C. Bunney) !/ ! 1. Purpose : @@ -675,7 +675,7 @@ !/ | Last update : 03-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 03-Nov-2020 : Origination. ( version 7.XX ) +!/ 03-Nov-2020 : Origination. ( version 7.12 ) ! ! 1. Purpose : ! diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index 3a3ca9c40..615abe3ec 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -103,7 +103,7 @@ !/ 19-Dec-2019 : Optional second stream of ( version 7.00 ) !/ restart files !/ (Roberto Padilla-Hernandez & J.H. Alves) -!/ 25-Sep-2020 : Extra fields for coupled restart ( version 7.xx ) +!/ 25-Sep-2020 : Extra fields for coupled restart ( version 7.10 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), diff --git a/model/ftn/w3nmlmultimd.ftn b/model/ftn/w3nmlmultimd.ftn index 497d4aeea..82f5a04a8 100644 --- a/model/ftn/w3nmlmultimd.ftn +++ b/model/ftn/w3nmlmultimd.ftn @@ -917,7 +917,7 @@ !/ !/ 09-Aug-2016 : Adding comments ( version 5.12 ) !/ 15-May-2018 : Update namelist ( version 6.05 ) -!/ 25-Sep-2020 : Update namelist ( version 7.xx ) +!/ 25-Sep-2020 : Update namelist ( version 7.10 ) !/ ! 1. Purpose : ! @@ -1716,7 +1716,7 @@ !/ !/ 09-Aug-2016 : Adding comments ( version 5.12 ) !/ 15-May-2018 : Update namelist ( version 6.05 ) -!/ 25-Sep-2020 : Update namelist ( version 7.xx ) +!/ 25-Sep-2020 : Update namelist ( version 7.10 ) !/ ! 1. Purpose : ! diff --git a/model/ftn/w3oacpmd.ftn b/model/ftn/w3oacpmd.ftn index a0f132101..8f9fd8c2e 100644 --- a/model/ftn/w3oacpmd.ftn +++ b/model/ftn/w3oacpmd.ftn @@ -12,7 +12,7 @@ !/ July-2013 : Origination. ( version 4.18 ) !/ For upgrades see subroutines. !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 ) -!/ 25-Sep-2020 : Coupling at T+0 support ( version 7.xx ) +!/ 25-Sep-2020 : Coupling at T+0 support ( version 7.10 ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 549248f61..175fe1f71 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -43,7 +43,7 @@ !/ 27-Jul-2018 : Added PTMETH and PTFCUT variables ( version 6.05 ) !/ for alternative partition methods. !/ (C. Bunney, UKMO) -!/ 25-Sep-2020 : Flags for coupling restart ( version 7.xx ) +!/ 25-Sep-2020 : Flags for coupling restart ( version 7.10 ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -1399,7 +1399,7 @@ !/ 27-Jul-2010 : Add NKI, NTHI, XFRI, FR1I, TH1I. ( version 3.14.3 ) !/ 19-Dec-2012 : Move NOSWLL to data structure. ( version 4.11 ) !/ 12-Dec-2014 : Modify instanciation of NRQTR ( version 5.04 ) -!/ 25-Sep-2020 : Flags for coupling restart ( version 7.xx ) +!/ 25-Sep-2020 : Flags for coupling restart ( version 7.10 ) !/ ! 1. Purpose : ! diff --git a/model/ftn/w3ounfmetamd.ftn b/model/ftn/w3ounfmetamd.ftn index d0b82ec58..d968427e1 100644 --- a/model/ftn/w3ounfmetamd.ftn +++ b/model/ftn/w3ounfmetamd.ftn @@ -9,7 +9,7 @@ !/ | Last update : 02-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 02-Nov-2020 : Creation ( version 7.XX ) +!/ 02-Nov-2020 : Creation ( version 7.12 ) !/ ! 1. Purpose : ! @@ -180,7 +180,7 @@ !/ | Last update : 09-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -259,7 +259,7 @@ !/ | Last update : 09-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -297,7 +297,7 @@ !/ | Last update : 09-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -400,7 +400,7 @@ !/ | Last update : 02-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 02-Nov-2020 : Creation ( version 7.XX ) +!/ 02-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -449,7 +449,7 @@ !/ | Last update : 09-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -597,7 +597,7 @@ !/ | Last update : 09-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -703,7 +703,7 @@ !/ | Last update : 09-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -886,7 +886,7 @@ !/ | Last update : 09-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -985,7 +985,7 @@ !/ | Last update : 09-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -1088,7 +1088,7 @@ !/ | Last update : 02-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -1173,7 +1173,7 @@ !/ | Last update : 02-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -1227,7 +1227,7 @@ !/ | Last update : 02-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -1273,7 +1273,7 @@ !/ | Last update : 02-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -1405,7 +1405,7 @@ !/ | Last update : 09-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -1478,7 +1478,7 @@ !/ | Last update : 02-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.XX ) +!/ 09-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : @@ -1521,7 +1521,7 @@ !/ | Last update : 02-Nov-2020 | !/ +-----------------------------------+ !/ -!/ 02-Nov-2020 : Creation ( version 7.XX ) +!/ 02-Nov-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 48d4f1f63..45e5e320d 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -250,7 +250,7 @@ !/ OASIS/DEBUGINIT/DEBUGSRC/DEBUGRUN/DEBUGCOH !/ DEBUGIOBP/DEBUGIOBC ( version 6.04 ) !/ 14-Sep-2018 : Remove PALM implementation ( version 6.06 ) -!/ 25-Sep-2020 : Oasis coupling at T+0 ( version 7.xx ) +!/ 25-Sep-2020 : Oasis coupling at T+0 ( version 7.10 ) !/ ! 1. Purpose : ! diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 8958d6b91..4f91404c4 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -36,7 +36,7 @@ !/ 18-Jun-2020 : Support for 360-day calendar. ( version 7.08 ) !/ 07-Oct-2019 : RTD option with standard lat-lon !/ grid when nesting to rotated grid ( version 7.11 ) -!/ 03-Nov-2020 : Moved NetCDF metadata to separate ( version 7.XX ) +!/ 03-Nov-2020 : Moved NetCDF metadata to separate ( version 7.12 ) !/ module. !/ !/ Copyright 2009-2013 National Weather Service (NWS), @@ -697,7 +697,7 @@ !/ 30-Apr-2014 : Correct group3 freq dim. ( version 5.00 ) !/ 23-May-2014 : Adding ice fluxes to W3SRCE ( version 5.01 ) !/ 14-Oct-2014 : Keep the output files opened ( version 5.01 ) -!/ 03-Nov-2020 : NetCDF metadata moved to separate ( version 7.XX ) +!/ 03-Nov-2020 : NetCDF metadata moved to separate ( version 7.12 ) !/ module. !/ ! 1. Purpose : diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index c69a5f4ca..4ce54edd3 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -54,7 +54,7 @@ !/ 04-Oct-2019 : Inline Output implementation ( version 6.07 ) !/ (Roberto Padilla-Hernandez) !/ 16-Jul-2020 : Variable coupling time step ( version 7.08 ) -!/ 25-Sep-2020 : Oasis coupling at T+0 ( version 7.xx ) +!/ 25-Sep-2020 : Oasis coupling at T+0 ( version 7.10 ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights From 79e4ae83e83a56645092773de1aef0e69d6fad8d Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Wed, 23 Dec 2020 15:06:53 +0000 Subject: [PATCH 60/84] WW3_OUNF: Fixed indices in VARID (#273) * VARID: Set fixed index values for all dimension/auxiliary variables to facilitate adding new variables. Indices 1 - 20 are now reserved for dimension/auxiliary variables. Gridded output field variable IDs start at index 21. * Fixed incorrect VARID --- model/ftn/ww3_ounf.ftn | 149 ++++++++++++++++++++++++----------------- 1 file changed, 87 insertions(+), 62 deletions(-) diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 4f91404c4..72107568b 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -38,6 +38,7 @@ !/ grid when nesting to rotated grid ( version 7.11 ) !/ 03-Nov-2020 : Moved NetCDF metadata to separate ( version 7.12 ) !/ module. +!/ 09-Dec-2020 : Set fixed values for VARID indices ( version 7.12 ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -93,6 +94,29 @@ ! ! 7. Remarks : ! +! The VARID array stores netCDF variable IDs for all variables in +! file. The first 20 elements are reserved for dimension/auxiliary +! variables as defined below: +! +! Index Variable +! ===== ======== +! 1 Lon +! 2 Lat +! 3 Time +! 4 Tri (UGRD) +! 5 SMC CX (SMC) +! 6 SMC CY (SMC) +! 7 Standard longitude (SMC/RTD) +! 8 Standard latitude (SMC/RTD) +! 9 Coordinate reference system (upcoming feature / RTD) +! 10 Freq (extradim) +! 11 Forecast period (upcoming feature) +! 12 Forecast reference time (upcoming feature) +! 13-19 [Reserved for future use] +! 20 MAPSTA +! +! Indices 21 - 300 are for storage of field output variable IDs. +! ! 8. Structure : ! ! See source code. @@ -699,6 +723,7 @@ !/ 14-Oct-2014 : Keep the output files opened ( version 5.01 ) !/ 03-Nov-2020 : NetCDF metadata moved to separate ( version 7.12 ) !/ module. +!/ 09-Dec-2020 : Set fixed values for VARID indices ( version 7.12 ) !/ ! 1. Purpose : ! @@ -792,7 +817,7 @@ INTEGER :: S1, S2, S4, S5, NCID, OLDNCID, & MAPSTAOUT, NDSDAT, & NFIELD, N, IRET, IK, EXTRADIM, IVAR, & - IVAR1, IDVAROUT + IVAR1 INTEGER :: DIMID(6), VARID(300), START(4), & COUNT(4), DIMLN(6),START1D(2), & COUNT1D(2), DIMFIELD(3), & @@ -2083,7 +2108,7 @@ ENDIF ! Defines index of first field variable - IVAR1=3+EXTRADIM+(COORDTYPE-1)+MAPSTAOUT + IVAR1=21 ! 2.4.1 Save the id of the previous file @@ -2413,9 +2438,9 @@ !/SMC CALL CHECK_ERR(IRET) !/SMC IF(SMCTYPE .EQ. 1) THEN !/SMC ! For type 1 SCM file also put lat/lons and cell sizes: -!/SMC IRET=NF90_PUT_VAR(NCID,VARID(299),SMCCX) +!/SMC IRET=NF90_PUT_VAR(NCID,VARID(5),SMCCX) !/SMC CALL CHECK_ERR(IRET) -!/SMC IRET=NF90_PUT_VAR(NCID,VARID(300),SMCCY) +!/SMC IRET=NF90_PUT_VAR(NCID,VARID(6),SMCCY) !/SMC CALL CHECK_ERR(IRET) !/SMC ENDIF ELSE ! SMCGRD @@ -2425,9 +2450,9 @@ CALL CHECK_ERR(IRET) ENDIF ! SMCGRD !/RTD IF ( RTDL ) THEN -!/RTD IRET=NF90_PUT_VAR(NCID,VARID(291),LON2D(IX1:IXN,IY1:IYN)) +!/RTD IRET=NF90_PUT_VAR(NCID,VARID(7),LON2D(IX1:IXN,IY1:IYN)) !/RTD CALL CHECK_ERR(IRET) -!/RTD IRET=NF90_PUT_VAR(NCID,VARID(292),LAT2D(IX1:IXN,IY1:IYN)) +!/RTD IRET=NF90_PUT_VAR(NCID,VARID(8),LAT2D(IX1:IXN,IY1:IYN)) !/RTD CALL CHECK_ERR(IRET) !/RTD END IF END IF @@ -2461,29 +2486,28 @@ FREQ(i)=SIG(I1F-1+i)*TPIINV END DO ENDIF - IRET=NF90_PUT_VAR(NCID,VARID(3),FREQ) + IRET=NF90_PUT_VAR(NCID,VARID(10),FREQ) CALL CHECK_ERR(IRET) DEALLOCATE(FREQ) END IF ! Writes triangles to netcdf file IF (GTYPE.EQ.UNGTYPE) THEN - IRET=NF90_PUT_VAR(NCID,VARID(4+EXTRADIM),TRIGP2) + IRET=NF90_PUT_VAR(NCID,VARID(4),TRIGP2) CALL CHECK_ERR(IRET) END IF ! Writes status map array at variable index 2+1+coordtype+idim-4 IF (MAPSTAOUT.EQ.1) THEN - IDVAROUT=VARID(3+EXTRADIM+(COORDTYPE-1)+MAPSTAOUT) START(1)=1 START(2)=1 COUNT(1)=IXN-IX1+1 COUNT(2)=IYN-IY1+1 IF (GTYPE.NE.UNGTYPE) THEN - IRET=NF90_PUT_VAR(NCID,IDVAROUT,MAPOUT(IX1:IXN,IY1:IYN), & + IRET=NF90_PUT_VAR(NCID,VARID(20),MAPOUT(IX1:IXN,IY1:IYN), & (/START(1:2)/),(/COUNT(1:2)/)) ELSE - IRET=NF90_PUT_VAR(NCID,IDVAROUT,MAPOUT(IX1:IXN,1),(/START(1)/),(/COUNT(1)/)) + IRET=NF90_PUT_VAR(NCID,VARID(20),MAPOUT(IX1:IXN,1),(/START(1)/),(/COUNT(1)/)) ENDIF CALL CHECK_ERR(IRET) END IF @@ -2579,7 +2603,7 @@ ! If it is an unstructured mesh IF (GTYPE.EQ.UNGTYPE) THEN - IRET=NF90_INQ_VARID (NCID, 'tri', VARID(4+EXTRADIM)) + IRET=NF90_INQ_VARID (NCID, 'tri', VARID(4)) CALL CHECK_ERR(IRET) ! If it is a regular grid ELSE @@ -2611,7 +2635,7 @@ IRET=NF90_INQ_DIMID (NCID, 'time', DIMID(4+EXTRADIM)) IRET=NF90_INQUIRE_DIMENSION (NCID, DIMID(4+EXTRADIM),len=N) CALL CHECK_ERR(IRET) - IRET=NF90_INQ_VARID (NCID, 'time', VARID(3+EXTRADIM)) + IRET=NF90_INQ_VARID (NCID, 'time', VARID(3)) ! Get the dimension f IF (EXTRADIM.EQ.1) IRET=NF90_INQ_DIMID (NCID, 'f', DIMID(4)) @@ -2748,8 +2772,9 @@ ! Puts time in NetCDF file IF((IFI.EQ.I1.AND.IFJ.EQ.J1.AND.TOGETHER) & .OR.(.NOT.TOGETHER).OR.FLFRQ) THEN - IVAR1=3+EXTRADIM+(COORDTYPE-1)+MAPSTAOUT - IRET=NF90_PUT_VAR(NCID,VARID(3+EXTRADIM),OUTJULDAY,(/N/)) + !IVAR1=3+EXTRADIM+(COORDTYPE-1)+MAPSTAOUT + IVAR1 = 21 + IRET=NF90_PUT_VAR(NCID,VARID(3),OUTJULDAY,(/N/)) CALL CHECK_ERR(IRET) END IF ! @@ -3437,14 +3462,14 @@ !/SMC CALL CHECK_ERR(IRET) !/SMC !/SMC ! For seapoint style SMC grid, also define out cell size variables: -!/SMC IRET = NF90_DEF_VAR(NCID, 'cx', NF90_SHORT, DIMID(2), VARID(299)) +!/SMC IRET = NF90_DEF_VAR(NCID, 'cx', NF90_SHORT, DIMID(2), VARID(5)) !/SMC CALL CHECK_ERR(IRET) !/SMC IRET = NF90_PUT_ATT(NCID, VARID(299), 'long_name', & !/SMC 'longitude cell size factor') !/SMC IRET = NF90_PUT_ATT(NCID, VARID(299), 'valid_min', 1) !/SMC IRET = NF90_PUT_ATT(NCID, VARID(299), 'valid_max', 256) !/SMC -!/SMC IRET = NF90_DEF_VAR(NCID, 'cy', NF90_SHORT, DIMID(2), VARID(300)) +!/SMC IRET = NF90_DEF_VAR(NCID, 'cy', NF90_SHORT, DIMID(2), VARID(6)) !/SMC call CHECK_ERR(IRET) !/SMC IRET = NF90_PUT_ATT(NCID, VARID(300), 'long_name', & !/SMC 'latitude cell size factor') @@ -3499,55 +3524,58 @@ !/SMC IF(SMCTYPE .EQ. 1) THEN !/RTD ! For SMC grid type 1, standard lat/lon variables are 1D: !/RTD IRET = NF90_DEF_VAR(NCID, 'standard_longitude', NF90_FLOAT, & -!/RTD (/ DIMID(2) /), VARID(291)) +!/RTD (/ DIMID(2) /), VARID(7)) !/RTD call CHECK_ERR(IRET) !/RTD !/RTD IRET = NF90_DEF_VAR(NCID, 'standard_latitude', NF90_FLOAT, & -!/RTD (/ DIMID(2) /), VARID(292)) +!/RTD (/ DIMID(2) /), VARID(8)) !/RTD call CHECK_ERR(IRET) !/SMC ELSE !/RTD IRET = NF90_DEF_VAR(NCID, 'standard_longitude', NF90_FLOAT, & -!/RTD (/ DIMID(2), DIMID(3)/), VARID(291)) +!/RTD (/ DIMID(2), DIMID(3)/), VARID(7)) !/RTD call CHECK_ERR(IRET) !/RTD !/RTD IRET = NF90_DEF_VAR(NCID, 'standard_latitude', NF90_FLOAT, & -!/RTD (/ DIMID(2), DIMID(3)/), VARID(292)) +!/RTD (/ DIMID(2), DIMID(3)/), VARID(8)) !/RTD call CHECK_ERR(IRET) !/SMC ENDIF ELSE !/RTD IF ( RTDL ) THEN !/RTD !Add secondary coordinate system linking rotated grid back to standard lat-lon !/RTD IRET = NF90_DEF_VAR(NCID, 'standard_longitude', NF90_FLOAT, (/ DIMID(2), DIMID(3)/), & -!/RTD VARID(291)) +!/RTD VARID(7)) !/RTD call CHECK_ERR(IRET) !/RTD !/RTD IRET = NF90_DEF_VAR(NCID, 'standard_latitude', NF90_FLOAT, (/ DIMID(2), DIMID(3)/), & -!/RTD VARID(292)) +!/RTD VARID(8)) !/RTD call CHECK_ERR(IRET) !/RTD END IF ENDIF ! SMCGRD !/RTD !/RTD IF ( RTDL ) THEN !/RTD ! Attributes for standard_longitude: -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(291),'units','degree_east') -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(291),'long_name','longitude') -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(291),'standard_name','longitude') -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(291),'valid_min',-180.0) -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(291),'valid_max',360.) +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(7),'units','degree_east') +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(7),'long_name','longitude') +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(7),'standard_name','longitude') +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(7),'valid_min',-180.0) +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(7),'valid_max',360.) !/RTD !/RTD ! Attributes for standard_latitude: -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(292),'units','degree_north') -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(292),'long_name','latitude') -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(292),'standard_name','latitude') -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(292),'valid_min',-90.0) -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(292),'valid_max',180.) +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'units','degree_north') +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'long_name','latitude') +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'standard_name','latitude') +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'valid_min',-90.0) +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'valid_max',180.) !/RTD !/RTD ! Add rotated pole grid mapping variable (dummy scalar variable !/RTD ! used to simply store rotated pole information; see CF1.6 conventions). -!/RTD IRET=NF90_DEF_VAR(NCID, 'rotated_pole', NF90_CHAR, VARID(293)) -!/RTD IRET=NF90_PUT_ATT(NCID, VARID(293), 'grid_north_pole_latitude',POLAT) -!/RTD IRET=NF90_PUT_ATT(NCID, VARID(293), 'grid_north_pole_longitude',POLON) -!/RTD IRET=NF90_PUT_ATT(NCID, VARID(293), 'grid_mapping_name', & +!/RTD ! TODO: FUTURE WW3_OUNF DEVELOPMENT WILL ALLOW USER TO DEFINE THE +!/RTD ! COORDINATE REFERENCE SYSTEM - THIS WILL REQUIRE THE BELOW TO BE +!/RTD ! HANDLED DIFFERENTLY. C. Bunney. +!/RTD IRET=NF90_DEF_VAR(NCID, 'rotated_pole', NF90_CHAR, VARID(12)) +!/RTD IRET=NF90_PUT_ATT(NCID, VARID(12), 'grid_north_pole_latitude',POLAT) +!/RTD IRET=NF90_PUT_ATT(NCID, VARID(12), 'grid_north_pole_longitude',POLON) +!/RTD IRET=NF90_PUT_ATT(NCID, VARID(12), 'grid_mapping_name', & !/RTD 'rotated_latitude_longitude') !/RTD END IF ! @@ -3581,8 +3609,8 @@ ! frequency ! if (EXTRADIM.EQ.1) THEN - IRET = NF90_DEF_VAR(NCID, 'f', NF90_FLOAT, DIMID(4), VARID(3)) -!/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(3), 1, 1, DEFLATE) + IRET = NF90_DEF_VAR(NCID, 'f', NF90_FLOAT, DIMID(4), VARID(10)) +!/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(10), 1, 1, DEFLATE) CALL CHECK_ERR(IRET) IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','wave_frequency') CALL CHECK_ERR(IRET) @@ -3598,59 +3626,56 @@ ! ! time ! - IRET = NF90_DEF_VAR(NCID, 'time', NF90_DOUBLE, DIMID(4+EXTRADIM), VARID(3+EXTRADIM)) -!/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(3+EXTRADIM), 1, 1, DEFLATE) + IRET = NF90_DEF_VAR(NCID, 'time', NF90_DOUBLE, DIMID(4+EXTRADIM), VARID(3)) +!/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(3), 1, 1, DEFLATE) CALL CHECK_ERR(IRET) SELECT CASE (TRIM(CALTYPE)) CASE ('360_day') - IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'long_name','time in 360 day calendar') + IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','time in 360 day calendar') CASE ('365_day') - IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'long_name','time in 365 day calendar') + IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','time in 365 day calendar') CASE ('standard') - IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'long_name','julian day (UT)') + IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','julian day (UT)') END SELECT CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'standard_name','time') + IRET=NF90_PUT_ATT(NCID,VARID(3),'standard_name','time') CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'units','days since 1990-01-01 00:00:00') + IRET=NF90_PUT_ATT(NCID,VARID(3),'units','days since 1990-01-01 00:00:00') CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'conventions', & + IRET=NF90_PUT_ATT(NCID,VARID(3),'conventions', & 'relative julian days with decimal part (as parts of the day )') - IRET=NF90_PUT_ATT(NCID,VARID(3+EXTRADIM),'axis','T') + IRET=NF90_PUT_ATT(NCID,VARID(3),'axis','T') CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3+extradim),'calendar',TRIM(CALTYPE)) + IRET=NF90_PUT_ATT(NCID,VARID(3),'calendar',TRIM(CALTYPE)) CALL CHECK_ERR(IRET) ! ! triangles for irregular grids ! IF (GTYPE.EQ.UNGTYPE) THEN - IVAR=3+EXTRADIM+1 DIMTRI(1)=DIMID(4+EXTRADIM+1) DIMTRI(2)=DIMID(3) - IRET = NF90_DEF_VAR(NCID, 'tri', NF90_INT, DIMTRI, VARID(IVAR)) -!/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) + IRET = NF90_DEF_VAR(NCID, 'tri', NF90_INT, DIMTRI, VARID(4)) +!/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(4), 1, 1, DEFLATE) END IF ! ! Status map: useful for grid combination ! IF (MAPSTAOUT.EQ.1) THEN IF (GTYPE.EQ.UNGTYPE) THEN - IVAR=5+EXTRADIM - IRET = NF90_DEF_VAR(NCID,'MAPSTA', NF90_SHORT,(/ DIMID(2) /), VARID(IVAR)) + IRET = NF90_DEF_VAR(NCID,'MAPSTA', NF90_SHORT,(/ DIMID(2) /), VARID(20)) ELSE - IVAR=4+EXTRADIM IRET = NF90_DEF_VAR(NCID,'MAPSTA', NF90_SHORT,(/ DIMID(2) , DIMID(3) /), & - VARID(IVAR)) + VARID(20)) ENDIF -!/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(IVAR), 1, 1, DEFLATE) +!/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(20), 1, 1, DEFLATE) ! - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'long_name','status map') - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'standard_name','status map') - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'units','1') + IRET=NF90_PUT_ATT(NCID,VARID(20),'long_name','status map') + IRET=NF90_PUT_ATT(NCID,VARID(20),'standard_name','status map') + IRET=NF90_PUT_ATT(NCID,VARID(20),'units','1') CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'valid_min',-32) + IRET=NF90_PUT_ATT(NCID,VARID(20),'valid_min',-32) CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'valid_max',32) + IRET=NF90_PUT_ATT(NCID,VARID(20),'valid_max',32) CALL CHECK_ERR(IRET) END IF From 7fa771b5998137327017be98e8650019d39b6269 Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Wed, 13 Jan 2021 11:11:55 -0500 Subject: [PATCH 61/84] Feature/gfsprod (#297) * Added boundary checks to the SMC grid input files for ww3_grid, to ensure they comply with the limits of the nameslist. * Fb 360 calendar (#8) Changes to add support to 360-day and 365-day (no leap year) calendar - see ticket #209 * Additional CALTYPE namelist parameter in MISC section * New ww3_tc1 regtest. * RTD support for ww3_boun[dc] (#10) * Updated ww3_bound and ww3_bounc to handle model grids formulated on a rotated pole. * Manual and nml/inp files to updated clarify that ww3_bound/ww3_bounc only accept input spectra formulated on a standard pole grid. * Fb coupling time (#9) Updates to allow a coupling time step that is different from the model time step. * Includes new regtest (in ww3_tp2.14) for non-default oasis time step. * ww3_tp2.14 regtest added to matrix.base. * bug fix for ukmet development * Updating develop with a change to allow code build using non-standard NetCDF libraries using alphabetical characters in their version name. Co-authored-by: lewis.sampson Co-authored-by: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Co-authored-by: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Co-authored-by: Ali Abdolali --- model/bin/w3_make | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/bin/w3_make b/model/bin/w3_make index 027a66063..56e7f4cbc 100755 --- a/model/bin/w3_make +++ b/model/bin/w3_make @@ -389,7 +389,7 @@ EOF then netcdf_version="$netcdf_version.0" fi - if [ `echo $netcdf_version | tr -d .` -lt 411 ] + if [ `echo $netcdf_version | tr -d . | tr -d - | tr -d 'A-Z a-z'` -lt 411 ] then netcdf_compile_message echo "$mode: NetCDF version $netcdf_version < 4.1.1"; echo ' ' From 4dfafdbed48f42b3c7314693c55be758b5743c51 Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Sun, 17 Jan 2021 11:28:20 -0500 Subject: [PATCH 62/84] removing comp.* link.* files as we now use the cmplr.env (#284) * removing file that should not be in repository * adding to .gitignore to avoid future .*.swp files * remove unused files from aux directory * removing comp.* link.* files as we now use the cmplr.env --- .gitignore | 4 + model/aux/1source.gs | 1150 --- model/aux/cbarn.gs | 241 - model/aux/colorset.gs | 70 - model/aux/idl_twist/README | 11 - model/aux/idl_twist/TWIST_init.txt | 28 - model/aux/idl_twist/bathytool.pro | 735 -- model/aux/idl_twist/editspecials.pro | 268 - model/aux/idl_twist/gridbuild.pro | 4504 --------- model/aux/idl_twist/initmain.pro | 501 - model/aux/idl_twist/julday.pro | 189 - model/aux/idl_twist/make_visu_package.pro | 14 - model/aux/idl_twist/make_visu_tar.sh | 6 - model/aux/idl_twist/maketransect.pro | 460 - model/aux/idl_twist/mapping.pro | 99 - model/aux/idl_twist/palette.pro | 614 -- model/aux/idl_twist/palettes/6coul.ct | 42 - model/aux/idl_twist/palettes/Depth.ct | 42 - .../aux/idl_twist/palettes/Depth_finistere.ct | 42 - .../idl_twist/palettes/Depth_land_lakes.ct | 42 - model/aux/idl_twist/palettes/Eb.ct | 42 - model/aux/idl_twist/palettes/Eb_for_eps.ct | 39 - model/aux/idl_twist/palettes/Hs.ct | 42 - model/aux/idl_twist/palettes/Hsb.ct | 42 - model/aux/idl_twist/palettes/Hsb2.ct | 42 - model/aux/idl_twist/palettes/JFM8a.ct | 42 - model/aux/idl_twist/palettes/SWAO_dir.ct | 39 - model/aux/idl_twist/palettes/S_sym.ct | 42 - model/aux/idl_twist/palettes/Tp_SAR.ct | 39 - model/aux/idl_twist/palettes/backtoblack.ct | 42 - model/aux/idl_twist/palettes/bathy.ct | 42 - model/aux/idl_twist/palettes/bathy2.ct | 42 - model/aux/idl_twist/palettes/bathy3.ct | 42 - model/aux/idl_twist/palettes/bathy3white.ct | 42 - model/aux/idl_twist/palettes/bathy4.ct | 42 - model/aux/idl_twist/palettes/bathygif.ct | 42 - model/aux/idl_twist/palettes/bwflipped.ct | 42 - model/aux/idl_twist/palettes/current_v0.ct | 39 - model/aux/idl_twist/palettes/dg_hs.ct | 42 - model/aux/idl_twist/palettes/doppler2.ct | 42 - model/aux/idl_twist/palettes/doppler3.ct | 42 - model/aux/idl_twist/palettes/doppler4.ct | 42 - model/aux/idl_twist/palettes/doppler4_inv.ct | 42 - model/aux/idl_twist/palettes/doppler5.ct | 42 - model/aux/idl_twist/palettes/doppler5_inv.ct | 42 - model/aux/idl_twist/palettes/doppler5w.ct | 42 - model/aux/idl_twist/palettes/doppler6.ct | 42 - model/aux/idl_twist/palettes/doppler6w.ct | 42 - model/aux/idl_twist/palettes/doppler7.ct | 42 - model/aux/idl_twist/palettes/doppler7bw.ct | 42 - model/aux/idl_twist/palettes/doppler7bw2.ct | 42 - .../palettes/doppler_modified_land.ct | 42 - .../palettes/doppler_modified_land_2.ct | 39 - .../palettes/doppler_modified_land_2_eps.ct | 39 - model/aux/idl_twist/palettes/e.ct | 42 - model/aux/idl_twist/palettes/fe.ct | 42 - model/aux/idl_twist/palettes/onr2000.ct | 42 - model/aux/idl_twist/palettes/pastels.ct | 42 - model/aux/idl_twist/palettes/pastels2.ct | 42 - model/aux/idl_twist/palettes/pastels3.ct | 42 - model/aux/idl_twist/palettes/previmer_hs.ct | 39 - model/aux/idl_twist/palettes/previmer_hs2.ct | 39 - model/aux/idl_twist/palettes/previmer_hs3.ct | 39 - model/aux/idl_twist/palettes/previmer_hs4.ct | 39 - .../idl_twist/palettes/previmer_hs_nogray.ct | 42 - .../idl_twist/palettes/previmer_tp_nogray.ct | 39 - model/aux/idl_twist/palettes/raibow+.ct | 42 - model/aux/idl_twist/palettes/rainbowbw.ct | 42 - model/aux/idl_twist/palettes/ripplescoul.ct | 42 - model/aux/idl_twist/palettes/ripplesgrey.ct | 42 - model/aux/idl_twist/palettes/s.ct | 42 - model/aux/idl_twist/palettes/s2.ct | 42 - model/aux/idl_twist/palettes/s3_1.ct | 42 - model/aux/idl_twist/palettes/symbols.ct | 39 - model/aux/idl_twist/palettes/symbols_dark.ct | 39 - model/aux/idl_twist/palettes/topobathy.ct | 39 - model/aux/idl_twist/palettes/wavespec_new.ct | 42 - model/aux/idl_twist/palettes/wbw.ct | 42 - model/aux/idl_twist/palettes/ws_ftp.log | 26 - model/aux/idl_twist/palettes/z_dopsat_red.ct | 39 - model/aux/idl_twist/parametros.pro | 332 - model/aux/idl_twist/rayp.f90 | 545 -- model/aux/idl_twist/raypf.f90 | 604 -- model/aux/idl_twist/raypfc.f90 | 756 -- model/aux/idl_twist/raypg.f90 | 574 -- model/aux/idl_twist/raypg_rayleigh.f90 | 571 -- model/aux/idl_twist/raytracer.pro | 403 - model/aux/idl_twist/read_timeseries.pro | 595 -- model/aux/idl_twist/rt_visumain.pro | 8715 ----------------- model/aux/idl_twist/visu.pro | 14 - model/aux/idl_twist/xloadpalette.pro | 628 -- model/aux/make_multi_nco_cray | 304 - .../matlab/example_plot_from_netcdf_rect.m | 42 - .../matlab/example_plot_from_netcdf_unst.m | 47 - .../matlab/example_plotf_from_netcdf_rect.m | 68 - model/aux/matlab/example_read_spectrum.m | 184 - model/aux/matlab/read_WWNCUG_var.m | 84 - model/aux/matlab/read_WWNC_var.m | 90 - model/aux/matlab/read_WWNCf_var.m | 287 - model/aux/matlab/read_outf_hs_generic.m | 146 - model/aux/matlab/read_scalar.m | 78 - model/aux/matlab/write_x_and_y_example.m | 88 - model/aux/profile.gs | 555 -- model/aux/source.gs | 1150 --- model/aux/spec.gs | 825 -- model/aux/spec_ids.gen | 2 - model/bin/comp.Altix | 191 - model/bin/comp.Altix_debug | 194 - model/bin/comp.DATARMOR | 293 - model/bin/comp.DATARMOR_debug | 293 - model/bin/comp.Gnu | 201 - model/bin/comp.Gnu_debug | 201 - model/bin/comp.Intel | 211 - model/bin/comp.Intel_debug | 203 - model/bin/comp.Lahey | 192 - model/bin/comp.Mpt | 191 - model/bin/comp.Mpt_debug | 192 - model/bin/comp.NEC | 209 - model/bin/comp.Portland | 237 - model/bin/comp.SGI_Xeon_Intel | 201 - model/bin/comp.cray_xc.Intel | 197 - model/bin/comp.cray_xc.Portland | 223 - model/bin/comp.cray_xt | 211 - model/bin/comp.datamor.intel | 211 - model/bin/comp.kubuntu.intel.mpich | 211 - model/bin/comp.mac_pro_Intel | 198 - model/bin/comp.xlf | 228 - model/bin/link.Gnu | 197 - model/bin/link.Gnu_debug | 197 - model/bin/link.Intel | 208 - model/bin/link.Intel_debug | 206 - model/bin/link.Lahey | 196 - model/bin/link.Mpt | 198 - model/bin/link.Mpt_debug | 197 - model/bin/link.NEC | 194 - model/bin/link.Portland | 196 - model/bin/link.SGI_Xeon_Intel | 203 - model/bin/link.cray_xc.Intel | 205 - model/bin/link.cray_xc.Portland | 199 - model/bin/link.cray_xt | 191 - model/bin/link.kubuntu.intel.mpich | 210 - model/bin/link.mac_pro_Intel | 200 - model/bin/link.xlf | 208 - .../input/.ww3_multi_grdset_aa.inp.swp | Bin 12288 -> 0 bytes 144 files changed, 4 insertions(+), 36897 deletions(-) delete mode 100644 model/aux/1source.gs delete mode 100644 model/aux/cbarn.gs delete mode 100644 model/aux/colorset.gs delete mode 100644 model/aux/idl_twist/README delete mode 100644 model/aux/idl_twist/TWIST_init.txt delete mode 100644 model/aux/idl_twist/bathytool.pro delete mode 100755 model/aux/idl_twist/editspecials.pro delete mode 100644 model/aux/idl_twist/gridbuild.pro delete mode 100755 model/aux/idl_twist/initmain.pro delete mode 100644 model/aux/idl_twist/julday.pro delete mode 100755 model/aux/idl_twist/make_visu_package.pro delete mode 100755 model/aux/idl_twist/make_visu_tar.sh delete mode 100755 model/aux/idl_twist/maketransect.pro delete mode 100644 model/aux/idl_twist/mapping.pro delete mode 100755 model/aux/idl_twist/palette.pro delete mode 100755 model/aux/idl_twist/palettes/6coul.ct delete mode 100755 model/aux/idl_twist/palettes/Depth.ct delete mode 100755 model/aux/idl_twist/palettes/Depth_finistere.ct delete mode 100755 model/aux/idl_twist/palettes/Depth_land_lakes.ct delete mode 100755 model/aux/idl_twist/palettes/Eb.ct delete mode 100644 model/aux/idl_twist/palettes/Eb_for_eps.ct delete mode 100755 model/aux/idl_twist/palettes/Hs.ct delete mode 100755 model/aux/idl_twist/palettes/Hsb.ct delete mode 100755 model/aux/idl_twist/palettes/Hsb2.ct delete mode 100755 model/aux/idl_twist/palettes/JFM8a.ct delete mode 100755 model/aux/idl_twist/palettes/SWAO_dir.ct delete mode 100755 model/aux/idl_twist/palettes/S_sym.ct delete mode 100644 model/aux/idl_twist/palettes/Tp_SAR.ct delete mode 100755 model/aux/idl_twist/palettes/backtoblack.ct delete mode 100755 model/aux/idl_twist/palettes/bathy.ct delete mode 100755 model/aux/idl_twist/palettes/bathy2.ct delete mode 100755 model/aux/idl_twist/palettes/bathy3.ct delete mode 100755 model/aux/idl_twist/palettes/bathy3white.ct delete mode 100755 model/aux/idl_twist/palettes/bathy4.ct delete mode 100755 model/aux/idl_twist/palettes/bathygif.ct delete mode 100755 model/aux/idl_twist/palettes/bwflipped.ct delete mode 100644 model/aux/idl_twist/palettes/current_v0.ct delete mode 100755 model/aux/idl_twist/palettes/dg_hs.ct delete mode 100755 model/aux/idl_twist/palettes/doppler2.ct delete mode 100755 model/aux/idl_twist/palettes/doppler3.ct delete mode 100755 model/aux/idl_twist/palettes/doppler4.ct delete mode 100755 model/aux/idl_twist/palettes/doppler4_inv.ct delete mode 100755 model/aux/idl_twist/palettes/doppler5.ct delete mode 100755 model/aux/idl_twist/palettes/doppler5_inv.ct delete mode 100755 model/aux/idl_twist/palettes/doppler5w.ct delete mode 100755 model/aux/idl_twist/palettes/doppler6.ct delete mode 100755 model/aux/idl_twist/palettes/doppler6w.ct delete mode 100755 model/aux/idl_twist/palettes/doppler7.ct delete mode 100755 model/aux/idl_twist/palettes/doppler7bw.ct delete mode 100755 model/aux/idl_twist/palettes/doppler7bw2.ct delete mode 100755 model/aux/idl_twist/palettes/doppler_modified_land.ct delete mode 100755 model/aux/idl_twist/palettes/doppler_modified_land_2.ct delete mode 100644 model/aux/idl_twist/palettes/doppler_modified_land_2_eps.ct delete mode 100755 model/aux/idl_twist/palettes/e.ct delete mode 100755 model/aux/idl_twist/palettes/fe.ct delete mode 100755 model/aux/idl_twist/palettes/onr2000.ct delete mode 100755 model/aux/idl_twist/palettes/pastels.ct delete mode 100755 model/aux/idl_twist/palettes/pastels2.ct delete mode 100755 model/aux/idl_twist/palettes/pastels3.ct delete mode 100755 model/aux/idl_twist/palettes/previmer_hs.ct delete mode 100755 model/aux/idl_twist/palettes/previmer_hs2.ct delete mode 100755 model/aux/idl_twist/palettes/previmer_hs3.ct delete mode 100755 model/aux/idl_twist/palettes/previmer_hs4.ct delete mode 100755 model/aux/idl_twist/palettes/previmer_hs_nogray.ct delete mode 100644 model/aux/idl_twist/palettes/previmer_tp_nogray.ct delete mode 100755 model/aux/idl_twist/palettes/raibow+.ct delete mode 100755 model/aux/idl_twist/palettes/rainbowbw.ct delete mode 100755 model/aux/idl_twist/palettes/ripplescoul.ct delete mode 100755 model/aux/idl_twist/palettes/ripplesgrey.ct delete mode 100755 model/aux/idl_twist/palettes/s.ct delete mode 100755 model/aux/idl_twist/palettes/s2.ct delete mode 100755 model/aux/idl_twist/palettes/s3_1.ct delete mode 100755 model/aux/idl_twist/palettes/symbols.ct delete mode 100644 model/aux/idl_twist/palettes/symbols_dark.ct delete mode 100644 model/aux/idl_twist/palettes/topobathy.ct delete mode 100755 model/aux/idl_twist/palettes/wavespec_new.ct delete mode 100755 model/aux/idl_twist/palettes/wbw.ct delete mode 100755 model/aux/idl_twist/palettes/ws_ftp.log delete mode 100644 model/aux/idl_twist/palettes/z_dopsat_red.ct delete mode 100755 model/aux/idl_twist/parametros.pro delete mode 100755 model/aux/idl_twist/rayp.f90 delete mode 100755 model/aux/idl_twist/raypf.f90 delete mode 100644 model/aux/idl_twist/raypfc.f90 delete mode 100755 model/aux/idl_twist/raypg.f90 delete mode 100644 model/aux/idl_twist/raypg_rayleigh.f90 delete mode 100755 model/aux/idl_twist/raytracer.pro delete mode 100644 model/aux/idl_twist/read_timeseries.pro delete mode 100644 model/aux/idl_twist/rt_visumain.pro delete mode 100755 model/aux/idl_twist/visu.pro delete mode 100755 model/aux/idl_twist/xloadpalette.pro delete mode 100755 model/aux/make_multi_nco_cray delete mode 100644 model/aux/matlab/example_plot_from_netcdf_rect.m delete mode 100644 model/aux/matlab/example_plot_from_netcdf_unst.m delete mode 100644 model/aux/matlab/example_plotf_from_netcdf_rect.m delete mode 100755 model/aux/matlab/example_read_spectrum.m delete mode 100644 model/aux/matlab/read_WWNCUG_var.m delete mode 100644 model/aux/matlab/read_WWNC_var.m delete mode 100644 model/aux/matlab/read_WWNCf_var.m delete mode 100644 model/aux/matlab/read_outf_hs_generic.m delete mode 100644 model/aux/matlab/read_scalar.m delete mode 100644 model/aux/matlab/write_x_and_y_example.m delete mode 100644 model/aux/profile.gs delete mode 100644 model/aux/source.gs delete mode 100644 model/aux/spec.gs delete mode 100644 model/aux/spec_ids.gen delete mode 100755 model/bin/comp.Altix delete mode 100755 model/bin/comp.Altix_debug delete mode 100755 model/bin/comp.DATARMOR delete mode 100755 model/bin/comp.DATARMOR_debug delete mode 100755 model/bin/comp.Gnu delete mode 100755 model/bin/comp.Gnu_debug delete mode 100755 model/bin/comp.Intel delete mode 100755 model/bin/comp.Intel_debug delete mode 100755 model/bin/comp.Lahey delete mode 100755 model/bin/comp.Mpt delete mode 100755 model/bin/comp.Mpt_debug delete mode 100755 model/bin/comp.NEC delete mode 100755 model/bin/comp.Portland delete mode 100755 model/bin/comp.SGI_Xeon_Intel delete mode 100755 model/bin/comp.cray_xc.Intel delete mode 100755 model/bin/comp.cray_xc.Portland delete mode 100755 model/bin/comp.cray_xt delete mode 100755 model/bin/comp.datamor.intel delete mode 100755 model/bin/comp.kubuntu.intel.mpich delete mode 100755 model/bin/comp.mac_pro_Intel delete mode 100755 model/bin/comp.xlf delete mode 100755 model/bin/link.Gnu delete mode 100755 model/bin/link.Gnu_debug delete mode 100755 model/bin/link.Intel delete mode 100755 model/bin/link.Intel_debug delete mode 100755 model/bin/link.Lahey delete mode 100755 model/bin/link.Mpt delete mode 100755 model/bin/link.Mpt_debug delete mode 100755 model/bin/link.NEC delete mode 100755 model/bin/link.Portland delete mode 100755 model/bin/link.SGI_Xeon_Intel delete mode 100755 model/bin/link.cray_xc.Intel delete mode 100755 model/bin/link.cray_xc.Portland delete mode 100755 model/bin/link.cray_xt delete mode 100755 model/bin/link.kubuntu.intel.mpich delete mode 100755 model/bin/link.mac_pro_Intel delete mode 100755 model/bin/link.xlf delete mode 100644 regtests/ww3_tp2.17/input/.ww3_multi_grdset_aa.inp.swp diff --git a/.gitignore b/.gitignore index de14dfa6c..b43cb68a2 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,7 @@ model/bin/wwatch3.env */*.swp */*/*.swp */*/*/*.swp +.*.swp +*/.*.swp +*/*/.*.swp +*/*/*/.*.swp diff --git a/model/aux/1source.gs b/model/aux/1source.gs deleted file mode 100644 index 8fc3a1b69..000000000 --- a/model/aux/1source.gs +++ /dev/null @@ -1,1150 +0,0 @@ -* -* 1source.gs : GrADS plots of source terms -* ---------------------------------------------------------------- -* version 2: color of bw option added -* polar / Cartesian option added -* -* This is a generic grads scripts that runs without modifications -* for arbitary numbers of output locations and times. If one plot -* is asked for, a page filling spectrum is plotted. If more are -* asked for, spectral are grouped per time, with 4 or six plots -* on the page. -* -* Scripts and files used : -* colorset.gs : Sets up shading colors -* spec_ids : Grid and center ID's, defaults if not given -* ww3.spec.grads : GrADS data file. -* ww3.spec.ctl : GrADS control file. -* ww3.mean.grads : Suplemental GrAds data file. -* -* The files ww3.* are generated automatically by gx_outp -* (WAVEWATCH postprocessor). -* -* General set up - - - - - - - - - - - - - - - - - - - - - - - - - -* - display=white -* -* color : color or b&w [yes/---] -* polar : polar repres. [yes/---] -* - color = 'yes' - polar = ' es' -* - if ( polar = 'yes' ) -* -* dth : grid directional increment for polar plot -* dfr : grid frequency increment for polar plot -* fmx : maximum frequency in polar plot -* - dth = 15 - dfr = 0.05 - fmx = 0.25 - else -* -* thoff : direction at bottom of plot -* dth : grid directional increment for Cartesian plot -* dfr : grid frequency increment for Cartesian plot -* fmn : maximum frequency in Cartesian plot -* fmx : minimum frequency in Cartesian plot -* - thoff = -180. - dth = 45. - dfr = 0.05 - fmn = 0.0412 - fmx = 0.4056 - endif -* -* Set ilev to chose which source term to plot -* 1 : spectrum -* 2 : input -* 3 : interactions -* 4 : whitecacpping -* 5 : bottom friction -* 6 : all together -* - ilev = 3 -* - 'set display color ' display - 'clear' - 'run colorset.gs' -* -* ID strings from file - - - - - - - - - - - - - - - - - - - - - - -* - result = read (spec_ids) - OK = sublin(result,1) - if ( OK = '0' ) - grid_ID = sublin(result,2) - else - grid_ID = 'unidentified grid' - endif -* - result = read (spec_ids) - OK = sublin(result,1) - if ( OK = '0' ) - center_ID = sublin(result,2) ', ' - else - center_ID = '' - endif -* -* Current date and time - - - - - - - - - - - - - - - - - - - - - -* - gdate="yyyy/mm/dd" - '!date -u "+%Y/%m/%d" > tmp_grads_gdate' - result = read (tmp_grads_gdate) - gdate = sublin(result,2) - '!rm -f tmp_grads_gdate' -* - center_ID = center_ID gdate -* -* Get size of page - - - - - - - - - - - - - - - - - - - - - - - - -* - 'q gxinfo' - line = sublin(result,2) - xmax = subwrd(line,4) - ymax = subwrd(line,6) -* -* Print initial info to screen - - - - - - - - - - - - - - - - - - -* - say ' ' - say '--------------------------' - say '*** Running 1source.gs ***' - say '--------------------------' - say ' ' - say 'Grid ID : ' grid_ID - say 'Center ID : ' center_ID - say 'Page : ' xmax ' by ' ymax -* -* Open data file - - - - - - - - - - - - - - - - - - - - - - - - - -* - 'open ww3.spec' -* -* Get some info for file - - - - - - - - - - - - - - - - - - - - - -* - 'q file 1' - line = sublin(result,5) - ntime = subwrd(line,12) - line = sublin(result,6) - nloc = subwrd(line,5) -* - say 'Nr. of times : ' ntime - say 'Nr. of loc. : ' nloc -* - iloc = 1 - while ( iloc <= nloc ) - iline = 6 + iloc - line = sublin(result,iline) - par_ID.iloc = subwrd(line,1) - loc_ID.iloc = substr(line,21,10) - say ' location ' iloc ' is called ' loc_ID.iloc ' and stored as ' par_ID.iloc - iloc = iloc + 1 - endwhile -* -* loop over time and location to get mean pars and max - - - - - - -* - say ' ' - say 'Reading mean data and getting maximum spectral density ...' - 'set gxout stat' -* - fmin = 1.e20 - fmax = -1.e20 - 'set lev ' ilev -* - itime = 1 - while ( itime <= ntime ) -* - 'set t ' itime - say ' processing time ' showtime(itime) -* - iloc = 1 - while ( iloc <= nloc ) -* - result = read (ww3.mean.grads) - line = sublin(result,2) - ua.iloc.itime = subwrd(line,5) - ux.iloc.itime = subwrd(line,6) - uy.iloc.itime = subwrd(line,7) - ca.iloc.itime = subwrd(line,9) - cx.iloc.itime = subwrd(line,10) - cy.iloc.itime = subwrd(line,11) - hs.iloc.itime = subwrd(line,12) -* -* say result -* say iloc ' ' itime ' ' hs.iloc.itime -* say ua.iloc.itime ' ' ux.iloc.itime ' ' uy.iloc.itime -* say ca.iloc.itime ' ' cx.iloc.itime ' ' cy.iloc.itime -* - 'd ' par_ID.iloc - line = sublin(result,8) - lmin = subwrd(line,4) - lmax = subwrd(line,5) - if ( lmin < fmin) ; fmin = lmin ; endif - if ( lmax > fmax) ; fmax = lmax ; endif -* -* say result -* say fmin ' ' fmax ' ' lmin ' ' lmax -* - iloc = iloc + 1 -* - endwhile -* - itime = itime + 1 -* - endwhile -* - if ( -fmin > fmax ) - sscl = -fmin - else - sscl = fmax - endif -* - say ' ' - say 'Done, min and max are ' fmin ' and ' fmax ' (' sscl ')' -* -* Generic page setup - - - - - - - - - - - - - - - - - - - - - - - -* - say ' ' - say 'Setting up the page ...' -* - st1 = '' - st2 = '' - st3 = '' - st4 = '' -* - sst = '???' - if (ilev=1); sst='F'; endif; - if (ilev=2); sst='Sin'; endif; - if (ilev=3); sst='Snl'; endif; - if (ilev=4); sst='Sds'; endif; - if (ilev=5); sst='Sbt'; endif; - if (ilev=6); sst='Stot'; endif; -* - if ( nloc = 1 ) - ntest = ntime - itype = 0 - say ' Single location, location ID in header.' - else - ntest = nloc - itype = 1 - say ' Multiple locations, time ID in header.' - endif -* - if ( ntest = 1 ) - npan = 1 - else - if ( ntest <= 4 ) - npan = 4 - else - npan = 6 - endif - endif - say ' Putting ' npan ' panels on a page.' -* -* settings for 1 panel ... -* - if ( npan = 1 ) -* - xtc = 0.5 * xmax - yt1 = 9.1 - yt2 = 1.8 - yt3 = 2.0 - size1 = 0.25 - size2 = 0.12 - size3 = 0.12 - nc = 50 -* - pw = 6. - sx = 0. - sy = 0. - xp0 = 0.5 * ( xmax - pw ) - yp0 = 0.5 * ( ymax - pw ) -* - endif -* -* settings for 4 panel ... -* - if ( npan = 4 ) -* - xtc = 0.5 * xmax - yt1 = 10.0 - yt2 = 1.0 - yt3 = 1.2 - size1 = 0.22 - size2 = 0.12 - size3 = 0.12 - nc = 35 -* - pw = 3.6 - sx = 0.2 - sy = 0.5 - xp0 = 0.5 * ( xmax - sx ) - pw - yp0 = 0.5 * ( ymax + sy ) -* - endif -* -* settings for 6 panel ... -* - if ( npan = 6 ) -* - xtc = 0.5 * xmax - yt1 = 10.7 - yt2 = 0.2 - yt3 = 0.4 - size1 = 0.20 - size2 = 0.12 - size3 = 0.12 - nc = 35 -* - pw = 3.0 - sx = 0.2 - sy = 0.3 - xp0 = 0.5 * ( xmax - sx ) - pw - yp0 = 7.3 -* - endif -* -* Actual plotting loop - - - - - - - - - - - - - - - - - - - - - - -* - say ' ' - say 'Starting actual plotting ...' -* - ipage = 0 - ipan = 1 - xp = xp0 - yp = yp0 -* - i = 1 - while ( i <= ntime ) - 'set t ' i -* - j = 1 - while ( j <= nloc ) -* -* ... new page ... -* - if ( ipan = 1 ) -* - ipage = ipage + 1 - say ' Starting with page ' ipage -* - if ( ipage > 1 ) - iplot = ipage - 1 - 'printim 'sst'_plot_'iplot'.png' - 'clear' - endif -* - page_ID = sst ' for ' - if ( itype = 0 ) - page_ID = page_ID loc_ID.j - else - page_ID = page_ID showtime (i) - endif - 'set string 1 c 5' - 'set strsiz ' size1 - 'draw string ' xtc ' ' yt1 ' ' page_ID - 'set strsiz ' size2 - 'draw string ' xtc ' ' yt2 ' ' grid_ID - 'set strsiz ' size3 - 'draw string ' xtc ' ' yt3 ' ' center_ID -* - endif -* -* ... plot spectrum ... -* - if ( itype = 0 ) - st1 = showtime(i) - else - st1 = loc_ID.j - endif -* - if ( hs.j.i < 10 ) - st2 = 'Hs = ' hs.j.i 'm' - else - st2 = 'Hs = ' hs.j.i 'm' - endif -* - if ( npan < 6 ) -* - if ( ua.j.i < 10 ) - st3 = 'U = ' ua.j.i 'm/s' - else - st3 = 'U = ' ua.j.i 'm/s' - endif -* - if ( ca.j.i < 0.1 ) - st4 = '' - else - st4 = 'C = ' ca.j.i 'm/s' - endif -* - endif -* - if ( ilev = 1 ) - if ( polar = 'yes' ) - dummy = plotspec (xp,yp,pw,dth,dfr,fmx,par_ID.j,fmax,st1,st2,st3,st4,nc,ua.j.i,ux.j.i,uy.j.i,ca.j.i,cx.j.i,cy.j.i,color) - else - dummy = plotspec_c (xp,yp,pw,thoff,dth,fmn,fmx,dfr,par_ID.j,fmax,st1,st2,st3,st4,nc,ua.j.i,ux.j.i,uy.j.i,ca.j.i,cx.j.i,cy.j.i,color) - endif - else - if ( polar = 'yes' ) - dummy = plotsrce (xp,yp,pw,dth,dfr,fmx,par_ID.j,sscl,st1,st2,st3,st4,nc,color) - else - dummy = plotsrce_c (xp,yp,pw,thoff,dth,fmn,fmx,dfr,par_ID.j,sscl,st1,st2,st3,st4,nc,color) - endif - endif -* -* ... update panel counter ... -* - ipan = ipan + 1 - xp = xp + pw + sx - if ( xp + pw > xmax ) - xp = xp0 - yp = yp - pw - sy - endif - if ( ipan > npan ) - ipan = 1 - xp = xp0 - yp = yp0 - endif -* - j = j + 1 - endwhile -* - if ( nloc > 1 ) - ipan = 1 - xp = xp0 - yp = yp0 - endif -* - i = i + 1 - endwhile -* -* End of operations - - - - - - - - - - - - - - - - - - - - - - - -* - say ' ' - say '-------------------------' - say '*** End of 1source.gs ***' - say '-------------------------' - say ' ' - 'quit' -* -* End of main script - - - - - - - - - - - - - - - - - - - - - - - -* -* ------------------------------------------------------------------------------ - function plotspec (xp0,yp0,dxyp,dxgrid,dygrid,ymax,spec,scale,str1,str2,str3,str4,strlen,u,ux,uy,c,cx,cy,color) -* -* Function to plot a spectrum at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* dxgrid Grid line increment for directions. -* dygrid Grid line increment for frequencies. -* ymax Maximum frequency. -* spec Spectrum to be plotted. -* scale Scale (division) factor for spectrum. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* ux/y Wind speed and components. -* cx/y Current speed and components. -* color color of b&w [yes/---] -* -* 0. Initializations -* - 'set grads off' - 'set lon -180 180' - 'set lat ' 90-ymax ' 90' -* -* 1. Set up plot location -* - 'set parea ' xp0 ' ' xp0+dxyp ' ' yp0 ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 17 - factor = 2 - level=1.001 - levels='' -* - while ( i > 0 ) - level = level / factor - levels = level ' ' levels - i = i - 1 - endwhile -* -* 3. Plot spectrum -* - 'set mproj nps' - 'set grid off' -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38' - 'd ' spec'/'scale - cblack = 1 - current = 65 - wind = 64 - else - cblack = 3 - current = 66 - wind = 63 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set clevs ' levels - 'd ' spec'/'scale -* -* 4. Plot grid lines manually to avoid bug -* - 'set line 66 1 3' - if ( color = 'yes' ) - 'set line 66 5 3' - endif -* - x = 0 - while ( x < 360+0.1*dxgrid ) - 'q ll2xy 'x' '90.-dygrid - x1 = subwrd(result,1) - y1 = subwrd(result,2) - 'q ll2xy 'x' '90.-ymax - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - x = x + dxgrid - endwhile -* - dx = 5 - y = dygrid - while ( y < ymax + 0.1*dygrid ) - x = 0 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - while ( x < 360 ) - x = x+dx - x1 = x2 - y1 = y2 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - endwhile - y = y + dygrid - endwhile -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set clevs ' levels - 'd ' spec'/'scale -* -* 5. Plot current and wind vector -* - xc = xp0 + 0.5*dxyp - yc = yp0 + 0.5*dxyp -* -* 5.a current -* - 'set line ' current ' 1 6' -* - cmax = 1.5 - cmin = 0.1 - if ( c > cmin ) - if ( c < cmax ) - dc = 0.375 * (dygrid/ymax) * dxyp * c / cmax - else - dc = 0.375 * (dygrid/ymax) * dxyp - endif - dcx = dc * cx / c - dcy = dc * cy / c - x2 = xc - dcx - y2 = yc - dcy - x1 = xc + dcx - y1 = yc + dcy -* -* 'draw line ' x2 ' ' y2 ' ' x1 ' ' y1 -* - 'q xy2w 'x1' 'y1 - lon = subwrd(result,3) - lat = subwrd(result,6) - lonh = lon + 10 - lath = 90. - 0.75*(90.-lat) - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 - lonh = lon - 10 - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 -* - endif -* -* 5.b wind -* - 'set line ' wind ' 1 6' -* - umax = 20. - umin = 2.5 - if ( u > umin ) - if ( u < umax ) - du = 0.375 * (dygrid/ymax) * dxyp * u / umax - else - du = 0.375 * (dygrid/ymax) * dxyp - endif - dux = du * ux / u - duy = du * uy / u - x2 = xc - dux - y2 = yc - duy - x1 = xc + dux - y1 = yc + duy -* - 'draw line ' x2 ' ' y2 ' ' x1 ' ' y1 -* - 'q xy2w 'x1' 'y1 - lon = subwrd(result,3) - lat = subwrd(result,6) - lonh = lon + 10 - lath = 90. - 0.75*(90.-lat) - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 - lonh = lon - 10 - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 -* - endif -* -* 6. ID text around spectrum -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl' - 'draw string ' xp0 ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* - if ( str4 != '' ) - 'set string 1 tl' - 'draw string ' xp0 ' ' yp0 -0.75*size ' ' str4 - endif -* - return -* ------------------------------------------------------------------------------ - function plotsrce (xp0,yp0,dxyp,dxgrid,dygrid,ymax,source,scale,str1,str2,str3,str4,strlen,color) -* -* Function to plot a source term at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* dxgrid Grid line increment for directions. -* dygrid Grid line increment for frequencies. -* ymax Maximum frequency. -* source Source term to be plotted. -* scale Scale (division) factor for source term. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* color color of b&w [yes/---] -* -* 0. Initializations -* - 'set grads off' - 'set lon -180 180' - 'set lat ' 90-ymax ' 90' -* -* 1. Set up plot location -* - 'set parea ' xp0 ' ' xp0+dxyp ' ' yp0 ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 7 - factor = 2 - levelp = 1.001 - leveln = -1.001 - levpos = '' - levneg = '' -* - while ( i > 0 ) - levelp = levelp / factor - leveln = leveln / factor - levpos = levelp ' ' levpos - levneg = levneg ' ' leveln - i = i - 1 - endwhile - levels = levneg ' 0 ' levpos -* -* 3. Plot source term -* - 'set mproj nps' - 'set grid off' -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56' -* 'set ccols 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41' - 'd ' source'/'scale - cblack = 1 - stpos = 1 - stneg = 1 - else - cblack = 3 - stpos = 1 - stneg = 3 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stpos - 'set clevs ' levpos - 'd ' source'/'scale -* -* 4. Plot grid lines manually to avoid bug -* - if ( color = 'yes' ) - 'set line 66 5 3' - else - 'set line 66 1 3' - endif -* - x = 0 - while ( x < 360+0.1*dxgrid ) - 'q ll2xy 'x' '90.-dygrid - x1 = subwrd(result,1) - y1 = subwrd(result,2) - 'q ll2xy 'x' '90.-ymax - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - x = x + dxgrid - endwhile -* - dx = 5 - y = dygrid - while ( y < ymax + 0.1*dygrid ) - x = 0 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - while ( x < 360 ) - x = x+dx - x1 = x2 - y1 = y2 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - endwhile - y = y + dygrid - endwhile -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stpos - 'set clevs ' levpos - 'd ' source'/'scale - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stneg - 'set clevs ' levneg - 'd ' source'/'scale -* -* 5. ID text around source term -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl' - 'draw string ' xp0 ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* - if ( str4 != '' ) - 'set string 1 tl' - 'draw string ' xp0 ' ' yp0 -0.75*size ' ' str4 - endif -* - return - -* ------------------------------------------------------------------------------ - function plotspec_c (xp0,yp0,dxyp,xoff,dx,ymin,ymax,dy,spec,scale,str1,str2,str3,str4,strlen,u,ux,uy,c,cx,cy,color) -* -* Function to plot a spectrum at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* xoff Shift of first frequency (if 0, axis from 0-360 cartesian) -* dx Directional increment (axis). -* ymin Minimum frequency. -* ymax Maximum frequency. -* dy Frequency increment (axis). -* spec Spectrum to be plotted. -* scale Scale (division) factor for spectrum. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* ux/y Wind speed and components. -* cx/y Current speed and components. -* -* 0. Initializations -* - 'set grads off' - 'set lon ' xoff-270 ' ' xoff+90 - 'set lat ' 90-ymax ' ' 90-ymin -* -* 1. Set up plot location -* - 'set parea ' xp0+0.07*dxyp ' ' xp0+dxyp ' ' yp0+0.05*dxyp ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 15 - factor = 2 - level=1.001 - levels='' -* - while ( i > 0 ) - level = level / factor - levels = level ' ' levels - i = i - 1 - endwhile -* -* 3. Plot spectrum -* - 'set mproj scaled' - 'set xyrev on' - 'set xflip on' - 'set grid off' - 'set xlab off' - 'set ylab off' - labsize = dxyp / strlen / 1.25 - 'set ylopts 1 4 ' labsize - 'set ylint ' dx - 'set xlint ' dy -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38' - 'd ' spec'/'scale - cblack = 1 - else - cblack = 3 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set clevs ' levels - 'd ' spec'/'scale -* -* 4. Plot axes manually -* - freq = 0. - 'set line 1 1 4' - 'set string 1 c 4' - 'set strsiz ' labsize -* - while ( freq <= ymax ) - if ( freq >= ymin ) - xt = xp0 + 0.07*dxyp + 0.93*dxyp * ( freq - ymin ) / ( ymax - ymin ) - 'draw line ' xt ' ' yp0+1.5*labsize ' ' xt ' ' yp0 + 0.05*dxyp - 'draw string ' xt ' ' yp0+0.5*labsize ' ' freq - endif - freq = freq + dy - endwhile -* - thmin = xoff - thmax = xoff + 360. - th = 0. -* - while ( th > thmin ) - th = th - dx - endwhile -* - 'set string 1 r 4' - while ( th <= thmax ) - if ( th >= thmin ) - yt = yp0 + 0.05*dxyp + 0.95*dxyp * ( th - thmin ) / ( thmax - thmin ) - 'draw line ' xp0+0.07*dxyp ' ' yt ' ' xp0+0.07*dxyp-0.5*labsize ' ' yt - 'draw string ' xp0+0.07*dxyp-1.0*labsize ' ' yt ' ' th - endif - th = th + dx - endwhile -* -* 5. Plot current and wind vector -* -* -* 6. ID text around spectrum -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl 4' - 'draw string ' xp0+0.07*dxyp ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br 4' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr 4' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* - if ( str4 != '' ) - 'set string 1 tl 4' - 'draw string ' xp0+0.07*dxyp ' ' yp0 -0.75*size ' ' str4 - endif -* - return - -* ------------------------------------------------------------------------------ - function plotsrce_c (xp0,yp0,dxyp,xoff,dx,ymin,ymax,dy,source,scale,str1,str2,str3,str4,strlen,color) -* -* Function to plot a source term at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* xoff Shift of first frequency (if 0, axis from 0-360 cartesian) -* dx Directional increment (axis). -* ymin Minimum frequency. -* ymax Maximum frequency. -* dy Frequency increment (axis). -* source Source term to be plotted. -* scale Scale (division) factor for source term. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* -* 0. Initializations -* - 'set grads off' - 'set lon ' xoff-270 ' ' xoff+90 - 'set lat ' 90-ymax ' ' 90-ymin -* -* 1. Set up plot location -* - 'set parea ' xp0+0.07*dxyp ' ' xp0+dxyp ' ' yp0+0.05*dxyp ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 7 - factor = 2 - levelp = 1.001 - leveln = -1.001 - levpos = '' - levneg = '' -* - while ( i > 0 ) - levelp = levelp / factor - leveln = leveln / factor - levpos = levelp ' ' levpos - levneg = levneg ' ' leveln - i = i - 1 - endwhile - levels = levneg ' 0 ' levpos -* -* 3. Plot source term -* - 'set mproj scaled' - 'set xyrev on' - 'set xflip on' - 'set grid off' - 'set xlab off' - 'set ylab off' - labsize = dxyp / strlen / 1.25 - 'set ylopts 1 4 ' labsize - 'set ylint ' dx - 'set xlint ' dy -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56' -* 'set ccols 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41' - 'd ' source'/'scale - cblack = 1 - stpos = 1 - stneg = 1 - else - cblack = 3 - stpos = 1 - stneg = 3 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stpos - 'set clevs ' levpos - 'd ' source'/'scale - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stneg - 'set clevs ' levneg - 'd ' source'/'scale -* -* 4. Plot axes manually -* - freq = 0. - 'set line 1 1 4' - 'set string 1 c 4' - 'set strsiz ' labsize -* - while ( freq <= ymax ) - if ( freq >= ymin ) - xt = xp0 + 0.07*dxyp + 0.93*dxyp * ( freq - ymin ) / ( ymax - ymin ) - 'draw line ' xt ' ' yp0+1.5*labsize ' ' xt ' ' yp0 + 0.05*dxyp - 'draw string ' xt ' ' yp0+0.5*labsize ' ' freq - endif - freq = freq + dy - endwhile -* - thmin = xoff - thmax = xoff + 360. - th = 0. -* - while ( th > thmin ) - th = th - dx - endwhile -* - 'set string 1 r 4' - while ( th <= thmax ) - if ( th >= thmin ) - yt = yp0 + 0.05*dxyp + 0.95*dxyp * ( th - thmin ) / ( thmax - thmin ) - 'draw line ' xp0+0.07*dxyp ' ' yt ' ' xp0+0.07*dxyp-0.5*labsize ' ' yt - 'draw string ' xp0+0.07*dxyp-1.0*labsize ' ' yt ' ' th - endif - th = th + dx - endwhile -* -* 5. ID text around source term -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl 4' - 'draw string ' xp0+0.07*dxyp ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br 4' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr 4' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* -* if ( str4 != '' ) -* 'set string 1 tl 4' -* 'draw string ' xp0+0.07*dxyp ' ' yp0 -0.75*size ' ' str4 -* endif -* - return - -* ------------------------------------------------------------------------------ - function showtime (itime) -* -* Get date and time in preferred format -* -* Parameter list : -* -* itime Discrete time counter -* - 'set t ' itime - 'query time' - gradsdate = subwrd(result,3) - test = substr ( gradsdate, 3, 1 ) - if ( test='Z' ) - year = substr ( gradsdate, 9, 4 ) - mnth = substr ( gradsdate, 6, 3 ) - day = substr ( gradsdate, 4, 2 ) - hour = substr ( gradsdate, 1, 2 ) - min = '00' - else - year = substr ( gradsdate, 12, 4 ) - mnth = substr ( gradsdate, 9, 3 ) - day = substr ( gradsdate, 7, 2 ) - hour = substr ( gradsdate, 1, 2 ) - min = substr ( gradsdate, 4, 2 ) - endif - - month= '??' - if (mnth='JAN'); month= '01'; endif; - if (mnth='FEB'); month= '02'; endif; - if (mnth='MAR'); month= '03'; endif; - if (mnth='APR'); month= '04'; endif; - if (mnth='MAY'); month= '05'; endif; - if (mnth='JUN'); month= '06'; endif; - if (mnth='JUL'); month= '07'; endif; - if (mnth='AUG'); month= '08'; endif; - if (mnth='SEP'); month= '09'; endif; - if (mnth='OCT'); month= '10'; endif; - if (mnth='NOV'); month= '11'; endif; - if (mnth='DEC'); month= '12'; endif; - - if ( test='Z' ) - vdate = year '/' month '/' day ' ' hour 'z' - else - vdate = year '/' month '/' day ' ' hour ':' min 'z' - endif -* - return vdate diff --git a/model/aux/cbarn.gs b/model/aux/cbarn.gs deleted file mode 100644 index 33bc8dfef..000000000 --- a/model/aux/cbarn.gs +++ /dev/null @@ -1,241 +0,0 @@ -* -* Script to plot a colorbar -* -* The script will assume a colorbar is wanted even if there is -* not room -- it will plot on the side or the bottom if there is -* room in either place, otherwise it will plot along the bottom and -* overlay labels there if any. This can be dealt with via -* the 'set parea' command. In version 2 the default parea will -* be changed, but we want to guarantee upward compatibility in -* sub-releases. -* -* -* modifications by mike fiorino 940614 -* -* - the extreme colors are plotted as triangles -* - the colors are boxed in white -* - input arguments in during a run execution: -* -* run cbarn sf vert xmid ymid -* -* sf - scale the whole bar 1.0 = original 0.5 half the size, etc. -* vert - 0 FORCES a horizontal bar = 1 a vertical bar -* xmid - the x position on the virtual page the center the bar -* ymid - the x position on the virtual page the center the bar -* -* if vert,xmid,ymid are not specified, they are selected -* as in the original algorithm -* - -function colorbar (args) - -sf=subwrd(args,1) -vert=subwrd(args,2) -xmid=subwrd(args,3) -ymid=subwrd(args,4) - -if(sf='');sf=1.0;endif - -* -* Check shading information -* - 'query shades' - shdinfo = result - if (subwrd(shdinfo,1)='None') - say 'Cannot plot color bar: No shading information' - return - endif - -* -* Get plot size info -* - 'query gxinfo' - rec2 = sublin(result,2) - rec3 = sublin(result,3) - rec4 = sublin(result,4) - xsiz = subwrd(rec2,4) - ysiz = subwrd(rec2,6) - ylo = subwrd(rec4,4) - xhi = subwrd(rec3,6) - xd = xsiz - xhi - - ylolim=0.6*sf - xdlim1=1.0*sf - xdlim2=1.5*sf - barsf=0.8*sf - yoffset=0.2*sf - stroff=0.05*sf - strxsiz=0.12*sf - strysiz=0.13*sf -* -* Decide if horizontal or vertical color bar -* and set up constants. -* - if (yloxdlim1) - vchk = 1 - if(vert = 0) ; vchk = 0 ; endif - else - vchk = 0 - if(vert = 1) ; vchk = 1 ; endif - endif -* -* vertical bar -* - - if (vchk = 1 ) - - if(xmid = '') ; xmid = xhi+xd/2 ; endif - xwid = 0.2*sf - ywid = 0.5*sf - - xl = xmid-xwid/2 - xr = xl + xwid - if (ywid*cnum > ysiz*barsf) - ywid = ysiz*barsf/cnum - endif - if(ymid = '') ; ymid = ysiz/2 ; endif - yb = ymid - ywid*cnum/2 - 'set string 1 l 5' - vert = 1 - - else - -* -* horizontal bar -* - - ywid = 0.4 - xwid = 0.8 - - if(ymid = '') ; ymid = ylo/2-ywid/2 ; endif - yt = ymid + yoffset - yb = ymid - if(xmid = '') ; xmid = xsiz/2 ; endif - if (xwid*cnum > xsiz*barsf) - xwid = xsiz*barsf/cnum - endif - xl = xmid - xwid*cnum/2 - 'set string 1 tc 5' - vert = 0 - endif - - -* -* Plot colorbar -* - - - 'set strsiz 'strxsiz' 'strysiz - num = 0 - while (num triangle lookup table - ;****************************************************** - GPTRI=INTARR(ntri+1,5) - GPTRI(*,0:3)=TRIGP - GPTRI(*,4)=TRANSPOSE(FINDGEN(ntri+1)) - ; sort on index of first vertex - I1=LONARR(ntri+1) - I1(*)=(GPTRI(*,1)*NTRI+GPTRI(*,2))*NTRI+GPTRI(*,3) - SO=SORT(I1) - TEMPO=GPTRI - GPTRI=GPTRI(SO,*) - ;FOR I=1,NTRI DO PRINT,TRANSPOSE(GPTRI(I,*)) - ;ntrinei=taillelist(1)-nboundary-nngp-1 - ;print,'ntrinei 1',ntrinei,taillelist(1),nngp,'##',SIZE(boundary) - ntrinei=ntri*15 ;(ntrinei/2-nboundary)*2*4 - ntrinei=ntri+1+ntrinei - TRINEI=INTARR(ntrinei+1) - index=ntri+2 - II=INTARR(4) - TRINEI(1)=index - FOR I=1,ntri DO BEGIN - TRINEI(I+1)=TRINEI(I) - tempo=INTARR(ntri) - nindex=0 - FOR J=1,3 DO BEGIN - GPC=TRIGP(I,J) - IF GPC EQ GPNEI(GPNEI(GPC)) THEN K1=GPNEI(GPC)+1 ELSE K1=GPNEI(GPC) - K2=GPNEI(GPC+1)-1 - ;IF I GE 755 THEN PRINT,I,J,'GPC:',GPC,'NEI:',GPNEI(K1:K2) - FOR K=K1,K2 DO BEGIN - II(1)=GPC - II(2)=GPNEI(K) - IF K LT K2 THEN II(3)=GPNEI(K+1) ELSE $ - IF GPC NE GPNEI(GPNEI(GPC)) THEN II(3)=GPNEI(K1) $ - ELSE II(3)=GPNEI(K-1) - SO=SORT(II) - II=II(SO) - ;PRINT,'II',II(1:3) - IMIN=1 - IMAX=NTRI - IND3=(II(1)*NTRI+II(2))*NTRI+II(3) - IGUESS=(NTRI*II(1))/NNGP - INDG=(GPTRI(IGUESS,1)*NTRI+GPTRI(IGUESS,2))*NTRI+GPTRI(IGUESS,3) - WHILE (INDG NE IND3) AND (IMIN NE IMAX) DO BEGIN - IF INDG LT IND3 THEN BEGIN - IMIN=IGUESS - IGUESS=(IMIN+IMAX)/2 - IF IGUESS EQ IMIN THEN IGUESS=IMAX - ENDIF ELSE BEGIN - IMAX=IGUESS - IGUESS=(IMIN+IMAX)/2 - ENDELSE - INDG=(GPTRI(IGUESS,1)*NTRI+GPTRI(IGUESS,2))*NTRI+GPTRI(IGUESS,3) - ENDWHILE - found=0 - FOR L=TRINEI(I),TRINEI(I+1)-1 DO $ - IF TRINEI(L) EQ GPTRI(IGUESS,4) THEN found=1 - IF found EQ 0 AND I NE GPTRI(IGUESS,4) THEN BEGIN - TRINEI(TRINEI(I+1))=GPTRI(IGUESS,4) - TRINEI(I+1)=TRINEI(I+1)+1 - ENDIF - ENDFOR - ENDFOR - ;print,I,' neighbors:',TRINEI(TRINEI(I):TRINEI(I+1)-1) - ENDFOR - ntrinei=TRINEI(ntri+1)-1 - tempo=TRINEI - TRINEI=INTARR(ntrinei+1) - TRINEI(1:ntrinei)=TEMPO(1:ntrinei) - PRINT,'ntrinei',ntrinei,'nei..',TEMPO(ntrinei),TEMPO(ntrinei+1) - datastatus(18)=1 - END - 'Save tri':BEGIN ;write grid file - file=DIALOG_PICKFILE(/READ, FILTER = '*.log') - IF file NE '' THEN BEGIN - GET_LUN,unit - OPENW,unit,file - PRINTF,unit,ntri,' Number of triangles' - IZONE=5 - FOR I=1,ntri DO BEGIN - PRINTF,unit,I,TRANSPOSE(TRIGP(I,0:3)) - ENDFOR - - ntrinei=TRINEI(ntri+1)-1 - PRINTF,unit,ntri,ntrinei,' Size of neighbor array' - PRINTF,unit,trinei(1:ntri+1) - FOR I=1,ntri DO BEGIN - ;PRINT,I,trinei(trinei(I):trinei(I+1)-1) - PRINTF,unit,trinei(trinei(I):trinei(I+1)-1) - ENDFOR - - zones=INTARR(ntri+1) - zones(*)=TRIGP(0:ntri,0) - SO=(SORT(zones)) - zones2=INDGEN(ntri+1) - zones2=zones2(SO) - zones=zones(SO) - - zonetri=INTARR(nzone+2+ntri) - ZC=1 - ZONETRI(1)=nzone+2 - ZT=1 - ZZ=1 - FOR I=2,ntri DO BEGIN - IF zones(I) NE ZC THEN BEGIN - ZONETRI(ZC+1)=ZONETRI(ZC)+ZT - temp=zones2(ZZ:ZZ+ZT-1) - ZONETRI(ZONETRI(ZC):ZONETRI(ZC+1)-1)=temp(SORT(temp)) - ZZ=ZZ+ZT - ZT=0 - ZC=ZC+1 - ENDIF - ZT=ZT+1 - ENDFOR - ZONETRI(nzone+1)=NZONE+NTRI+2 - temp=zones2(ZZ:ZZ+ZT-1) - ZONETRI(ZONETRI(nzone):ZONETRI(nzone+1)-1)=temp(SORT(temp)) - - nzonetri=ZONETRI(nzone+1)-1 - PRINTF,unit,nzone,nzonetri,' Size of Zone->triangle array' - PRINTF,unit,ZONETRI(1:nzone+1) - FOR I=1,nzone DO BEGIN - PRINTF,unit,ZONETRI(ZONETRI(I):ZONETRI(I+1)-1) - ENDFOR - - - ZONEGP=INTARR(nzone+2+NTRI*3) - - index=nzone+2 - ZONEGP(1)=index - FOR I=1,nzone DO BEGIN - ZONEGP(I+1)=ZONEGP(I) - FOR J=ZONETRI(I),ZONETRI(I+1)-1 DO BEGIN - TRIC=ZONETRI(J) - FOR K=1,3 DO BEGIN - GPC=TRIGP(TRIC,K) - found=0 - FOR L=ZONEGP(I),ZONEGP(I+1)-1 DO $ - IF ZONEGP(L) EQ GPC THEN found=1 - IF found EQ 0 THEN BEGIN - ZONEGP(ZONEGP(I+1))=GPC - ZONEGP(I+1)=ZONEGP(I+1)+1 - ENDIF - ENDFOR - ENDFOR - ENDFOR - nzonegp=ZONEGP(nzone+1) - tempo=ZONEGP - ZONETRI=INTARR(nZONEGP) - ZONETRI=tempo(0:nZONEGP-1) - FOR I=1,nzone DO BEGIN - temp=ZONEGP(ZONEGP(I):ZONEGP(I+1)-1) - ZONEGP(ZONEGP(I):ZONEGP(I+1)-1)=temp(SORT(temp)) - ENDFOR - - nzonegp=ZONEGP(nzone+1)-1 - PRINTF,unit,nzone,nzonegp,' Size of Zone->GP array' - PRINTF,unit,ZONEGP(1:nzone+1) - FOR I=1,nzone DO BEGIN - PRINTF,unit,ZONEGP(ZONEGP(I):ZONEGP(I+1)-1) - ENDFOR - - GPZONE=INTARR(nngp*4) - - index=nngp+2 - GPZONE(1:nngp+1)=index - FOR I=1,nzone DO BEGIN - FOR J=ZONEGP(I),ZONEGP(I+1)-1 DO BEGIN - GPC=ZONEGP(J) - IF GPZONE(NNGP+1) GT GPZONE(GPC) THEN $ - GPZONE(GPZONE(GPC)+1:GPZONE(NNGP+1))=GPZONE(GPZONE(GPC):GPZONE(NNGP+1)-1) - GPZONE(GPC+1:NNGP+1)=GPZONE(GPC+1:NNGP+1)+1 - GPZONE(GPZONE(GPC))=I - ENDFOR - ENDFOR - ngpzone=GPZONE(nngp+1)-1 - PRINTF,unit,nngp,ngpzone,' Size of GP->zone array' - PRINTF,unit,GPZONE(1:nngp+1) - FOR I=1,nngp DO BEGIN - PRINTF,unit,I,GPZONE(GPZONE(I):GPZONE(I+1)-1) - ENDFOR - - CLOSE,unit - FREE_LUN,unit - ENDIF - END - - ENDCASE - END - 'WIDGET_TEXT_CH': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE ev.id of - WBathy(1,2):bathy_line=FLOAT(value(0)) - WBathy(2,2):bathy_ker_size=FLOAT(value(0)) - ENDCASE - END - 'WIDGET_DROPLIST':BEGIN - CASE ev.id of - WBathy(6,1): BEGIN - showdot1=ev.index - adbathydot=showdot1+showdot2 - END - WBathy(6,2): BEGIN - showdot2=ev.index - adbathydot=showdot1+showdot2 - END - ENDCASE - END - ENDCASE -RETURN -END - - -;---------------------------------------------------------------------------- -PRO bathytool_draw_event,ev -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON FILES, filestatus,datastatus,paths,filters,filenames,nposo -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON BATHYTOOL, bathy_ker_size,bathy_line,bathytool_click -COMMON WBat,Wbathy,rootbtool -COMMON LOCAL_bathytool,coordP,coordR -;*******END OF COMMON BLOCKS******************************* - CASE ev.type OF ;case loop on action types - 0:BEGIN ;ev.type=0 : click (button pushed down) - coordP=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - coordP(0)=MIN([MAX([0.,coordP(0)]),(nx-1)*dx]) - coordP(1)=MIN([MAX([0.,coordP(1)]),(ny-1)*dy]) - END - 1:BEGIN ;ev.type=1 button release - coordR=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - coordR(0)=MIN([MAX([0.,coordR(0)]),(nx-1)*dx]) - coordR(1)=MIN([MAX([0.,coordR(1)]),(ny-1)*dy]) - CASE bathytool_click OF - 0:BEGIN ;draw lines - IF datastatus(3) EQ 1 THEN BEGIN - i1=ROUND(coordP(0)/dx) - j1=FLOOR(coordP(1)/dy) - i2=ROUND(coordR(0)/dx) - j2=FLOOR(coordR(1)/dy) - nii=max([abs(j2-j1),abs(i2-i1)])+1 - ddx=(coordR(0)/dx-coordP(0)/dx)/max([(nii-1),1]) - ddy=(coordR(1)/dy-coordP(1)/dy)/max([(nii-1),1]) - FOR ii=0,nii DO BEGIN - i3=ROUND(coordP(0)/dx+ddx*ii) - j3=ROUND(coordP(1)/dy+ddy*ii) - gd(i3,j3)=bathy_line - ENDFOR - ENDIF - END - ELSE: - ENDCASE - END - - ; Updates the cursor position and value of the current field - 2:IF datastatus (2) THEN BEGIN ;ev.type=2 when the cursor is in - ;in the drawing window - coord=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - i0=FLOOR(coord(0)/dx) - j0=FLOOR(coord(1)/dy) - IF ((i0 GE 0) AND (i0 LT nx) $ - AND (j0 GE 0) AND (j0 LT ny) $ - AND datastatus(3)) THEN BEGIN - valeur=gd(i0,j0) - WIDGET_CONTROL,Wright(13,5), $ - SET_VALUE=STRING(valeur,FORMAT='(F8.2)') - ENDIF - WIDGET_CONTROL,Wright(13,1), $ - SET_VALUE=STRING(coord(0),FORMAT='(F7.3)') - WIDGET_CONTROL,Wright(13,3), $ - SET_VALUE=STRING(coord(1),FORMAT='(F6.2)') - latdeg=0. - latmin=0. - londeg=0. - lonmin=0. - latlonstring='' - XYtoLatLon,coord(0),coord(1), $ - latdeg,latmin,londeg,lonmin,latlonstring - WIDGET_CONTROL,Wright(14,1), $ - SET_VALUE=latlonstring - ENDIF - ELSE: - ENDCASE - -RETURN -END - -;---------------------------------------------------------------------------- -PRO plot_dot_bathy -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,filltype -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON BATHYDOT,ndotmax,ndot1,XDOT1,YDOT1,ZDOT1,ndot2,XDOT2,YDOT2,ZDOT2, $ - bathydot_path,showdot1,showdot2 - - zmin=1000. - zmax=0. - kount1=0 - kount2=0 - IF showdot1 THEN BEGIN - PLOTDOT1=INTARR(ndot1) - FOR I=0L,ndot1-1 DO BEGIN - IF (XDOT1(I) GE rangex(0) AND XDOT1(I) LE rangex(1) $ - AND YDOT1(I) GE rangey(0) AND YDOT1(I) LE rangey(1)) THEN BEGIN - PLOTDOT1(I)=1 - IF ZDOT1(I) GT zmax THEN zmax=ZDOT1(I) - IF ZDOT1(I) LT zmin THEN zmin=ZDOT1(I) - ENDIF - ENDFOR - Index1=WHERE(PLOTDOT1 EQ 1,Kount1) - ENDIF - IF showdot2 THEN BEGIN - PLOTDOT2=INTARR(ndot2) - FOR I=0L,ndot2-1 DO BEGIN - IF (XDOT2(I) GE rangex(0) AND XDOT2(I) LE rangex(1) $ - AND YDOT2(I) GE rangey(0) AND YDOT2(I) LE rangey(1)) THEN BEGIN - PLOTDOT2(I)=1 - IF ZDOT2(I) GT zmax THEN zmax=ZDOT2(I) - IF ZDOT2(I) LT zmin THEN zmin=ZDOT2(I) - ENDIF - ENDFOR - Index2=WHERE(PLOTDOT2 EQ 1,Kount2) - ENDIF - - c_numlev=Navailcolor-2 - MakeLevels,zmin,zmax - colorind=1+FINDGEN(navailcolor-3) - colorind=navailcolor-1-colorind - if cbar THEN ColorBar,lev,colorind,cbtit,1,5 - - PLOT,[rangex(0)],[rangey(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - IF (kount1 GT 0) THEN $ - A = FINDGEN(17) * (!PI*2/16.) ;Make a vector of 16 points, A[i] = 2pi/16. - USERSYM, COS(A), SIN(A), /FILL ;Define the symbol to be a filled circle - PLOTS,XDOT1(Index1),Ydot1(Index1),PSYM=8,SYMSIZE=0.1, $ - COLOR=1+(Navailcolor-3)*(zmax-ZDOT1(Index1))/(zmax-zmin) - IF (kount2 GT 0) THEN BEGIN - A = FINDGEN(17) * (!PI*2/16.) ;Make a vector of 16 points, A[i] = 2pi/16. - USERSYM, COS(A), SIN(A), /FILL ;Define the symbol to be a filled circle - PLOTS,XDOT2(Index2),Ydot2(Index2),PSYM=8,SYMSIZE=0.8, $ - COLOR=1+(Navailcolor-3)*(zmax-ZDOT2(Index2))/(zmax-zmin) - A = FINDGEN(17) * (!PI*2/16.) ;Make a vector of 16 points, A[i] = 2pi/16. - USERSYM, COS(A), SIN(A) ;Define the symbol to be a filled circle - PLOTS,XDOT2(Index2),Ydot2(Index2),PSYM=8,SYMSIZE=0.8 - ENDIF -RETURN -END - -;---------------------------------------------------------------------------- -PRO Smbat -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON BATHYTOOL, bathy_ker_size,bathy_line,bathytool_click - L=bathy_ker_size - I0=FIX(0.5+L/dx) - J0=FIX(0.5+L/dy) - print,'dx,dy',dx,dy,I0,J0 - window=FLTARR(401) - window(0:200)=HANNING(201) - window(200:400)=HANNING(201) - window(100:300)=1. - kernel=FLTARR(401,401) - FOR I=0,400 DO BEGIN - FOR J=0,400 DO BEGIN - Ind=FIX(SQRT(FLOAT(I-200)^2.+FLOAT(J-200)^2.)+0.5) - IF Ind LE 200 THEN $ - kernel(I,J)=window(200+Ind) - ENDFOR - ENDFOR - ker=CONGRID(kernel,I0,J0);,/MINUS_ONE) - ker=ker/TOTAL(ker) - surface,ker - tempo=gd - gd=CONVOL(tempo,ker,/CENTER,/EDGE_TRUNCATE) - Index=WHERE(tempo LT 0,kount) - IF kount GT 0 THEN gd(index)=tempo(index) - RETURN - END -;---------------------------------------------------------------------------- -PRO Fillgaps -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax - I0=4 - J0=4 - I1=0 - I2=2*I0 - J1=0 - J2=2*J0 - HOLES=GD GT 5000. - S = REPLICATE(1, 3, 3) - FOR I=0,nx-1 DO BEGIN - PRINT,'I:',I - FOR J=0,ny-1 DO IF HOLES(I,J) THEN BEGIN - ;PRINT,'I,J:',I,J - A=INTARR(2*I0+1,2*J0+1) - HOL=INTARR(2*I0+1,2*J0+1) - GDA=FLTARR(2*I0+1,2*J0+1) - I1=-MIN([I-I0,0]) - I2=2*I0+nx-1-MAX([I+I0,nx-1]) - J1=-MIN([J-J0,0]) - J2=2*I0+ny-1-MAX([J+J0,ny-1]) - - HOL(I1:I2,J1:J2)= $ - HOLES(MAX([I-I0,0]):MIN([I+I0,nx-1]),MAX([J-J0,0]):MIN([J+J0,ny-1])) - GDA(I1:I2,J1:J2)= $ - GD(MAX([I-I0,0]):MIN([I+I0,nx-1]),MAX([J-J0,0]):MIN([J+J0,ny-1])) - A(*,*)=0. - A(I0,J0)=1 - FOR K=1,I0 DO BEGIN - A=DILATE(A,S)*HOL - ENDFOR - BORDER=(DILATE(A,S)-A)*(1-HOL) - WEIGHT=0. - GD(I,J)=0. - FOR II=I1,I2 DO BEGIN - FOR JJ=J1,J2 DO BEGIN - IF BORDER(II,JJ) THEN BEGIN - GD(I,J)=GD(I,J)+GDA(II,JJ)*EXP(-((II-I0)^2+(JJ-J0)^2)/8) - WEIGHT=WEIGHT+EXP(-((II-I0)^2+(JJ-J0)^2)/8) - ENDIF - ENDFOR - ENDFOR - ;PRINT,'BORDER:' - ;PRINT,BORDER(I1:I2,J1:J2) - IF WEIGHT NE 0. THEN GD(I,J)=GD(I,J)/WEIGHT ELSE GD(I,J)=1.E4 - ;PRINT,'GD:',GD(I,J) - ENDIF - ENDFOR - GET_LUN,unit - OPENW,unit,'/d/span11/ardhuin/MULTIBEAM/square2_filled.grd' - WRITEU,unit,transpose(gd) - CLOSE,unit - FREE_LUN,unit - RETURN - END diff --git a/model/aux/idl_twist/editspecials.pro b/model/aux/idl_twist/editspecials.pro deleted file mode 100755 index 99c9ad9d8..000000000 --- a/model/aux/idl_twist/editspecials.pro +++ /dev/null @@ -1,268 +0,0 @@ -PRO EditSpecials, anterior_root -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON FLAGS, eqscale,cbar,clickflag,subwin -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON GRIDPar, th1,th2,gfact,gsize1,gsize6 -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -;** 4 ** subwindow widgets widgets -COMMON WSE,WSpeceditor,WSEline1 -;*******END OF COMMON BLOCKS******************************* - - pbase=LONG(0) - vecbase=LONG(0) - Line1=LONG(0) - - - - pbase = WIDGET_BASE(TITLE='Special points editor', /COLUMN) - - XMENU, ['Insert point','Delete points','Import from file','Save with grid'],pbase, /ROW,$ - UVALUE=[0,1,2,3] - Wspeceditor= $ - WIDGET_TABLE(pbase, /EDITABLE, $ - - COLUMN_LABELS=['GP','X','Y','LAT','min','LON','min','color', $ - 'size','sym','thick','line','charsize'], $ - YSIZE=nspecgp,XSIZE=13, /RESIZEABLE_COLUMNS, $ - /SCROLL,Y_SCROLL_SIZE=10,X_SCROLL_SIZE=12, $ - COLUMN_WIDTHS=[40,80,80,40,80,40,80,40,40,40,40,40,40], $ - UNITS=0) - - - Line1=WIDGET_BASE(pbase, /FRAME, /ROW) - WSEline1=LONARR(4) - WSEline1(0)=WIDGET_LABEL(Line1,VALUE='Current point: ') - WSEline1(1)=WIDGET_SLIDER(Line1, MAXIMUM=nspecgp, MINIMUM=1) - WSEline1(2)=WIDGET_TEXT(Line1,/EDITABLE, value=specname(0)) - - - Line6 = WIDGET_BUTTON(pbase, VALUE='OK') - WIDGET_CONTROL, /REALIZE, pbase - XMANAGER, 'EditSpecials', pbase - Displayspec - subwin(5)=1 -RETURN -END - - -;---------------------------------------------------------------------------- -PRO EditSpecials_event, ev -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON FLAGS, eqscale,cbar,clickflag,subwin -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON GRIDPar, th1,th2,gfact,gsize1,gsize6 -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -;** 4 ** subwindow widgets widgets -COMMON WSE,WSpeceditor,WSEline1 -;*******END OF COMMON BLOCKS******************************* - - type = TAG_NAMES(ev, /STRUCTURE) - CASE type OF - 'WIDGET_BUTTON': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE value OF - 'OK': BEGIN - WIDGET_CONTROL, /DESTROY, ev.top - subwin(0)=0 - RETURN - END - 'Insert point': BEGIN - WIDGET_CONTROL,WSpeceditor,INSERT_ROWS=1 ;,/USE_TABLE_SELECT - nspecgp=nspecgp+1 - tempo=specmat - specmat=FLTARR(13,nspecgp) - specmat(*,0:nspecgp-2)=tempo(*,*) - tempo=specname - specname=STRARR(nspecgp) - specname(0:nspecgp-2)=tempo - WIDGET_CONTROL,WSEline1(1),SET_SLIDER_MAX=nspecgp - Displayspec - END - 'Delete points': BEGIN - selec=WIDGET_INFO(WSpeceditor,/TABLE_SELECT) - idel=selec(3)-selec(1)+1 - print,'selec',selec,'idel:',idel - WIDGET_CONTROL,WSpeceditor,/DELETE_ROWS , $ - USE_TABLE_SELECT=[-1,selec(1),11,selec(3)] - nspecgp=nspecgp-idel - tempo=specmat - specmat=FLTARR(13,nspecgp) - specmat(*,0:selec(1)-1)=tempo(*,0:selec(1)-1) - IF selec(1) LT nspecgp THEN specmat(*,selec(1):nspecgp-1)=tempo(*,selec(3)+1:nspecgp+idel-1) - tempo=specname - specname=STRARR(nspecgp) - specname(0:selec(1)-1)=tempo(0:selec(1)-1) - IF selec(1) LT nspecgp THEN specname(selec(1):nspecgp-1)=tempo(selec(3)+1:nspecgp+idel-1) - c_spec=0 - WIDGET_CONTROL,WSEline1(1),SET_SLIDER_MAX=nspecgp - WIDGET_CONTROL,WSEline1(2),SET_VALUE=specname(0) - END - 'Import from file': BEGIN - file=DIALOG_PICKFILE(/READ, FILTER = '../SHOWEX/*') - IF file NE '' THEN BEGIN - GET_LUN,unit - OPENR,unit,file - WHILE NOT EOF(unit) DO BEGIN - latdeg=0 - latmin=0. - londeg=0 - lonmin=0. - line=0 - name=' ' - READF,unit,latdeg,latmin,londeg,lonmin,line ;,name - LatLontoXY,latdeg,latmin,londeg,lonmin,x,y - nspecgp=nspecgp+1 - symbol=8. - IF line THEN symbol=-symbol - vecteur=[x,y,latdeg,latmin,londeg,lonmin,0.,0.2,symbol,1.,0.,1.] - tempo=specmat - specmat=FLTARR(13,nspecgp) - specmat(*,0:nspecgp-2)=tempo(*,*) - specmat(*,nspecgp-1)=vecteur - tempo=specname - specname=STRARR(nspecgp) - specname(0:nspecgp-2)=tempo(*) - ;specname(nspecgp-1)=name - ENDWHILE - WIDGET_CONTROL,WSEline1(1),SET_SLIDER_MAX=nspecgp - Displayspec - CLOSE,unit - FREE_LUN,unit - ENDIF - END - 'Save with grid':BEGIN ;write grid file - file=DIALOG_PICKFILE(/READ, FILTER = paths(5)+'*.grgp') - IF file NE '' THEN BEGIN - GET_LUN,unit - OPENW,unit,file - PRINTF,unit,nngp,' Number of grid points' - FOR I=1,(nngp) DO BEGIN - PRINTF,unit,I,gridmat(0:5,I-1), $ - FORMAT='(I6,2F9.4,I5,F9.4,I5,F9.4)' - ENDFOR - PRINTF,unit,nspecgp,' Number of special points (display)' - FOR I=0,(nspecgp-1) DO $ - PRINTF,unit,specmat(*,I),' ',specname(I), $ - FORMAT='(I6,2F9.4,I5,F9.4,I5,F9.4,I2,F4.1,3I3,F4.1,2a)' - CLOSE,unit - FREE_LUN,unit - ENDIF - END - ENDCASE - END - 'WIDGET_TABLE_CH': BEGIN - CASE (ev.id) OF - Wspeceditor:BEGIN - IF (ev.type LE 2) THEN BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value, $ - USE_TABLE_SELECT=[ev.x,ev.y,ev.x,ev.y] - specmat(ev.X,ev.Y)=value - IF ev.x LE 5 THEN UpdateSpectable,ev.X,ev.Y - ENDIF - END - ENDCASE - END - 'WIDGET_TEXT_CH': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE ev.id OF - WSEline1(2):BEGIN - specname(c_spec)=value(0) - END - ENDCASE - END - 'WIDGET_DROPLIST':BEGIN - CASE ev.id of - WPline1(2) : c_repart=ev.index - ENDCASE - END - 'WIDGET_SLIDER': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE (ev.id) OF - WSEline1(1): BEGIN - c_spec=FIX(value)-1 - WIDGET_CONTROL,WSEline1(2), SET_VALUE=specname(c_spec) - END - ENDCASE - END - ENDCASE -RETURN -END - -;---------------------------------------------------------------------------- -PRO UpdateSpecTable,I,J -;*******COMMON BLOCKS************************************** -;** 3 ** I/O and data variables -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -;** 4 ** subwindow widgets widgets -COMMON WSE,WSpeceditor,WSEline1 -;*******END OF COMMON BLOCKS******************************* - londeg=0 - lonmin=0. - latdeg=0 - latmin=0. - x=0. - y=0. - CASE 1 OF - (I LT 2):BEGIN ;updates the grid points latitudes and longitudes - XYtoLatLon,specmat(1,J),specmat(2,J),latdeg,latmin,londeg,lonmin - specmat(3,J)=latdeg - specmat(4,J)=latmin - specmat(5,J)=londeg - specmat(6,J)=lonmin - WIDGET_CONTROL, WSpeceditor, SET_VALUE=specmat(3:6,J:J), $ - USE_TABLE_SELECT=[3,J,6,J] - END - (I GE 2) AND (I LE 5):BEGIN ;updates the grid points X and Y coordinates - LatLontoxy,specmat(3,J),specmat(4,J),specmat(5,J),specmat(6,J),x,y - specmat(1,J)=x - specmat(2,J)=y - WIDGET_CONTROL, WSpeceditor, SET_VALUE=specmat(1:2,J:J), $ - USE_TABLE_SELECT=[1,J,2,J] - END - ENDCASE -END - -;---------------------------------------------------------------------------- -PRO Displayspec -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON FLAGS, eqscale,cbar,clickflag,subwin -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON GRIDPar, th1,th2,gfact,gsize1,gsize6 -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -;** 4 ** subwindow widgets widgets -COMMON WSE,WSpeceditor,WSEline1 -;*******END OF COMMON BLOCKS******************************* - WIDGET_CONTROL,WSpeceditor,TABLE_YSIZE=nspecgp - WIDGET_CONTROL,USE_TABLE_SELECT=[-1,-1,12,nspecgp-1] - ROWLAB=STRARR(nspecgp) - ROWLAB=STRCOMPRESS(STRING(FINDGEN(nspecgp)+1,FORMAT='(I3)')) - gridf=STRARR(13,nngp) - gridf(0,*)='(I6)' - gridf(1:2,*)='(F8.4)' - gridf(3,*)='(I4)' - gridf(4,*)='(F5.2)' - gridf(5,*)='(I4)' - gridf(6,*)='(F6.2)' - gridf(7,*)='(I3)' - gridf(8,*)='(F4.2)' - gridf(9,*)='(I2)' - gridf(10,*)='(F4.2)' - gridf(11,*)='(I2)' - gridf(12,*)='(F4.2)' - ; COLUMN_LABELS=['GP','X','Y','LAT','min','LON','min','color', $ - ; 'size','sym','thick','line','charsize'], $ - - WIDGET_CONTROL,WSpeceditor,FORMAT=gridf,ROW_LABELS=ROWLAB - WIDGET_CONTROL,WSpeceditor, $ - USE_TABLE_SELECT=[0,0,12,nspecgp-1], $ - SET_VALUE=specmat -END diff --git a/model/aux/idl_twist/gridbuild.pro b/model/aux/idl_twist/gridbuild.pro deleted file mode 100644 index 17ae5ee54..000000000 --- a/model/aux/idl_twist/gridbuild.pro +++ /dev/null @@ -1,4504 +0,0 @@ -;/ -;/ +-----------------------------------+ -;/ | TWIST Ifremer-SHOM | -;/ | F. Ardhuin | -;/ | IDL command language | -;/ | Last update : 08-Oct-2013 | -;/ +-----------------------------------+ -;/ -;/ Licence information: This code is distributed under the CeCILL license -;/ generally compatible with the Gnu Public Licence (GPL) -;/ http://www.cecill.info/index.en.html -;/ -;/ 17-Oct-2013 : Clean up ( version 2.00 ) -;/ 08-Nov-2013 : Debug contourline ( version 2.00 ) -; -; 1. Purpose : -; -; GUI for mesh editing -; -; 2. Method : -; -;---------------------------------------------------------------------------- -PRO Generator, anterior_root -; This procedure creates the widged for the "grid designer" subwindow -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON FLAGS, eqscale,cbar,clickflag,subwin -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON GRIDTIMESTEPS, zoffset, updateonmove, waveperiod -;** 4 ** subwindow widgets widgets -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON WGene,Wgrideditor,WG,root -COMMON Builder,ngp,H0,H1,Hi,KH0,KH1,DX0,DX1,T0,ROA,ROI,gridbuild_click - -;*******END OF COMMON BLOCKS******************************* - IF (datastatus(6) EQ 0) THEN nzone=5 - zcolor=INTARR(nzone+1) - zcolor(1:4)=FINDGEN(4)*10+10 - zcolor(5)=-1. - c_zone=5 - pbase=LONG(0) - vecbase=LONG(0) - Line1=LONG(0) - WGlines=LONARR(10) - WG=LONARR(12,14) - - IF (N_ELEMENTS(contourline) EQ 0) THEN contourline=LONARR(2,2)-1 - Speeds,H0,1/T0,cphi,cg,KH0 - Speeds,H1,1/T0,cphi,cg,KH1 - IF (N_ELEMENTS(gridmat) EQ 0) THEN BEGIN - nngp=1 - gridmat=DBLARR(8,nngp) - x=0. - y=0. - XYtoLATLON,x,y,latdeg,latmin,londeg,lonmin - I=1 - gridmat(0,I-1)=x - gridmat(1,I-1)=y - gridmat(2,I-1)=latdeg - gridmat(3,I-1)=latmin - gridmat(4,I-1)=londeg - gridmat(5,I-1)=lonmin - ENDIF - - -; Guardar valores en variables temporales - root=anterior_root -; WIDGET_CONTROL, root, SENSITIVE=0 - - pbase = WIDGET_BASE(TITLE='Mesh editor', /COLUMN) - WIDGET_CONTROL, pbase, GROUP_LEADER=root - WIDGET_CONTROL, /MANAGED, pbase - Wgrideditor=LONARR(2) - ROWLAB=STRARR(nngp) - ROWLAB(*)=STRCOMPRESS(STRING(INDGEN(nngp)+1)) - IF (nngp EQ 1) THEN ROWLAB=['1'] ELSE ROWLAB = STRING(FINDGEN(nngp)+1, FORMAT='(I8)') - Wgrideditor(1)= $ - WIDGET_TABLE(pbase, /EDITABLE, $ - COLUMN_LABELS=['X','Y','LAT','min','LON','min','contour','depth'], $ - ROW_LABELS=ROWLAB, YSIZE=max([10,nngp]),XSIZE=8, /RESIZEABLE_COLUMNS, $ - /SCROLL,Y_SCROLL_SIZE=10,X_SCROLL_SIZE=8, $ - COLUMN_WIDTHS=[80,80,80,80,80,80,60,90],UNITS=0) - WIDGET_CONTROL,Wgrideditor(1) ,SET_VALUE= gridmat - - - I=0 - WGlines(I)=WIDGET_BASE(pbase, /FRAME, /ROW) - WG(I,0)=WIDGET_LABEL(WGlines(I),VALUE='Number of mesh nodes: ') - WG(I,3)=WIDGET_TEXT(WGlines(I), XSIZE=8, YSIZE=1, $ - VALUE=STRCOMPRESS(String(nngp))) - WG(I,5)=WIDGET_LABEL(WGlines(I),VALUE=' ') - WG(I,6)=WIDGET_BUTTON(WGlines(I),VALUE='UNDO') - - I=2 - WGlines(I)=WIDGET_BASE(pbase, /FRAME, /ROW) - WG(2,0)=WIDGET_LABEL(WGlines(I),VALUE='Mesh and timesteps:') - WG(2,1)=WIDGET_DROPLIST(WGlines(I), $ - VALUE=[ 'Read model timesteps file', $ - 'Update model timesteps', $ - 'Optimize current node position', $ - 'Optimize nodes position (top 20)']) - WG(2,2)=WIDGET_LABEL(WGlines(I),XSIZE=5,YSIZE=1,VALUE='z-offset:') - WG(2,3)=WIDGET_TEXT(WGlines(I),XSIZE=7,YSIZE=1,/EDITABLE,VALUE=strcompress(STRING(zoffset))) - WG(2,4)=WIDGET_BASE(WGlines(I), /ROW,/NonExclusive) - WG(2,5)=Widget_Button(WG(2,4), Value='Update on move') - Widget_Control, WG(2,5), Set_Button=1 - - - I=3 - WGlines(I)=WIDGET_BASE(pbase, /FRAME, /ROW) - WG(I,0)=WIDGET_LABEL(WGlines(I),VALUE='Work on nodes / contour: ') - WG(I,1)=WIDGET_DROPLIST(WGlines(I), $ - VALUE=[ 'Initialize to specials from *.grgp', $ - 'Import polymesh rand and insel', $ - 'Initialize to zero', $ - 'Add open contour (DX1 in km)', $ - 'Force open contour (DX1 in km)', $ - 'Remove islands from contour', $ - 'Check for segment crossing', $ - 'Flip ordering of island', $ - 'Filter contour points ( < DX0/2)', $ - 'Remove islands out of contour', $ - 'Add depth line (Hi,DX0 in km):', $ - 'Draw line (DX0 in km)', $ - 'Fill with nodes', $ - 'Updates depths of nodes']) - WG(I,2)=WIDGET_LABEL(WGlines(I),VALUE='In:') - WG(I,3)=WIDGET_DROPLIST(WGlines(I), $ - VALUE=[ 'Whole', $ - 'Zoom', $ - 'c_zone']) - - WG(I,4)=WIDGET_BUTTON(WGlines(I),VALUE='Zoom on point') - WG(I,5)=WIDGET_BUTTON(WGlines(I),VALUE='Zoom -') - - I=4 - WGlines(I)=WIDGET_BASE(pbase, /FRAME, /ROW) - WG(I,0)=WIDGET_LABEL(WGlines(I),VALUE='Work on mesh: ') - WG(I,1)=WIDGET_DROPLIST(WGlines(I), $ - VALUE=[ 'Remove selected node with 4 neighbors', $ - 'Remove selected non-bound. node with 3 neighbors', $ - 'Remove selected boundary node with 3 neighbors', $ - 'Remove selected boundary node with 2 neighbors', $ - 'Remove all nodes with 4 neighbors', $ - 'Remove bound. nodes with 3 neigh. (top 200 only)', $ - 'Remove all bound. nodes with 3 neighbors', $ - 'Remove all bound. nodes with 2 neighbors', $ - 'Re-generates outside contour, set Z.', $ - 'Re-generates land+islands depths, set Z.' ]) - WG(I,3)=WIDGET_LABEL(WGlines(I),VALUE='Save file:') - WG(I,4)=WIDGET_DROPLIST(WGlines(I), $ - VALUE=['grid (grgp)','mesh (msh)', $ - 'polymesh rand and insel','shoreline slope','slope grid']) - - - I=5 - WGlines(I)=WIDGET_BASE(pbase, /FRAME, /ROW) - WG(I,12)=WIDGET_LABEL(WGlines(I),VALUE='H land/sea:') - WG(I,13)=WIDGET_TEXT(WGlines(I), $ - XSIZE=5,/EDITABLE,VALUE=strcompress(STRING(Hlandsea))) - WG(I,0)=WIDGET_LABEL(WGlines(I),VALUE='H0:') - WG(I,1)=WIDGET_TEXT(WGlines(I), $ - XSIZE=5,/EDITABLE,VALUE=strcompress(STRING(H0))) - WG(I,10)=WIDGET_LABEL(WGlines(I),VALUE='Hi:') - WG(I,11)=WIDGET_TEXT(WGlines(I), $ - XSIZE=5,/EDITABLE,VALUE=strcompress(STRING(Hi))) - WG(I,8)=WIDGET_LABEL(WGlines(I),VALUE='H1:') - WG(I,9)=WIDGET_TEXT(WGlines(I), $ - XSIZE=5,/EDITABLE,VALUE=strcompress(STRING(H1))) - WG(I,2)=WIDGET_LABEL(WGlines(I),VALUE='DX0:') - WG(I,3)=WIDGET_TEXT(WGlines(I), $ - XSIZE=5,/EDITABLE,VALUE=strcompress(STRING(DX0))) - WG(I,4)=WIDGET_LABEL(WGlines(I),VALUE='DX1:') - WG(I,5)=WIDGET_TEXT(WGlines(I), $ - XSIZE=5,/EDITABLE,VALUE=strcompress(STRING(DX1))) - WG(I,6)=WIDGET_LABEL(WGlines(I),VALUE='T0:') - WG(I,7)=WIDGET_TEXT(WGlines(I), $ - XSIZE=5,/EDITABLE,VALUE=strcompress(STRING(T0))) - - I=8 - - WGlines(8)=WIDGET_BASE(pbase, /FRAME, /ROW) - WG(I,0)=WIDGET_BUTTON(WGlines(I), VALUE='Move GPs') - WG(I,1)=WIDGET_BUTTON(WGlines(I), VALUE='End of moves') - WG(I,2)=WIDGET_BUTTON(WGlines(I), VALUE='Add GPs') - WG(I,3)=WIDGET_BUTTON(WGlines(I), VALUE='End of adds') - WG(I,3)=WIDGET_BUTTON(WGlines(I), VALUE='Clean GP notri') - WG(I,5)=WIDGET_BUTTON(WGlines(I), VALUE='Add GPspec') - WG(I,6)=WIDGET_BUTTON(WGlines(I), VALUE='Del GP (table)') - WG(I,7)=WIDGET_BUTTON(WGlines(I), VALUE='Del GP (screen)') - - I=6 - WGlines(I)=WIDGET_BASE(pbase, /FRAME, /ROW) - WG(I,0)=WIDGET_LABEL(WGlines(I),VALUE='Make contour:') - WG(I,1)=WIDGET_DROPLIST(WGlines(I), $ - VALUE=[ 'at Hlandsea (DX0)', $ - 'at coastline (DX0)']) - WG(I,2)=WIDGET_LABEL(WGlines(I),VALUE='Make triangles:') - WG(I,3)=WIDGET_DROPLIST(WGlines(I), $ - VALUE=[ 'rough (with land)', $ - 'clean (no land)', 'full (with zones)']) - - Line7 = WIDGET_BUTTON(pbase, VALUE='Close mesh editor') - WIDGET_CONTROL, /REALIZE, pbase - Displaygrid - subwin(3)=1 - XMANAGER, 'GENERATOR', /NO_BLOCK, pbase -RETURN -END - - -;---------------------------------------------------------------------------- -PRO Generator_event, ev -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y,c_lon,c_lat -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth -;** 3 ** I/O and data variables -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -;** 4 ** subwindow widgets widgets -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON WGene,Wgrideditor,WG,root -COMMON Builder,ngp,H0,H1,Hi,KH0,KH1,DX0,DX1,T0,ROA,ROI,gridbuild_click -COMMON LOCAL_tri,LIST -COMMON UNDO,gridmat0,nngp0,ntri0,trigp0,contourline0 -COMMON COAST, coastxy,coastl,coastnp,GSHHSPoly,GSHHSPoint,GSHHSPoly2,GSHHSPoint2 -COMMON SHORELINE, slopes -COMMON SHORELINE2, open_boundary -COMMON TIMESTEPSUG,TIMESTEPS,NTIMESTEPS,FLAGTSTEP, TIMESTEPS_ORDER -COMMON TIMESTEPSUG3, SIRATIO, JCELLS, LEN, ANGLE0, CROSSDIFF, TIMESTEPS_ALL -COMMON GRIDTIMESTEPS, zoffset, updateonmove, waveperiod -;*******END OF COMMON BLOCKS******************************* - - file1='' - type = TAG_NAMES(ev, /STRUCTURE) - ON_IOERROR, not_OPEN - -; -; Prepares for UNDO -; - IF (ev.id NE WG(0,6)) THEN BEGIN - gridmat0=gridmat - nngp0=nngp - IF (N_ELEMENTS(ntri) GT 0) THEN ntri0=ntri - IF (N_ELEMENTS(TRIGP) GT 0) THEN TRIGP0=TRIGP - IF (N_ELEMENTS(contourline) GT 0) THEN contourline0=contourline - ENDIF -; -; Performs actions -; - CASE type OF - 'WIDGET_BUTTON': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE value OF - 'Update on move': updateonmove = 1-updateonmove; - 'Close mesh editor': BEGIN - WIDGET_CONTROL, /DESTROY, ev.top - WIDGET_CONTROL,root, SENSITIVE=1 - subwin(0)=0 - RETURN - END - 'Choose GP #1':BEGIN - WIDGET_CONTROL,Wdraw,EVENT_PRO='gridbuild_draw_event' - gridbuild_click=0 - END - - 'UNDO':BEGIN - gridmat=gridmat0 - nngp=nngp0 - IF (N_ELEMENTS(ntri0) GT 0) THEN BEGIN - ntri=ntri0 - trigp=trigp0 - ENDIF - IF (N_ELEMENTS(contourline0) GT 0) THEN BEGIN - contourline=contourline0 - ENDIF - IF (N_ELEMENTS(TRIGP0) GT 0) THEN BEGIN - TRIGP=TRIGP0 - ENDIF - Displaygrid - END - 'Move GPs':BEGIN - WIDGET_CONTROL,Wdraw,EVENT_PRO='gridbuild_draw_event' - gridbuild_click=1 - END - 'End of moves':BEGIN - WIDGET_CONTROL,Wdraw,EVENT_PRO='analyzer_event' - END - 'Add GPs':BEGIN - WIDGET_CONTROL,Wdraw,EVENT_PRO='gridbuild_draw_event' - gridbuild_click=2 - FOUND=BYTARR(nngp) - FOR I=0,ntri-1 DO BEGIN - FOUND(TRIGP(I,1:3)-1)=1 - ENDFOR - IND=WHERE(FOUND EQ 0,kount) - IF (kount GT 0) THEN PRINT,'IND IN NO TRI:',IND+1 - END - 'End of adds':BEGIN - WIDGET_CONTROL,Wdraw,EVENT_PRO='analyzer_event' - END - 'Add GPspec':BEGIN - IF N_ELEMENTS(specmat) NE 0 THEN BEGIN - nngp=nngp+1 - temp=gridmat - gridmat=DBLARR(8,nngp) - gridmat(*,0:nngp-2)=temp - gridmat(0:5,nngp-1)=specmat(1:6,c_spec) - print,'New GP:',specmat(1:6,c_spec) - ROWLAB=STRCOMPRESS(STRING(FINDGEN(nngp)+1,FORMAT='(I6)')) - gridf=STRARR(6,nngp) - gridf(0:1,*)='(F8.4)' - gridf(2,*)='(I4)' - gridf(3,*)='(F7.3)' - gridf(4,*)='(I5)' - gridf(5,*)='(F10.2)' - - WIDGET_CONTROL,WGrideditor(1),INSERT_ROW=1 - Displaygrid - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp-1)) - ENDIF - END - - 'Zoom on point':BEGIN ; Zooms in on point - selec=WIDGET_INFO(Wgrideditor(1),/TABLE_SELECT) - XC=gridmat(0,selec(1)) - YC=gridmat(1,selec(1)) - ;DELX=(nx-1)*dx*(xll-rlonmin)/ABS(rlonmax-rlonmin) - DDX=ROUND(FLOAT(nx)/100.) - DDY=ROUND(FLOAT(ny)/100.) - PRINT,'xc,yc:',xc,yc,ddx,ddy - nxzmin=MIN([MAX([0,ROUND((xc)/dx)-ddx]),nx-1]) - nyzmin=MIN([MAX([0,ROUND((yc)/dy)-ddy]),ny-1]) - nxzmax=MIN([MAX([0,ROUND((xc)/dx)+ddx]),nx-1]) - nyzmax=MIN([MAX([0,ROUND((yc)/dy)+ddy]),ny-1]) - print,'ZOOM P:',nxzmin,nxzmax,nyzmin,nyzmax - doplot - END - 'Zoom -':BEGIN ; Zooms out of point - selec=WIDGET_INFO(Wgrideditor(1),/TABLE_SELECT) - XC=gridmat(0,selec(1)) - YC=gridmat(1,selec(1)) - ;DELX=(nx-1)*dx*(xll-rlonmin)/ABS(rlonmax-rlonmin) - DDX=ROUND(FLOAT(nx)/30.) - DDY=ROUND(FLOAT(ny)/30.) - PRINT,'xc,yc:',xc,yc,ddx,ddy - nxzmin=MIN([MAX([0,ROUND((xc)/dx)-ddx]),nx-1]) - nyzmin=MIN([MAX([0,ROUND((yc)/dy)-ddy]),ny-1]) - nxzmax=MIN([MAX([0,ROUND((xc)/dx)+ddx]),nx-1]) - nyzmax=MIN([MAX([0,ROUND((yc)/dy)+ddy]),ny-1]) - print,'ZOOM P:',nxzmin,nxzmax,nyzmin,nyzmax - doplot - END - 'Del GP (table)':BEGIN ; Deletes the selected range of grid points - selec=WIDGET_INFO(Wgrideditor(1),/TABLE_SELECT) - idel=selec(3)-selec(1)+1 ;number of deleted grid points - ; print,'selec',selec,'idel:',idel - WIDGET_CONTROL,Wgrideditor(1),/DELETE_ROWS , $ - USE_TABLE_SELECT=[-1,selec(1),5,selec(3)] - nngp=nngp-idel ;new number of grid points - tempo=gridmat - gridmat=DBLARR(8,nngp) - IF selec(1) gt 0 THEN gridmat(*,0:selec(1)-1)=tempo(*,0:selec(1)-1) - IF selec(1) LT nngp THEN gridmat(*,selec(1):nngp-1)=tempo(*,selec(3)+1:nngp+idel-1) - MAKE_CONTOUR - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - END -; - 'Del GP (screen)':BEGIN ; Deletes the selected points - PRINT,'Point ',C_GP - IF (C_GP GT 0 ) THEN BEGIN - PRINT,'Point ',C_GP - idel= 1;number of deleted grid points - WIDGET_CONTROL,Wgrideditor(1),/DELETE_ROWS , $ - USE_TABLE_SELECT=[-1,C_GP-1,5,C_GP-1] - nngp=nngp-idel ;new number of grid points - tempo=gridmat - gridmat=DBLARR(8,nngp) - IF C_GP gt 1 THEN gridmat(*,0:C_GP-2)=tempo(*,0:C_GP-2) - IF C_GP LT nngp THEN gridmat(*,C_GP-1:nngp-1)=tempo(*,C_GP:nngp) - MAKE_CONTOUR - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - PRINT,'Point ',C_GP,' has been deleted.' - C_GP=0 - ENDIF - END - 'Clean GP notri':BEGIN ; - FOUND=BYTARR(nngp) - FOR I=0,ntri-1 DO BEGIN - FOUND(TRIGP(I,1:3)-1)=1 - ENDFOR - IND=WHERE(FOUND EQ 0,kount) - IF (kount GT 0) THEN BEGIN - IND2=REVERSE(SORT(IND)) - PRINT,'IND:',IND2+1 - FOR I=0,kount-1 DO BEGIN - tempo=gridmat - nngp=nngp-1 - gridmat=DBLARR(8,nngp) - J=IND(IND2(I)) - PRINT,'REMOVING IND:',IND2(I),IND(IND2(I)) - - IF J gt 0 THEN gridmat(*,0:J-1)=tempo(*,0:J-1) - IF J LT nngp-1 THEN gridmat(*,J:nngp-1)=tempo(*,J+1:nngp) - ENDFOR - ENDIF - MAKE_CONTOUR - END - - ENDCASE - END - 'WIDGET_TABLE_CH': BEGIN - CASE (ev.id) OF - Wgrideditor(1):BEGIN - IF (ev.type LE 2) THEN BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=valeur, $ - USE_TABLE_SELECT=[ev.x,ev.y,ev.x,ev.y] - ;/USE_TEXT_SELECT - gridmat(ev.X,ev.Y)=valeur(0,0) - Updatetable,ev.X,ev.Y - IF (ev.X EQ 6) THEN MAKE_CONTOUR - ENDIF - END - ENDCASE - END - 'WIDGET_TEXT_CH': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE ev.id OF - WG(5,1):BEGIN - H0=FLOAT(value(0)) - Speeds,H0,1/T0,cphi,cg,KH0 - END - WG(2,3):zoffset=FLOAT(value(0)) - WG(5,9):BEGIN - H1=FLOAT(value(0)) - Speeds,H1,1/T0,cphi,cg,KH1 - END - - - - WG(5,11):BEGIN - Hi=FLOAT(value(0)) - Speeds,Hi,1/T0,cphi,cg,KHi - END - WG(5,13):Hlandsea=FLOAT(value(0)) - WG(5,3):DX0=FLOAT(value(0)) - WG(5,5):DX1=FLOAT(value(0)) - WG(5,7):BEGIN - T0=FLOAT(value(0)) - Speeds,H0,1/T0,cphi,cg,KH0 - Speeds,H1,1/T0,cphi,cg,KH1 - END - - WG(2,1): gfact=FLOAT(value(0)) - ENDCASE - END -; -; Management of droplists -; - 'WIDGET_DROPLIST':BEGIN - CASE ev.id of - WG(3,3) : ROA=ev.index - WG(6,1) : BEGIN - nngp_old2=nngp - IF (ev.index EQ 0 AND N_ELEMENTS(gd) GT 0) THEN BEGIN -; -; Gets a depth contour -; - x=findgen(nx)*dx - y=findgen(ny)*dy - CONTOUR,gd,x,y,LEVELS=Hlandsea,PATH_INFO=info,PATH_XY=xyn,CLOSED=0 -; Converts pixel units to kilometers - xy=CONVERT_COORD(xyn,/NORMAL,/TO_DATA) - -; -; Transforms the coastline data to the same format as the contours -; - ENDIF ELSE BEGIN - x=findgen(nx)*dx - y=findgen(ny)*dy - taille=SIZE(GSHHSPoly) - taille2=SIZE(GSHHSPoint) - Npolymax=taille(1)-1 - cont1={contourc,TYPE:1,HIGH_LOW:1,LEVEL:1, $ - N:1L,OFFSET:1L,VALUE:0.d} - info=REPLICATE(cont1,Npolymax) - Npointmax=taille2(1) - XY=FLTARR(2,Npointmax) - Npoly=0L - Npoint=0L - FOR I=0L,Npolymax-1 DO BEGIN - info(Npoly).TYPE=1 - Npoint_this=0L - FOR J=GSHHSPoly(I,0),GSHHSPoly(I+1,0)-1 DO BEGIN -; IF (GSHHSPoint(J,0) GE 0) AND (GSHHSPoint(J,0) LE dx*(n-1)) $ -; AND (GSHHSPoint(J,1) GE 0) AND (GSHHSPoint(J,1) LE dy*(ny-1)) THEN BEGIN - IF (GSHHSPoint(J,0) GE dx*nxzmin) AND (GSHHSPoint(J,0) LE dx*nxzmax) $ - AND (GSHHSPoint(J,1) GE dy*nyzmin) AND (GSHHSPoint(J,1) LE dy*nyzmax) THEN BEGIN - XY(0:1,Npoint+Npoint_this)=GSHHSPoint(J,0:1) - Npoint_this=Npoint_this+1 - ENDIF ELSE BEGIN -; -; Detects the boundary crossing: TYPE=0 -; - info(Npoly).TYPE=0 - ENDELSE - ENDFOR - info(Npoly).OFFSET=Npoint - Npoint=Npoint+Npoint_this - info(Npoly).N=Npoint_this - IF (Npoint_this GT 0) THEN Npoly=Npoly+1 - ENDFOR -; - IF (NPOLY EQ 0) THEN BEGIN - Print,'Did not find any polygon in zoom window' - RETURN - ENDIF - - info_old=info - info=REPLICATE(cont1,Npoly) - info(0:Npoly-1)=info_old(0:Npoly-1) - ENDELSE -; -; Now works with the contour or coastline data -; - Outdump=0 - - IF (outdump EQ 1) THEN BEGIN - GET_LUN,unit1 - OPENW,unit1,'boundarystuff.txt' - ENDIF - contorder=LONARR(N_ELEMENTS(info.TYPE)) - naddmax=0 - FOR I = 0, (N_ELEMENTS(info.TYPE) - 1 ) DO BEGIN - contorder(I)=info(I).N*((2*info(I).TYPE-1L)) - naddmax=naddmax+info(I).N - ENDFOR - I=WHERE(contorder GT 0,kount) - IF (kount GT 0) THEN contorder(I)=max(contorder)-contorder(I) - addpoints=DBLARR(2,naddmax) - naddpoint=0 -; -;2. Search for boundary intersections -; -;2.1 Sorts the polygons to put first those that cross the boundary (TYPE=0) -; - contorder1=SORT(contorder) -; -;2.2 Searches the polygons -; - FOR J2 = 0, (N_ELEMENTS(info) - 1 ) DO BEGIN - I=contorder1(J2) - S=0. - naddJ=0L - ; Sub-samples the points on the depth contour to make sure that no two points are too close - ; further refined to avoid segments that are too long ? - X0=xy(0,INFO(I).OFFSET) - Y0=xy(1,INFO(I).OFFSET) -; -; First computes the length of the contour -; - FOR J=1L,info(I).N-1 DO BEGIN - X1=xy(0,INFO(I).OFFSET+J) - Y1=xy(1,INFO(I).OFFSET+J) - LENGTH=SQRT((X1-X0)^2+(Y1-Y0)^2) - S=S+LENGTH - X0=X1 - Y0=Y1 - ENDFOR -; -; Only add points along islands that are long enough -; - IF (S GT 2.5*DX0) THEN BEGIN - XB=-9000 - YB=-9000 - XPREV=-9000 - YPREV=-9000 - S=DX0 - naddJ=0L - X0=xy(0,INFO(I).OFFSET+info(I).N-1) - Y0=xy(1,INFO(I).OFFSET+info(I).N-1) - FOR J=info(I).N-2,0,-1L DO BEGIN - X1=xy(0,INFO(I).OFFSET+J) - Y1=xy(1,INFO(I).OFFSET+J) - IF ((X1 NE x(0)) AND (X1 NE MAX(x)) AND $ - (Y1 NE Y(0)) AND (Y1 NE MAX(Y))) THEN BEGIN - - LENGTH=SQRT((X1-X0)^2+(Y1-Y0)^2) - S=S+LENGTH -; -; We should probably add some other constraints (change in angle ...) - IF (S GT DX0) THEN BEGIN - addOK1=0 - IF (naddJ GT 0L) THEN BEGIN -; -; Checks distance with first added point on the island and previous added point -; - L2=SQRT((X1-XB)^2+(Y1-YB)^2) - L1=SQRT((X1-XPREV)^2+(Y1-YPREV)^2) - IF (L2 GT 0.8*DX0 AND L1 GT DX0 ) THEN addOK1=1 - ENDIF ELSE BEGIN - addOK1=1 - ENDELSE - IF (addOK1 EQ 1) THEN BEGIN - naddJ=naddJ+1L - WEIGHT=(DX0-(S-LENGTH)) - addpoints(0,naddpoint-1+naddJ)=X1 - addpoints(1,naddpoint-1+naddJ)=Y1 - XPREV=X1 - YPREV=Y1 - IF (naddJ EQ 1) THEN BEGIN - XB=X1 - YB=Y1 - ENDIF - S=0. - ENDIF ; addOK1 - ENDIF ; S GT DX0 - ENDIF ELSE BEGIN - S=0 - ENDELSE - X0=X1 - Y0=Y1 - ENDFOR - IMIN=0 - - PRINT,'Adding nodes along contour? ',J2,naddj -; -; Removes islands with 2 points or less -; - IF (naddJ GT 2) THEN BEGIN -; -; Corrects for crossing points ... now only in additional list: should probably do -; over the entire contourline ... -; - FOR ITER=0,4 DO BEGIN - NCROSS=0L - FOR J=0L,naddJ-2L DO BEGIN - X1=addpoints(0,naddpoint+J) - Y1=addpoints(1,naddpoint+J) - X2=addpoints(0,naddpoint+J+1) - Y2=addpoints(1,naddpoint+J+1) - K=0L - WHILE (K LT J-1L) DO BEGIN - X3=addpoints(0,naddpoint+K) - Y3=addpoints(1,naddpoint+K) - X4=addpoints(0,naddpoint+K+1) - Y4=addpoints(1,naddpoint+K+1) - - DENOM=(Y4-Y3)*(X2-X1)-(Y2-Y1)*(X4-X3) - IF ABS(DENOM) GT 1E-8 THEN BEGIN -; -; P and Q are the coordinates of the crossing point along the two segments -; - P=((X3-X1)*(Y4-Y3)-(Y3-Y1)*(X4-X3))/DENOM - Q=((X3-X1)*(Y2-Y1)-(Y3-Y1)*(X2-X1))/DENOM - IF (( P GT 0 AND P LT 1 ) AND (Q GT 0 AND Q LT 1)) THEN BEGIN -; -; Flips the crossed part... -; - NCROSS=NCROSS+1L - TEMPO=addpoints(*,naddpoint+K+1L:naddpoint+J) - FOR KK=0L,J-K-1L DO BEGIN - addpoints(*,naddpoint+K+1L+KK)=TEMPO(*,J-K-1L-KK) - ENDFOR - ENDIF - ENDIF - K=K+1L - ENDWHILE - ENDFOR - IF NCROSS EQ 0L THEN BREAK - ENDFOR ;ITER - - IF info(I).TYPE EQ 0 THEN BEGIN - XALL=addpoints(0,naddpoint:naddpoint-1+naddJ) - YALL=addpoints(1,naddpoint:naddpoint-1+naddJ) - XG=gridmat(0,contourline(contourline(1,0),0)) - YG=gridmat(1,contourline(contourline(1,0),0)) -; -; FIX THIS : distances to window frame -; - IF ( (nx-1)*dx-XG LT DX0) THEN $ - DIST2=MAX(XALL , IMIN) ELSE $ - DIST2=SQRT( MIN( (XALL-XG)^2 + (YALL-YG)^2,IMIN) ) - ENDIF - - IF (J2 LT 10) THEN print,'Adding coastline on contour:',J2,info(I).TYPE,naddJ,contourline(1,0)+naddJ,IMIN - INDEX=FINDGEN(naddJ) - gridmatold=gridmat - contold=contourline - nngpold=nngp - nngp=LONG(nngp)+LONG(naddJ) - gridmat=DBLARR(8,nngp) - ncontold=1+contold(1) - ncontnew=1+contold(1)+naddJ - contourline=LONARR(ncontold+naddJ,2) -; updates header of contourline - contourline(0:1,0:1)=contold(0:1,0:1) - contourline(1,0)=contourline(1,0)+naddJ -; copies points before boundary points - IF contold(0,0) GT 0 THEN $ - gridmat(*,0:contold(0,0)-1)=gridmatold(*,0:contold(0,0)-1) -; copies boundary points before last gap (included) - I1=contold(contold(0,0),0) - I2=contold(contold(1,0),0) - gridmat(*,I1:I2)=gridmatold(*,I1:I2) - contourline(2:ncontold-1,*)=contold(2:ncontold-1,*) - ;contourline(2:ncontold-1,0)=FINDGEN(ncontold-2)+contold(0,0) -; adds new points at last gap - IND=contold(contold(1,0),0)+1 - IF (J2 GT 0) THEN BEGIN - gridmat(0:1,IND:IND+naddJ-1)=addpoints(*,naddpoint+REVERSE(SHIFT(INDEX,-IMIN))) - ENDIF ELSE BEGIN - gridmat(0:1,IND:IND+naddJ-1)=addpoints(*,naddpoint+SHIFT(INDEX,-IMIN)) - ENDELSE - contourline(ncontold:ncontold+naddJ-1,0)=FINDGEN(naddJ)+contold(1,0)-1 - contourline(ncontold-2:ncontold+naddJ-1,1)=1 - IF (info(I).TYPE NE 0) THEN BEGIN - contourline(ncontold,1)=-1 - ENDIF ELSE BEGIN - contourline(ncontold:ncontold+naddJ-1,1)=1 - ENDELSE - gridmat(6,contourline(ncontold:ncontold+naddJ-1,0)) $ - =contourline(ncontold:ncontold+naddJ-1,1) -; -; Checks distance with respect to contour -; - DIST1=SQRT( (gridmat(0,contold(1,0)+1)-gridmat(0,contold(1,0)))^2 + $ - (gridmat(1,contold(1,0)+1)-gridmat(1,contold(1,0)))^2 ) - IF info(I).TYPE EQ 0L AND DIST1 LT DX1 THEN BEGIN - contourline(ncontold+1:ncontold+2,1)=1 - gridmat(6,contourline(ncontold+2,1))=1 - ENDIF - IF (J2 LT 10) THEN PRINT,'HEY2 - IF (contold(1,0) LT nngpold-1) THEN $ - gridmat(*,contold(1,0)+naddJ+1:nngp-1)=gridmatold(*,contold(1,0)+1:nngpold-1) - IF (J2 LT 10) THEN print,'New contourline:' ;, FIX(contourline) ; ,FORMAT='(10I8)' - IF (J2 LT 10) THEN PRINT,'HEY3' - ENDIF ; (naddJ GT 0) - ENDIF - ENDFOR - IF (outdump EQ 1) THEN BEGIN - CLOSE,unit1 - FREE_LUN,unit1 - ENDIF - - FOR I=contourline(contourline(0,0),0),contourline(contourline(1,0),0) DO BEGIN - XYtoLatLon,gridmat(0,I),gridmat(1,I),latdeg,latmin,londeg,lonmin - gridmat(2,I)=latdeg - gridmat(3,I)=latmin - gridmat(4,I)=londeg - gridmat(5,I)=lonmin - ENDFOR - Displaygrid - END - WG(6,3) : BEGIN - CASE ev.index OF - 0:MakeTriangles,0,0 - 1:MakeTriangles,1,0 - 2:MakeTriangles,1,1 - ENDCASE - END -; -; Droplist actions -; - WG(4,1):BEGIN - CASE ev.index OF -; -; Removing node that is in 4 triangles (4 neighbor nodes) -; - 0: BEGIN - IF (C_GP GT 0 ) THEN BEGIN - MESH_CLEAN_4,C_GP - C_GP=0 - ENDIF - END -; -; Removing node that is in 3 triangles (3 neighbor nodes) -; - 1: BEGIN - IF (C_GP GT 0 ) THEN BEGIN - IOBP=0 - MSH_BOUNDARY1,C_GP-1,IOBP - IF (IOBP EQ 0) THEN BEGIN - MESH_CLEAN_3,C_GP - C_GP=0 - ENDIF - ENDIF - END -; -; Removing boundary node that is in 2 triangles (3 neighbor nodes) -; - 2: BEGIN - IF (C_GP GT 0 ) THEN BEGIN - IOBP=0 - MSH_BOUNDARY1,C_GP-1,IOBP - IF (IOBP EQ 1) THEN BEGIN - DELOK = 1 - MESH_CLEAN_2,C_GP,180.,DELOK - C_GP=0 - ENDIF - ENDIF - END - -; -; Removing boundary node that is in 1 triangles (2 neighbors) -; - 3: BEGIN - IF (C_GP GT 0 ) THEN BEGIN - IOBP=0 - MSH_BOUNDARY1,C_GP-1,IOBP - IF (IOBP EQ 1) THEN BEGIN - MESH_CLEAN_1,C_GP - C_GP=0 - ENDIF - ENDIF - END - - 4: BEGIN - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - NODES4=WHERE(NEIGH EQ 4,kount4) - ORDER=REVERSE(SORT(NODES4)) -; Loops in reverse order because the node number will change as nodes are deleted - FOR IDEL=0,kount4-1 DO BEGIN - ;FOR IDEL=0,5 DO BEGIN - PRINT,'Treating node #',NODES4(ORDER(IDEL))+1,', ', IDEL+1,' out of ',kount4 - MESH_CLEAN_4,NODES4(ORDER(IDEL))+1 - ENDFOR - END -; -; Removes boundary nodes with 3 neighbors that are in the top 200 -; - 5: BEGIN - UPDATE_TIMESTEPS - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - FOR IND=0,199 DO BEGIN - IDEL=TIMESTEPS_ORDER(IND) - IF (NEIGH(IDEL) EQ 3 AND IOBP(IDEL) EQ 1 ) THEN BEGIN - DELOK=1 - PRINT,'Treating node #', IDEL+1,IND,' out of 200' - MESH_CLEAN_2,IDEL+1,120., DELOK -; Update TIMESTEPS_ORDER after deletion - IF DELOK EQ 1 THEN BEGIN - TIMESTEPS_ORDER_OLD=TIMESTEPS_ORDER - NODESUP=WHERE(TIMESTEPS_ORDER GT IDEL,kount) - IF (kount GT 0) THEN TIMESTEPS_ORDER(NODESUP) = TIMESTEPS_ORDER(NODESUP)-1 - ENDIF -; Recomputes number of neighbors ... - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - ENDIF - - ENDFOR - END - -; -; Removes all boundary nodes with 3 neighbors -; - 6: BEGIN - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - NODES4=WHERE(NEIGH EQ 3 AND IOBP EQ 1,kount4) - ORDER=REVERSE(SORT(NODES4)) -; Loops in reverse order because the node number will change as nodes are deleted - FOR IDEL=0,kount4-1 DO BEGIN - IF (NEIGH(NODES4(ORDER(IDEL))) EQ 3) THEN BEGIN - DELOK=1 - PRINT,'Treating node #',NODES4(ORDER(IDEL))+1,', ', IDEL+1,' out of ',kount4 - MESH_CLEAN_2,NODES4(ORDER(IDEL))+1,120., DELOK -; Recomputes number of neighbors ... - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - ENDIF - - ENDFOR - END - -; -; Removes all boundary nodes with 2 neighbors -; - 7: BEGIN - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - NODES4=WHERE(NEIGH EQ 2 AND IOBP EQ 1,kount4) - ORDER=REVERSE(SORT(NODES4)) -; Loops in reverse order because the node number will change as nodes are deleted - FOR IDEL=0,kount4-1 DO BEGIN - ;FOR IDEL=0,5 DO BEGIN - PRINT,'Treating node #',NODES4(ORDER(IDEL))+1,', ', IDEL+1,' out of ',kount4 - MESH_CLEAN_1,NODES4(ORDER(IDEL))+1 - ENDFOR - END -; -; Re-generates contour ... -; - 8: BEGIN - IOBP=INTARR(NNGP) - MAXNEIGH=1 - print,'Updates depths on contour ... ' - IF (C_GP LT 0 ) THEN BEGIN -; To be debugged ... - GET_BOUNDARY, IOBP, NEIGHBOR - GetCycleBoundaries, IOBP, NEIGHBOR, NbCycle, LengthCycle, FirstInCycle, StatusCycle - PRINT,'Boundary ?',NbCycle - - - FOR iCycle=0,NbCycle-1 DO BEGIN - TheLength=LengthCycle(iCycle) - PRINT,'CYCLE:',iCycle,TheLength - IPwork=FirstInCycle(iCycle) - FOR I=0,TheLength-1 DO BEGIN - PRINT,'CYCLE:',iCycle,TheLength - IPwork=NEIGHBOR(IPwork) - ENDFOR - ENDFOR - ENDIF - - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - FOR I=0,NNGP-1 DO BEGIN - DEPTHMIN=12000 - DEPTHMAX=3 - IF IOBP(I) EQ 1 THEN BEGIN - ;GRIDMAT(7,I)=3 - - FOR J=0,MAXNEIGH-1 DO BEGIN - IF (VNEIGH(I,J) GT 0) THEN BEGIN - I2=VNEIGH(I,J) - IF (IOBP(I2) EQ 0) THEN BEGIN ; only looks at point in domain - IF GRIDMAT(7,I2) LT DEPTHMIN THEN BEGIN - DEPTHMIN=GRIDMAT(7,I2) - INDMIN=I2 - ;PRINT,I+1,INDMIN+1,NNGP,IOBP(INDMIN+1),DEPTHMIN,c_lon,c_lat - ENDIF - IF GRIDMAT(7,I2) GT DEPTHMAX THEN BEGIN - DEPTHMAX=GRIDMAT(7,I2) - INDMAX=I2 - ;PRINT,I+1,INDMIN+1,NNGP,IOBP(INDMIN+1),DEPTHMIN,c_lon,c_lat - ENDIF - ENDIF - ENDIF - ENDFOR - ENDIF - IF (GRIDMAT(7,I) EQ 3) THEN GRIDMAT(7,I)=DEPTHMIN - ENDFOR - END - -; -; Re-generates contour for islands... -; - 9: BEGIN - IOBP=INTARR(NNGP) - MAXNEIGH=1 - print,'Updates depths on contour ... ' - IF (C_GP LT 0 ) THEN BEGIN -; To be debugged ... - GET_BOUNDARY, IOBP, NEIGHBOR - GetCycleBoundaries, IOBP, NEIGHBOR, NbCycle, LengthCycle, FirstInCycle, StatusCycle - PRINT,'Boundary ?',NbCycle - - - FOR iCycle=0,NbCycle-1 DO BEGIN - TheLength=LengthCycle(iCycle) - PRINT,'CYCLE:',iCycle,TheLength - IPwork=FirstInCycle(iCycle) - FOR I=0,TheLength-1 DO BEGIN - PRINT,'CYCLE:',iCycle,TheLength - IPwork=NEIGHBOR(IPwork) - ENDFOR - ENDFOR - ENDIF - - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - FOR I=0,NNGP-1 DO BEGIN - DEPTHMIN=3 - DEPTHMAX=3 - - X=gridmat(0,I) - Y=gridmat(1,I) - - IF (X GE nxzmin*dx AND X LE nxzmax*dx $ - AND Y GE nyzmin*dy AND y LE nyzmax*dy AND IOBP(I) EQ 1) THEN BEGIN - GRIDMAT(7,I)=3 - - FOR J=0,MAXNEIGH-1 DO BEGIN - IF (VNEIGH(I,J) GT 0) THEN BEGIN - I2=VNEIGH(I,J) - IF (IOBP(I2) EQ 0) THEN BEGIN ; only looks at point in domain - IF GRIDMAT(7,I2) LT DEPTHMIN THEN BEGIN - DEPTHMIN=GRIDMAT(7,I2) - INDMIN=I2 - ;PRINT,I+1,INDMIN+1,NNGP,IOBP(INDMIN+1),DEPTHMIN,c_lon,c_lat - ENDIF - IF GRIDMAT(7,I2) GT DEPTHMAX THEN BEGIN - DEPTHMAX=GRIDMAT(7,I2) - INDMAX=I2 - ;PRINT,I+1,INDMIN+1,NNGP,IOBP(INDMIN+1),DEPTHMIN,c_lon,c_lat - ENDIF - ENDIF - ENDIF - ENDFOR - ENDIF - IF (DEPTHMIN LT 3) THEN BEGIN - GRIDMAT(7,I)=DEPTHMIN-1. - ;PRINT,I+1, GRIDMAT(7,I) - ENDIF - - ENDFOR - END - ENDCASE - END -; ./ - WG(3,1):BEGIN - CASE ev.index OF -; -; initializes grid and contourline -; - 0: BEGIN - WIDGET_CONTROL,Wgrideditor(1),/DELETE_ROWS , $ - USE_TABLE_SELECT=[-1,1,7,nngp-1] - nngp=nspecgp - gridmat=DBLARR(8,nngp) - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - WIDGET_CONTROL,WGrideditor(1),INSERT_ROW=nngp-1 - gridmat(0:5,0:nngp-1)=specmat(1:6,0:nspecgp-1) - contourline=LONARR(2,2)-1 - contourline(1,1)=1 - specmat(0,0:nspecgp-1)=FINDGEN(nspecgp)+1 - Displaygrid - END -; -; Import polymesh rand and insel -; - 1:BEGIN - nngp=0L - contourline=LONARR(2,2)-1 - datastatus(5)=1 - IEL=0L - file1='rand.dat' - GET_LUN,unit1 -; -; reads files a first time to get the array sizes -; - OPENR,unit1,file1 - COMMENT=' ' - READF,unit1,COMMENT - ;PRINT,'Comment:',COMMENT - NRAND=0L - WHILE (NRAND GE 0L) DO BEGIN - READF, unit1,iel - IF iel GE 0L THEN NRAND=NRAND+1L ELSE BREAK - ENDWHILE - CLOSE,unit1 - FREE_LUN,unit1 - - file1='insel.dat' - GET_LUN,unit1 - OPENR,unit1,file1 - READF,unit1,COMMENT - NINS=0L - WHILE (NINS GE 0L) DO BEGIN - READF, unit1,iel - IF iel GE 0 THEN BEGIN - NINS=NINS+1L - ENDIF ELSE BEGIN - IF iel EQ -1 THEN BEGIN - READF,unit1,COMMENT - PRINT,'Comment:',COMMENT - ENDIF ELSE BEGIN - BREAK - ENDELSE - ENDELSE - ENDWHILE - CLOSE,unit1 - FREE_LUN,unit1 - - NNGP=NRAND+NINS - contourline=LONARR(2+NNGP,2) - contourline(0,0)=0 - contourline(1,0)=nngp+1 - contourline(0:1,1)=0 - gridmat=DBLARR(8,NNGP) -; -; reads files a second time to get the data -; - file1='rand.dat' - GET_LUN,unit1 - OPENR,unit1,file1 - READF,unit1,COMMENT - lon=0. - lat=0. - depth=0. - I=0L - WHILE (I LT NRAND) DO BEGIN - READF, unit1,iel,lon,lat,depth - IF iel GE 0L THEN BEGIN -; -; Converts decimal degrees to degree , minute and X, Y -; - latdeg=FLOOR(lat) - IF latdeg LT 0 THEN latdeg=latdeg+1 - londeg=FLOOR(lon) - IF londeg LT 0 THEN londeg=londeg+1 - latmin=(lat-latdeg)*60. - lonmin=(lon-londeg)*60. - LatLontoXY,latdeg,latmin,londeg,lonmin,x,y - - gridmat(0,I)=x - gridmat(1,I)=y - gridmat(2,I)=latdeg - gridmat(3,I)=latmin - gridmat(4,I)=londeg - gridmat(5,I)=lonmin - gridmat(6,I)=1 - gridmat(7,I)=depth - contourline(I+2,0)=I - contourline(I+2,1)=gridmat(6,I) - I=I+1L - ENDIF ELSE BREAK - ENDWHILE - CLOSE,unit1 - FREE_LUN,unit1 - - file1='insel.dat' - GET_LUN,unit1 - OPENR,unit1,file1 - READF,unit1,COMMENT - CONTOURVAL=-1 - line=' ' - WHILE (I GE 0L) DO BEGIN - READF, unit1,line - READS,line,iel - IF iel GE 0 THEN BEGIN -; -; Converts decimal degrees to degree , minute and X, Y -; - READS,line,iel,lon,lat,depth - latdeg=FLOOR(lat) - IF latdeg LT 0 THEN latdeg=latdeg+1 - londeg=FLOOR(lon) - IF londeg LT 0 THEN londeg=londeg+1 - latmin=(lat-latdeg)*60. - lonmin=(lon-londeg)*60. - LatLontoXY,latdeg,latmin,londeg,lonmin,x,y - gridmat(0,I)=x - gridmat(1,I)=y - gridmat(2,I)=latdeg - gridmat(3,I)=latmin - gridmat(4,I)=londeg - gridmat(5,I)=lonmin - gridmat(6,I)=CONTOURVAL - gridmat(7,I)=depth - contourline(I+2,0)=I - contourline(I+2,1)=gridmat(6,I) - I=I+1L - CONTOURVAL=1 - ENDIF ELSE BEGIN - IF iel EQ -1 THEN BEGIN - READF,unit1,COMMENT - CONTOURVAL=-1 - ENDIF ELSE BEGIN - BREAK - ENDELSE - ENDELSE - ENDWHILE - CLOSE,unit1 - FREE_LUN,unit1 - PRINT,'Rand and Insel:',NRAND,NINS - Displaygrid - END -; -; initializes grid and contourline -; - 2:BEGIN - nngp=0L - contourline=LONARR(2,2)-1 - contourline(*,1)=1 - datastatus(5)=1 - datastatus(6)=0 - FLAGTSTEP=0 - END - -; -; adds open boundary contour -; - 3: BEGIN - LX=(nx-1)*dx - LY=(ny-1)*dy - n1=LX/DX1 - n2=LY/DX1 - ndlon=1+ROUND((rlonmax-rlonmin)/ $ - (ROUND(100.*(rlonmax-rlonmin)/n1)/100.)) - ddlon=(rlonmax-rlonmin)/(ndlon-1) - ndlat=1+ROUND((rlatmax-rlatmin)/ $ - (ROUND(100.*(rlatmax-rlatmin)/n2)/100.)) - ddlat=(rlatmax-rlatmin)/(ndlat-1) - - nngpold=nngp - nngpnew=nngp+2*(ndlon+ndlat)-4 - contourline_all=LONARR(2*(ndlon+ndlat)-4,2) - temp=gridmat - gridmatnew=DBLARR(8,nngpnew) - IF (nngpold GT 0) THEN gridmatnew(*,0:nngpold-1)=temp - -; -; Loops over the 4 sides of the rectangular boundary -; - FOR KK=0,3 DO BEGIN - nmax=ndlon*(1-(KK mod 2))+ndlat*(KK mod 2) - - gaps=0 - - print,'Side ',KK+1,': will now test if each of the ',nmax-1,' points is in land.' - print,'That can take a LOOONNG time if the shoreline data is big ... ' - - FOR I=0,nmax-2 DO BEGIN - CASE KK OF - 0: BEGIN ; bottom line - Inew=I*(FLOAT(nx-1)/FLOAT(ndlon-1)) - Jnew=0 - END - 1: BEGIN ; right - Inew=(nx-1) - Jnew=I*(FLOAT(ny-1)/FLOAT(ndlat-1)) - END - 2: BEGIN ; top - Inew=FLOAT(ndlon-1-I)*(FLOAT(nx-1)/FLOAT(ndlon-1)) - Jnew=ny-1 - END - 3: BEGIN - Inew=0 ;left - Jnew=FLOAT(ndlat-1-I)*(FLOAT(ny-1)/FLOAT(ndlat-1)) - END - ENDCASE - print,'Testing for new point #:',I+1, ' out of ',nmax-1 -; -; Removes points that are in land -; - inland=1 - IF N_ELEMENTS(gd) THEN BEGIN - IF (gd(Inew,Jnew) GT Hlandsea) THEN inland=0 - ENDIF ELSE BEGIN - IN_LAND2,Inew*dx,Jnew*dy,inland - ENDELSE - - IF (inland EQ 0) THEN BEGIN -; -; These points are in sea -; - gridmatnew(0,nngp)=Inew*dx - gridmatnew(1,nngp)=Jnew*dy - contourline_all(nngp-nngpold,0)=nngp - contourline_all(nngp-nngpold,1)=1 - nngp=nngp+1L - ENDIF ELSE BEGIN -; -; These points are in land -; - contourline_all(nngp-nngpold-1,1)=-1 - ENDELSE - ENDFOR - ENDFOR - gridmat=DBLARR(8,nngp) - gridmat(*,0:nngp-1)=gridmatnew(*,0:nngp-1) - londeg=0 - lonmin=0. - latdeg=0 - latmin=0. - contourline=LONARR(2+nngp-nngpold,2) - contourline(0,0)=nngpold - contourline(1,0)=nngp+1 - contourline(0:1,1)=0 - contourline(2:nngp-nngpold+1L,*)=contourline_all(0:nngp-nngpold-1,*) -; Search for gaps to shift the contour point indices so that the first gap is at the end - indexz=WHERE(contourline(2:nngp-nngpold-1,1) EQ -1,kount) - IF (kount GT 0) THEN BEGIN - contourline(2:nngp-nngpold+1,1)=SHIFT(contourline(2:nngp-nngpold+1,1),-indexz(0)-1) - shifted=SHIFT(contourline(2:nngp-nngpold+1,0),-indexz(0)) - gridmat(0,nngpold:nngp-1)=SHIFT(gridmat(0,nngpold:nngp-1),-indexz(0)-1) - gridmat(1,nngpold:nngp-1)=SHIFT(gridmat(1,nngpold:nngp-1),-indexz(0)-1) - ENDIF - contourline(contourline(1,0),1)=1 - gridmat(6,contourline(0,0):contourline(1,0)-2)=contourline(2:nngp-nngpold+1,1) - - FOR I=nngpold,nngp-1 DO BEGIN - XYtoLatLon,gridmat(0,I),gridmat(1,I),latdeg,latmin,londeg,lonmin - gridmat(2,I)=latdeg - gridmat(3,I)=latmin - gridmat(4,I)=londeg - gridmat(5,I)=lonmin - ENDFOR - - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - END -; - 4: BEGIN -; -; adds open boundary contour (no check on land / sea) -; - LX=(nx-1)*dx - LY=(ny-1)*dy - n1=LX/DX1 - n2=LY/DX1 - ndlon=1+ROUND((rlonmax-rlonmin)/ $ - (ROUND(100.*(rlonmax-rlonmin)/n1)/100.)) - ddlon=(rlonmax-rlonmin)/(ndlon-1) - ndlat=1+ROUND((rlatmax-rlatmin)/ $ - (ROUND(100.*(rlatmax-rlatmin)/n2)/100.)) - ddlat=(rlatmax-rlatmin)/(ndlat-1) - - nngpold=nngp - nngpnew=nngp+2*(ndlon+ndlat)-4 - contourline_all=LONARR(2*(ndlon+ndlat)-4,2) - temp=gridmat - gridmatnew=DBLARR(8,nngpnew) - IF (nngpold GT 0) THEN gridmatnew(*,0:nngpold-1)=temp - - FOR KK=0,3 DO BEGIN - nmax=ndlon*(1-(KK mod 2))+ndlat*(KK mod 2) - - gaps=0 - - print,'The program will now test if each of the ',nmax-1,' points is in land or sea.' - print,'No check on land / sea status ' - - FOR I=0,nmax-2 DO BEGIN - CASE KK OF - 0: BEGIN ; bottom line - Inew=I*(FLOAT(nx-1)/FLOAT(ndlon-1)) - Jnew=0 - END - 1: BEGIN ; right - Inew=(nx-1) - Jnew=I*(FLOAT(ny-1)/FLOAT(ndlat-1)) - END - 2: BEGIN ; top - Inew=FLOAT(ndlon-1-I)*(FLOAT(nx-1)/FLOAT(ndlon-1)) - Jnew=ny-1 - END - 3: BEGIN - Inew=0 ;left - Jnew=FLOAT(ndlat-1-I)*(FLOAT(ny-1)/FLOAT(ndlat-1)) - - END - ENDCASE - - gridmatnew(0,nngp)=Inew*dx - gridmatnew(1,nngp)=Jnew*dy - contourline_all(nngp-nngpold,0)=nngp - contourline_all(nngp-nngpold,1)=1 - nngp=nngp+1L - ENDFOR - ENDFOR - - gridmat=DBLARR(8,nngp) - gridmat(*,0:nngp-1)=gridmatnew(*,0:nngp-1) - londeg=0 - lonmin=0. - latdeg=0 - latmin=0. - contourline=LONARR(2+nngp-nngpold,2) - contourline(0,0)=nngpold - contourline(1,0)=nngp+1 - contourline(0:1,1)=0 - contourline(2:nngp-nngpold+1L,*)=contourline_all(0:nngp-nngpold-1,*) - gridmat(6,contourline(0,0):contourline(1,0))=contourline(2:nngp-nngpold+1,1) - - FOR I=nngpold,nngp-1 DO BEGIN - XYtoLatLon,gridmat(0,I),gridmat(1,I),latdeg,latmin,londeg,lonmin - gridmat(2,I)=latdeg - gridmat(3,I)=latmin - gridmat(4,I)=londeg - gridmat(5,I)=lonmin - ENDFOR - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - END -; - 5: BEGIN -; -; Select island to be removed -; - print,'Click on islands to remove them ...' - WIDGET_CONTROL,Wdraw,EVENT_PRO='gridbuild_draw_event' - gridbuild_click=5 - END - 6: BEGIN -; -; Search for crossing segments -; - NCROSS=0L - FOR J=0,contourline(1,0)-contourline(0,0)-1L DO BEGIN - X1=gridmat(0,contourline(J+2L,0)) - Y1=gridmat(1,contourline(J+2L,0)) - X2=gridmat(0,contourline(J+3L,0)) - Y2=gridmat(1,contourline(J+3L,0)) - IF contourline(J+3L,1) GT 0 THEN BEGIN - K=0L - WHILE (K LT J-1L) DO BEGIN - IF contourline(K+3L,1) GT 0 THEN BEGIN - IF (K GT NNGP-5L ) THEN PRINT,'TEST:',J,K,contourline(K+3L,0),contourline(K+3L,1) - X3=gridmat(0,contourline(K+2L,0)) - Y3=gridmat(1,contourline(K+2L,0)) - X4=gridmat(0,contourline(K+3L,0)) - Y4=gridmat(1,contourline(K+3L,0)) - - DENOM=(Y4-Y3)*(X2-X1)-(Y2-Y1)*(X4-X3) - IF ABS(DENOM) GT 1E-8 THEN BEGIN -; -; P and Q are the coordinates of the crossing point along the two segments -; - P=((X3-X1)*(Y4-Y3)-(Y3-Y1)*(X4-X3))/DENOM - Q=((X3-X1)*(Y2-Y1)-(Y3-Y1)*(X2-X1))/DENOM - IF (( P GT 0 AND P LT 1 ) AND (Q GT 0 AND Q LT 1)) THEN BEGIN -; -; Flips the crossed part... -; - NCROSS=NCROSS+1L - PRINT,'Crossing contour:',J+1,J+2,K+1,K+2 - ENDIF - ENDIF - ENDIF - K=K+1L - ENDWHILE - ENDIF - ENDFOR - END - - 7: BEGIN -; -; Flip the ordering of points along an island -; - print,'C_GP:',C_gp - toto=0 - - J=C_GP-1 - IMIN=0L - IMAX=0L - WHILE (IMIN EQ 0 AND J GT 0) DO BEGIN - IF gridmat(6,J) EQ -1 THEN BEGIN - IMIN=J - ENDIF - J=J-1L - ENDWHILE - IMAX=0L - J=C_GP-1 - WHILE (IMAX EQ 0 AND J LT NNGP-1) DO BEGIN - IF gridmat(6,J) EQ -1 THEN BEGIN - IMAX=J-1 - ENDIF - J=J+1L - ENDWHILE - - NSHIFT=IMIN-(C_GP) - print,'Flip and shift island:',IMIN,C_GP-1,IMAX,NSHIFT - gridmatold=gridmat - gridmatold(6,IMIN)=1 - IF IMAX GE IMIN THEN BEGIN - gridmat(*,IMIN:IMAX)= $ - gridmatold(*,REVERSE(IMIN+SHIFT(FINDGEN(IMAX-IMIN+1),NSHIFT)) ) - contourlineold=contourline - gridmat(6,IMIN)=-1 - gridmat(6,IMAX)=1 - ENDIF - END - -; -; Filter out points closer than DX/2 -; - 8: BEGIN - NSMALL=0L - JFIRST=0L - NISLAND=0L - D2MIN=0.25*DX0^2 - - BADPOINTS=BYTARR(nngp) - FOR J=0L,contourline(1,0)-contourline(0,0)-1L DO BEGIN - I1=contourline(J+2L,0)-1 - - II=contourline(J+2L,1)-1 ; this is < 0 if this point is the first of the island - IF (II LT 0) THEN BEGIN -; -; Goes back to first point of the island -; - J2=JFIRST+2L - I2= contourline(J2,0)-1 - JFIRST=J+1L - NISLAND=NISLAND+1L - D2=(X2-X1)^2 + (Y2-Y1)^2 - ICONT=JFIRST+2L - ENDIF ELSE BEGIN - J2=J+3L - I2=contourline(J2,0)-1 - ICONT=JFIRST+2L - ENDELSE -; - X1=gridmat(0,I1) - Y1=gridmat(1,I1) - X2=gridmat(0,I2) - Y2=gridmat(1,I2) - D2=((X2-X1)^2 + (Y2-Y1)^2) - - lon=gridmat(4,I1)+gridmat(5,I1)/60.0 - lat=gridmat(2,I1)+gridmat(3,I1)/60.0 - lon2=gridmat(4,I2)+gridmat(5,I2)/60.0 - lat2=gridmat(2,I2)+gridmat(3,I2)/60.0 - - IF (D2 LT D2MIN AND BADPOINTS(I1) EQ 0) THEN BEGIN - - IF ROA EQ 1 THEN BEGIN - IF (X1 GE nxzmin*dx AND X1 LE nxzmax*dx $ - AND X2 GE nxzmin*dx AND X2 LE nxzmax*dx $ - AND Y1 GE nyzmin*dy AND y1 LE nyzmax*dy $ - AND y2 GE nyzmin*dy AND y2 LE nyzmax*dy ) THEN BEGIN - PRINT,'To be deleted? ',lon,lat,I1,I2,gridmat(6,I2) - BADPOINTS(I2)=1 - ENDIF - ENDIF ELSE BEGIN - BADPOINTS(I2)=1 - ENDELSE - - IF (BADPOINTS(I2) EQ 1 AND gridmat(6,I2) LT 0 ) THEN BEGIN - foundnext=0 - I3=I2+1 - WHILE (foundnext EQ 0 AND I3 LT NNGP) DO BEGIN - IF BADPOINTS(I3) EQ 0 THEN BEGIN - gridmat(6,I2+1)=-1 - foundnext=1 - ENDIF - I3=I3+1 - ENDWHILE - ENDIF - - ; Marks the first point of the next island - ; PRINT,'TEST1:',SQRT(D2),D2MIN,contourline(J+2L,0)+1,J+1,JFIRST+1L,II - ;print,'This point will be deleted:',I2+1,lon2,lat2,' too close to ',I1+1,',',SQRT(D2),' < ',sqrt(D2MIN) - ENDIF - - - ENDFOR - - - NBAD=WHERE(BADPOINTS EQ 1,kount) - print,'NUMBER OF POINTS TO BE DELETED:',kount,':',NBAD - IF (kount GT 0) THEN BEGIN - FOR IDEL=0,KOUNT-1 DO BEGIN - nngp=nngp-1 ;new number of grid points - tempo=gridmat - print,'HEY:',kount,NBAD(IDEL),NNGP - gridmat=DBLARR(8,nngp) - - gridmat(*,0:NBAD(IDEL)-1)=tempo(*,0:NBAD(IDEL)-1) - gridmat(*,NBAD(IDEL):NNGP-1)=tempo(*,NBAD(IDEL)+1:NNGP) - ENDFOR - MAKE_CONTOUR - ENDIF - -; -; Second pass: remove 1 or 2 point islands -; - JFIRST=0L - BADPOINTS=BYTARR(nngp) - FOR J=0L,contourline(1,0)-contourline(0,0)-1L DO BEGIN - II=contourline(J+3L,1) - IF (II LT 0) THEN BEGIN - ; print,'segment?:',J,JFIRST,contourline(J+1L:J+3L,1) - IF (JFIRST GE (J-1)) THEN BEGIN - BADPOINTS(JFIRST:J)=1 - lon=gridmat(4,J)+gridmat(5,J)/60.0 - lat=gridmat(2,J)+gridmat(3,J)/60.0 - - print,'segment:',JFIRST+1,J+1,lon,lat,' CHECKING:',contourline(J+1L:J+3L,1) - ENDIF - JFIRST=J+1L - ENDIF - ENDFOR - - - NBAD=WHERE(BADPOINTS EQ 1,kount) - print,'NUMBER OF POINTS TO BE DELETED:',kount,':',NBAD - IF (kount GT 0) THEN BEGIN - FOR IDEL=0,KOUNT-1 DO BEGIN - nngp=nngp-1 ;new number of grid points - tempo=gridmat - print,'HEY:',kount,NBAD(IDEL),NNGP - gridmat=DBLARR(8,nngp) - - gridmat(*,0:NBAD(IDEL)-1)=tempo(*,0:NBAD(IDEL)-1) - gridmat(*,NBAD(IDEL):NNGP-1)=tempo(*,NBAD(IDEL)+1:NNGP) - ENDFOR - MAKE_CONTOUR - ENDIF - - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - END - - 9: BEGIN -; -; removes islands that are not in the contour -; - island=0L - TOBEREMOVED=INTARR(NNGP,2) - NREMOVE=0L - INOUT=0 - J0=contourline(2L,0) - subcont=contourline(2L+1:contourline(1,0)+2L,1) - Index=WHERE(subcont LT 0, kount) - J1=contourline(2L+Index(0),0) - IF island EQ 0L THEN BEGIN -; -; Polygon defined by first polygon -; - PX=gridmat(0,J0:J1) - PY=gridmat(1,J0:J1) - NPP=J1-J0+1 - PP=LINDGEN(NPP)+J0 - ENDIF - - FOR I=0L,contourline(1,0)-contourline(0,0) DO BEGIN - IF contourline(I+2,1) LT 0 THEN BEGIN ; this is the first point of the polygon - J0=contourline(I+2L,0) - subcont=contourline(I+2L+1:contourline(1,0)+2L,1) - Index=WHERE(subcont LT 0, kount) - J1=contourline(I+2L+Index(0),0) - - IF island GT 0L THEN BEGIN - - XX=gridmat(0,J0) - YY=gridmat(1,J0) - - PNPOLY,XX,YY,PX,PY,NPP,INOUT - - IF INOUT LT 0 THEN BEGIN - TOBEREMOVED(NREMOVE,0)=J0 - TOBEREMOVED(NREMOVE,1)=J1 - NREMOVE=NREMOVE+1L - ENDIF - ENDIF - island=island+1L - - ENDIF ELSE BEGIN - ;IF (INOUT GT 0) THEN BEGIN - ; TOBEREMOVED(NREMOVE,1)=contourline(I+2,0) - ;ENDIF - ENDELSE - - ENDFOR - PRINT,'NREMOVE:',NREMOVE - FOR I=NREMOVE-1,0,-1 DO BEGIN - J0=TOBEREMOVED(I,0) - J1=TOBEREMOVED(I,1) - print,'CUTTING ...:',I,J0,J1,nngp - IDEL=J1-J0+1 - nngp=nngp-idel ;new number of grid points - tempo=gridmat - gridmat=DBLARR(8,nngp) - IF J0 gt 0 THEN gridmat(*,0:J0-1)=tempo(*,0:J0-1) - print,'TEST NN:',nngp,idel,J0,J1,'##',nngp+idel-(J1+1),nngp-J0 - gridmat(*,J0:nngp-1)=tempo(*,J1+1:nngp+idel-1) - MAKE_CONTOUR - ENDFOR - c_gp=0 - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - RETURN - END - - - 10: BEGIN - ; Adds points along the depth contour given by Hi - ; with a resoltuion DX0 - IF ROA EQ 1 THEN BEGIN - x=(findgen(nxzmax-nxzmin+1)+nxzmin)*dx - y=(findgen(nyzmax-nyzmin+1)+nyzmin)*dy - CONTOUR,gd(nxzmin:nxzmax,nyzmin:nyzmax),x,y,LEVELS=Hi,PATH_INFO=info,PATH_XY=xyn,CLOSED=0 - ENDIF ELSE BEGIN - x=findgen(nx)*dx - y=findgen(ny)*dy - CONTOUR,gd,x,y,LEVELS=Hi,PATH_INFO=info,PATH_XY=xyn,CLOSED=0 - ENDELSE - xy=CONVERT_COORD(xyn,/NORMAL,/TO_DATA) - addpoints=FLTARR(2,5000)+nx*dx+ny*dy - naddpoint=0 - print,'Depth:',Hi,' spacing :',dx0 - FOR I = 0, (N_ELEMENTS(info) - 1 ) DO BEGIN - S=0. - X0=xy(0,INFO(I).OFFSET) - Y0=xy(1,INFO(I).OFFSET) - FOR J=1,info(I).N-1 DO BEGIN - X1=xy(0,INFO(I).OFFSET+J) - Y1=xy(1,INFO(I).OFFSET+J) - S=SQRT((x1-x0)^2+(y1-y0)^2) - IF (S GT DX0) AND ((X1 NE x(0)) AND (X1 NE MAX(x)) AND $ - (Y1 NE Y(0)) AND (Y1 NE MAX(Y))) THEN BEGIN - d2gp=MIN((X1-gridmat(0,0:nngp-1))^2+(Y1-gridmat(1,0:nngp-1))^2) - d2ad=MIN((X1-addpoints(0,0:naddpoint))^2+(Y1-addpoints(1,0:naddpoint))^2) - IF (d2gp GT 0.25*DX0^2) AND (d2ad GT 0.25*DX0^2) THEN BEGIN - print,d2gp,d2ad,dx0,x1,y1,nngp+naddpoint - naddpoint=naddpoint+1 - addpoints(0,naddpoint-1)=X1 - addpoints(1,naddpoint-1)=Y1 - S=0. - X0=X1 - Y0=Y1 - ENDIF - ENDIF - ENDFOR - ENDFOR - nngp=nngp+naddpoint - temp=gridmat - gridmat=DBLARR(8,nngp) - IF (nngp GT naddpoint) THEN gridmat(*,0:nngp-naddpoint-1)=temp - gridmat(0:1,nngp-naddpoint:nngp-1)=addpoints(0:1,0:naddpoint-1) - - londeg=0 - lonmin=0. - latdeg=0 - latmin=0. - FOR I=1,naddpoint DO BEGIN - XYtoLatLon,gridmat(0,nngp-I),gridmat(1,nngp-I),latdeg,latmin,londeg,lonmin - gridmat(2,nngp-I)=latdeg - gridmat(3,nngp-I)=latmin - gridmat(4,nngp-I)=londeg - gridmat(5,nngp-I)=lonmin - ENDFOR - PRINT,naddpoint,' new nodes.' - Displaygrid - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - MakeTriangles,0,0 - END - 11:BEGIN ;changes the gridbuild_clik option ot allow the interactive - ;addition of points along a line that is defined with two points selected - ;with the mouse - WIDGET_CONTROL,Wdraw,EVENT_PRO='gridbuild_draw_event' - gridbuild_click=3 - END -; - 12:BEGIN - tri_break=BYTARR(ntri+1) - xg=FLTARR(ntri+1) - yg=FLTARR(ntri+1) - DXMAX=FLTARR(ntri+1) - trigpnew=FLTARR(ntri*3,4) - TRIGPNEW(0:ntri,0:3)=trigp(0:ntri,0:3) - FOR I=1,NTRI DO BEGIN - IF (I MOD 5000) EQ 0 THEN PRINT,'Looking at triangle ',I,NTRI - IF TRIGP(I,1) GE 0 THEN BEGIN - x1=MAX([0,MIN([(nx-1)*dx,gridmat(0,TRIGP(I,1)-1)])]) - x2=MAX([0,MIN([(nx-1)*dx,gridmat(0,TRIGP(I,2)-1)])]) - x3=MAX([0,MIN([(nx-1)*dx,gridmat(0,TRIGP(I,3)-1)])]) - y1=MAX([0,MIN([(ny-1)*dy,gridmat(1,TRIGP(I,1)-1)])]) - y2=MAX([0,MIN([(ny-1)*dy,gridmat(1,TRIGP(I,2)-1)])]) - y3=MAX([0,MIN([(ny-1)*dy,gridmat(1,TRIGP(I,3)-1)])]) - xg(I)=(x1+x2+x3)/3. - yg(I)=(y1+y2+y3)/3. - tri_in_ROA=0 - IF (ROA EQ 1) THEN BEGIN - IF ((xg(I)/dx GT FLOAT(nxzmin)) AND (xg(I)/dx LT FLOAT(nxzmax)) $ - AND (yg(I)/dy GT FLOAT(nyzmin)) AND (yg(I)/dy LT FLOAT(nyzmax))) THEN tri_in_ROA=1 - ENDIF ELSE tri_in_ROA=1 - - IF (tri_in_ROA EQ 1) THEN BEGIN - depthtri=(gd(x1/dx,y1/dy)+gd(x2/dx,y2/dy)+gd(x3/dx,y3/dy) $ - +3.*gd(xg(I)/dx,yg(I)/dy))/6. - Speeds,MAX([MIN([depthtri,H1]),H0]),1/T0,cphi,cg,KH - d1=sqrt((x3-x2)^2+(y3-y2)^2) - d2=sqrt((x3-x1)^2+(y3-y1)^2) - d3=sqrt((x1-x2)^2+(y1-y2)^2) - dmax=ABS(MAX([d1,d2,d3])) - aamin=100. - ddmin=100. - DXmax(I)=DX0+(DX1-DX0)*(TANH(KH)-TANH(KH0))/(TANH(KH1)-TANH(KH0)) - IF (dmax GT DXmax(I)) THEN BEGIN - a1=ASIN(((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/(d3*d2)) - a2=ASIN(((x3-x2)*(y1-y2)-(x1-x2)*(y3-y2))/(d1*d3)) - a3=ASIN(((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3))/(d2*d1)) -; distances from barycenter - d5=sqrt((xg-x2)^2+(yg-y2)^2) - d4=sqrt((xg-x1)^2+(yg-y1)^2) - d6=sqrt((xg-x3)^2+(yg-y3)^2) -; angles relative to barycenter - a4=ASIN(((x2-xg)*(y3-yg)-(x3-xg)*(y2-yg))/(d5*d6)) - a5=ASIN(((x3-xg)*(y1-yg)-(x1-xg)*(y3-yg))/(d4*d6)) - a6=ASIN(((x1-xg)*(y2-yg)-(x2-xg)*(y1-yg))/(d4*d5)) - amin=ABS(MIN([a1,a2,a3])) - amax=ABS(MAX([a4,a5,a6])) - dmin=ABS(MIN([d1,d2,d3])) - IF (dmin LT ddmin) THEN BEGIN - ddmin=dmin - Imin=I - ENDIF - DXmax(I)=DXmax(I)*( 0.5 + 1.5*amin/!pi ) - - IF amin LT !pi/10 AND tri_in_ROA THEN PRINT,'WARNING: SMALL ANGLE',I,TRIGP(I,1)-1, $ - TRIGP(I,2)-1,TRIGP(I,3)-1,amin/!dtor - IF dmin LT DXmax(I)*0.1 AND tri_in_ROA THEN PRINT,'WARNING: SMALL TRIANGLE',I,TRIGP(I,1)-1, $ - TRIGP(I,2)-1,TRIGP(I,3)-1,dmin,DXmax(I) - IF dmin LT DXmax(I)*0.1 AND tri_in_ROA THEN PRINT,'WARNING: NEW TRI TOO FLAT',I,TRIGP(I,1)-1, $ - TRIGP(I,2)-1,TRIGP(I,3)-1,amax - IF (dmax GT DXmax(I)) AND (amax LT !pi*0.8 ) AND tri_in_ROA THEN tri_break(I)=1 - ENDIF - ENDIF - ENDIF - ENDFOR - ; PRINT,'DDMIN:',ddmin,Imin,trigp(Imin,*)-1 - - - ; Makes sure that new node - ; is not too close (dx0) to old ones - index=WHERE(tri_break EQ 1,naddpoint) - naddtrue=0 - IF naddpoint NE 0 THEN BEGIN - FOR I=1,ntri DO BEGIN - IF tri_break(I) THEN BEGIN - IN_SEA,xg(I),yg(I),in - index2=WHERE(tri_break EQ 2,naddpoint2) - d2gp=MAX((Xg(I)-gridmat(0,0:nngp-1))^2+(Yg(I)-gridmat(1,0:nngp-1))^2) - d2gpm=MIN((Xg(I)-gridmat(0,0:nngp-1))^2+(Yg(I)-gridmat(1,0:nngp-1))^2) - d2new=1.5*DXmax(I)^2 - IF naddpoint2 NE 0 THEN d2new=MIN((Xg(I)-XG(index2))^2+(Yg(I)-YG(index2))^2) - IF (d2gp GT DXmax(I)^2) AND (d2new GT DXmax(I)^2) AND (in EQ 1) THEN BEGIN - tri_break(I)=2 - naddtrue=naddtrue+1 - ENDIF - print,'BREAK:',I,XG(I),YG(I),d2gp,d2gpm,DXmax(I),tri_break(I) - - ENDIF - ENDFOR - ENDIF - index=WHERE(tri_break EQ 2,naddpoint) - PRINT,'add points:',naddpoint - IF naddpoint GT 1 THEN BEGIN - ntriold=ntri - trigpold=trigp - nngp=nngp+naddpoint - temp=gridmat - gridmat=DBLARR(8,nngp) - gridmat(*,0:nngp-naddpoint-1)=temp - gridmat(0,nngp-naddpoint:nngp-1)=xg(index) - gridmat(1,nngp-naddpoint:nngp-1)=yg(index) - INDNEW=nngp+1+FINDGEN(naddpoint)-naddpoint - ; Redifines the triangles - PRINT,'add triangles:',naddpoint,ntri,ntri+2*naddpoint,'##',indnew - ; defines zones of new triangles - TRIGPNEW(ntri+1:ntri+naddpoint,0)=TRIGPNEW(index,0) - TRIGPNEW(ntri+1+naddpoint:ntri+2*naddpoint,0)=TRIGPNEW(index,0) - PRINT,'add triangles 1:' - ; first point of new triangles: barycenter - TRIGPNEW(ntri+1:ntri+naddpoint,1)=INDNEW - TRIGPNEW(ntri+1+naddpoint:ntri+2*naddpoint,1)=INDNEW - PRINT,'add triangles 2:' - ; second point of new triangles: points 1 or 2 - TRIGPNEW(ntri+1:ntri+naddpoint,2)=TRIGPNEW(index,1) - TRIGPNEW(ntri+1+naddpoint:ntri+2*naddpoint,2)=TRIGPNEW(index,2) - ; 3rd point of new triangles: point 3 - TRIGPNEW(ntri+1:ntri+naddpoint,3)=TRIGPNEW(index,3) - TRIGPNEW(ntri+1+naddpoint:ntri+2*naddpoint,3)=TRIGPNEW(index,3) - ; 3rd point of old triangle : barycenter - TRIGPNEW(index,3)=INDNEW - ntri=ntri+2*naddpoint - TRIGP=INTARR(ntri+1,4) - TRIGP(*,*)=TRIGPNEW(0:ntri,*) - PRINT,'add triangles 3:' - - londeg=0 - lonmin=0. - latdeg=0 - latmin=0. - PRINT,'Recomputes XY:' - FOR I=1,naddpoint DO BEGIN - XYtoLatLon,gridmat(0,nngp-I),gridmat(1,nngp-I),latdeg,latmin,londeg,lonmin - gridmat(2,nngp-I)=latdeg - gridmat(3,nngp-I)=latmin - gridmat(4,nngp-I)=londeg - gridmat(5,nngp-I)=lonmin - ENDFOR - PRINT,'Displays grid:' - Displaygrid - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - ENDIF - END -; -; Updates depths -; - 13:BEGIN - IF datastatus(2) THEN BEGIN - FOR I=0,nngp-1 DO BEGIN - X=[gridmat(0,I)] - Y=[gridmat(1,I)] - IF (X GT rangex(0) AND X LT rangex(1) and Y GT rangey(0) and Y LT rangey(1)) THEN BEGIN - x1=(X)/dx - i1=FLOOR(x1) - ip1=MIN([nx-1,i1+1]) - dx1=x1-i1 - y1=(y)/dy - j1=FLOOR(y1) - jp1=MIN([ny-1,j1+1]) - dy1=y1-j1 - d1=gd(i1,j1 ) - d2=gd(ip1,j1 ) - d3=gd(i1,jp1) - d4=gd(ip1,jp1) - depthnew=(d1*(1-dx1)+d2*dx1)*(1-dy1) + (d3*(1-dx1)+d4*dx1)*dy1 - ;PRINT,'TEST:',I+1,gridmat(7,I),depthnew,gd(i1,j1),gd(ip1,jp1),dx1,dy1,i1,ip1,j1,jp1 - IF (d1 GT -9 AND d2 GT -9 AND d3 GT -9 AND d4 GT -9 ) THEN gridmat(7,I)=depthnew - ENDIF - ENDFOR - ENDIF - END - ENDCASE - END -; -; Timesteps droplist - -; -; Read coordinates of nodes with smallest timesteps -; - WG(2,1):BEGIN - CASE ev.index OF - 0:BEGIN - GET_LUN,unit1 - FILE1='timesteps.dat' - OPENR,unit1,FILE1 - NTIMESTEPS=MAX([NNGP,200]) - TIMESTEPS=FLTARR(4,NTIMESTEPS) - NRAND=0L - lon=0. - lat=0. - depth=0. - IND1=0 - IND2=0 - tstep=0. - dummy=' ' - READF, unit1,dummy - FOR I=0,NTIMESTEPS-1 DO BEGIN - READF, unit1,IND1,tstep,lon,lat,depth - TIMESTEPS(0,I)=IND1 - TIMESTEPS(1,I)=tstep - latdeg=FLOOR(lat) - IF latdeg LT 0 THEN latdeg=latdeg+1 - londeg=FLOOR(lon) - IF londeg LT 0 THEN londeg=londeg+1 - latmin=(lat-latdeg)*60. - lonmin=(lon-londeg)*60. - LatLontoXY,latdeg,latmin,londeg,lonmin,x,y - TIMESTEPS(2,I)=X - TIMESTEPS(3,I)=Y - ENDFOR - FLAGTSTEP=1 - CLOSE,unit1 - FREE_LUN,unit1 - END - 1: IF (N_ELEMENTS(NTRI) GT 0) THEN UPDATE_TIMESTEPS -; -; Optimize position of current node -; - 2: BEGIN - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - IND=WHERE(IOBP EQ 1) - SIRATIO(IND)=0 - IF (IOBP(C_GP-1) EQ 0) THEN MESH_OPTIMIZE,C_GP - END -; -; Optimize position of top 20 nodes (not boundary) -; - 3: BEGIN - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - IND=WHERE(IOBP EQ 1) - SIRATIO(IND)=0 - FOR IND=0,NTIMESTEPS/10-1 DO BEGIN - IP=TIMESTEPS_ORDER(IND) - IF (IOBP(IP) EQ 0 ) THEN BEGIN - PRINT,'Working on node ',IP+1,'. ',IND+1,'out of ',NTIMESTEPS/10 - MESH_OPTIMIZE,IP+1 - ENDIF - ENDFOR - END - ENDCASE - END -; -; File output droplist -; - WG(4,4):BEGIN - CASE ev.index OF - 0:BEGIN ;write grid file - file=DIALOG_PICKFILE(/READ,PATH = PATHS(5), FILTER ='*.grgp') - IF !VERSION.OS_FAMILY EQ 'Windows' THEN $ - spos=RSTRPOS(file,'\') ELSE spos=RSTRPOS(file,'/') - PATHS(5)=STRMID(file,0,spos+1) - filenopath=STRMID(file,spos+1,STRLEN(file)-spos-1) - filenames(5)=filenopath - IF file NE '' THEN BEGIN - GET_LUN,unit - OPENW,unit,file - PRINTF,unit,nngp,' Number of grid points' - - FOR I=1,(nngp) DO BEGIN - PRINTF,unit,I,gridmat(0:7,I-1), $ - FORMAT='(I6,2F9.4,I5,F9.4,I5,F9.4)' - ENDFOR - CLOSE,unit - FREE_LUN,unit - ENDIF - END - 1:BEGIN ;write triangle mesh with gmesh format - file=DIALOG_PICKFILE(/READ, PATH = PATHS(7),FILTER ='*.msh') - IF !VERSION.OS_FAMILY EQ 'Windows' THEN $ - spos=RSTRPOS(file,'\') ELSE spos=RSTRPOS(file,'/') - PATHS(7)=STRMID(file,0,spos+1) - filenopath=STRMID(file,spos+1,STRLEN(file)-spos-1) - filenames(7)=filenopath - IF file NE '' THEN BEGIN - GET_LUN,unit - OPENW,unit,file - PRINTF,unit,'$MeshFormat' - PRINTF,unit,'2 0 8' - PRINTF,unit,'$EndMeshFormat' - ;IF (datastatus(2)) THEN PRINTF,unit,'$File 2 ',paths(2),filenames(2) - ;IF (datastatus(3)) THEN PRINTF,unit,'$File 3 ',paths(3),filenames(3) - ;IF (datastatus(18)) THEN PRINTF,unit,'$File 18 ',paths(18),filenames(18) - PRINTF,unit,'$Nodes' - PRINTF,unit,nngp - FOR I=0L,nngp-1 DO BEGIN - x1=MAX([0,MIN([(nx-1),gridmat(0,I)/dx])]) - y1=MAX([0,MIN([(ny-1),gridmat(1,I)/dy])]) - lon=gridmat(4,I)+gridmat(5,I)/60.0 - lat=gridmat(2,I)+gridmat(3,I)/60.0 - IX=FLOOR(X1) - IP1=min([IX+1,nx-1]) - JY=FLOOR(Y1) - JP1=min([JY+1,ny-1]) - xx=X1-IX - yy=Y1-JY - ;IF (n_ELEMENTS(gd) GT 0) THEN $ - ; z=(gd(IX,JY) *(1-xx)+gd(IP1,JY )*xx)*(1-yy) $ - ; +(gd(IX,JP1)*(1-xx)+gd(IP1,JP1)*xx)*yy+4. $ - ;ELSE $ - z=gridmat(7,I) - PRINTF,unit,I+1,lon,lat,z,FORMAT='(I8,2F16.10,F10.3)' - ENDFOR - PRINTF,unit,'$EndNodes' - PRINTF,unit,'$Elements' - - iel=1L - island=0L - -; BIG BUG AFTER GRID EDIT ... COMES FROM BUG IN MAKE_CONTOUR ... -; As a result we list here some nodes with depth > H0 - PRINT,'Number of elements in contour:', N_ELEMENTS(contourline) - IF N_ELEMENTS(contourline) GE -4 THEN BEGIN - PRINT,'Not enough contour points ... lists nodes with depth > H0' - NOBC=0L - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - Index=WHERE(IOBP EQ 1,kount) - FOR I=0,NNGP-1 DO BEGIN - DEPTHMIN=3 - IF IOBP(I) EQ 1 AND GRIDMAT(7,I) GT H0 THEN NOBC = NOBC +1 - ENDFOR - PRINTF,unit,NOBC+NTRI ; total number of elements - FOR I=0,NNGP-1 DO BEGIN - DEPTHMIN=3 - IF IOBP(I) EQ 1 AND GRIDMAT(7,I) GT H0 THEN BEGIN - PRINTF,unit,iel,' 15 2 0',island,I+1 - iel=iel+1L - ENDIF - ENDFOR - ENDIF ELSE BEGIN - PRINTF,unit,1L+contourline(1,0)-contourline(0,0)+ntri - - FOR I=0L,contourline(1,0)-contourline(0,0) DO BEGIN - IF contourline(I+2,1) LT 0 THEN island=island+1L - PRINTF,unit,iel,' 15 2 0',island,contourline(I+2,0)+1 - iel=iel+1 - ENDFOR - ENDELSE -; - FOR I=0L,ntri-1 DO BEGIN - PRINTF,unit,iel,' 2 3 0 ',I+1, $ - TRANSPOSE(TRIGP(I+1,0:3)), FORMAT='(I9,A,I9,4I9)' - iel=iel+1 - ENDFOR - PRINTF,unit,'$EndElements' - CLOSE,unit - FREE_LUN,unit - ENDIF - END - 2:BEGIN ;export information for Polymesh - file1='rand.dat' - GET_LUN,unit1 - OPENW,unit1,file1 - iel=0L - island=0L - PRINTF,unit1,'C Insel',island - FOR I=2L,contourline(1,0) DO BEGIN - IF contourline(I,1) LT 0L AND I GT 2 THEN BEGIN -; -; Jumps to the next island -; - IF island EQ 0L THEN BEGIN - PRINTF,unit1, FORMAT='(I10)',-1 - file2='insel.dat' - CLOSE,unit1 - FREE_LUN,unit1 - GET_LUN,unit1 - OPENW,unit1,file2 - ENDIF ELSE BEGIN -; -; Test if this is the last island -; - IF (I LT contourline(1,0)-contourline(0,0) ) THEN $ - PRINTF,unit1, FORMAT='(I10)',-1 - ENDELSE - island=island+1L - iel=0L - PRINTF,unit1,'C Insel',island - ENDIF - J=contourline(I,0) - lon=gridmat(4,J)+gridmat(5,J)/60.0 - lat=gridmat(2,J)+gridmat(3,J)/60.0 -; -; J+1L instead of iel: easier to track the point numbers ... -; - PRINTF, unit1, FORMAT='(I10,3F16.6)',J+1L,lon,lat, gridmat(7,J) - iel=iel+1L - ENDFOR - IF (island GT 0) THEN BEGIN - PRINTF,unit1, FORMAT='(I10)',-2 - CLOSE,unit1 - FREE_LUN,unit1 - ENDIF - END ; end of polymesh output -; - 3:BEGIN ;export shoreline slope - file1='shoreline_slope.dat' - GET_LUN,unit1 - OPENW,unit1,file1 - island=0L - print,'TEST SLOPES',N_ELEMENTS(slopes) - IF N_ELEMENTS(slopes) NE nngp THEN BEGIN - slopes=FLTARR(nngp) - ENDIF ELSE BEGIN - print,'Updating shoreline slopes' - ENDELSE - IBOUND=0 - FOR IC=0L,contourline(1,0)-contourline(0,0) DO BEGIN - IF contourline(IC+2,1) LT 0 THEN island=island+1L - depthc=0.2 -; FOR I=0,nngp-1 DO BEGIN - I=contourline(IC+2,0) - - ;IF (ABS(gridmat(6,I)) EQ 1) THEN BEGIN - IBOUND=IBOUND+1 - X=[gridmat(0,I)] - Y=[gridmat(1,I)] - IF (X GT rangex(0) AND X LT rangex(1) and Y GT rangey(0) and Y LT rangey(1)) THEN BEGIN - nxz1=MIN([MAX([1,ROUND((X)/dx-45)]),nx-2]) - nyz1=MIN([MAX([1,ROUND((Y)/dy-45)]),ny-2]) - nxz2=MIN([MAX([1,ROUND((X)/dx+45)]),nx-2]) - nyz2=MIN([MAX([1,ROUND((Y)/dy+45)]),ny-2]) - gd1=gd(nxz1:nxz2,nyz1:nyz2)-depthc - gd2=gd(nxz1+1:nxz2+1,nyz1:nyz2)-depthc - gd3=gd(nxz1:nxz2,nyz1+1:nyz2+1)-depthc - prod1=gd1*gd2 - prod2=gd1*gd3 - x2=(repmat((findgen(nxz2-nxz1+1)+nxz1)*dx,1,nyz2-nyz1+1)-replicate(X,nxz2-nxz1+1,nyz2-nyz1+1)) - ;x2=repmat((findgen(nxz2-nxz1+1)+nxz1)*dx,1,nyz2-nyz1+1) - y2=(repmat(transpose((findgen(nyz2-nyz1+1)+nyz1)*dy),nxz2-nxz1+1,1)-replicate(Y,nxz2-nxz1+1,nyz2-nyz1+1)) - J=where(prod1 LT 0 OR prod2 LT 0,kount) - ;IF (I EQ 5807) THEN PRINT,'TOTO A',kount,prod1(*,16) - IF (kount GT 0) THEN BEGIN - dist=x2(J)^2+y2(J)^2; - DMIN=MIN(dist,location) - ;ind = ARRAY_INDICES(x2, J(location)) - ARRAY_IND2,x2, J(location),ind - IF (ind[0] LT nxz2-nxz1 AND ind[1] LT nyz2-nyz1) THEN BEGIN - if (gd1(ind[0],ind[1]) GT depthc AND gd1(ind[0]+1,ind[1]) LT depthc) THEN ind(0)=ind(0)-1 $ - ELSE ind(0)=ind(0)+1 - if (gd1(ind[0],ind[1]) GT depthc AND gd1(ind[0],ind[1]+1) LT depthc) THEN ind(1)=ind(1)-1 $ - ELSE ind(1)=ind(1)-1 - slope=0.001*sqrt(((gd1(ind[0],ind[1])-gd1(ind[0]+1,ind[1]))/dx)^2 $ - +((gd1(ind[0],ind[1])-gd1(ind[0],ind[1]+1))/dy)^2) - ;PRINT,'HEY:',I+1,sqrt(DMIN),slope,'##',gd1(ind[0],ind[1]),gd1(ind[0]+1,ind[1]),gd1(ind[0],ind[1]+1) - slopes(I)=MAX([slope,0.001]) - IF (slopes(I) GT 4) THEN slopes(I) = 0.0 ; this is for bad bathymetry data ... - ;IF (I EQ 5807) THEN PRINT,'HEY END:',I+1,slopes(I) - ENDIF - ENDIF - ENDIF - ;IF (I EQ 5807) THEN PRINT,'TOTO',slopes(I),I+1,contourline(IC+2,0)+1 - IF (slopes(I) GT 0) THEN BEGIN - PRINTF,unit1,IBOUND,' 15 3 ',open_boundary(I),island,slopes(I),contourline(IC+2,0)+1 - ENDIF ELSE BEGIN - PRINTF,unit1,IBOUND,' 15 2 ',open_boundary(I),island,contourline(IC+2,0)+1 - ENDELSE - - ;ENDIF - ENDFOR - CLOSE,unit1 - FREE_LUN,unit1 - END - - 4:BEGIN ; export slope grid (from gd) - slopes=gd*0. - dxlat=REPLICATE(dx,ny) - lats=rlatmin+FINDGEN(ny)*(rlatmax-rlatmin)/(ny-1); - dxlat(*)=(rlonmax-rlonmin)/(nx-1) $ - *cos(lats*!dtor)*4E4/360. ; spacing in km - nse=3 - depthc=0.2 - counter=-10L - dminOK=(3*dy)^2 - FOR J=nse,ny-1-nse DO BEGIN - nsy=ROUND(nse*dx/dxlat(J)) - Imax=2*nsy - Jmax=2*nse - PRINT,'j:',j,max(slopes(*,j-1)),nsy - FOR I=nse,nx-1-nse DO BEGIN - nxz1=MIN([MAX([1,I-nsy]),nx-2]) - nyz1=MIN([MAX([1,J-nse]),ny-2]) - nxz2=MIN([MAX([1,I+nsy]),nx-2]) - nyz2=MIN([MAX([1,J+nse]),ny-2]) - gd1=gd(nxz1:nxz2,nyz1:nyz2)-depthc - gd2=gd(nxz1+1:nxz2+1,nyz1:nyz2)-depthc - gd3=gd(nxz1:nxz2,nyz1+1:nyz2+1)-depthc - prod1=gd1*gd2 - prod2=gd1*gd3 - x2=(repmat((findgen(nxz2-nxz1+1)+nxz1-I)*dxlat(J),1,nyz2-nyz1+1)) - y2=(repmat(transpose((findgen(nyz2-nyz1+1)+nyz1-J)*dy),nxz2-nxz1+1,1)) - JJ=where(prod1 LT 0 OR prod2 LT 0,kount) - ;IF (I EQ 5807) THEN PRINT,'TOTO A',kount,prod1(*,16) - IF (kount GT 0) THEN BEGIN - dist=x2(JJ)^2+y2(JJ)^2; - DMIN=MIN(dist,location) - ;ind = ARRAY_INDICES(x2, JJ(location)) - ARRAY_IND2,x2, JJ(location),ind - IF (ind[0] LT nxz2-nxz1-1 AND ind[1] LT nyz2-nyz1-1) THEN BEGIN - counter=counter+1 - ; IF (counter EQ 1) THEN PRINT,'X2:',X2 - ; IF (counter EQ 1) THEN PRINT,'Y2:',Y2 - ; IF (counter EQ 1) THEN PRINT,'gd:',gd1 - ; IF (counter EQ 1) THEN PRINT,'in:',ind,prod1(JJ(location)),prod2(JJ(location)) - ; IF (counter EQ 1) THEN PRINT,'pr:',prod1 - ; IF (counter EQ 1) THEN PRINT,'p2:',prod2 - ; IF (counter EQ 1) THEN PRINT,'HEY:',sqrt(DMIN),'##',gd1(ind[0],ind[1]),gd1(ind[0]+1,ind[1]), $ - ; gd1(ind2[0],ind2[1]),gd2(ind2[0],ind2[1]+1) - if (gd1(ind[0],ind[1]) GT depthc AND gd1(ind[0]+1,ind[1]) LT depthc) THEN ind(0)=ind(0)-1 - IF (ind(0) GT 0) THEN BEGIN - if (gd1(ind[0],ind[1]) LT depthc AND gd1(ind[0]+1,ind[1]) GT depthc) THEN ind(0)=ind(0)+1 - IF (ind(0) LT Imax) THEN BEGIN - ind2=ind - if (gd1(ind2[0],ind2[1]) GT depthc AND gd1(ind2[0],ind2[1]+1) LT depthc) THEN ind2(1)=ind2(1)-1 - IF (ind2(1) GT 0) THEN BEGIN - - if (gd1(ind2[0],ind2[1]) LT depthc AND gd1(ind2[0],ind2[1]+1) GT depthc) THEN ind2(1)=ind2(1)+1 - IF (ind2(1) LT Jmax) THEN BEGIN - - IF (counter EQ 1) THEN PRINT,'i2:',ind,ind2 - slope=0.001*sqrt(((gd1(ind[0],ind[1])-gd1(ind[0]+1,ind[1]))/dxlat(J))^2 $ - +((gd1(ind2[0],ind2[1])-gd1(ind2[0],ind2[1]+1))/dy)^2) - IF (counter EQ 1) THEN PRINT,'HEY:',sqrt(DMIN),slope,'##',gd1(ind[0],ind[1]),gd1(ind[0]+1,ind[1]), $ - gd1(ind2[0],ind2[1]),gd2(ind2[0],ind2[1]+1) - ;PRINT,'HEY:',I+1,sqrt(DMIN),slope,'##',gd1(ind[0],ind[1]),gd1(ind[0]+1,ind[1]),gd1(ind[0],ind[1]+1) - slopes(I,J)=MAX([slope,0.001]) - - ENDIF - ENDIF - ENDIF - ENDIF - ENDIF - ENDIF - ENDFOR - ENDFOR - GET_LUN,unit1 - OPENW,unit1,paths(3)+'etopo2_slopes.grd',/SWAP_ENDIAN - WRITEU,unit1,transpose(slopes) -PRINT,'MIN / MAX:',MIN(slopes),MAX(slopes) - CLOSE,unit1 - FREE_LUN,unit1 - - END - ENDCASE ; end of file output droplist - END - - ENDCASE ; end of droplists - END - ENDCASE -RETURN - CLOSE,unit1 -NOT_OPEN: print,'Error in opening or reading file: ',file1,' . Unexpected results may occur ...' - -RETURN -END - -;---------------------------------------------------------------------------- -PRO MakeTriangles,excludeland,dozones -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON TRIANGLE2,nzonetri,zonetri,nzonegp,zonegp,ngpzone,gpzone -COMMON Builder,ngp,H0,H1,Hi,KH0,KH1,DX0,DX1,T0,ROA,ROI,gridbuild_click -COMMON LOCAL_tri,LIST -;*******END OF COMMON BLOCKS******************************* - X=FLTARR(NNGP) - Y=FLTARR(NNGP) - X(*)=(gridmat(0,0:nngp-1)) - Y(*)=(gridmat(1,0:nngp-1)) - TRIANGULATE, X, Y, DELTRI, BOUNDARY, $ - CONNECTIVITY=LIST, REPEATS=REP - TAILLE=SIZE(DELTRI) -; -; Clean up triangles in land -; - IF excludeland THEN BEGIN - n_cont=0 - IF (n_ELEMENTS(contourline) GT 4) THEN n_cont=(contourline(1,0)-contourline(0,0)+1) - IF (n_cont GT 0) THEN BEGIN - ntri=Taille(2) - nsea=0 - SEATRI=LONARR(ntri) - FOR I=0L,ntri-1 DO BEGIN - I1=DELTRI(0,I) - I2=DELTRI(1,I) - I3=DELTRI(2,I) - IF (I1 LT contourline(0,0) OR I1 GT contourline(1,0)) $ - AND (I2 LT contourline(0,0) OR I2 GT contourline(1,0)) $ - AND (I3 LT contourline(0,0) OR I3 GT contourline(1,0)) THEN BEGIN - addtri=1 - ENDIF ELSE BEGIN - xt=gridmat(0,DELTRI(0:2,I)) - yt=gridmat(1,DELTRI(0:2,I)) - xg=TOTAL(xt)/3. - yg=TOTAL(yt)/3. - IN_SEA,xg,yg,addtri - ENDELSE - IF addtri THEN BEGIN - SEATRI(nsea)=I - nsea=nsea+1 - ENDIF - ENDFOR - DELTRI_OLD=DELTRI - DELTRI=LONARR(3,nsea) - DELTRI(*,*)=DELTRI_OLD(*,SEATRI(0:nsea-1)) - ENDIF - TAILLE=SIZE(DELTRI) - ENDIF - ;PRINT,'N points:',N_ELEMENTS(X) - ;PRINT,'N triangles:',Taille(2) - ;****************************************************** - ; Creates the triangles and zones (SUBDOMAINS) - ;****************************************************** - ntri=Taille(2) - TRIGP=INTARR(ntri+1,4) - xmax=(NX-1)*dx - ymax=(Ny-1)*dy - xg=FLTARR(ntri+1) - yg=FLTARR(ntri+1) - DXMAX=FLTARR(ntri) - TRIGP(1:ntri,0)=5 - -print,'TRI OK, NOW DOING ZONES',ntri - DIAGNOSTICS=FLTARR(ntri,3) - ddmin=100. - Imin=0 - FOR I=0,(ntri-1) DO BEGIN - ; (X(DELTRI(0,I)) LT 0.) OR (X(DELTRI(1,I)) LT 0.) $ - ; OR (X(DELTRI(2,I)) LT 0) THEN IZONE=1 - ;IF (X(DELTRI(0,I)) GT xmax) OR (X(DELTRI(1,I)) GT xmax) $ - ; OR (X(DELTRI(2,I)) GT xmax) THEN IZONE=2 - trigp(I+1,1)=DELTRI(0,I)+1 - trigp(I+1,2)=DELTRI(1,I)+1 - trigp(I+1,3)=DELTRI(2,I)+1 - IZONE=5 - IF (Y(DELTRI(0,I)) LT 0.) OR (Y(DELTRI(1,I)) LT 0.) $ - OR (Y(DELTRI(2,I)) LT 0) THEN IZONE=3 - IF (Y(DELTRI(0,I)) GT ymax) OR (Y(DELTRI(1,I)) GT ymax) $ - OR (Y(DELTRI(2,I)) GT ymax) THEN IZONE=4 - x1=MAX([0,MIN([(nx-1),gridmat(0,TRIGP(I+1,1)-1)])]) - x2=MAX([0,MIN([(nx-1),gridmat(0,TRIGP(I+1,2)-1)])]) - x3=MAX([0,MIN([(nx-1),gridmat(0,TRIGP(I+1,3)-1)])]) - y1=MAX([0,MIN([(ny-1),gridmat(1,TRIGP(I+1,1)-1)])]) - y2=MAX([0,MIN([(ny-1),gridmat(1,TRIGP(I+1,2)-1)])]) - y3=MAX([0,MIN([(ny-1),gridmat(1,TRIGP(I+1,3)-1)])]) - xg(I)=(x1+x2+x3)/3. - yg(I)=(y1+y2+y3)/3. - d1=sqrt((x3-x2)^2+(y3-y2)^2) - d2=sqrt((x3-x1)^2+(y3-y1)^2) - d3=sqrt((x1-x2)^2+(y1-y2)^2) - area=ABS((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)) - a1=ASIN(((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/(d3*d2)) - a2=ASIN(((x3-x2)*(y1-y2)-(x1-x2)*(y3-y2))/(d1*d3)) - a3=ASIN(((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3))/(d2*d1)) - amin=ABS(MIN([a1,a2,a3])) - dmin=ABS(MIN([d1,d2,d3])) - dmax=ABS(MAX([d1,d2,d3])) - ;IF (TRIGP(I+1,1) GT 1050 AND TRIGP(I+1,1) LT 1053) THEN BEGIN - ; PRINT,'#########DETAILS:',I+1,TRIGP(I+1,*) - ; PRINT,'area:',AREA,a1,a2,a3,d1,d2,d3,amin,dmin,dmax,AREA/dmax - ; ENDIF - DIAGNOSTICS(I,0)=AMIN - DIAGNOSTICS(I,1)=dmin - DIAGNOSTICS(I,2)=2.*AREA/dmax - ;depthtri=(gd(x1/dx,y1/dy)+gd(x2/dx,y2/dy)+gd(x3/dx,y3/dy) $ - ; +3.*gd(xg(I)/dx,yg(I)/dy))/6. - ;Speeds,MAX([MIN([depthtri,H1]),H0]),1/T0,cphi,cg,KH - d1=sqrt((x3-x2)^2+(y3-y2)^2) - d2=sqrt((x3-x1)^2+(y3-y1)^2) - d3=sqrt((x1-x2)^2+(y1-y2)^2) - a1=ASIN(((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/(d3*d2)) - a2=ASIN(((x3-x2)*(y1-y2)-(x1-x2)*(y3-y2))/(d1*d3)) - a3=ASIN(((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3))/(d2*d1)) - amin=ABS(MIN([a1,a2,a3])) - dmin=ABS(MIN([d1,d2,d3])) - IF (dmin LT ddmin) THEN BEGIN - ddmin=dmin - Imin=I - ENDIF - IF amin LT !pi/10 THEN trigp(I+1,0)=0 - DXmax(I)=DX0 ;+(DX1-DX0)*(TANH(KH)-TANH(KH0))/(TANH(KH1)-TANH(KH0)) - DXmax(I)=DXmax(I)*( 0.5 + 1.5*amin/!pi ) - IF dmin LT DXmax(I)*0.1 THEN trigp(I+1,0)=1 - IF dozones THEN BEGIN - IZONE=c_zone - IF (Y(DELTRI(0,I)) LT 0.) OR (Y(DELTRI(1,I)) LT 0.) $ - OR (Y(DELTRI(2,I)) LT 0) THEN IZONE=3 - IF (Y(DELTRI(0,I)) GT ymax) OR (Y(DELTRI(1,I)) GT ymax) $ - OR (Y(DELTRI(2,I)) GT ymax) THEN IZONE=4 - IF depthtri LT H0 THEN IZONE=1 - IF depthtri GT H1 THEN IZONE=2 - trigp(I+1,0)=IZONE - ENDIF - ENDFOR - IF excludeland EQ 1 THEN BEGIN - FOR I=0,nngp-1 DO BEGIN - IN_SEA,gridmat(0,I),gridmat(1,I),in - IF (in EQ 0 AND gridmat(6,I) EQ 0) THEN PRINT,'WARNING 0: POINT',I+1,' IN LAND.' - ENDFOR - FOR I=0,ntri-1 DO BEGIN - - IF (DIAGNOSTICS(I,0) LT 0.2) THEN PRINT,'WARNING 1:', $ - I+1,TRANSPOSE(DIAGNOSTICS(I,0:2)),TRIGP(I+1,1),TRIGP(I+1,2),TRIGP(I+1,3) - IF (DIAGNOSTICS(I,1) LT DX0 OR DIAGNOSTICS(I,2) LT DX0 ) THEN PRINT,'WARNING 2:', $ - I+1,TRANSPOSE(DIAGNOSTICS(I,0:2)),TRIGP(I+1,1),TRIGP(I+1,2),TRIGP(I+1,3) - ENDFOR - ENDIF - - PRINT,'DDMIN:',ddmin,Imin,trigp(Imin+1,*) - - IF (N_ELEMENTS(REP) GT 2) THEN PRINT,'WARNING: REPEATED POINTS',REP - IF dozones THEN BEGIN - FOR I=0,(ntri-1) DO BEGIN - - ; Sorts the vertices within each triangle - IF trigp(I+1,1) GT TRIGP(I+1,2) THEN BEGIN - tempo=TRIGP(I+1,2) - TRIGP(I+1,2)=trigp(I+1,1) - trigp(I+1,1)=tempo - ENDIF - IF trigp(I+1,2) GT TRIGP(I+1,3) THEN BEGIN - tempo=TRIGP(I+1,3) - TRIGP(I+1,3)=trigp(I+1,2) - trigp(I+1,2)=tempo - ENDIF - IF trigp(I+1,1) GT TRIGP(I+1,2) THEN BEGIN - tempo=TRIGP(I+1,2) - TRIGP(I+1,2)=trigp(I+1,1) - trigp(I+1,1)=tempo - ENDIF - ENDFOR - ; Sorts the triangles by first point... - FIRSTS=LONARR(ntri+1) - ;PRINT,'nnGP',nngp - ;PRINT,TRANSPOSE(TRIGP) - - FIRSTS(*)=LONG(TRIGP(*,3))+(nngp+1)*LONG((TRIGP(*,2)) $ - +(nngp+1)*LONG(TRIGP(*,1))) - ;PRINT,'FIRSTS:',FIRSTS - ORDER=SORT(FIRSTS) - ;PRINT,'ORDER:',ORDER - TRIGP(*,0:3)=TRIGP(ORDER(*),0:3) - ;PRINT,TRANSPOSE(TRIGP) - ; Tests if all the boundary points are actually outside the domain - nboundary=N_ELEMENTS(BOUNDARY) - FOR I=0,nboundary-1 DO BEGIN - IF X(BOUNDARY(I)) LE xmax AND X(BOUNDARY(I)) GE 0 $ - AND Y(BOUNDARY(I)) LE ymax AND Y(BOUNDARY(I)) GE 0 THEN $ - PRINT,'Warning, point #',I+1,' is on the boundary and in the domain' - ENDFOR - - - zones=INTARR(ntri+1) - zones(*)=TRIGP(0:ntri,0) - SO=(SORT(zones)) - zones2=INDGEN(ntri+1) - zones2=zones2(SO) - zones=zones(SO) - - zonetri=INTARR(nzone+2+ntri) - ZC=1 ; current zone - ZONETRI(1)=nzone+2 - ZT=1 ; numbers of triangles in zone - ZZ=1 - FOR I=2,ntri DO BEGIN - IF zones(I) NE ZC THEN BEGIN - ZONETRI(ZC+1)=ZONETRI(ZC)+ZT - temp=zones2(ZZ:ZZ+ZT-1) - ZONETRI(ZONETRI(ZC):ZONETRI(ZC+1)-1)=temp(SORT(temp)) - ZZ=ZZ+ZT - ZT=0 - ZC=ZC+1 - ENDIF - ZT=ZT+1 - ENDFOR - ZONETRI(nzone+1)=NZONE+NTRI+2 - temp=zones2(ZZ:ZZ+ZT-1) - ;print,I,ZONETRI(nzone),ZONETRI(nzone+1)-1,size(temp),temp - ZONETRI(ZONETRI(nzone):ZONETRI(nzone+1)-1)=temp(SORT(temp)) - - nzonetri=ZONETRI(nzone+1)-1 - - ZONEGP=INTARR(nzone+2+NTRI*3) - index=nzone+2 - ZONEGP(1)=index - FOR I=1,nzone DO BEGIN - ZONEGP(I+1)=ZONEGP(I) - FOR J=ZONETRI(I),ZONETRI(I+1)-1 DO BEGIN - TRIC=ZONETRI(J) - FOR K=1,3 DO BEGIN - GPC=TRIGP(TRIC,K) - found=0 - FOR L=ZONEGP(I),ZONEGP(I+1)-1 DO $ - IF ZONEGP(L) EQ GPC THEN found=1 - IF found EQ 0 THEN BEGIN - ZONEGP(ZONEGP(I+1))=GPC - ZONEGP(I+1)=ZONEGP(I+1)+1 - ENDIF - ENDFOR - ENDFOR - ENDFOR - - nzonegp=ZONEGP(nzone+1) - - GPZONE=INTARR(nngp*4) - - index=nngp+2 - GPZONE(1:nngp+1)=index - FOR I=1,nzone DO BEGIN - FOR J=ZONEGP(I),ZONEGP(I+1)-1 DO BEGIN - GPC=ZONEGP(J) - IF GPZONE(NNGP+1) GT GPZONE(GPC) THEN $ - GPZONE(GPZONE(GPC)+1:GPZONE(NNGP+1))=GPZONE(GPZONE(GPC):GPZONE(NNGP+1)-1) - GPZONE(GPC+1:NNGP+1)=GPZONE(GPC+1:NNGP+1)+1 - GPZONE(GPZONE(GPC))=I - ENDFOR - ENDFOR - ngpzone=GPZONE(nngp+1)-1 - - ENDIF -print,'END OF TRI',ntri - datastatus(6)=1 - RETURN - END - -;---------------------------------------------------------------------------- -PRO gridbuild_draw_event,ev -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON GRIDTIMESTEPS, zoffset, updateonmove, waveperiod -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON OVERLAY, addir,adsyms,adbathy,adcoast,psyms,psymsizes,adtr,adtri - -COMMON Builder,ngp,H0,H1,Hi,KH0,KH1,DX0,DX1,T0,ROA,ROI,gridbuild_click - -COMMON WGene,Wgrideditor,WG,root -COMMON LOCAL_gridbuild,coordP,coordR,nxz1,nyz1,nxz2,nyz2,indexgp -COMMON TIMESTEPSUG,TIMESTEPS,NTIMESTEPS,FLAGTSTEP, TIMESTEPS_ORDER -COMMON TIMESTEPSUG2, CCON, IEN, SI, AREA, WCG, CELLVERTEX, IE_CELL, POS_CELL, C, K -COMMON TIMESTEPSUG3, SIRATIO, JCELLS, LEN, ANGLE0, CROSSDIFF, TIMESTEPS_ALL -;*******END OF COMMON BLOCKS******************************* - CASE ev.type OF ;case loop on action types - 0:BEGIN ;ev.type=0 : click (button pushed down) - coordP=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - ;coordP(0)=MIN([MAX([0.,coordP(0)]),(nx-1)*dx]) - ;coordP(1)=MIN([MAX([0.,coordP(1)]),(ny-1)*dy]) - CASE gridbuild_click OF - 1:BEGIN ;move GP - indexgp=0 - distmin=(coordP(0)-gridmat(0,0))^2 $ - +(coordP(1)-gridmat(1,0))^2 - FOR I=1,nngp-1 DO BEGIN - dist=(coordP(0)-gridmat(0,I))^2 $ - +(coordP(1)-gridmat(1,I))^2 - IF (dist LT distmin) THEN BEGIN - indexgp=I - distmin=dist - ENDIF - ENDFOR - ;end of search - ;highlights the grid point with a big triangle - OPLOT,[gridmat(0,indexgp)],[gridmat(1,indexgp)], $ - psym=5,SYMSIZE=1.5,COLOR=0 - indexgp=indexgp+1 - END - 2:BEGIN ; Add point - nngp=nngp+1 - temp=gridmat - gridmat=DBLARR(8,nngp) - gridmat(*,0:nngp-2)=temp - gridmat(0,nngp-1)=coordP(0) - gridmat(1,nngp-1)=coordP(1) - XYtoLatLon,coordP(0),coordP(1),latdeg,latmin,londeg,lonmin - print,'New GP:',coordP(0),coordP(1),latdeg,latmin,londeg,lonmin - gridmat(2,nngp-1)=latdeg - gridmat(3,nngp-1)=latmin - gridmat(4,nngp-1)=londeg - gridmat(5,nngp-1)=lonmin - IF (adsyms/2) THEN BEGIN - strlab=strcompress(string(nngp)) - OPLOT,[gridmat(0,nngp-1)],[gridmat(1,nngp-1)], $ - psym=psyms(0),SYMSIZE=psymsizes(0) - XYOUTS,gridmat(0,nngp-1),gridmat(1,nngp-1),strlab,CHARSIZE=0.5 - ENDIF - WIDGET_CONTROL,WGrideditor(1),TABLE_YSIZE=nngp - WIDGET_CONTROL,WGrideditor(1), SET_VALUE=gridmat(0:7,0:nngp-1) - END - 3: - 4: - 5:BEGIN ; removel island island in contour - distmin=(coordP(0)-gridmat(0,0))^2 $ - +(coordP(1)-gridmat(1,0))^2 - found=0 - FOR I=1,nngp-1 DO BEGIN - dist=(coordR(0)-gridmat(0,I))^2 $ - +(coordR(1)-gridmat(1,I))^2 - IF (dist LT distmin) THEN BEGIN - index1=I - distmin=dist - found=1 - ENDIF - ENDFOR -; -; Finds range of node indices to be removed -; - IF FOUND EQ 1 THEN BEGIN - IMIN=0L - J=index1 - WHILE (IMIN EQ 0 AND J GT 0) DO BEGIN - IF gridmat(6,J) EQ -1 THEN BEGIN - IMIN=J - ENDIF - J=J-1L - ENDWHILE - IMAX=0L - J=index1 - WHILE (IMAX EQ 0 AND J LT NNGP-1) DO BEGIN - IF gridmat(6,J) EQ -1 THEN BEGIN - IMAX=J-1 - ENDIF - J=J+1L - ENDWHILE - selec=LONARR(4) - selec(1)=IMIN - selec(3)=IMAX - idel=selec(3)-selec(1)+1 - print,'Removing island of node ',index1, ', nodes in range:',IMIN,IMAX - WIDGET_CONTROL,Wgrideditor(1),/DELETE_ROWS , $ - USE_TABLE_SELECT=[-1,selec(1),5,selec(3)] - nngp=nngp-idel ;new number of grid points - tempo=gridmat - gridmat=DBLARR(8,nngp) - IF selec(1) gt 0 THEN gridmat(*,0:selec(1)-1)=tempo(*,0:selec(1)-1) - IF selec(1) LT nngp THEN gridmat(*,selec(1):nngp-1)=tempo(*,selec(3)+1:nngp+idel-1) - MAKE_CONTOUR - - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - ENDIF - END - ELSE: - ENDCASE - END - 1:BEGIN ;ev.type=1 button release - coordR=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - coordR(0)=MIN([MAX([0.,coordR(0)]),(nx-1)*dx]) - coordR(1)=MIN([MAX([0.,coordR(1)]),(ny-1)*dy]) - CASE gridbuild_click OF - 0:BEGIN ;gridbuild_click option to choose the position - ;of the first grid point. Used by the - ;grid builder - IF datastatus(3) EQ 1 THEN BEGIN - i1=FLOOR(gridmat(0,0)/dx) - j1=FLOOR(gridmat(1,0)/dy) - IF ((i1 GE 0) AND (i1 LT nx) $ - AND (j1 GE 0) AND (j1 LT ny)) THEN $ - depth1=gd(i1,j1) ELSE depth1=0. - lev1=0 - FOR K=1,numlevels-1 DO BEGIN - IF lev(K) LT depth1 THEN lev1=k - ENDFOR - OPLOT,[gridmat(0,0)],[gridmat(1,0)], $ - psym=5,SYMSIZE=0.6,COLOR=colorind(lev1) - XYOUTS,gridmat(0,0),gridmat(1,0),'1', $ - CHARSIZE=0.9,COLOR=colorind(lev1) - ENDIF - gridmat(0,0)=coordR(0) - gridmat(1,0)=coordR(1) - XYtoLatLon,coordP(0),coordP(1),latdeg,latmin,londeg,lonmin - print,'New GP:',coordP(0),coordP(1),latdeg,latmin,londeg,lonmin - UpdateTable,0,0 ;updates the positions - ;of the first grid point - OPLOT,[gridmat(0,0)],[gridmat(1,0)], $ - psym=5,SYMSIZE=0.6 - XYOUTS,gridmat(0,0),gridmat(1,0),'1', $ - CHARSIZE=0.9 - WIDGET_CONTROL,Wdraw,EVENT_PRO='analyzer_event' - END - 1:BEGIN ; moves grid point - i1=FLOOR(gridmat(0,indexgp-1)/dx) - j1=FLOOR(gridmat(1,indexgp-1)/dy) - OPLOT,[gridmat(0,indexgp-1)],[gridmat(1,indexgp-1)], $ - psym=5,SYMSIZE=1.5 ;,COLOR=colorind(lev1) - strlab=strcompress(string(indexgp),/REMOVE_ALL) - XYOUTS,gridmat(0,indexgp-1),gridmat(1,indexgp-1), $ - strlab,CHARSIZE=0.9 ;,COLOR=colorind(lev1) - gridmat(0,indexgp-1)=coordR(0) - gridmat(1,indexgp-1)=coordR(1) - XYtoLatLon,coordR(0),coordR(1),latdeg,latmin,londeg,lonmin - gridmat(2,indexgp-1)=latdeg - gridmat(3,indexgp-1)=latmin - gridmat(4,indexgp-1)=londeg - gridmat(5,indexgp-1)=lonmin - print,'point #',indexgp - ;IF subwin(0) THEN UpdateTable,0,indexgp-1 - OPLOT,[gridmat(0,indexgp-1)],[gridmat(1,indexgp-1)], $ - psym=5,SYMSIZE=0.6 - XYOUTS,gridmat(0,indexgp-1),gridmat(1,indexgp-1), $ - strlab,CHARSIZE=0.9 -; - IF FLAGTSTEP AND UPDATEONMOVE THEN BEGIN - UPDATE_TIMESTEPS2,indexgp-1 - doplot - ENDIF - - END - 3:BEGIN ;picks up the second end of the line to be drawn - - nadd=FLOOR(SQRT((coordR(0)-coordP(0))^2 $ - +(coordR(1)-coordP(1))^2)/DX0)+2 - - xadd=FLTARR(nadd) - yadd=FLTARR(nadd) - naddpoint=0 - iadd=INTARR(nadd) - FOR I = 0, nadd-1 DO BEGIN - Xadd(naddpoint)=coordP(0)+I*(coordR(0)-coordP(0))/(nadd-1) - Yadd(naddpoint)=coordP(1)+I*(coordR(1)-coordP(1))/(nadd-1) - d2gp=MIN((Xadd(I)-gridmat(0,0:nngp-1))^2+(Yadd(I)-gridmat(1,0:nngp-1))^2) - IF (d2gp GT 0.25*DX0^2) THEN BEGIN - print,d2gp,dx0,Xadd(naddpoint),Yadd(naddpoint) - naddpoint=naddpoint+1 - iadd(I)=1 - ENDIF - ENDFOR - nngp=nngp+naddpoint - temp=gridmat - gridmat=DBLARR(8,nngp) - gridmat(*,0:nngp-naddpoint-1)=temp - II=nngp-naddpoint - FOR I = 0, nadd-1 DO BEGIN - IF Iadd(I) EQ 1 THEN BEGIN - gridmat(0,II)=Xadd(I) - gridmat(1,II)=Yadd(I) - londeg=0 - lonmin=0. - latdeg=0 - latmin=0. - XYtoLatLon,Xadd(I),Yadd(I),latdeg,latmin,londeg,lonmin - gridmat(2,II)=latdeg - gridmat(3,II)=latmin - gridmat(4,II)=londeg - gridmat(5,II)=lonmin - II=II+1 - ENDIF - ENDFOR - Displaygrid - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - WIDGET_CONTROL,Wdraw,EVENT_PRO='analyzer_event' - END - - ELSE: - ENDCASE - END ;when the button is released - - ; Updates the cursor position and value of the current field - 2:IF datastatus (2) THEN BEGIN ;ev.type=2 when the cursor is in - ;in the drawing window - coord=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - i0=FLOOR(coord(0)/dx) - j0=FLOOR(coord(1)/dy) - IF ((i0 GE 0) AND (i0 LT nx) $ - AND (j0 GE 0) AND (j0 LT ny) $ - AND datastatus(3)) THEN BEGIN - valeur=gd(i0,j0) - WIDGET_CONTROL,Wright(14,5), $ - SET_VALUE=STRING(valeur,FORMAT='(F8.2)') - ENDIF - WIDGET_CONTROL,Wright(14,1), $ - SET_VALUE=STRING(coord(0),FORMAT='(F7.3)') - WIDGET_CONTROL,Wright(14,3), $ - SET_VALUE=STRING(coord(1),FORMAT='(F6.2)') - latdeg=0. - latmin=0. - londeg=0. - lonmin=0. - latlonstring='' - XYtoLatLon,coord(0),coord(1), $ - latdeg,latmin,londeg,lonmin,latlonstring - WIDGET_CONTROL,Wright(15,1), $ - SET_VALUE=latlonstring - ENDIF - ELSE: - ENDCASE - -RETURN -END - -;---------------------------------------------------------------------------- -PRO UpdateTable,I,J -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON FLAGS, eqscale,cbar,clickflag,subwin -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -;** 4 ** subwindow widgets widgets -COMMON WGene,Wgrideditor,WG,root -;*******END OF COMMON BLOCKS******************************* - londeg=0 - lonmin=0. - latdeg=0 - latmin=0. - x=0. - y=0. - - CASE 1 OF - (I LT 2):BEGIN ;updates the grid points latitudes and longitudes - XYtoLatLon,gridmat(0,J),gridmat(1,J),latdeg,latmin,londeg,lonmin - gridmat(2,J)=latdeg - gridmat(3,J)=latmin - gridmat(4,J)=londeg - gridmat(5,J)=lonmin - END - ELSE:BEGIN ;updates the grid points X and Y coordinates - LatLontoxy,gridmat(2,J),gridmat(3,J),gridmat(4,J),gridmat(5,J),x,y - gridmat(0,J)=x - gridmat(1,J)=y - END - ENDCASE - WIDGET_CONTROL, Wgrideditor(1), SET_VALUE=gridmat(0:7,J:J), $ - USE_TABLE_SELECT=[0,J,7,J] - RETURN -END - -;---------------------------------------------------------------------------- -PRO Displaygrid -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON FLAGS, eqscale,cbar,clickflag,subwin -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -;** 4 ** subwindow widgets widgets -COMMON WGene,Wgrideditor,WG,root -;*******END OF COMMON BLOCKS******************************* - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - IF (nngp EQ 1) THEN ROWLAB=['1'] ELSE ROWLAB = STRING(FINDGEN(nngp)+1, FORMAT='(I8)') - WIDGET_CONTROL,WGrideditor(1),TABLE_YSIZE=nngp - WIDGET_CONTROL,Wgrideditor(1),ROW_LABELS=ROWLAB - WIDGET_CONTROL,WGrideditor(1), SET_VALUE=gridmat -END - - -;---------------------------------------------------------------------------- -PRO IN_LAND2,x,y,in -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON COAST, coastxy,coastl,coastnp,GSHHSPoly,GSHHSPoint,GSHHSPoly2,GSHHSPoint2 - TOTANGLE=0. - in=0 - - taille=SIZE(GSHHSPoly) - Npoly=taille(1)-1 - in=0 - FOR I=0L,Npoly-1 DO BEGIN - NP=GSHHSPoly(I+1,0)-GSHHSPoly(I,0) - XX=GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,0) - YY=GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,1) - PNPOLY,X,Y,XX,YY,NP,INOUT - IF INOUT EQ 1 THEN in =1 - ENDFOR - RETURN -END - -;---------------------------------------------------------------------------- -PRO PNPOLY,PX,PY,XX,YY,N,INOUT -; -; Test if point PX PY is inside or outside of polygon -; - X=XX(*)-PX - Y=YY(*)-PY - INOUT=-1 - I=0L - WHILE (I LT N-1) DO BEGIN - J=1L+(I MOD N) - MX=X(I) GE 0.0 - NX=X(J) GE 0.0 - MY=Y(I) GE 0.0 - NY=Y(J) GE 0.0 - ; PRINT,'PNPOLY2:',N,I,J,X(I),X(J),Y(I),Y(J),MX,NX,MY,NY -; IF(.NOT.((MY.OR.NY) AND (MX.OR.NX)).OR.(MX AND NX)) - IF( NOT ((MY OR NY) AND (MX OR NX)) OR (MX AND NX)) THEN BEGIN - I=I+1L - ENDIF ELSE BEGIN - ; PRINT,'PNPOLY3:',I,MX,NX,MY,NY - - IF( NOT (MY AND NY AND (MX OR NX) AND NOT (MX AND NX))) THEN BEGIN - INOUT=-INOUT - RETURN - ENDIF ELSE BEGIN - RAT=((Y(I)*X(J)-X(I)*Y(J))/(X(J)-X(I))) - ; PRINT,'PNPOLY4:',I,RAT - IF RAT EQ 0 THEN BEGIN - INOUT=0 ; zero - RETURN - ENDIF ELSE BEGIN - IF RAT LT 0 THEN BREAK ELSE $ - INOUT=-INOUT ;positive - I=I+1L - ENDELSE - ENDELSE - - ENDELSE - ENDWHILE - RETURN - END - -;---------------------------------------------------------------------------- -PRO IN_SEA,x,y,in -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline - TOTANGLE=0. - J0=contourline(0,0) - in=0 - FOR J=contourline(0,0),contourline(1,0) DO BEGIN - J1=J - J2=J+1 - IF J2 GT contourline(1,0) THEN J2 =J0 - IF (contourline(2+J2-contourline(0,0),1) LT 0) THEN BEGIN - J2=J0 - J0=J+1 - ENDIF - x1=gridmat(0,J1) - y1=gridmat(1,J1) - x2=gridmat(0,J2) - y2=gridmat(1,J2) - ANGLE=ASIN(((x1-x)*(y2-y)-(x2-x)*(y1-y))/sqrt(((x1-x)^2+(y1-y)^2)*((x2-x)^2+(y2-y)^2))) - TOTANGLE=TOTANGLE+ANGLE - ; IF (I EQ 1572) THEN PRINT,'TRIN ?',I,nsea,J,J1,J2,xg,yg,TOTANGLE,ANGLE,2*!pi - ; PRINT,'TRIN ?',J,TOTANGLE - ENDFOR - IF ABS(TOTANGLE-2*!pi) LT !pi THEN in=1 - RETURN -END - -;---------------------------------------------------------------------------- -PRO IN_SEA2,x,y,in -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline - TOTANGLE=0. - ncont=contourline(1,0)-contourline(0,0)+2 - DJM=FLOOR(ncont/100); - PRINT,DJM - J0=contourline(0,0) - in=0 - ANGLE=1 - J=contourline(0,0) - WHILE (J LT contourline(1,0)) DO BEGIN - J1=J - DJMAX=MIN([DJM,MAX([1,FLOOR(1/ABS(ANGLE))])]) - DJ=1 - IND=2+J+DJ-contourline(0,0) - ;PRINT,2+J+DJ-contourline(0,0),ncont,'##',size(contourline) - IF (IND LT ncont) THEN BEGIN - WHILE ((IND LT ncont) AND (contourline(IND,1) EQ 1) AND (DJ LT DJMAX)) DO BEGIN - DJ=DJ+1 - IND=2+J+DJ-contourline(0,0) - ENDWHILE - ENDIF - J2=J1+DJ - IF J2 GT contourline(1,0) THEN J2 =J0 - IF (contourline(2+J2-contourline(0,0),1) EQ 0) THEN BEGIN - J2=J0 - J0=J+1 - ENDIF - x1=gridmat(0,J1) - y1=gridmat(1,J1) - x2=gridmat(0,J2) - y2=gridmat(1,J2) - ANGLE=ASIN(((x1-x)*(y2-y)-(x2-x)*(y1-y))/sqrt(((x1-x)^2+(y1-y)^2)*((x2-x)^2+(y2-y)^2))) - TOTANGLE=TOTANGLE+ANGLE - J=J+DJ - ENDWHILE - IF ABS(TOTANGLE-2*!pi) LT !pi THEN in=1 - RETURN -END - -;---------------------------------------------------------------------------- -PRO GET_BOUNDARY, IOBP, NEIGHBOR -; looks for points on the boundary ... -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -; Licensing: -; -; This code is distributed under the GNU LGPL license. -; -; Written: -; -; Sometime in 2011 -; Adapted to IDL, by F. Ardhuin 22 June 2013 -; THERE SEEMS TO BE A BUG ... -; -; Author: -; -; Mathieu Dutour Sikiric -; -; Parameters: -; Input: -; NNGP: number of nodes -; TRIGP: list of nodes -; NTRI: number of triangles -; Output: -; IOBP: Boundary Points -; NEIGHBOR -; -; Description: -; if a node belong to a boundary, the function -; returns the neighbor of this point on one side. -; if the point is interior then the value 0 is set. -; - IE=0 - I=0 - OP=0 - - STATUS=INTARR(NNGP) - COLLECTED=INTARR(NNGP) - PREVVERT=INTARR(NNGP) - NEXTVERT=INTARR(NNGP) - NEIGHBOR=INTARR(NNGP) - NEIGHBOR(*)=0 - STATUS(*) = 0 - NEXTVERT(*) = 0 - PREVVERT(*) = 0 - FOR IE=1,NTRI DO BEGIN - FOR I=1,3 DO BEGIN - IF (I EQ 1) THEN BEGIN - IPREV=3 - ENDIF ELSE BEGIN - IPREV=I-1 - ENDELSE - IF (I EQ 3) THEN BEGIN - INEXT=1 - ENDIF ELSE BEGIN - INEXT=I+1 - ENDELSE - IP=TRIGP(IE,I) - IPNEXT=TRIGP(IE,INEXT) - IPPREV=TRIGP(IE,IPREV) - IF (STATUS(IP-1) EQ 0) THEN BEGIN - STATUS(IP-1)=1 - PREVVERT(IP-1)=IPPREV - NEXTVERT(IP-1)=IPNEXT - ENDIF - ENDFOR - ENDFOR - STATUS(*)=0 - - ISFINISHED=0 - WHILE ISFINISHED EQ 0 DO BEGIN - COLLECTED(*)=0 - FOR IE=1,NTRI DO BEGIN - FOR I=1,3 DO BEGIN - IF (I EQ 1) THEN BEGIN - IPREV=3 - ENDIF ELSE BEGIN - IPREV=I-1 - ENDELSE - IF (I EQ 3) THEN BEGIN - INEXT=1 - ENDIF ELSE BEGIN - INEXT=I+1 - ENDELSE - IP=TRIGP(IE,I) - IPNEXT=TRIGP(IE,INEXT) - IPPREV=TRIGP(IE,IPREV) - IF (STATUS(IP-1) EQ 0) THEN BEGIN - ZNEXT=NEXTVERT(IP-1) - IF (ZNEXT EQ IPPREV) THEN BEGIN - COLLECTED(IP-1)=1 - NEXTVERT(IP-1)=IPNEXT - IF (NEXTVERT(IP-1) EQ PREVVERT(IP-1)) THEN BEGIN - STATUS(IP-1)=1 - ENDIF - ENDIF - ENDIF - ENDFOR - ENDFOR - - ISFINISHED=1 - FOR IP=0,NNGP-1 DO BEGIN - IF ((COLLECTED(IP) EQ 0) AND (STATUS(IP) EQ 0)) THEN BEGIN - STATUS(IP)=-1 - NEIGHBOR(IP)=NEXTVERT(IP) ; new code - ENDIF - IF (STATUS(IP) EQ 0) THEN BEGIN - ISFINISHED=0 - ENDIF - ENDFOR - IF (ISFINISHED EQ 1) THEN BEGIN - ISFINISHED=0 - ENDIF - ENDWHILE - - IOBP(*) = 0 - FOR IP=0,NNGP-1 DO BEGIN - IF (STATUS(IP) EQ -1 AND IOBP(IP) EQ 0) THEN BEGIN - IOBP(IP)=1 - ENDIF - ENDFOR -; Now some basic consistency checks -; The points that are neighbor should be organized in cycles. -; That is every node should be a neighbor and have a neighbor -; and only one - NBneighbor=INTARR(NNGP) - NBneighbor=0 - FOR IP=0,NNGP-1 DO BEGIN - eIdx=NEIGHBOR(IP) - IF (eIdx GT 0) THEN BEGIN - NBneighbor(eIdx)=NBneighbor(eIdx)+1 - ENDIF - ENDFOR - HaveError=0 - FOR IP=0,NNGP-1 DO BEGIN - IF (NBneighbor(IP) GT 1) THEN BEGIN - Print , 'Inconsistency in the output' - Print , ' Vertex ', IP, ' is ', NBneighbor(IP), ' times neighbor' - HaveError=1 - ENDIF - IF ((NBneighbor(IP) EQ 1) AND (NEIGHBOR(IP) EQ 0)) THEN BEGIN - Print , 'Inconsistency in the output' - Print , ' Vertex ', IP, ' is a neighbor' - Print , ' but has no neighbor!' - HaveError=1 - ENDIF - IF ((NBneighbor(IP) EQ 0) AND (NEIGHBOR(IP) GT 0)) THEN BEGIN - Print , 'Inconsistency in the output' - Print , ' Vertex ', IP, ' has a neighbor' - Print , ' but is not a neighbor!' - HaveError=1 - ENDIF - ENDFOR - IF (HaveError EQ 1) THEN BEGIN - Print , 'Find some errors in the output' - Print , 'Please check for node contained in several boundaries' - ENDIF - RETURN - END - -;********************************************************************** -;* * -;********************************************************************** - PRO GetCycleBoundaries, IOBP, NEIGHBOR, NbCycle, LengthCycle, FirstInCycle, StatusCycle -; Licensing: -; -; This code is distributed under the GNU LGPL license. -; -; Written: -; -; Sometime in 2011 -; -; Author: -; -; Mathieu Dutour Sikiric -; -; Parameters: -; Input: -; NNGP: number of nodes -; TRIGP: list of nodes -; NTRI: number of triangles -; IOBP: List of Boundary Points -; NEIGHBOR: neighbor of a point. -; -; Output: -; NbCycle -; LengthCycle: list of length of cycles -; FirstInCycle: First element in the cycle -; StatusCycle: For every element specification to which -; cycle it belongs -; - STATUS=INTARR(NNGP) - LengthCycle=INTARR(NNGP) - FirstInCycle=INTARR(NNGP) - StatusCycle=INTARR(NNGP) - STATUS(*) = 0 - FOR IP=0,NNGP-1 DO BEGIN - IF (IOBP(IP) EQ 1) THEN STATUS(IP)=1 - ENDFOR - - NbCycle = 0 - FOR IP = 0, NNGP-1 DO BEGIN - IF (STATUS(IP) EQ 1) THEN BEGIN - NbCycle=NbCycle+1 - IPfirst=IP - IPwork=IP - FINISHED=0 - WHILE FINISHED EQ 0 DO BEGIN - IF (IPwork EQ 0) THEN FINISHED=1 - IF (FINISHED EQ 0) THEN BEGIN - STATUS(IPwork) = 0 - IPwork=NEIGHBOR(IPwork) - IF (IPwork EQ IPfirst) THEN BEGIN - FINISHED = 1 - ENDIF - ENDIF - ENDWHILE - ENDIF - ENDFOR - - FOR IP=0,NNGP-1 DO BEGIN - IF (IOBP(IP) EQ 1) THEN STATUS(IP) = 1 - ENDFOR - - iCycle=0 - FOR IP=0,NNGP-1 DO BEGIN - IF (STATUS(IP) EQ 1) THEN BEGIN - iCycle=iCycle+1 - IPfirst=IP - FirstInCycle(iCycle)=IPfirst - IPwork=IP - TheLength=0 - FINISHED=0 - WHILE (FINISHED EQ 0) DO BEGIN - IF (IPwork EQ 0) THEN FINISHED = 1 - IF (FINISHED EQ 0) THEN BEGIN - STATUS(IPwork)=0 - TheLength=TheLength+1 - StatusCycle(IPwork)=iCycle - IPwork=NEIGHBOR(IPwork) - IF (IPwork EQ IPfirst) THEN FINISHED = 1 - ENDIF - ENDWHILE - LengthCycle(iCycle) = TheLength - ENDIF - ENDFOR - RETURN - END - -;---------------------------------------------------------- -PRO MESH_CLEAN_4,IPDEL -; Removes node and triangles with 4 neighbors -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON WGene,Wgrideditor,WG,root -;*******END OF COMMON BLOCKS******************************* -; - TRIGP_OLD=TRIGP(*,1:3) - indtri=WHERE(TRIGP_OLD EQ IPDEL,kount) - - IF (kount EQ 4) THEN BEGIN - PRINT,'Cleaning up 4-neighbor node:',IPDEL - FOR ITRI=0,kount-1 DO BEGIN - ;ind1 = ARRAY_INDICES(TRIGP_OLD, indtri(ITRI)) - ARRAY_IND2,TRIGP_OLD, indtri(ITRI),ind1 - PRINT,'Node ', IPDEL,' is in element', ind1(0),ind1(1),TRANSPOSE(TRIGP_OLD(ind1(0),*)) - ENDFOR - - TRI2=INDGEN(3)*0 - ;ind1 = ARRAY_INDICES(TRIGP_OLD, indtri(0)) - ;ind1 = ARRAY_IND2(TRIGP_OLD, indtri(0)) - ARRAY_IND2,TRIGP_OLD, indtri(0),ind1 - ind12=((ind1(1)+1) MOD 3)+1 - ind13=((ind1(1)+2) MOD 3)+1 - - FOR ITRI=1,kount-1 DO BEGIN - ;indn = ARRAY_INDICES(TRIGP_OLD, indtri(ITRI)) - ;indn = ARRAY_IND2(TRIGP_OLD, indtri(ITRI)) - ARRAY_IND2,TRIGP_OLD, indtri(ITRI),indn - indn2=((indn(1)+1) MOD 3)+1 - indn3=((indn(1)+2) MOD 3)+1 -; looks for other common point of 2 triangles - ;PRINT,'1', TRI2(ITRI-1),indn(0),indn(1),indn2,indn3,TRIGP_OLD(indn(0),*) - IF ( TRIGP(indn(0),indn2) EQ TRIGP(ind1(0),ind12)) THEN TRI2(ITRI-1)=1 - ; PRINT,'2', TRI2(ITRI-1),indn(0),indn(1),indn2,indn3,TRIGP_OLD(indn(0),*) - IF ( TRIGP(indn(0),indn3) EQ TRIGP(ind1(0),ind12)) THEN TRI2(ITRI-1)=1 - ;PRINT,'3', TRI2(ITRI-1),indn(0),indn(1),indn2,indn3,TRIGP_OLD(indn(0),*) - IF ( TRIGP(indn(0),indn2) EQ TRIGP(ind1(0),ind13)) THEN TRI2(ITRI-1)=1 - ;PRINT,'4', TRI2(ITRI-1),indn(0),indn(1),indn2,indn3,TRIGP_OLD(indn(0),*) - IF ( TRIGP(indn(0),indn3) EQ TRIGP(ind1(0),ind13)) THEN TRI2(ITRI-1)=1 - IF (TRI2(ITRI-1) EQ 0) THEN BEGIN - ind2 = indn ; this is the opposite triangle - ind22=indn2 - ind23=indn3 - ENDIF - ;PRINT,'C_GP IN', ITRI-1,TRI2(ITRI-1),indn(0),indn(1),indn2,indn3,TRIGP_OLD(indn(0),*) - ENDFOR -; looks for opposite nodes -; assumes that ind22 and ind12 are opposite - FLIP=0 - FOUND=0 - FOR ITRI=1,kount-1 DO BEGIN - ;indn = ARRAY_INDICES(TRIGP_OLD, indtri(ITRI)) - ;indn = ARRAY_IND2(TRIGP_OLD, indtri(ITRI)) - ARRAY_IND2,TRIGP_OLD, indtri(ITRI),indn - IF (indn(0) NE ind2(0)) THEN BEGIN - indn2=((indn(1)+1) MOD 3)+1 - indn3=((indn(1)+2) MOD 3)+1 - IF ( TRIGP(indn(0),indn2) EQ TRIGP(ind1(0),ind12) $ - AND TRIGP(indn(0),indn3) EQ TRIGP(ind2(0),ind22)) THEN FLIP=1 - IF (FOUND EQ 0) THEN BEGIN - ind3=indn - FOUND=1 - ENDIF ELSE BEGIN - ind4=indn - ENDELSE - - ENDIF - ENDFOR - IF (FLIP EQ 1) THEN BEGIN - temp=ind22 - ind22=ind23 - ind23=temp - ENDIF - print,'Removing node in triangles:' - print,'node ',IPDEL,TRIGP_OLD(ind1(0),ind1(1)),' in tri. ',ind1(0), $ - ' replaced by ', TRIGP_OLD(ind2(0),ind23-1) - TRIGP_OLD(ind1(0),ind1(1))=TRIGP_OLD(ind2(0),ind23-1) - print,'node ',IPDEL,TRIGP_OLD(ind2(0),ind2(1)),' in tri. ',ind2(0), $ - ' replaced by ', TRIGP_OLD(ind1(0),ind13-1) - TRIGP_OLD(ind2(0),ind2(1))=TRIGP_OLD(ind1(0),ind13-1) -; - print,'Removing triangles:',ind3(0),' and ',ind4(0) - NTRI=NTRI-2 - temp3=ind3 - temp4=ind4 - IF (ind3(0) GT ind4(0)) THEN BEGIN - ind4=temp3 - ind3=temp4 - ENDIF - - TRIGP=LONARR(ntri+1,4) - TRIGP(0:ind3(0)-1,1:3)=TRIGP_OLD(0:ind3(0)-1,0:2) - TRIGP(ind3(0):ind4(0)-2,1:3)=TRIGP_OLD(ind3(0)+1:ind4(0)-1,0:2) - TRIGP(ind4(0)-1:ntri,1:3)=TRIGP_OLD(ind4(0)+1:ntri+2,0:2) - - - FOR ITRI=1,NTRI DO BEGIN - FOR II=1,3 DO BEGIN - I1=TRIGP(ITRI,II) - IF (I1 GE IPDEL) THEN TRIGP(ITRI,II)=TRIGP(ITRI,II)-1 - ENDFOR - ENDFOR - - idel= 1;number of deleted grid points - WIDGET_CONTROL,Wgrideditor(1),/DELETE_ROWS , $ - USE_TABLE_SELECT=[-1,IPDEL-1,5,IPDEL-1] - nngp=nngp-idel ;new number of grid points - tempo=gridmat - gridmat=DBLARR(8,nngp) - IF IPDEL gt 1 THEN gridmat(*,0:IPDEL-2)=tempo(*,0:IPDEL-2) - IF IPDEL LT nngp THEN gridmat(*,IPDEL-1:nngp-1)=tempo(*,IPDEL:nngp) - MAKE_CONTOUR - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - PRINT,'Point ',IPDEL,' has been deleted.' - - ENDIF ; kount = 4 - - RETURN - END - -;---------------------------------------------------------- -PRO MESH_CLEAN_3,IPDEL -; Removes node and triangles with 3 neighbors (no boundary) -; Only if angle of remaining triangle is less than ANGMAX -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON WGene,Wgrideditor,WG,root -;*******END OF COMMON BLOCKS******************************* -; - TRIGP_OLD=TRIGP(*,1:3) - indtri=WHERE(TRIGP_OLD EQ IPDEL,kount) - PRINT,'Removing node with 3 neighbors?',IPDEL,kount - - IF (kount EQ 3) THEN BEGIN - - FOR ITRI=0,kount-1 DO BEGIN - ARRAY_IND2,TRIGP_OLD, indtri(ITRI),ind1 - PRINT,'C_GP IN', ind1(0),ind1(1),TRANSPOSE(TRIGP_OLD(ind1(0),*)) - ;PRINT,'bound? ', IOBP(TRANSPOSE(TRIGP_OLD(ind1(0),*))-1) - ;SUMIOBP=SUMIOBP+TOTAL(IOBP(TRANSPOSE(TRIGP_OLD(ind1(0),*))-1)) - ENDFOR - - ARRAY_IND2,TRIGP_OLD, indtri(0),ind1 - ARRAY_IND2,TRIGP_OLD, indtri(1),ind2 - ARRAY_IND2,TRIGP_OLD, indtri(2),ind3 - - - temp1=ind1 - temp2=ind2 - IF (ind1(0) GT ind2(0)) THEN BEGIN - ind2=temp1 - ind1=temp2 - ENDIF - temp1=ind1 - temp3=ind3 - IF (ind1(0) GT ind3(0)) THEN BEGIN - ind3=temp1 - ind1=temp3 - ENDIF - ind12=((ind1(1)+1) MOD 3) - ind13=((ind1(1)+2) MOD 3) - ind22=((ind2(1)+1) MOD 3) - ind23=((ind2(1)+2) MOD 3) - ind32=((ind3(1)+1) MOD 3) - ind33=((ind3(1)+2) MOD 3) - ind2n=ind22 -; Finds node to be used for replacement - IF (TRIGP_OLD(ind2(0),ind22) EQ TRIGP_OLD(ind1(0),ind12) OR $ - TRIGP_OLD(ind2(0),ind22) EQ TRIGP_OLD(ind1(0),ind13) ) THEN ind2n=ind23 - - ind1c=ind12 - ind1a=ind13 - - - print,'Removing node in triangles:' - print,'node ',IPDEL,' in triangle ',ind1(0), $ - ' replaced by', TRIGP_OLD(ind2(0),ind2n) - TRIGP_OLD(ind1(0),ind1(1))=TRIGP_OLD(ind2(0),ind2n) -; - print,'Removing triangles:',ind2(0),ind3(0) - - NTRI=NTRI-2 - TRIGP=LONARR(ntri+1,4) - TRIGP(0:ind2(0)-1,1:3)=TRIGP_OLD(0:ind2(0)-1,0:2) - TRIGP(ind2(0):ind3(0)-2,1:3)=TRIGP_OLD(ind2(0)+1:ind3(0)-1,0:2) - TRIGP(ind3(0)-1:ntri,1:3)=TRIGP_OLD(ind3(0)+1:ntri+2,0:2) -; -; Shifts indices in remaining triangles -; - FOR ITRI=1,NTRI DO BEGIN - FOR II=1,3 DO BEGIN - I1=TRIGP(ITRI,II) - IF (I1 GE IPDEL) THEN TRIGP(ITRI,II)=TRIGP(ITRI,II)-1 - ENDFOR - ENDFOR - - idel= 1;number of deleted grid points - WIDGET_CONTROL,Wgrideditor(1),/DELETE_ROWS , $ - USE_TABLE_SELECT=[-1,IPDEL-1,5,IPDEL-1] - nngp=nngp-idel ;new number of grid points - tempo=gridmat - gridmat=DBLARR(8,nngp) - IF IPDEL gt 1 THEN gridmat(*,0:IPDEL-2)=tempo(*,0:IPDEL-2) - IF IPDEL LT nngp THEN gridmat(*,IPDEL-1:nngp-1)=tempo(*,IPDEL:nngp) - MAKE_CONTOUR - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - PRINT,'Point ',IPDEL,' has been deleted.' - - ENDIF ; kount = 3 - RETURN - END - - -;---------------------------------------------------------- -PRO MESH_CLEAN_2,IPDEL,ANGMAX, DELOK -; Removes node and triangles with 2 neighbors -; Only if angle of remaining triangle is less than ANGMAX -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON WGene,Wgrideditor,WG,root -COMMON UNDO,gridmat0,nngp0,ntri0,trigp0,contourline0 - -;*******END OF COMMON BLOCKS******************************* -; - TRIGP_OLD=TRIGP(*,1:3) - indtri=WHERE(TRIGP_OLD EQ IPDEL,kount) - PRINT,'Removing boundary node with 3 neighbors?',IPDEL,kount,ntri0,ntri - - IF (kount EQ 2) THEN BEGIN - - FOR ITRI=0,kount-1 DO BEGIN - ;ind1 = ARRAY_INDICES(TRIGP_OLD, indtri(ITRI)) - ;ind1 = ARRAY_IND2(TRIGP_OLD, indtri(ITRI)) - ARRAY_IND2,TRIGP_OLD, indtri(ITRI),ind1 - PRINT,'C_GP IN', ind1(0),ind1(1),TRANSPOSE(TRIGP_OLD(ind1(0),*)) - ;PRINT,'bound? ', IOBP(TRANSPOSE(TRIGP_OLD(ind1(0),*))-1) - ;SUMIOBP=SUMIOBP+TOTAL(IOBP(TRANSPOSE(TRIGP_OLD(ind1(0),*))-1)) - ENDFOR - - ;ind1 = ARRAY_INDICES(TRIGP_OLD, indtri(0)) - ;ind2 = ARRAY_INDICES(TRIGP_OLD, indtri(1)) - ;ind1 = ARRAY_IND2(TRIGP_OLD, indtri(0)) - ;ind2 = ARRAY_IND2(TRIGP_OLD, indtri(1)) -ARRAY_IND2,TRIGP_OLD, indtri(0),ind1 -ARRAY_IND2,TRIGP_OLD, indtri(1),ind2 - temp1=ind1 - temp2=ind2 - IF (ind1(0) GT ind2(0)) THEN BEGIN - ind2=temp1 - ind1=temp2 - ENDIF - ind12=((ind1(1)+1) MOD 3) - ind13=((ind1(1)+2) MOD 3) - ind22=((ind2(1)+1) MOD 3) - ind23=((ind2(1)+2) MOD 3) - ind2n=ind22 - ind1c=ind12 - ind1a=ind13 -; looks for other non-common point of triangle # 2, will be new point of triangle #1 - IF ( TRIGP_OLD(ind2(0),ind22) EQ TRIGP_OLD(ind1(0),ind12)) THEN BEGIN - ind2n=ind23 - ind1c=ind12 - ind1a=ind13 - ENDIF - IF ( TRIGP_OLD(ind2(0),ind22) EQ TRIGP_OLD(ind1(0),ind13)) THEN BEGIN - ind2n=ind23 - ind1c=ind13 - ind1a=ind12 - ENDIF - IF ( TRIGP_OLD(ind2(0),ind23) EQ TRIGP_OLD(ind1(0),ind12)) THEN BEGIN - ind2n=ind22 - ind1c=ind12 - ind1a=ind13 - ENDIF - IF ( TRIGP_OLD(ind2(0),ind23) EQ TRIGP_OLD(ind1(0),ind13)) THEN BEGIN - ind2n=ind22 - ind1c=ind13 - ind1a=ind12 - ENDIF - - xc=gridmat(0,TRIGP_OLD(ind1(0),ind1c)-1) - yc=gridmat(1,TRIGP_OLD(ind1(0),ind1c)-1) - xa=gridmat(0,TRIGP_OLD(ind1(0),ind1a)-1) - ya=gridmat(1,TRIGP_OLD(ind1(0),ind1a)-1) - xb=gridmat(0,TRIGP_OLD(ind2(0),ind2n)-1) - yb=gridmat(1,TRIGP_OLD(ind2(0),ind2n)-1) - dxa=(xa-xc) - dxb=(xb-xc) - dya=(ya-yc) - dyb=(yb-yc) - d1=sqrt( dxa^2 + dya^2 ) - d2=sqrt( dxb^2 + dyb^2 ) - SIA = (dxa*dyb-dxb*dya) - COA = (dxa*dxb+dya*dyb) - ANGLE=ABS(ATAN(SIA,COA)/!dtor) - IF (ANGLE LT ANGMAX) THEN BEGIN - print,'Removing node in triangles:' - print,'node ',IPDEL,ANGLE,d1,d2,'in tri. ',ind1(0), $ - ' replaced by', TRIGP_OLD(ind2(0),ind2n) - TRIGP_OLD(ind1(0),ind1(1))=TRIGP_OLD(ind2(0),ind2n) -; - print,'Removing triangles:',ind2(0) - NTRI=NTRI-1 - TRIGP=LONARR(ntri+1,4) - TRIGP(0:ind2(0)-1,1:3)=TRIGP_OLD(0:ind2(0)-1,0:2) - IF (ind2(0) LE NTRI) THEN TRIGP(ind2(0):ntri,1:3)=TRIGP_OLD(ind2(0)+1:ntri+1,0:2) -; - FOR ITRI=1,NTRI DO BEGIN - FOR II=1,3 DO BEGIN - I1=TRIGP(ITRI,II) - IF (I1 GE IPDEL) THEN TRIGP(ITRI,II)=TRIGP(ITRI,II)-1 - ENDFOR - ENDFOR - - idel= 1;number of deleted grid points - WIDGET_CONTROL,Wgrideditor(1),/DELETE_ROWS , $ - USE_TABLE_SELECT=[-1,IPDEL-1,5,IPDEL-1] - nngp=nngp-idel ;new number of grid points - tempo=gridmat - gridmat=DBLARR(8,nngp) - IF IPDEL gt 1 THEN gridmat(*,0:IPDEL-2)=tempo(*,0:IPDEL-2) - IF IPDEL LT nngp THEN gridmat(*,IPDEL-1:nngp-1)=tempo(*,IPDEL:nngp) - MAKE_CONTOUR - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - PRINT,'Point ',IPDEL,' has been deleted.' - ENDIF ELSE BEGIN - PRINT,'No removal, angle too large :',ANGLE, ' > ', ANGMAX - DELOK= 0 - ENDELSE - ENDIF ; kount = 2 - RETURN - END - - -;---------------------------------------------------------- -PRO MESH_CLEAN_1,IPDEL -; Removes node and triangles with 2 neighbors -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON WGene,Wgrideditor,WG,root -;*******END OF COMMON BLOCKS******************************* -; - - TRIGP_OLD=TRIGP(*,1:3) - indtri=WHERE(TRIGP_OLD EQ IPDEL,kount) - IF (kount EQ 1) THEN BEGIN - PRINT,'Removing node with 2 neighbors:',IPDEL,kount - ARRAY_IND2,TRIGP_OLD, indtri(0),ind1 - ind12=((ind1(1)+1) MOD 3)+1 - ind13=((ind1(1)+2) MOD 3)+1 -; - print,'Removing triangle:',ind1(0) - NTRI=NTRI-1 - TRIGP=LONARR(ntri+1,4) - TRIGP(0:ind1(0)-1,1:3)=TRIGP_OLD(0:ind1(0)-1,0:2) - IF (ind1(0) LT NTRI) THEN TRIGP(ind1(0):ntri,1:3)=TRIGP_OLD(ind1(0)+1:ntri+1,0:2) -; - FOR ITRI=1,NTRI DO BEGIN - FOR II=1,3 DO BEGIN - I1=TRIGP(ITRI,II) - IF (I1 GE IPDEL) THEN TRIGP(ITRI,II)=TRIGP(ITRI,II)-1 - ENDFOR - ENDFOR - - idel= 1;number of deleted grid points - WIDGET_CONTROL,Wgrideditor(1),/DELETE_ROWS , $ - USE_TABLE_SELECT=[-1,IPDEL-1,5,IPDEL-1] - nngp=nngp-idel ;new number of grid points - tempo=gridmat - gridmat=DBLARR(8,nngp) - IF IPDEL gt 1 THEN gridmat(*,0:IPDEL-2)=tempo(*,0:IPDEL-2) - IF IPDEL LT nngp THEN gridmat(*,IPDEL-1:nngp-1)=tempo(*,IPDEL:nngp) - MAKE_CONTOUR - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - Displaygrid - PRINT,'Point ',IPDEL,' has been deleted.' - ENDIF - RETURN - END - - -;---------------------------------------------------------------------------- -PRO MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH -; looks for points on the boundary ... -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -;*******END OF COMMON BLOCKS******************************* - CCON =INTARR(NNGP) - NEIGH=INTARR(NNGP) - IOBP=INTARR(NNGP) - ICOMAX=0 - COUNTRI=0 -; -; Builds neighbor node number array CCON -; - FOR IE = 1 , NTRI DO BEGIN - FOR II=0,2 DO BEGIN - IP = TRIGP(IE,II+1) - CCON(IP-1) = CCON(IP-1) + 1 - IF CCON(IP-1) GT COUNTRI THEN BEGIN - COUNTRI= CCON(IP-1) - ICOMAX=IP - ENDIF - ENDFOR - ENDFOR -; COUNTRI = MAX(CCON) -; -; Builds neighbor triangle number array NEIGH -; - MAXNEIGH=2*COUNTRI - VNEIGH=LONARR(NNGP,MAXNEIGH) - - FOR IE = 1 , NTRI DO BEGIN - FOR II=1,3 DO BEGIN - IP = TRIGP(IE,II) ; node for which data is gathered - FOR I2=0,1 DO BEGIN - IP2 = TRIGP(IE,1+((II+I2) MOD 3)); neighbor of this node - FOUND=0 - FOR INEI =0, NEIGH(IP-1)-1 DO BEGIN - IF ((IP2-1) EQ VNEIGH(IP-1,INEI)) THEN FOUND = 1 - ENDFOR - IF (FOUND EQ 0) THEN BEGIN - VNEIGH(IP-1,NEIGH(IP-1)) = IP2-1 - NEIGH(IP-1)=NEIGH(IP-1)+1 - ENDIF - ENDFOR - ENDFOR - ENDFOR -; -; Compares the 2 arrays -; - FOR IX = 0, NNGP-1 DO BEGIN - IF (CCON(IX) LT NEIGH(IX)) THEN IOBP(IX)=1 ELSE IOBP(IX)=0 - ENDFOR - RETURN -END - -;---------------------------------------------------------------------------- -PRO MSH_BOUNDARY1,IP1,IOBP -; looks for points on the boundary ... -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -;*******END OF COMMON BLOCKS******************************* - CCON =0 - IOBP =0 - NEIGH=0 -; -; Builds neighbor triangle number array NEIGH and CCON -; - MAXNEIGH=20 - VNEIGH=LONARR(MAXNEIGH) - - FOR IE = 1 , NTRI DO BEGIN - FOR II=1,3 DO BEGIN - IP = TRIGP(IE,II) ; node for which data is gathered - IF (IP EQ IP1+1) THEN BEGIN - CCON = CCON +1 - FOR I2=0,1 DO BEGIN - IP2 = TRIGP(IE,1+((II+I2) MOD 3)); neighbor of this node - FOUND=0 - FOR INEI =0, NEIGH-1 DO BEGIN - IF (IP2 EQ VNEIGH(INEI)) THEN FOUND = 1 - ENDFOR - IF (FOUND EQ 0) THEN BEGIN - VNEIGH(NEIGH) = IP2 - NEIGH=NEIGH+1 - ENDIF - ENDFOR - ENDIF - ENDFOR - ENDFOR -; -; Compares the 2 values -; - IF (CCON LT NEIGH ) THEN IOBP=1 ELSE IOBP=0 - RETURN -END - -;---------------------------------------------------------- -PRO DISPERSION,SIG,DEP,WCG -; Inverts dispersion -; inverts the linear dispersion relation (2*pi*f)^2=g*k*tanh(k*dep) to get -; k from f and dep. 2 Arguments: f and dep. -eps=0.000001; -g=9.81; - NDEP=N_ELEMENTS(DEP) - WCG=FLTARR(NDEP) - FOR I=0,NDEP-1 DO BEGIN - Y=dep(I)*sig^2./g ; this is the squared adimensional frequency - X=sqrt(Y); - F=1.; - while abs(F) GT eps DO BEGIN - H=tanh(X); - F=Y-X*H; - FD=-H-X/cosh(X)^2; - X=X-F/FD; - endWHILE - WNUM = X/DEP(I) - WCG(I)=SIG/WNUM*(0.5+X/SINH(2*X)) - ;PRINT,'TEST:',I,DEP(I),WCG(I),Y,X*TANH(X) - ENDFOR -RETURN -END - -;---------------------------------------------------------- -PRO UPDATE_TIMESTEPS -; Recomputes timesteps -; -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON GRIDTIMESTEPS, zoffset, updateonmove, waveperiod -COMMON TRIANGLES,ntri,TRIGP,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON TIMESTEPSUG,TIMESTEPS,NTIMESTEPS,FLAGTSTEP, TIMESTEPS_ORDER -COMMON TIMESTEPSUG2, CCON, IEN, SI, AREA, WCG, CELLVERTEX, IE_CELL, POS_CELL, C, K -COMMON TIMESTEPSUG3, SIRATIO, JCELLS, LEN, ANGLE0, CROSSDIFF, TIMESTEPS_ALL -COMMON GRIDTIMESTEPS, zoffset, updateonmove, waveperiod -;*******END OF COMMON BLOCKS******************************* -; - NTIMESTEPS=MIN([NNGP,200]) - IEN = FLTARR(6,NTRI) - AREA = FLTARR(NTRI) - CCON = INTARR(NNGP) - LEN = FLTARR(NTRI,3) - ANGLE0 = FLTARR(NTRI,3) - CROSSDIFF = FLTARR(6,NTRI) - SI = FLTARR(NNGP) - ONETHIRD=1/3. - ONESIXTH=1/6. - THR=1.E-20 - IF (NNGP GT 15000) THEN message,'Computing time steps for mesh ... please wait',/INFO - MSH_BOUNDARY,IOBP,VNEIGH,MAXNEIGH,NEIGH - - SIRATIO = FLTARR(NNGP)+1/THR - TMPINV = FLTARR(3) - TMP = FLTARR(3) - FOR IE = 0, NTRI-1 DO BEGIN - I1 = TRIGP(IE+1,1)-1 - I2 = TRIGP(IE+1,2)-1 - I3 = TRIGP(IE+1,3)-1 - NI = TRIGP(IE+1,*) - DXP1 = gridmat(0,I2) - gridmat(0,I1) - DYP1 = gridmat(1,I2) - gridmat(1,I1) - DXP2 = gridmat(0,I3) - gridmat(0,I2) - DYP2 = gridmat(1,I3) - gridmat(1,I2) - DXP3 = gridmat(0,I1) - gridmat(0,I3) - DYP3 = gridmat(1,I1) - gridmat(1,I3) - IEN(0,IE) = - DYP2 - IEN(1,IE) = DXP2 - IEN(2,IE) = - DYP3 - IEN(3,IE) = DXP3 - IEN(4,IE) = - DYP1 - IEN(5,IE) = DXP1 - - LEN(IE,0) = SQRT(DXP2^2+DYP2^2) - LEN(IE,1) = SQRT(DXP3^2+DYP3^2) - LEN(IE,2) = SQRT(DXP1^2+DYP1^2) - - - TMPINV(0) = 1./ (LEN(IE,1) * LEN(IE,2)) - TMPINV(1) = 1./ (LEN(IE,0) * LEN(IE,2)) - TMPINV(2) = 1./ (LEN(IE,1) * LEN(IE,0)) - - TMP(0) = -1.*(DXP1*DXP3 +DYP1*DYP3) * TMPINV(0) - TMP(1) = -1.*(DXP2*DXP1 +DYP2*DYP1) * TMPINV(1) - TMP(2) = -1.*(DXP3*DXP2 +DYP3*DYP2) * TMPINV(2) -; -; angles used in gradients computation -; normalizes angles (OK if not on boundary) -; - ANGLE0(IE,0) = ACOS(TMP(0))/(2*!pi) - ANGLE0(IE,1) = ACOS(TMP(1))/(2*!pi) - ANGLE0(IE,2) = ACOS(TMP(2))/(2*!pi) - -; -; cross product of edge-vector (orientated anticlockwise) -; - AREA(IE) = (DXP3*DYP1 - DYP3*DXP1)*0.5 - -; The *1 factor is for km -> km -; For lat-lon calculations, there should also be the 1/cos(lat) in -; FACTX - - FACTX = 1./(2*AREA(IE)*1) - FACTY = 1./(2*AREA(IE)*1) - - CROSSDIFF(0,IE) = -1*DYP2 * FACTX - CROSSDIFF(1,IE) = -1*DYP3 * FACTX - CROSSDIFF(2,IE) = -1*DYP1 * FACTX - CROSSDIFF(3,IE) = DXP2 * FACTY - CROSSDIFF(4,IE) = DXP3 * FACTY - CROSSDIFF(5,IE) = DXP1 * FACTY - - CCON(I1) = CCON(I1)+1 - SI(I1) = SI(I1) + AREA(IE)*ONETHIRD - CCON(I2) = CCON(I2)+1 - SI(I2) = SI(I2) + AREA(IE)*ONETHIRD - CCON(I3) = CCON(I3)+1 - SI(I3) = SI(I3) + AREA(IE)*ONETHIRD - IF (AREA(IE) LT SIRATIO(I1)) THEN SIRATIO(I1) = AREA(IE) - IF (AREA(IE) LT SIRATIO(I2)) THEN SIRATIO(I2) = AREA(IE) - IF (AREA(IE) LT SIRATIO(I3)) THEN SIRATIO(I3) = AREA(IE) - ENDFOR - SIGMA = 8.d0*ATAN(1.d0)/WAVEPERIOD - - DEPTHS= gridmat(7,*) + zoffset - - DISPERSION,SIGMA,DEPTHS,WCG - - maxmnecon = MAX(CCON) - CELLVERTEX=LONARR(NNGP,maxmnecon,2) - - CHILF = LONARR(NNGP)-1 - FOR IE = 0, NTRI-1 DO BEGIN - FOR J=1,3 DO BEGIN - I = TRIGP(IE+1,J)-1 - CHILF(I) = CHILF(I)+1 - CELLVERTEX(I,CHILF(I),0) = IE - CELLVERTEX(I,CHILF(I),1) = J-1 - ENDFOR - ENDFOR - - J = 0L - JCELLS=LONARR(NNGP) - FOR IP = 0, NNGP-1 DO BEGIN - JCELLS(IP)=J - FOR I = 0, CCON(IP)-1 DO BEGIN - J = J + 1 - ENDFOR - ENDFOR - - COUNT_MAX = J ; Max. Number of entries in the pointers used in the calculations - - IE_CELL=LONARR(COUNT_MAX) - POS_CELL=INTARR(COUNT_MAX) -; - J = -1L - FOR IP = 0, NNGP-1 DO BEGIN - FOR I = 0, CCON(IP)-1 DO BEGIN - J = J + 1 - IE_CELL(J) = CELLVERTEX(IP,I,0) - POS_CELL(J) = CELLVERTEX(IP,I,1) - ENDFOR - ENDFOR - - DTMAX_EXP = FLTARR(NNGP) + 1./THR - - NTH=24 - THETA=FINDGEN(NTH)*2*!pi/NTH - COSTH=COS(THETA) - SINTH=SIN(THETA) - C = FLTARR(2,NNGP) - K = FLTARR(3,NTRI) - - LATTOM = 1000. ; !dtor * 6378137.0d0 - LAMBDA = FLTARR(2) -; -; Loops on directions -; -; IP0=70 -; GET_LUN,unit -; OPENW,unit,'fort.996' - FOR ID = 0, NTH-1 DO BEGIN - - FOR IP = 0, NNGP-1 DO BEGIN - COSFAC = 1. ;COS((FLOAT(gridmat(2,IP))+gridmat(3,IP)/60.)*!dtor) - C(0,IP) = WCG(IP)*COSTH(ID)/(LATTOM*COSFAC) - C(1,IP) = WCG(IP)*SINTH(ID)/LATTOM -; IF (IP EQ 70) PRINTF,unit,FORMAT='(2I8,2F13.4,2F11.6,F8.2,3F13.4)', ID+1,IP+1,WCG(IP)*COSTH(ID), WCG(IP)*SINTH(ID), C(0,IP),C(1,IP),WCG(IP), $ -; gridmat(4,IP)+gridmat(5,IP)/60.,gridmat(2,IP)+gridmat(3,IP)/60.,DEPTHS(IP) - ENDFOR - FOR IE = 0, NTRI-1 DO BEGIN - I1 = TRIGP(IE+1,1)-1 - I2 = TRIGP(IE+1,2)-1 - I3 = TRIGP(IE+1,3)-1 - LAMBDA(0) = ONESIXTH * (C(0,I1)+C(0,I2)+C(0,I3)) - LAMBDA(1) = ONESIXTH * (C(1,I1)+C(1,I2)+C(1,I3)) - K(0,IE) = LAMBDA(0) * IEN(0,IE) + LAMBDA(1) * IEN(1,IE) - K(1,IE) = LAMBDA(0) * IEN(2,IE) + LAMBDA(1) * IEN(3,IE) - K(2,IE) = LAMBDA(0) * IEN(4,IE) + LAMBDA(1) * IEN(5,IE) -;IF (I1 EQ IP0 OR I2 EQ IP0 OR I3 EQ IP0) THEN PRINTF,unit,FORMAT='(5I8,6F9.5,7F16.8)', $ -; ID+1,I1+1,I2+1,I3+1,IE+1,IEN(0:5,IE),LAMBDA(*),K(*,IE),COSTH(ID),SINTH(ID) -;IF (I1 EQ IP0 OR I2 EQ IP0 OR I3 EQ IP0) THEN PRINTF,unit,FORMAT='(8I6,8F16.8)', $ -; ID+1,I1+1,I2+1,I3+1,IE+1,I1,I2,I3,LAMBDA(*),K(*,IE),C(0,I1),C(0,I2),C(0,I3) - ENDFOR - - J = -1L - FOR IP = 0, NNGP-1 DO BEGIN - KSUM = 0.0 - FOR I = 0, CCON(IP)-1 DO BEGIN - J = J + 1 - IE = IE_CELL(J) - POS = POS_CELL(J) - KSUM = KSUM + MAX([K(POS,IE),0.0]) - I1 = TRIGP(IE+1,1) - I2 = TRIGP(IE+1,2) - I3 = TRIGP(IE+1,3) -; IF (IP EQ IP0) THEN printf,unit,FORMAT='(9I6,6F14.9)',ID+1,IP+1,I+1,J+1,IE+1,POS+1,I1,I2,I3,K(POS,IE),KSUM - ENDFOR - DTMAX_EXP_LOCAL = SI(IP)/MAX([DOUBLE(10.E-10),KSUM]) -; IF (IP.EQ.392) WRITE(997,'(2I8,5F16.9)') ID,IP,SI(IP),WCG(IP),MYXYZ(3,IP),KSUM,DTMAX_EXP(IP) - - IF (IOBP(IP) EQ 0) THEN DTMAX_EXP(IP) = MIN([DTMAX_EXP_LOCAL,DTMAX_EXP(IP)]) -; IF (IP EQ IP0) THEN printf,unit,FORMAT='(2I8,6F16.9)', ID+1,IP+1,SI(IP),WCG(IP),GRIDMAT(7,IP),KSUM,DTMAX_EXP_LOCAL,DTMAX_EXP(IP) - ENDFOR - ENDFOR -; close,unit -; free_lun,unit - ORDER=SORT(DTMAX_EXP) - PRINT,'Nodes giving smallest time steps:',ORDER(0:50)+1 - PRINT,'Values of these time steps (s) :',DTMAX_EXP(ORDER(0:50)) - TIMESTEPS=FLTARR(4,NTIMESTEPS) - FOR I=0,NTIMESTEPS-1 DO BEGIN - IND1=ORDER(I) - TIMESTEPS(0,I)=IND1 - TIMESTEPS(1,I)=DTMAX_EXP(IND1) - TIMESTEPS(2,I)=gridmat(0,IND1) - TIMESTEPS(3,I)=gridmat(1,IND1) - ; PRINT,IND1+1, DTMAX_EXP(IND1), gridmat(4,IND1)+gridmat(5,IND1)/60.,gridmat(2,IND1)+gridmat(3,IND1)/60.,DEPTHS(IND1) - ENDFOR - FLAGTSTEP=1 - TIMESTEPS_ORDER=ORDER - TIMESTEPS_ALL=DTMAX_EXP - RETURN -END - - -;---------------------------------------------------------- -PRO UG_GRADIENTS,Z,TRIANGLES,kount,WHICHNODE,DIFFX,DIFFY -; Computes gradients at position XP,YP -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON WGene,Wgrideditor,WG,root -COMMON TIMESTEPSUG3, SIRATIO, JCELLS, LEN, ANGLE0, CROSSDIFF, TIMESTEPS_ALL -;*******END OF COMMON BLOCKS******************************* - -; WARNING: CROSSDIFF WAS COMPUTED FROM LAT, LON, NOT FROM X, Y - - DIFFX = 0 - DIFFY = 0 - TMP1=FLTARR(3) - TMP2=FLTARR(3) - FOR IE2 = 0, kount-1 DO BEGIN - IE = TRIANGLES(IE2) - I1 = TRIGP(IE+1,1)-1 - I2 = TRIGP(IE+1,2)-1 - I3 = TRIGP(IE+1,3)-1 - - TMP1(*) = CROSSDIFF(0:2, IE) - TMP2(*) = CROSSDIFF(3:5, IE) - - DIFFXTMP = Z(I1)*TMP1(0)+Z(I2)*TMP1(1)+Z(I3)*TMP1(2) - DIFFYTMP = Z(I1)*TMP2(0)+Z(I2)*TMP2(1)+Z(I3)*TMP2(2) -; calculate global gradients via all the connection contributions. - DIFFX = DIFFX + DIFFXTMP * ANGLE0(IE,WHICHNODE(IE2)) - DIFFY = DIFFY + DIFFYTMP * ANGLE0(IE,WHICHNODE(IE2)) - ENDFOR - - RETURN - END -;---------------------------------------------------------- -PRO MESH_OPTIMIZE,IP -; Moves nodes to optimize time steps -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON WGene,Wgrideditor,WG,root -COMMON TIMESTEPSUG2, CCON, IEN, SI, AREA, WCG, CELLVERTEX, IE_CELL, POS_CELL, C, K -COMMON TIMESTEPSUG3, SIRATIO, JCELLS, LEN, ANGLE0, CROSSDIFF, TIMESTEPS_ALL -;*******END OF COMMON BLOCKS******************************* -; - indtri=WHERE(TRIGP EQ IP,kountP) - - ALLNODESP=LONARR(kountP*3) - TRIANGLESP=LONARR(kountP) - FOR ITRI=0,kountP-1 DO BEGIN - ARRAY_IND2,TRIGP, indtri(ITRI),ind1 - ; PRINT,'OPT:',IP,' IN', ind1(0),ind1(1),TRANSPOSE(TRIGP(ind1(0),*)) - ALLNODESP(ITRI*3:ITRI*3+2) = TRANSPOSE(TRIGP(ind1(0),1:3))-1 - TRIANGLESP(ITRI)=ind1(0)-1 - ENDFOR - NODESP =ALLNODESP(UNIQ(ALLNODESP, SORT(ALLNODESP))) - NN=N_ELEMENTS(NODESP) - IND=0 -; -; Finds candidate node IPS for shifting around -; - AREAP=SIRATIO(NODESP) - NOZ=WHERE(AREAP GT 0,kkk) - IF (KKK GT 0) THEN BEGIN - RATIO=SI(NODESP(NOZ))/AREAP(NOZ) - MAXR=MAX(RATIO(NOZ),IND) - IPS=NODESP(NOZ(IND))+1 -; -; Tries to shift IPS around -; - IF (MAXR GT 2) THEN BEGIN - indtri=WHERE(TRIGP EQ IPS,kount) - ALLNODES=LONARR(kount*3) - TRIANGLES=LONARR(kount) - WHICHNODE=LONARR(kount) - FOR ITRI=0,kount-1 DO BEGIN - ARRAY_IND2,TRIGP, indtri(ITRI),ind1 - ; PRINT,'IPS:',IPS,' IN', ind1(0),ind1(1),TRANSPOSE(TRIGP(ind1(0),*)) - ALLNODES(ITRI*3:ITRI*3+2) = TRANSPOSE(TRIGP(ind1(0),1:3))-1 - TRIANGLES(ITRI)=ind1(0)-1 - WHICHNODE(ITRI)=ind1(1)-1 - ENDFOR - NODES1 =ALLNODES(UNIQ(ALLNODES, SORT(ALLNODES))) - INDSORT=SORT(TIMESTEPS_ALL(NODES1)) - NODES=NODES1(INDSORT) -; -; Computes bottom slopes -; - UG_GRADIENTS,GRIDMAT(7,*),TRIANGLES,kount,WHICHNODE,DIFFX,DIFFY - ;PRINT,'GRADIENT:',DIFFX,DIFFY - DIST1=SQRT(SI(IPS-1)) - NG=0.05/SQRT(DIFFX^2+DIFFY^2) - NSHIFT=21 - XSHIFT=(FINDGEN(NSHIFT)-NSHIFT/2)*DIST1*NG - YSHIFT=GRIDMAT(1,IPS-1)+XSHIFT*DIFFX - XSHIFT=GRIDMAT(0,IPS-1)-XSHIFT*DIFFY - X=gridmat(0,NODES) - Y=gridmat(1,NODES) - Triangulate, X, Y, tris, hull - GOODSHIFT=INTARR(NSHIFT) - INPOLY=0 -; checks if shifted position is in shrinked convex hull. - XH=(X(HULL)-GRIDMAT(0,IPS-1))*0.2+GRIDMAT(0,IPS-1) - YH=(Y(HULL)-GRIDMAT(1,IPS-1))*0.2+GRIDMAT(1,IPS-1) - OPLOT,[XH ,XH(0)],[YH, YH(0)],COLOR=0 - FOR IS=0,NSHIFT-1 DO BEGIN - PNPOLY,XSHIFT(IS),YSHIFT(IS),XH,YH,N_ELEMENTS(HULL),TEST - GOODSHIFT(IS)=TEST - ENDFOR - ; Next line is in response to bug ... ? - ; IF (GOODSHIFT(NSHIFT/2) LT 1) THEN GOODSHIFT = -1*GOODSHIFT - INDOK=WHERE(GOODSHIFT EQ 1,kk) - IF (KK GT 1) THEN BEGIN - XSHIFT=XSHIFT(INDOK) - YSHIFT=YSHIFT(INDOK) - OPLOT,XSHIFT,YSHIFT, $ - psym=4,SYMSIZE=1.5,COLOR=0 - PRINT,'Trying to move node ',IPS,' to increase timestep at ',IP - UPDATE_TIMESTEPSIP,IP-1,TRIANGLESP,kountp,IPS-1,TRIANGLES,kount, NODES, XSHIFT,YSHIFT,TSHIFT - ENDIF - ENDIF; end of test on MAXR GT 2 - ENDIF - RETURN - END - -;---------------------------------------------------------- -PRO UPDATE_TIMESTEPSIP,IP0,TRIANGLESP,kountp,IPS,TRIANGLES,kount, NODES, XSHIFT,YSHIFT,TSHIFT -; Recomputes timesteps for node IP at shifted positions -; -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,TRIGP,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON TIMESTEPSUG,TIMESTEPS,NTIMESTEPS,FLAGTSTEP, TIMESTEPS_ORDER -COMMON TIMESTEPSUG2, CCON, IEN, SI, AREA, WCG, CELLVERTEX, IE_CELL, POS_CELL, C, K -COMMON TIMESTEPSUG3, SIRATIO, JCELLS, LEN, ANGLE0, CROSSDIFF, TIMESTEPS_ALL -COMMON GRIDTIMESTEPS, zoffset, updateonmove, waveperiod -;*******END OF COMMON BLOCKS******************************* -; - ONETHIRD=1/3. - ONESIXTH=1/6. - THR=1.E-20 - SIGMA = 8.d0*ATAN(1.d0)/WAVEPERIOD - NTH=24 - THETA=FINDGEN(NTH)*2*!pi/NTH - COSTH=COS(THETA) - SINTH=SIN(THETA) - LATTOM = 1000. ; !dtor * 6378137.0d0 - NN = N_ELEMENTS(NODES) - - gridmemo=gridmat(*,IPS) - NSHIFT=N_ELEMENTS(XSHIFT) - TMIN=TIMESTEPS(0) - NN=N_ELEMENTS(NODES) - -; -; Finds all relevant triangles for SI update -; - ALLTRI=[0] - FOR IND=0,N_ELEMENTS(NODES)-1 DO BEGIN - SI(NODES(IND))=0 - indtri=WHERE(TRIGP EQ NODES(IND)+1,countloc) - FOR ITRI=0,countloc-1 DO BEGIN - ARRAY_IND2,TRIGP, indtri(ITRI),ind1 - ALLTRI=[ALLTRI, ind1(0)-1] - ENDFOR - ENDFOR - UNITRI=ALLTRI(UNIQ(ALLTRI, SORT(ALLTRI))) - - TSTEPS=FLTARR(NN,NSHIFT+1) - FOR ISHIFT = 0, NSHIFT-1 DO BEGIN - gridmat(0,IPS)=XSHIFT(ISHIFT) - gridmat(1,IPS)=YSHIFT(ISHIFT) - -; -; Updates SI array -; - SI(NODES)=0 - FOR IND=1,N_ELEMENTS(UNITRI)-1 DO BEGIN - IE = UNITRI(IND) - I1 = TRIGP(IE+1,1)-1 - I2 = TRIGP(IE+1,2)-1 - I3 = TRIGP(IE+1,3)-1 - DXP1 = gridmat(0,I2) - gridmat(0,I1) - DYP1 = gridmat(1,I2) - gridmat(1,I1) - DXP2 = gridmat(0,I3) - gridmat(0,I2) - DYP2 = gridmat(1,I3) - gridmat(1,I2) - DXP3 = gridmat(0,I1) - gridmat(0,I3) - DYP3 = gridmat(1,I1) - gridmat(1,I3) - IEN(0,IE) = - DYP2 - IEN(1,IE) = DXP2 - IEN(2,IE) = - DYP3 - IEN(3,IE) = DXP3 - IEN(4,IE) = - DYP1 - IEN(5,IE) = DXP1 - AREA(IE) = (DXP3*DYP1 - DYP3*DXP1)*0.5 - INDNODE=WHERE(NODES EQ I1,knode) - IF (knode GT 0) THEN SI(NODES(INDNODE)) = SI(NODES(INDNODE)) + AREA(IE)*ONETHIRD - INDNODE=WHERE(NODES EQ I2,knode) - IF (knode GT 0) THEN SI(NODES(INDNODE)) = SI(NODES(INDNODE)) + AREA(IE)*ONETHIRD - INDNODE=WHERE(NODES EQ I3,knode) - IF (knode GT 0) THEN SI(NODES(INDNODE)) = SI(NODES(INDNODE)) + AREA(IE)*ONETHIRD - IF (AREA(IE) LT SIRATIO(I1)) THEN SIRATIO(I1) = AREA(IE) - IF (AREA(IE) LT SIRATIO(I2)) THEN SIRATIO(I2) = AREA(IE) - IF (AREA(IE) LT SIRATIO(I3)) THEN SIRATIO(I3) = AREA(IE) - ENDFOR - - DEPTHS2= gridmat(7,IP0) + ZOFFSET ; Should probably update depths when moving nodes - - DISPERSION,SIGMA,DEPTHS2,WCG2 - WCG(IP0)=WCG2 - -; No update of connectivity - - LAMBDA = FLTARR(2) -; -; Loops on directions -; - DTMAX_EXP = FLTARR(NN)+1./THR - FOR ID = 0, NTH-1 DO BEGIN - -; -; Updates speed at node IP0 -; - FOR IP = 0, NNGP-1 DO BEGIN - COSFAC = 1. ;COS((FLOAT(gridmat(2,IP))+gridmat(3,IP)/60.)*!dtor) - C(0,IP) = WCG(IP)*COSTH(ID)/(LATTOM*COSFAC) - C(1,IP) = WCG(IP)*SINTH(ID)/LATTOM - ENDFOR - - - FOR IND=1,N_ELEMENTS(UNITRI)-1 DO BEGIN - IE = UNITRI(IND) - I1 = TRIGP(IE+1,1)-1 - I2 = TRIGP(IE+1,2)-1 - I3 = TRIGP(IE+1,3)-1 - LAMBDA(0) = ONESIXTH * (C(0,I1)+C(0,I2)+C(0,I3)) - LAMBDA(1) = ONESIXTH * (C(1,I1)+C(1,I2)+C(1,I3)) - K(0,IE) = LAMBDA(0) * IEN(0,IE) + LAMBDA(1) * IEN(1,IE) - K(1,IE) = LAMBDA(0) * IEN(2,IE) + LAMBDA(1) * IEN(3,IE) - K(2,IE) = LAMBDA(0) * IEN(4,IE) + LAMBDA(1) * IEN(5,IE) -;IF (ID EQ 0) THEN PRINT,'K CHANGE:',ID,ISHIFT,IE2,IE,K(*,IE) - ENDFOR - - FOR II=0,NN-1 DO BEGIN - IP = NODES(II) ; computes time step for fixed node ... - J=JCELLS(IP)-1 - KSUM = 0.0 - FOR I = 0, CCON(IP)-1 DO BEGIN - J = J + 1 - IE = IE_CELL(J) - POS = POS_CELL(J) - KSUM = KSUM + MAX([K(POS,IE),0.0]) -;IF (ID EQ 0) THEN PRINT,'K EFF CHANGE:',ID,ISHIFT,I,IE,K(POS,IE),KSUM - ENDFOR - DTMAX_EXP_LOCAL = SI(IP)/MAX([DOUBLE(10.E-10),KSUM]) - DTMAX_EXP(II) = MIN([DTMAX_EXP_LOCAL,DTMAX_EXP(II)]) - ENDFOR - ENDFOR - TSTEPS(*,ISHIFT)=DTMAX_EXP(*) - ENDFOR - ISHIFT = NSHIFT/2 - TMAX=TIMESTEPS_ALL(IP0) - FOR I=0,NSHIFT-1 DO BEGIN - IF TSTEPS(0,I) GT TMAX AND MIN(TSTEPS(1:NN-1,I)) > TSTEPS(0,I) THEN BEGIN - ISHIFT = I - TMAX = TSTEPS(0,I) - ENDIF - ENDFOR - ; PRINT,'OPTI DT:',IPS+1,IP0+1,NODES(0)+1,TIMESTEPS_ALL(IP0),TSTEPS(0,ISHIFT) - TIMESTEPS_ALL(NODES)=TSTEPS(*,ISHIFT) - gridmat(0,IPS)= XSHIFT(ISHIFT) - gridmat(1,IPS)= YSHIFT(ISHIFT) - XYtoLATLON,gridmat(0,IPS),gridmat(1,IPS),latdeg,latmin,londeg,lonmin - gridmat(2,IPS)=latdeg - gridmat(3,IPS)=latmin - gridmat(4,IPS)=londeg - gridmat(5,IPS)=lonmin - - OPLOT,[gridmat(0,IPS)],[gridmat(1,IPS)], $ - psym=5,SYMSIZE=3,COLOR=255 - - ORDER=SORT(TIMESTEPS_ALL ) -; PRINT,'Nodes giving smallest time steps:',ORDER(0:50)+1 -; PRINT,'Values of these time steps (s) :',TIMESTEPS_ALL(ORDER(0:50)) - TIMESTEPS=FLTARR(4,NTIMESTEPS) - FOR I=0,NTIMESTEPS-1 DO BEGIN - IND1=ORDER(I) - TIMESTEPS(0,I)=IND1 - TIMESTEPS(1,I)=TIMESTEPS_ALL(IND1) - TIMESTEPS(2,I)=gridmat(0,IND1) - TIMESTEPS(3,I)=gridmat(1,IND1) - ENDFOR - FLAGTSTEP=1 - TIMESTEPS_ORDER=ORDER - - RETURN -END - -;---------------------------------------------------------- -PRO UPDATE_TIMESTEPS2,IP0 -; Recomputes timesteps: uses x-y coordinates -; -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,TRIGP,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON TIMESTEPSUG,TIMESTEPS,NTIMESTEPS,FLAGTSTEP, TIMESTEPS_ORDER -COMMON TIMESTEPSUG2, CCON, IEN, SI, AREA, WCG, CELLVERTEX, IE_CELL, POS_CELL, C, K -COMMON TIMESTEPSUG3, SIRATIO, JCELLS, LEN, ANGLE0, CROSSDIFF, TIMESTEPS_ALL -COMMON GRIDTIMESTEPS, zoffset, updateonmove, waveperiod -;*******END OF COMMON BLOCKS******************************* -; - indtri=WHERE(TRIGP EQ IP0+1,kount) - ALLNODES=LONARR(kount*3) - TRIANGLES=LONARR(kount) - FOR ITRI=0,kount-1 DO BEGIN - ARRAY_IND2,TRIGP, indtri(ITRI),ind1 - ; PRINT,'C_GP:',IP0+1,' IN', ind1(0),ind1(1),TRANSPOSE(TRIGP(ind1(0),*)) - ALLNODES(ITRI*3:ITRI*3+2) = TRANSPOSE(TRIGP(ind1(0),1:3))-1 - TRIANGLES(ITRI)=ind1(0)-1 - ENDFOR - NODES =ALLNODES(UNIQ(ALLNODES, SORT(ALLNODES))) - - ONETHIRD=1/3. - ONESIXTH=1/6. - THR=1.E-20 - NTRI2=kount - NNGP2=N_ELEMENTS(NODES) - SIGMA = 8.d0*ATAN(1.d0)/WAVEPERIOD - -; -; Finds all relevant triangles -; - ALLTRI=[0] - FOR IND=0,NNGP2-1 DO BEGIN - SI(NODES(IND))=0 - indtri=WHERE(TRIGP EQ NODES(IND)+1,kount) - FOR ITRI=0,kount-1 DO BEGIN - ARRAY_IND2,TRIGP, indtri(ITRI),ind1 - ALLTRI=[ALLTRI, ind1(0)-1] - ENDFOR - ENDFOR - UNITRI=ALLTRI(UNIQ(ALLTRI, SORT(ALLTRI))) -; -; Updates SI array -; - FOR IND=1,N_ELEMENTS(UNITRI)-1 DO BEGIN - IE = UNITRI(IND) - I1 = TRIGP(IE+1,1)-1 - I2 = TRIGP(IE+1,2)-1 - I3 = TRIGP(IE+1,3)-1 - DXP1 = gridmat(0,I2) - gridmat(0,I1) - DYP1 = gridmat(1,I2) - gridmat(1,I1) - DXP2 = gridmat(0,I3) - gridmat(0,I2) - DYP2 = gridmat(1,I3) - gridmat(1,I2) - DXP3 = gridmat(0,I1) - gridmat(0,I3) - DYP3 = gridmat(1,I1) - gridmat(1,I3) - IEN(0,IE) = - DYP2 - IEN(1,IE) = DXP2 - IEN(2,IE) = - DYP3 - IEN(3,IE) = DXP3 - IEN(4,IE) = - DYP1 - IEN(5,IE) = DXP1 - AREA(IE) = (DXP3*DYP1 - DYP3*DXP1)*0.5 - INDNODE=WHERE(NODES EQ I1,knode) - IF (knode GT 0) THEN SI(NODES(INDNODE)) = SI(NODES(INDNODE)) + AREA(IE)*ONETHIRD - INDNODE=WHERE(NODES EQ I2,knode) - IF (knode GT 0) THEN SI(NODES(INDNODE)) = SI(NODES(INDNODE)) + AREA(IE)*ONETHIRD - INDNODE=WHERE(NODES EQ I3,knode) - IF (knode GT 0) THEN SI(NODES(INDNODE)) = SI(NODES(INDNODE)) + AREA(IE)*ONETHIRD - IF (AREA(IE) LT SIRATIO(I1)) THEN SIRATIO(I1) = AREA(IE) - IF (AREA(IE) LT SIRATIO(I2)) THEN SIRATIO(I2) = AREA(IE) - IF (AREA(IE) LT SIRATIO(I3)) THEN SIRATIO(I3) = AREA(IE) - ENDFOR - - - DEPTHS2= gridmat(7,NODES) + ZOFFSET ; Should probably update depths when moving nodes - - DISPERSION,SIGMA,DEPTHS2,WCG2 - WCG(NODES)=WCG2 - -; No update of connectivity - - DTMAX_EXP = TIMESTEPS_ALL - DTMAX_EXP(NODES) = 1./THR - - NTH=24 - THETA=FINDGEN(NTH)*2*!pi/NTH - COSTH=COS(THETA) - SINTH=SIN(THETA) - - LATTOM = 1000. ; !dtor * 6378137.0d0 - LAMBDA = FLTARR(2) -; -; Loops on directions -; -; GET_LUN,unit -; OPENW,unit,'fort_upd.996' - FOR ID = 0, NTH-1 DO BEGIN - -; -; Updates speed at nodes IP0 : maybe other change later when depth is updated ... -; FOR NOW WCG is not changed -; - COSFAC = 1. ; COS((FLOAT(gridmat(2,IP0))+gridmat(3,IP0)/60.)*!dtor ) - - FOR IP = 0, NNGP-1 DO BEGIN - COSFAC = 1. ;COS((FLOAT(gridmat(2,IP))+gridmat(3,IP)/60.)*!dtor) - C(0,IP) = WCG(IP)*COSTH(ID)/(LATTOM*COSFAC) - C(1,IP) = WCG(IP)*SINTH(ID)/LATTOM - ENDFOR - - FOR IND = 1,N_ELEMENTS(UNITRI)-1 DO BEGIN - IE = UNITRI(IND) - I1 = TRIGP(IE+1,1)-1 - I2 = TRIGP(IE+1,2)-1 - I3 = TRIGP(IE+1,3)-1 - LAMBDA(0) = ONESIXTH * (C(0,I1)+C(0,I2)+C(0,I3)) - LAMBDA(1) = ONESIXTH * (C(1,I1)+C(1,I2)+C(1,I3)) - K(0,IE) = LAMBDA(0) * IEN(0,IE) + LAMBDA(1) * IEN(1,IE) - K(1,IE) = LAMBDA(0) * IEN(2,IE) + LAMBDA(1) * IEN(3,IE) - K(2,IE) = LAMBDA(0) * IEN(4,IE) + LAMBDA(1) * IEN(5,IE) -;IF (I1 EQ 70 OR I2 EQ 70 OR I3 EQ 70) THEN PRINTF,unit,FORMAT='(5I8,6F9.5,7F16.8)', $ -; ID+1,I1+1,I2+1,I3+1,IE+1,IEN(0:5,IE),LAMBDA(*),K(*,IE),COSTH(ID),SINTH(ID) -;IF (I1 EQ 70 OR I2 EQ 70 OR I3 EQ 70) THEN PRINTF,unit,FORMAT='(8I6,8F16.8)', $ -; ID+1,I1+1,I2+1,I3+1,IE+1,I1,I2,I3,LAMBDA(*),K(*,IE),C(0,I1),C(0,I2),C(0,I3) - ENDFOR - - FOR IP2 = 0, NNGP2-1 DO BEGIN - IP = NODES(IP2) - J=JCELLS(IP)-1 - KSUM = 0.0 - FOR I = 0, CCON(IP)-1 DO BEGIN - J = J + 1 - IE = IE_CELL(J) - POS = POS_CELL(J) - KSUM = KSUM + MAX([K(POS,IE),0.0]) - I1 = TRIGP(IE+1,1) - I2 = TRIGP(IE+1,2) - I3 = TRIGP(IE+1,3) -; IF (IP EQ 70) THEN printf,unit,FORMAT='(9I6,6F14.9)',ID+1,IP+1,I+1,J+1,IE+1,POS+1,I1,I2,I3,K(POS,IE),KSUM - ;IF ( ABS(K(POS,IE)) > KMAX ) KMAX = ABS(K(POS,IE)) - ENDFOR - DTMAX_EXP_LOCAL = SI(IP)/MAX([DOUBLE(10.E-10),KSUM]) - ; IF (IP.EQ.392) WRITE(997,'(2I8,5F16.9)') ID,IP,SI(IP),WCG(IP),MYXYZ(3,IP),KSUM,DTMAX_EXP(IP) - - DTMAX_EXP(IP) = MIN([DTMAX_EXP_LOCAL,DTMAX_EXP(IP)]) -; IF (IP EQ 70) THEN printf,unit,FORMAT='(2I8,6F16.9)', ID+1,IP+1,SI(IP),WCG(IP),GRIDMAT(7,IP),KSUM,DTMAX_EXP_LOCAL,DTMAX_EXP(IP) - ENDFOR - ENDFOR -; close,unit -; free_lun,unit - PRINT,'Updated time steps for nodes :',NODES+1 - PRINT,'Old time steps (s) :',TIMESTEPS_ALL(NODES) - TIMESTEPS_ALL(NODES)=DTMAX_EXP(NODES) - ORDER=SORT(DTMAX_EXP) - PRINT,'New time steps (s) :',DTMAX_EXP(NODES) - TIMESTEPS=FLTARR(4,NTIMESTEPS) - FOR I=0,NTIMESTEPS-1 DO BEGIN - IND1=ORDER(I) - TIMESTEPS(0,I)=IND1 - TIMESTEPS(1,I)=DTMAX_EXP(IND1) - TIMESTEPS(2,I)=gridmat(0,IND1) - TIMESTEPS(3,I)=gridmat(1,IND1) - ;; PRINT,IND1+1, DTMAX_EXP(IND1), gridmat(4,IND1)+gridmat(5,IND1)/60.,gridmat(2,IND1)+gridmat(3,IND1)/60.,DEPTHS(IND1) - ENDFOR - FLAGTSTEP=1 - TIMESTEPS_ORDER=ORDER - RETURN -END - -;---------------------------------------------------------------------------- -PRO ARRAY_IND2, ARRAY, indices, IND2 - ni = N_ELEMENTS(indices) - - IND2 = LONARR(2, ni, /NOZERO) - TAILLE = SIZE(ARRAY, /DIMENSIONS) - IND2(0, *) = indices(*) mod TAILLE[0] - IND2(1, *) = indices(*)/TAILLE[0] - -END - -;---------------------------------------------------------------------------- -PRO MAKE_CONTOUR -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline - conti=FLTARR(nngp) - conti(*)=gridmat(6,*) - IND=WHERE(conti NE 0,kount) - IF (kount EQ 0) THEN BEGIN - contourline=LONARR(2,2) - ENDIF ELSE BEGIN - contourline=LONARR(kount+2,2)-1 - contourline(0,0)=IND(0) - contourline(1,0)=IND(kount-1)+2 - contourline(2:2+kount-1,0)=IND - contourline(2:2+kount-1,1)=conti(IND) - ENDELSE - RETURN -END diff --git a/model/aux/idl_twist/initmain.pro b/model/aux/idl_twist/initmain.pro deleted file mode 100755 index a73681e70..000000000 --- a/model/aux/idl_twist/initmain.pro +++ /dev/null @@ -1,501 +0,0 @@ -;/ -;/ +-----------------------------------+ -;/ | TWIST Ifremer-SHOM | -;/ | F. Ardhuin | -;/ | IDL command language | -;/ | Last update : 27-Oct-2013 | -;/ +-----------------------------------+ -;/ -;/ Licence information: This code is distributed under the CeCILL license -;/ generally compatible with the Gnu Public Licence (GPL) -;/ http://www.cecill.info/index.en.html -;/ -;/ 17-Oct-2013 : Clean up ( version 2.00 ) -;/ 27-Oct-2013 : Debugged interface version ( version 2.00 ) -;---------------------------------------------------------------------------- -; This subroutine defines user-dependent settings (default paths ...) -;---------------------------------------------------------------------------- -Pro Initmain -;+ -; NAME: -; Initmain -; PURPOSE: -; Initializes variables and flags (display, data ...) -; CALLING SEQUENCE: -; initmain -; INPUTS:none -; COMMON BLOCKS: -; CONTOURPARAM,CURRENT,DRAWING,DRAWSIZE,FLAGS,FONTS,TITLES,POSTSCRIPT -; THREED,ZOOM -; FREQ,DIR,TIME,SPACE, -; FILES,GRID,GRIDpar,RAY3,RAY3flags,RAYS -; MODIFICATION HISTORY: -; under construction (1/1/1999 - 6/1/2001) -;- - -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON AXISFRAME,axis_orient,frametype,outx1lab,outx2lab,outy1lab,outy2lab -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON LANGUAGE, ilang,dictionnaire -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON THREED, Ax3D,Az3D,smoothing -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON INTERFACE, TWISTVA_VERSION - - -;** 2 ** Display and data variables/parameters -common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr - -COMMON FREQ, freq,nfband,findex,findex2 -COMMON DIR, nabin,nabint,aindex,THETA -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y,c_lon,c_lat -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize - -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -COMMON OVERLAY, addir,adsyms,adbathy,adcoast,psyms,psymsizes,adtr,adtri -COMMON OVERLAY2,adbathydot,adcontour -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -COMMON TIMESTEPSUG,TIMESTEPS,NTIMESTEPS,FLAGTSTEP, TIMESTEPS_ORDER - -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON DIR_STACK, DEPTH, STACK -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON GRIDTIMESTEPS, zoffset, updateonmove, waveperiod -COMMON Builder,ngp,H0,H1,Hi,KH0,KH1,DX0,DX1,T0,ROA,ROI,gridbuild_click -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON GRIDTIMESTEPS, zoffset, updateonmove, waveperiod -COMMON TIMESERIES, modspec,obs,obs2,om,ts_filetype, nbins, bulktype,scatvar -COMMON RAYS, raysOK,raystype,raynsteps,rayx,rayy,raya,rayamin,rayamax, $ - rayres,rayfreq,rayGP,raytimestep,rayoffdep,rayflag,raydz,raymindepth - -;*******END OF COMMON BLOCKS******************************* - -;***** Screen drawing dimensions ***************** - IF !D.NAME EQ 'WIN' THEN BEGIN ;adjusts the size of the draw window to PC/UNIX -; For MS Windows - xsize=800 ;x pixel size of drawing window - ysize=800 ;y pixel size of drawing window - ENDIF ELSE BEGIN -; For UNIX - xsize=600 ;x pixel size of drawing window - ysize=700 ;y pixel size of drawing window - ENDELSE - Wsimple=0 ;complexity of graphics interface - mwinx=xsize ;maximum length of draw window - mwiny=ysize ;maximum height of draw window - winx=xsize ;width of plot window - winy=ysize ;height of plot window - cbar=1 ;color bar flag: 1 adds color bar/ 0 no color bar (for 2D-3D color plots) - axis_orient=0 - bly = 0.1+float(cbar)/10. ; normalized bottom left y coordinate for draw region - blx = 0.15 ; normalized bottom left y coordinate for draw region - trx = 0.95 ; normalized top right x coordinate for draw region - ; not equal to one in order to leave space for the numbers on the - ;axes - try = 0.95 ; normalized top right y coordinate for draw region - textx=0.2 - texty=0.1 - textdx=0.16 - textdy=0.03 - - c_x=!values.F_NAN - cbblx=1. ;position of the color bar in the bottom margin (see procedure colorbar) - cbtrx=1. - cbbly=0.45 - cbtry=0.6 - - cbnticks=5 - cbexrange=1 - - ; Mapping parameters - - MAPFLAG=0 - MAPPROJ=0 - MAPLONGCENTER=-150 - MAPLATCENTER=0 - MAPLONLAT=1 - MAPCONTINENT=2 - MAPCOUNTRIES=0 - c_lon=1/0. - c_lat=1/0. - -; FILE TYPES: -; 2: 'Bathy log file' log file for the bathymetry -; 3: 'Binary bathy' binary bathymetry file -; 4: 'GSHHS coastline' binary shoreline file -; 5: ' ', -; 6: '*.line coastline' ASCII polyline -; 7: 'GMESH triangle-based grid', $ GMESH grid (as used in WAVEWATCH III) -; 8: 'Transect', $ -; 9: ' ', $ -;10: 'Observed time series', $ -;11: 'Modelled time series', $ -;12: 'Additional modelled TS', $ -;13: ' ', $ -;14: 'All modelled TS for new point', $ -;15: ' ', $ -;16: 'Additional bulk time series', $ -;17: 'WW3 NetCDF map', $ -;18: 'GSHHS coast', $ -;19: 'Data flags', $ -;20: 'WW3 map', $ -;21: 'WW3 map diff', $ -;22: 'Color palette' -; DEFAULT ACCESS PATHS FOR THESE FILES: - -; Paths under windows - - IF !VERSION.OS_FAMILY EQ 'Windows' THEN BEGIN - set_plot,'WIN' - device, decomposed=0 - raypath='D:\fabrice\IDL\' - paths=['D:\Fabrice\Runs\','C:\Fabrice\bathy\', $ - 'D:\DATA\bathy\','D:\DATA\bathy\', $ - 'D:\Fabrice\bathy\GLOBAL_COAST\','C:\fabrice\runs\', $ - 'C:\Fabrice\runs\', $ - 'C:\Fabrice\runs\','C:\Fabrice\runs\', $ - 'C:\Fabrice\DATA\', $ - 'C:\Fabrice\runs\', $ - 'C:\Fabrice\runs\', $ - 'C:\Fabrice\DATA\', $ - 'C:\Fabrice\DATA\SHOWEX\', $ - 'C:\Fabrice\DATA\DUCK94\8MARR94\', $ - 'C:\Fabrice\runs\','C:\Fabrice\SHOWEX\ANALYSIS\', $ - 'I:\runs\','D:\DATA\Bathy\GLOBAL_COAST\', $ - 'C:\Fabrice\DATA\','C:\Fabrice\DATA\','C:\Fabrice\DATA\',''] - pspath='C:\Fabrice\PAPERS\' - ENDIF ELSE BEGIN -; -; For UNIX -; - set_plot,'X' ,/COPY - device, pseudo_color=8 - device, decomposed=0, RETAIN=2 - raypath='.' - paths=['/export/home/ardhuin/RUNS/','/export/home/ardhuin/TOOLS/POLYMESH/TESTCASES/', $ - '/export/home/ardhuin/DATA/BATHY/','/export/home/ardhuin/DATA/BATHY/', $ - '/export/home/ardhuin/DATA/BATHY/GLOBAL_COAST/', '/export/home/ardhuin/', $ - '/export/home/ardhuin/DATA/BATHY/GLOBAL_COAST/','/export/home/ardhuin/', $ - '/export/home/ardhuin/','/export/home/ardhuin/', $ - '/export/home/ardhuin/', '/export/home/ardhuin/', $ - '/export/home/ardhuin/DATA/', '/export/home/ardhuin/DATA/', $ - '/export/home/ardhuin/', $ - '/data/span11/ardhuin/PAPERSC/','/export/home/ardhuin/TEMP/', $ - '/export/home/ardhuin/TEMP/','/export/home/ardhuin/DATA/BATHY/GLOBAL_COAST/', $ - '/export/home/ardhuin/DATA/','/export/home/ardhuin/RUNSAB/TESTWW3/', $ - '/export/home/ardhuin/RUNSAB/TESTWW3/','/export/home/ardhuin/TOOLS/IDL/palettes'] - pspath='~' - ENDELSE - !P.FONT=0 - LOADCT, 13 - - -; DEFAULT FILTERS FOR THESE FILES: - - filters=[ '*.inp','xyz.dat','*.log','*.grd','gshhs*.b' , $ - '*.line','*.*msh','*.grgp','*.tr', '*.*' , $ - '*.*','*.*','*.*','*.*','*.*' , $ - '8MARR*','*bulk*','*.nc','gshhs*.b','*.dat', $ - '*.*','*.*','*.ct'] - -; DEFAULT NAMES FOR THESE FILES: - filenames=['crest.inp','','duck1.log','w_duck1.grd','duck.coast', $ - 'duck30.grgp','depthstat.dat','trinet8zone.tri','','', $ - '','','','','','','','','','flags.dat', '', '',''] - -;This defines the user symbol, used when PSYM=8 -A = FINDGEN(17) * (!PI*2/16.) ;Make a vector of 16 points, A[i] = 2pi/16. -USERSYM, COS(A), SIN(A), /FILL ;Define the symbol to be a filled circle - -;General display variables - - outtit=1 ;1: diplays title / 0: hides title - outxtit=1 ;1: diplays xtitle / 0: hides xtitle - outytit=1 ;1: diplays ytitle / 0: hides ytitle - outcbtit=1 ;1: diplays color bar title / 0: hides title - - frametype=2 - outx1lab=1 - outx2lab=1 - outy1lab=1 - outy2lab=1 - - plottype=0 - plotncvar=0 - normvec=1 - filltype=0 ;current scheme for 2d plots (contour,bitmap..) - maxval=1.E6 ;maximum value for contouring - IF !D.NAME EQ 'WIN' THEN $ - Navailcolor=256 ELSE $ - Navailcolor=!D.N_colors;-1 ;number of colors in color table - IF Navailcolor GT 256 THEN BEGIN - Navailcolor=256 - ENDIF - - numlevels=11 ;default number of levels for contours - c_repart=0 ;current repartition of the contour levels (linear,log ...) - fixrange=0 ;0:the range of contours is fitted to data, 1:fixed to current values - filloutofrange=1 ; - - subwin=[0,0,0,0,0,0,0] ;status of subwindows (0:closed, 1: open): - ; [mesh editor,raytracer,parameters,palette,transects,specials] - - Ax3D=35. ;rotation angle around x-axis for 3D views - Az3D=45. ;rotation angle around z-axis for 3D views - smoothing=1 ;size of the square boxcar filter applied to 3D-displayed matrix - nbins=51 ;number of bins for QQ and binned plots - - -;Display options for overlays - addir=0 ;adds wave direction to plot if = 1 - adsyms=0 ;adds symbols for the grid points if = 1 - adbathy=0 ;overlays bathymetry contours if = 1 - adcoast=1 ;adds coast to 2D plots if =1 - adtri=0 - adbathydot=0 - adcontour=0 - - psyms=[8] ;symbol for grid points (5: triangles, 8: user defined) - psymsizes=[0.25] ;size of these symbols - - nstep=1 ;number of raytimesteps in the ABCDEFGHI an 8MARR files - dtime=180 ;raytimestep between two files in minutes - - c_gp=1 ;current grid point (used for "local" plots: f spectrum...) - c_spec=0 - c_cut=0 ;current "cut": 2D plane, local ... - datatype=0 -FLAGTSTEP=0 - - - ;***** postscript settings, units are cm ***************** - papierx=21.5;21.0 ; x-size of the paper - papiery=27.8 ;29.7 ; y-size of the paper - pwinx=19.5 ;19.0 ; width of paper in cm (printable area) - pwiny=25.8 ;27.7 ; height of draw paper in cm (printable area) - facpolice= 1. ; scaling factor for text on postscript - fontrescale=1 - basefontsize=10 - psfont=0 - xoffset=1.0 ; offset from the paper edge - yoffset=2.0 ; offset from the paper edge - psor=0 ; print orientation eq 0 for portrait, 1 for landscape - eqscale=1 ; 1 if x and y scales are equal - output=0 ; 0: screen / 1: postscript file - pstype=0 ; type of postcript file, 0: normal / 1: encapsulated - prcoul=1 ; black and white (0) / color (1) - - -; variables for Bathy grid and coastline - rlonmin=0.D ;minimum longitude (negative if W) - rlonmax=0.D ;maximum longitude (neg. if W) - rlatmin=0.D ;min. latitude (neg. if S) - rlatmax=0.D ;max. latitude - sx=0.D ;grid resolution in meters in the x direction (W-E) - sy=0.D ;grid resolution in meters in the y direction (S-N) - nx=0 ;number of grid points (bathymetry) in x - ny=0 ;number of grid points (bathymetry) in y - - - - -; defines default parameters for grid - zoffset=4 ; - WAVEPERIOD = 26.809651 - updateonmove=1 ; - nzone=5 - c_zone=5 - zcolor=INTARR(nzone+1)-1 - - - - nfband=2 ;number of frequencies - nabin=2 ;number of directions - timezone_plot=-0 ;-5;time zone of the plot output - timezone_string='UTC' ;'EST' ;corresponding abbreviation - ntime=2 ;number of raytimesteps for which data is available, - ;maximum range of the time "widget slider" - ndtime=2 ;ndtime: maximum range of the "dt" slider, i.e. - ; maximum value of the dtindex variables - ; which prescribes the number of raytimesteps to be skipped - ; when moving the time slider - findex=1 ;current frequency (prescribed by action on a slider) - findex2=1 ;current frequency (prescribed by action on a slider) - aindex=0 ;current direction (prescribed by action on a slider) - tindex=1 ;current timestep (slider) - dtindex=1 ;cf. ndtime - tindex2=1 - - -;Variables and flags for the computation and display of rays - RaysOk=0 ;1 if rays have be computed (call to fortran) and are - ;ready for display - raytimestep=5. ;timestep between two points on a ray - rayfreq=0.05 ;frequency of the rays - rayres=1. ;difference in initial directions between 2 rays (deg) - rayGP=1. ;combined index of the grid points from which rays are - ;computed - rayamin=-90. ;angle (relative to x axis) of the first ray - rayamax=90. ;angle (idem) of the last ray - rayoffdep=300. ;depth at which the ray are stopped - raydz=0. ;mean water level adjustment for the ray computation - raymindepth=8. - -;Variables and flags for the computation and display of transects - adtr=1 - TransOK=0 - transthick=1 - transline=0 - transsym=1 - - nxzmax=0 ;x index of the top right point for the zoom - nyzmax=0 ;y index of the top right point for the zoom - nxzmin=0 ;x index of the bottom left point for the zoom - nyzmin=0 ;y index of the bottom left point for the zoom - maxdepth=100. ;top of range for 2D plot (bathy, RAY3 ...) - mindepth=0. ;min of range for 2D plot (bathy, RAY3 ...) - logplot=0 - - ts_filetype=0 - - clickflag=0 ;flags that specifies the action triggered by the - ;next click. - ;0: uptates c_gp with the index of the grid point - ; closest to the cursor - - nfiletypes=23 - - filestatus=BYTARR(nfiletypes) ;resets all sorts of data files to "closed" - datastatus=BYTARR(nfiletypes) ;resets all sorts of data to "not available" - - ilang=0 - dictionnaire={days:['Days','Jours'],at:['at','a'], $ - hs:['Significant wave height','Hauteur significative des vagues'], $ - Wdir:['W','O'], dpt:['depth','profondeur']} - months=STRARR(2,12) - months(0,*)=['January', 'February', 'March', 'April', 'May', 'June', 'July', $ - 'August', 'September', 'October', 'November', 'December'] - months(1,*)=['Janvier', 'Fevrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', $ - 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Decembre'] - -; -; Variables for mesh editor -; - ROA=0 - H0=8. - H1=1500. - Hi=60. - DX0=1. - DX1=15. - T0=10. - Hlandsea=-9.; - - -TWISTVA_VERSION='RUNTIME'; - - GET_LUN,unit - OPENR,unit,'TWIST_init.txt', ERROR=openerr - IF (OPENERR EQ 0) THEN BEGIN - PRINT,'Reading user defined parameters from TWIST_init.txt' - RSTRING=' ' - RINT=0 - RINT2=0 - RFLOAT=0. - - RFLOAT2=0. - NCOM=0 - WHILE (NOT EOF(unit)) DO BEGIN - CASE NCOM OF - 0: BEGIN - PRINT,'Reading plot window size' - READF,unit,RINT1,RINT2 - mwinx=RINT1 ;maximum length of draw window - mwiny=RINT2 ;maximum height of draw window - winx=RINT1 ;width of plot window - winy=RINT2 ;height of plot window - END - 1:BEGIN - PRINT,'Reading paths for the ',nfiletypes,' file types.' - FOR I=0,nfiletypes-1 DO BEGIN - READF,unit,RSTRING,FORMAT='(A)' - IPOS=STRPOS(RSTRING,' ') - IF (IPOS GT 0) THEN RSTRING=STRMID(RSTRING,0,IPOS-1) - paths(I)=RSTRING - ENDFOR - END - 2:BEGIN - PRINT,'Reading longitude and latitude for time series export ... ' - READF,unit,RFLOAT,RFLOAT2 - c_lon=RFLOAT - c_lat=RFLOAT2 - print,'Target longitude and latitude:',c_lon,c_lat - END - 3: BEGIN - PRINT,'Reading interface complexity flag: (0 = full interface, 1 = simplified interface)' - READF,unit,RINT1 - Wsimple=RINT1 - END - 4: BEGIN - file2=''; - READF,unit,RSTRING,FORMAT='(A)' - IPOS=STRPOS(RSTRING,' ') - IF (IPOS GT 0) THEN RSTRING=STRMID(RSTRING,0,IPOS) - file2=RSTRING - message,'Loading table ' + file2,/INFO - GET_LUN,lun2 - OPENR,lun2,file2 - r=BYTARR(256) - g=BYTARR(256) - b=BYTARR(256) - READF,lun2,r,g,b - cbot = 0 - nc = !d.table_size - cbot - if nc ne 256 then begin ;Interpolate - p = (lindgen(nc) * 255) / (nc-1) - r = r[p] - g = g[p] - b = b[p] - endif - r_orig[cbot] = r - g_orig[cbot] = g - b_orig[cbot] = b - r_curr = r_orig - g_curr = g_orig - b_curr = b_orig - tvlct,r, g, b, cbot - CLOSE,lun2 - END - 5: BEGIN - TWISTVA_VERSION='LICENCE'; - READF,unit,RSTRING,FORMAT='(A)' - IPOS=STRPOS(RSTRING,'R') - IF (IPOS GE 0) THEN TWISTVA_VERSION='RUNTIME' - PRINT,RSTRING,'Choice of inteface version (LICENCE/RUNTIME):',TWISTVA_VERSION - END - ELSE: - ENDCASE - NCOM=NCOM+1 - ENDWHILE - CLOSE,UNIT - FREE_LUN,UNIT - ENDIF - -END diff --git a/model/aux/idl_twist/julday.pro b/model/aux/idl_twist/julday.pro deleted file mode 100644 index 56e121673..000000000 --- a/model/aux/idl_twist/julday.pro +++ /dev/null @@ -1,189 +0,0 @@ -; $Id: //depot/idl/releases/IDL_80/idldir/lib/julday.pro#1 $ -; -; Copyright (c) 1988-2010, ITT Visual Information Solutions. All -; rights reserved. Unauthorized reproduction is prohibited. - -;+ -; NAME: -; JULDAY -; -; PURPOSE: -; Calculate the Julian Day Number for a given month, day, and year. -; This is the inverse of the library function CALDAT. -; See also caldat, the inverse of this function. -; -; CATEGORY: -; Misc. -; -; CALLING SEQUENCE: -; Result = JULDAY([[[[Month, Day, Year], Hour], Minute], Second]) -; -; INPUTS: -; MONTH: Number of the desired month (1 = January, ..., 12 = December). -; -; DAY: Number of day of the month. -; -; YEAR: Number of the desired year.Year parameters must be valid -; values from the civil calendar. Years B.C.E. are represented -; as negative integers. Years in the common era are represented -; as positive integers. In particular, note that there is no -; year 0 in the civil calendar. 1 B.C.E. (-1) is followed by -; 1 C.E. (1). -; -; HOUR: Number of the hour of the day. -; -; MINUTE: Number of the minute of the hour. -; -; SECOND: Number of the second of the minute. -; -; Note: Month, Day, Year, Hour, Minute, and Second can all be arrays. -; The Result will have the same dimensions as the smallest array, or -; will be a scalar if all arguments are scalars. -; -; OPTIONAL INPUT PARAMETERS: -; Hour, Minute, Second = optional time of day. -; -; OUTPUTS: -; JULDAY returns the Julian Day Number (which begins at noon) of the -; specified calendar date. If Hour, Minute, and Second are not specified, -; then the result will be a long integer, otherwise the result is a -; double precision floating point number. -; -; COMMON BLOCKS: -; None. -; -; SIDE EFFECTS: -; None. -; -; RESTRICTIONS: -; Accuracy using IEEE double precision numbers is approximately -; 1/10000th of a second, with higher accuracy for smaller (earlier) -; Julian dates. -; -; MODIFICATION HISTORY: -; Translated from "Numerical Recipies in C", by William H. Press, -; Brian P. Flannery, Saul A. Teukolsky, and William T. Vetterling. -; Cambridge University Press, 1988 (second printing). -; -; AB, September, 1988 -; DMS, April, 1995, Added time of day. -; CT, April 2000, Now accepts vectors or scalars. -;- -; -function JULDAY, MONTH, DAY, YEAR, Hour, Minute, Second - -COMPILE_OPT idl2 - -ON_ERROR, 2 ; Return to caller if errors - -; Gregorian Calander was adopted on Oct. 15, 1582 -; skipping from Oct. 4, 1582 to Oct. 15, 1582 -GREG = 2299171L ; incorrect Julian day for Oct. 25, 1582 - -; Process the input, if all are missing, use todays date. -NP = n_params() -IF (np EQ 0) THEN RETURN, SYSTIME(/JULIAN) -IF (np LT 3) THEN MESSAGE, 'Incorrect number of arguments.' - -; Find the dimensions of the Result: -; 1. Find all of the input arguments that are arrays (ignore scalars) -; 2. Out of the arrays, find the smallest number of elements -; 3. Find the dimensions of the smallest array - -; Step 1: find all array arguments -nDims = [SIZE(month,/N_DIMENSIONS), SIZE(day,/N_DIMENSIONS), $ - SIZE(year,/N_DIMENSIONS), SIZE(hour,/N_DIMENSIONS), $ - SIZE(minute,/N_DIMENSIONS), SIZE(second,/N_DIMENSIONS)] -arrays = WHERE(nDims GE 1) - -nJulian = 1L ; assume everything is a scalar -IF (arrays[0] GE 0) THEN BEGIN - ; Step 2: find the smallest number of elements - nElement = [N_ELEMENTS(month), N_ELEMENTS(day), $ - N_ELEMENTS(year), N_ELEMENTS(hour), $ - N_ELEMENTS(minute), N_ELEMENTS(second)] - nJulian = MIN(nElement[arrays], whichVar) - ; step 3: find dimensions of the smallest array - CASE arrays[whichVar] OF - 0: julianDims = SIZE(month,/DIMENSIONS) - 1: julianDims = SIZE(day,/DIMENSIONS) - 2: julianDims = SIZE(year,/DIMENSIONS) - 3: julianDims = SIZE(hour,/DIMENSIONS) - 4: julianDims = SIZE(minute,/DIMENSIONS) - 5: julianDims = SIZE(second,/DIMENSIONS) - ENDCASE -ENDIF - -d_Second = 0d ; defaults -d_Minute = 0d -d_Hour = 0d -; convert all Arguments to appropriate array size & type -SWITCH np OF ; use switch so we fall thru all arguments... -6: d_Second = (SIZE(second,/N_DIMENSIONS) GT 0) ? $ - second[0:nJulian-1] : second -5: d_Minute = (SIZE(minute,/N_DIMENSIONS) GT 0) ? $ - minute[0:nJulian-1] : minute -4: d_Hour = (SIZE(hour,/N_DIMENSIONS) GT 0) ? $ - hour[0:nJulian-1] : hour -3: BEGIN ; convert m,d,y to type LONG - L_MONTH = (SIZE(month,/N_DIMENSIONS) GT 0) ? $ - LONG(month[0:nJulian-1]) : LONG(month) - L_DAY = (SIZE(day,/N_DIMENSIONS) GT 0) ? $ - LONG(day[0:nJulian-1]) : LONG(day) - L_YEAR = (SIZE(year,/N_DIMENSIONS) GT 0) ? $ - LONG(year[0:nJulian-1]) : LONG(year) - END -ENDSWITCH - - -min_calendar = -4716 -max_calendar = 5000000 -minn = MIN(l_year, MAX=maxx) -IF (minn LT min_calendar) OR (maxx GT max_calendar) THEN MESSAGE, $ - 'Value of Julian date is out of allowed range.' -if (MAX(L_YEAR eq 0) NE 0) then message, $ - 'There is no year zero in the civil calendar.' - - -bc = (L_YEAR LT 0) -L_YEAR = TEMPORARY(L_YEAR) + TEMPORARY(bc) -inJanFeb = (L_MONTH LE 2) -JY = L_YEAR - inJanFeb -JM = L_MONTH + (1b + 12b*TEMPORARY(inJanFeb)) - - -JUL = floor(365.25d * JY) + floor(30.6001d*TEMPORARY(JM)) + L_DAY + 1720995L - - -; Test whether to change to Gregorian Calandar. -IF (MIN(JUL) GE GREG) THEN BEGIN ; change all dates - JA = long(0.01d * TEMPORARY(JY)) - JUL = TEMPORARY(JUL) + 2L - JA + long(0.25d * JA) -ENDIF ELSE BEGIN - gregChange = WHERE(JUL ge GREG, ngreg) - IF (ngreg GT 0) THEN BEGIN - JA = long(0.01d * JY[gregChange]) - JUL[gregChange] = JUL[gregChange] + 2L - JA + long(0.25d * JA) - ENDIF -ENDELSE - - -; hour,minute,second? -IF (np GT 3) THEN BEGIN ; yes, compute the fractional Julian date -; Add a small offset so we get the hours, minutes, & seconds back correctly -; if we convert the Julian dates back. This offset is proportional to the -; Julian date, so small dates (a long, long time ago) will be "more" accurate. - eps = (MACHAR(/DOUBLE)).eps - eps = eps*ABS(jul) > eps -; For Hours, divide by 24, then subtract 0.5, in case we have unsigned ints. - jul = TEMPORARY(JUL) + ( (TEMPORARY(d_Hour)/24d - 0.5d) + $ - TEMPORARY(d_Minute)/1440d + TEMPORARY(d_Second)/86400d + eps ) -ENDIF - -; check to see if we need to reform vector to array of correct dimensions -IF (N_ELEMENTS(julianDims) GT 1) THEN $ - JUL = REFORM(TEMPORARY(JUL), julianDims) - -RETURN, jul - -END diff --git a/model/aux/idl_twist/make_visu_package.pro b/model/aux/idl_twist/make_visu_package.pro deleted file mode 100755 index 8278358ab..000000000 --- a/model/aux/idl_twist/make_visu_package.pro +++ /dev/null @@ -1,14 +0,0 @@ -.FULL_RESET_SESSION -.compile initmain.pro -.compile rt_visumain.pro -.compile read_timeseries.pro -.compile mapping.pro -.compile gridbuild.pro -.compile bathytool.pro -.compile editspecials.pro -.compile maketransect.pro -.compile raytracer.pro -.compile parametros.pro -.compile julday.pro -RESOLVE_ALL -SAVE,/ROUTINES,FILENAME='rt_visumain.sav' diff --git a/model/aux/idl_twist/make_visu_tar.sh b/model/aux/idl_twist/make_visu_tar.sh deleted file mode 100755 index 28f7cdfa6..000000000 --- a/model/aux/idl_twist/make_visu_tar.sh +++ /dev/null @@ -1,6 +0,0 @@ -tar -cvf rt_visumain.tar visu.pro initmain.pro rt_visumain.pro read_timeseries.pro julday.pro mapping.pro gridbuild.pro bathytool.pro editspecials.pro maketransect.pro raytracer.pro parametros.pro palette.pro xloadpalette.pro -tar -uvf rt_visumain.tar palettes/* -tar -uvf rt_visumain.tar rayp.f90 raypfc.f90 raypf.f90 raypg.f90 -tar -uvf rt_visumain.tar TWIST_init.txt -gzip rt_visumain.tar - diff --git a/model/aux/idl_twist/maketransect.pro b/model/aux/idl_twist/maketransect.pro deleted file mode 100755 index 79f32ada3..000000000 --- a/model/aux/idl_twist/maketransect.pro +++ /dev/null @@ -1,460 +0,0 @@ -;---------------------------------------------------------------------------- -PRO Maketransect, anterior_root -;---------------------------------------------------------------------------- -; This procedure generates the widgets for the "transect designer" subwindow -; These widgets allow to interactively modify the position of the points -; used as a basis for the transect, as well as the method to get other points -; between these basis points. -; The interpolation coefficients for the triangle network are generated for -; each point of the transect by calling a fortran code, similar to Ray3a. -;---------------------------------------------------------------------------- -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize -COMMON WTwidgets,WTline1,WTline2,WTline4,WTgrideditor -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON TRANSLOC,igpt,thetatrans,gridtmat,transtype -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y,c_lon,c_lat - - thetatrans=0 - ntrans=30 - transsym=1 - transsymsize=0.5 - transthick=1 - transline=0 - IF transOK EQ 0 THEN BEGIN - ntransgp=10 - GRIDTMAT=FLTARR(7,ntransgp) - spectransname=STRARR(ntransgp) - ENDIF - igpt=0 - pbase=LONG(0) - vecbase=LONG(0) - Line1=LONG(0) - WTline1=LONARR(5) - - - pbase = WIDGET_BASE(TITLE='Transect designer', /COLUMN) - WIDGET_CONTROL, pbase, GROUP_LEADER=root - - Line1=WIDGET_BASE(pbase, /FRAME, /ROW) - WTline1(0)=WIDGET_LABEL(Line1, $ - VALUE='Basis points: ') - WTline1(1)=WIDGET_TEXT(Line1,/EDITABLE, XSIZE=5, YSIZE=1, $ - VALUE=STRCOMPRESS(String(ntransgp))) - WTline1(2)=WIDGET_LABEL(Line1,VALUE='Points in transect: ') - WTline1(3)=WIDGET_TEXT(Line1,/EDITABLE, XSIZE=5, YSIZE=1, $ - VALUE=STRCOMPRESS(String(ntrans))) - WTline1(4)=WIDGET_DROPLIST(Line1, $ - VALUE=['Lines','Splines']) - - Line2=WIDGET_BASE(pbase, /FRAME, /ROW) - WTgrideditor=LONARR(3) - WTgrideditor(1)= $ - WIDGET_TABLE(line2, /EDITABLE, $ - COLUMN_LABELS=['I','X','Y','Lat','min','Lon','min'], $ - YSIZE=ntransgp+1,XSIZE=9, /RESIZEABLE_COLUMNS, $ - COLUMN_WIDTHS=[40,80,80,60,100,60,100], $ - /SCROLL,Y_SCROLL_SIZE=10,X_SCROLL_SIZE=7, $ - UNITS=0) - - Line3=WIDGET_BASE(pbase, /FRAME, /ROW) - WTline2=LONARR(14) - WTline2(0)=WIDGET_LABEL(Line3,VALUE='Current point and name: ') - WTline2(1)=WIDGET_SLIDER(Line3, MAXIMUM=ntransgp, MINIMUM=1) - WTline2(2)=WIDGET_TEXT(Line3,/EDITABLE, value=spectransname(0)) - Line4=WIDGET_BASE(pbase, /FRAME, /ROW) - WTline2(3)=WIDGET_BUTTON(Line4, VALUE='Take c_gp') - WTline2(4)=WIDGET_LABEL(Line4, value='Take special #:') - WTline2(5)=WIDGET_TEXT(Line4,/EDITABLE,XSIZE=3,value='1') - Line5=WIDGET_BASE(pbase, /FRAME, /ROW) - WTline2(6)=WIDGET_LABEL(Line5, value='Sym:') - WTline2(7)=WIDGET_TEXT(Line5, XSIZE=5, $ - value=STRCOMPRESS(STRING(transsym))) - WTline2(8)=WIDGET_LABEL(Line5, value='Size:') - WTline2(9)=WIDGET_TEXT(Line5, XSIZE=5, $ - value=STRCOMPRESS(STRING(transsymsize))) - WTline2(10)=WIDGET_LABEL(Line5, value='Line:') - WTline2(11)=WIDGET_TEXT(Line5, XSIZE=5, $ - value=STRCOMPRESS(STRING(transline))) - WTline2(12)=WIDGET_LABEL(Line5, value='Thick:') - WTline2(13)=WIDGET_TEXT(Line5, XSIZE=5, $ - value=STRCOMPRESS(STRING(transthick))) - - - XMENU, ['Move points','End move','Delete points'],pbase, /ROW,$ - UVALUE=[0,1,2], BUTTONS = menu_ids, /FRAME - XMENU, ['Generate Transect','Compute inter','Save transect','Load transect'],pbase, /ROW,$ - UVALUE=[0,1,2,3], BUTTONS = menu_ids, /FRAME - - - Line4=WIDGET_BASE(pbase, /FRAME, /ROW) - WTline4=LONARR(3) - WTline4(0)= WIDGET_TEXT(Line4,YSIZE=1,VALUE='Use ray with direction:') - WTline4(1) = WIDGET_TEXT(Line4,/EDITABLE, $ - value=strcompress(string(thetatrans))) - - - Line5 = WIDGET_BUTTON(pbase, VALUE='OK') - WIDGET_CONTROL, /REALIZE, pbase - DisplayTgrid - subwin(0)=1 - XMANAGER, 'MakeTransect', pbase -RETURN -END - - -;---------------------------------------------------------------------------- -PRO MakeTransect_event, ev -;---------------------------------------------------------------------------- -; Deals with the actions on the widgets of the transect subwindow -;---------------------------------------------------------------------------- -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize -COMMON WTwidgets,WTline1,WTline2,WTline4,WTgrideditor -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON TRANSLOC,igpt,thetatrans,gridtmat,transtype -COMMON SPACE, c_gp,c_cut,indexgp -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused -COMMON FILES, filestatus,datastatus,paths,filters,filenames -COMMON SPECIALS,nspecgp,specmat,specname - - typo = TAG_NAMES(ev, /STRUCTURE) - CASE typo OF - 'WIDGET_BUTTON': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE value OF - 'OK': BEGIN - WIDGET_CONTROL, /DESTROY, ev.top - subwin(4)=0 - RETURN - END - 'Move points':clickflag=4 - 'End move':clickflag=0 - 'Take c_gp':BEGIN - print,'c_gp...:',c_gp,igpt - gridtmat(0,igpt)=c_gp - gridtmat(1:6,igpt)=gridmat(0:5,c_gp-1) - UpdateTtable,0,igpt - END - 'Compute inter':BEGIN - Ztrans=FLTARR(Ntrans) - Itrans=INTARR(Ntrans,3) - COtrans=FLTARR(Ntrans,3) - IF (datastatus(7) NE 0) THEN BEGIN - GET_LUN,unit - OPENW,unit,'transect.inp' - PRINTF,unit,paths(2)+filenames(2) - PRINTF,unit,paths(3)+filenames(3) - PRINTF,unit,paths(5)+filenames(5) - PRINTF,unit,paths(7)+filenames(7) - PRINTF,unit,Ntrans - FOR I=0,Ntrans-1 DO BEGIN - PRINTF,unit,Xtrans(I),Ytrans(I) - ENDFOR - CLOSE,unit - FREE_LUN,unit - SPAWN,'transect' - GET_LUN,unit - OPENR,unit,'transect.tra' - READF,unit,Ntrans - x=0. - y=0. - z=0. - i1=0 - i2=0 - i3=0 - a=0. - b=0. - c=0. - FOR I=0,Ntrans-1 DO BEGIN - READF,unit,x,y,z,i1,i2,i3,a,b,c - print,I,x,y,z,i1,i2,i3,a,b,c - Ztrans(I)=z - Itrans(I,0)=i1 - Itrans(I,1)=i2 - Itrans(I,2)=i3 - COtrans(I,0)=a - COtrans(I,1)=b - COtrans(I,2)=c - ENDFOR - CLOSE,unit - FREE_LUN,unit - ENDIF ELSE BEGIN - FOR I=0,Ntrans-1 DO BEGIN - ;print,'dx:',dx,dy,sx,sy,Xtrans(I)/dx,Ytrans(I)/dy - Ztrans(I)=gd(FLOOR(Xtrans(I)/dx),FLOOR(Ytrans(I)/dy)) - ENDFOR - ENDELSE - TransOK=1 - END - 'Delete points':BEGIN - selec=WIDGET_INFO(WTGrideditor(1),/TABLE_SELECT) - idel=selec(3)-selec(1)+1 - WIDGET_CONTROL,WTGrideditor(1),/DELETE_ROWS - ntransgp=ntransgp-idel - print,'del :',ntransgp,idel - tempo=gridtmat - gridtmat=FLTARR(7,ntransgp) - IF selec(1) GT 0 THEN gridtmat(*,0:selec(1)-1)=tempo(*,0:selec(1)-1) - gridtmat(*,selec(1):ntransgp-1)=tempo(*,selec(3)+1:ntransgp+idel-1) - tempo=spectransname - spectransname=STRARR(nspecgp) - spectransname(0:selec(1)-1)=tempo(0:selec(1)-1) - spectransname(selec(1):ntransgp-1)=tempo(selec(3)+1:ntransgp+idel-1) - igpt=0 - WIDGET_CONTROL,WTline2(1),SET_SLIDER_MAX=ntransgp,value=1 - WIDGET_CONTROL,WTline2(2),SET_VALUE=spectransname(0) - Displaytgrid - END - 'Save transect':BEGIN - trfile=PICKFILE(/WRITE, FILTER = '*.tr') - IF trfile NE '' THEN BEGIN - GET_LUN,unit - OPENW,unit,trfile - PRINTF,unit,Ntrans,NtransGP,transsym,transsymsize, $ - transline,transthick - FOR I=0,Ntrans-1 DO PRINTF,unit,Strans(I),Xtrans(I),Ytrans(I), $ - Ztrans(I),TRANSPOSE(Itrans(I,*)),TRANSPOSE(COtrans(I,*)) - FOR I=0,Ntransgp-1 DO PRINTF,unit,Ispectrans(I), $ - gridtmat(*,I),spectransname(I) - CLOSE,unit - FREE_LUN,unit - ENDIF - END - 'Load transect':BEGIN - trfile=PICKFILE(/READ, FILTER = '*.tr') - IF trfile NE '' THEN BEGIN - GET_LUN,unit - OPENR,unit,trfile - READF,unit,Ntrans,NtransGP,transsym,transsymsize,transline,transthick - Strans=FLTARR(Ntrans) - Xtrans=FLTARR(Ntrans) - Ytrans=FLTARR(Ntrans) - Ztrans=FLTARR(Ntrans) - Itrans=INTARR(Ntrans,3) - COtrans=FLTARR(Ntrans,3) - s=0. - x=0. - y=0. - z=0. - i1=0 - i2=0 - i3=0 - co1=0. - co2=0. - co3=0. - FOR I=0,Ntrans-1 DO BEGIN - READF,unit,s,x,y,z,i1,i2,i3,co1,co2,co3 - Strans(I)=s - Xtrans(I)=x - Ytrans(I)=y - Ztrans(I)=z - Itrans(I,0)=i1 - Itrans(I,1)=i2 - Itrans(I,2)=i3 - COtrans(I,0)=co1 - COtrans(I,1)=co2 - COtrans(I,2)=co3 - ENDFOR - - Ispectrans=INTARR(Ntransgp) - spectransname=STRARR(Ntransgp) - gridtmat=FLTARR(7,Ntransgp) - vecteur=FLTARR(7) - i1=0 - name=' ' - FOR I=0,Ntransgp-1 DO BEGIN - READF,unit,i1,vecteur,name - Ispectrans(I)=i1 - gridtmat(*,I)=vecteur - spectransname(I)=name - ENDFOR - CLOSE,unit - FREE_LUN,unit - transOK=1 - ENDIF - END - 'Generate Transect': BEGIN - GenerateTransect - END - ENDCASE - END - 'WIDGET_TABLE_CH': BEGIN - print,'Ev:',ev - print,'type:',ev.type,ev.id,ev.x,ev.y - CASE (ev.id) OF - WTgrideditor(1):IF (ev.type LE 2) THEN BEGIN - WIDGET_CONTROL,ev.id, GET_VALUE=valeur, $ - USE_TABLE_SELECT=[ev.x,ev.y,ev.x,ev.y] - gridtmat(ev.X,ev.Y)=valeur(0,0) - Updatettable,ev.X,ev.Y - ENDIF - ENDCASE - END - 'WIDGET_TEXT_CH': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE ev.id OF - WTline1(1):BEGIN - ntransgp=FLOOR(FLOAT(value(0))) - if Ntrans LT ntransgp THEN Ntrans=ntransgp - WIDGET_CONTROL,WTline1(3),SET_VALUE=STRCOMPRESS(STRING(Ntrans)) - taille=size(gridtmat) - IF (ntransgp GT taille(2)) THEN $ - WIDGET_CONTROL,WTGrideditor(1), $ - INSERT_ROWS=(ntransgp-taille(2)) ;,/USE_TABLE_SELECT - IF (ntransgp LT taille(2)) THEN BEGIN - selec=[0,ntransgp,7,taille(2)-1] - WIDGET_CONTROL,WTGrideditor(1),/DELETE_ROWS,USE_TABLE_SELECT=selec - ENDIF - tempo=gridtmat - taille=size(gridtmat) - nmax=MIN([taille(2)-1,ntransgp-1]) - gridtmat=FLTARR(7,ntransgp) - gridtmat(*,0:nmax)=tempo(*,0:nmax) - tempo=spectransname - spectransname=STRARR(ntransgp) - spectransname(0:nmax)=tempo(0:nmax) - igpt=0 - WIDGET_CONTROL,WTline2(1),SET_SLIDER_MAX=ntransgp - WIDGET_CONTROL,WTline2(2),SET_VALUE=spectransname(0) - Displaytgrid - END - WTline1(3):BEGIN - ntrans=FLOOR(FLOAT(value(0))) - END - WTline2(2):spectransname(igpt)=value(0) - WTline2(5):BEGIN - ispec=FIX(value(0))-1 - ;print,'specmat:',specmat(*,ispec) - gridtmat(0:6,igpt)=specmat(0:6,ispec) - spectransname(igpt)=specname(ispec) - WIDGET_CONTROL,WTline2(2),SET_VALUE=spectransname(igpt) - Displaytgrid - END - WTline2(7):transsym=ROUND(FLOAT(value(0))) - WTline2(9):transsymsize=FLOAT(value(0)) - WTline2(11):transline=ROUND(FLOAT(value(0))) - WTline2(13):transthick=ROUND(FLOAT(value(0))) - WTsl(4): IF RaysOK THEN BEGIN - END - ENDCASE - END - 'WIDGET_DROPLIST':BEGIN - CASE ev.id of - WPline1(2) : c_repart=ev.index - ENDCASE - END - 'WIDGET_SLIDER': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE (ev.id) OF - WTline2(1): BEGIN - igpt=FLOAT(value)-1 - WIDGET_CONTROL,WTline2(2),SET_VALUE=spectransname(igpt) - END - ENDCASE - END - ELSE: - ENDCASE -; ENDELSE -RETURN -END - -;---------------------------------------------------------------------------- -PRO UpdateTTable,I,J -COMMON TRANSLOC,igpt,thetatrans,gridtmat,transtype -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused -COMMON WTwidgets,WTline1,WTline2,WTline4,WTgrideditor - ;IF I EQ 0 THEN BEGIN - ; gridtmat(1:4,J)=gridmat(1:4,c_gp) - ;ENDIF ELSE BEGIN - londeg=0 - lonmin=0. - latdeg=0 - latmin=0. - x=0. - y=0. - IF I LT 3 THEN BEGIN - XYtoLatLon,x,y,latdeg,latmin,londeg,lonmin,latlonstring - gridtmat(3,J)=latdeg - gridtmat(4,J)=latmin - gridtmat(5,J)=londeg - gridtmat(6,J)=lonmin - ENDIF ELSE BEGIN - LatLontoXY,latdeg,latmin,londeg,lonmin,x,y - gridtmat(1,J)=x - gridtmat(2,J)=y - ENDELSE - ;ENDELSE - WIDGET_CONTROL,WTgrideditor(1),SET_VALUE=gridtmat(0:6,J:J), $ - USE_TABLE_SELECT=[0,J,6,J] - print,'new values:',gridtmat(0:6,J:J) - RETURN -END - -;---------------------------------------------------------------------------- -PRO GenerateTransect ;generates a transect -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize -COMMON TRANSLOC,igpt,thetatrans,gridtmat,transtype - N2=Ntrans-ntransGP - Strans0=FLTARR(Ntrans) - Ispectrans=FLTARR(Ntransgp) - Strans0(0)=0. - FOR I=1,ntransgp-1 DO BEGIN - ds=SQRT((gridtmat(1,I-1)-gridtmat(1,I))^2 +(gridtmat(2,I-1)-gridtmat(2,I))^2) - Strans0(I)=Strans0(I-1)+ds - ENDFOR - STRANS0(ntransgp:ntrans-1)=(Strans0(ntransgp-1))/(N2+1)+FINDGEN(N2)*(Strans0(ntransgp-1))/(N2+1) - sorted=SORT(STRANS0) - Strans=Strans0(sorted) - FOR I=0,ntransgp-1 DO BEGIN - Index=WHERE(strans EQ Strans0(I),kount) - IF kount NE 0 THEN Ispectrans(I)=Index(0) - ENDFOR - Xtrans=FLTARR(Ntrans) - Ytrans=FLTARR(Ntrans) - Xtrans(0)=gridtmat(1,0) - Ytrans(0)=gridtmat(2,0) - Xtrans(Ntrans-1)=gridtmat(1,ntransgp-1) - Ytrans(Ntrans-1)=gridtmat(2,ntransgp-1) - FOR I=1,ntransgp-1 DO BEGIN - FOR J=Ispectrans(I-1)+1,Ispectrans(I) DO BEGIN - Xtrans(J)=gridtmat(1,I-1)+ $ - (gridtmat(1,I)-gridtmat(1,I-1))* $ - (Strans(J)-Strans0(I-1))/(Strans0(I)-Strans0(I-1)) - Ytrans(J)=gridtmat(2,I-1)+ $ - (gridtmat(2,I)-gridtmat(2,I-1))* $ - (Strans(J)-Strans0(I-1))/(Strans0(I)-Strans0(I-1)) - ENDFOR - ENDFOR -END - -;---------------------------------------------------------------------------- -PRO DisplayTgrid -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize -COMMON TRANSLOC,igpt,thetatrans,gridtmat,transtype -COMMON WTwidgets,WTline1,WTline2,WTline4,WTgrideditor - WIDGET_CONTROL,WTGrideditor(1),TABLE_YSIZE=ntransgp - WIDGET_CONTROL,USE_TABLE_SELECT=[-1,-1,8,ntransgp-1], $ - COLUMN_WIDTHS=[40,40,40,80,80,40,80,40,80] - ROWLAB=STRCOMPRESS(STRING(FINDGEN(ntransgp)+1,FORMAT='(I3)')) - gridf=STRARR(9,ntransgp) - gridf(0,*)='(I5)' - gridf(1:2,*)='(F8.2)' - gridf(3,*)='(I4)' - gridf(4,*)='(F8.3)' - gridf(5,*)='(I4)' - gridf(6,*)='(F8.3)' - - WIDGET_CONTROL,WTGrideditor(1),FORMAT=gridf,ROW_LABELS=ROWLAB - WIDGET_CONTROL,WTGrideditor(1), $ - USE_TABLE_SELECT=[0,0,6,ntransgp-1], $ - SET_VALUE=gridtmat(0:6,0:ntransgp-1) -END diff --git a/model/aux/idl_twist/mapping.pro b/model/aux/idl_twist/mapping.pro deleted file mode 100644 index 596bf0406..000000000 --- a/model/aux/idl_twist/mapping.pro +++ /dev/null @@ -1,99 +0,0 @@ -PRO Mapping, anterior_root -; This procedure creates the widged for the "mapping parameters" subwindow -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -;** 4 ** subwindow widgets widgets -COMMON WMap,WMapping,rootmtool -;*******END OF COMMON BLOCKS******************************* - pbase=LONG(0) - vecbase=LONG(0) - WMLines=LONARR(10) - WMapping=LONARR(10,10) - -; Guardar valores en variables temporales - rootmtool=anterior_root -; WIDGET_CONTROL, root, SENSITIVE=0 - - - pbase = WIDGET_BASE(TITLE='Mapping parameters', /COLUMN) - - i=0 - WMLines(i)=WIDGET_BASE(pbase, /FRAME, /ROW) - WMapping(i,0)=WIDGET_DROPLIST(WMLines(i), $ - VALUE=['No map projection','Use map projection']) - WMapping(i,1)=WIDGET_DROPLIST(WMLines(i), $ - VALUE=['Orthographic','Mollweide','Mercator','Azimuthal']) - WMapping(i,2)=WIDGET_DROPLIST(WMLines(i), $ - VALUE=['No continents','Continents outline','Filled continents']) - i=1 - WMLines(i)=WIDGET_BASE(pbase, /FRAME, /ROW) - WMapping(i,0) = WIDGET_SLIDER(WMlines(I), MAXIMUM=180, MINIMUM=-180, $ - value=MAPLONGCENTER,TITLE='Longitude of center') - WMapping(i,1) = WIDGET_SLIDER(WMlines(I), MAXIMUM=90, MINIMUM=-90, $ - value=MAPLATCENTER,TITLE='Latitude of center') - i=i+1 - WMLines(i)= WIDGET_BUTTON(pbase, VALUE='OK') - WIDGET_CONTROL, /REALIZE, pbase - XMANAGER, 'Mappingg', pbase - subwin(6)=1 -RETURN -END - - -;---------------------------------------------------------------------------- -PRO Mappingg_event, ev -;*******COMMON BLOCKS************************************** -;** 1 ** Display parameters -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -;** 4 ** subwindow widgets widgets -COMMON WMap,WMapping,rootmtool -;*******END OF COMMON BLOCKS******************************* - - type = TAG_NAMES(ev, /STRUCTURE) - ;print,'type:',type - CASE type OF - 'WIDGET_BUTTON': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE value OF - 'OK': BEGIN - WIDGET_CONTROL, /DESTROY, ev.top - WIDGET_CONTROL,rootmtool, SENSITIVE=1 - subwin(6)=0 - RETURN - END - ENDCASE - END - 'WIDGET_SLIDER': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE (ev.id) OF - WMapping(1,0): MAPLONGCENTER=FLOAT(value) - WMapping(1,1): MAPLATCENTER=FLOAT(value) - ENDCASE - doplot - END - 'WIDGET_DROPLIST':BEGIN - CASE ev.id of - WMapping(0,0): BEGIN - MAPFLAG=ev.index - doplot - END - WMapping(0,1): BEGIN - MAPPROJ=ev.index - doplot - END - WMapping(0,2): BEGIN - MAPCONTINENT=ev.index - doplot - END - ENDCASE - END - ENDCASE -RETURN -END - - diff --git a/model/aux/idl_twist/palette.pro b/model/aux/idl_twist/palette.pro deleted file mode 100755 index 3f2cf9c9f..000000000 --- a/model/aux/idl_twist/palette.pro +++ /dev/null @@ -1,614 +0,0 @@ -; $Id: xpalette.pro,v 1.18 1998/08/20 15:02:24 alan Exp $ -; -; Copyright (c) 1992-1998, Research Systems, Inc. All rights reserved. -; Unauthorized reproduction prohibited. -; Modified by Fabrice Ardhuin, August 1999 -;+ -; NAME: -; XPALETTE -; -; PURPOSE: -; Interactively create color tables using the RGB, CMY, HSV, and -; HLS color systems using the mouse, three sliders, and a cell -; for each color index. Single colors can be defined or multiple -; color indices between two endpoints can be interpolated. -; -; CATEGORY: -; Color tables, widgets. -; -; CALLING SEQUENCE: -; XPALETTE -; -; INPUTS: -; No explicit inputs. The current color table is used as a starting -; point. -; -; KEYWORD PARAMETERS: -; BLOCK: Set this keyword to have XMANAGER block when this -; application is registered. By default the Xmanager -; keyword NO_BLOCK is set to 1 to provide access to the -; command line if active command line processing is available. -; Note that setting BLOCK for this application will cause -; all widget applications to block, not only this -; application. For more information see the NO_BLOCK keyword -; to XMANAGER. -; UPDATECALLBACK: Set this keyword to a string containing the name of -; a user-supplied procedure that will be called when the color -; table is updated by XLOADCT. The procedure may optionally -; accept a keyword called DATA, which will be automatically -; set to the value specified by the optional UPDATECBDATA -; keyword. -; UPDATECBDATA: Set this keyword to a value of any type. It will be -; passed via the DATA keyword to the user-supplied procedure -; specified via the UPDATECALLBACK keyword, if any. If the -; UPDATECBDATA keyword is not set the value accepted by the -; DATA keyword to the procedure specified by UPDATECALLBACK -; will be undefined. -; -; OUTPUTS: -; None. -; -; COMMON BLOCKS: -; COLORS: Contains the current RGB color tables. -; XP_COM: Private to this module. -; -; SIDE EFFECTS: -; XPALETTE uses two colors from the current color table as -; drawing foreground and background colors. These are used -; for the RGB plots on the left, and the current index marker on -; the right. This means that if the user set these two colors -; to the same value, the XPALETTE display could become unreadable -; (like writing on black paper with black ink). XPALETTE minimizes -; this possibility by noting changes to the color map and always -; using the brightest available color for the foreground color -; and the darkest for the background. Thus, the only way -; to make XPALETTE's display unreadable is to set the entire color -; map to a single color, which is highly unlikely. The only side -; effect of this policy is that you may notice XPALETTE redrawing -; the entire display after you've modified the current color. -; This simply means that the change has made XPALETTE pick new -; drawing colors. -; -; The new color tables are saved in the COLORS common and loaded -; to the display. -; -; PROCEDURE: -; The XPALETTE widget has the following controls: -; -; Left: Three plots showing the current Red, Green, and Blue vectors. -; -; Center: A status region containing: -; 1) The total number of colors. -; 2) The current color. XPALETTE allows changing -; one color at a time. This color is known as -; the "current color" and is indicated in the -; color spectrum display with a special marker. -; 3) The current mark index. The mark is used to -; remember a color index. It is established by -; pressing the "Set Mark Button" while the current -; color index is the desired mark index. -; 4) The current color. The special marker used in -; color spectrum display prevents the user from seeing -; the color of the current index, but it is visible -; here. -; -; A panel of control buttons, which do the following when -; pressed: -; -; Done: Exits XPALETTE. -; -; Predefined: Starts XLOADCT to allow selection of one of the -; predefined color tables. -; -; Help: Supplies help information similar to this header. -; -; Redraw: Completely redraws the display using the current -; state of the color map. -; -; Set Mark: Set the value of the mark index to the -; current index. -; -; Switch Mark: Exchange the mark and the current index. -; -; Copy Current: Every color lying between the current -; index and the mark index (inclusive) is given -; the current color. -; -; Interpolate: The colors lying between the current -; index and the mark index are interpolated linearly -; to lie between the colors of two endpoints. -; -; Three sliders (R, G, and B) that allow the user to modify the -; current color. -; -; Right: A display which shows the current color map as a series of -; squares. Color index 0 is at the upper left. The color index -; increases monotonically by rows going left to right and top -; to bottom. The current color index is indicated by a special -; marker symbol. There are 4 ways to change the current color: -; 1) Press any mouse button while the mouse -; pointer is over the color map display. -; 2) Use the "By Index" slider to move to -; the desired color index. -; 3) Use the "Row" Slider to move the marker -; vertically. -; 4) Use the "Column" Slider to move the marker -; horizontally. -; -; MODIFICATION HISTORY: -; July 1990, AB. Based on the PALETTE procedure, which does -; similar things using only basic IDL graphics -; commands. -; -; 7 January 1991, Re-written for general use. -; 1 April 1992, Modified to use the CW_RGBSLIDER and CW_COLORSEL -; compound widgets. The use of color systems other than -; RGB is now supported. -; 15 June 1992, Modified to use the CW_FIELD and CW_BGROUP compound -; widgets. -; 7 April 1993, Removed state caching. Fixed a bug where switching -; the current index and the mark would fail to update the -; current index label. -; 10 March 1997, Added !X.TYPE and !Y.TYPE to saved state. -; 8/20/98, ACY - Added UPDATECALLBACK and UPDATECBDATA keywords. -; 4/21/99 added writing file -;- - -function XP_NEW_COLORS -; Choose the best foreground and background colors for the current -; color maps and set !P appropriately. Returns 1 if the colors changed, -; 0 otherwise. - common xp_com, xpw, state - - res = 0 - junk = CT_LUMINANCE(dark=dark_col, bright=bright_col) - - if (bright_col ne !p.color) then begin - !p.color = bright_col - res = 1 - endif - - if (dark_col ne !p.background) then begin - !p.background = dark_col - res = 1 - endif - - return, res -end - -pro XP_ALERT_CALLER - - common xp_com, xpw, state - - ErrorStatus = 0 - CATCH, ErrorStatus - if (ErrorStatus NE 0) then begin - CATCH, /CANCEL - v = DIALOG_MESSAGE(['Unexpected error in XPALETTE:', $ - '!ERR_STRING = ' + !ERR_STRING], $ - /ERROR) - return - endif - if (STRLEN(state.updt_callback) gt 0) then begin - if (PTR_VALID(state.p_updt_cb_data)) then begin - CALL_PROCEDURE, state.updt_callback, DATA=*(state.p_updt_cb_data) - endif else begin - CALL_PROCEDURE, state.updt_callback - endelse - endif -end - -pro XP_XLCTCALLBACK - ; For visuals with static colormaps, update the graphics - ; after a change by XLOADCT. - if ((COLORMAP_APPLICABLE(redrawRequired) GT 0) and $ - (redrawRequired GT 0)) then begin - XP_REDRAW - endif - -end - -pro XP_REDRAW - - common xp_com, xpw, state - - junk = XP_NEW_COLORS() - WIDGET_CONTROL, xpw.colorsel, set_value=-1 - XP_REPLOT, !p.color, 'F' ; Update the plots of RGB - ; Let the caller of XPALETTE know that the color table was modified - XP_ALERT_CALLER -end - - - -pro XP_REPLOT, color_index, type -; Re-draw the RGB plots. Type has the following possible values. -;; - 'D': Draw the data part of all three plots -; - 'F': draw all three plots -; - 'R': Draw the data part of the Red plot -; - 'G': Draw the data part of the Green plot -; - 'B': Draw the data part of the Blue plot - - common xp_com, xpw, state - common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr - common pscale, r_x_s, r_y_s, g_x_s, g_y_s, b_x_s, b_y_s - - ; Update the plots of RGB - save_win = !D.WINDOW - wset, state.plot_win - save_p_region = !p.region - save_x_margin = !x.margin - save_y_margin = !y.margin - save_x_s = !x.s - save_y_s = !y.s - save_x_type = !x.type - save_y_type = !y.type - - !y.margin= [2, 2] - !x.margin= [6, 2] - - if (type eq 'F') then begin - !p.region = [0,.6667, 1, 1] - plot,xstyle=2, ystyle=3, yrange=[0, 260], r_curr, title='Red' - r_x_s = !x.s - r_y_s = !y.s - - !p.region = [0,.333, 1, .6667] - plot,/noerase, xstyle=2,ystyle=3, yrange=[0, 260], g_curr, title='Green' - g_x_s = !x.s - g_y_s = !y.s - - !p.region = [0,0, 1, .333] - plot,/noerase, xstyle=2,ystyle=3, yrange=[0, 260], b_curr, title='Blue' - - b_x_s = !x.s - b_y_s = !y.s - endif else begin - if ((type eq 'D') or (type eq 'R')) then begin - !p.region = [0,.6667, 1, 1] - !x.s = r_x_s - !y.s = r_y_s - oplot, r_curr, color=color_index - endif - if ((type eq 'D') or (type eq 'G')) then begin - !p.region = [0,.333, 1, .6667] - !x.s = g_x_s - !y.s = g_y_s - oplot, g_curr, color=color_index - endif - if ((type eq 'D') or (type eq 'B')) then begin - !p.region = [0,0, 1, .333] - !x.s = b_x_s - !y.s = b_y_s - oplot, b_curr, color=color_index - endif - endelse - - empty - WSET, save_win - !p.region = save_p_region - !x.margin = save_x_margin - !y.margin = save_y_margin - !x.s = save_x_s - !y.s = save_y_s - !x.type = save_x_type - !y.type = save_y_type - -end - - - - -pro XP_CHANGE_COLOR, type, value -; Change current color. Type has the following possible values. -; - 'R': Change the R part of the current color -; - 'G': ... -; - 'B': ... - common xp_com, xpw, state - common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr - - - cur_idx = state.cur_idx - - XP_REPLOT, !p.background, type - - if (type eq 'R') then r_curr[cur_idx] = value; - if (type eq 'G') then g_curr[cur_idx] = value; - if (type eq 'B') then b_curr[cur_idx] = value; - - tvlct, r_curr[cur_idx], g_curr[cur_idx], b_curr[cur_idx], cur_idx - - if (XP_NEW_COLORS()) then begin - ; Highlight the current position using the marker - WIDGET_CONTROL, xpw.colorsel, set_value=-1 ; Re-initialize - XP_REPLOT, !p.color, 'F' - endif else begin - XP_REPLOT, !p.color, type - endelse - - ; For visuals with static colormaps, update the graphics - ; of the current color. - if ((COLORMAP_APPLICABLE(redrawRequired) GT 0) and $ - (redrawRequired GT 0)) then begin - ; Mark new square - tmp = !D.WINDOW - wset, state.cur_color_win - erase, color=state.cur_idx - wset, tmp - endif - - ; Let the caller of XPALETTE know that the color table was modified - xp_alert_caller - -end - - - - - - - -pro XP_BUTTON_EVENT, event - - common xp_com, xpw, state - common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr - - ; NOTE: The value of these tags depend on the order of the buttons - ; in the base. - case (event.value) of - - ; DONE - 0: begin - empty - r_orig = r_curr & g_orig = g_curr & b_orig = b_curr ;new orig color tbl - WIDGET_CONTROL, /DESTROY, event.top - !p = state.old_p - end - - ; PREDEFINED - 1: xloadpalette, /silent, group=xpw.base, UPDATECALLBACK='XP_XLCTCALLBACK' - - ; HELP - 2: XDisplayFile, FILEPATH("xpalette.txt", subdir=['help', 'widget']), $ - TITLE = "XPalette Help", GROUP = event.top, WIDTH = 55, HEIGHT = 16 - - ; REDRAW - 3: XP_REDRAW - - ; SET MARK - 4: begin - state.mark_idx = state.cur_idx - WIDGET_CONTROL, xpw.mark_label, $ - set_value=strcompress(state.mark_idx, /REMOVE) - end - - ; SWITCH MARK - 5 : if (state.mark_idx ne state.cur_idx) then begin - tmp = state.mark_idx - state.mark_idx = state.cur_idx - state.cur_idx = tmp - WIDGET_CONTROL, xpw.colorsel, set_value=tmp - WIDGET_CONTROL, xpw.idx_label, $ - set_value=strcompress(state.cur_idx, /REMOVE) - WIDGET_CONTROL, xpw.mark_label, $ - set_value=strcompress(state.mark_idx, /REMOVE) - endif - - ; COPY CURRENT - 6 : begin - do_copy: - cur_idx = state.cur_idx - if (state.mark_idx le cur_idx) then begin - s = state.mark_idx - e = cur_idx - endif else begin - s = cur_idx - e = state.mark_idx - endelse - n = e-s+1 - XP_REPLOT, !p.background, 'D' - if (event.value eq 6) then begin - r_curr[s:e] = r_curr[cur_idx] - g_curr[s:e] = g_curr[cur_idx] - b_curr[s:e] = b_curr[cur_idx] - endif else begin ; Interpolate - scale = findgen(n)/float(n-1) - r_curr[s:e] = r_curr[s] + (fix(r_curr[e]) - fix(r_curr[s])) * scale - g_curr[s:e] = g_curr[s] + (fix(g_curr[e]) - fix(g_curr[s])) * scale - b_curr[s:e] = b_curr[s] + (fix(b_curr[e]) - fix(b_curr[s])) * scale - endelse - tvlct, r_curr[s:e], g_curr[s:e], b_curr[s:e], s - if (XP_NEW_COLORS()) then begin - WIDGET_CONTROL, xpw.colorsel, SET_VALUE=-1 - XP_REPLOT, !p.color, 'F' - endif else begin - XP_REPLOT, !p.color, 'D' - endelse - ; Let the caller of XPALETTE know that the color table was modified - xp_alert_caller - end - - 7: goto, do_copy - 8: BEGIN - file=DIALOG_PICKFILE(/READ, FILTER = '*.ct') - IF file NE '' THEN BEGIN - unitct=100 - OPENR,unitct,file - READF,unitct,nbclu - table0=intarr(nbclu,3) - READF,unitct,table0 - ;Interpolevels2,r_curr,table0(*,0),nbc - ;Interpolevels2,g_curr,table0(*,1),nbc - ;Interpolevels2,b_curr,table0(*,2),nbc - tvlct, r_curr, g_curr,b_curr - - END - END - 9: BEGIN - file=DIALOG_PICKFILE(/WRITE, FILTER = '*.ct') - IF file NE '' THEN BEGIN - unitct=100 - OPENW,unitct,file - END - END - else: - endcase - -end - - - - - - - -pro XP_EVENT, event - - common xp_com, xpw, state - common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr - - case (event.id) of - - xpw.button_base: XP_BUTTON_EVENT, event - - xpw.rgb_base: begin - cur_idx = state.cur_idx - if (event.r ne r_curr[cur_idx]) then XP_CHANGE_COLOR, "R", event.r - if (event.g ne g_curr[cur_idx]) then XP_CHANGE_COLOR, "G", event.g - if (event.b ne b_curr[cur_idx]) then XP_CHANGE_COLOR, "B", event.b - end - - xpw.colorsel: begin - cur_idx = state.cur_idx - new_pos = event.value ne cur_idx - ; Update the RBG sliders - if (event.value ne cur_idx) then begin - state.cur_idx = (cur_idx = event.value) - WIDGET_CONTROL, xpw.idx_label, $ - set_value=strcompress(cur_idx, /REMOVE_ALL) - ; Mark new square - tmp = !D.WINDOW - wset, state.cur_color_win - erase, color=cur_idx - wset, tmp - - WIDGET_CONTROL, xpw.rgb_base, $ - set_value=[r_curr[cur_idx], g_curr[cur_idx], b_curr[cur_idx]] - endif - end - - else: - endcase - -end - - - - - - - -pro PALETTE, group=group, BLOCK=block, UPDATECALLBACK=updt_cb_name, $ - UPDATECBDATA=updt_cb_data - - - common xp_com, xpw, state - common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr - - IF N_ELEMENTS(updt_cb_name) EQ 0 THEN updt_callback="" $ - ELSE updt_callback=updt_cb_name - IF N_ELEMENTS(updt_cb_data) GT 0 THEN p_updt_cb_data=PTR_NEW(updt_cb_data) $ - ELSE p_updt_cb_data=PTR_NEW() - - xpw = { xp_widgets, base:0L, $ - colorsel:0L, mark_label:0L, idx_label:0L, button_base:0L, rgb_base:0L} - - state = {old_p:!p, $ ; Original value of !P - mark_idx:0, $ ; Current mark index - cur_idx:0, $ ; Current index - cur_color_win:0, $ ; Current Color draw window index - plot_win:0, $ ; RGB plot draw window index - updt_callback: updt_callback, $ ; user-defined callback (optional) - p_updt_cb_data:p_updt_cb_data} ; data for callback (optional) - - if (XREGISTERED('XPALETTE')) then return ; Only one copy at a time - - IF N_ELEMENTS(block) EQ 0 THEN block=0 - - on_error,2 ;Return to caller if an error occurs - - nc = !d.table_size ;# of colors avail - if nc eq 0 then message, "Device has static color tables. Can't modify." - if (nc eq 2) then message, 'Unable to work with monochrome system.' - - state.old_p = !p ;Save !p - !p.noclip = 1 ;No clipping - !p.color = nc -1 ;Foreground color - !p.font = 0 ;Hdw font - save_win = !d.window ;Previous window - - IF N_ELEMENTS(r_orig) LE 0 THEN BEGIN ;If no common, use current colors - TVLCT, r_orig, g_orig, b_orig, /GET - r_curr = r_orig - b_curr = b_orig - g_curr = g_orig - ENDIF - - ; Create widgets - xpw.base=WIDGET_BASE(title='XPalette', /ROW, space=30) - ; This is a little tricky. Setting the managed attribute indicates - ; our intention to put this app under the control of XMANAGER, and - ; prevents our draw widgets from becoming candidates for becoming - ; the default window on WSET, -1. XMANAGER sets this, but doing it here - ; prevents our own WSETs at startup from having that problem. - WIDGET_CONTROL, /MANAGED, xpw.base - - version = WIDGET_INFO(/VERSION) - if (version.style='Motif') then junk=510 else junk = 580 - plot_frame = WIDGET_DRAW(xpw.base, xsize=200, ysize=junk) - - c1 = WIDGET_BASE(xpw.base, /COLUMN, space=20) - status = WIDGET_BASE(c1, /COLUMN, /FRAME) - ncw = WIDGET_LABEL(WIDGET_BASE(status), /DYNAMIC_RESIZE) - xpw.idx_label = CW_FIELD(status, title='Current Index: ', value='0', $ - xsize=20, /STRING) - xpw.mark_label = CW_FIELD(status, title='Mark Index: ', value='0', $ - xsize=20, /STRING) - c1_1 = widget_base(status, /ROW) - junk = WIDGET_LABEL(c1_1, value="Current Color: ") - cur_color = WIDGET_DRAW(c1_1, xsize = 125, ysize=50, /frame) - names = [ 'Done', 'Predefined', 'Help', 'Redraw', 'Set Mark', $ - 'Switch Mark', 'Copy Current', 'Interpolate'] - xpw.button_base = CW_BGROUP(c1, names, COLUMN=3, /FRAME) - xpw.rgb_base = CW_RGBSLIDER(c1, /FRAME, /DRAG) - - junk = WIDGET_BASE(xpw.base) ; Responds to YOFFSET - if (version.style='Motif') then junk2=30 else junk2 = 50 - xpw.colorsel = CW_COLORSEL(junk, yoffset=junk2) - - - state.cur_idx = 0 - state.mark_idx = 0 - - ; Position RGB slider appropriately - WIDGET_CONTROL, xpw.rgb_base, SET_VALUE=[r_curr[0], g_curr[0], b_curr[0]] - WIDGET_CONTROL, /REALIZE, xpw.base - - WIDGET_CONTROL, ncw, $ - set_value='Number Of Colors: ' + strcompress(!d.n_colors, /REMOVE_ALL) - WIDGET_CONTROL, get_value=tmp, cur_color - state.cur_color_win = tmp - WIDGET_CONTROL, get_value=tmp, plot_frame - state.plot_win = tmp - - - ; Update the plots of RGB - junk = XP_NEW_COLORS() - XP_REPLOT, !p.color, 'F' - - WSET, save_win - - XMANAGER, 'XPalette', xpw.base, event_handler='XP_EVENT', group=group, $ - NO_BLOCK=(NOT(FLOAT(block))) -end - diff --git a/model/aux/idl_twist/palettes/6coul.ct b/model/aux/idl_twist/palettes/6coul.ct deleted file mode 100755 index 880da30dc..000000000 --- a/model/aux/idl_twist/palettes/6coul.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 129 0 0 255 255 255 31 36 40 45 50 54 58 61 64 68 69 72 - 74 77 79 80 82 83 85 84 86 87 88 86 87 87 87 85 84 84 84 - 83 79 78 77 76 71 70 68 66 60 58 55 53 46 43 40 36 33 25 - 21 16 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 4 8 12 21 25 29 33 42 46 51 55 63 - 67 72 76 80 89 93 97 101 110 114 119 123 131 135 140 144 153 157 161 - 165 169 178 182 187 191 199 203 208 212 221 225 229 233 242 246 250 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 0 0 223 132 67 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 4 8 16 21 25 29 38 42 46 51 55 63 67 72 - 76 84 89 93 97 106 110 114 119 127 131 135 140 144 152 157 161 165 174 - 178 182 187 195 199 203 208 216 220 225 229 233 242 246 250 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 250 - 242 238 233 229 221 216 212 208 199 195 191 187 178 174 170 165 161 153 148 - 144 140 131 127 123 119 110 106 102 97 89 85 80 76 72 63 59 55 51 - 42 38 34 29 21 17 12 8 0 - 0 218 255 0 0 130 0 28 32 38 43 48 53 59 63 68 72 77 81 - 86 91 95 100 104 109 113 118 122 127 132 136 141 145 150 154 159 163 168 - 173 177 182 186 191 195 200 204 209 214 218 223 227 232 236 241 245 250 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 242 238 - 233 225 220 216 212 203 199 195 191 187 178 174 170 165 157 152 148 144 135 - 131 127 123 114 110 106 102 97 89 84 80 76 67 63 59 55 46 42 38 - 34 25 21 16 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/Depth.ct b/model/aux/idl_twist/palettes/Depth.ct deleted file mode 100755 index fb5a55925..000000000 --- a/model/aux/idl_twist/palettes/Depth.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 204 183 178 173 168 163 158 153 148 143 138 133 128 123 118 118 112 112 - 107 107 102 102 97 97 92 87 87 82 82 77 77 71 71 66 66 61 61 - 56 56 51 51 46 46 41 41 35 35 30 30 25 25 20 15 15 10 10 - 5 5 0 0 6 6 8 8 10 10 12 12 14 14 16 16 18 18 20 - 20 22 25 25 27 27 29 29 31 31 33 33 35 35 37 37 39 39 42 - 42 40 40 38 38 37 37 35 34 34 32 32 30 30 29 29 27 27 26 - 26 24 24 22 22 21 21 19 19 18 18 16 16 15 14 14 13 13 12 - 12 10 10 9 9 8 8 24 24 40 40 57 57 73 73 90 90 106 106 - 123 123 139 156 156 163 163 169 169 176 176 182 182 189 189 195 195 202 202 - 209 209 215 215 222 222 228 228 235 241 241 248 248 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 203 - 0 166 129 122 115 108 101 94 87 79 72 65 58 51 44 37 37 42 42 - 48 48 53 53 59 59 64 69 69 75 75 80 80 85 85 91 91 96 96 - 101 101 107 107 112 112 118 118 123 123 128 128 134 134 139 144 144 150 150 - 155 155 161 161 164 164 168 168 172 172 176 176 180 180 185 185 189 189 193 - 193 197 202 202 208 208 215 215 221 221 228 228 235 235 241 241 248 248 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 251 251 247 247 - 244 244 240 240 237 237 233 233 230 230 226 226 222 222 219 215 215 212 212 - 208 208 205 205 201 201 198 198 187 187 176 176 165 165 154 154 143 143 132 - 132 122 122 111 100 100 89 89 78 78 67 65 65 65 65 65 66 66 66 - 66 66 67 67 67 67 67 68 141 - 0 255 241 239 237 234 232 230 228 225 223 221 218 216 214 212 212 213 213 - 215 215 217 217 219 219 221 223 223 225 225 227 227 228 228 230 230 232 232 - 234 234 236 236 238 238 240 240 241 241 243 243 245 245 247 249 249 251 251 - 253 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 249 249 244 244 238 238 233 227 227 222 222 216 216 211 211 205 205 200 - 200 194 194 189 189 183 183 178 178 173 173 155 155 138 121 121 103 103 86 - 86 69 69 51 51 34 34 39 39 44 44 50 50 55 55 60 60 66 66 - 71 71 76 82 82 80 80 78 78 77 77 75 75 73 73 72 72 70 70 - 68 68 67 67 65 65 63 63 62 60 60 58 58 57 57 58 58 59 59 - 60 60 62 62 63 63 64 64 66 66 67 67 68 68 70 71 71 72 72 - 74 74 75 75 76 76 78 78 81 81 84 84 87 87 90 90 93 93 96 - 96 99 99 102 105 105 108 108 111 111 114 109 106 103 100 98 95 92 89 - 87 84 81 78 76 73 70 68 52 diff --git a/model/aux/idl_twist/palettes/Depth_finistere.ct b/model/aux/idl_twist/palettes/Depth_finistere.ct deleted file mode 100755 index 0c3b77a02..000000000 --- a/model/aux/idl_twist/palettes/Depth_finistere.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 204 183 183 183 183 178 178 178 173 173 173 168 168 168 163 163 163 158 - 158 158 153 153 153 148 148 148 148 143 143 143 138 138 138 133 133 133 128 - 128 128 123 123 123 118 118 118 118 118 118 112 112 112 112 112 112 107 107 - 107 107 107 107 102 102 102 102 102 102 97 97 97 97 97 97 92 92 92 - 87 87 87 87 87 87 82 82 82 82 82 82 77 77 77 77 77 71 71 - 66 66 66 61 61 56 56 56 51 51 46 46 46 41 41 35 35 30 30 - 30 25 25 20 20 15 15 10 10 10 5 5 0 0 0 6 6 8 8 - 10 10 12 14 14 16 18 20 20 25 25 27 29 31 31 33 35 35 37 - 39 42 42 40 38 37 37 34 34 32 30 29 29 27 26 26 24 22 21 - 21 19 18 16 16 14 14 13 12 10 9 8 40 57 90 106 139 156 169 - 176 189 195 209 215 228 228 235 241 248 248 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 181 172 - 0 166 129 129 129 129 122 122 122 115 115 115 108 108 108 101 101 101 94 - 94 94 87 87 87 79 79 79 79 72 72 72 65 65 65 58 58 58 51 - 51 51 44 44 44 37 37 37 37 37 37 42 42 42 42 42 42 48 48 - 48 48 48 48 53 53 53 53 53 53 59 59 59 59 59 59 64 64 64 - 69 69 69 69 69 69 75 75 75 75 75 75 80 80 80 80 80 85 85 - 91 91 91 96 96 101 101 101 107 107 112 112 112 118 118 123 123 128 128 - 128 134 134 139 139 144 144 150 150 150 155 155 161 161 161 164 164 168 168 - 172 172 176 180 180 185 189 193 193 202 202 208 215 221 221 228 235 235 241 - 248 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 251 251 247 244 244 240 240 - 237 233 233 230 226 226 222 219 215 212 212 208 208 205 201 201 198 187 187 - 176 165 165 154 143 143 132 122 122 111 100 89 89 78 67 65 65 65 65 - 66 66 66 66 67 67 67 87 70 - 0 255 241 241 241 241 239 239 239 237 237 237 234 234 234 232 232 232 230 - 230 230 228 228 228 225 225 225 225 223 223 223 221 221 221 218 218 218 216 - 216 216 214 214 214 212 212 212 212 212 212 213 213 213 213 213 213 215 215 - 215 215 215 215 217 217 217 217 217 217 219 219 219 219 219 219 221 221 221 - 223 223 223 223 223 223 225 225 225 225 225 225 227 227 227 227 227 228 228 - 230 230 230 232 232 234 234 234 236 236 238 238 238 240 240 241 241 243 243 - 243 245 245 247 247 249 249 251 251 251 253 253 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 249 244 238 238 227 227 222 216 211 211 205 200 200 194 189 183 - 183 178 173 155 155 121 121 103 86 69 51 34 44 50 60 66 76 82 78 - 77 73 72 68 67 63 63 62 60 58 58 57 58 58 59 60 60 62 62 - 63 64 64 66 67 67 68 70 71 72 72 74 74 75 76 76 78 81 81 - 84 87 87 90 93 93 96 99 99 102 105 108 108 111 114 109 106 100 98 - 95 89 87 84 78 76 73 6 4 diff --git a/model/aux/idl_twist/palettes/Depth_land_lakes.ct b/model/aux/idl_twist/palettes/Depth_land_lakes.ct deleted file mode 100755 index a15bd2c91..000000000 --- a/model/aux/idl_twist/palettes/Depth_land_lakes.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 186 183 178 173 168 163 158 153 148 143 138 133 128 123 118 118 112 112 - 107 107 102 102 97 97 92 87 87 82 82 77 77 71 71 66 66 61 61 - 56 56 51 51 46 46 41 41 35 35 30 30 25 25 20 15 15 10 10 - 5 5 0 0 6 6 8 8 10 10 12 12 14 14 16 16 18 18 20 - 20 22 25 25 27 27 29 29 31 31 33 33 35 35 37 37 39 39 42 - 42 40 40 38 38 37 37 35 34 34 32 32 30 30 29 29 27 27 26 - 26 24 24 22 22 21 21 19 19 18 18 16 16 15 14 14 13 13 12 - 12 10 10 9 9 8 8 24 24 40 40 57 57 73 73 90 90 106 106 - 123 123 139 156 156 163 163 169 169 176 176 182 182 189 189 195 195 202 202 - 209 209 215 215 222 222 228 228 235 241 241 248 248 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 50 185 - 0 199 129 122 115 108 101 94 87 79 72 65 58 51 44 37 37 42 42 - 48 48 53 53 59 59 64 69 69 75 75 80 80 85 85 91 91 96 96 - 101 101 107 107 112 112 118 118 123 123 128 128 134 134 139 144 144 150 150 - 155 155 161 161 164 164 168 168 172 172 176 176 180 180 185 185 189 189 193 - 193 197 202 202 208 208 215 215 221 221 228 228 235 235 241 241 248 248 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 251 251 247 247 - 244 244 240 240 237 237 233 233 230 230 226 226 222 222 219 215 215 212 212 - 208 208 205 205 201 201 198 198 187 187 176 176 165 165 154 154 143 143 132 - 132 122 122 111 100 100 89 89 78 78 67 65 65 65 65 65 66 66 66 - 66 66 67 67 67 67 67 129 107 - 0 255 241 239 237 234 232 230 228 225 223 221 218 216 214 212 212 213 213 - 215 215 217 217 219 219 221 223 223 225 225 227 227 228 228 230 230 232 232 - 234 234 236 236 238 238 240 240 241 241 243 243 245 245 247 249 249 251 251 - 253 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 249 249 244 244 238 238 233 227 227 222 222 216 216 211 211 205 205 200 - 200 194 194 189 189 183 183 178 178 173 173 155 155 138 121 121 103 103 86 - 86 69 69 51 51 34 34 39 39 44 44 50 50 55 55 60 60 66 66 - 71 71 76 82 82 80 80 78 78 77 77 75 75 73 73 72 72 70 70 - 68 68 67 67 65 65 63 63 62 60 60 58 58 57 57 58 58 59 59 - 60 60 62 62 63 63 64 64 66 66 67 67 68 68 70 71 71 72 72 - 74 74 75 75 76 76 78 78 81 81 84 84 87 87 90 90 93 93 96 - 96 99 99 102 105 105 108 108 111 111 114 109 106 103 100 98 95 92 89 - 87 84 81 78 76 73 70 255 4 diff --git a/model/aux/idl_twist/palettes/Eb.ct b/model/aux/idl_twist/palettes/Eb.ct deleted file mode 100755 index d9c70f7a2..000000000 --- a/model/aux/idl_twist/palettes/Eb.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 255 242 229 216 203 190 190 177 164 151 138 125 125 125 101 101 94 88 - 82 75 69 63 56 50 44 37 31 25 18 12 6 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 4 - 5 6 7 8 9 10 12 13 13 15 16 17 19 20 20 22 23 24 26 - 27 27 29 31 33 34 37 39 41 44 54 61 67 74 84 91 97 104 114 - 121 127 137 141 144 151 154 158 164 168 171 178 181 184 191 194 198 204 208 - 211 218 221 224 231 234 241 241 244 244 248 248 251 251 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 0 - 255 255 235 216 197 177 158 158 139 119 100 81 62 62 62 31 31 29 27 - 25 23 21 19 17 15 13 11 9 7 5 3 1 0 7 15 23 31 38 - 46 54 62 69 77 85 93 101 108 116 124 132 139 147 155 163 171 178 186 - 194 202 209 217 225 233 241 255 255 255 255 255 255 255 255 254 253 252 251 - 250 250 248 248 247 246 245 244 243 242 241 241 239 238 238 236 236 235 234 - 233 232 231 229 228 227 224 223 222 221 223 224 225 226 227 228 230 231 232 - 233 234 236 236 237 238 239 239 240 241 241 242 243 243 244 245 245 247 247 - 248 249 249 250 251 251 252 252 253 253 253 253 254 254 255 255 252 252 249 - 249 247 247 244 244 241 241 239 239 236 236 234 234 231 231 228 226 226 223 - 221 221 218 215 215 213 210 210 207 205 205 202 200 200 197 194 194 192 189 - 189 187 184 184 181 179 179 176 174 165 165 165 165 165 165 161 161 161 148 - 148 148 148 148 140 140 140 127 127 127 127 127 127 119 119 119 110 110 110 - 110 102 102 89 89 89 89 80 80 72 72 72 59 59 55 55 55 55 42 - 42 34 34 34 0 0 0 0 0 - 255 255 250 245 240 235 230 230 225 220 215 210 205 205 205 195 195 198 202 - 206 210 213 217 221 225 228 232 236 240 243 247 251 255 254 253 252 251 250 - 249 248 247 246 245 245 244 243 242 241 240 239 238 237 236 236 235 234 233 - 232 231 230 229 228 227 227 242 242 233 220 220 199 199 199 195 192 189 183 - 180 176 170 167 164 161 154 151 148 142 138 135 129 126 123 116 113 110 104 - 101 97 91 85 78 72 63 56 50 46 44 42 41 39 37 35 34 33 30 - 29 27 25 24 24 22 22 21 19 19 18 16 16 15 13 13 12 11 10 - 9 8 7 6 5 4 2 2 2 2 1 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/Eb_for_eps.ct b/model/aux/idl_twist/palettes/Eb_for_eps.ct deleted file mode 100644 index 08a75ba15..000000000 --- a/model/aux/idl_twist/palettes/Eb_for_eps.ct +++ /dev/null @@ -1,39 +0,0 @@ - 0 255 242 229 216 203 190 190 177 164 151 138 125 125 125 101 101 94 88 82 - 75 69 63 56 50 44 37 31 25 18 12 6 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 4 5 6 7 8 - 9 10 12 13 13 15 16 17 19 20 20 22 23 24 26 27 27 29 31 33 - 34 37 39 41 44 54 61 67 74 84 91 97 104 114 121 127 137 141 144 151 - 154 158 164 168 171 178 181 184 191 194 198 204 208 211 218 221 224 231 234 241 - 241 244 244 248 248 251 251 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 - 0 255 235 216 197 177 158 158 139 119 100 81 62 62 62 31 31 29 27 25 - 23 21 19 17 15 13 11 9 7 5 3 1 0 7 15 23 31 38 46 54 - 62 69 77 85 93 101 108 116 124 132 139 147 155 163 171 178 186 194 202 209 - 217 225 233 241 255 255 255 255 255 255 255 255 254 253 252 251 250 250 248 248 - 247 246 245 244 243 242 241 241 239 238 238 236 236 235 234 233 232 231 229 228 - 227 224 223 222 221 223 224 225 226 227 228 230 231 232 233 234 236 236 237 238 - 239 239 240 241 241 242 243 243 244 245 245 247 247 248 249 249 250 251 251 252 - 252 253 253 253 253 254 254 255 255 252 252 249 249 247 247 244 244 241 241 239 - 239 236 236 234 234 231 231 228 226 226 223 221 221 218 215 215 213 210 210 207 - 205 205 202 200 200 197 194 194 192 189 189 187 184 184 181 179 179 176 174 165 - 165 165 165 165 165 161 161 161 148 148 148 148 148 140 140 140 127 127 127 127 - 127 127 119 119 119 110 110 110 110 102 102 89 89 89 89 80 80 72 72 72 - 59 59 55 55 55 55 42 42 34 34 34 0 0 0 0 255 - 0 255 250 245 240 235 230 230 225 220 215 210 205 205 205 195 195 198 202 206 - 210 213 217 221 225 228 232 236 240 243 247 251 255 254 253 252 251 250 249 248 - 247 246 245 245 244 243 242 241 240 239 238 237 236 236 235 234 233 232 231 230 - 229 228 227 227 242 242 233 220 220 199 199 199 195 192 189 183 180 176 170 167 - 164 161 154 151 148 142 138 135 129 126 123 116 113 110 104 101 97 91 85 78 - 72 63 56 50 46 44 42 41 39 37 35 34 33 30 29 27 25 24 24 22 - 22 21 19 19 18 16 16 15 13 13 12 11 10 9 8 7 6 5 4 2 - 2 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 diff --git a/model/aux/idl_twist/palettes/Hs.ct b/model/aux/idl_twist/palettes/Hs.ct deleted file mode 100755 index 95a5ef2e7..000000000 --- a/model/aux/idl_twist/palettes/Hs.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 154 154 148 148 143 143 138 138 133 133 128 128 123 123 118 118 112 112 - 107 107 102 102 97 97 92 87 87 82 82 77 77 71 71 66 66 61 61 - 56 56 51 51 46 46 41 41 35 35 30 30 25 25 20 15 15 10 10 - 5 5 0 0 6 6 8 8 10 10 12 12 14 14 16 16 18 18 20 - 20 22 25 25 27 27 29 29 31 31 33 33 35 35 37 37 39 39 42 - 42 40 40 38 38 37 37 35 34 34 32 32 30 30 29 29 27 27 26 - 26 24 24 22 22 21 21 19 19 18 18 16 16 15 14 14 13 13 12 - 12 10 10 9 9 8 8 24 24 40 40 57 57 73 73 90 90 106 106 - 123 123 139 156 156 163 163 169 169 176 176 182 182 189 189 195 195 202 202 - 209 209 215 215 222 222 228 228 235 241 241 248 248 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 122 - 0 0 0 5 5 10 10 16 16 21 21 26 26 32 32 37 37 42 42 - 48 48 53 53 59 59 64 69 69 75 75 80 80 85 85 91 91 96 96 - 101 101 107 107 112 112 118 118 123 123 128 128 134 134 139 144 144 150 150 - 155 155 161 161 164 164 168 168 172 172 176 176 180 180 185 185 189 189 193 - 193 197 202 202 208 208 215 215 221 221 228 228 235 235 241 241 248 248 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 251 251 247 247 - 244 244 240 240 237 237 233 233 230 230 226 226 222 222 219 215 215 212 212 - 208 208 205 205 201 201 198 198 187 187 176 176 165 165 154 154 143 143 132 - 132 122 122 111 100 100 89 89 78 78 67 67 57 57 48 48 40 40 32 - 32 24 24 16 16 8 8 0 43 - 0 199 199 200 200 202 202 204 204 206 206 208 208 210 210 212 212 213 213 - 215 215 217 217 219 219 221 223 223 225 225 227 227 228 228 230 230 232 232 - 234 234 236 236 238 238 240 240 241 241 243 243 245 245 247 249 249 251 251 - 253 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 249 249 244 244 238 238 233 227 227 222 222 216 216 211 211 205 205 200 - 200 194 194 189 189 183 183 178 178 173 173 155 155 138 121 121 103 103 86 - 86 69 69 51 51 34 34 39 39 44 44 50 50 55 55 60 60 66 66 - 71 71 76 82 82 80 80 78 78 77 77 75 75 73 73 72 72 70 70 - 68 68 67 67 65 65 63 63 62 60 60 58 58 57 57 58 58 59 59 - 60 60 62 62 63 63 64 64 66 66 67 67 68 68 70 71 71 72 72 - 74 74 75 75 76 76 78 78 81 81 84 84 87 87 90 90 93 93 96 - 96 99 99 102 105 105 108 108 111 111 114 114 117 117 100 100 83 83 66 - 66 50 50 33 33 16 16 0 8 diff --git a/model/aux/idl_twist/palettes/Hsb.ct b/model/aux/idl_twist/palettes/Hsb.ct deleted file mode 100755 index 01a563407..000000000 --- a/model/aux/idl_twist/palettes/Hsb.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 255 212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 248 248 241 241 235 - 228 228 222 222 215 215 209 209 202 202 195 195 189 189 182 182 176 176 169 - 169 163 163 156 156 139 123 123 106 106 90 90 73 73 57 57 40 40 24 - 24 8 8 9 9 10 10 12 12 13 13 14 14 15 16 16 18 18 19 - 19 21 21 22 22 24 24 26 26 27 27 29 29 30 30 32 32 34 34 - 35 37 37 38 38 40 40 42 42 39 39 37 37 35 35 33 33 31 31 - 29 29 27 27 25 25 22 20 20 18 18 16 16 14 14 12 12 10 10 - 8 8 6 6 0 0 5 5 10 10 15 15 20 25 25 30 30 35 35 - 41 41 46 46 51 51 56 56 61 61 66 66 71 71 77 77 82 82 87 - 87 92 97 97 102 102 107 107 112 112 118 118 123 123 128 128 133 133 138 - 138 143 143 148 148 154 154 175 0 - 255 0 166 8 16 16 24 24 32 32 40 40 48 48 57 57 67 67 78 - 78 89 89 100 100 111 122 122 132 132 143 143 154 154 165 165 176 176 187 - 187 198 198 201 201 205 205 208 208 212 212 215 215 219 222 222 226 226 230 - 230 233 233 237 237 240 240 244 247 247 251 251 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 248 248 241 241 235 235 228 228 221 221 - 215 215 208 208 202 202 197 193 193 189 189 185 185 180 180 176 176 172 172 - 168 168 164 164 161 161 155 155 150 150 144 144 139 134 134 128 128 123 123 - 118 118 112 112 107 107 101 101 96 96 91 91 85 85 80 80 75 75 69 - 69 64 59 59 53 53 48 48 42 42 37 37 32 32 26 26 21 21 16 - 16 10 10 5 5 0 0 0 0 - 255 0 126 16 33 33 50 50 66 66 83 83 100 100 117 117 114 114 111 - 111 108 108 105 105 102 99 99 96 96 93 93 90 90 87 87 84 84 81 - 81 78 78 76 76 75 75 74 74 72 72 71 71 70 68 68 67 67 66 - 66 64 64 63 63 62 62 60 59 59 58 58 57 57 58 58 60 60 62 - 63 63 65 65 67 67 68 68 70 70 72 72 73 73 75 75 77 77 78 - 78 80 80 82 82 76 71 71 66 66 60 60 55 55 50 50 44 44 39 - 39 34 34 51 51 69 69 86 86 103 103 121 121 138 155 155 173 173 178 - 178 183 183 189 189 194 194 200 200 205 205 211 211 216 216 222 222 227 227 - 233 238 238 244 244 249 249 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 253 253 251 251 249 249 247 245 245 243 243 241 241 - 240 240 238 238 236 236 234 234 232 232 230 230 228 228 227 227 225 225 223 - 223 221 219 219 217 217 215 215 213 213 212 212 210 210 208 208 206 206 204 - 204 202 202 200 200 199 199 182 0 diff --git a/model/aux/idl_twist/palettes/Hsb2.ct b/model/aux/idl_twist/palettes/Hsb2.ct deleted file mode 100755 index b908ddfbd..000000000 --- a/model/aux/idl_twist/palettes/Hsb2.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 255 212 212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 248 248 248 248 - 241 241 235 235 228 228 228 222 222 222 215 215 215 215 209 209 202 202 202 - 202 195 195 189 189 189 189 182 182 182 176 176 169 169 169 163 156 156 156 - 123 123 123 106 106 90 90 73 73 57 57 40 40 24 24 24 8 9 9 - 9 10 12 12 13 13 14 14 15 16 16 18 18 19 19 21 22 22 24 - 24 26 26 27 27 29 30 30 32 32 34 35 37 37 38 38 40 40 42 - 42 39 37 37 35 35 33 33 31 31 29 29 27 27 27 25 25 22 20 - 20 18 16 14 14 12 10 8 6 6 0 5 10 15 15 25 25 35 41 - 46 46 51 56 61 61 66 71 77 82 82 87 92 97 102 107 112 112 118 - 123 128 133 133 138 143 148 148 0 - 255 0 166 166 8 16 16 16 24 24 32 32 32 40 40 48 48 48 57 - 57 67 67 67 78 78 89 89 89 100 100 111 111 122 122 132 132 132 143 - 143 154 154 154 165 165 176 176 176 187 187 198 198 198 201 201 205 205 205 - 208 208 212 212 212 215 215 219 222 222 222 226 226 230 230 230 233 233 237 - 237 240 240 240 244 247 247 247 247 251 251 251 251 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 248 241 241 235 235 228 228 221 221 215 215 208 208 208 202 202 197 193 - 193 189 185 180 180 176 172 168 164 164 161 155 150 144 144 134 134 123 118 - 112 112 107 101 96 96 91 85 80 75 75 69 64 59 53 48 42 42 37 - 32 26 21 21 16 10 5 5 0 - 255 0 126 126 16 33 33 33 50 50 66 66 66 83 83 100 100 100 117 - 117 114 114 114 111 111 108 108 108 105 105 102 102 99 99 96 96 96 93 - 93 90 90 90 87 87 84 84 84 81 81 78 78 78 76 76 75 75 75 - 74 74 72 72 72 71 71 70 68 68 68 67 67 66 66 66 64 64 63 - 63 62 62 62 60 59 59 59 59 58 58 58 58 57 57 58 58 58 58 - 60 60 62 62 63 63 63 65 65 65 67 67 67 67 68 68 70 70 70 - 70 72 72 73 73 73 73 75 75 75 77 77 78 78 78 80 82 82 82 - 71 71 71 66 66 60 60 55 55 50 50 44 44 39 39 39 34 51 51 - 51 69 86 86 103 103 121 121 138 155 155 173 173 178 178 183 189 189 194 - 194 200 200 205 205 211 216 216 222 222 227 233 238 238 244 244 249 249 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 253 251 249 249 245 245 241 240 - 238 238 236 234 232 232 230 228 227 225 225 223 221 219 217 215 213 213 212 - 210 208 206 206 204 202 200 200 0 diff --git a/model/aux/idl_twist/palettes/JFM8a.ct b/model/aux/idl_twist/palettes/JFM8a.ct deleted file mode 100755 index 23833cfd6..000000000 --- a/model/aux/idl_twist/palettes/JFM8a.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 56 56 112 112 112 112 112 114 114 114 114 114 114 115 115 115 115 115 - 116 116 116 116 116 118 118 118 118 118 119 119 119 119 119 119 121 121 121 - 121 122 122 122 122 122 122 123 123 123 123 123 125 125 125 125 125 126 126 - 126 126 126 128 128 128 128 128 128 129 129 129 129 131 131 131 131 131 131 - 132 132 132 132 132 133 133 133 133 133 135 135 135 135 135 136 136 136 136 - 136 136 138 138 138 138 139 139 139 139 139 139 140 140 140 140 140 142 142 - 142 142 142 143 143 143 143 143 145 145 145 145 145 145 146 146 146 146 147 - 147 147 147 147 147 149 149 149 149 149 150 150 150 150 152 152 152 154 154 - 157 162 162 164 167 171 171 174 178 178 181 184 188 188 191 194 194 198 201 - 205 205 208 211 211 215 218 221 221 225 228 228 232 235 238 238 242 245 245 - 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 250 - 250 250 250 250 250 250 250 250 250 250 250 250 250 250 252 252 252 252 252 - 252 252 252 252 252 252 252 252 252 252 252 253 253 253 253 253 253 253 253 - 253 253 253 253 253 253 253 255 255 - 0 56 56 112 112 112 112 112 114 114 114 114 114 114 115 115 115 115 115 - 116 116 116 116 116 118 118 118 118 118 119 119 119 119 119 119 121 121 121 - 121 122 122 122 122 122 122 123 123 123 123 123 125 125 125 125 125 126 126 - 126 126 126 128 128 128 128 128 128 129 129 129 129 131 131 131 131 131 131 - 132 132 132 132 132 133 133 133 133 133 135 135 135 135 135 136 136 136 136 - 136 136 138 138 138 138 139 139 139 139 139 139 140 140 140 140 140 142 142 - 142 142 142 143 143 143 143 143 145 145 145 145 145 145 146 146 146 146 147 - 147 147 147 147 147 149 149 149 149 149 150 150 150 150 152 152 152 154 154 - 157 162 162 164 167 171 171 174 178 178 181 184 188 188 191 194 194 198 201 - 205 205 208 211 211 215 218 221 221 225 228 228 232 235 238 238 242 245 245 - 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 250 - 250 250 250 250 250 250 250 250 250 250 250 250 250 250 252 252 252 252 252 - 252 252 252 252 252 252 252 252 252 252 252 253 253 253 253 253 253 253 253 - 253 253 253 253 253 253 253 255 255 - 0 56 56 112 112 112 112 112 114 114 114 114 114 114 115 115 115 115 115 - 116 116 116 116 116 118 118 118 118 118 119 119 119 119 119 119 121 121 121 - 121 122 122 122 122 122 122 123 123 123 123 123 125 125 125 125 125 126 126 - 126 126 126 128 128 128 128 128 128 129 129 129 129 131 131 131 131 131 131 - 132 132 132 132 132 133 133 133 133 133 135 135 135 135 135 136 136 136 136 - 136 136 138 138 138 138 139 139 139 139 139 139 140 140 140 140 140 142 142 - 142 142 142 143 143 143 143 143 145 145 145 145 145 145 146 146 146 146 147 - 147 147 147 147 147 149 149 149 149 149 150 150 150 150 152 152 152 154 154 - 157 162 162 164 167 171 171 174 178 178 181 184 188 188 191 194 194 198 201 - 205 205 208 211 211 215 218 221 221 225 228 228 232 235 238 238 242 245 245 - 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 250 - 250 250 250 250 250 250 250 250 250 250 250 250 250 250 252 252 252 252 252 - 252 252 252 252 252 252 252 252 252 252 252 253 253 253 253 253 253 253 253 - 253 253 253 253 253 253 253 255 255 diff --git a/model/aux/idl_twist/palettes/SWAO_dir.ct b/model/aux/idl_twist/palettes/SWAO_dir.ct deleted file mode 100755 index 7c1af94c7..000000000 --- a/model/aux/idl_twist/palettes/SWAO_dir.ct +++ /dev/null @@ -1,39 +0,0 @@ - 0 255 200 197 195 193 191 189 187 185 182 180 178 176 174 172 170 170 170 170 - 164 164 164 164 164 158 158 158 158 158 161 161 161 161 163 163 163 163 165 165 - 165 165 167 170 172 176 179 183 185 188 192 194 194 194 199 199 199 199 199 199 - 190 190 186 186 186 182 182 182 182 178 174 169 165 165 161 157 157 157 153 153 - 153 153 153 149 145 140 140 140 140 136 132 132 128 128 128 128 124 109 103 91 - 79 79 79 79 79 79 73 73 73 73 73 67 67 67 67 67 67 61 61 61 - 61 61 55 55 55 55 55 50 6 28 35 57 72 94 102 124 130 158 172 186 - 192 199 206 213 213 220 227 234 234 241 248 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 0 255 200 196 192 189 185 182 178 175 171 167 164 160 157 153 150 150 150 150 - 137 137 137 137 137 124 124 124 124 124 119 119 119 119 113 113 113 113 108 108 - 108 108 102 97 91 80 75 64 58 53 42 36 36 36 2 2 2 2 2 2 - 3 3 4 4 4 5 5 5 5 5 6 7 8 8 8 9 9 9 10 10 - 10 10 10 11 11 12 12 12 12 13 14 14 14 14 14 14 15 27 34 47 - 60 60 60 60 60 60 67 67 67 67 67 74 74 74 74 74 74 80 80 80 - 80 80 87 87 87 87 87 94 225 231 233 239 243 249 251 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 250 244 235 231 218 214 207 197 188 - 186 182 173 173 169 167 161 148 144 127 123 110 97 97 97 97 97 59 59 59 - 42 42 34 34 34 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 - 0 255 200 198 197 195 194 193 191 190 189 187 186 185 183 182 181 181 181 181 - 178 178 178 178 178 175 175 175 175 175 179 179 179 179 184 184 184 184 188 188 - 188 188 193 197 202 210 215 224 228 233 242 246 246 246 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 67 65 64 62 61 59 58 54 51 40 34 28 - 25 22 20 17 17 14 11 8 8 5 2 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 diff --git a/model/aux/idl_twist/palettes/S_sym.ct b/model/aux/idl_twist/palettes/S_sym.ct deleted file mode 100755 index c6b680b72..000000000 --- a/model/aux/idl_twist/palettes/S_sym.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 85 82 78 78 75 66 62 62 57 54 50 47 41 38 34 29 26 22 - 19 13 10 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 12 12 25 25 38 50 50 63 76 76 76 76 88 88 88 - 101 114 114 114 114 114 114 114 114 114 126 126 126 126 139 139 152 152 152 - 152 152 165 165 165 165 165 165 189 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 5 5 6 6 7 9 9 9 10 11 12 13 14 14 15 16 17 18 - 18 20 20 22 22 22 23 37 37 37 66 66 66 81 95 95 110 110 124 - 139 139 139 153 168 182 182 197 211 211 226 240 240 240 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 241 241 241 241 241 228 228 228 - 228 214 214 214 214 214 214 201 201 201 201 188 188 188 174 174 174 174 174 - 174 161 161 161 161 161 161 148 148 148 127 127 127 127 127 127 127 127 127 - 110 110 110 110 110 102 102 102 102 102 102 89 89 89 80 80 80 80 80 - 72 72 72 59 59 59 59 59 59 59 55 55 55 55 55 55 42 34 34 - 34 34 34 34 0 0 0 0 0 - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 239 239 223 223 - 207 191 191 191 175 159 159 143 127 127 111 95 79 79 79 63 63 47 47 - 31 15 15 15 12 12 25 25 38 50 50 63 76 76 76 76 88 88 88 - 101 114 114 114 114 114 114 114 114 114 126 126 126 126 139 139 152 152 152 - 152 152 165 165 165 165 165 165 189 223 223 223 223 223 223 195 195 195 195 - 195 167 167 167 139 139 139 139 111 111 111 111 111 111 83 83 83 83 55 - 55 55 55 27 27 27 27 27 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/Tp_SAR.ct b/model/aux/idl_twist/palettes/Tp_SAR.ct deleted file mode 100644 index 55fbf6510..000000000 --- a/model/aux/idl_twist/palettes/Tp_SAR.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 181 174 168 162 156 150 144 138 132 126 114 108 102 96 90 84 78 72 66 - 60 48 42 36 30 24 18 12 6 0 0 18 31 40 54 61 69 74 80 83 - 84 88 85 84 79 77 70 66 55 46 40 25 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 4 12 29 42 55 67 80 93 101 - 119 131 144 157 169 182 199 208 225 246 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 175 174 174 - 174 174 174 174 174 174 174 174 174 174 174 174 174 173 173 173 173 173 173 173 - 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 173 - 173 172 172 172 172 172 172 172 172 172 172 172 172 172 172 172 172 172 172 172 - 173 173 174 174 175 176 176 177 177 178 178 179 179 180 180 181 182 182 182 183 - 183 184 184 185 185 186 187 187 188 188 189 189 190 190 191 192 192 192 193 193 - 194 194 195 195 196 197 197 198 198 199 199 200 200 0 0 255 - 255 184 177 171 165 159 153 147 141 134 128 116 110 104 98 92 85 79 73 67 - 61 49 42 36 30 24 18 12 6 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 8 25 38 51 63 76 89 - 97 114 140 152 165 178 195 203 216 229 242 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 250 238 221 212 195 187 170 161 144 131 - 123 106 97 80 72 55 42 29 17 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - 2 3 3 4 5 6 7 8 9 9 10 11 12 12 13 15 16 16 17 18 - 19 19 20 21 22 23 24 25 25 26 27 28 28 29 30 32 32 33 34 35 - 35 36 37 38 38 40 41 41 42 43 44 44 45 0 0 255 - 255 184 177 171 165 159 153 147 141 134 128 116 110 104 98 92 85 79 73 67 - 61 49 42 36 30 24 18 12 6 0 0 14 28 38 53 63 77 86 100 109 - 118 132 154 163 177 186 200 209 223 232 241 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 242 225 216 199 191 174 165 152 - 135 127 110 102 84 76 59 46 34 21 12 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 5 - 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 59 59 59 62 - 62 65 65 68 68 70 70 73 73 76 76 79 79 82 82 85 85 88 88 91 - 91 94 94 97 97 100 103 106 109 112 115 118 121 124 127 133 136 139 140 142 - 144 146 148 150 151 155 157 159 161 162 164 166 168 170 172 175 177 179 181 183 - 185 186 188 190 192 196 197 199 201 203 205 207 208 210 212 216 218 220 221 223 - 225 227 229 231 232 236 238 240 242 243 245 247 249 255 0 255 diff --git a/model/aux/idl_twist/palettes/backtoblack.ct b/model/aux/idl_twist/palettes/backtoblack.ct deleted file mode 100755 index 3fa3a2d41..000000000 --- a/model/aux/idl_twist/palettes/backtoblack.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 4 4 13 13 22 22 31 31 40 40 50 50 58 58 64 69 69 72 - 72 77 77 80 80 83 83 84 84 87 87 86 86 87 85 85 84 84 84 - 84 79 79 77 77 71 71 68 68 60 55 55 46 46 43 43 36 36 25 - 25 16 16 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 8 21 21 29 29 42 42 51 51 63 63 - 67 67 76 76 89 97 97 110 110 119 119 131 131 140 140 153 153 157 157 - 165 165 178 187 187 199 199 208 208 221 221 229 229 242 242 246 246 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 226 226 198 170 170 141 141 113 113 85 - 85 56 56 28 28 0 0 255 255 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 4 4 16 25 25 38 38 42 42 51 51 63 63 72 - 72 84 84 93 106 106 114 114 127 127 131 131 140 140 152 152 161 161 174 - 174 182 195 195 203 203 216 216 220 220 229 229 242 242 250 250 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 242 - 242 233 233 221 221 212 212 199 199 191 191 178 178 174 174 165 153 153 144 - 144 131 131 123 123 110 110 102 102 90 90 79 68 68 56 56 45 45 34 - 34 22 22 11 11 0 0 0 0 - 0 3 3 10 10 19 19 28 28 38 38 48 48 59 59 68 77 77 81 - 81 91 91 100 100 109 109 118 118 127 127 136 136 145 154 154 159 159 168 - 168 177 177 186 186 195 195 204 204 214 223 223 232 232 236 236 245 245 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 238 238 - 225 225 216 216 203 203 199 199 191 191 178 178 170 170 157 148 148 135 135 - 127 127 114 114 110 110 102 102 89 89 80 67 67 59 59 46 46 38 38 - 25 25 21 21 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/bathy.ct b/model/aux/idl_twist/palettes/bathy.ct deleted file mode 100755 index fea3a7502..000000000 --- a/model/aux/idl_twist/palettes/bathy.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 25 25 25 25 25 16 16 16 16 16 4 4 4 4 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 8 25 25 33 33 42 51 51 63 63 67 89 89 93 93 101 119 - 119 131 144 144 157 157 169 182 182 199 199 208 221 221 233 233 246 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 8 8 8 21 21 21 21 21 25 25 25 38 38 38 38 38 46 46 - 46 46 51 51 51 51 51 63 63 63 63 63 72 72 72 76 76 76 76 - 76 89 89 89 97 97 97 97 97 106 106 106 114 114 114 114 114 127 127 - 127 127 131 131 131 131 131 140 140 140 140 140 152 152 152 157 157 157 157 - 157 165 165 165 178 178 178 178 178 182 182 182 182 195 195 195 195 195 203 - 203 203 208 208 208 208 208 220 220 220 229 229 233 233 246 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 250 250 - 238 238 221 212 212 195 195 187 170 170 170 170 161 153 153 144 144 131 127 - 127 119 119 119 106 106 102 102 89 80 80 76 76 63 63 63 55 55 51 - 38 38 29 29 21 12 12 0 0 - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 - 238 220 220 212 212 199 195 195 187 187 174 157 157 148 148 144 131 131 123 - 123 114 97 97 89 89 80 67 67 63 63 55 38 38 25 25 16 12 12 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/bathy2.ct b/model/aux/idl_twist/palettes/bathy2.ct deleted file mode 100755 index 62dbf5492..000000000 --- a/model/aux/idl_twist/palettes/bathy2.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 8 25 25 33 33 42 51 51 63 63 67 89 89 93 93 101 119 - 119 131 144 144 157 157 169 182 182 199 199 208 221 221 233 233 246 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 91 92 93 94 95 96 97 98 100 101 102 103 104 105 106 107 109 110 - 111 112 113 114 115 116 118 119 120 121 122 123 124 125 127 128 129 130 131 - 132 133 134 136 137 138 139 140 141 142 143 145 146 147 148 149 150 151 152 - 154 155 156 157 158 159 160 162 163 164 165 166 167 168 169 171 172 173 174 - 175 176 177 178 180 181 182 183 184 185 186 187 189 190 191 192 193 194 196 - 198 199 201 203 204 206 208 209 211 213 214 216 218 219 221 223 224 226 228 - 229 231 233 234 236 238 239 241 243 244 246 248 249 251 253 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 250 250 - 238 238 221 212 212 195 195 187 170 170 170 170 161 153 153 144 144 131 127 - 127 119 119 119 106 106 102 102 89 80 80 76 76 63 63 63 55 55 51 - 38 38 29 29 21 12 12 0 0 - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 - 238 220 220 212 212 199 195 195 187 187 174 157 157 148 148 144 131 131 123 - 123 114 97 97 89 89 80 67 67 63 63 55 38 38 25 25 16 12 12 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/bathy3.ct b/model/aux/idl_twist/palettes/bathy3.ct deleted file mode 100755 index 82ca3fc02..000000000 --- a/model/aux/idl_twist/palettes/bathy3.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 47 47 48 49 49 50 50 51 52 52 53 54 54 55 57 57 58 58 - 59 60 60 61 62 62 63 64 64 66 66 67 68 68 69 70 70 71 72 - 72 73 73 75 76 76 77 78 78 79 80 80 81 81 82 84 84 85 86 - 86 87 88 88 89 89 91 93 93 95 97 97 99 101 101 103 103 105 107 - 107 109 111 111 113 115 115 117 117 119 121 121 123 125 125 127 129 129 130 - 130 132 134 134 136 138 138 140 142 142 144 144 146 148 148 150 152 152 154 - 156 156 158 158 160 162 162 164 166 166 168 170 170 169 168 168 167 167 166 - 165 165 164 163 163 163 162 162 161 161 160 159 159 158 157 157 157 148 148 - 140 140 132 124 124 115 107 107 99 91 91 82 82 74 66 66 58 49 49 - 41 33 33 25 25 35 46 46 56 67 67 78 89 89 89 89 93 106 106 - 120 133 133 147 160 160 174 174 187 201 201 214 228 228 241 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 175 175 175 176 176 177 177 178 179 179 180 181 181 182 183 183 184 184 - 185 186 186 187 188 188 189 190 190 191 191 192 193 193 194 195 195 196 197 - 197 198 198 199 200 200 201 202 202 203 204 204 205 205 206 207 207 208 209 - 209 210 211 211 212 212 213 214 214 215 216 216 217 218 218 219 219 220 221 - 221 222 223 223 224 225 225 226 226 227 228 228 229 230 230 231 232 232 233 - 233 234 235 235 236 237 237 238 239 239 240 240 241 242 242 243 244 244 245 - 246 246 247 247 248 249 249 250 251 251 252 253 253 253 253 253 253 253 253 - 253 253 253 253 253 254 254 254 254 254 254 254 254 254 254 254 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 248 248 - 241 234 234 228 221 221 214 207 207 201 201 194 187 187 180 174 174 167 161 - 161 154 154 148 141 141 135 128 128 122 116 116 104 104 92 81 81 69 58 - 58 46 35 35 23 23 12 0 0 - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 248 242 242 236 236 229 - 223 223 217 210 210 204 198 198 191 191 185 179 179 172 166 166 160 157 157 - 154 154 151 148 148 145 142 142 139 136 136 133 133 130 127 127 124 121 121 - 118 115 115 112 112 94 77 77 60 43 43 26 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 - 14 21 21 29 36 36 43 50 50 58 58 65 72 72 79 87 87 86 85 - 85 84 84 83 82 82 81 80 80 79 78 78 69 69 60 52 52 43 34 - 34 26 17 17 8 8 0 0 0 diff --git a/model/aux/idl_twist/palettes/bathy3white.ct b/model/aux/idl_twist/palettes/bathy3white.ct deleted file mode 100755 index ebf970b5b..000000000 --- a/model/aux/idl_twist/palettes/bathy3white.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 255 47 47 49 49 50 50 51 51 52 52 54 54 55 55 57 57 58 - 58 60 60 60 62 62 63 63 64 64 66 66 68 68 69 69 70 70 72 - 72 73 73 76 76 76 77 77 78 78 80 80 81 81 82 82 84 84 86 - 86 88 88 89 89 91 91 93 93 93 97 97 99 99 101 101 103 103 107 - 107 109 109 113 113 115 115 117 117 121 121 121 123 123 125 125 129 129 130 - 130 132 132 136 136 138 138 142 142 144 144 146 146 146 148 148 152 152 154 - 154 156 156 160 160 162 162 166 166 168 168 170 170 168 168 168 167 167 166 - 166 165 165 163 163 162 162 161 161 160 160 159 159 157 157 157 157 157 148 - 148 140 140 124 124 107 107 99 99 91 91 82 82 66 66 58 58 49 49 - 49 33 33 25 25 46 46 56 56 67 67 89 89 89 89 93 93 106 106 - 133 133 147 147 147 160 160 187 187 201 201 228 228 241 241 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 0 0 0 - 255 255 175 175 176 176 177 177 178 178 179 179 181 181 182 182 183 183 184 - 184 186 186 186 188 188 189 189 190 190 191 191 193 193 194 194 195 195 197 - 197 198 198 200 200 200 201 201 202 202 204 204 205 205 206 206 207 207 209 - 209 211 211 212 212 213 213 214 214 214 216 216 217 217 218 218 219 219 221 - 221 222 222 224 224 225 225 226 226 228 228 228 229 229 230 230 232 232 233 - 233 234 234 236 236 237 237 239 239 240 240 241 241 241 242 242 244 244 245 - 245 246 246 248 248 249 249 251 251 252 252 253 253 253 253 253 253 253 253 - 253 253 253 253 253 254 254 254 254 254 254 254 254 254 254 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 248 248 - 234 234 228 228 221 221 221 207 207 201 201 187 187 180 180 174 174 161 161 - 154 154 148 148 141 141 128 128 128 116 116 104 104 92 92 81 81 58 58 - 46 46 40 40 35 35 0 0 0 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 242 242 242 236 236 229 - 229 223 223 210 210 198 198 191 191 185 185 179 179 166 166 160 160 160 157 - 157 154 154 148 148 142 142 139 139 136 136 133 133 127 127 124 124 121 121 - 121 115 115 112 112 77 77 60 60 43 43 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 - 21 21 29 29 36 36 36 50 50 58 58 72 72 79 79 87 87 85 85 - 84 84 83 83 82 82 80 80 80 78 78 69 69 60 60 52 52 34 34 - 26 26 22 22 18 18 0 0 0 diff --git a/model/aux/idl_twist/palettes/bathy4.ct b/model/aux/idl_twist/palettes/bathy4.ct deleted file mode 100755 index 38390de46..000000000 --- a/model/aux/idl_twist/palettes/bathy4.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 14 14 47 49 49 49 50 50 51 52 53 53 54 55 55 57 58 58 - 59 60 60 60 62 62 62 64 64 64 66 67 67 68 69 69 70 71 71 - 72 73 73 75 76 76 76 78 78 78 80 80 80 81 82 82 84 85 85 - 86 87 87 88 89 89 91 93 93 93 97 97 97 101 101 101 103 105 105 - 107 109 109 111 113 113 115 117 117 119 121 121 121 125 125 125 129 129 129 - 130 132 132 134 136 136 138 140 140 142 144 144 144 148 148 148 152 152 152 - 156 156 156 158 160 160 162 164 164 166 168 168 170 169 168 168 167 167 167 - 165 165 165 163 163 163 162 162 162 161 160 160 159 158 158 157 157 148 148 - 140 140 140 124 124 124 107 107 107 91 91 91 82 74 74 66 58 49 49 - 41 33 33 25 25 25 46 46 46 67 67 67 89 89 89 89 93 106 106 - 120 133 133 147 160 160 174 174 174 201 201 201 228 228 228 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 144 144 175 176 176 176 177 177 178 179 180 180 181 182 182 183 184 184 - 185 186 186 186 188 188 188 190 190 190 191 192 192 193 194 194 195 196 196 - 197 198 198 199 200 200 200 202 202 202 204 204 204 205 206 206 207 208 208 - 209 210 210 211 212 212 213 214 214 214 216 216 216 218 218 218 219 220 220 - 221 222 222 223 224 224 225 226 226 227 228 228 228 230 230 230 232 232 232 - 233 234 234 235 236 236 237 238 238 239 240 240 240 242 242 242 244 244 244 - 246 246 246 247 248 248 249 250 250 251 252 252 253 253 253 253 253 253 253 - 253 253 253 253 253 253 254 254 254 254 254 254 254 254 254 254 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 248 248 - 241 234 234 228 221 221 214 207 207 201 201 201 187 187 187 174 174 174 161 - 161 154 154 148 141 141 135 128 128 122 116 116 104 104 104 81 81 81 58 - 58 35 35 35 23 23 255 0 0 - 0 230 230 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 248 242 242 236 236 236 - 223 223 223 210 210 210 198 198 198 191 185 185 179 172 172 166 160 157 157 - 154 154 154 148 148 148 142 142 142 136 136 136 133 130 130 127 124 121 121 - 118 115 115 112 112 112 77 77 77 43 43 43 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 - 14 21 21 29 36 36 43 50 50 58 58 58 72 72 72 87 87 87 85 - 85 84 84 83 82 82 81 80 80 79 78 78 69 69 69 52 52 52 34 - 34 17 17 17 8 8 255 0 0 diff --git a/model/aux/idl_twist/palettes/bathygif.ct b/model/aux/idl_twist/palettes/bathygif.ct deleted file mode 100755 index d6f5e2871..000000000 --- a/model/aux/idl_twist/palettes/bathygif.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 25 25 25 25 25 16 16 16 16 16 4 4 4 4 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 8 25 25 33 33 42 51 51 63 63 67 89 89 93 93 101 119 - 119 131 144 144 157 157 169 182 182 199 199 208 221 221 233 233 246 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 0 0 - 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 8 8 8 21 21 21 21 21 25 25 25 38 38 38 38 38 46 46 - 46 46 51 51 51 51 51 63 63 63 63 63 72 72 72 76 76 76 76 - 76 89 89 89 97 97 97 97 97 106 106 106 114 114 114 114 114 127 127 - 127 127 131 131 131 131 131 140 140 140 140 140 152 152 152 157 157 157 157 - 157 165 165 165 178 178 178 178 178 182 182 182 182 195 195 195 195 195 203 - 203 203 208 208 208 208 208 220 220 220 229 229 233 233 246 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 250 250 - 238 238 221 212 212 195 195 187 170 170 170 170 161 153 153 144 144 131 127 - 127 119 119 119 106 106 102 102 89 80 80 76 76 63 63 63 55 55 51 - 38 38 29 29 20 12 12 0 0 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 - 238 220 220 212 212 199 195 195 187 187 174 157 157 148 148 144 131 131 123 - 123 114 97 97 89 89 80 67 67 63 63 55 38 38 25 25 16 12 12 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/bwflipped.ct b/model/aux/idl_twist/palettes/bwflipped.ct deleted file mode 100755 index 3d96dfb9f..000000000 --- a/model/aux/idl_twist/palettes/bwflipped.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 255 255 251 251 250 248 248 246 245 245 243 243 242 240 240 238 238 237 - 235 235 233 232 232 230 230 229 227 227 225 224 224 222 222 220 219 219 217 - 217 216 214 214 212 211 211 209 209 207 206 206 204 204 203 201 201 199 198 - 198 196 196 194 193 193 191 190 190 188 188 186 185 185 183 183 181 180 180 - 178 177 177 175 175 173 172 172 170 170 168 167 167 165 164 164 162 162 160 - 159 159 157 157 155 154 154 152 151 151 149 149 147 146 146 144 142 142 141 - 141 139 138 138 136 136 134 133 133 131 129 129 128 128 125 123 123 121 121 - 120 118 118 116 115 115 113 113 112 110 110 108 108 107 105 105 103 102 102 - 100 100 99 97 97 95 94 94 92 92 90 89 89 87 87 86 84 84 82 - 81 81 79 79 77 76 76 74 74 73 71 71 69 68 68 66 66 64 63 - 63 61 60 60 58 58 56 55 55 53 53 51 50 50 48 47 47 45 45 - 43 42 42 40 40 38 37 37 35 34 34 32 32 30 29 29 27 27 25 - 24 24 22 21 21 19 19 17 16 16 14 12 12 11 11 9 8 8 6 - 6 4 3 3 1 0 0 255 255 - 0 255 255 251 251 250 248 248 246 245 245 243 243 242 240 240 238 238 237 - 235 235 233 232 232 230 230 229 227 227 225 224 224 222 222 220 219 219 217 - 217 216 214 214 212 211 211 209 209 207 206 206 204 204 203 201 201 199 198 - 198 196 196 194 193 193 191 190 190 188 188 186 185 185 183 183 181 180 180 - 178 177 177 175 175 173 172 172 170 170 168 167 167 165 164 164 162 162 160 - 159 159 157 157 155 154 154 152 151 151 149 149 147 146 146 144 142 142 141 - 141 139 138 138 136 136 134 133 133 131 129 129 128 128 125 123 123 121 121 - 120 118 118 116 115 115 113 113 112 110 110 108 108 107 105 105 103 102 102 - 100 100 99 97 97 95 94 94 92 92 90 89 89 87 87 86 84 84 82 - 81 81 79 79 77 76 76 74 74 73 71 71 69 68 68 66 66 64 63 - 63 61 60 60 58 58 56 55 55 53 53 51 50 50 48 47 47 45 45 - 43 42 42 40 40 38 37 37 35 34 34 32 32 30 29 29 27 27 25 - 24 24 22 21 21 19 19 17 16 16 14 12 12 11 11 9 8 8 6 - 6 4 3 3 1 0 0 255 255 - 0 255 255 251 251 250 248 248 246 245 245 243 243 242 240 240 238 238 237 - 235 235 233 232 232 230 230 229 227 227 225 224 224 222 222 220 219 219 217 - 217 216 214 214 212 211 211 209 209 207 206 206 204 204 203 201 201 199 198 - 198 196 196 194 193 193 191 190 190 188 188 186 185 185 183 183 181 180 180 - 178 177 177 175 175 173 172 172 170 170 168 167 167 165 164 164 162 162 160 - 159 159 157 157 155 154 154 152 151 151 149 149 147 146 146 144 142 142 141 - 141 139 138 138 136 136 134 133 133 131 129 129 128 128 125 123 123 121 121 - 120 118 118 116 115 115 113 113 112 110 110 108 108 107 105 105 103 102 102 - 100 100 99 97 97 95 94 94 92 92 90 89 89 87 87 86 84 84 82 - 81 81 79 79 77 76 76 74 74 73 71 71 69 68 68 66 66 64 63 - 63 61 60 60 58 58 56 55 55 53 53 51 50 50 48 47 47 45 45 - 43 42 42 40 40 38 37 37 35 34 34 32 32 30 29 29 27 27 25 - 24 24 22 21 21 19 19 17 16 16 14 12 12 11 11 9 8 8 6 - 6 4 3 3 1 0 0 255 255 diff --git a/model/aux/idl_twist/palettes/current_v0.ct b/model/aux/idl_twist/palettes/current_v0.ct deleted file mode 100644 index 8f1d9ec65..000000000 --- a/model/aux/idl_twist/palettes/current_v0.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 243 231 219 207 195 183 171 160 148 136 124 112 100 88 77 60 60 46 46 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 - 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 - 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 8 8 21 25 33 - 46 46 55 67 67 76 76 80 93 93 101 114 114 131 131 140 153 153 161 169 - 169 182 187 187 187 199 199 208 208 208 208 208 221 221 221 229 229 229 229 242 - 242 246 246 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 - 255 238 221 204 187 170 153 136 119 102 85 68 51 34 17 0 0 0 0 0 - 0 0 29 29 55 55 89 89 114 144 144 174 174 174 174 182 182 195 195 203 - 216 220 220 229 229 242 242 242 242 242 242 243 243 243 243 244 244 244 244 245 - 245 245 246 246 246 246 247 247 247 247 248 248 248 249 249 249 249 250 250 250 - 250 251 251 251 252 252 252 252 253 253 253 253 254 254 254 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 242 242 242 233 233 233 221 221 221 221 221 - 216 208 208 208 208 208 195 195 195 187 187 187 187 187 174 165 165 165 165 165 - 165 161 161 161 148 148 148 148 148 148 140 140 140 127 127 127 127 127 127 127 - 119 119 119 110 110 110 110 110 110 102 102 102 89 89 89 89 89 89 89 80 - 80 80 80 72 72 72 72 72 59 59 59 55 55 55 55 55 55 55 42 42 - 42 42 34 34 34 34 34 0 0 0 0 0 0 0 0 0 - 255 250 245 241 236 232 227 222 218 213 209 204 199 195 190 186 214 214 232 232 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 249 244 239 233 228 223 217 212 207 201 196 191 - 185 180 175 170 164 159 154 148 143 138 132 127 122 116 111 106 100 95 90 85 - 79 74 69 63 58 53 47 42 37 31 26 21 15 10 5 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/dg_hs.ct b/model/aux/idl_twist/palettes/dg_hs.ct deleted file mode 100755 index 660cec5a7..000000000 --- a/model/aux/idl_twist/palettes/dg_hs.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 118 107 102 97 92 87 82 82 77 77 71 66 61 56 51 46 41 35 - 30 30 25 20 15 10 10 5 5 0 0 6 8 8 10 12 14 14 16 - 20 20 25 25 27 29 31 31 33 35 35 37 39 42 42 40 38 37 37 - 34 34 34 32 30 29 29 27 27 26 26 24 22 22 21 21 19 19 18 - 16 16 16 14 14 14 13 12 12 10 9 9 8 40 40 57 90 90 106 - 139 139 156 156 169 176 176 189 189 195 209 209 215 215 228 228 228 235 235 - 241 241 248 248 248 248 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 172 - 255 37 48 53 59 64 69 75 75 80 80 85 91 96 101 107 112 118 123 - 128 128 134 139 144 150 150 155 155 161 161 164 168 168 172 176 180 180 185 - 193 193 202 202 208 215 221 221 228 235 235 241 248 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 251 251 251 247 247 244 244 244 244 240 240 - 240 240 237 237 233 233 233 233 233 230 230 226 226 226 226 222 222 219 219 - 215 215 215 212 212 212 212 208 208 208 208 208 205 205 201 201 201 201 201 - 198 198 187 187 187 187 187 176 176 165 165 165 165 165 154 154 154 143 143 - 143 143 143 132 132 132 122 122 122 122 122 111 111 111 100 100 100 89 89 - 89 89 89 78 78 78 67 67 67 65 65 65 65 65 65 65 65 65 65 - 65 66 66 66 66 66 66 66 66 66 66 66 66 67 67 67 67 67 67 - 67 67 67 50 33 16 0 255 70 - 255 212 215 217 219 221 223 225 225 227 227 228 230 232 234 236 238 240 241 - 243 243 245 247 249 251 251 253 253 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 244 238 238 - 227 227 227 222 216 211 211 205 205 200 200 194 189 189 183 183 178 178 173 - 155 155 155 121 121 121 103 86 86 69 51 51 34 44 44 50 60 60 66 - 76 76 82 82 78 77 77 73 73 72 68 68 67 67 63 63 63 62 62 - 60 60 58 58 58 58 57 57 58 58 58 59 59 60 60 60 60 62 62 - 62 62 63 63 64 64 64 64 64 66 66 67 67 67 67 68 68 70 70 - 71 71 71 72 72 72 72 74 74 74 74 74 75 75 76 76 76 76 76 - 78 78 81 81 81 81 81 84 84 87 87 87 87 87 90 90 90 93 93 - 93 93 93 96 96 96 99 99 99 99 99 102 102 102 105 105 105 108 108 - 108 108 108 111 111 111 114 114 114 109 109 106 106 106 100 100 100 98 98 - 98 95 95 95 89 89 89 87 87 87 84 84 84 78 78 78 76 76 76 - 73 73 73 54 36 18 0 255 4 diff --git a/model/aux/idl_twist/palettes/doppler2.ct b/model/aux/idl_twist/palettes/doppler2.ct deleted file mode 100755 index 05f08e60b..000000000 --- a/model/aux/idl_twist/palettes/doppler2.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 19 38 57 76 96 115 134 153 172 192 193 194 196 197 199 194 190 186 - 182 178 174 169 165 161 157 153 149 145 140 136 132 128 124 120 116 111 107 - 103 99 95 91 87 82 78 74 70 66 62 58 53 49 45 41 37 33 29 - 24 20 16 12 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 - 34 41 48 55 62 68 75 82 89 96 103 110 117 124 130 137 144 151 158 - 165 172 179 186 192 199 206 213 220 227 234 241 248 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 213 - 0 14 29 44 59 74 88 103 118 133 148 118 89 60 31 2 2 3 4 - 5 5 6 7 8 8 9 10 11 11 12 13 14 14 15 16 17 17 18 - 19 20 20 21 22 23 23 24 25 26 26 27 28 29 29 30 31 32 32 - 33 34 35 35 36 37 38 41 44 47 50 53 57 60 63 66 69 72 76 - 79 82 85 88 91 95 98 101 104 107 110 114 117 120 123 126 129 133 136 - 139 142 145 149 152 155 158 161 164 168 171 174 177 180 183 187 190 193 196 - 199 202 206 209 212 215 218 221 225 228 231 234 237 241 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 252 250 248 246 244 - 242 240 237 235 233 231 229 227 225 222 220 218 216 214 212 210 207 205 203 - 201 199 197 195 192 190 188 186 184 182 180 177 175 173 171 169 167 165 161 - 153 148 144 131 127 123 119 110 106 102 97 89 85 80 76 63 59 55 51 - 42 38 34 29 21 17 12 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 139 - 0 23 47 71 95 119 143 167 191 215 239 242 245 248 251 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 254 254 254 254 253 253 253 253 252 252 252 252 - 251 251 251 251 251 250 250 250 250 249 249 249 249 248 248 248 248 247 247 - 247 247 247 246 246 246 246 245 245 245 245 244 244 244 244 243 243 243 243 - 243 242 242 242 242 241 241 241 241 240 240 240 240 240 106 103 100 97 94 - 91 88 85 83 80 77 74 71 68 65 63 60 57 54 51 48 45 42 40 - 37 34 31 28 25 22 20 17 14 11 8 5 2 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 45 diff --git a/model/aux/idl_twist/palettes/doppler3.ct b/model/aux/idl_twist/palettes/doppler3.ct deleted file mode 100755 index c5ca6f8a5..000000000 --- a/model/aux/idl_twist/palettes/doppler3.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 127 130 133 137 140 144 147 150 154 157 161 164 168 171 174 178 181 185 - 188 192 192 193 194 194 196 196 197 197 199 199 194 194 190 190 186 186 182 - 182 178 178 174 174 169 169 165 161 161 157 157 153 153 149 149 145 145 140 - 140 136 136 132 132 128 128 124 124 120 120 116 111 111 107 107 103 103 99 - 99 95 95 91 91 87 87 82 82 78 78 74 74 70 70 66 62 53 45 - 37 24 16 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 - 34 41 48 55 62 68 75 82 89 96 103 110 117 124 130 137 144 151 158 - 165 172 179 186 192 199 206 213 220 227 234 241 248 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 213 - 0 127 128 129 130 131 132 133 134 135 136 138 139 140 141 142 143 144 145 - 146 148 148 118 89 89 60 60 31 31 2 2 2 2 3 3 4 4 5 - 5 5 5 6 6 7 7 8 8 8 9 9 10 10 11 11 11 11 12 - 12 13 13 14 14 14 14 15 15 16 16 17 17 17 18 18 19 19 20 - 20 20 20 21 21 22 22 23 23 23 23 24 24 25 25 26 26 28 29 - 31 33 35 36 38 47 53 60 66 76 82 88 95 104 110 117 123 133 139 - 145 152 161 168 174 180 190 196 202 209 218 225 231 241 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 252 250 248 246 244 - 242 240 237 235 233 231 229 227 225 222 220 218 216 214 212 210 207 205 203 - 201 199 197 195 192 190 188 186 184 182 180 177 175 173 171 169 167 165 161 - 153 148 144 131 127 123 119 110 106 102 97 89 85 80 76 63 59 55 51 - 42 38 34 29 21 17 12 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 139 - 0 127 132 138 144 150 156 162 168 174 180 185 191 197 203 209 215 221 227 - 233 239 239 242 245 245 248 248 251 251 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 254 253 253 252 252 251 251 250 250 249 249 248 247 247 - 247 246 245 245 244 244 243 243 242 242 241 241 240 240 106 103 100 97 94 - 91 88 85 83 80 77 74 71 68 65 63 60 57 54 51 48 45 42 40 - 37 34 31 28 25 22 20 17 14 11 8 5 2 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 45 diff --git a/model/aux/idl_twist/palettes/doppler4.ct b/model/aux/idl_twist/palettes/doppler4.ct deleted file mode 100755 index e34992fa8..000000000 --- a/model/aux/idl_twist/palettes/doppler4.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 140 141 142 144 145 147 148 150 151 153 154 155 157 158 160 161 163 164 - 166 167 169 170 171 173 174 176 177 179 180 182 183 185 185 188 188 192 192 - 193 194 196 197 199 199 194 190 186 182 182 178 174 169 165 161 157 153 153 - 149 145 140 136 132 132 128 124 120 116 111 107 103 99 99 95 91 87 82 - 78 74 74 70 62 53 37 16 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 - 34 41 48 55 62 68 75 82 89 96 103 110 117 124 130 137 144 151 158 - 165 172 179 186 192 199 206 213 220 227 234 241 248 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 213 - 0 140 140 140 140 140 140 140 141 141 141 141 141 141 142 142 142 142 142 - 142 143 143 143 143 143 143 144 144 144 144 144 144 145 145 146 146 148 148 - 118 89 60 31 2 2 2 3 4 5 5 5 6 7 8 8 9 10 10 - 11 11 12 13 14 14 14 15 16 17 17 18 19 20 20 20 21 22 23 - 23 24 24 25 26 28 31 35 38 38 47 47 53 60 60 66 76 76 82 - 88 88 95 104 104 110 117 117 123 133 133 139 139 145 152 152 161 168 168 - 174 180 180 190 196 196 202 209 209 218 225 225 231 241 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 252 250 248 246 244 - 242 240 237 235 233 231 229 227 225 222 220 218 216 214 212 210 207 205 203 - 201 199 197 195 192 190 188 186 184 182 180 177 175 173 171 169 167 165 161 - 153 148 144 131 127 123 119 110 106 102 97 89 85 80 76 63 59 55 51 - 42 38 34 29 21 17 12 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 139 - 0 140 142 145 148 151 154 156 159 162 165 168 170 173 176 179 182 184 187 - 190 193 196 198 201 204 207 210 212 215 218 221 224 227 227 233 233 239 239 - 242 245 248 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 254 254 253 253 253 252 252 252 251 - 251 251 250 250 250 249 249 249 248 247 247 247 247 247 246 246 245 245 245 - 244 244 244 243 243 243 242 242 242 241 241 241 240 240 106 103 100 97 94 - 91 88 85 83 80 77 74 71 68 65 63 60 57 54 51 48 45 42 40 - 37 34 31 28 25 22 20 17 14 11 8 5 2 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 45 diff --git a/model/aux/idl_twist/palettes/doppler4_inv.ct b/model/aux/idl_twist/palettes/doppler4_inv.ct deleted file mode 100755 index b4d01461c..000000000 --- a/model/aux/idl_twist/palettes/doppler4_inv.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 248 248 248 241 241 234 234 234 227 227 220 220 213 213 213 - 206 206 199 199 192 192 192 186 179 172 165 158 158 144 137 130 124 117 103 - 103 96 89 82 68 62 55 55 48 41 27 20 13 6 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 37 70 74 87 99 99 99 103 107 111 116 120 124 128 128 132 132 - 136 140 145 149 153 153 153 157 161 165 169 174 178 182 182 186 186 190 194 - 199 199 197 196 194 193 192 192 188 188 188 185 185 183 182 180 179 177 176 - 174 173 171 171 170 169 167 166 164 163 161 160 158 157 155 154 154 153 151 - 150 148 147 145 144 142 141 140 213 - 0 0 0 0 0 0 0 0 0 17 34 42 59 97 97 97 110 110 119 - 119 123 123 127 131 131 144 148 148 148 148 153 161 165 167 169 169 171 173 - 177 177 182 184 186 188 188 192 197 197 203 203 207 210 212 214 214 218 222 - 225 227 227 229 231 231 233 235 237 237 237 240 240 240 242 244 246 246 248 - 250 252 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 241 241 241 231 231 - 225 225 225 225 225 218 218 209 209 209 209 209 202 202 196 196 196 196 196 - 190 190 180 180 180 180 180 174 174 168 161 145 139 123 110 104 88 76 60 - 47 38 31 25 24 22 20 20 20 19 18 17 17 16 15 14 14 14 14 - 13 12 11 11 10 10 10 9 8 8 7 6 5 5 5 4 4 3 2 - 2 2 31 60 89 118 148 148 146 146 146 145 145 144 144 144 144 144 144 - 143 143 143 143 143 143 143 142 142 142 142 142 142 141 141 141 141 141 141 - 141 140 140 140 140 140 140 140 139 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 2 2 2 5 5 8 8 8 11 11 14 14 17 17 17 - 20 20 22 22 25 25 25 28 31 34 37 40 40 45 48 51 54 57 63 - 63 65 68 71 77 80 83 83 85 88 94 97 100 103 240 240 240 240 240 - 241 241 241 241 241 241 241 242 242 242 242 242 242 242 243 243 243 243 243 - 243 243 244 244 244 244 244 244 244 245 245 247 247 248 249 250 251 252 253 - 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 251 248 245 242 239 239 233 233 233 227 227 224 221 218 215 212 210 - 207 204 201 201 198 196 193 190 187 184 182 179 176 173 170 168 168 165 162 - 159 156 154 151 148 145 142 140 45 diff --git a/model/aux/idl_twist/palettes/doppler5.ct b/model/aux/idl_twist/palettes/doppler5.ct deleted file mode 100755 index cbc184e65..000000000 --- a/model/aux/idl_twist/palettes/doppler5.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 141 142 144 145 146 148 149 150 152 153 154 156 157 158 160 161 162 164 - 165 166 168 169 170 172 173 174 176 177 178 180 181 182 184 185 186 188 189 - 190 192 193 194 196 197 199 199 194 190 186 186 182 182 178 174 169 165 161 - 157 153 153 153 149 145 140 136 132 132 128 128 124 120 116 111 107 103 99 - 99 99 87 74 70 37 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 41 48 - 55 55 62 68 82 89 96 103 103 117 124 130 137 144 158 158 165 172 179 - 186 192 192 192 199 199 206 206 213 213 213 213 220 220 220 227 227 227 234 - 234 234 234 241 241 241 248 248 248 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 128 - 0 140 140 140 140 141 141 141 141 141 142 142 142 142 142 143 143 143 143 - 143 144 144 144 144 144 145 145 145 145 145 146 146 146 146 146 147 147 147 - 147 148 118 89 60 31 2 2 2 3 4 4 5 5 5 6 7 8 8 - 9 10 10 10 11 11 12 13 14 14 14 14 15 16 17 17 18 19 20 - 20 20 22 24 25 31 38 47 60 76 88 104 110 123 139 145 161 168 174 - 174 180 180 180 180 180 190 190 196 196 196 196 196 202 202 209 209 209 209 - 209 218 218 225 225 225 225 225 231 231 241 241 241 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 250 246 244 240 240 237 235 231 229 - 227 225 222 218 214 214 212 210 207 203 203 197 197 192 188 188 186 186 184 - 182 177 177 177 173 173 171 169 169 169 167 167 165 161 161 153 148 148 148 - 148 144 131 131 127 123 123 119 119 110 110 97 97 97 59 42 34 17 0 - 0 0 0 0 0 0 0 0 128 - 0 142 145 147 150 152 155 157 160 162 165 167 170 173 175 178 180 183 185 - 188 190 193 195 198 200 203 206 208 211 213 216 218 221 223 226 228 231 233 - 236 239 242 245 248 251 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 254 253 252 251 250 249 248 247 247 245 245 244 - 244 244 244 244 244 244 243 243 243 243 243 243 243 242 242 242 242 242 242 - 242 241 241 241 241 241 241 241 240 240 240 240 240 103 100 97 94 88 85 - 83 83 80 77 71 68 65 63 63 57 54 51 48 45 40 40 37 34 31 - 28 25 25 25 22 22 20 20 17 17 17 17 14 14 14 11 11 11 8 - 8 8 8 5 5 5 2 2 2 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 128 diff --git a/model/aux/idl_twist/palettes/doppler5_inv.ct b/model/aux/idl_twist/palettes/doppler5_inv.ct deleted file mode 100755 index 4e44070a6..000000000 --- a/model/aux/idl_twist/palettes/doppler5_inv.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 248 - 248 248 241 241 241 234 234 234 234 227 227 227 220 220 220 213 213 213 213 - 206 206 199 199 192 192 192 186 179 172 165 158 158 144 137 130 124 117 103 - 103 96 89 82 68 62 55 55 48 41 27 20 13 6 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 37 70 74 87 99 99 99 103 107 111 116 120 124 128 128 132 132 - 136 140 145 149 153 153 153 157 161 165 169 174 178 182 182 186 186 190 194 - 199 199 197 196 194 193 192 190 189 188 186 185 184 182 181 180 178 177 176 - 174 173 172 170 169 168 166 165 164 162 161 160 158 157 156 154 153 152 150 - 149 148 146 145 144 142 141 140 128 - 0 0 0 0 0 0 0 0 0 17 34 42 59 97 97 97 110 110 119 - 119 123 123 127 131 131 144 148 148 148 148 153 161 161 165 167 167 169 169 - 169 171 173 173 177 177 177 182 184 186 186 188 188 192 197 197 203 203 207 - 210 212 214 214 218 222 225 227 229 231 235 237 240 240 244 246 250 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 241 241 241 231 231 - 225 225 225 225 225 218 218 209 209 209 209 209 202 202 196 196 196 196 196 - 190 190 180 180 180 180 180 174 174 168 161 145 139 123 110 104 88 76 60 - 47 38 31 25 24 22 20 20 20 19 18 17 17 16 15 14 14 14 14 - 13 12 11 11 10 10 10 9 8 8 7 6 5 5 5 4 4 3 2 - 2 2 31 60 89 118 148 147 147 147 147 146 146 146 146 146 145 145 145 - 145 145 144 144 144 144 144 143 143 143 143 143 142 142 142 142 142 141 141 - 141 141 141 140 140 140 140 140 128 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 - 2 2 5 5 5 8 8 8 8 11 11 11 14 14 14 17 17 17 17 - 20 20 22 22 25 25 25 28 31 34 37 40 40 45 48 51 54 57 63 - 63 65 68 71 77 80 83 83 85 88 94 97 100 103 240 240 240 240 240 - 241 241 241 241 241 241 241 242 242 242 242 242 242 242 243 243 243 243 243 - 243 243 244 244 244 244 244 244 244 245 245 247 247 248 249 250 251 252 253 - 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 251 248 245 242 239 236 233 231 228 226 223 221 218 216 213 211 208 - 206 203 200 198 195 193 190 188 185 183 180 178 175 173 170 167 165 162 160 - 157 155 152 150 147 145 142 140 128 diff --git a/model/aux/idl_twist/palettes/doppler5w.ct b/model/aux/idl_twist/palettes/doppler5w.ct deleted file mode 100755 index f72a09be0..000000000 --- a/model/aux/idl_twist/palettes/doppler5w.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 255 142 144 145 146 148 149 150 152 153 154 156 157 158 160 161 162 164 - 165 166 168 169 170 172 173 174 176 177 178 180 181 182 184 185 186 188 189 - 190 192 193 194 196 197 199 199 194 190 186 186 182 182 178 174 169 165 161 - 157 153 153 153 149 145 140 136 132 132 128 128 124 120 116 111 107 103 99 - 99 99 87 74 70 37 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 41 48 - 55 55 62 68 82 89 96 103 103 117 124 130 137 144 158 158 165 172 179 - 186 192 192 192 199 199 206 206 213 213 213 213 220 220 220 227 227 227 234 - 234 234 234 241 241 241 248 248 248 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 255 140 140 140 141 141 141 141 141 142 142 142 142 142 143 143 143 143 - 143 144 144 144 144 144 145 145 145 145 145 146 146 146 146 146 147 147 147 - 147 148 118 89 60 31 2 2 2 3 4 4 5 5 5 6 7 8 8 - 9 10 10 10 11 11 12 13 14 14 14 14 15 16 17 17 18 19 20 - 20 20 22 24 25 31 38 47 60 76 88 104 110 123 139 145 161 168 174 - 174 180 180 180 180 180 190 190 196 196 196 196 196 202 202 209 209 209 209 - 209 218 218 225 225 225 225 225 231 231 241 241 241 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 250 246 244 240 240 237 235 231 229 - 227 225 222 218 214 214 212 210 207 203 203 197 197 192 188 188 186 186 184 - 182 177 177 177 173 173 171 169 169 169 167 167 165 161 161 153 148 148 148 - 148 144 131 131 127 123 123 119 119 110 110 97 97 97 59 42 34 17 0 - 0 0 0 0 0 0 0 0 0 - 0 255 145 147 150 152 155 157 160 162 165 167 170 173 175 178 180 183 185 - 188 190 193 195 198 200 203 206 208 211 213 216 218 221 223 226 228 231 233 - 236 239 242 245 248 251 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 254 253 252 251 250 249 248 247 247 245 245 244 - 244 244 244 244 244 244 243 243 243 243 243 243 243 242 242 242 242 242 242 - 242 241 241 241 241 241 241 241 240 240 240 240 240 103 100 97 94 88 85 - 83 83 80 77 71 68 65 63 63 57 54 51 48 45 40 40 37 34 31 - 28 25 25 25 22 22 20 20 17 17 17 17 14 14 14 11 11 11 8 - 8 8 8 5 5 5 2 2 2 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/doppler6.ct b/model/aux/idl_twist/palettes/doppler6.ct deleted file mode 100755 index d83ba716d..000000000 --- a/model/aux/idl_twist/palettes/doppler6.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 200 190 183 177 170 164 158 161 163 165 167 170 172 174 176 179 181 183 - 185 188 190 192 194 197 199 199 199 194 190 186 186 186 182 182 182 178 174 - 169 169 165 161 157 157 153 153 153 153 149 145 140 140 136 132 132 128 128 - 128 124 120 116 111 107 103 99 99 99 87 74 70 37 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 41 48 - 55 55 62 68 82 89 96 103 103 117 124 130 137 144 158 158 165 172 179 - 186 192 192 192 199 199 206 206 213 213 213 213 220 220 220 227 227 227 234 - 234 234 234 241 241 241 248 248 248 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 200 190 176 163 150 137 124 119 113 108 102 97 91 86 80 75 69 64 - 58 53 47 42 36 31 2 2 2 2 3 4 4 4 5 5 5 5 6 - 7 7 8 8 9 9 10 10 10 10 11 11 12 12 13 14 14 14 14 - 14 15 16 17 17 18 19 20 20 20 22 24 25 31 38 47 60 76 88 - 104 110 123 139 145 161 168 174 174 180 180 180 180 180 190 190 190 196 196 - 196 196 196 196 196 202 202 202 209 209 209 209 209 209 209 218 218 218 225 - 225 225 225 225 225 225 231 231 231 241 241 241 241 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 250 246 244 240 240 237 235 231 229 - 227 225 222 218 214 214 212 210 207 203 203 197 197 192 188 188 186 186 184 - 182 177 177 177 173 173 171 169 169 169 167 167 165 161 161 153 148 148 148 - 148 144 131 131 127 123 123 119 119 110 110 97 97 97 59 42 34 17 0 - 0 0 0 0 0 0 0 0 0 - 0 200 190 187 184 181 178 175 179 184 188 193 197 202 206 210 215 219 224 - 228 233 237 242 246 251 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 253 252 251 - 250 249 248 247 247 245 245 244 244 244 244 244 244 244 243 243 243 243 243 - 243 243 243 243 243 242 242 242 242 242 242 242 242 242 242 241 241 241 241 - 241 241 241 241 241 241 240 240 240 240 240 240 240 103 100 97 94 88 85 - 83 83 80 77 71 68 65 63 63 57 54 51 48 45 40 40 37 34 31 - 28 25 25 25 22 22 20 20 17 17 17 17 14 14 14 11 11 11 8 - 8 8 8 5 5 5 2 2 2 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/doppler6w.ct b/model/aux/idl_twist/palettes/doppler6w.ct deleted file mode 100755 index 494882afe..000000000 --- a/model/aux/idl_twist/palettes/doppler6w.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 255 190 183 177 170 164 158 161 163 165 167 170 172 174 176 179 181 183 - 185 188 190 192 194 197 199 199 199 194 190 186 186 186 182 182 182 178 174 - 169 169 165 161 157 157 153 153 153 153 149 145 140 140 136 132 132 128 128 - 128 124 120 116 111 107 103 99 99 99 87 74 70 37 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 41 48 - 55 55 62 68 82 89 96 103 103 117 124 130 137 144 158 158 165 172 179 - 186 192 192 192 199 199 206 206 213 213 213 213 220 220 220 227 227 227 234 - 234 234 234 241 241 241 248 248 248 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 255 190 176 163 150 137 124 119 113 108 102 97 91 86 80 75 69 64 - 58 53 47 42 36 31 2 2 2 2 3 4 4 4 5 5 5 5 6 - 7 7 8 8 9 9 10 10 10 10 11 11 12 12 13 14 14 14 14 - 14 15 16 17 17 18 19 20 20 20 22 24 25 31 38 47 60 76 88 - 104 110 123 139 145 161 168 174 174 180 180 180 180 180 190 190 190 196 196 - 196 196 196 196 196 202 202 202 209 209 209 209 209 209 209 218 218 218 225 - 225 225 225 225 225 225 231 231 231 241 241 241 241 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 250 246 244 240 240 237 235 231 229 - 227 225 222 218 214 214 212 210 207 203 203 197 197 192 188 188 186 186 184 - 182 177 177 177 173 173 171 169 169 169 167 167 165 161 161 153 148 148 148 - 148 144 131 131 127 123 123 119 119 110 110 97 97 97 59 42 34 17 0 - 0 0 0 0 0 0 0 0 0 - 0 255 190 187 184 181 178 175 179 184 188 193 197 202 206 210 215 219 224 - 228 233 237 242 246 251 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 253 252 251 - 250 249 248 247 247 245 245 244 244 244 244 244 244 244 243 243 243 243 243 - 243 243 243 243 243 242 242 242 242 242 242 242 242 242 242 241 241 241 241 - 241 241 241 241 241 241 240 240 240 240 240 240 240 103 100 97 94 88 85 - 83 83 80 77 71 68 65 63 63 57 54 51 48 45 40 40 37 34 31 - 28 25 25 25 22 22 20 20 17 17 17 17 14 14 14 11 11 11 8 - 8 8 8 5 5 5 2 2 2 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/doppler7.ct b/model/aux/idl_twist/palettes/doppler7.ct deleted file mode 100755 index 8a89158ef..000000000 --- a/model/aux/idl_twist/palettes/doppler7.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 200 190 190 190 190 190 183 183 183 183 177 177 177 177 170 170 170 170 - 164 164 164 164 164 158 158 158 158 161 161 161 161 163 163 163 163 165 165 - 165 165 167 170 172 176 179 183 185 188 192 194 199 199 199 190 186 186 182 - 182 178 174 169 165 161 157 157 153 153 153 153 149 145 140 140 136 132 132 - 128 128 128 124 120 116 111 107 103 99 99 99 87 74 70 37 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 41 - 48 55 55 62 68 82 89 96 103 103 117 124 130 137 144 158 158 165 172 - 179 186 192 192 192 199 199 206 206 213 213 213 213 220 220 220 227 227 227 - 234 234 234 234 241 241 241 248 248 248 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 200 190 190 190 190 190 176 176 176 176 163 163 163 163 150 150 150 150 - 137 137 137 137 137 124 124 124 124 119 119 119 119 113 113 113 113 108 108 - 108 108 102 97 91 80 75 64 58 53 42 36 2 2 2 3 4 4 5 - 5 5 6 7 8 8 9 9 10 10 10 10 11 11 12 12 13 14 14 - 14 14 14 15 16 17 17 18 19 20 20 20 22 24 25 31 38 47 60 - 76 88 104 110 123 139 145 168 174 180 180 180 190 190 196 196 196 202 202 - 209 209 209 209 218 225 225 225 225 231 231 241 241 241 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 250 246 244 240 240 237 235 231 - 229 225 222 218 214 214 212 210 207 203 203 197 197 192 188 188 186 186 184 - 182 177 177 177 173 173 171 169 169 169 167 167 165 161 161 153 148 148 148 - 148 144 131 131 127 123 123 119 119 110 110 97 97 97 59 42 34 17 0 - 0 0 0 0 0 0 0 0 0 - 0 200 190 190 190 190 190 187 187 187 187 184 184 184 184 181 181 181 181 - 178 178 178 178 178 175 175 175 175 179 179 179 179 184 184 184 184 188 188 - 188 188 193 197 202 210 215 224 228 233 242 246 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 253 - 252 251 250 249 248 247 247 245 244 244 244 244 243 243 243 243 243 242 242 - 242 242 242 242 241 241 241 241 241 240 240 240 240 240 103 100 97 94 88 - 85 83 83 80 77 71 68 65 63 63 57 54 51 48 45 40 40 37 34 - 31 28 25 25 25 22 22 20 20 17 17 17 17 14 14 14 11 11 11 - 8 8 8 8 5 5 5 2 2 2 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/doppler7bw.ct b/model/aux/idl_twist/palettes/doppler7bw.ct deleted file mode 100755 index d0bdd80a9..000000000 --- a/model/aux/idl_twist/palettes/doppler7bw.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 200 190 190 190 190 190 183 183 183 183 177 177 177 177 170 170 170 170 - 164 164 164 164 164 158 158 158 158 161 161 161 161 163 163 163 163 165 165 - 165 165 167 170 172 176 179 183 185 188 192 194 199 199 199 190 186 186 182 - 182 178 174 169 165 161 157 157 153 153 153 153 149 145 140 140 136 132 132 - 128 128 128 124 120 116 111 107 103 99 99 99 87 74 70 37 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 41 - 48 55 55 62 68 82 89 96 103 103 117 124 130 137 144 158 158 165 172 - 179 186 192 192 192 199 199 206 206 213 213 213 213 220 220 220 227 227 227 - 234 234 234 234 241 241 241 248 248 248 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 0 - 255 200 190 190 190 190 190 176 176 176 176 163 163 163 163 150 150 150 150 - 137 137 137 137 137 124 124 124 124 119 119 119 119 113 113 113 113 108 108 - 108 108 102 97 91 80 75 64 58 53 42 36 2 2 2 3 4 4 5 - 5 5 6 7 8 8 9 9 10 10 10 10 11 11 12 12 13 14 14 - 14 14 14 15 16 17 17 18 19 20 20 20 22 24 25 31 38 47 60 - 76 88 104 110 123 139 145 168 174 180 180 180 190 190 196 196 196 202 202 - 209 209 209 209 218 225 225 225 225 231 231 241 241 241 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 250 246 244 240 240 237 235 231 - 229 225 222 218 214 214 212 210 207 203 203 197 197 192 188 188 186 186 184 - 182 177 177 177 173 173 171 169 169 169 167 167 165 161 161 153 148 148 148 - 148 144 131 131 127 123 123 119 119 110 110 97 97 97 59 42 34 17 0 - 0 0 0 0 0 0 0 0 0 - 255 200 190 190 190 190 190 187 187 187 187 184 184 184 184 181 181 181 181 - 178 178 178 178 178 175 175 175 175 179 179 179 179 184 184 184 184 188 188 - 188 188 193 197 202 210 215 224 228 233 242 246 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 253 - 252 251 250 249 248 247 247 245 244 244 244 244 243 243 243 243 243 242 242 - 242 242 242 242 241 241 241 241 241 240 240 240 240 240 103 100 97 94 88 - 85 83 83 80 77 71 68 65 63 63 57 54 51 48 45 40 40 37 34 - 31 28 25 25 25 22 22 20 20 17 17 17 17 14 14 14 11 11 11 - 8 8 8 8 5 5 5 2 2 2 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/doppler7bw2.ct b/model/aux/idl_twist/palettes/doppler7bw2.ct deleted file mode 100755 index 7fd45d5e5..000000000 --- a/model/aux/idl_twist/palettes/doppler7bw2.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 200 206 190 190 190 190 183 183 183 183 177 177 177 177 170 170 170 170 - 164 164 164 164 164 158 158 158 158 161 161 161 161 163 163 163 163 165 165 - 165 165 167 170 172 176 179 183 185 188 192 194 199 199 199 190 186 186 182 - 182 178 174 169 165 161 157 157 153 153 153 153 149 145 140 140 136 132 132 - 128 128 128 124 120 116 111 107 103 99 99 99 87 74 70 37 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 27 41 - 48 55 55 62 68 82 89 96 103 103 117 124 130 137 144 158 158 165 172 - 179 186 192 192 192 199 199 206 206 213 213 213 213 220 220 220 227 227 227 - 234 234 234 234 241 241 241 248 248 248 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 0 - 255 200 147 190 190 190 190 176 176 176 176 163 163 163 163 150 150 150 150 - 137 137 137 137 137 124 124 124 124 119 119 119 119 113 113 113 113 108 108 - 108 108 102 97 91 80 75 64 58 53 42 36 2 2 2 3 4 4 5 - 5 5 6 7 8 8 9 9 10 10 10 10 11 11 12 12 13 14 14 - 14 14 14 15 16 17 17 18 19 20 20 20 22 24 25 31 38 47 60 - 76 88 104 110 123 139 145 168 174 180 180 180 190 190 196 196 196 202 202 - 209 209 209 209 218 225 225 225 225 231 231 241 241 241 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 250 246 244 240 240 237 235 231 - 229 225 222 218 214 214 212 210 207 203 203 197 197 192 188 188 186 186 184 - 182 177 177 177 173 173 171 169 169 169 167 167 165 161 161 153 148 148 148 - 148 144 131 131 127 123 123 119 119 110 110 97 97 97 59 42 34 17 0 - 0 0 0 0 0 0 0 0 0 - 255 200 106 190 190 190 190 187 187 187 187 184 184 184 184 181 181 181 181 - 178 178 178 178 178 175 175 175 175 179 179 179 179 184 184 184 184 188 188 - 188 188 193 197 202 210 215 224 228 233 242 246 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 253 - 252 251 250 249 248 247 247 245 244 244 244 244 243 243 243 243 243 242 242 - 242 242 242 242 241 241 241 241 241 240 240 240 240 240 103 100 97 94 88 - 85 83 83 80 77 71 68 65 63 63 57 54 51 48 45 40 40 37 34 - 31 28 25 25 25 22 22 20 20 17 17 17 17 14 14 14 11 11 11 - 8 8 8 8 5 5 5 2 2 2 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/doppler_modified_land.ct b/model/aux/idl_twist/palettes/doppler_modified_land.ct deleted file mode 100755 index 91d5c657c..000000000 --- a/model/aux/idl_twist/palettes/doppler_modified_land.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 224 220 216 212 208 204 200 197 193 189 185 181 177 173 170 169 168 168 - 167 167 166 166 165 164 164 163 163 162 162 161 161 163 163 163 163 165 165 - 165 165 167 170 172 176 179 183 185 188 192 193 195 197 199 194 189 185 180 - 175 171 166 161 157 152 148 143 138 134 129 124 120 115 111 106 101 97 92 - 87 83 78 74 69 64 60 55 50 46 41 37 32 27 23 18 13 9 4 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 20 28 35 - 43 50 57 65 72 80 87 94 102 109 117 120 124 128 132 136 140 144 148 - 151 155 159 163 167 171 175 179 182 186 190 194 198 202 206 210 213 217 221 - 225 229 233 237 241 241 241 241 242 242 243 243 244 244 245 245 245 246 246 - 247 247 248 248 249 249 250 250 250 251 251 252 252 253 253 254 254 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 0 114 0 - 255 224 218 213 208 202 197 192 187 181 176 171 165 160 155 150 148 146 144 - 142 140 138 136 134 132 130 128 126 124 122 120 119 113 113 113 113 108 108 - 108 108 102 97 91 80 75 64 58 53 42 32 22 12 2 3 5 7 8 - 10 12 14 15 17 19 20 22 24 26 27 29 31 32 34 36 38 39 41 - 43 45 46 48 50 51 53 55 57 58 60 62 63 65 67 69 70 72 74 - 76 88 92 97 102 107 112 117 122 127 132 137 142 147 152 157 162 166 171 - 176 181 186 191 196 201 206 211 216 221 226 231 236 241 232 233 235 236 238 - 239 241 242 244 245 247 248 250 251 253 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 252 250 248 246 243 241 239 237 234 232 230 228 226 - 223 221 219 217 214 212 210 208 206 203 201 199 197 194 192 190 188 186 184 - 181 179 176 174 171 169 167 164 162 159 157 155 152 150 147 145 143 140 138 - 135 133 131 131 127 123 123 119 119 110 110 97 89 82 74 67 59 52 44 - 37 29 22 14 7 0 0 197 0 - 255 224 220 217 214 211 208 205 202 199 196 193 190 187 184 181 180 180 180 - 180 180 180 180 180 179 179 179 179 179 179 179 179 184 184 184 184 188 188 - 188 188 193 197 202 210 215 224 228 233 242 245 248 251 255 254 254 254 254 - 254 254 254 254 254 254 254 254 254 254 253 253 253 253 253 253 253 253 253 - 253 253 253 253 253 252 252 252 252 252 252 252 252 252 252 252 252 252 252 - 252 251 250 250 249 249 249 248 248 248 247 247 247 246 246 246 245 245 244 - 244 244 243 243 243 242 242 242 241 241 241 240 240 240 103 99 96 93 90 - 87 84 81 78 75 72 69 66 63 60 57 55 53 52 50 48 47 45 44 - 42 40 39 37 35 34 32 31 29 27 26 24 22 21 19 18 16 14 13 - 11 9 8 6 5 5 4 4 4 4 4 4 3 3 3 3 3 3 2 - 2 2 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 255 110 0 diff --git a/model/aux/idl_twist/palettes/doppler_modified_land_2.ct b/model/aux/idl_twist/palettes/doppler_modified_land_2.ct deleted file mode 100755 index ae0f4eb87..000000000 --- a/model/aux/idl_twist/palettes/doppler_modified_land_2.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 224 220 216 212 208 204 200 197 193 189 185 181 177 173 170 169 168 168 167 - 167 166 166 165 164 164 163 163 162 162 161 161 163 163 163 163 165 165 165 165 - 167 170 172 176 179 183 185 188 192 193 195 197 199 194 189 185 180 175 171 166 - 161 157 152 148 143 138 134 129 124 120 115 111 106 101 97 92 87 83 78 74 - 69 64 60 55 50 46 41 37 32 27 23 18 13 9 4 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 6 13 20 28 35 43 50 57 65 72 80 87 - 94 102 109 117 120 124 128 132 136 140 144 148 151 155 159 163 167 171 175 179 - 182 186 190 194 198 202 206 210 213 217 221 225 229 233 237 241 241 241 241 242 - 242 243 243 244 244 245 245 245 246 246 247 247 248 248 249 249 250 250 250 251 - 251 252 252 253 253 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 250 246 242 238 233 229 225 221 216 212 208 204 200 0 114 0 - 255 224 218 213 208 202 197 192 187 181 176 171 165 160 155 150 148 146 144 142 - 140 138 136 134 132 130 128 126 124 122 120 119 113 113 113 113 108 108 108 108 - 102 97 91 80 75 64 58 53 42 32 22 12 2 3 5 7 8 10 12 14 - 15 17 19 20 22 24 26 27 29 31 32 34 36 38 39 41 43 45 46 48 - 50 51 53 55 57 58 60 62 63 65 67 69 70 72 74 76 88 92 97 102 - 107 112 117 122 127 132 137 142 147 152 157 162 166 171 176 181 186 191 196 201 - 206 211 216 221 226 231 236 241 232 233 235 236 238 239 241 242 244 245 247 248 - 250 251 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 252 250 248 - 246 243 241 239 237 234 232 230 228 226 223 221 219 217 214 212 210 208 206 203 - 201 199 197 194 192 190 188 186 184 181 179 176 174 171 169 167 164 162 159 157 - 155 152 150 147 139 132 124 117 109 102 95 84 73 63 52 42 31 21 10 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 0 - 255 224 220 217 214 211 208 205 202 199 196 193 190 187 184 181 180 180 180 180 - 180 180 180 180 179 179 179 179 179 179 179 179 184 184 184 184 188 188 188 188 - 193 197 202 210 215 224 228 233 242 245 248 251 255 254 254 254 254 254 254 254 - 254 254 254 254 254 254 254 253 253 253 253 253 253 253 253 253 253 253 253 253 - 253 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 251 250 250 249 - 249 249 248 248 248 247 247 247 246 246 246 245 245 244 244 244 243 243 243 242 - 242 242 241 241 241 240 240 240 103 99 96 93 90 87 84 81 78 75 72 69 - 66 63 60 57 55 53 52 50 48 47 45 44 42 40 39 37 35 34 32 31 - 29 27 26 24 22 21 19 18 16 14 13 11 9 8 6 5 5 4 4 4 - 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 255 110 0 diff --git a/model/aux/idl_twist/palettes/doppler_modified_land_2_eps.ct b/model/aux/idl_twist/palettes/doppler_modified_land_2_eps.ct deleted file mode 100644 index ee3e5f744..000000000 --- a/model/aux/idl_twist/palettes/doppler_modified_land_2_eps.ct +++ /dev/null @@ -1,39 +0,0 @@ - 0 224 220 216 212 208 204 200 197 193 189 185 181 177 173 170 169 168 168 167 - 167 166 166 165 164 164 163 163 162 162 161 161 163 163 163 163 165 165 165 165 - 167 170 172 176 179 183 185 188 192 193 195 197 199 194 189 185 180 175 171 166 - 161 157 152 148 143 138 134 129 124 120 115 111 106 101 97 92 87 83 78 74 - 69 64 60 55 50 46 41 37 32 27 23 18 13 9 4 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 6 13 20 28 35 43 50 57 65 72 80 87 - 94 102 109 117 120 124 128 132 136 140 144 148 151 155 159 163 167 171 175 179 - 182 186 190 194 198 202 206 210 213 217 221 225 229 233 237 241 241 241 241 242 - 242 243 243 244 244 245 245 245 246 246 247 247 248 248 249 249 250 250 250 251 - 251 252 252 253 253 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 250 246 242 238 233 229 225 221 216 212 208 204 200 153 0 255 - 0 224 218 213 208 202 197 192 187 181 176 171 165 160 155 150 148 146 144 142 - 140 138 136 134 132 130 128 126 124 122 120 119 113 113 113 113 108 108 108 108 - 102 97 91 80 75 64 58 53 42 32 22 12 2 3 5 7 8 10 12 14 - 15 17 19 20 22 24 26 27 29 31 32 34 36 38 39 41 43 45 46 48 - 50 51 53 55 57 58 60 62 63 65 67 69 70 72 74 76 88 92 97 102 - 107 112 117 122 127 132 137 142 147 152 157 162 166 171 176 181 186 191 196 201 - 206 211 216 221 226 231 236 241 232 233 235 236 238 239 241 242 244 245 247 248 - 250 251 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 252 250 248 - 246 243 241 239 237 234 232 230 228 226 223 221 219 217 214 212 210 208 206 203 - 201 199 197 194 192 190 188 186 184 181 179 176 174 171 169 167 164 162 159 157 - 155 152 150 147 139 132 124 117 109 102 95 84 73 63 52 42 31 21 10 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 70 255 - 0 224 220 217 214 211 208 205 202 199 196 193 190 187 184 181 180 180 180 180 - 180 180 180 180 179 179 179 179 179 179 179 179 184 184 184 184 188 188 188 188 - 193 197 202 210 215 224 228 233 242 245 248 251 255 254 254 254 254 254 254 254 - 254 254 254 254 254 254 254 253 253 253 253 253 253 253 253 253 253 253 253 253 - 253 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 251 250 250 249 - 249 249 248 248 248 247 247 247 246 246 246 245 245 244 244 244 243 243 243 242 - 242 242 241 241 241 240 240 240 103 99 96 93 90 87 84 81 78 75 72 69 - 66 63 60 57 55 53 52 50 48 47 45 44 42 40 39 37 35 34 32 31 - 29 27 26 24 22 21 19 18 16 14 13 11 9 8 6 5 5 4 4 4 - 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 diff --git a/model/aux/idl_twist/palettes/e.ct b/model/aux/idl_twist/palettes/e.ct deleted file mode 100755 index 6192f4fb7..000000000 --- a/model/aux/idl_twist/palettes/e.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 255 255 223 223 199 199 174 174 150 125 125 101 101 77 77 60 60 46 - 46 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 - 8 8 21 21 25 25 25 33 33 46 46 46 46 55 67 67 67 67 76 - 76 76 76 80 80 93 93 93 101 101 114 114 114 114 123 131 131 131 131 - 140 140 153 153 153 153 161 169 169 169 169 182 182 187 187 187 199 199 208 - 208 208 208 221 221 229 229 229 242 242 246 246 246 246 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 255 255 188 188 157 157 125 125 94 62 62 31 31 0 0 0 0 0 - 0 0 0 0 29 29 55 55 89 89 114 144 144 174 174 174 174 182 182 - 195 195 203 216 216 220 220 229 229 242 242 242 250 250 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 242 242 242 - 233 233 221 221 221 221 216 208 208 208 208 195 195 187 187 187 187 174 165 - 165 165 165 161 161 148 148 148 140 140 127 127 127 127 119 119 110 110 110 - 102 102 89 89 89 89 80 80 72 72 72 59 59 55 55 55 55 42 42 - 34 34 34 0 0 0 0 0 0 - 0 255 255 245 245 235 235 225 225 215 205 205 195 195 186 186 214 214 232 - 232 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 242 242 233 - 233 220 220 212 199 199 199 199 191 191 187 187 174 165 165 152 152 144 144 - 135 135 135 127 127 114 114 106 106 97 97 84 84 80 67 67 59 59 59 - 59 46 46 46 38 38 25 25 25 25 21 21 12 12 12 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/fe.ct b/model/aux/idl_twist/palettes/fe.ct deleted file mode 100755 index 9a75ae86c..000000000 --- a/model/aux/idl_twist/palettes/fe.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 9 18 27 36 45 54 61 69 74 79 82 85 86 88 87 85 84 83 - 78 76 70 66 55 46 40 33 21 12 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 12 25 - 29 42 46 51 63 67 76 80 93 97 101 114 119 131 135 144 153 157 165 - 169 182 187 199 199 203 208 212 221 221 225 229 233 242 242 246 250 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 16 21 25 38 42 51 55 63 - 72 76 89 93 97 110 114 127 131 135 144 152 161 165 174 182 187 199 203 - 208 220 225 233 242 246 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 250 - 250 242 238 233 229 229 221 216 212 208 208 199 195 191 187 187 178 174 170 - 165 165 161 153 148 144 144 144 144 140 140 140 140 131 131 131 127 127 127 - 127 123 123 123 123 119 119 119 110 110 110 110 106 106 106 106 102 102 102 - 97 97 97 97 89 89 89 85 85 85 85 80 80 80 80 76 76 76 72 - 72 72 72 63 63 63 63 59 59 59 55 55 55 55 51 51 51 42 42 - 42 42 38 38 38 38 34 34 34 29 29 29 29 21 21 21 21 17 17 - 17 12 12 12 12 8 8 8 0 - 0 7 14 23 32 43 53 63 77 86 95 104 113 122 132 145 154 163 173 - 182 191 200 209 223 232 241 250 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 246 238 233 220 212 199 195 187 174 165 152 148 - 135 127 114 106 102 89 80 67 59 55 42 34 21 12 8 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/onr2000.ct b/model/aux/idl_twist/palettes/onr2000.ct deleted file mode 100755 index 04d9775cc..000000000 --- a/model/aux/idl_twist/palettes/onr2000.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 14 14 47 47 49 49 50 50 51 51 53 53 54 54 55 55 58 58 - 59 60 60 60 60 62 62 64 64 64 64 67 67 68 68 69 69 71 72 - 72 73 73 75 75 76 76 78 78 78 78 80 80 81 81 82 82 85 86 - 86 87 87 88 88 89 89 93 93 93 93 97 97 101 101 105 105 107 109 - 109 113 113 117 117 119 119 121 121 125 125 129 129 130 130 132 136 136 140 - 140 142 142 144 144 148 148 152 152 156 156 156 156 160 160 164 166 166 168 - 168 168 168 167 167 165 165 165 165 163 163 162 162 161 158 158 158 158 157 - 157 148 148 140 140 140 140 124 124 124 124 107 107 91 91 91 74 74 74 - 74 66 66 49 49 41 41 33 33 25 25 25 25 46 67 67 67 67 89 - 89 89 89 89 89 106 106 120 120 133 133 160 174 174 174 174 201 201 201 - 201 228 228 228 228 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 123 123 255 255 - 0 144 144 175 175 176 176 177 177 178 178 180 180 181 181 182 182 184 184 - 185 186 186 186 186 188 188 190 190 190 190 192 192 193 193 194 194 196 197 - 197 198 198 199 199 200 200 202 202 202 202 204 204 205 205 206 206 208 209 - 209 210 210 211 211 212 212 214 214 214 214 216 216 218 218 220 220 221 222 - 222 224 224 226 226 227 227 228 228 230 230 232 232 233 233 234 236 236 238 - 238 239 239 240 240 242 242 244 244 246 246 246 246 248 248 250 251 251 252 - 252 253 253 253 253 253 253 253 253 253 253 254 254 254 254 254 254 254 254 - 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 248 248 241 241 234 221 221 214 214 207 207 201 - 201 201 201 187 187 187 187 174 174 174 174 161 154 154 141 141 135 135 128 - 128 122 122 116 116 104 104 83 83 83 62 62 62 62 41 41 20 20 20 - 20 0 0 255 255 0 0 0 0 - 0 230 230 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 242 242 236 236 223 223 223 223 210 210 198 198 191 172 172 172 172 166 - 166 157 157 154 154 154 154 148 148 148 148 142 142 136 136 136 130 130 130 - 130 127 127 121 121 118 118 115 115 112 112 112 112 77 43 43 43 43 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 7 7 14 14 21 36 36 43 43 50 50 58 - 58 58 58 72 72 72 72 87 87 87 87 85 84 84 82 82 81 81 80 - 80 79 79 78 78 69 69 55 55 55 41 41 41 41 27 27 13 13 13 - 13 0 0 255 255 112 112 0 0 diff --git a/model/aux/idl_twist/palettes/pastels.ct b/model/aux/idl_twist/palettes/pastels.ct deleted file mode 100755 index 2761e2620..000000000 --- a/model/aux/idl_twist/palettes/pastels.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 154 154 148 148 143 143 138 138 133 133 128 128 123 123 118 118 112 112 - 107 107 102 102 97 97 92 87 87 82 82 77 77 71 71 66 66 61 61 - 56 56 51 51 46 46 41 41 35 35 30 30 25 25 20 15 15 10 10 - 5 5 0 0 6 6 8 8 10 10 12 12 14 14 16 16 18 18 20 - 20 22 25 25 27 27 29 29 31 31 33 33 35 35 37 37 39 39 42 - 42 40 40 38 38 37 37 35 34 34 32 32 30 30 29 29 27 27 26 - 26 24 24 22 22 21 21 19 19 18 18 16 16 15 14 14 13 13 12 - 12 10 10 9 9 8 8 24 24 40 40 57 57 73 73 90 90 106 106 - 123 123 139 156 156 163 163 169 169 176 176 182 182 189 189 195 195 202 202 - 209 209 215 215 222 222 228 228 235 241 241 248 248 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 0 0 5 5 10 10 16 16 21 21 26 26 32 32 37 37 42 42 - 48 48 53 53 59 59 64 69 69 75 75 80 80 85 85 91 91 96 96 - 101 101 107 107 112 112 118 118 123 123 128 128 134 134 139 144 144 150 150 - 155 155 161 161 164 164 168 168 172 172 176 176 180 180 185 185 189 189 193 - 193 197 202 202 208 208 215 215 221 221 228 228 235 235 241 241 248 248 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 251 251 247 247 - 244 244 240 240 237 237 233 233 230 230 226 226 222 222 219 215 215 212 212 - 208 208 205 205 201 201 198 198 187 187 176 176 165 165 154 154 143 143 132 - 132 122 122 111 100 100 89 89 78 78 67 67 57 57 48 48 40 40 32 - 32 24 24 16 16 8 8 0 0 - 0 199 199 200 200 202 202 204 204 206 206 208 208 210 210 212 212 213 213 - 215 215 217 217 219 219 221 223 223 225 225 227 227 228 228 230 230 232 232 - 234 234 236 236 238 238 240 240 241 241 243 243 245 245 247 249 249 251 251 - 253 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 249 249 244 244 238 238 233 227 227 222 222 216 216 211 211 205 205 200 - 200 194 194 189 189 183 183 178 178 173 173 155 155 138 121 121 103 103 86 - 86 69 69 51 51 34 34 39 39 44 44 50 50 55 55 60 60 66 66 - 71 71 76 82 82 80 80 78 78 77 77 75 75 73 73 72 72 70 70 - 68 68 67 67 65 65 63 63 62 60 60 58 58 57 57 58 58 59 59 - 60 60 62 62 63 63 64 64 66 66 67 67 68 68 70 71 71 72 72 - 74 74 75 75 76 76 78 78 81 81 84 84 87 87 90 90 93 93 96 - 96 99 99 102 105 105 108 108 111 111 114 114 117 117 100 100 83 83 66 - 66 50 50 33 33 16 16 0 0 diff --git a/model/aux/idl_twist/palettes/pastels2.ct b/model/aux/idl_twist/palettes/pastels2.ct deleted file mode 100755 index 33bb7d155..000000000 --- a/model/aux/idl_twist/palettes/pastels2.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 154 148 143 143 138 133 128 123 118 118 112 107 102 97 92 87 82 77 - 71 71 66 61 56 51 46 41 41 35 30 25 20 15 10 5 0 6 8 - 10 14 16 20 25 27 31 33 37 39 40 38 35 34 30 29 26 24 21 - 19 16 14 13 10 9 24 40 57 57 73 73 90 90 106 123 123 139 156 - 156 163 169 169 176 176 182 182 189 195 195 202 202 209 209 215 222 222 228 - 228 235 241 241 248 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 0 5 10 10 16 21 26 32 37 37 42 48 53 59 64 69 75 80 - 85 85 91 96 101 107 112 118 118 123 128 134 139 144 150 155 161 164 168 - 172 180 185 193 202 208 221 228 241 248 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 251 251 247 247 244 240 240 237 237 233 233 230 - 226 226 222 222 219 215 212 212 208 208 205 205 201 198 198 198 198 198 198 - 198 187 187 187 187 187 187 176 176 176 176 176 176 176 165 165 165 165 165 - 165 154 154 154 154 154 154 143 143 143 143 143 143 143 132 132 132 132 132 - 132 122 122 122 122 122 122 122 111 111 111 100 100 100 100 100 100 89 89 - 89 89 89 89 89 78 78 78 78 78 78 67 67 67 67 67 67 57 57 - 57 57 57 57 57 48 48 48 48 48 48 40 40 40 40 40 40 40 32 - 32 32 32 32 32 24 24 24 24 24 24 16 16 16 16 16 16 16 8 - 8 8 8 8 8 0 0 0 0 - 0 199 200 202 202 204 206 208 210 212 212 213 215 217 219 221 223 225 227 - 228 228 230 232 234 236 238 240 240 241 243 245 247 249 251 253 255 255 255 - 255 255 255 255 255 255 255 255 255 255 249 244 233 227 216 211 200 194 183 - 178 155 121 103 69 51 39 44 50 50 55 55 60 60 66 71 71 76 82 - 82 80 78 78 77 77 75 75 73 72 72 70 70 68 68 67 65 65 63 - 63 62 60 60 58 57 57 58 58 59 59 60 62 62 63 63 64 64 66 - 67 67 68 68 70 71 72 72 74 74 75 75 76 78 78 78 78 78 78 - 78 81 81 81 81 81 81 84 84 84 84 84 84 84 87 87 87 87 87 - 87 90 90 90 90 90 90 93 93 93 93 93 93 93 96 96 96 96 96 - 96 99 99 99 99 99 99 99 102 102 102 105 105 105 105 105 105 108 108 - 108 108 108 108 108 111 111 111 111 111 111 114 114 114 114 114 114 117 117 - 117 117 117 117 117 100 100 100 100 100 100 83 83 83 83 83 83 83 66 - 66 66 66 66 66 50 50 50 50 50 50 33 33 33 33 33 33 33 16 - 16 16 16 16 16 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/pastels3.ct b/model/aux/idl_twist/palettes/pastels3.ct deleted file mode 100755 index a40e14f87..000000000 --- a/model/aux/idl_twist/palettes/pastels3.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 214 210 206 202 198 194 190 186 183 179 175 171 167 163 159 155 152 148 - 144 140 136 132 128 124 121 117 113 109 105 101 97 94 90 86 83 79 75 - 72 68 64 61 57 53 50 46 42 39 40 38 35 34 30 29 26 24 21 - 19 16 14 13 10 9 24 40 57 57 73 73 90 90 106 123 123 139 156 - 156 163 169 169 176 176 182 182 189 195 195 202 202 209 209 215 222 222 228 - 228 235 241 241 248 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 135 135 136 137 137 138 139 140 140 141 142 143 143 144 145 146 146 147 - 148 149 149 150 151 152 152 153 154 155 155 156 157 158 164 170 176 182 188 - 194 200 206 212 218 224 230 236 242 248 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 251 251 247 247 244 240 240 237 237 233 233 230 - 226 226 222 222 219 215 212 212 208 208 205 205 201 198 198 198 198 198 198 - 198 187 187 187 187 187 187 176 176 176 176 176 176 176 165 165 165 165 165 - 165 154 154 154 154 154 154 143 143 143 143 143 143 143 132 132 132 132 132 - 132 122 122 122 122 122 122 122 111 111 111 100 100 100 100 100 100 89 89 - 89 89 89 89 89 78 78 78 78 78 78 67 67 67 67 67 67 57 57 - 57 57 57 57 57 48 48 48 48 48 48 40 40 40 40 40 40 40 32 - 32 32 32 32 32 24 24 24 24 24 24 16 16 16 16 16 16 16 8 - 8 8 8 8 8 0 0 0 0 - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 249 244 233 227 216 211 200 194 183 - 178 155 121 103 69 51 39 44 50 50 55 55 60 60 66 71 71 76 82 - 82 80 78 78 77 77 75 75 73 72 72 70 70 68 68 67 65 65 63 - 63 62 60 60 58 57 57 58 58 59 59 60 62 62 63 63 64 64 66 - 67 67 68 68 70 71 72 72 74 74 75 75 76 78 78 78 78 78 78 - 78 81 81 81 81 81 81 84 84 84 84 84 84 84 87 87 87 87 87 - 87 90 90 90 90 90 90 93 93 93 93 93 93 93 96 96 96 96 96 - 96 99 99 99 99 99 99 99 102 102 102 105 105 105 105 105 105 108 108 - 108 108 108 108 108 111 111 111 111 111 111 114 114 114 114 114 114 117 117 - 117 117 117 117 117 100 100 100 100 100 100 83 83 83 83 83 83 83 66 - 66 66 66 66 66 50 50 50 50 50 50 33 33 33 33 33 33 33 16 - 16 16 16 16 16 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/previmer_hs.ct b/model/aux/idl_twist/palettes/previmer_hs.ct deleted file mode 100755 index 05f199c9e..000000000 --- a/model/aux/idl_twist/palettes/previmer_hs.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 230 219 208 197 186 175 229 227 226 225 224 223 222 221 220 219 218 217 216 - 215 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 45 90 136 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 48 72 - 96 120 144 168 195 207 219 231 243 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 248 - 248 248 248 249 249 249 249 250 250 250 250 251 251 251 251 252 252 252 252 253 - 253 253 253 254 254 254 254 255 254 253 253 252 251 251 250 249 249 248 247 247 - 246 245 245 244 243 243 242 241 241 240 239 239 238 237 237 236 235 235 234 233 - 233 232 231 231 230 229 229 228 227 227 226 225 225 224 223 223 223 222 221 220 - 219 218 217 216 215 214 213 212 211 210 209 208 208 207 206 205 204 203 202 201 - 200 199 198 197 196 195 194 194 194 194 195 195 196 196 197 197 198 198 198 199 - 199 200 200 201 201 202 202 202 203 203 204 204 205 205 206 206 206 207 207 208 - 208 209 209 210 210 210 211 211 212 212 213 213 214 0 114 0 - 255 230 219 208 197 186 175 0 12 24 36 48 60 72 84 96 108 120 132 144 - 157 0 13 26 39 52 65 78 91 104 117 132 147 163 178 193 209 224 239 255 - 255 255 255 214 218 223 227 232 236 241 245 250 251 252 253 254 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 253 252 249 247 245 242 240 238 236 233 - 231 229 227 224 222 220 218 215 213 211 209 206 204 202 200 197 195 193 191 168 - 162 156 150 144 138 132 126 120 114 108 102 96 90 84 78 71 66 60 54 48 - 42 36 30 24 18 12 6 0 3 6 9 12 15 18 21 24 27 30 33 36 - 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 - 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 139 134 130 125 - 121 116 112 107 103 98 94 89 85 80 76 71 67 62 58 53 49 44 40 35 - 31 26 22 17 13 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 0 - 255 230 219 208 197 186 175 232 233 234 236 237 238 240 241 243 244 245 247 248 - 250 222 225 229 233 236 240 244 247 251 255 255 255 255 255 255 255 255 255 255 - 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 46 69 - 92 115 138 161 168 134 100 67 33 0 6 13 13 13 14 14 15 15 16 16 - 17 17 17 18 18 19 19 20 20 21 21 21 22 22 23 23 24 24 25 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 2 4 5 6 8 9 10 12 13 14 16 - 17 18 20 21 22 24 25 26 28 29 30 32 33 34 36 37 38 40 41 42 - 44 45 46 48 49 50 52 53 54 56 57 58 60 61 62 64 62 60 58 56 - 54 52 50 48 46 44 42 40 38 36 34 32 30 28 26 24 22 20 18 16 - 14 12 10 8 6 4 2 0 2 5 8 11 14 16 19 22 25 28 30 33 - 36 39 42 44 47 50 53 56 58 61 64 67 70 72 75 78 81 84 86 89 - 92 95 98 100 103 106 109 112 114 117 120 123 126 255 110 0 diff --git a/model/aux/idl_twist/palettes/previmer_hs2.ct b/model/aux/idl_twist/palettes/previmer_hs2.ct deleted file mode 100755 index b55a13d1c..000000000 --- a/model/aux/idl_twist/palettes/previmer_hs2.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 230 219 208 197 186 175 229 227 226 225 224 223 222 221 220 219 218 217 216 - 215 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 45 90 136 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 54 - 109 164 174 184 195 202 210 218 226 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 248 - 248 248 248 249 249 249 249 250 250 250 250 251 251 251 251 252 252 252 252 253 - 253 253 253 254 254 254 254 255 254 253 253 252 251 251 250 249 249 248 247 247 - 246 245 245 244 243 243 242 241 241 240 239 239 238 237 237 236 235 235 234 233 - 233 232 231 231 230 229 229 228 227 227 226 225 225 224 223 223 223 222 221 220 - 219 218 217 216 215 214 213 212 211 210 209 208 208 207 206 205 204 203 202 201 - 200 199 198 197 196 195 194 194 194 194 195 195 196 196 197 197 198 198 198 199 - 199 200 200 201 201 202 202 202 203 203 204 204 205 205 206 206 206 207 207 208 - 208 209 209 210 210 210 211 211 212 212 213 213 214 0 114 0 - 255 230 219 208 197 186 175 0 12 24 36 48 60 72 84 96 108 120 132 144 - 157 0 13 26 39 52 65 78 91 104 117 132 147 163 178 193 209 224 239 255 - 255 255 255 214 218 223 227 232 236 241 245 250 251 255 247 240 232 225 218 230 - 242 255 255 255 255 255 255 255 255 255 253 252 249 247 245 242 240 238 236 233 - 231 229 227 224 222 220 218 215 213 211 209 206 204 202 200 197 195 193 191 168 - 162 156 150 144 138 132 126 120 114 108 102 96 90 84 78 71 66 60 54 48 - 42 36 30 24 18 12 6 0 3 6 9 12 15 18 21 24 27 30 33 36 - 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 - 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 139 134 130 125 - 121 116 112 107 103 98 94 89 85 80 76 71 67 62 58 53 49 44 40 35 - 31 26 22 17 13 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 0 - 255 230 219 208 197 186 175 232 233 234 236 237 238 240 241 243 244 245 247 248 - 250 222 225 229 233 236 240 244 247 251 255 255 255 255 255 255 255 255 255 255 - 255 255 255 0 0 0 0 0 0 0 0 0 0 0 34 69 104 139 174 160 - 146 133 144 156 0 37 75 113 151 0 6 13 13 13 14 14 15 15 16 16 - 17 17 17 18 18 19 19 20 20 21 21 21 22 22 23 23 24 24 25 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 2 4 5 6 8 9 10 12 13 14 16 - 17 18 20 21 22 24 25 26 28 29 30 32 33 34 36 37 38 40 41 42 - 44 45 46 48 49 50 52 53 54 56 57 58 60 61 62 64 62 60 58 56 - 54 52 50 48 46 44 42 40 38 36 34 32 30 28 26 24 22 20 18 16 - 14 12 10 8 6 4 2 0 2 5 8 11 14 16 19 22 25 28 30 33 - 36 39 42 44 47 50 53 56 58 61 64 67 70 72 75 78 81 84 86 89 - 92 95 98 100 103 106 109 112 114 117 120 123 126 255 110 0 diff --git a/model/aux/idl_twist/palettes/previmer_hs3.ct b/model/aux/idl_twist/palettes/previmer_hs3.ct deleted file mode 100755 index 754ecac61..000000000 --- a/model/aux/idl_twist/palettes/previmer_hs3.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 230 219 208 197 186 175 235 234 234 233 233 232 232 231 231 230 230 229 229 - 229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 45 90 136 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 54 - 109 164 174 184 195 202 210 218 226 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 248 - 248 248 248 249 249 249 249 250 250 250 250 251 251 251 251 252 252 252 252 253 - 253 253 253 254 254 254 254 255 254 253 253 252 251 251 250 249 249 248 247 247 - 246 245 245 244 243 243 242 241 241 240 239 239 238 237 237 236 235 235 234 233 - 233 232 231 231 230 229 229 228 227 227 226 225 225 224 223 223 223 222 221 220 - 219 218 217 216 215 214 213 212 211 210 209 208 208 207 206 205 204 203 202 201 - 200 199 198 197 196 195 194 194 194 194 195 195 196 196 197 197 198 198 198 199 - 199 200 200 201 201 202 202 202 203 203 204 204 205 205 206 206 206 207 207 208 - 208 209 209 210 210 210 211 211 212 212 213 213 214 0 114 0 - 255 230 219 208 197 186 175 185 170 156 142 128 113 99 85 71 56 42 28 14 - 0 0 13 26 39 52 65 78 91 104 117 132 147 163 178 193 209 224 239 255 - 255 255 255 214 218 223 227 232 236 241 245 250 251 255 247 240 232 225 218 230 - 242 255 255 255 255 255 255 255 255 255 253 252 249 247 245 242 240 238 236 233 - 231 229 227 224 222 220 218 215 213 211 209 206 204 202 200 197 195 193 191 168 - 162 156 150 144 138 132 126 120 114 108 102 96 90 84 78 71 66 60 54 48 - 42 36 30 24 18 12 6 0 3 6 9 12 15 18 21 24 27 30 33 36 - 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 - 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 139 134 130 125 - 121 116 112 107 103 98 94 89 85 80 76 71 67 62 58 53 49 44 40 35 - 31 26 22 17 13 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 0 - 255 230 219 208 197 186 175 250 248 246 245 243 242 240 239 237 236 234 233 231 - 230 222 225 229 233 236 240 244 247 251 255 255 255 255 255 255 255 255 255 255 - 255 255 255 0 0 0 0 0 0 0 0 0 0 0 34 69 104 139 174 160 - 146 133 144 156 0 37 75 113 151 0 6 13 13 13 14 14 15 15 16 16 - 17 17 17 18 18 19 19 20 20 21 21 21 22 22 23 23 24 24 25 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 2 4 5 6 8 9 10 12 13 14 16 - 17 18 20 21 22 24 25 26 28 29 30 32 33 34 36 37 38 40 41 42 - 44 45 46 48 49 50 52 53 54 56 57 58 60 61 62 64 62 60 58 56 - 54 52 50 48 46 44 42 40 38 36 34 32 30 28 26 24 22 20 18 16 - 14 12 10 8 6 4 2 0 2 5 8 11 14 16 19 22 25 28 30 33 - 36 39 42 44 47 50 53 56 58 61 64 67 70 72 75 78 81 84 86 89 - 92 95 98 100 103 106 109 112 114 117 120 123 126 255 110 0 diff --git a/model/aux/idl_twist/palettes/previmer_hs4.ct b/model/aux/idl_twist/palettes/previmer_hs4.ct deleted file mode 100755 index c2cf789c1..000000000 --- a/model/aux/idl_twist/palettes/previmer_hs4.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 230 219 208 197 186 175 235 234 234 233 233 232 232 231 231 230 230 229 229 - 229 136 122 108 95 81 68 54 40 27 13 0 0 0 0 0 0 0 0 0 - 0 0 0 226 203 180 158 135 113 90 67 45 22 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 248 247 246 245 244 243 242 241 240 239 - 238 237 236 235 234 233 232 231 230 229 228 227 226 225 224 223 222 221 220 219 - 218 217 216 215 214 213 212 211 210 209 208 207 206 205 204 203 202 201 200 200 - 201 201 202 203 203 204 205 205 206 207 207 208 209 209 210 211 211 212 213 213 - 214 215 215 216 217 217 218 219 219 220 221 221 221 221 221 221 219 218 216 215 - 218 221 224 227 230 233 236 239 242 245 248 251 255 0 114 0 - 255 230 219 208 197 186 175 185 170 156 142 128 113 99 85 71 56 42 28 14 - 0 255 242 230 218 205 193 181 168 156 144 132 120 108 96 84 72 60 48 36 - 24 12 0 255 255 255 255 255 255 255 255 255 255 255 247 240 232 225 218 217 - 217 216 216 216 215 215 214 214 214 255 255 255 255 255 255 255 255 255 255 255 - 251 248 244 241 238 234 231 228 224 221 217 214 211 207 204 201 197 194 191 205 - 202 200 198 196 194 192 190 188 186 184 182 180 178 176 174 172 171 170 169 168 - 167 166 165 164 163 162 161 160 152 144 136 128 120 112 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - 3 4 6 7 9 10 12 14 15 17 18 20 21 23 25 26 28 29 31 32 - 34 35 37 39 40 42 43 45 46 48 50 50 50 50 50 50 50 50 50 50 - 46 42 38 34 30 26 23 19 15 11 7 3 0 0 197 0 - 255 230 219 208 197 186 175 250 248 246 245 243 242 240 239 237 236 234 233 231 - 230 255 255 255 255 255 255 255 255 255 255 255 252 249 246 244 241 238 235 233 - 230 227 225 151 135 120 105 90 75 60 45 30 15 0 34 69 104 139 174 156 - 139 121 104 87 69 52 34 17 0 89 80 71 62 53 44 35 26 17 8 0 - 1 2 3 5 6 7 9 10 11 13 14 15 17 18 19 21 22 23 25 205 - 202 200 198 196 194 192 190 188 186 184 182 180 178 176 174 172 171 170 169 168 - 167 166 165 164 163 162 161 160 152 144 136 128 120 112 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 - 11 16 22 28 33 39 45 50 56 61 67 73 78 84 90 95 101 106 112 118 - 123 129 135 140 146 151 157 163 168 174 180 180 180 180 180 180 180 180 180 180 - 185 191 197 203 208 214 220 226 231 237 243 249 255 255 110 0 diff --git a/model/aux/idl_twist/palettes/previmer_hs_nogray.ct b/model/aux/idl_twist/palettes/previmer_hs_nogray.ct deleted file mode 100755 index 715695a39..000000000 --- a/model/aux/idl_twist/palettes/previmer_hs_nogray.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 216 211 207 203 199 195 191 187 195 188 181 174 167 160 153 146 139 132 - 125 118 136 122 108 95 81 68 54 40 27 13 0 0 0 0 0 0 0 - 0 0 226 209 192 175 158 141 124 107 90 73 56 39 22 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 185 183 - 181 180 178 176 175 173 171 170 168 166 165 163 161 160 158 156 155 153 151 - 150 148 146 145 143 141 140 138 136 135 133 132 194 191 189 186 184 181 179 - 176 174 171 169 166 164 161 159 156 154 151 149 146 144 141 139 136 134 131 - 129 126 124 121 119 116 114 255 252 249 246 244 241 238 235 233 230 227 224 - 222 219 216 213 211 208 205 202 200 197 194 191 189 186 183 180 178 175 172 - 169 167 164 161 159 1 0 114 0 - 255 196 191 187 182 178 173 169 165 171 159 147 135 123 111 99 87 75 63 - 51 40 255 242 230 218 205 193 181 168 156 144 132 120 102 85 68 51 34 - 17 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 247 240 232 - 225 218 215 212 209 206 204 201 198 195 255 255 255 255 255 255 255 255 255 - 255 255 255 255 247 240 233 226 219 212 205 198 191 186 181 176 171 166 161 - 156 151 146 142 205 202 200 198 196 194 192 190 188 186 184 182 180 178 176 - 174 172 171 170 166 162 159 155 151 148 144 141 137 133 130 126 122 119 115 - 112 105 98 91 84 77 70 63 56 49 42 35 28 21 14 7 0 129 127 - 125 123 121 119 117 115 113 111 109 107 105 103 101 99 97 95 93 91 89 - 87 85 83 81 79 77 75 73 71 69 67 65 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 197 0 - 255 178 173 168 163 159 154 149 145 255 248 242 235 229 222 216 209 203 196 - 190 184 255 255 255 255 255 255 255 255 255 255 255 252 244 237 229 222 214 - 207 200 151 139 128 117 105 94 83 71 60 49 37 26 15 0 34 69 104 - 139 174 156 139 121 104 87 69 52 34 161 147 134 120 107 93 80 67 53 - 40 26 13 0 1 2 3 4 6 7 8 9 11 9 8 7 6 5 4 - 3 2 1 0 205 202 200 198 196 194 192 190 188 186 184 182 180 178 176 - 174 172 171 170 166 162 159 155 151 148 144 141 137 133 130 126 122 119 115 - 112 105 98 91 84 77 70 63 56 49 42 35 28 21 14 7 0 82 79 - 76 74 71 69 66 64 61 58 56 53 51 48 46 43 41 38 35 33 30 - 28 25 23 20 17 15 12 10 7 5 2 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 255 249 244 239 234 229 224 219 214 209 204 199 - 193 188 183 178 173 168 163 158 153 148 143 138 132 127 122 117 112 107 102 - 97 92 87 82 77 1 255 110 0 diff --git a/model/aux/idl_twist/palettes/previmer_tp_nogray.ct b/model/aux/idl_twist/palettes/previmer_tp_nogray.ct deleted file mode 100644 index 68f1b1ecf..000000000 --- a/model/aux/idl_twist/palettes/previmer_tp_nogray.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 224 216 208 200 193 185 177 170 168 167 166 165 164 163 162 161 163 163 165 - 165 167 172 179 185 192 195 199 189 180 171 161 152 148 138 129 120 111 101 92 - 83 74 64 55 46 37 27 18 9 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 6 13 13 20 28 28 35 43 43 50 57 57 65 72 80 87 94 102 109 - 117 120 124 128 132 136 140 144 148 151 155 159 163 167 175 179 182 186 190 194 - 198 202 206 210 213 217 221 225 229 233 237 241 241 241 242 243 243 244 245 245 - 246 247 248 249 249 250 251 251 252 253 254 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 247 239 232 - 224 224 216 209 201 194 194 186 178 171 163 163 156 0 114 0 - 255 224 213 202 192 181 171 160 150 146 142 138 134 130 126 122 119 113 113 108 - 108 102 91 75 58 42 22 2 5 8 12 15 19 20 24 27 31 34 38 41 - 45 48 51 55 58 62 65 69 72 76 76 88 88 92 97 97 102 107 107 112 - 117 117 122 127 127 132 132 137 142 142 147 152 152 157 162 162 166 171 171 176 - 181 181 186 186 191 196 196 201 206 206 211 216 216 221 226 226 231 236 236 241 - 241 232 233 233 235 236 236 238 239 239 241 242 242 244 245 247 248 250 251 253 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 250 248 243 241 237 232 230 - 226 223 219 214 212 208 203 201 197 194 190 186 184 179 174 171 167 164 159 155 - 152 147 132 132 132 132 124 124 124 124 117 117 117 117 109 109 109 109 102 102 - 102 95 95 95 95 84 84 84 84 73 73 73 73 63 63 63 63 52 52 52 - 42 42 42 42 31 31 31 31 21 21 21 21 10 10 10 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 0 - 255 224 217 211 205 199 193 187 181 180 180 180 180 179 179 179 179 184 184 188 - 188 193 202 215 228 242 248 255 254 254 254 254 254 254 254 253 253 253 253 253 - 253 253 252 252 252 252 252 252 252 252 252 251 251 250 250 250 249 249 249 249 - 248 248 248 248 248 247 247 247 247 247 246 246 246 246 245 245 245 244 244 244 - 244 244 243 243 243 243 243 242 242 242 242 241 241 241 241 241 240 240 240 240 - 240 103 99 99 96 93 93 90 87 87 84 81 81 78 75 72 69 66 63 60 - 57 55 53 52 50 48 47 45 44 42 40 39 37 35 32 31 29 27 26 24 - 22 21 19 18 16 14 13 11 9 8 6 5 5 4 4 4 4 3 3 3 - 2 2 2 2 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 255 110 0 diff --git a/model/aux/idl_twist/palettes/raibow+.ct b/model/aux/idl_twist/palettes/raibow+.ct deleted file mode 100755 index 4fbb1534b..000000000 --- a/model/aux/idl_twist/palettes/raibow+.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 4 4 13 13 18 27 27 36 40 40 50 50 54 61 61 68 68 69 - 74 74 79 80 80 83 83 85 86 86 88 86 86 87 87 85 84 84 84 - 84 83 78 78 76 71 71 68 68 60 58 58 53 53 46 40 40 33 25 - 25 16 16 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 4 4 8 8 21 29 29 33 33 46 51 51 63 - 72 72 76 76 89 97 97 101 101 114 119 119 131 140 140 144 144 157 165 - 165 169 182 182 187 187 199 208 208 212 212 225 233 233 242 250 250 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 0 0 - 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 8 16 16 25 25 38 42 42 51 51 63 67 67 - 76 84 84 93 93 106 110 110 119 119 131 135 135 144 152 152 161 161 174 - 178 178 187 187 199 203 203 216 220 220 229 229 242 246 246 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 242 233 233 229 229 216 208 208 199 191 191 187 187 174 165 165 161 161 148 - 140 140 131 123 123 119 119 106 97 97 89 80 80 72 72 63 55 55 51 - 51 38 29 29 21 255 255 0 0 - 255 3 3 10 10 14 23 23 32 38 38 48 48 53 63 63 72 72 77 - 86 86 95 100 100 109 109 113 122 122 132 136 136 145 145 154 159 159 168 - 168 173 182 182 191 195 195 204 204 214 218 218 227 227 232 241 241 250 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 242 242 238 - 238 225 220 220 212 212 199 195 195 187 174 174 170 170 157 152 152 144 144 - 131 127 127 114 106 106 102 102 89 84 84 76 76 63 59 59 46 38 38 - 34 34 21 16 16 8 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 255 255 0 0 diff --git a/model/aux/idl_twist/palettes/rainbowbw.ct b/model/aux/idl_twist/palettes/rainbowbw.ct deleted file mode 100755 index 2208a6fbb..000000000 --- a/model/aux/idl_twist/palettes/rainbowbw.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 4 9 13 18 22 27 31 36 40 45 50 54 58 61 64 68 69 72 - 74 77 79 80 82 83 85 84 86 87 88 86 87 87 87 85 84 84 84 - 83 79 78 77 76 71 70 68 66 60 58 55 53 46 43 40 36 33 25 - 21 16 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 4 8 12 21 25 29 33 42 46 51 55 63 - 67 72 76 80 89 93 97 101 110 114 119 123 131 135 140 144 153 157 161 - 165 169 178 182 187 191 199 203 208 212 221 225 229 233 242 246 250 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 0 - 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 4 8 16 21 25 29 38 42 46 51 55 63 67 72 - 76 84 89 93 97 106 110 114 119 127 131 135 140 144 152 157 161 165 174 - 178 182 187 195 199 203 208 216 220 225 229 233 242 246 250 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 250 - 242 238 233 229 221 216 212 208 199 195 191 187 178 174 170 165 161 153 148 - 144 140 131 127 123 119 110 106 102 97 89 85 80 76 72 63 59 55 51 - 42 38 34 29 21 17 12 8 0 - 255 3 7 10 14 19 23 28 32 38 43 48 53 59 63 68 72 77 81 - 86 91 95 100 104 109 113 118 122 127 132 136 141 145 150 154 159 163 168 - 173 177 182 186 191 195 200 204 209 214 218 223 227 232 236 241 245 250 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 242 238 - 233 225 220 216 212 203 199 195 191 187 178 174 170 165 157 152 148 144 135 - 131 127 123 114 110 106 102 97 89 84 80 76 67 63 59 55 46 42 38 - 34 25 21 16 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/ripplescoul.ct b/model/aux/idl_twist/palettes/ripplescoul.ct deleted file mode 100755 index eedfb9f97..000000000 --- a/model/aux/idl_twist/palettes/ripplescoul.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 0 0 0 0 0 0 0 0 0 154 154 148 148 143 138 138 133 128 - 128 123 123 118 112 112 107 107 102 97 97 92 87 82 82 77 71 71 66 - 66 61 56 56 51 51 46 41 41 35 30 30 25 25 20 15 10 10 5 - 0 0 6 6 8 10 10 12 12 14 16 16 18 20 20 22 25 27 27 - 29 29 31 33 33 35 35 37 39 39 42 40 40 38 38 37 35 34 34 - 32 30 30 29 29 27 26 26 24 22 22 21 21 19 18 18 16 16 14 - 14 13 13 12 10 10 9 9 8 24 24 40 57 57 73 73 90 106 106 - 123 123 156 156 163 163 169 176 176 182 189 189 195 195 202 209 209 215 215 - 222 228 228 235 241 248 248 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 0 0 0 0 0 0 0 0 0 0 0 5 5 10 16 16 21 26 - 26 32 32 37 42 42 48 48 53 59 59 64 69 75 75 80 85 85 91 - 91 96 101 101 107 107 112 118 118 123 128 128 134 134 139 144 150 150 155 - 161 161 164 164 168 172 172 176 176 180 185 185 189 193 193 197 202 208 208 - 215 215 221 228 228 235 235 241 248 248 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 251 251 247 247 244 240 240 237 237 233 230 - 230 226 222 222 219 215 215 212 208 208 205 201 201 198 198 187 176 176 165 - 165 154 143 143 132 122 122 111 100 89 89 78 78 67 57 57 48 48 40 - 32 32 24 16 16 8 8 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 199 199 200 200 202 204 204 206 208 - 208 210 210 212 213 213 215 215 217 219 219 221 223 225 225 227 228 228 230 - 230 232 234 234 236 236 238 240 240 241 243 243 245 245 247 249 251 251 253 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 249 249 244 244 238 233 227 227 - 222 216 216 211 211 205 200 200 194 189 189 183 183 178 173 173 155 155 121 - 121 103 103 86 69 69 51 51 34 39 39 44 50 50 55 55 60 66 66 - 71 71 82 82 80 80 78 77 77 75 73 73 72 72 70 68 68 67 67 - 65 63 63 62 60 58 58 57 58 58 59 59 60 62 62 63 63 64 66 - 66 67 68 68 70 71 71 72 74 74 75 76 76 78 78 81 84 84 87 - 87 90 93 93 96 99 99 102 105 108 108 111 111 114 117 117 100 100 83 - 66 66 50 33 33 16 16 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/ripplesgrey.ct b/model/aux/idl_twist/palettes/ripplesgrey.ct deleted file mode 100755 index cd31dd734..000000000 --- a/model/aux/idl_twist/palettes/ripplesgrey.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 255 254 254 253 253 252 252 252 251 251 250 250 249 249 249 248 248 247 - 247 246 246 246 245 245 244 244 243 243 243 242 242 241 241 241 240 240 239 - 239 238 238 238 237 237 236 236 235 235 235 234 234 233 233 232 232 232 231 - 231 230 230 230 229 229 228 228 227 227 227 226 226 225 225 224 224 224 223 - 223 222 222 221 221 221 220 220 219 219 219 218 218 217 217 216 216 216 215 - 215 214 214 213 213 213 212 212 211 211 210 210 210 209 209 208 208 207 207 - 207 206 206 205 205 205 204 204 203 203 202 202 202 201 201 200 200 199 199 - 199 198 198 197 197 196 196 196 195 195 194 194 194 193 193 192 192 191 191 - 191 190 190 189 189 188 188 188 187 187 186 186 185 185 185 184 184 183 183 - 183 181 180 178 177 176 174 173 171 170 169 167 166 164 163 162 160 159 158 - 156 155 153 152 151 149 148 146 145 144 142 141 140 138 137 135 134 133 131 - 130 128 127 126 124 123 122 120 119 117 116 115 113 112 110 109 108 106 105 - 104 102 101 99 98 97 95 94 92 91 90 88 87 86 84 83 81 80 79 - 77 76 74 73 72 70 69 68 255 - 0 255 254 254 253 253 252 252 252 251 251 250 250 249 249 249 248 248 247 - 247 246 246 246 245 245 244 244 243 243 243 242 242 241 241 241 240 240 239 - 239 238 238 238 237 237 236 236 235 235 235 234 234 233 233 232 232 232 231 - 231 230 230 230 229 229 228 228 227 227 227 226 226 225 225 224 224 224 223 - 223 222 222 221 221 221 220 220 219 219 219 218 218 217 217 216 216 216 215 - 215 214 214 213 213 213 212 212 211 211 210 210 210 209 209 208 208 207 207 - 207 206 206 205 205 205 204 204 203 203 202 202 202 201 201 200 200 199 199 - 199 198 198 197 197 196 196 196 195 195 194 194 194 193 193 192 192 191 191 - 191 190 190 189 189 188 188 188 187 187 186 186 185 185 185 184 184 183 183 - 183 181 180 178 177 176 174 173 171 170 169 167 166 164 163 162 160 159 158 - 156 155 153 152 151 149 148 146 145 144 142 141 140 138 137 135 134 133 131 - 130 128 127 126 124 123 122 120 119 117 116 115 113 112 110 109 108 106 105 - 104 102 101 99 98 97 95 94 92 91 90 88 87 86 84 83 81 80 79 - 77 76 74 73 72 70 69 68 255 - 0 255 254 254 253 253 252 252 252 251 251 250 250 249 249 249 248 248 247 - 247 246 246 246 245 245 244 244 243 243 243 242 242 241 241 241 240 240 239 - 239 238 238 238 237 237 236 236 235 235 235 234 234 233 233 232 232 232 231 - 231 230 230 230 229 229 228 228 227 227 227 226 226 225 225 224 224 224 223 - 223 222 222 221 221 221 220 220 219 219 219 218 218 217 217 216 216 216 215 - 215 214 214 213 213 213 212 212 211 211 210 210 210 209 209 208 208 207 207 - 207 206 206 205 205 205 204 204 203 203 202 202 202 201 201 200 200 199 199 - 199 198 198 197 197 196 196 196 195 195 194 194 194 193 193 192 192 191 191 - 191 190 190 189 189 188 188 188 187 187 186 186 185 185 185 184 184 183 183 - 183 181 180 178 177 176 174 173 171 170 169 167 166 164 163 162 160 159 158 - 156 155 153 152 151 149 148 146 145 144 142 141 140 138 137 135 134 133 131 - 130 128 127 126 124 123 122 120 119 117 116 115 113 112 110 109 108 106 105 - 104 102 101 99 98 97 95 94 92 91 90 88 87 86 84 83 81 80 79 - 77 76 74 73 72 70 69 68 255 diff --git a/model/aux/idl_twist/palettes/s.ct b/model/aux/idl_twist/palettes/s.ct deleted file mode 100755 index 710e17803..000000000 --- a/model/aux/idl_twist/palettes/s.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 85 85 82 82 78 78 75 75 69 66 66 62 62 57 57 54 54 50 - 50 47 41 41 38 38 34 34 29 29 26 22 22 19 19 13 13 10 10 - 6 6 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 12 25 25 25 - 25 38 38 50 50 50 63 63 76 76 76 76 88 88 101 114 114 114 114 - 114 114 126 126 126 126 139 152 152 152 152 165 165 165 165 189 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 - 0 5 5 5 5 6 6 7 7 8 9 9 9 9 10 10 11 11 12 - 12 13 14 14 14 14 15 15 16 16 17 18 18 18 18 20 20 20 20 - 21 21 22 22 22 23 23 37 37 37 37 52 66 66 66 66 81 81 95 - 95 110 110 110 124 124 139 139 139 139 153 153 168 168 168 182 182 197 197 - 211 211 211 226 226 240 240 240 240 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 241 241 241 228 228 214 214 214 214 201 201 201 188 - 188 174 174 174 174 161 161 161 148 148 127 127 127 127 127 127 110 110 110 - 102 102 102 102 89 89 80 80 80 72 72 59 59 59 59 55 55 55 55 - 42 34 34 34 34 0 0 0 0 - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 239 239 239 223 223 207 207 191 - 191 191 191 175 159 159 159 159 143 143 127 127 127 127 111 95 95 79 79 - 79 79 63 63 47 47 47 31 31 15 15 15 15 0 12 12 25 25 25 - 25 38 38 50 50 50 63 63 76 76 76 76 88 88 101 114 114 114 114 - 114 114 126 126 126 126 139 152 152 152 152 165 165 165 165 189 223 223 223 - 223 195 195 195 195 167 167 139 139 139 111 111 111 111 83 83 55 55 55 - 27 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/s2.ct b/model/aux/idl_twist/palettes/s2.ct deleted file mode 100755 index a0d3c7754..000000000 --- a/model/aux/idl_twist/palettes/s2.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 193 193 190 188 186 186 184 182 182 180 178 176 176 174 172 172 170 168 - 166 166 164 162 162 160 158 158 156 153 151 151 149 147 147 145 143 141 141 - 139 137 137 135 133 131 131 129 127 127 125 123 121 121 119 117 117 114 112 - 110 110 108 106 106 104 102 100 100 98 96 96 94 92 92 90 88 86 86 - 84 82 82 80 78 75 75 73 71 71 69 67 65 65 63 61 61 59 57 - 55 55 53 51 51 49 47 45 45 43 41 41 39 36 36 34 32 30 30 - 28 26 26 24 22 20 20 18 16 16 14 12 10 10 8 6 6 4 2 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 25 50 50 75 100 125 125 150 175 175 - 200 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 246 238 238 230 222 222 214 206 198 198 190 182 182 174 166 - 158 158 150 142 142 134 126 255 255 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 10 21 21 31 42 53 53 63 74 74 85 95 106 106 116 127 127 - 138 148 148 159 170 180 180 191 201 201 212 223 233 233 244 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 238 221 221 205 188 188 172 155 139 139 122 106 106 89 73 - 68 68 63 59 59 54 50 45 45 41 36 36 31 27 22 22 18 13 13 - 9 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 223 191 - 159 159 127 95 95 63 31 0 0 25 50 50 75 100 125 125 150 175 175 - 200 230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/s3_1.ct b/model/aux/idl_twist/palettes/s3_1.ct deleted file mode 100755 index cb692675b..000000000 --- a/model/aux/idl_twist/palettes/s3_1.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 193 190 186 184 182 180 176 174 172 168 166 164 162 158 156 151 149 147 - 145 141 139 137 133 131 129 127 123 121 117 117 112 110 106 104 100 100 96 - 94 92 88 86 84 82 78 75 71 69 67 65 61 59 55 53 51 49 45 - 43 41 36 36 34 32 30 28 26 24 22 20 18 16 16 12 10 10 6 - 6 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 25 25 50 50 50 50 50 75 - 75 100 100 100 125 125 125 125 150 150 150 175 175 175 175 200 200 200 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 246 238 238 230 222 222 214 206 198 198 190 182 182 174 166 - 158 158 150 142 142 134 126 255 255 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 10 21 31 42 53 63 74 85 95 106 116 116 116 127 127 - 127 127 127 138 138 148 148 148 148 148 159 159 170 170 180 180 180 180 180 - 191 191 201 201 201 201 201 212 212 223 223 223 233 233 233 233 244 244 244 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 238 221 221 205 188 188 172 155 139 139 122 106 106 89 73 - 68 68 63 59 59 54 50 45 45 41 36 36 31 27 22 22 18 13 13 - 9 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 - 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 223 223 223 191 191 159 159 159 159 159 127 127 95 95 95 - 95 95 63 63 31 31 0 0 0 0 0 25 25 50 50 50 50 50 75 - 75 100 100 100 125 125 125 125 150 150 150 175 175 175 175 200 200 200 255 - 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/symbols.ct b/model/aux/idl_twist/palettes/symbols.ct deleted file mode 100755 index 2374bc735..000000000 --- a/model/aux/idl_twist/palettes/symbols.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 200 197 194 191 188 185 183 183 183 183 177 177 177 177 170 170 170 170 164 - 164 164 164 164 158 158 158 158 161 161 161 161 163 163 163 163 165 165 165 165 - 167 170 172 176 179 183 185 188 192 194 199 199 199 190 186 186 182 182 178 174 - 169 165 161 157 157 153 153 153 153 149 145 140 140 136 132 132 128 128 128 124 - 120 116 111 107 103 99 99 99 87 74 70 37 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 6 13 20 27 41 48 55 55 62 68 82 89 - 96 103 103 117 124 130 137 144 158 158 165 172 179 186 192 192 192 199 199 206 - 206 213 213 213 213 220 220 220 227 227 227 234 234 234 234 241 241 241 248 248 - 248 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 - 255 200 196 192 188 184 180 176 176 176 176 163 163 163 163 150 150 150 150 137 - 137 137 137 137 124 124 124 124 119 119 119 119 113 113 113 113 108 108 108 108 - 102 97 91 80 75 64 58 53 42 36 2 2 2 3 4 4 5 5 5 6 - 7 8 8 9 9 10 10 10 10 11 11 12 12 13 14 14 14 14 14 15 - 16 17 17 18 19 20 20 20 22 24 25 31 38 47 60 76 88 87 87 86 - 86 85 85 84 84 83 83 83 82 82 81 81 80 80 79 79 78 78 78 77 - 77 76 76 75 75 74 74 74 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 250 246 244 240 240 237 235 231 229 225 222 218 214 214 212 210 207 203 - 203 197 197 192 188 188 186 186 184 182 177 177 177 173 173 171 169 169 169 167 - 167 165 161 161 153 148 148 148 148 144 131 131 127 123 123 119 119 110 110 97 - 97 97 59 42 34 17 0 0 0 0 0 0 0 0 0 0 - 255 200 197 195 193 191 189 187 187 187 187 184 184 184 184 181 181 181 181 178 - 178 178 178 178 175 175 175 175 179 179 179 179 184 184 184 184 188 188 188 188 - 193 197 202 210 215 224 228 233 242 246 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 254 253 252 251 250 250 249 - 249 249 248 248 248 247 247 247 246 246 246 245 245 244 244 244 243 243 243 242 - 242 242 241 241 241 240 240 240 103 100 97 94 88 85 83 83 80 77 71 68 - 65 63 63 57 54 51 48 45 40 40 37 34 31 28 25 25 25 22 22 20 - 20 17 17 17 17 14 14 14 11 11 11 8 8 8 8 5 5 5 2 2 - 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/symbols_dark.ct b/model/aux/idl_twist/palettes/symbols_dark.ct deleted file mode 100644 index 37dbacd31..000000000 --- a/model/aux/idl_twist/palettes/symbols_dark.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 200 197 194 191 188 185 183 183 183 183 177 177 177 177 170 170 170 170 164 - 164 164 164 164 158 158 158 158 161 161 161 161 163 163 163 163 165 165 165 165 - 167 170 172 176 179 183 185 188 192 194 199 199 199 190 186 186 182 182 178 174 - 169 165 161 157 157 153 153 153 153 149 145 140 140 136 132 132 128 128 128 124 - 120 116 111 107 103 99 99 99 87 74 70 37 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 6 5 5 5 5 5 5 5 5 5 5 5 - 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 - 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 - 2 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 207 208 210 211 213 214 216 217 219 221 222 224 - 225 227 228 230 231 233 234 236 238 239 241 242 244 245 247 248 250 251 253 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 - 255 200 196 192 188 184 180 176 176 176 176 163 163 163 163 150 150 150 150 137 - 137 137 137 137 124 124 124 124 119 119 119 119 113 113 113 113 108 108 108 108 - 102 97 91 80 75 64 58 53 42 36 2 2 2 3 4 4 5 5 5 6 - 7 8 8 9 9 10 10 10 10 11 11 12 12 13 14 14 14 14 14 15 - 16 17 17 18 19 20 20 20 22 24 25 31 38 47 60 76 88 87 87 86 - 86 85 85 84 84 83 83 83 82 82 81 81 80 80 79 79 78 78 78 77 - 77 76 76 75 75 74 74 74 255 253 251 249 248 246 244 243 241 239 238 236 - 234 232 231 229 227 226 224 222 221 219 217 215 214 212 210 209 207 205 204 202 - 200 199 197 195 193 192 190 188 187 185 183 182 180 178 176 175 173 171 170 168 - 166 165 163 161 160 158 156 154 153 151 149 148 146 144 143 141 139 137 136 134 - 132 131 129 127 126 124 122 121 120 120 119 118 117 117 116 115 114 113 113 112 - 111 110 110 109 108 107 107 106 105 104 103 103 102 101 100 100 99 98 97 97 - 97 97 59 42 34 17 0 0 0 0 0 0 0 0 0 0 - 255 200 197 195 193 191 189 187 187 187 187 184 184 184 184 181 181 181 181 178 - 178 178 178 178 175 175 175 175 179 179 179 179 184 184 184 184 188 188 188 188 - 193 197 202 210 215 224 228 233 242 246 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 254 253 252 251 250 250 249 - 249 249 248 248 248 247 247 247 246 246 246 245 245 244 244 244 243 243 243 242 - 242 242 241 241 241 240 240 240 103 101 100 99 98 96 95 94 93 92 90 89 - 88 87 86 84 83 82 81 80 78 77 76 75 74 72 71 70 69 68 66 65 - 64 63 62 60 59 58 57 56 54 53 52 51 50 48 47 46 45 44 42 41 - 40 39 38 36 35 34 33 32 30 29 28 27 26 24 23 22 21 20 18 17 - 16 15 14 12 11 10 9 8 7 7 7 7 6 6 6 6 5 5 5 5 - 4 4 4 4 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/topobathy.ct b/model/aux/idl_twist/palettes/topobathy.ct deleted file mode 100644 index 4dc071525..000000000 --- a/model/aux/idl_twist/palettes/topobathy.ct +++ /dev/null @@ -1,39 +0,0 @@ - 255 178 177 176 175 174 173 172 171 170 169 168 167 166 165 164 163 162 161 160 - 159 158 157 156 155 154 153 152 151 150 149 148 148 138 129 120 111 101 92 83 - 74 74 69 69 64 64 60 60 55 50 50 46 46 41 41 37 32 32 27 27 - 23 23 18 18 13 9 9 4 4 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 6 6 13 13 20 20 28 35 35 43 43 50 50 - 57 57 65 72 72 80 80 87 87 94 102 102 109 109 117 117 120 124 140 159 - 179 182 186 190 194 198 202 206 210 213 217 221 225 229 233 237 241 241 241 241 - 242 242 243 243 244 244 245 245 245 246 246 247 247 248 248 249 249 250 250 250 - 251 251 252 252 253 253 254 254 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 250 246 242 238 233 229 225 221 216 212 208 204 200 0 0 - 255 88 85 83 81 79 77 74 72 70 68 66 63 61 59 57 55 52 50 48 - 46 44 41 39 37 35 33 30 28 26 24 22 20 24 27 31 34 38 41 45 - 48 48 50 50 51 51 53 53 55 57 57 58 58 60 60 62 63 63 65 65 - 67 67 69 69 70 72 72 74 74 76 76 88 92 92 97 97 102 102 107 112 - 112 117 117 122 122 127 127 132 137 137 142 142 147 147 152 157 157 162 162 166 - 166 171 171 176 181 181 186 186 191 191 196 201 201 206 206 211 211 216 221 221 - 226 226 231 231 236 236 241 232 232 233 233 235 235 236 238 238 239 239 241 241 - 242 242 244 245 245 247 247 248 248 250 251 251 253 253 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 252 250 - 248 246 243 241 239 237 234 232 230 228 226 223 221 219 217 214 212 210 208 206 - 203 201 199 197 194 192 190 188 186 184 181 179 176 174 171 169 167 164 162 159 - 157 155 152 150 147 139 132 124 117 109 102 95 84 73 63 52 42 31 21 10 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 255 250 250 250 250 250 250 250 250 251 251 251 251 251 251 251 251 252 252 252 - 252 252 252 252 252 253 253 253 253 253 253 253 254 254 253 253 253 253 253 253 - 253 253 253 253 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 - 252 252 252 252 252 252 252 252 252 252 252 251 250 250 250 250 249 249 249 249 - 249 248 248 248 248 248 248 247 247 247 247 247 246 246 246 246 246 245 245 245 - 245 244 244 244 244 244 243 243 243 243 243 242 242 242 242 242 242 241 241 241 - 241 241 240 240 240 240 240 103 103 99 99 96 96 93 90 90 87 87 84 84 - 81 81 78 75 75 72 72 69 69 66 63 63 60 60 57 57 55 53 47 39 - 31 29 27 26 24 22 21 19 18 16 14 13 11 9 8 6 5 5 4 4 - 4 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 - 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 diff --git a/model/aux/idl_twist/palettes/wavespec_new.ct b/model/aux/idl_twist/palettes/wavespec_new.ct deleted file mode 100755 index 74d12d386..000000000 --- a/model/aux/idl_twist/palettes/wavespec_new.ct +++ /dev/null @@ -1,42 +0,0 @@ - 255 255 241 228 214 201 187 174 161 149 137 125 113 101 89 77 72 67 62 - 57 52 48 43 38 33 28 24 19 14 9 4 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 4 8 12 16 20 24 28 32 36 40 45 49 53 57 61 65 69 73 - 77 81 85 90 94 98 102 106 110 114 118 122 126 131 134 138 142 146 150 - 154 158 162 165 169 173 177 181 185 189 193 196 200 204 208 212 216 220 224 - 227 231 235 239 243 247 251 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 251 248 245 242 239 236 233 - 230 227 224 221 218 215 212 209 0 - 255 255 233 211 190 168 146 125 109 93 78 62 46 31 15 0 3 6 10 - 13 17 20 24 27 30 34 37 41 44 48 51 55 62 70 78 86 94 102 - 110 118 126 134 142 150 158 166 174 182 185 189 193 197 200 204 208 212 215 - 219 223 227 230 234 238 242 242 242 243 243 244 244 244 245 245 246 246 246 - 247 247 248 248 248 249 249 250 250 250 251 251 252 252 252 253 253 254 254 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 252 249 246 243 240 238 235 232 229 226 224 - 221 218 215 212 210 207 204 201 198 195 193 190 187 184 181 179 176 173 170 - 167 165 162 160 158 156 153 151 149 147 145 142 140 138 136 133 131 129 127 - 125 122 120 118 116 113 111 109 107 105 102 100 98 96 94 88 83 77 72 - 66 61 55 50 45 39 34 28 23 17 12 7 6 6 5 5 4 4 3 - 3 2 2 1 1 0 0 0 0 - 255 255 250 245 240 235 230 225 220 215 210 205 200 195 190 186 190 194 198 - 203 207 211 216 220 224 229 233 237 242 246 250 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 251 248 245 242 238 235 232 229 226 222 219 216 - 213 209 206 203 200 197 193 190 187 184 180 177 174 171 168 164 161 158 155 - 152 147 142 137 133 128 123 118 114 109 104 99 95 90 85 80 76 71 66 - 61 57 52 47 42 38 33 28 23 19 14 9 4 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 diff --git a/model/aux/idl_twist/palettes/wbw.ct b/model/aux/idl_twist/palettes/wbw.ct deleted file mode 100755 index dac4edf5c..000000000 --- a/model/aux/idl_twist/palettes/wbw.ct +++ /dev/null @@ -1,42 +0,0 @@ - 0 255 255 251 251 250 246 246 245 245 243 240 240 238 236 236 233 233 231 - 230 230 227 227 225 222 222 220 220 218 215 215 213 212 212 208 208 207 205 - 205 202 202 200 197 197 195 195 194 190 190 189 189 187 184 184 182 180 180 - 177 177 176 172 172 171 171 169 166 166 164 164 162 159 159 157 157 156 153 - 153 151 148 148 146 146 144 141 141 139 139 138 134 134 133 133 131 128 128 - 126 123 123 121 121 120 116 116 115 115 113 110 110 108 108 106 106 106 108 - 108 108 110 110 110 111 111 111 111 113 113 113 115 115 115 116 116 118 118 - 118 120 120 120 120 121 121 121 123 123 123 125 125 125 126 126 128 128 128 - 129 129 131 131 133 134 134 136 138 138 139 139 139 141 141 143 143 144 146 - 146 148 148 149 151 151 153 153 156 159 159 162 166 166 169 169 172 176 176 - 179 179 182 185 185 189 189 192 195 195 199 199 202 205 205 208 212 212 215 - 215 218 222 222 225 225 228 228 228 230 230 231 231 231 233 235 235 235 235 - 236 238 238 238 238 240 241 241 241 241 243 245 245 245 245 246 248 248 248 - 250 250 251 251 251 253 253 255 255 - 0 255 255 251 251 250 246 246 245 245 243 240 240 238 236 236 233 233 231 - 230 230 227 227 225 222 222 220 220 218 215 215 213 212 212 208 208 207 205 - 205 202 202 200 197 197 195 195 194 190 190 189 189 187 184 184 182 180 180 - 177 177 176 172 172 171 171 169 166 166 164 164 162 159 159 157 157 156 153 - 153 151 148 148 146 146 144 141 141 139 139 138 134 134 133 133 131 128 128 - 126 123 123 121 121 120 116 116 115 115 113 110 110 108 108 106 106 106 108 - 108 108 110 110 110 111 111 111 111 113 113 113 115 115 115 116 116 118 118 - 118 120 120 120 120 121 121 121 123 123 123 125 125 125 126 126 128 128 128 - 129 129 131 131 133 134 134 136 138 138 139 139 139 141 141 143 143 144 146 - 146 148 148 149 151 151 153 153 156 159 159 162 166 166 169 169 172 176 176 - 179 179 182 185 185 189 189 192 195 195 199 199 202 205 205 208 212 212 215 - 215 218 222 222 225 225 228 228 228 230 230 231 231 231 233 235 235 235 235 - 236 238 238 238 238 240 241 241 241 241 243 245 245 245 245 246 248 248 248 - 250 250 251 251 251 253 253 255 255 - 0 255 255 251 251 250 246 246 245 245 243 240 240 238 236 236 233 233 231 - 230 230 227 227 225 222 222 220 220 218 215 215 213 212 212 208 208 207 205 - 205 202 202 200 197 197 195 195 194 190 190 189 189 187 184 184 182 180 180 - 177 177 176 172 172 171 171 169 166 166 164 164 162 159 159 157 157 156 153 - 153 151 148 148 146 146 144 141 141 139 139 138 134 134 133 133 131 128 128 - 126 123 123 121 121 120 116 116 115 115 113 110 110 108 108 106 106 106 108 - 108 108 110 110 110 111 111 111 111 113 113 113 115 115 115 116 116 118 118 - 118 120 120 120 120 121 121 121 123 123 123 125 125 125 126 126 128 128 128 - 129 129 131 131 133 134 134 136 138 138 139 139 139 141 141 143 143 144 146 - 146 148 148 149 151 151 153 153 156 159 159 162 166 166 169 169 172 176 176 - 179 179 182 185 185 189 189 192 195 195 199 199 202 205 205 208 212 212 215 - 215 218 222 222 225 225 228 228 228 230 230 231 231 231 233 235 235 235 235 - 236 238 238 238 238 240 241 241 241 241 243 245 245 245 245 246 248 248 248 - 250 250 251 251 251 253 253 255 255 diff --git a/model/aux/idl_twist/palettes/ws_ftp.log b/model/aux/idl_twist/palettes/ws_ftp.log deleted file mode 100755 index 4db0cff2f..000000000 --- a/model/aux/idl_twist/palettes/ws_ftp.log +++ /dev/null @@ -1,26 +0,0 @@ -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\6coul.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES 6coul.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\backtoblack.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES backtoblack.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\bathy.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES bathy.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\bathy2.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES bathy2.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\bathy3.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES bathy3.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\bathy3white.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES bathy3white.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\bathy4.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES bathy4.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\bathygif.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES bathygif.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\bwflipped.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES bwflipped.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\Depth.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES Depth.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\E.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES E.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\fe.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES fe.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\Hs.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES Hs.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\JFM8a.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES JFM8a.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\ONR2000.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES ONR2000.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\pastels.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES pastels.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\pastels2.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES pastels2.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\pastels3.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES pastels3.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\raibow+.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES raibow+.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\rainbowbw.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES rainbowbw.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\ripplescoul.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES ripplescoul.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\ripplesgrey.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES ripplesgrey.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\S.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES S.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\S2.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES S2.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\symbols.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES symbols.ct -101.07.19 16:41 B C:\Fabrice\IDL\PALETTES\wbw.ct <-- padre /tmp_mnt/data/ter7/ardhuin/IDL/PALETTES wbw.ct diff --git a/model/aux/idl_twist/palettes/z_dopsat_red.ct b/model/aux/idl_twist/palettes/z_dopsat_red.ct deleted file mode 100644 index 80289e959..000000000 --- a/model/aux/idl_twist/palettes/z_dopsat_red.ct +++ /dev/null @@ -1,39 +0,0 @@ - 0 242 218 194 218 214 210 206 202 198 194 190 186 182 178 175 161 143 124 106 - 87 74 55 37 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 6 20 35 43 57 65 80 94 102 117 120 128 132 140 148 - 151 159 163 171 175 182 190 194 202 206 213 221 221 225 225 229 229 233 233 237 - 237 241 241 241 241 241 241 241 241 242 242 242 242 243 243 243 243 244 244 244 - 244 245 245 245 245 245 246 246 246 246 247 247 247 247 248 248 248 248 249 249 - 249 249 250 250 250 250 250 250 251 251 251 251 252 252 252 253 253 253 253 254 - 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 249 244 239 233 228 223 217 212 207 201 196 191 0 0 255 - 0 240 210 180 210 191 173 155 137 119 100 82 64 46 28 10 15 22 29 36 - 43 48 55 62 69 76 102 107 117 122 132 137 147 157 162 171 176 186 191 201 - 211 216 226 231 241 232 235 238 239 242 244 247 250 251 255 255 255 255 255 255 - 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 - 255 255 255 255 255 252 252 250 250 248 248 246 246 243 243 241 241 239 239 237 - 237 234 232 232 230 230 228 228 226 226 223 223 221 221 219 219 217 217 214 214 - 212 212 210 210 208 208 206 206 203 203 201 201 199 197 197 194 194 192 192 190 - 190 188 188 186 186 184 184 181 181 179 179 176 176 174 174 171 171 169 169 167 - 167 164 162 162 162 159 159 157 157 157 155 155 152 152 152 150 150 147 147 147 - 145 145 143 143 143 140 140 138 138 135 135 135 133 133 131 131 131 131 131 127 - 127 127 123 123 123 123 123 119 119 119 119 110 110 110 110 110 97 97 97 89 - 89 82 82 82 74 74 67 67 67 59 59 52 52 44 44 44 37 37 29 29 - 29 26 24 21 19 16 14 12 9 7 4 2 0 0 0 255 - 0 244 223 202 223 225 228 231 234 237 239 242 245 248 251 254 254 254 253 253 - 253 253 252 252 252 252 249 249 248 248 247 247 246 246 245 244 244 243 243 242 - 242 241 241 240 240 103 96 90 87 81 78 72 66 63 57 55 52 50 47 44 - 42 39 37 34 32 29 26 24 21 19 16 13 13 11 11 9 9 8 8 6 - 6 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 - 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 - 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 160 0 255 diff --git a/model/aux/idl_twist/parametros.pro b/model/aux/idl_twist/parametros.pro deleted file mode 100755 index 4d09bd48e..000000000 --- a/model/aux/idl_twist/parametros.pro +++ /dev/null @@ -1,332 +0,0 @@ -;/ -;/ +-----------------------------------+ -;/ | TWIST Ifremer-SHOM | -;/ | F. Ardhuin | -;/ | IDL command language | -;/ | Last update : 17-Oct-2013 | -;/ +-----------------------------------+ -;/ -;/ Licence information: This code is distributed under the CeCILL license -;/ generally compatible with the Gnu Public Licence (GPL) -;/ http://www.cecill.info/index.en.html -;/ -;/ 17-Oct-2013 : Clean up ( version 2.00 ) -;---------------------------------------------------------------------------- -PRO parametros, anterior_root -;---------------------------------------------------------------------------- -; This procedure generates the widgets of the parameters subwindow -; for the TWIST visualization tool -;---------------------------------------------------------------------------- -COMMON AXISFRAME,axis_orient,frametype,outx1lab,outx2lab,outy1lab,outy2lab -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON OVERLAY2,adbathydot,adcontour -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON THREED, Ax3D,Az3D,smoothing -COMMON TIMESERIES, modspec,obs,obs2,om,ts_filetype, nbins, bulktype,scatvar -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON WPARAM,WParray,root,WParam5,WParam6 - - pbase=LONG(0) - vecbase=LONG(0) - Line1=LONG(0) - WPbox=lonarr(8) - WPline=LONARR(15) - WParray=LONARR(15,16) - -; Guardar valores en variables temporales - root=anterior_root -; WIDGET_CONTROL, root, SENSITIVE=0 - - - pbase = WIDGET_BASE(TITLE='Display and Print parameters', /COLUMN) - WIDGET_CONTROL, pbase, GROUP_LEADER=root - i=0 - WPbox(i)=WIDGET_BASE(pbase, /FRAME, /COLUMN) - j=0 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_LABEL(WPline(j),VALUE='CONTOUR Num. Levels: ') - WParray(j,1)=WIDGET_TEXT(WPline(j),/EDITABLE, XSIZE=5, YSIZE=1, $ - VALUE=STRCOMPRESS(String(numlevels))) - WParray(j,2)= WIDGET_DROPLIST(WPline(j), $ - VALUE=['linear','log4','log6','duck shelf','Shields Number']) - WParray(j,3)= WIDGET_DROPLIST(WPline(j), $ - VALUE=['no contour','solid','dotted','dashed','solid/dashed']) - j=1 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)= WIDGET_DROPLIST(WPline(j), $ - VALUE=['Plot data','Plot log10(data)']) - WParray(j,1)= WIDGET_DROPLIST(WPline(j), $ - VALUE=['Fit range to data','Fixed range']) - WParray(j,2)= WIDGET_DROPLIST(WPline(j), $ - VALUE=['Fill out of range','Blank out of range']) - - i=1 - WPbox(i)=WIDGET_BASE(pbase, /FRAME, /COLUMN) - j=2 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_LABEL(WPline(j),VALUE='3D views:') - WParray(j,1)=WIDGET_SLIDER(WPline(j), MAXIMUM=180, MINIMUM=0, value=ax3D, $ - TITLE='Ax') - WParray(j,2)=WIDGET_SLIDER(WPline(j), MAXIMUM=360, MINIMUM=0, value=az3D, $ - TITLE='Az') - WParray(j,3)=WIDGET_LABEL(WPline(j),VALUE='Smooth:') - WParray(j,4)=WIDGET_TEXT(WPline(j),/EDITABLE, $ - XSIZE=4,YSIZE=1,VALUE=strcompress(string(smoothing))) - WParray(j,5)=WIDGET_LABEL(WPline(j),VALUE='N. bins:') - WParray(j,6)=WIDGET_TEXT(WPline(j),/EDITABLE, $ - XSIZE=4,YSIZE=1,VALUE=strcompress(string(nbins))) - - i=i+1 - WPbox(i)=WIDGET_BASE(pbase, /FRAME, /COLUMN) - j=3 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_LABEL(WPline(j),VALUE='Title:') - WParray(j,1)=WIDGET_DROPLIST(WPline(j),VALUE=['YES','NO']) - WParray(j,2)=WIDGET_LABEL(WPline(j),VALUE='xTitle:') - WParray(j,3)=WIDGET_DROPLIST(WPline(j),VALUE=['YES','NO']) - WParray(j,4)=WIDGET_LABEL(WPline(j),VALUE='yTitle:') - WParray(j,5)=WIDGET_DROPLIST(WPline(j),VALUE=['YES','NO']) - WParray(j,6)=WIDGET_LABEL(WPline(j),VALUE='cbTitle:') - WParray(j,7)=WIDGET_DROPLIST(WPline(j),VALUE=['YES','NO']) - WParray(j,8)=WIDGET_BUTTON(WPline(j),VALUE='Font') - j=4 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_LABEL(WPline(j),VALUE='Color bar:') - WParray(j,1)=WIDGET_DROPLIST(WPline(j),VALUE=['on','off']) - WParray(j,2)=WIDGET_DROPLIST(WPline(j),VALUE=['exact range','rounded range']) - WParray(j,3)=WIDGET_LABEL(WPline(j),VALUE='N ticks:') - WParray(j,4)=WIDGET_TEXT(WPline(j),/EDITABLE, $ - XSIZE=4,YSIZE=1,VALUE=strcompress(string(cbnticks))) - - i=i+1 - WPbox(i)=WIDGET_BASE(pbase, /FRAME, /COLUMN) - j=5 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_LABEL(WPline(j),VALUE='blx:') - WParray(j,1)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(blx,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,2)=WIDGET_LABEL(WPline(j),VALUE='bly:') - WParray(j,3)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(bly,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,4)=WIDGET_LABEL(WPline(j),VALUE='trx:') - WParray(j,5)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(trx,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,6)=WIDGET_LABEL(WPline(j),VALUE='try:') - WParray(j,7)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(try,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,8)=WIDGET_LABEL(WPline(j),VALUE='tx:') - WParray(j,9)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(textx,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,10)=WIDGET_LABEL(WPline(j),VALUE='ty:') - WParray(j,11)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(texty,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,12)=WIDGET_LABEL(WPline(j),VALUE='tdy:') - WParray(j,13)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(textdx,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,14)=WIDGET_LABEL(WPline(j),VALUE='tdy:') - WParray(j,15)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(textdy,FORMAT='(F5.3)'),/EDITABLE) - j=6 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_LABEL(WPline(j),VALUE='cbblx:') - WParray(j,1)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(cbblx,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,2)=WIDGET_LABEL(WPline(j),VALUE='cbbly:') - WParray(j,3)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(cbbly,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,4)=WIDGET_LABEL(WPline(j),VALUE='cbtrx:') - WParray(j,5)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(cbtrx,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,6)=WIDGET_LABEL(WPline(j),VALUE='cbtry:') - WParray(j,7)=WIDGET_TEXT(WPline(j), $ - XSIZE=5,VALUE=STRING(cbtry,FORMAT='(F5.3)'),/EDITABLE) - WParray(j,8)=WIDGET_LABEL(WPline(j),VALUE='Orientation:') - WParray(j,9)=WIDGET_DROPLIST(WPline(j),VALUE=['Portrait','Landscape']) - - i=i+1 - WPbox(i)=WIDGET_BASE(pbase, /FRAME, /COLUMN) - j=j+1 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_LABEL(WPline(j),VALUE='Print settings:') - WParray(j,1)=WIDGET_DROPLIST(WPline(j),VALUE=['Portrait','Landscape']) - WParray(j,2)=WIDGET_LABEL(WPline(j),VALUE='font:') - WParray(j,3)=WIDGET_DROPLIST(WPline(j),VALUE=['Helvetica','Times']) - j=8 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_TEXT(WPline(j), $ - VALUE='Print dimensions in cm (Max:'+ $ - strcompress(string(papierx-2*xoffset))+'*'+ $ - strcompress(string(papiery-2*yoffset))+'):') - WParray(j,1)=WIDGET_TEXT(WPline(j),/EDITABLE, $ - VALUE=strcompress(string(pwinx)),YSIZE=1,XSIZE=5) - WParray(j,2)=WIDGET_LABEL(WPline(j),VALUE='*') - WParray(j,3)=WIDGET_TEXT(WPline(j),/EDITABLE,VALUE= $ - strcompress(string(pwiny)),YSIZE=1,XSIZE=5) - j=j+1 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_LABEL(WPline(j),VALUE='Font size:') - WParray(j,1)=WIDGET_TEXT(WPline(j),/EDITABLE, $ - VALUE=strcompress(string(facpolice)),YSIZE=1,XSIZE=5) - WParray(j,6)=WIDGET_DROPLIST(WPline(j), $ - VALUE=['Rescale font','no rescale']) - WParray(j,7)=WIDGET_LABEL(WPline(j),VALUE='Base size(pt):') - WParray(j,8)=WIDGET_TEXT(WPline(j),/EDITABLE, $ - VALUE=string(basefontsize,FORMAT='(I2)'),YSIZE=1,XSIZE=2) - WParray(j,2)=WIDGET_LABEL(WPline(j),VALUE='xoffset(cm):') - WParray(j,3)=WIDGET_TEXT(WPline(j),/EDITABLE, $ - VALUE=strcompress(string(xoffset)),YSIZE=1,XSIZE=5) - WParray(j,4)=WIDGET_LABEL(WPline(j),VALUE='yoffset(cm):') - WParray(j,5)=WIDGET_TEXT(WPline(j),/EDITABLE, $ - VALUE=strcompress(string(yoffset)),YSIZE=1,XSIZE=5) - i=i+1 - WPbox(i)=WIDGET_BASE(pbase, /FRAME, /COLUMN) - j=j+1 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_LABEL(WPline(j),VALUE='Frame:') - WParray(j,1)=WIDGET_DROPLIST(WPline(j),VALUE=['X-Y','X,Lon-Y,Lat']) - WParray(j,2)=WIDGET_LABEL(WPline(j),VALUE='x1lab:') - WParray(j,3)=WIDGET_DROPLIST(WPline(j),VALUE=['YES','NO']) - WParray(j,4)=WIDGET_LABEL(WPline(j),VALUE='x2lab:') - WParray(j,5)=WIDGET_DROPLIST(WPline(j),VALUE=['YES','NO']) - WParray(j,6)=WIDGET_LABEL(WPline(j),VALUE='y1lab:') - WParray(j,7)=WIDGET_DROPLIST(WPline(j),VALUE=['YES','NO']) - WParray(j,8)=WIDGET_LABEL(WPline(j),VALUE='y2lab:') - WParray(j,9)=WIDGET_DROPLIST(WPline(j),VALUE=['YES','NO']) - - - - j=11 - WPline(j)=WIDGET_BASE(WPbox(i), /ROW) - WParray(j,0)=WIDGET_BUTTON(pbase, VALUE='CLOSE') - - WIDGET_CONTROL, /REALIZE, pbase - XMANAGER, 'PARAMETER', pbase - subwin(0)=1 -RETURN -END - - -;----------------------------------------------------------------------------- -PRO parameter_event, ev -COMMON AXISFRAME,axis_orient,frametype,outx1lab,outx2lab,outy1lab,outy2lab -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON THREED, Ax3D,Az3D,smoothing -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON WPARAM,WParray,root,WParam5,WParam6 -COMMON TIMESERIES, modspec,obs,obs2,om,ts_filetype, nbins, bulktype,scatvar -COMMON WW3, ww3date,ww3time,ww3fieldname,ww3scale,ww3miss,ww3unit,ww3lon, $ - ww3lat,ww3matrix,ww3dir,ww3path -COMMON OVERLAY, addir,adsyms,adbathy,adcoast,psyms,psymsizes,adtr,adtri -COMMON OVERLAY2,adbathydot,adcontour -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON FREQ, freq,nfband,findex,findex2 -COMMON DIR, nabin,nabint,aindex,THETA -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr -COMMON HScalc,Hsc -;*******END OF COMMON BLOCKS******************************* - - type = TAG_NAMES(ev, /STRUCTURE) - CASE type OF - 'WIDGET_BUTTON': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE value OF - 'CLOSE': BEGIN - WIDGET_CONTROL, /DESTROY, ev.top - RETURN - END - 'Font': BEGIN - font=XFONT(GROUP=ev.top,/PRESERVE) - print,font - WIDGET_CONTROL, GET_VALUE=drawval, Wdraw - WSET, drawval - END - ENDCASE - END - - 'WIDGET_TEXT_CH': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - print,ev.id - CASE ev.id OF - WParray(0,1): numlevels=FIX(value(0)) - WParray(2,4): smoothing=FIX(value(0)) - WParray(2,6): nbins=FIX(value(0)) - WParray(4,4): cbnticks=FIX(value(0)) - WParray(8,1): pwinx=FLOAT(value(0)) - WParray(8,3): pwiny=FLOAT(value(0)) - WParray(9,1): facpolice=FLOAT(value(0)) - WParray(9,8): basefontsize=FIX(value(0)) - WParray(9,3): xoffset=FLOAT(value(0)) - WParray(9,5): yoffset=FLOAT(value(0)) - WParray(5,1): blx=FLOAT(value(0)) - WParray(5,3): bly=FLOAT(value(0)) - WParray(5,5): trx=FLOAT(value(0)) - WParray(5,7): try=FLOAT(value(0)) - WParray(5,9): textx=FLOAT(value(0)) - WParray(5,11): texty=FLOAT(value(0)) - WParray(5,13): textdx=FLOAT(value(0)) - WParray(5,15): textdy=FLOAT(value(0)) - WParray(6,1): cbblx=FLOAT(value(0)) - WParray(6,3): cbbly=FLOAT(value(0)) - WParray(6,5): cbtrx=FLOAT(value(0)) - WParray(6,7): cbtry=FLOAT(value(0)) - ENDCASE - END - 'WIDGET_DROPLIST':BEGIN - CASE ev.id of - WParray(0,2): c_repart=ev.index - WParray(0,3): adcontour=ev.index - WParray(1,0): logplot=ev.index - WParray(1,1): fixrange=ev.index - WParray(1,2): filloutofrange=1-ev.index - WParray(3,1): outtit=1-ev.index - WParray(3,3): outxtit=1-ev.index - WParray(3,5): outytit=1-ev.index - WParray(3,7): outcbtit=1-ev.index - WParray(4,1): cbar=1-ev.index - WParray(4,2): cbexrange=1-ev.index - WParray(6,9): axis_orient=ev.index - WParray(7,1): psor=ev.index - WParray(7,3): psfont=ev.index - WParray(9,6):fontrescale=1-ev.index - WParray(10,1): frametype=ev.index - WParray(10,3): outx1lab=1-ev.index - WParray(10,5): outx2lab=1-ev.index - WParray(10,7): outy1lab=1-ev.index - WParray(10,9): outy2lab=1-ev.index - ENDCASE - print,'TS:', ts_filetype - END - 'WIDGET_SLIDER': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE (ev.id) OF - WParray(2,1): Ax3D=FLOAT(value) - WParray(2,2): Az3D=FLOAT(value) - ENDCASE - END - ENDCASE -RETURN -END - - diff --git a/model/aux/idl_twist/rayp.f90 b/model/aux/idl_twist/rayp.f90 deleted file mode 100755 index 6d9f89916..000000000 --- a/model/aux/idl_twist/rayp.f90 +++ /dev/null @@ -1,545 +0,0 @@ -!********************************************************************* -MODULE RKPARAM !parameters for Runge Kutta solver - REAL,DIMENSION(3) :: yscal - REAL h1,hmin,eps - REAL co,freq,dl - INTEGER,PARAMETER :: ndim=3 -END MODULE RKPARAM -!********************************************************************* -MODULE BATHYGRID !bottom topography grid - REAL rlonmax,rlonmin,rlatmin,rlatmax,rot - INTEGER nx,ny,ip,jp - REAL sx,sy,deltaz - REAL(kind=4) ,DIMENSION(:,:),ALLOCATABLE :: grid - REAL ,DIMENSION(1,6) :: einter - REAL ,DIMENSION(1,12) :: dinter -END MODULE BATHYGRID -!********************************************************************* -MODULE Raytraj !bottom topography grid - real xch(500),ych(500),ach(500) - INTEGER nchunk - REAL timestep,depthmin,depthmax -END MODULE Raytraj -!********************************************************************* -MODULE Constants - REAL, PARAMETER :: pi = 3.14159265,tpi=6.2831853,d2r=.01745329 - REAL, PARAMETER :: max15bit=32768.,max8bit=256.,max7bit=128. - REAL, PARAMETER :: max14bit=16384. - INTEGER, PARAMETER :: i15bit=32768,i8bit=256,i7bit=128,i14bit=16384 - REAL, PARAMETER :: g = 9.81 !gravity : SI (m/s^2) - REAL, PARAMETER :: rhow = 1026. !water density : SI (kg/m^3) - REAL, PARAMETER :: kappa = 0.4 !Von Karman's constant - REAL, PARAMETER :: nu = 3.E-6 !Salt water kinematic viscosity - REAL, DIMENSION(:),ALLOCATABLE ::invxtanhx - INTEGER ntanh -END MODULE Constants - -!********************************************************************** -SUBROUTINE tfact(depth,f,fact,fact2) -!... calculates the transformation factor (dk/dko)*(cgo/cg) -!... to avoid floating point exception in sinh, max value of sig=75 -!... first get wave no. and group velocity at transformation site - IMPLICIT NONE - REAL, INTENT(in) ::depth,f - REAL, INTENT(out) ::fact,fact2 - REAL d,dk,c,cg,dk0,c0,cg0 - - CALL disp(depth,f,dk,c,cg) - d=800. - CALL disp(d,f,dk0,c0,cg0) - fact=(dk/dk0)*(cg0/cg) - fact2=(dk/cg) - RETURN -END - - -!********************************************************************* -SUBROUTINE ref(xs,ys,as,iflag) -!********************************************************************* -! This routine integrates the ray equations (using the Cash-Karp Runge-Kutta -! driver RKdriver, from the initial position (xs,ys) until it crosses into a -! different zone. The subroutine returns the position and direction of the -! ray at the zone boundary. -! -! If the Fsource flag is equal to 1 then the routine also computes linear interpolation -! coefficents from the grid points. These coefficients are weighted by the propagation time. -! In order to do that the routine keeps track of the current timestep, -! direction bin and triangle. If any of these change then a new set of -! interpolation coefficients is generated. If not, the coefficients are updated -! and are given more weight. This is checked at every mini-timestep (h1) of the -! RKdriver. -! -! When the zone boundary is reached, coefficents are genrated in order -! to be able to interpolate energy density from the neighboring grid -! points at the end of the ray. -!********************************************************************* - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL,INTENT(inout) :: xs,ys,as !start position (grid units) and angle (rad) - INTEGER,INTENT(out) :: iflag !IFlag=0 hit land or cross-shelf boundary, - - REAL x1,x2,tchunk,dt1 - REAL yrad(3) ! current x,y, and angle - INTEGER kchunk,nstep - - !WRITE(6,*) 'xs ....',xs,ys,as,iflag - yrad(1)=xs - yrad(2)=ys - yrad(3)=as - - tchunk=0. - IFlag=2 - nchunk=0 - -! Starts first chunk - CALL RKdriver(yrad) !take a step - dt1=h1/(60.) !time = time step * (C / Cg) - tchunk=dt1 - kchunk=1 - - DO nstep=1,100000 - CALL RKdriver(yrad) !take a step - tchunk=tchunk+dt1 - - - IF (tchunk.GT.timestep) THEN !timestep change - nchunk=nchunk+1 - xch(nchunk)=yrad(1)*sx/1000. - ych(nchunk)=yrad(2)*sy/1000. - ach(nchunk)=yrad(3)*180/pi - tchunk=tchunk-timestep - ENDIF - - IF (yrad(1).lt.20.or.yrad(1).gt.nx-20) IFlag=0 - IF (yrad(2).lt.20.or.yrad(2).gt.ny-20) IFlag=0 - IF (dl.gt.depthmax) IFlag=1 - IF (dl.lt.depthmin) IFlag=0 - IF (iflag.eq.0.or.iflag.eq.1) THEN - !WRITE(6,*) dl,depthmin,nchunk*timestep+tchunk - nchunk=nchunk+1 - xch(nchunk)=yrad(1)*sx/1000. - ych(nchunk)=yrad(2)*sy/1000. - ach(nchunk)=yrad(3)*180/pi - RETURN - ENDIF - ENDDO !end of do loop on nstep - print *,' error - too many steps ' - !stop - RETURN - end - - -!********************************************************************** -SUBROUTINE RKdriver(ystart) -! Integrates the 3 starting variables from 0 to h1 -! with accuracy eps. h1 is a guess of the step size, hmin is the -! min step size (0 is ok) ystart is overwritten with the desired -! answer -! yscal is a vector containing the typical scales of each variable -! these scales define the admissible errors: eps*yscal(i) -!********************************************************************** -! The Cash-Karp Runge Kutta solver is adapted to this specific problem -! by Fabrice Ardhuin, june 1999, from Numerical Recipes, 2nd ed. -!********************************************************************** - USE RKPARAM - USE Constants - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::ystart - INTEGER,PARAMETER ::maxstp=1000 - REAL,DIMENSION(ndim) :: y,dydt - REAL x,h,hdid,hnext - INTEGER nstp - - x=0. - h=h1 - y(:)=ystart(:) - DO nstp=1,maxstp - !WRITE(6,*) 'RK driver',nstp,y(1),y(2),y(3),h - CALL derivs(y,dydt) - IF(x+h.gt.h1) h=h1-x !limits step if it goes over the remaining - !time h1-x - CALL rkqs(y,dydt,h,hdid,hnext) - x=x+hdid - IF(x.ge.h1) THEN - ystart(:)=y(:) - !WRITE(6,*) 'RKdriver',x,hdid,h1,nstp,dl - !WRITE(6,*) 'ycurr',ystart - RETURN - ENDIF - h=hnext - ENDDO - WRITE(6,*) 'Step size too smal in RK driver',nstp,x,h1,hdid - STOP - RETURN -END - -!********************************************************************** -SUBROUTINE derivs(y,dydt) -! c=phase speed and dydt are the derivatives of the n vectors -! with respect to time. -!********************************************************************** - USE RKPARAM - USE BATHYGRID - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y - REAL,DIMENSION(ndim),INTENT(out)::dydt - - REAL xg,yg,cg,depth,dcdx,dcdy,ca,sa - - xg=y(1) - yg=y(2) - CALL speed(xg,yg,cg,depth,dcdx,dcdy) - ca=cos(y(3)) - sa=sin(y(3)) - dydt(1)=cg*ca/sx ! x and y are the coordinates in grid units - dydt(2)=cg*sa/sy - dydt(3)=cg*(sa*dcdx/sx-ca*dcdy/sy) - RETURN -END - -!********************************************************************** -SUBROUTINE rkqs(y,dydt,htry,hdid,hnext) -! Fifth order R-K step with monitoring of local error. Input -! is the n-vector of the input variable y and its derivatives -! dydt at the starting value of x. htry is the stepsize to be -! attempted, eps is the required accuracy and yscal is a -! vector against which error is scaled. On output, y and x -! are replaced by their new values,hid is the accomplished -! stepsize and hnext is the estimate of the next stepsize. -!********************************************************************** - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::y,dydt - REAL, INTENT(in) ::htry - REAL, INTENT(out) ::hdid,hnext - - REAL,PARAMETER :: pgrow=-.2 - REAL,PARAMETER :: pshrink=-.25 - REAL,PARAMETER :: safety=.9 - REAL,PARAMETER :: errcon=1.89e-4 !errcon=(5/safety)**(1/pgrow) - REAL,DIMENSION(3):: yerr,ytemp - REAL h,htemp,errmax - INTEGER i,kount - kount=0 - - h=htry - DO - kount=kount+1 - CALL rkck(y,dydt,h,ytemp,yerr) - errmax=0. - DO i=1,ndim - errmax=MAX(errmax,abs(yerr(i)/yscal(i))) - ENDDO - errmax=errmax/eps - !WRITE(6,*) 'RKQS',errmax,kount,h - IF(errmax.GT.1) THEN - htemp=safety*h*(errmax**pshrink) - h=MAX(htemp,0.1*h) !h should always be positive !! - !I got rid of the test on xnew=x - ELSE - IF(errmax.gt.errcon) THEN - hnext=safety*h*(errmax**pgrow) - ELSE - hnext=5.0*h - ENDIF - hdid=h - y(:)=ytemp(:) - RETURN - ENDIF - ENDDO - !WRITE(6,*) 'Step size too smal in rkqs' - RETURN -END - -!********************************************************************** -SUBROUTINE rkck(y,dydt,h,yout,yerr) -! For ndim variables y and their derivs dydt known at y, use -! to advance solution over an interval h and return the -! incremented variables as yout ( which may be the same as y) -! the SUBROUTINE derivs(y,dydt) returns dydt at y - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y,dydt - REAL, INTENT(in) ::h - REAL,DIMENSION(ndim),INTENT(out) ::yout,yerr - - REAL,DIMENSION(ndim) :: ak2,ak3,ak4,ak5,ak6,ytemp - REAL,PARAMETER :: A2=.2,A3=.3,A4=.6,A5=1.,A6=.875 - REAL,PARAMETER :: B21=.2,B31=.075,B32=9./40. - REAL,PARAMETER :: B41=.3,B42=-.9,B43=1.2 - REAL,PARAMETER :: B51=-11./54.,B52=2.5,B53=-70/27.,B54=35./27. - REAL,PARAMETER :: B61=1631./55296.,B62=175./512.,B63=575./13824. - REAL,PARAMETER :: B64=44275./110592.,B65=253./4096. - REAL,PARAMETER :: C1=37./378.,C3=250./621.,C4=125./594.,C6=512./1771. - REAL,PARAMETER :: DC1=C1-2825./27648.,DC3=C3-18575./48384. - REAL,PARAMETER :: DC4=C4-13525/55296.,DC5=-277/14336,DC6=C6-.25 - - ytemp(:)=y(:)+B21*h*dydt(:) - CALL derivs(ytemp,ak2) - ytemp(:)=y(:)+h*(B31*dydt(:)+B32*ak2(:)) - CALL derivs(ytemp,ak3) - ytemp(:)=y(:)+h*(B41*dydt(:)+B42*ak2(:)+B43*ak3(:)) - CALL derivs(ytemp,ak4) - ytemp(:)=y(:)+h*(B51*dydt(:)+B52*ak2(:)+B53*ak3(:)+B54*ak4(:)) - CALL derivs(ytemp,ak5) - ytemp(:)=y(:)+h*(B61*dydt(:)+B62*ak2(:)+B63*ak3(:)+B64*ak4(:)+B65*ak5(:)) - CALL derivs(ytemp,ak6) - yout(:)=y(:)+h*(C1*dydt(:)+C3*ak3(:)+C4*ak4(:)+C6*ak6(:)) - yerr(:)=h*(DC1*dydt(:)+DC3*ak3(:)+DC4*ak4(:)+DC6*ak6(:)) - RETURN -END - -!********************************************************************** -SUBROUTINE speed(xg,yg,cg,depth,dcdx,dcdy) -!********************************************************************** -! Wave speed gradients, from Dobson (1967), for not-too-shallow water -! Code by William C. O'Reilly (1990-1998) -! Modified by Fabrice Ardhuin (1999) to accomodate any depth. -! Modified .................. 11/8/2000 with a Newton-Rapson method for -! the inversion of the dispersion relation -!********************************************************************** -! uses biquadric interpolation (bilinear would not be smooth) -!... calculates the depth, wave phase speed and gradients -! Positions of the grid points (+) used in the computations -! The current point xg,yg (*) is located in the [1,2,3,4] rectangle -! + 8 + 7 -! -! + 9 + 4 + 3 + 6 -! * -! + 10 + 1 + 2 + 5 -! -! + 11 + 12 -!********************************************************************** - USE BATHYGRID - USE Constants - USE RKparam - IMPLICIT NONE - REAL, INTENT(in) ::xg,yg - REAL, INTENT(out) ::cg,depth,dcdx,dcdy - - REAL,DIMENSION(12,6),SAVE :: sxy=reshape((/ 0.30861241,0.23684207,0.21770331, & - 0.23684207,-0.08492823,-0.05143541,-0.05143541,-0.08492823,0.00598086, & - 0.13038277,0.13038277,0.00598086, & - 0.05322964,0.19677030,0.14413872,0.10586122,0.09031100,-0.06758374, & - -0.03349283,0.03349282,-0.18241626,-0.34031099,-0.12440190,0.12440190, & - 0.05322964,0.10586122,0.14413872,0.19677030,0.03349282,-0.03349283, & - -0.06758374,0.09031099,0.12440190,-0.12440191,-0.34031099,-0.18241625, & - -0.125,-0.125,-0.125,-0.125,0.125,0.125, & - 0.,0.,0.125,0.125,-0.,-0., & - 0.05263157,-0.05263157,0.05263158,-0.05263157,-0.15789473,0.15789474, & - 0.15789474,-0.15789473,-0.15789473,0.15789473,0.15789473,-0.15789473, & - -0.125,-0.125,-0.125,-0.125,0.,0., & - 0.125,0.125,-0.,-0.,0.125,0.125 /),(/12,6/)) - - - INTEGER i,j - REAL X,Y,sigma,dy,k,c - REAL xp,yp,sig,aka,yhat,t,a,dddx,dddy,dcdd - - i=INT(xg) - j=INT(yg) - xp=mod(xg,1.0) - yp=mod(yg,1.0) - IF(ip.ne.i.OR.jp.NE.j) THEN - ip=i - jp=j - dinter(1,11)=grid(i,j-1) - dinter(1,12)=grid(i+1,j-1) - dinter(1,10)=grid(i-1,j) - dinter(1,1)=grid(i,j) - dinter(1,2)=grid(i+1,j) - dinter(1,5)=grid(i+2,j) - dinter(1,9)=grid(i-1,j+1) - dinter(1,4)=grid(i,j+1) - dinter(1,3)=grid(i+1,j+1) - dinter(1,6)=grid(i+2,j+1) - dinter(1,8)=grid(i,j+2) - dinter(1,7)=grid(i+1,j+2) - einter=MATMUL(dinter,sxy) - ENDIF - depth=einter(1,1)+(einter(1,2)+einter(1,4)*xp+einter(1,5)*yp)*xp & - +(einter(1,3)+einter(1,6)*yp)*yp - -!... adjust water level here - depth=depth+deltaz - - IF(depth.lt.1.) depth=1. - dl=depth -!... gradients of bottom depths - dddx=einter(1,4)*2.*xp+einter(1,5)*yp+einter(1,2) - dddy=einter(1,6)*2.*yp+einter(1,5)*xp+einter(1,3) -!... calculate phase speed gradient with depth -!... (accurate in Shallow Water where Dobson was not) - sigma=freq*tpi - Y=(sigma**2*DEPTH)/G - IF (Y.GE.14.5) THEN - X=Y - ELSE - I=INT(Y*REAL(ntanh)/15.) - dy=mod(Y*REAL(ntanh)/15.,1.0) - X=(invxtanhx(I)*(1-dy)+invxtanhx(I+1)*dy) - ENDIF - k=X/DEPTH - c=sigma/k - cg=g*((y/x)+x*(1-(y/x)**2))/(2.*sigma) - !dk=aka/depth - !cg=tpi*freq/dk - !rc=c/co - ! old formula: Dobson - !dcdd=sig*(1.-rc*rc)/(c*rc+sig*depth*(1-rc*rc)) - ! the following formula is exaclty equivalent to Dobson in deep water - ! but it is accurate in shallow water - dcdd=(1-y/(y+x**2-y**2))/depth !=(dc/dh)/c - dcdx=dcdd*dddx - dcdy=dcdd*dddy - !WRITE(6,*) 'SPEED',X,Y,I1,xinvxtanh(I1+1),k,c - !WRITE(6,*) 'SPEED',xg,yg,cg,depth,dcdx,dcdy - RETURN - END - -!********************************************************************* - SUBROUTINE DISP(depth,freq,k,c,cg) -!********************************************************************* - USE Constants - IMPLICIT NONE - REAL, INTENT(in) ::depth,freq !depth (m) and frequency (Hz) - REAL, INTENT(out) ::k,c,cg !wave number (m-1),phase speed (m/s) - REAL dep,sigma,X,Y,dy - INTEGER I - - dep=depth - IF (depth.LT.1) dep=1. - sigma=freq*tpi - Y=(sigma**2*DEP)/G - IF (Y.GE.14.5) THEN - X=Y - ELSE - I=INT(Y*REAL(ntanh)/15.) - dy=mod(Y*REAL(ntanh)/15.,1.0) - X=invxtanhx(I)*(1-dy)+invxtanhx(I+1)*dy - ENDIF - k=X/DEP - c=sigma/k - cg=g*((y/x)+x*(1-(y/x)**2))/(2.*sigma) - - RETURN - END - - -!********************************************************************* - SUBROUTINE TABULATE -!********************************************************************* - USE Constants - USE RKPARAM - IMPLICIT NONE - - REAL X,Y,H,F,FD - INTEGER I,J - ntanh=10000 - ALLOCATE(invxtanhx(0:ntanh)) - DO J=0,ntanh - Y=15.*REAL(J)/ntanh - X=Y - F=1. - DO 10 I=1,100 - H=TANH(X) - F=Y-X*H - IF (ABS(F) .LT. 1.E-6) GO TO 20 - FD=-H-X/COSH(X)**2 - X=X-F/FD -10 CONTINUE - PRINT *,' SUBROUTINE DISP DOES NOT CONVERGE !!! ' -20 invxtanhx(J)=X - ENDDO - RETURN - END - -!********************************************************************** -!********************************************************************** -!********************************************************************** -!********************************************************************** -PROGRAM rayplot - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL dtheta,theta0,xs,ys,sig,dw,dk,c,cg,dto,h_len2 - REAL h_len,dxy,dcdx,dcdy,a_step,ang,angs - INTEGER I,J,nrays,Iray,k,ircode - CHARACTER(len=50):: fblog,fbathy - - CALL Tabulate - - - OPEN(3,file='Ray3a.inpray',status='old') - READ(3,'(a)') fblog - READ(3,'(a)') fbathy - READ(3,*) nrays - READ(3,*) freq,dtheta,theta0,timestep,depthmax,depthmin - READ(3,*) deltaz - READ(3,*) xs,ys - CLOSE(3) - - h_len=200 - - eps=0.0001 ! error tolerance in ray integration - -!------------------------------------------------------------------- -! Get bathymetry grid data -!------------------------------------------------------------------- - open(2,file=fblog) - read(2,*) rlonmax,rlonmin,rlatmin,rlatmax - read(2,*) rot - read(2,*) sx,sy - read(2,*) nx,ny - close(2) - yscal(1)=REAL(nx) - yscal(2)=REAL(ny) - yscal(3)=1. - -! Get the grid itself - ALLOCATE(grid(nx,ny)) - open(2,file=fbathy,form='unformatted',access='direct',recl=4*ny) - DO i=1,nx !beware 1 should be replaced by 4 on HP terminals - read(2,rec=i) (grid(i,j),j=1,ny) - ENDDO - CLOSE(2) - - sig=2.*pi*freq - - dw=800. - call disp(dw,freq,dk,c,cg) !calculate deep water phase speed - dto=timestep*60. - h_len2=cg*dto*0.1 !lengthen the steps for long output timestep - IF (h_len2 > h_len) h_len=h_len2 - - co=c - hmin=0. - h1=h_len/co !calculate initial ray time steps, h1 - ! (major factor in computation time) - CALL speed(xs,ys,c,dxy,dcdx,dcdy) - !WRITE(6,*) 'speed',xs,ys,c,dcdx,dcdy - a_step=dtheta - !OPEN(995,file='rays.bin',status='unknown',form='unformatted') - OPEN(995,file='rays.asc',status='unknown') - ang=theta0-a_step - DO IRAY=1,nrays - ang=ang+a_step - angs=ang*d2r !transforms to radians - CALL ref(xs,ys,angs,ircode) - !WRITE(6,*) 'ray:',IRAY,ang,ircode - ! write(995) nchunk,ircode - ! write(995) (xch(k),k=1,nchunk), & - ! (ych(k),k=1,nchunk),(ach(k),k=1,nchunk) - write(995,*) nchunk,ircode - write(995,*) (xch(k),k=1,nchunk), & - (ych(k),k=1,nchunk),(ach(k),k=1,nchunk) - ENDDO - CLOSE(995) - END diff --git a/model/aux/idl_twist/raypf.f90 b/model/aux/idl_twist/raypf.f90 deleted file mode 100755 index b42c66169..000000000 --- a/model/aux/idl_twist/raypf.f90 +++ /dev/null @@ -1,604 +0,0 @@ -!********************************************************************* -MODULE RKPARAM !parameters for Runge Kutta solver - REAL,DIMENSION(3) :: yscal - REAL h1,hmin,eps - REAL co,freq,dl - INTEGER,PARAMETER :: ndim=3 -END MODULE RKPARAM -!********************************************************************* -MODULE BATHYGRID !bottom topography grid - REAL rlonmax,rlonmin,rlatmin,rlatmax,rot - INTEGER nx,ny,ip,jp - REAL sx,sy,deltaz - REAL(kind=4) ,DIMENSION(:,:),ALLOCATABLE :: grid - REAL ,DIMENSION(1,6) :: einter - REAL ,DIMENSION(1,12) :: dinter -END MODULE BATHYGRID -!********************************************************************* -MODULE Raytraj !bottom topography grid - real xch(500),ych(500),ach(500) - INTEGER nchunk - REAL timestep,depthmin,depthmax -END MODULE Raytraj -!********************************************************************* -MODULE Constants - REAL, PARAMETER :: pi = 3.14159265,tpi=6.2831853,d2r=.01745329 - REAL, PARAMETER :: max15bit=32768.,max8bit=256.,max7bit=128. - REAL, PARAMETER :: max14bit=16384. - INTEGER, PARAMETER :: i15bit=32768,i8bit=256,i7bit=128,i14bit=16384 - REAL, PARAMETER :: g = 9.81 !gravity : SI (m/s^2) - REAL, PARAMETER :: rhow = 1026. !water density : SI (kg/m^3) - REAL, PARAMETER :: kappa = 0.4 !Von Karman's constant - REAL, PARAMETER :: nu = 3.E-6 !Salt water kinematic viscosity - REAL, DIMENSION(:),ALLOCATABLE ::invxtanhx - INTEGER ntanh -END MODULE Constants - -!********************************************************************** -SUBROUTINE tfact(depth,f,fact,fact2) -!... calculates the transformation factor (dk/dko)*(cgo/cg) -!... to avoid floating point exception in sinh, max value of sig=75 -!... first get wave no. and group velocity at transformation site - IMPLICIT NONE - REAL, INTENT(in) ::depth,f - REAL, INTENT(out) ::fact,fact2 - REAL d,dk,c,cg,dk0,c0,cg0 - - CALL disp(depth,f,dk,c,cg) - d=800. - CALL disp(d,f,dk0,c0,cg0) - fact=(dk/dk0)*(cg0/cg) - fact2=(dk/cg) - RETURN -END - - -!********************************************************************* -SUBROUTINE ref(xs,ys,as,iflag) -!********************************************************************* -! This routine integrates the ray equations (using the Cash-Karp Runge-Kutta -! driver RKdriver, from the initial position (xs,ys) until it crosses into a -! different zone. The subroutine returns the position and direction of the -! ray at the zone boundary. -! -! If the Fsource flag is equal to 1 then the routine also computes linear interpolation -! coefficents from the grid points. These coefficients are weighted by the propagation time. -! In order to do that the routine keeps track of the current timestep, -! direction bin and triangle. If any of these change then a new set of -! interpolation coefficients is generated. If not, the coefficients are updated -! and are given more weight. This is checked at every mini-timestep (h1) of the -! RKdriver. -! -! When the zone boundary is reached, coefficents are genrated in order -! to be able to interpolate energy density from the neighboring grid -! points at the end of the ray. -!********************************************************************* - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL,INTENT(inout) :: xs,ys,as !start position (grid units) and angle (rad) - INTEGER,INTENT(out) :: iflag !IFlag=0 hit land or cross-shelf boundary, - - REAL x1,x2,tchunk,dt1 - REAL yrad(3) ! current x,y, and angle - INTEGER kchunk,nstep - - !WRITE(6,*) 'xs ....',xs,ys,as,iflag - yrad(1)=xs - yrad(2)=ys - yrad(3)=as - - tchunk=0. - IFlag=2 - nchunk=0 - -! Starts first chunk - nchunk=nchunk+1 - xch(nchunk)=yrad(1)*sx/1000. - ych(nchunk)=yrad(2)*sy/1000. - ach(nchunk)=yrad(3)*180/pi - - CALL RKdriver(yrad) !take a step - dt1=h1/(60.) !time = time step * (C / Cg) - tchunk=dt1 - kchunk=1 - - DO nstep=1,100000 - CALL RKdriver(yrad) !take a step - tchunk=tchunk+dt1 - !WRITE(6,*) 'STEP:',nstep,yrad(1),yrad(2),yrad(3) - - IF (tchunk.GT.timestep) THEN !timestep change - nchunk=nchunk+1 - xch(nchunk)=yrad(1)*sx/1000. - ych(nchunk)=yrad(2)*sy/1000. - ach(nchunk)=yrad(3)*180/pi - tchunk=tchunk-timestep - ENDIF - - IF (yrad(1).lt.10.or.yrad(1).gt.nx-10) IFlag=0 - IF (yrad(2).lt.10.or.yrad(2).gt.ny-10) IFlag=0 - IF (dl.gt.depthmax) IFlag=1 - IF (dl.lt.depthmin) IFlag=0 - IF (iflag.eq.0.or.iflag.eq.1) THEN - ! WRITE(6,*) 'FLAGG:',dl,depthmin,nchunk*timestep+tchunk - nchunk=nchunk+1 - xch(nchunk)=yrad(1)*sx/1000. - ych(nchunk)=yrad(2)*sy/1000. - ach(nchunk)=yrad(3)*180/pi - RETURN - ENDIF - ENDDO !end of do loop on nstep - print *,' error - too many steps ' - !stop - RETURN - end - - -!********************************************************************** -SUBROUTINE RKdriver(ystart) -! Integrates the 3 starting variables from 0 to h1 -! with accuracy eps. h1 is a guess of the step size, hmin is the -! min step size (0 is ok) ystart is overwritten with the desired -! answer -! yscal is a vector containing the typical scales of each variable -! these scales define the admissible errors: eps*yscal(i) -!********************************************************************** -! The Cash-Karp Runge Kutta solver is adapted to this specific problem -! by Fabrice Ardhuin, june 1999, from Numerical Recipes, 2nd ed. -!********************************************************************** - USE RKPARAM - USE Constants - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::ystart - INTEGER,PARAMETER ::maxstp=1000 - REAL,DIMENSION(ndim) :: y,dydt - REAL x,h,hdid,hnext - INTEGER nstp - - x=0. - h=h1 - y(:)=ystart(:) - DO nstp=1,maxstp - !WRITE(6,*) 'RK driver',nstp,y(1),y(2),y(3),h - CALL derivs(y,dydt) - IF(x+h.gt.h1) h=h1-x !limits step if it goes over the remaining - !time h1-x - CALL rkqs(y,dydt,h,hdid,hnext) - x=x+hdid - IF(x.ge.h1) THEN - ystart(:)=y(:) - !WRITE(6,*) 'RKdriver',x,hdid,h1,nstp,dl - !WRITE(6,*) 'ycurr',ystart - RETURN - ENDIF - h=hnext - ENDDO - WRITE(6,*) 'Step size too smal in RK driver',nstp,x,h1,hdid - STOP - RETURN -END - -!********************************************************************** -SUBROUTINE derivs(y,dydt) -! c=phase speed and dydt are the derivatives of the n vectors -! with respect to time. -!********************************************************************** - USE RKPARAM - USE BATHYGRID - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y - REAL,DIMENSION(ndim),INTENT(out)::dydt - - REAL xg,yg,cg,depth,dcdx,dcdy,ca,sa - - xg=y(1) - yg=y(2) - CALL speed(xg,yg,cg,depth,dcdx,dcdy) - ca=cos(y(3)) - sa=sin(y(3)) - dydt(1)=cg*ca/sx ! x and y are the coordinates in grid units - dydt(2)=cg*sa/sy - dydt(3)=cg*(sa*dcdx/sx-ca*dcdy/sy) - RETURN -END - -!********************************************************************** -SUBROUTINE rkqs(y,dydt,htry,hdid,hnext) -! Fifth order R-K step with monitoring of local error. Input -! is the n-vector of the input variable y and its derivatives -! dydt at the starting value of x. htry is the stepsize to be -! attempted, eps is the required accuracy and yscal is a -! vector against which error is scaled. On output, y and x -! are replaced by their new values,hid is the accomplished -! stepsize and hnext is the estimate of the next stepsize. -!********************************************************************** - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::y,dydt - REAL, INTENT(in) ::htry - REAL, INTENT(out) ::hdid,hnext - - REAL,PARAMETER :: pgrow=-.2 - REAL,PARAMETER :: pshrink=-.25 - REAL,PARAMETER :: safety=.9 - REAL,PARAMETER :: errcon=1.89e-4 !errcon=(5/safety)**(1/pgrow) - REAL,DIMENSION(3):: yerr,ytemp - REAL h,htemp,errmax - INTEGER i,kount - kount=0 - - h=htry - DO - kount=kount+1 - CALL rkck(y,dydt,h,ytemp,yerr) - errmax=0. - DO i=1,ndim - errmax=MAX(errmax,abs(yerr(i)/yscal(i))) - ENDDO - errmax=errmax/eps - !WRITE(6,*) 'RKQS',errmax,kount,h - IF(errmax.GT.1) THEN - htemp=safety*h*(errmax**pshrink) - h=MAX(htemp,0.1*h) !h should always be positive !! - !I got rid of the test on xnew=x - ELSE - IF(errmax.gt.errcon) THEN - hnext=safety*h*(errmax**pgrow) - ELSE - hnext=5.0*h - ENDIF - hdid=h - y(:)=ytemp(:) - RETURN - ENDIF - ENDDO - !WRITE(6,*) 'Step size too smal in rkqs' - RETURN -END - -!********************************************************************** -SUBROUTINE rkck(y,dydt,h,yout,yerr) -! For ndim variables y and their derivs dydt known at y, use -! to advance solution over an interval h and return the -! incremented variables as yout ( which may be the same as y) -! the SUBROUTINE derivs(y,dydt) returns dydt at y - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y,dydt - REAL, INTENT(in) ::h - REAL,DIMENSION(ndim),INTENT(out) ::yout,yerr - - REAL,DIMENSION(ndim) :: ak2,ak3,ak4,ak5,ak6,ytemp - REAL,PARAMETER :: A2=.2,A3=.3,A4=.6,A5=1.,A6=.875 - REAL,PARAMETER :: B21=.2,B31=.075,B32=9./40. - REAL,PARAMETER :: B41=.3,B42=-.9,B43=1.2 - REAL,PARAMETER :: B51=-11./54.,B52=2.5,B53=-70/27.,B54=35./27. - REAL,PARAMETER :: B61=1631./55296.,B62=175./512.,B63=575./13824. - REAL,PARAMETER :: B64=44275./110592.,B65=253./4096. - REAL,PARAMETER :: C1=37./378.,C3=250./621.,C4=125./594.,C6=512./1771. - REAL,PARAMETER :: DC1=C1-2825./27648.,DC3=C3-18575./48384. - REAL,PARAMETER :: DC4=C4-13525/55296.,DC5=-277/14336,DC6=C6-.25 - - ytemp(:)=y(:)+B21*h*dydt(:) - CALL derivs(ytemp,ak2) - ytemp(:)=y(:)+h*(B31*dydt(:)+B32*ak2(:)) - CALL derivs(ytemp,ak3) - ytemp(:)=y(:)+h*(B41*dydt(:)+B42*ak2(:)+B43*ak3(:)) - CALL derivs(ytemp,ak4) - ytemp(:)=y(:)+h*(B51*dydt(:)+B52*ak2(:)+B53*ak3(:)+B54*ak4(:)) - CALL derivs(ytemp,ak5) - ytemp(:)=y(:)+h*(B61*dydt(:)+B62*ak2(:)+B63*ak3(:)+B64*ak4(:)+B65*ak5(:)) - CALL derivs(ytemp,ak6) - yout(:)=y(:)+h*(C1*dydt(:)+C3*ak3(:)+C4*ak4(:)+C6*ak6(:)) - yerr(:)=h*(DC1*dydt(:)+DC3*ak3(:)+DC4*ak4(:)+DC6*ak6(:)) - RETURN -END - -!********************************************************************** -SUBROUTINE speed(xg,yg,cg,depth,dcdx,dcdy) -!********************************************************************** -! Wave speed gradients, from Dobson (1967), for not-too-shallow water -! Code by William C. O'Reilly (1990-1998) -! Modified by Fabrice Ardhuin (1999) to accomodate any depth. -! Modified .................. 11/8/2000 with a Newton-Rapson method for -! the inversion of the dispersion relation -!********************************************************************** -! uses biquadric interpolation (bilinear would not be smooth) -!... calculates the depth, wave phase speed and gradients -! Positions of the grid points (+) used in the computations -! The current point xg,yg (*) is located in the [1,2,3,4] rectangle -! + 8 + 7 -! -! + 9 + 4 + 3 + 6 -! * -! + 10 + 1 + 2 + 5 -! -! + 11 + 12 -!********************************************************************** - USE BATHYGRID - USE Constants - USE RKparam - IMPLICIT NONE - REAL, INTENT(in) ::xg,yg - REAL, INTENT(out) ::cg,depth,dcdx,dcdy - - REAL,DIMENSION(12,6),SAVE :: sxy=reshape((/ 0.30861241,0.23684207,0.21770331, & - 0.23684207,-0.08492823,-0.05143541,-0.05143541,-0.08492823,0.00598086, & - 0.13038277,0.13038277,0.00598086, & - 0.05322964,0.19677030,0.14413872,0.10586122,0.09031100,-0.06758374, & - -0.03349283,0.03349282,-0.18241626,-0.34031099,-0.12440190,0.12440190, & - 0.05322964,0.10586122,0.14413872,0.19677030,0.03349282,-0.03349283, & - -0.06758374,0.09031099,0.12440190,-0.12440191,-0.34031099,-0.18241625, & - -0.125,-0.125,-0.125,-0.125,0.125,0.125, & - 0.,0.,0.125,0.125,-0.,-0., & - 0.05263157,-0.05263157,0.05263158,-0.05263157,-0.15789473,0.15789474, & - 0.15789474,-0.15789473,-0.15789473,0.15789473,0.15789473,-0.15789473, & - -0.125,-0.125,-0.125,-0.125,0.,0., & - 0.125,0.125,-0.,-0.,0.125,0.125 /),(/12,6/)) - - - INTEGER i,j - REAL X,Y,sigma,dy,k,c - REAL xp,yp,sig,aka,yhat,t,a,dddx,dddy,dcdd - - i=INT(xg) - j=INT(yg) - xp=mod(xg,1.0) - yp=mod(yg,1.0) - IF(ip.ne.i.OR.jp.NE.j) THEN - ip=i - jp=j - dinter(1,11)=grid(i,j-1) - dinter(1,12)=grid(i+1,j-1) - dinter(1,10)=grid(i-1,j) - dinter(1,1)=grid(i,j) - dinter(1,2)=grid(i+1,j) - dinter(1,5)=grid(i+2,j) - dinter(1,9)=grid(i-1,j+1) - dinter(1,4)=grid(i,j+1) - dinter(1,3)=grid(i+1,j+1) - dinter(1,6)=grid(i+2,j+1) - dinter(1,8)=grid(i,j+2) - dinter(1,7)=grid(i+1,j+2) - einter=MATMUL(dinter,sxy) - ENDIF - depth=einter(1,1)+(einter(1,2)+einter(1,4)*xp+einter(1,5)*yp)*xp & - +(einter(1,3)+einter(1,6)*yp)*yp - -!... adjust water level here - depth=depth+deltaz - - IF(depth.lt.0.3) depth=0.3 - dl=depth -!... gradients of bottom depths - dddx=einter(1,4)*2.*xp+einter(1,5)*yp+einter(1,2) - dddy=einter(1,6)*2.*yp+einter(1,5)*xp+einter(1,3) -!... calculate phase speed gradient with depth -!... (accurate in Shallow Water where Dobson was not) - sigma=freq*tpi - Y=(sigma**2*DEPTH)/G - IF (Y.GE.14.5) THEN - X=Y - ELSE - I=INT(Y*REAL(ntanh)/15.) - dy=mod(Y*REAL(ntanh)/15.,1.0) - X=(invxtanhx(I)*(1-dy)+invxtanhx(I+1)*dy) - ENDIF - k=X/DEPTH - c=sigma/k - cg=g*((y/x)+x*(1-(y/x)**2))/(2.*sigma) - !dk=aka/depth - !cg=tpi*freq/dk - !rc=c/co - ! old formula: Dobson - !dcdd=sig*(1.-rc*rc)/(c*rc+sig*depth*(1-rc*rc)) - ! the following formula is exaclty equivalent to Dobson in deep water - ! but it is accurate in shallow water - dcdd=(1-y/(y+x**2-y**2))/depth !=(dc/dh)/c - dcdx=dcdd*dddx - dcdy=dcdd*dddy - !WRITE(6,*) 'SPEED',X,Y,I1,xinvxtanh(I1+1),k,c - !WRITE(6,*) 'SPEED',xg,yg,cg,depth,dcdx,dcdy - RETURN - END - -!********************************************************************* - SUBROUTINE DISP(depth,freq,k,c,cg) -!********************************************************************* - USE Constants - IMPLICIT NONE - REAL, INTENT(in) ::depth,freq !depth (m) and frequency (Hz) - REAL, INTENT(out) ::k,c,cg !wave number (m-1),phase speed (m/s) - REAL dep,sigma,X,Y,dy - INTEGER I - - dep=depth - IF (depth.LT.1) dep=1. - sigma=freq*tpi - Y=(sigma**2*DEP)/G - IF (Y.GE.14.5) THEN - X=Y - ELSE - I=INT(Y*REAL(ntanh)/15.) - dy=mod(Y*REAL(ntanh)/15.,1.0) - X=invxtanhx(I)*(1-dy)+invxtanhx(I+1)*dy - ENDIF - k=X/DEP - c=sigma/k - cg=g*((y/x)+x*(1-(y/x)**2))/(2.*sigma) - - RETURN - END - - -!********************************************************************* - SUBROUTINE TABULATE -!********************************************************************* - USE Constants - USE RKPARAM - IMPLICIT NONE - - REAL X,Y,H,F,FD - INTEGER I,J - ntanh=10000 - ALLOCATE(invxtanhx(0:ntanh)) - DO J=0,ntanh - Y=15.*REAL(J)/ntanh - X=Y - F=1. - DO 10 I=1,100 - H=TANH(X) - F=Y-X*H - IF (ABS(F) .LT. 1.E-6) GO TO 20 - FD=-H-X/COSH(X)**2 - X=X-F/FD -10 CONTINUE - PRINT *,' SUBROUTINE DISP DOES NOT CONVERGE !!! ' -20 invxtanhx(J)=X - ENDDO - RETURN - END - -!********************************************************************** -!********************************************************************** -!********************************************************************** -!********************************************************************** -PROGRAM rayplot ! Forward ray-tracing version - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL distance,theta0,xs,ys,sig,dw,dk,c,cg,dto,h_len2,delx,dely - REAL h_len,dxy,dcdx,dcdy,a_step,ang,angs - INTEGER I,J,nrays,Iray,k,ircode,Iray1 - CHARACTER(len=160):: fblog,fbathy - - CALL Tabulate - - - OPEN(3,file='Ray3a.inpray',status='old') - READ(3,'(a)') fblog - READ(3,'(a)') fbathy - READ(3,*) nrays - READ(3,*) freq,distance,theta0,timestep,depthmax,depthmin - READ(3,*) deltaz - !READ(3,*) xs,ys - CLOSE(3) - - h_len=100 - - eps=0.0001 ! error tolerance in ray integration - -!------------------------------------------------------------------- -! Get bathymetry grid data -!------------------------------------------------------------------- - open(2,file=fblog) - read(2,*) rlonmax,rlonmin,rlatmin,rlatmax - read(2,*) rot - read(2,*) sx,sy - read(2,*) nx,ny - close(2) - yscal(1)=REAL(nx) - yscal(2)=REAL(ny) - yscal(3)=1. - -! Get the grid itself - ALLOCATE(grid(nx,ny)) - open(2,file=fbathy,form='unformatted',access='direct',recl=4*ny) - DO i=1,nx !beware 1 should be replaced by 4 on HP terminals - read(2,rec=i) (grid(i,j),j=1,ny) - ENDDO - CLOSE(2) - - sig=2.*pi*freq - - dw=800. - call disp(dw,freq,dk,c,cg) !calculate deep water phase speed - dto=timestep*60. - h_len2=cg*dto*0.1 !lengthen the steps for long output timestep - IF (h_len2 > h_len) h_len=h_len2 - - co=c - hmin=0. - !IF (h_len.GT.(sx+sy)*0.25) h_len=(sx+sy)*0.25 - h1=h_len/co !calculate initial ray time steps, h1 - ! (major factor in computation time) - - OPEN(995,file='rays.asc',status='unknown') - WRITE(6,*) 'Ray direction:',theta0 - ang=MOD(theta0,180.) !+180 - if (ang.GT.90) ang=ang-180. - if (ang.LT.-90) ang=ang+180. - WRITE(6,*) 'changed to:',ang,MOD(theta0,180.) - xs=21 - ys=21 - Iray1=0 - angs=ang*d2r !transforms to radians - delx=distance*1000./sx/sin(angs) - dely=distance*1000./sy/cos(angs) - WRITE(6,*) 'DELX,DELY:',distance,delx,dely,xs,ys,ang - IF ((delx.GT.0).AND.(dely.GT.0)) THEN - xs=21 - ys=ny-20 - ENDIF - DO IRAY=1,nrays - !WRITE(6,*) 'ray before:',IRAY,Iray1,xs,ys,ang - CALL ref(xs,ys,angs,ircode) - !WRITE(6,*) 'ray after :',IRAY,Iray1,xs,ys,ang,ircode - write(995,*) nchunk,ircode - write(995,*) (xch(k),k=1,nchunk), & - (ych(k),k=1,nchunk),(ach(k),k=1,nchunk) - - IF (delx.LT.0) THEN - IF (ABS(cos(angs)).GT.1E-5.AND.ys.LT.(ny-20)) THEN - ys=ys+dely - ELSE - ys=ny-20 - ENDIF - IF (ys.GT.(ny-20)) THEN - xs=xs+ABS((ys-ny+20)*sy/sx/tan(angs)) - ys=ny-20 - Iray1=Iray - ENDIF - IF (ys.EQ.ny-20.AND.(Iray.NE.Iray1)) THEN - xs=xs-delx - ENDIF - ELSE - IF (dely.GT.0) THEN - IF (ABS(cos(angs)).GT.1E-5.AND.ys.GT.21) THEN - ys=ys-dely - ELSE - ys=21 - ENDIF - IF (ys.LT.(21)) THEN - xs=xs+ABS((21-ys)*tan(angs)*sy/sx) - ys=21 - Iray1=Iray - ENDIF - ELSE - IF (ABS(cos(angs)).GT.1E-5.AND.ys.LT.(ny-20)) THEN - ys=ys-dely - ELSE - ys=ny-20 - ENDIF - - IF (ys.LT.(21)) THEN - xs=xs+ABS((ys-(ny-20))*tan(angs)*sy/sx) - ys=ny-20 - Iray1=Iray - ENDIF - ENDIF - - IF (ys.EQ.21.AND.(Iray.NE.Iray1)) THEN - xs=xs+delx - ENDIF - ENDIF - ENDDO - CLOSE(995) - END diff --git a/model/aux/idl_twist/raypfc.f90 b/model/aux/idl_twist/raypfc.f90 deleted file mode 100644 index 94613a610..000000000 --- a/model/aux/idl_twist/raypfc.f90 +++ /dev/null @@ -1,756 +0,0 @@ -!********************************************************************* -MODULE RKPARAM !parameters for Runge Kutta solver - REAL,DIMENSION(3) :: yscal - REAL h1,hmin,eps - REAL co,freq,dl - INTEGER,PARAMETER :: ndim=3 -END MODULE RKPARAM -!********************************************************************* -MODULE BATHYGRID !bottom topography grid - REAL rlonmax,rlonmin,rlatmin,rlatmax,rot - INTEGER nx,ny,ip,jp - REAL sx,sy,deltaz - REAL(kind=4), TARGET ,DIMENSION(:,:),ALLOCATABLE :: grid, U, V - REAL(kind=4), TARGET ,DIMENSION(1,6) :: gride,Ue, Ve - REAL(kind=4), TARGET ,DIMENSION(1,12) :: gridd,Ud,Vd -END MODULE BATHYGRID -!********************************************************************* -MODULE Raytraj !bottom topography grid - real xch(1500),ych(1500),ach(1500) - INTEGER nchunk - REAL timestep,depthmin,depthmax -END MODULE Raytraj -!********************************************************************* -MODULE Constants - REAL, PARAMETER :: pi = 3.14159265,tpi=6.2831853,d2r=.01745329 - REAL, PARAMETER :: max15bit=32768.,max8bit=256.,max7bit=128. - REAL, PARAMETER :: max14bit=16384. - INTEGER, PARAMETER :: i15bit=32768,i8bit=256,i7bit=128,i14bit=16384 - REAL, PARAMETER :: g = 9.81 !gravity : SI (m/s^2) - REAL, PARAMETER :: rhow = 1026. !water density : SI (kg/m^3) - REAL, PARAMETER :: kappa = 0.4 !Von Karman's constant - REAL, PARAMETER :: nu = 3.E-6 !Salt water kinematic viscosity - REAL, DIMENSION(:),ALLOCATABLE ::invxtanhx - REAL, DIMENSION(:,:),ALLOCATABLE ::invxtanhxc - INTEGER ntanh,ncur -END MODULE Constants - -!********************************************************************** -SUBROUTINE tfact(depth,f,fact,fact2) -!... calculates the transformation factor (dk/dko)*(cgo/cg) -!... to avoid floating point exception in sinh, max value of sig=75 -!... first get wave no. and group velocity at transformation site - IMPLICIT NONE - REAL, INTENT(in) ::depth,f - REAL, INTENT(out) ::fact,fact2 - REAL d,dk,c,cg,dk0,c0,cg0 - - CALL disp(depth,f,dk,c,cg) - d=800. - CALL disp(d,f,dk0,c0,cg0) - fact=(dk/dk0)*(cg0/cg) - fact2=(dk/cg) - RETURN -END - - -!********************************************************************* -SUBROUTINE ref(xs,ys,as,iflag) -!********************************************************************* -! This routine integrates the ray equations (using the Cash-Karp Runge-Kutta -! driver RKdriver, from the initial position (xs,ys) until it crosses into a -! different zone. The subroutine returns the position and direction of the -! ray at the zone boundary. -! -! If the Fsource flag is equal to 1 then the routine also computes linear interpolation -! coefficents from the grid points. These coefficients are weighted by the propagation time. -! In order to do that the routine keeps track of the current timestep, -! direction bin and triangle. If any of these change then a new set of -! interpolation coefficients is generated. If not, the coefficients are updated -! and are given more weight. This is checked at every mini-timestep (h1) of the -! RKdriver. -! -! When the zone boundary is reached, coefficents are genrated in order -! to be able to interpolate energy density from the neighboring grid -! points at the end of the ray. -!********************************************************************* - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL,INTENT(inout) :: xs,ys,as !start position (grid units) and angle (rad) - INTEGER,INTENT(out) :: iflag !IFlag=0 hit land or cross-shelf boundary, - - REAL x1,x2,tchunk,dt1 - REAL yrad(3) ! current x,y, and angle - INTEGER kchunk,nstep - - !WRITE(6,*) 'xs ....',xs,ys,as,iflag - yrad(1)=xs - yrad(2)=ys - yrad(3)=as - - tchunk=0. - IFlag=2 - nchunk=0 - -! Starts first chunk - nchunk=nchunk+1 - xch(nchunk)=yrad(1)*sx/1000. - ych(nchunk)=yrad(2)*sy/1000. - ach(nchunk)=yrad(3)*180/pi - - CALL RKdriver(yrad) !take a step - dt1=h1/(60.) !time = time step * (C / Cg) - tchunk=dt1 - kchunk=1 - - DO nstep=1,100000 - CALL RKdriver(yrad) !take a step - tchunk=tchunk+dt1 - !WRITE(6,*) 'STEP:',nstep,yrad(1),yrad(2),yrad(3) - - IF (tchunk.GT.timestep) THEN !timestep change - nchunk=nchunk+1 - xch(nchunk)=yrad(1)*sx/1000. - ych(nchunk)=yrad(2)*sy/1000. - ach(nchunk)=yrad(3)*180/pi - tchunk=tchunk-timestep - ENDIF - - IF (yrad(1).lt.10.or.yrad(1).gt.nx-10) IFlag=0 - IF (yrad(2).lt.10.or.yrad(2).gt.ny-10) IFlag=0 - IF (dl.gt.depthmax) IFlag=1 - IF (dl.lt.depthmin) IFlag=0 - IF (iflag.eq.0.or.iflag.eq.1) THEN - ! WRITE(6,*) 'FLAGG:',dl,depthmin,nchunk*timestep+tchunk - nchunk=nchunk+1 - xch(nchunk)=yrad(1)*sx/1000. - ych(nchunk)=yrad(2)*sy/1000. - ach(nchunk)=yrad(3)*180/pi - RETURN - ENDIF - ENDDO !end of do loop on nstep - print *,' error - too many steps ' - !stop - RETURN - end - - -!********************************************************************** -SUBROUTINE RKdriver(ystart) -! Integrates the 3 starting variables from 0 to h1 -! with accuracy eps. h1 is a guess of the step size, hmin is the -! min step size (0 is ok) ystart is overwritten with the desired -! answer -! yscal is a vector containing the typical scales of each variable -! these scales define the admissible errors: eps*yscal(i) -!********************************************************************** -! The Cash-Karp Runge Kutta solver is adapted to this specific problem -! by Fabrice Ardhuin, june 1999, from Numerical Recipes, 2nd ed. -!********************************************************************** - USE RKPARAM - USE Constants - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::ystart - INTEGER,PARAMETER ::maxstp=1000 - REAL,DIMENSION(ndim) :: y,dydt - REAL x,h,hdid,hnext - INTEGER nstp - - x=0. - h=h1 - y(:)=ystart(:) - DO nstp=1,maxstp - !WRITE(6,*) 'RK driver',nstp,y(1),y(2),y(3),h - CALL derivs(y,dydt) - IF(x+h.gt.h1) h=h1-x !limits step if it goes over the remaining - !time h1-x - CALL rkqs(y,dydt,h,hdid,hnext) - x=x+hdid - IF(x.ge.h1) THEN - ystart(:)=y(:) - !WRITE(6,*) 'RKdriver',x,hdid,h1,nstp,dl - !WRITE(6,*) 'ycurr',ystart - RETURN - ENDIF - h=hnext - ENDDO - WRITE(6,*) 'Step size too smal in RK driver',nstp,x,h1,hdid - STOP - RETURN -END - -!********************************************************************** -SUBROUTINE derivs(y,dydt) -! c=phase speed and dydt are the derivatives of the n vectors -! with respect to time. -!********************************************************************** - USE RKPARAM - USE BATHYGRID - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y - REAL,DIMENSION(ndim),INTENT(out)::dydt - - REAL xg,yg,cg,depth,dcdx,dcdy,ca,sa,Umean,Vmean, gUx, gUy, gVx, gVy - - xg=y(1) - yg=y(2) - CALL speed(xg,yg,y(3),cg,depth,dcdx,dcdy,Umean,Vmean, gUx, gUy, gVx, gVy) - !WRITE(6,*) 'SPEED:',xg,yg,cg,depth,dcdx,dcdy,Umean,Vmean, gUx, gUy, gVx, gVy - ca=cos(y(3)) - sa=sin(y(3)) - dydt(1)=(cg*ca+Umean)/sx ! x and y are the coordinates in grid units - dydt(2)=(cg*sa+Vmean)/sy - !dydt(3)=cg*(sa*dcdx/sx-ca*dcdy/sy)+sa**2*gVx+sa*ca*(gUx-gVy)-ca**2*gUy - dydt(3)=(sa*(cg*dcdx+sa*gVx+ca*gUx)/sx-ca*(cg*dcdy+ca*gUy+sa*gVy)/sy) - RETURN -END - -!********************************************************************** -SUBROUTINE rkqs(y,dydt,htry,hdid,hnext) -! Fifth order R-K step with monitoring of local error. Input -! is the n-vector of the input variable y and its derivatives -! dydt at the starting value of x. htry is the stepsize to be -! attempted, eps is the required accuracy and yscal is a -! vector against which error is scaled. On output, y and x -! are replaced by their new values,hid is the accomplished -! stepsize and hnext is the estimate of the next stepsize. -!********************************************************************** - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::y,dydt - REAL, INTENT(in) ::htry - REAL, INTENT(out) ::hdid,hnext - - REAL,PARAMETER :: pgrow=-.2 - REAL,PARAMETER :: pshrink=-.25 - REAL,PARAMETER :: safety=.9 - REAL,PARAMETER :: errcon=1.89e-4 !errcon=(5/safety)**(1/pgrow) - REAL,DIMENSION(3):: yerr,ytemp - REAL h,htemp,errmax - INTEGER i,kount - kount=0 - - h=htry - DO - kount=kount+1 - CALL rkck(y,dydt,h,ytemp,yerr) - errmax=0. - DO i=1,ndim - errmax=MAX(errmax,abs(yerr(i)/yscal(i))) - ENDDO - errmax=errmax/eps - !WRITE(6,*) 'RKQS',errmax,kount,h - IF(errmax.GT.1) THEN - htemp=safety*h*(errmax**pshrink) - h=MAX(htemp,0.1*h) !h should always be positive !! - !I got rid of the test on xnew=x - ELSE - IF(errmax.gt.errcon) THEN - hnext=safety*h*(errmax**pgrow) - ELSE - hnext=5.0*h - ENDIF - hdid=h - y(:)=ytemp(:) - RETURN - ENDIF - ENDDO - !WRITE(6,*) 'Step size too smal in rkqs' - RETURN -END - -!********************************************************************** -SUBROUTINE rkck(y,dydt,h,yout,yerr) -! For ndim variables y and their derivs dydt known at y, use -! to advance solution over an interval h and return the -! incremented variables as yout ( which may be the same as y) -! the SUBROUTINE derivs(y,dydt) returns dydt at y - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y,dydt - REAL, INTENT(in) ::h - REAL,DIMENSION(ndim),INTENT(out) ::yout,yerr - - REAL,DIMENSION(ndim) :: ak2,ak3,ak4,ak5,ak6,ytemp - REAL,PARAMETER :: A2=.2,A3=.3,A4=.6,A5=1.,A6=.875 - REAL,PARAMETER :: B21=.2,B31=.075,B32=9./40. - REAL,PARAMETER :: B41=.3,B42=-.9,B43=1.2 - REAL,PARAMETER :: B51=-11./54.,B52=2.5,B53=-70/27.,B54=35./27. - REAL,PARAMETER :: B61=1631./55296.,B62=175./512.,B63=575./13824. - REAL,PARAMETER :: B64=44275./110592.,B65=253./4096. - REAL,PARAMETER :: C1=37./378.,C3=250./621.,C4=125./594.,C6=512./1771. - REAL,PARAMETER :: DC1=C1-2825./27648.,DC3=C3-18575./48384. - REAL,PARAMETER :: DC4=C4-13525/55296.,DC5=-277/14336,DC6=C6-.25 - - ytemp(:)=y(:)+B21*h*dydt(:) - CALL derivs(ytemp,ak2) - ytemp(:)=y(:)+h*(B31*dydt(:)+B32*ak2(:)) - CALL derivs(ytemp,ak3) - ytemp(:)=y(:)+h*(B41*dydt(:)+B42*ak2(:)+B43*ak3(:)) - CALL derivs(ytemp,ak4) - ytemp(:)=y(:)+h*(B51*dydt(:)+B52*ak2(:)+B53*ak3(:)+B54*ak4(:)) - CALL derivs(ytemp,ak5) - ytemp(:)=y(:)+h*(B61*dydt(:)+B62*ak2(:)+B63*ak3(:)+B64*ak4(:)+B65*ak5(:)) - CALL derivs(ytemp,ak6) - yout(:)=y(:)+h*(C1*dydt(:)+C3*ak3(:)+C4*ak4(:)+C6*ak6(:)) - yerr(:)=h*(DC1*dydt(:)+DC3*ak3(:)+DC4*ak4(:)+DC6*ak6(:)) - RETURN -END - -!********************************************************************** -SUBROUTINE speed(xg,yg,dir,cg,depth,dcdx,dcdy,Umean,Vmean, gUx, gUy, gVx, gVy) -!********************************************************************** -! Wave speed gradients, from Dobson (1967), for not-too-shallow water -! Code by William C. O'Reilly (1990-1998) -! Modified by Fabrice Ardhuin (1999) to accomodate any depth. -! Modified .................. 11/8/2000 with a Newton-Rapson method for -! the inversion of the dispersion relation -!********************************************************************** -! uses biquadric interpolation (bilinear would not be smooth) -!... calculates the depth, wave phase speed and gradients -! Positions of the grid points (+) used in the computations -! The current point xg,yg (*) is located in the [1,2,3,4] rectangle -! + 8 + 7 -! -! + 9 + 4 + 3 + 6 -! * -! + 10 + 1 + 2 + 5 -! -! + 11 + 12 -!********************************************************************** - USE BATHYGRID - USE Constants - USE RKparam - IMPLICIT NONE - REAL, INTENT(in) ::xg,yg,dir - REAL, INTENT(out) ::cg,depth,dcdx,dcdy,Umean,Vmean, gUx, gUy, gVx, gVy - REAL(KIND=4), POINTER :: grid0(:,:) - REAL(KIND=4), POINTER,DIMENSION(:,:) :: einter - REAL (KIND=4), POINTER,DIMENSION(:,:) :: dinter - REAL,DIMENSION(12,6),SAVE :: sxy=reshape((/ 0.30861241,0.23684207,0.21770331, & - 0.23684207,-0.08492823,-0.05143541,-0.05143541,-0.08492823,0.00598086, & - 0.13038277,0.13038277,0.00598086, & - 0.05322964,0.19677030,0.14413872,0.10586122,0.09031100,-0.06758374, & - -0.03349283,0.03349282,-0.18241626,-0.34031099,-0.12440190,0.12440190, & - 0.05322964,0.10586122,0.14413872,0.19677030,0.03349282,-0.03349283, & - -0.06758374,0.09031099,0.12440190,-0.12440191,-0.34031099,-0.18241625, & - -0.125,-0.125,-0.125,-0.125,0.125,0.125, & - 0.,0.,0.125,0.125,-0.,-0., & - 0.05263157,-0.05263157,0.05263158,-0.05263157,-0.15789473,0.15789474, & - 0.15789474,-0.15789473,-0.15789473,0.15789473,0.15789473,-0.15789473, & - -0.125,-0.125,-0.125,-0.125,0.,0., & - 0.125,0.125,-0.,-0.,0.125,0.125 /),(/12,6/)) - - - INTEGER i,j,ifield - REAL X,Y,sigma,dy,k,c,mean,gx, gy, sigma2, Up - REAL xm,ym,xp,yp,sig,aka,yhat,t,a,dddx,dddy,dcdd - - xm=MAX(2.,MIN(xg,FLOAT(nx)-2.)) - ym=MAX(2.,MIN(yg,FLOAT(ny)-2.)) - i=INT(xm) - j=INT(ym) - xp=mod(xm,1.0) - yp=mod(ym,1.0) - - IF (ip.ne.i.OR.jp.NE.j) THEN - ip=i - jp=j - DO ifield=1,3 - IF (ifield.EQ.1) THEN - GRID0=> GRID - einter=> gride - dinter=> gridd - ENDIF - IF (ifield.EQ.2) THEN - GRID0=> U - einter=> Ue - dinter=> Ud - ENDIF - IF (ifield.EQ.3) THEN - GRID0=> V - einter=> Ve - dinter=> Vd - ENDIF - dinter(1,11)=grid0(i,j-1) - dinter(1,12)=grid0(i+1,j-1) - dinter(1,10)=grid0(i-1,j) - dinter(1,1 )=grid0(i,j) - dinter(1,2)=grid0(i+1,j) - dinter(1,5)=grid0(i+2,j) - dinter(1,9)=grid0(i-1,j+1) - dinter(1,4)=grid0(i,j+1) - dinter(1,3)=grid0(i+1,j+1) - dinter(1,6)=grid0(i+2,j+1) - dinter(1,8)=grid0(i,j+2) - dinter(1,7)=grid0(i+1,j+2) - einter=MATMUL(dinter,sxy) - ENDDO - ENDIF - DO ifield=1,3 - IF (ifield.EQ.1) THEN - GRID0=> GRID - einter=> gride - dinter=> gridd - ENDIF - IF (ifield.EQ.2) THEN - GRID0=> U - einter=> Ue - dinter=> Ud - ENDIF - IF (ifield.EQ.3) THEN - GRID0=> V - einter=> Ve - dinter=> Vd - ENDIF - - mean=einter(1,1)+(einter(1,2)+einter(1,4)*xp+einter(1,5)*yp)*xp & - +(einter(1,3)+einter(1,6)*yp)*yp -!... gradients of bottom depths - gx=einter(1,4)*2.*xp+einter(1,5)*yp+einter(1,2) - gy=einter(1,6)*2.*yp+einter(1,5)*xp+einter(1,3) - - IF (ifield.EQ.1) THEN - depth=mean - dddx=gx - dddy=gy - ENDIF - IF (ifield.EQ.2) THEN - Umean=mean - gUx=gx - gUy=gy -!IF (abs(U(i,j)) > 0.1) WRITE(6,*) 'TEST 2:',ifield,Umean,gx,gy,'#',U(i,j),grid0(i,j),Ud - ENDIF - IF (ifield.EQ.3) THEN - Vmean=mean - gVx=gx - gVy=gy -!WRITE(6,*) 'TEST 3:',ifield,Vmean,U(i,j),grid0(i,j) - ENDIF - END DO - -!... adjust water level here - depth=depth+deltaz - - IF(depth.lt.0.3) depth=0.3 - dl=depth -!... calculate phase speed gradient with depth -!... (accurate in Shallow Water where Dobson was not) - Up=(cos(dir)*Umean+sin(dir)*Vmean) - CALL DISPcur(depth,freq,Up,k,c,cg) - sigma=c*k - sigma2=freq*tpi - Y=(sigma**2*DEPTH)/G - X=k*DEPTH - ! WRITE(6,*) 'SIGMA:',sigma,Up,Umean,Vmean,sigma2 - c=sigma/k - cg=g*((y/x)+x*(1-(y/x)**2))/(2.*sigma) - !dk=aka/depth - !cg=tpi*freq/dk - !rc=c/co - ! old formula: Dobson - ! dcdd=sig*(1.-rc*rc)/(c*rc+sig*depth*(1-rc*rc)) - ! the following formula is exaclty equivalent to Dobson in deep water - ! but it is accurate in shallow water - dcdd=(1-y/(y+x**2-y**2))/depth !=(dc/dh)/c - dcdx=dcdd*dddx - dcdy=dcdd*dddy - !WRITE(6,*) 'SPEED',X,Y,I1,xinvxtanh(I1+1),k,c - !WRITE(6,*) 'SPEED',xg,yg,cg,depth,dcdx,dcdy - RETURN - END - -!********************************************************************* - SUBROUTINE DISP(depth,freq,k,c,cg) -!********************************************************************* - USE Constants - IMPLICIT NONE - REAL, INTENT(in) ::depth,freq !depth (m) and frequency (Hz) - REAL, INTENT(out) ::k,c,cg !wave number (m-1),phase speed (m/s) - REAL dep,sigma,X,Y,dy - INTEGER I - - dep=depth - IF (depth.LT.1) dep=1. - sigma=freq*tpi - Y=(sigma**2*DEP)/G - IF (Y.GE.14.5) THEN - X=Y - ELSE - I=INT(Y*REAL(ntanh)/15.) - dy=mod(Y*REAL(ntanh)/15.,1.0) - X=invxtanhx(I)*(1-dy)+invxtanhx(I+1)*dy - ENDIF - k=X/DEP - c=sigma/k - cg=g*((y/x)+x*(1-(y/x)**2))/(2.*sigma) - - RETURN - END - -!********************************************************************* - SUBROUTINE DISPcur(depth,freq,Up,k,c,cg) -!********************************************************************* - USE Constants - IMPLICIT NONE - REAL, INTENT(in) ::depth,freq, Up !depth (m) and frequency (Hz), and current in wave direction - REAL, INTENT(out) ::k,c,cg !wave number (m-1),phase speed (m/s) - REAL dep,omega,sigma,X,Y,dy,DC,Ur - INTEGER I,I2 - - dep=depth - IF (depth.LT.1) dep=1. - omega=freq*tpi - Y=(omega**2*DEP)/G - Ur=Up/sqrt(g*dep) - IF (Y.GE.14.5) THEN - IF (Up.GT.0.1) THEN - k=((2*omega*Up+g)-sqrt(g**2+4*omega*Up*g))/(2*Up**2) - ELSE - k=omega**2/g - ENDIF - ELSE - I=INT(Y*REAL(ntanh)/15.) -! Y=15.*REAL(J)/ntanh -! Up=20.*(-100+REAL(J2))/ncur - I2=INT(Ur*REAL(ncur)/2.+100) - dy=mod(Y*REAL(ntanh)/15.,1.0) - dC=mod(Ur*REAL(ncur)/2.+100,1.0) - X=(invxtanhxc(I,I2)*(1-dy)+invxtanhxc(I+1,I2)*dy)*(1-dC) & - +(invxtanhxc(I,I2+1)*(1-dy)+invxtanhxc(I+1,I2+1)*dy)*(dC) - k=X/DEP - ENDIF - sigma=sqrt(g*k*tanh(k*dep)) - c=sigma/k - cg=g*((y/x)+x*(1-(y/x)**2))/(2.*sigma) - !WRITE(6,*) 'TEST1:',I,I2,Y,Up,(omega-k*Up)**2*DEP/g,(sigma)**2*DEP/g,k*dep*tanh(k*dep) - - RETURN - END - - -!********************************************************************* - SUBROUTINE TABULATE -!********************************************************************* - USE Constants - USE RKPARAM - IMPLICIT NONE - - REAL X,Y,H,F,FD - INTEGER I,J - ntanh=2000 - ALLOCATE(invxtanhx(0:ntanh)) - DO J=0,ntanh - Y=15.*REAL(J)/ntanh - X=Y - F=1. - DO 10 I=1,100 - H=TANH(X) - F=Y-X*H - IF (ABS(F) .LT. 1.E-6) GO TO 20 - FD=-H-X/COSH(X)**2 - X=X-F/FD -10 CONTINUE - PRINT *,' SUBROUTINE DISP DOES NOT CONVERGE !!! ' -20 invxtanhx(J)=X - ENDDO - RETURN - END - -!********************************************************************* - SUBROUTINE TABULATECUR -!********************************************************************* - USE Constants - USE RKPARAM - IMPLICIT NONE - - REAL X,Y,H,F,FD, Up - INTEGER I,J,J2 - ntanh=2000 - ncur=200 - ALLOCATE(invxtanhxc(0:ntanh,0:ncur)) - DO J=0,ntanh - DO J2=0,ncur - Y=15.*REAL(J)/ntanh - Up=2.*(-100+REAL(J2))/ncur - X=Y - F=1. - DO 10 I=1,100 - H=TANH(X) - F=Y-X*H+X**2*Up**2-2*X*sqrt(Y)*Up - IF (ABS(F) .LT. 1.E-6) GO TO 20 - FD=-H-X/COSH(X)**2+2*X*Up**2-2*sqrt(Y)*Up - X=X-F/FD -10 CONTINUE -! PRINT *,' SUBROUTINE DISP DOES NOT CONVERGE !!! ',Y,Up -20 invxtanhxc(J,J2)=X - !IF (J.EQ.214.AND.J2.EQ.120) WRITE(6,*) 'TEST:',Y,invxtanhxc(J,J2),Up,F,(Y-X*Up/g),X*H - !IF (J.EQ.215.AND.J2.EQ.120) WRITE(6,*) 'TEST:',Y,invxtanhxc(J,J2),Up,F,(Y-X*Up/g),X*H - ENDDO - ENDDO - RETURN - END - -!********************************************************************** -!********************************************************************** -!********************************************************************** -!********************************************************************** -PROGRAM rayplot ! Forward ray-tracing version - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL distance,theta0,xs,ys,sig,dw,dk,c,cg,dto,h_len2,delx,dely - REAL h_len,dxy,dcdx,dcdy,a_step,ang,angs, depth, Up,wn - INTEGER I,J,nrays,Iray,k,ircode,Iray1 - CHARACTER(len=160):: fblog,fbathy - - CALL Tabulate -depth=10. -freq=0.1 -Up=2 - - CALL DISP(depth,freq,wn,c,cg) -!WRITE(6,*) 'disp test:',wn,C,g*wn*tanh(wn*depth),(tpi*freq)**2 - CALL TABULATECUR - CALL DISPcur(depth,freq,Up,wn,c,cg) -!WRITE(6,*) 'UPP:',wn,C,g*wn*tanh(wn*depth),(tpi*freq-wn*Up)**2 -! STOP - - OPEN(3,file='Ray3a.inpray',status='old') - READ(3,'(a)') fblog - READ(3,'(a)') fbathy - READ(3,*) nrays - READ(3,*) freq,distance,theta0,timestep,depthmax,depthmin - READ(3,*) deltaz - !READ(3,*) xs,ys - - h_len=100 - - eps=0.0001 ! error tolerance in ray integration - -!------------------------------------------------------------------- -! Get bathymetry grid data -!------------------------------------------------------------------- - open(2,file=fblog) - read(2,*) rlonmax,rlonmin,rlatmin,rlatmax - read(2,*) rot - read(2,*) sx,sy - read(2,*) nx,ny - close(2) - yscal(1)=REAL(nx) - yscal(2)=REAL(ny) - yscal(3)=1. - -! Get the grid itself - ALLOCATE(grid(nx,ny),U(nx,ny),V(nx,ny)) - open(2,file=fbathy,form='unformatted',access='direct',recl=4*ny) - DO i=1,nx !beware 1 should be replaced by 4 on HP terminals - read(2,rec=i) (grid(i,j),j=1,ny) - ENDDO - CLOSE(2) - DO j=1,ny !beware 1 should be replaced by 4 on HP terminals - !DO i=1,nx - read(3,*) U(1:NX,j) - IF (J.EQ.133) WRITE(6,*) 'J:',j,U(1:20,j) - !ENDDO - ENDDO - DO j=1,ny !beware 1 should be replaced by 4 on HP terminals - read(3,*) (V(i,j),i=1,nx) - ENDDO - CLOSE(3) - - WRITE(6,*) 'CURRENT:',MAXVAL(U),MINVAL(U),MAXVAL(V),MINVAL(V) - - sig=2.*pi*freq - - dw=800. - call disp(dw,freq,dk,c,cg) !calculate deep water phase speed - dto=timestep*60. - h_len2=cg*dto*0.1 !lengthen the steps for long output timestep - IF (h_len2 > h_len) h_len=h_len2 - - co=c - hmin=0. - !IF (h_len.GT.(sx+sy)*0.25) h_len=(sx+sy)*0.25 - h1=h_len/co !calculate initial ray time steps, h1 - ! (major factor in computation time) - - OPEN(995,file='rays.asc',status='unknown') - WRITE(6,*) 'Ray direction:',theta0 - ang=MOD(theta0,180.) !+180 - if (ang.GT.90) ang=ang-180. - if (ang.LT.-90) ang=ang+180. - WRITE(6,*) 'changed to:',ang,MOD(theta0,180.) - xs=21 - ys=21 - Iray1=0 - angs=ang*d2r !transforms to radians - delx=distance*1000./sx/sin(angs) - dely=distance*1000./sy/cos(angs) - WRITE(6,*) 'DELX,DELY:',distance,delx,dely,xs,ys,ang - IF ((delx.GT.0).AND.(dely.GT.0)) THEN - xs=21 - ys=ny-20 - ENDIF - DO IRAY=1,nrays - !WRITE(6,*) 'ray before:',IRAY,Iray1,xs,ys,ang - CALL ref(xs,ys,angs,ircode) - !WRITE(6,*) 'ray after :',IRAY,Iray1,xs,ys,ang,ircode - write(995,*) nchunk,ircode - write(995,*) (xch(k),k=1,nchunk), & - (ych(k),k=1,nchunk),(ach(k),k=1,nchunk) - - IF (delx.LT.0) THEN - IF (ABS(cos(angs)).GT.1E-5.AND.ys.LT.(ny-20)) THEN - ys=ys+dely - ELSE - ys=ny-20 - ENDIF - IF (ys.GT.(ny-20)) THEN - xs=xs+ABS((ys-ny+20)*sy/sx/tan(angs)) - ys=ny-20 - Iray1=Iray - ENDIF - IF (ys.EQ.ny-20.AND.(Iray.NE.Iray1)) THEN - xs=xs-delx - ENDIF - ELSE - IF (dely.GT.0) THEN - IF (ABS(cos(angs)).GT.1E-5.AND.ys.GT.21) THEN - ys=ys-dely - ELSE - ys=21 - ENDIF - IF (ys.LT.(21)) THEN - xs=xs+ABS((21-ys)*tan(angs)*sy/sx) - ys=21 - Iray1=Iray - ENDIF - ELSE - IF (ABS(cos(angs)).GT.1E-5.AND.ys.LT.(ny-20)) THEN - ys=ys-dely - ELSE - ys=ny-20 - ENDIF - - IF (ys.LT.(21)) THEN - xs=xs+ABS((ys-(ny-20))*tan(angs)*sy/sx) - ys=ny-20 - Iray1=Iray - ENDIF - ENDIF - - IF (ys.EQ.21.AND.(Iray.NE.Iray1)) THEN - xs=xs+delx - ENDIF - ENDIF - ENDDO - CLOSE(995) - END diff --git a/model/aux/idl_twist/raypg.f90 b/model/aux/idl_twist/raypg.f90 deleted file mode 100755 index 9570e1dba..000000000 --- a/model/aux/idl_twist/raypg.f90 +++ /dev/null @@ -1,574 +0,0 @@ -!********************************************************************* -MODULE RKPARAM !parameters for Runge Kutta solver - REAL,DIMENSION(3) :: yscal - REAL h1,hmin,eps - REAL co,freq,dl - INTEGER,PARAMETER :: ndim=3 -END MODULE RKPARAM -!********************************************************************* -MODULE BATHYGRID !bottom topography grid - REAL rlonmax,rlonmin,rlatmin,rlatmax,rot - INTEGER nx,ny,ip,jp - REAL sx,sy,deltaz - REAL(kind=4) ,DIMENSION(:,:),ALLOCATABLE :: grid - REAL ,DIMENSION(1,6) :: einter - REAL ,DIMENSION(1,12) :: dinter -END MODULE BATHYGRID -!********************************************************************* -MODULE Raytraj !bottom topography grid - real xch(500),ych(500),ach(500) - INTEGER nchunk - REAL timestep,depthmin,depthmax -END MODULE Raytraj -!********************************************************************* -MODULE Constants - REAL, PARAMETER :: pi = 3.14159265,tpi=6.2831853,d2r=.01745329 - REAL, PARAMETER :: max15bit=32768.,max8bit=256.,max7bit=128. - REAL, PARAMETER :: max14bit=16384. - INTEGER, PARAMETER :: i15bit=32768,i8bit=256,i7bit=128,i14bit=16384 - REAL, PARAMETER :: g = 9.81 !gravity : SI (m/s^2) - REAL, PARAMETER :: rhow = 1026. !water density : SI (kg/m^3) - REAL, PARAMETER :: kappa = 0.4 !Von Karman's constant - REAL, PARAMETER :: nu = 3.E-6 !Salt water kinematic viscosity - REAL, DIMENSION(:),ALLOCATABLE ::invxtanhx - INTEGER ntanh -END MODULE Constants - -!********************************************************************** -SUBROUTINE tfact(depth,f,fact,fact2) -!... calculates the transformation factor (dk/dko)*(cgo/cg) -!... to avoid floating point exception in sinh, max value of sig=75 -!... first get wave no. and group velocity at transformation site - IMPLICIT NONE - REAL, INTENT(in) ::depth,f - REAL, INTENT(out) ::fact,fact2 - REAL d,dk,c,cg,dk0,c0,cg0 - - CALL disp(depth,f,dk,c,cg) - d=800. - CALL disp(d,f,dk0,c0,cg0) - fact=(dk/dk0)*(cg0/cg) - fact2=(dk/cg) - RETURN -END - - -!********************************************************************* -SUBROUTINE ref(xs,ys,as,iflag) -!********************************************************************* -! This routine integrates the ray equations (using the Cash-Karp Runge-Kutta -! driver RKdriver, from the initial position (xs,ys) until it crosses into a -! different zone. The subroutine returns the position and direction of the -! ray at the zone boundary. -! -! If the Fsource flag is equal to 1 then the routine also computes linear interpolation -! coefficents from the grid points. These coefficients are weighted by the propagation time. -! In order to do that the routine keeps track of the current timestep, -! direction bin and triangle. If any of these change then a new set of -! interpolation coefficients is generated. If not, the coefficients are updated -! and are given more weight. This is checked at every mini-timestep (h1) of the -! RKdriver. -! -! When the zone boundary is reached, coefficents are genrated in order -! to be able to interpolate energy density from the neighboring grid -! points at the end of the ray. -!********************************************************************* - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL,INTENT(inout) :: xs,ys,as !start position (grid units) and angle (rad) - INTEGER,INTENT(out) :: iflag !IFlag=0 hit land or cross-shelf boundary, - - REAL x1,x2,tchunk,dt1 - REAL yrad(3) ! current x,y, and angle - INTEGER kchunk,nstep - - !WRITE(6,*) 'xs ....',xs,ys,as,iflag - yrad(1)=xs - yrad(2)=ys - yrad(3)=as - - tchunk=0. - IFlag=2 - nchunk=0 - -! Starts first chunk - CALL RKdriver(yrad) !take a step - dt1=h1/(60.) !time = time step * (C / Cg) - tchunk=dt1 - kchunk=1 - - DO nstep=1,100000 - CALL RKdriver(yrad) !take a step - tchunk=tchunk+dt1 - - - IF (tchunk.GT.timestep) THEN !timestep change - nchunk=nchunk+1 - xch(nchunk)=yrad(1)/d2r - ych(nchunk)=yrad(2)/d2r - ach(nchunk)=yrad(3)/d2r - tchunk=tchunk-timestep - ENDIF - - IF (ip.lt.20.or.ip.gt.nx-20) IFlag=0 - IF (jp.lt.20.or.jp.gt.ny-20) IFlag=0 - !WRITE(6,*) 'Iflag 1:',Iflag,ip,jp,nx,ny - IF (dl.gt.depthmax) IFlag=1 - IF (dl.lt.depthmin) IFlag=0 - IF (iflag.eq.0.or.iflag.eq.1) THEN - !WRITE(6,*) 'Iflag:',iflag,dl,depthmin,nchunk*timestep+tchunk - nchunk=nchunk+1 - xch(nchunk)=yrad(1)/d2r - ych(nchunk)=yrad(2)/d2r - ach(nchunk)=yrad(3)/d2r - RETURN - ENDIF - ENDDO !end of do loop on nstep - print *,' error - too many steps ' - !stop - RETURN - end - - -!********************************************************************** -SUBROUTINE RKdriver(ystart) -! Integrates the 3 starting variables from 0 to h1 -! with accuracy eps. h1 is a guess of the step size, hmin is the -! min step size (0 is ok) ystart is overwritten with the desired -! answer -! yscal is a vector containing the typical scales of each variable -! these scales define the admissible errors: eps*yscal(i) -!********************************************************************** -! The Cash-Karp Runge Kutta solver is adapted to this specific problem -! by Fabrice Ardhuin, june 1999, from Numerical Recipes, 2nd ed. -!********************************************************************** - USE RKPARAM - USE Raytraj - USE Constants - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::ystart - INTEGER,PARAMETER ::maxstp=1000 - REAL,DIMENSION(ndim) :: y,dydt - REAL x,h,hdid,hnext - INTEGER nstp - - x=0. - h=h1 - y(:)=ystart(:) - DO nstp=1,maxstp - !WRITE(6,*) 'RK driver',nstp,y(1),y(2),y(3),h - CALL derivs(y,dydt) - IF(x+h.gt.h1) h=h1-x !limits step if it goes over the remaining - !time h1-x - CALL rkqs(y,dydt,h,hdid,hnext) - x=x+hdid - IF(x.ge.h1) THEN - ystart(:)=y(:) - !WRITE(6,*) 'RKdriver',x,hdid,h1,nstp,dl - !WRITE(6,*) 'ycurr',ystart - RETURN - ENDIF - h=hnext - ENDDO - IF (dl.lt.depthmin) THEN - ELSE - WRITE(6,*) 'Step size too smal in RK driver',nstp,x,h1,hdid - STOP - ENDIF - RETURN -END - -!********************************************************************** -SUBROUTINE rkqs(y,dydt,htry,hdid,hnext) -! Fifth order R-K step with monitoring of local error. Input -! is the n-vector of the input variable y and its derivatives -! dydt at the starting value of x. htry is the stepsize to be -! attempted, eps is the required accuracy and yscal is a -! vector against which error is scaled. On output, y and x -! are replaced by their new values,hid is the accomplished -! stepsize and hnext is the estimate of the next stepsize. -!********************************************************************** - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::y,dydt - REAL, INTENT(in) ::htry - REAL, INTENT(out) ::hdid,hnext - - REAL,PARAMETER :: pgrow=-.2 - REAL,PARAMETER :: pshrink=-.25 - REAL,PARAMETER :: safety=.9 - REAL,PARAMETER :: errcon=1.89e-4 !errcon=(5/safety)**(1/pgrow) - REAL,DIMENSION(3):: yerr,ytemp - REAL h,htemp,errmax - INTEGER i,kount - kount=0 - - h=htry - DO - kount=kount+1 - CALL rkck(y,dydt,h,ytemp,yerr) - errmax=0. - DO i=1,ndim - errmax=MAX(errmax,abs(yerr(i)/yscal(i))) - ENDDO - errmax=errmax/eps - !WRITE(6,*) 'RKQS',errmax,kount,h - IF(errmax.GT.1) THEN - htemp=safety*h*(errmax**pshrink) - h=MAX(htemp,0.1*h) !h should always be positive !! - !I got rid of the test on xnew=x - ELSE - IF(errmax.gt.errcon) THEN - hnext=safety*h*(errmax**pgrow) - ELSE - hnext=5.0*h - ENDIF - hdid=h - y(:)=ytemp(:) - RETURN - ENDIF - ENDDO - !WRITE(6,*) 'Step size too smal in rkqs' - RETURN -END - -!********************************************************************** -SUBROUTINE rkck(y,dydt,h,yout,yerr) -! For ndim variables y and their derivs dydt known at y, use -! to advance solution over an interval h and return the -! incremented variables as yout ( which may be the same as y) -! the SUBROUTINE derivs(y,dydt) returns dydt at y - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y,dydt - REAL, INTENT(in) ::h - REAL,DIMENSION(ndim),INTENT(out) ::yout,yerr - - REAL,DIMENSION(ndim) :: ak2,ak3,ak4,ak5,ak6,ytemp - REAL,PARAMETER :: A2=.2,A3=.3,A4=.6,A5=1.,A6=.875 - REAL,PARAMETER :: B21=.2,B31=.075,B32=9./40. - REAL,PARAMETER :: B41=.3,B42=-.9,B43=1.2 - REAL,PARAMETER :: B51=-11./54.,B52=2.5,B53=-70/27.,B54=35./27. - REAL,PARAMETER :: B61=1631./55296.,B62=175./512.,B63=575./13824. - REAL,PARAMETER :: B64=44275./110592.,B65=253./4096. - REAL,PARAMETER :: C1=37./378.,C3=250./621.,C4=125./594.,C6=512./1771. - REAL,PARAMETER :: DC1=C1-2825./27648.,DC3=C3-18575./48384. - REAL,PARAMETER :: DC4=C4-13525/55296.,DC5=-277/14336,DC6=C6-.25 - - ytemp(:)=y(:)+B21*h*dydt(:) - CALL derivs(ytemp,ak2) - ytemp(:)=y(:)+h*(B31*dydt(:)+B32*ak2(:)) - CALL derivs(ytemp,ak3) - ytemp(:)=y(:)+h*(B41*dydt(:)+B42*ak2(:)+B43*ak3(:)) - CALL derivs(ytemp,ak4) - ytemp(:)=y(:)+h*(B51*dydt(:)+B52*ak2(:)+B53*ak3(:)+B54*ak4(:)) - CALL derivs(ytemp,ak5) - ytemp(:)=y(:)+h*(B61*dydt(:)+B62*ak2(:)+B63*ak3(:)+B64*ak4(:)+B65*ak5(:)) - CALL derivs(ytemp,ak6) - yout(:)=y(:)+h*(C1*dydt(:)+C3*ak3(:)+C4*ak4(:)+C6*ak6(:)) - yerr(:)=h*(DC1*dydt(:)+DC3*ak3(:)+DC4*ak4(:)+DC6*ak6(:)) - RETURN -END - -!********************************************************************** -SUBROUTINE derivs(y,dydt) -! c=phase speed and dydt are the derivatives of the n vectors -! with respect to time. -!********************************************************************** - USE RKPARAM - USE BATHYGRID - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y - REAL,DIMENSION(ndim),INTENT(out)::dydt - REAL mu,nu,sp - REAL xg,yg,cg,depth,dcdx,dcdy,ca,sa,sa2 - - xg=y(1) - yg=y(2) - CALL speed(xg,yg,cg,depth,dcdx,dcdy) - ca=cos(y(3)) - sa=sin(y(3)) - !dydt(3)=cg*(sa*dcdx/sx-ca*dcdy/sy) - - !spherical earth - mu=6378100. !earth radius in meters - nu=6378100. - - !cos(90-y)=-sin(y) - !sin(90-y)=cos(y) - sp=cos(y(2)) - dydt(1)=cg*ca/(nu*sp) ! x and y are the lon,lat in radians - dydt(2)=cg*sa/mu - sa2=ca - dydt(3)=cg*(sa*dcdx/(sx*nu*sp)-ca*dcdy/(sy*mu)-sa2*sin(y(2))/(nu*sp)) - - RETURN -END - - -!********************************************************************** -SUBROUTINE speed(lon,lat,cg,depth,dcdx,dcdy) -!********************************************************************** -! Wave speed gradients, from Dobson (1967), for not-too-shallow water -! Code by William C. O'Reilly (1990-1998) -! Modified by Fabrice Ardhuin (1999) to accomodate any depth. -! Modified .................. 11/8/2000 with a Newton-Rapson method for -! the inversion of the dispersion relation -!********************************************************************** -! uses biquadric interpolation (bilinear would not be smooth) -!... calculates the depth, wave phase speed and gradients -! Positions of the grid points (+) used in the computations -! The current point xg,yg (*) is located in the [1,2,3,4] rectangle -! + 8 + 7 -! -! + 9 + 4 + 3 + 6 -! * -! + 10 + 1 + 2 + 5 -! -! + 11 + 12 -!********************************************************************** - USE BATHYGRID - USE Constants - USE RKparam - IMPLICIT NONE - REAL, INTENT(in) ::lon,lat - REAL, INTENT(out) ::cg,depth,dcdx,dcdy - - REAL,DIMENSION(12,6),SAVE :: sxy=reshape((/ 0.30861241,0.23684207,0.21770331, & - 0.23684207,-0.08492823,-0.05143541,-0.05143541,-0.08492823,0.00598086, & - 0.13038277,0.13038277,0.00598086, & - 0.05322964,0.19677030,0.14413872,0.10586122,0.09031100,-0.06758374, & - -0.03349283,0.03349282,-0.18241626,-0.34031099,-0.12440190,0.12440190, & - 0.05322964,0.10586122,0.14413872,0.19677030,0.03349282,-0.03349283, & - -0.06758374,0.09031099,0.12440190,-0.12440191,-0.34031099,-0.18241625, & - -0.125,-0.125,-0.125,-0.125,0.125,0.125, & - 0.,0.,0.125,0.125,-0.,-0., & - 0.05263157,-0.05263157,0.05263158,-0.05263157,-0.15789473,0.15789474, & - 0.15789474,-0.15789473,-0.15789473,0.15789473,0.15789473,-0.15789473, & - -0.125,-0.125,-0.125,-0.125,0.,0., & - 0.125,0.125,-0.,-0.,0.125,0.125 /),(/12,6/)) - - - INTEGER i,j - REAL X,Y,sigma,dy,k,c - REAL xg,yg,xp,yp,sig,aka,yhat,t,a,dddx,dddy,dcdd - - xg=MOD(lon-rlonmin*d2r,tpi)/sx - yg=(lat-rlatmin*d2r)/sy - !WRITE(6,*) 'Xg...:',lon,lon-rlonmin*d2r,lat,xg,yg,sx,sy - i=INT(xg) - j=INT(yg) - xp=mod(xg,1.0) - yp=mod(yg,1.0) - IF(ip.ne.i.OR.jp.NE.j) THEN - ip=i - jp=j - dinter(1,11)=grid(i,j-1) - dinter(1,12)=grid(i+1,j-1) - dinter(1,10)=grid(i-1,j) - dinter(1,1)=grid(i,j) - dinter(1,2)=grid(i+1,j) - dinter(1,5)=grid(i+2,j) - dinter(1,9)=grid(i-1,j+1) - dinter(1,4)=grid(i,j+1) - dinter(1,3)=grid(i+1,j+1) - dinter(1,6)=grid(i+2,j+1) - dinter(1,8)=grid(i,j+2) - dinter(1,7)=grid(i+1,j+2) - einter=MATMUL(dinter,sxy) - ENDIF - depth=einter(1,1)+(einter(1,2)+einter(1,4)*xp+einter(1,5)*yp)*xp & - +(einter(1,3)+einter(1,6)*yp)*yp - -!... adjust water level here - depth=depth+deltaz - - IF(depth.lt.1.) depth=1. - dl=depth -!... gradients of bottom depths - dddx=einter(1,4)*2.*xp+einter(1,5)*yp+einter(1,2) - dddy=einter(1,6)*2.*yp+einter(1,5)*xp+einter(1,3) -!... calculate phase speed gradient with depth -!... (accurate in Shallow Water where Dobson was not) - sigma=freq*tpi - Y=(sigma**2*DEPTH)/G - IF (Y.GE.14.5) THEN - X=Y - ELSE - I=INT(Y*REAL(ntanh)/15.) - dy=mod(Y*REAL(ntanh)/15.,1.0) - X=(invxtanhx(I)*(1-dy)+invxtanhx(I+1)*dy) - ENDIF - k=X/DEPTH - c=sigma/k - cg=g*((y/x)+x*(1-(y/x)**2))/(2.*sigma) - !dk=aka/depth - !cg=tpi*freq/dk - !rc=c/co - ! old formula: Dobson - !dcdd=sig*(1.-rc*rc)/(c*rc+sig*depth*(1-rc*rc)) - ! the following formula is exaclty equivalent to Dobson in deep water - ! but it is accurate in shallow water - dcdd=(1-y/(y+x**2-y**2))/depth !=(dc/dh)/c - dcdx=dcdd*dddx - dcdy=dcdd*dddy - !WRITE(6,*) 'SPEED',X,Y,I1,xinvxtanh(I1+1),k,c - !WRITE(6,*) 'SPEED',xg,yg,cg,depth,dcdx,dcdy - RETURN - END - -!********************************************************************* - SUBROUTINE DISP(depth,freq,k,c,cg) -!********************************************************************* - USE Constants - IMPLICIT NONE - REAL, INTENT(in) ::depth,freq !depth (m) and frequency (Hz) - REAL, INTENT(out) ::k,c,cg !wave number (m-1),phase speed (m/s) - REAL dep,sigma,X,Y,dy - INTEGER I - - dep=depth - IF (depth.LT.1) dep=1. - sigma=freq*tpi - Y=(sigma**2*DEP)/G - IF (Y.GE.14.5) THEN - X=Y - ELSE - I=INT(Y*REAL(ntanh)/15.) - dy=mod(Y*REAL(ntanh)/15.,1.0) - X=invxtanhx(I)*(1-dy)+invxtanhx(I+1)*dy - ENDIF - k=X/DEP - c=sigma/k - cg=g*((y/x)+x*(1-(y/x)**2))/(2.*sigma) - - RETURN - END - - -!********************************************************************* - SUBROUTINE TABULATE -!********************************************************************* - USE Constants - USE RKPARAM - IMPLICIT NONE - - REAL X,Y,H,F,FD - INTEGER I,J - ntanh=10000 - ALLOCATE(invxtanhx(0:ntanh)) - DO J=0,ntanh - Y=15.*REAL(J)/ntanh - X=Y - F=1. - DO 10 I=1,100 - H=TANH(X) - F=Y-X*H - IF (ABS(F) .LT. 1.E-6) GO TO 20 - FD=-H-X/COSH(X)**2 - X=X-F/FD -10 CONTINUE - PRINT *,' SUBROUTINE DISP DOES NOT CONVERGE !!! ' -20 invxtanhx(J)=X - ENDDO - RETURN - END - -!********************************************************************** -!********************************************************************** -!********************************************************************** -!********************************************************************** -PROGRAM rayplot - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL dtheta,theta0,xs,ys,sig,dw,dk,c,cg,dto,h_len2 - REAL h_len,dxy,dcdx,dcdy,a_step,ang,angs - INTEGER I,J,nrays,Iray,k,ircode - CHARACTER(len=50):: fblog,fbathy - - CALL Tabulate - - - OPEN(3,file='Ray3a.inpray',status='old') - READ(3,'(a)') fblog - READ(3,'(a)') fbathy - READ(3,*) nrays - READ(3,*) freq,dtheta,theta0,timestep,depthmax,depthmin - READ(3,*) deltaz - READ(3,*) xs,ys - CLOSE(3) - - h_len=200 - eps=0.0001 ! error tolerance in ray integration - -!------------------------------------------------------------------- -! Get bathymetry grid data -!------------------------------------------------------------------- - open(2,file=fblog) - read(2,*) rlatmin,rlatmax,rlonmin,rlonmax - read(2,*) rot - read(2,*) sx,sy - read(2,*) nx,ny - close(2) - yscal(1)=REAL(nx) - yscal(2)=REAL(ny) - yscal(3)=1. - - sx=(rlonmax-rlonmin)*d2r/(nx-1) - sy=(rlatmax-rlatmin)*d2r/(ny-1) - WRITE(6,*) 'sx:',sx,sy -! Get the grid itself - - xs=MOD(360+xs+rlonmin,360.)-rlonmin - WRITE(6,*) 'lon,lat:',xs,ys - - ALLOCATE(grid(nx,ny)) - open(2,file=fbathy,form='unformatted',access='direct',recl=4*ny) - DO i=1,nx !beware 1 should be replaced by 4 on HP terminals - read(2,rec=i) (grid(i,j),j=1,ny) - ENDDO - CLOSE(2) - - sig=2.*pi*freq - - dw=8000. - call disp(dw,freq,dk,c,cg) !calculate deep water phase speed - - dto=timestep*60. !converts the time step to seconds - h_len2=cg*dto*0.1 !lengthen the steps for long output timestep - IF (h_len2 > h_len) h_len=h_len2 - - co=c - hmin=0. - h1=h_len/co !calculate initial ray time steps, h1 - ! (major factor in computation time) - xs=xs*d2r - ys=ys*d2r - CALL speed(xs,ys,c,dxy,dcdx,dcdy) - WRITE(6,*) 'speed',xs,ys,dxy,c,dcdx,dcdy - a_step=dtheta - !OPEN(995,file='rays.bin',status='unknown',form='unformatted') - OPEN(995,file='rays.asc',status='unknown') - ang=theta0-a_step - DO IRAY=1,nrays - ang=ang+a_step - angs=ang*d2r !transforms to radians - CALL ref(xs,ys,angs,ircode) - WRITE(6,*) 'ray:',IRAY,xs/d2r,ys/d2r,ang,ircode,nchunk,xch(nchunk),ych(nchunk) - ! write(995) nchunk,ircode - ! write(995) (xch(k),k=1,nchunk), & - ! (ych(k),k=1,nchunk),(ach(k),k=1,nchunk) - write(995,*) nchunk,ircode - write(995,*) (xch(k),k=1,nchunk), & - (ych(k),k=1,nchunk),(ach(k),k=1,nchunk) - ENDDO - CLOSE(995) - END diff --git a/model/aux/idl_twist/raypg_rayleigh.f90 b/model/aux/idl_twist/raypg_rayleigh.f90 deleted file mode 100644 index 27409c83a..000000000 --- a/model/aux/idl_twist/raypg_rayleigh.f90 +++ /dev/null @@ -1,571 +0,0 @@ -!********************************************************************* -MODULE RKPARAM !parameters for Runge Kutta solver - REAL,DIMENSION(3) :: yscal - REAL h1,hmin,eps - REAL co,freq,dl - INTEGER,PARAMETER :: ndim=3 -END MODULE RKPARAM -!********************************************************************* -MODULE BATHYGRID !bottom topography grid - REAL rlonmax,rlonmin,rlatmin,rlatmax,rot - INTEGER nx,ny,ip,jp - REAL sx,sy,deltaz - REAL(kind=4) ,DIMENSION(:,:),ALLOCATABLE :: grid - REAL ,DIMENSION(1,6) :: einter - REAL ,DIMENSION(1,12) :: dinter -END MODULE BATHYGRID -!********************************************************************* -MODULE Raytraj !bottom topography grid - real xch(1000),ych(1000),ach(1000),cch(1000) - INTEGER nchunk - REAL timestep,depthmin,depthmax -END MODULE Raytraj -!********************************************************************* -MODULE Constants - REAL, PARAMETER :: pi = 3.14159265,tpi=6.2831853,d2r=.01745329 - REAL, PARAMETER :: max15bit=32768.,max8bit=256.,max7bit=128. - REAL, PARAMETER :: max14bit=16384. - INTEGER, PARAMETER :: i15bit=32768,i8bit=256,i7bit=128,i14bit=16384 - REAL, PARAMETER :: g = 9.81 !gravity : SI (m/s^2) - REAL, PARAMETER :: rhow = 1026. !water density : SI (kg/m^3) - REAL, PARAMETER :: kappa = 0.4 !Von Karman's constant - REAL, PARAMETER :: nu = 3.E-6 !Salt water kinematic viscosity - REAL, DIMENSION(:,:),ALLOCATABLE :: Rayleigh - INTEGER ntab -END MODULE Constants - -!********************************************************************** -SUBROUTINE tfact(depth,f,fact,fact2) -!... calculates the transformation factor (dk/dko)*(cgo/cg) -!... to avoid floating point exception in sinh, max value of sig=75 -!... first get wave no. and group velocity at transformation site - IMPLICIT NONE - REAL, INTENT(in) ::depth,f - REAL, INTENT(out) ::fact,fact2 - REAL d,dk,c,cg,dk0,c0,cg0,dcdd - - CALL disp(depth,f,dk,c,cg,dcdd) - d=800. - CALL disp(d,f,dk0,c0,cg0,dcdd) - fact=(dk/dk0)*(cg0/cg) - fact2=(dk/cg) - RETURN -END - - -!********************************************************************* -SUBROUTINE ref(xs,ys,as,iflag,distmax) -!********************************************************************* -! This routine integrates the ray equations (using the Cash-Karp Runge-Kutta -! driver RKdriver, from the initial position (xs,ys) until it crosses into a -! different zone. The subroutine returns the position and direction of the -! ray at the zone boundary. -! -! If the Fsource flag is equal to 1 then the routine also computes linear interpolation -! coefficents from the grid points. These coefficients are weighted by the propagation time. -! In order to do that the routine keeps track of the current timestep, -! direction bin and triangle. If any of these change then a new set of -! interpolation coefficients is generated. If not, the coefficients are updated -! and are given more weight. This is checked at every mini-timestep (h1) of the -! RKdriver. -! -! When the zone boundary is reached, coefficents are genrated in order -! to be able to interpolate energy density from the neighboring grid -! points at the end of the ray. -!********************************************************************* - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL,INTENT(in) :: distmax - REAL,INTENT(inout) :: xs,ys,as !start position (grid units) and angle (rad) - INTEGER,INTENT(out) :: iflag !IFlag=0 hit land or cross-shelf boundary, - - REAL x1,x2,tchunk,dt1, timetot - REAL yrad(3) ! current x,y, and angle - INTEGER kchunk,nstep - - !WRITE(6,*) 'xs ....',xs,ys,as,iflag - yrad(1)=xs - yrad(2)=ys - yrad(3)=as - - tchunk=0. - IFlag=2 - nchunk=0 - timetot=0. - -! Starts first chunk - CALL RKdriver(yrad) !take a step - dt1=h1 - tchunk=dt1 - kchunk=1 - - DO nstep=1,100000 - CALL RKdriver(yrad) !take a step - tchunk=tchunk+dt1 - timetot=timetot+h1 - !WRITE(6,*) 'REF :',nstep,timetot,nchunk,distmax,tchunk,iflag,ip,jp,dl - IF (tchunk.GT.timestep) THEN !timestep change - nchunk=nchunk+1 - xch(nchunk)=yrad(1)/d2r - ych(nchunk)=yrad(2)/d2r - ach(nchunk)=yrad(3)/d2r - cch(nchunk)=dl - tchunk=tchunk-timestep - ENDIF - - !IF (ip.lt.20.or.ip.gt.nx-20) IFlag=0 - IF (jp.lt.20.or.jp.gt.ny-20) IFlag=0 - !WRITE(6,*) 'Iflag 1:',Iflag,ip,jp,nx,ny - IF (dl.gt.depthmax) IFlag=1 - IF (dl.lt.depthmin) IFlag=0 - IF (timetot.gt.distmax) IFlag=1 - IF (iflag.eq.0.or.iflag.eq.1) THEN - !WRITE(6,*) 'Iflag:',iflag,dl,depthmin,nchunk*timestep+tchunk - nchunk=nchunk+1 - xch(nchunk)=yrad(1)/d2r - ych(nchunk)=yrad(2)/d2r - ach(nchunk)=yrad(3)/d2r - cch(nchunk)=dl - RETURN - ENDIF - ENDDO !end of do loop on nstep - print *,' error - too many steps ' - !stop - RETURN - end - - -!********************************************************************** -SUBROUTINE RKdriver(ystart) -! Integrates the 3 starting variables from 0 to h1 -! with accuracy eps. h1 is a guess of the step size, hmin is the -! min step size (0 is ok) ystart is overwritten with the desired -! answer -! yscal is a vector containing the typical scales of each variable -! these scales define the admissible errors: eps*yscal(i) -!********************************************************************** -! The Cash-Karp Runge Kutta solver is adapted to this specific problem -! by Fabrice Ardhuin, june 1999, from Numerical Recipes, 2nd ed. -!********************************************************************** - USE RKPARAM - USE Raytraj - USE Constants - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::ystart - INTEGER,PARAMETER ::maxstp=10000 - REAL,DIMENSION(ndim) :: y,dydt - REAL x,h,hdid,hnext - INTEGER nstp - - x=0. - h=h1 - y(:)=ystart(:) - DO nstp=1,maxstp - CALL derivs(y,dydt) - !WRITE(6,*) 'RK driver',freq,nstp,y(1),y(2),y(3),h,'##',dydt - IF(x+h.gt.h1) h=h1-x !limits step if it goes over the remaining - !time h1-x - CALL rkqs(y,dydt,h,hdid,hnext) - x=x+hdid - IF(x.ge.h1) THEN - ystart(:)=y(:) - !WRITE(6,*) 'RKdriver',x,hdid,h1,nstp,dl - !WRITE(6,*) 'ycurr',ystart - RETURN - ENDIF - h=hnext - ENDDO - IF (dl.lt.depthmin) THEN - ELSE - WRITE(6,*) 'Step size too smal in RK driver',nstp,x,h1,hdid - STOP - ENDIF - RETURN -END - -!********************************************************************** -SUBROUTINE rkqs(y,dydt,htry,hdid,hnext) -! Fifth order R-K step with monitoring of local error. Input -! is the n-vector of the input variable y and its derivatives -! dydt at the starting value of x. htry is the stepsize to be -! attempted, eps is the required accuracy and yscal is a -! vector against which error is scaled. On output, y and x -! are replaced by their new values,hid is the accomplished -! stepsize and hnext is the estimate of the next stepsize. -!********************************************************************** - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(inout) ::y,dydt - REAL, INTENT(in) ::htry - REAL, INTENT(out) ::hdid,hnext - - REAL,PARAMETER :: pgrow=-.2 - REAL,PARAMETER :: pshrink=-.25 - REAL,PARAMETER :: safety=.9 - REAL,PARAMETER :: errcon=1.89e-4 !errcon=(5/safety)**(1/pgrow) - REAL,DIMENSION(3):: yerr,ytemp - REAL h,htemp,errmax - INTEGER i,kount - kount=0 - - h=htry - DO - kount=kount+1 - CALL rkck(y,dydt,h,ytemp,yerr) - errmax=0. - DO i=1,ndim - errmax=MAX(errmax,abs(yerr(i)/yscal(i))) - ENDDO - errmax=errmax/eps - !WRITE(6,*) 'RKQS',errmax,kount,h,eps - IF(errmax.GT.1) THEN - htemp=safety*h*(errmax**pshrink) - h=MAX(htemp,0.1*h) !h should always be positive !! - !I got rid of the test on xnew=x - ELSE - IF(errmax.gt.errcon) THEN - hnext=safety*h*(errmax**pgrow) - ELSE - hnext=5.0*h - ENDIF - hdid=h - y(:)=ytemp(:) - RETURN - ENDIF - ENDDO - !WRITE(6,*) 'Step size too smal in rkqs' - RETURN -END - -!********************************************************************** -SUBROUTINE rkck(y,dydt,h,yout,yerr) -! For ndim variables y and their derivs dydt known at y, use -! to advance solution over an interval h and return the -! incremented variables as yout ( which may be the same as y) -! the SUBROUTINE derivs(y,dydt) returns dydt at y - USE RKPARAM - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y,dydt - REAL, INTENT(in) ::h - REAL,DIMENSION(ndim),INTENT(out) ::yout,yerr - - REAL,DIMENSION(ndim) :: ak2,ak3,ak4,ak5,ak6,ytemp - REAL,PARAMETER :: A2=.2,A3=.3,A4=.6,A5=1.,A6=.875 - REAL,PARAMETER :: B21=.2,B31=.075,B32=9./40. - REAL,PARAMETER :: B41=.3,B42=-.9,B43=1.2 - REAL,PARAMETER :: B51=-11./54.,B52=2.5,B53=-70/27.,B54=35./27. - REAL,PARAMETER :: B61=1631./55296.,B62=175./512.,B63=575./13824. - REAL,PARAMETER :: B64=44275./110592.,B65=253./4096. - REAL,PARAMETER :: C1=37./378.,C3=250./621.,C4=125./594.,C6=512./1771. - REAL,PARAMETER :: DC1=C1-2825./27648.,DC3=C3-18575./48384. - REAL,PARAMETER :: DC4=C4-13525/55296.,DC5=-277/14336,DC6=C6-.25 - - ytemp(:)=y(:)+B21*h*dydt(:) - CALL derivs(ytemp,ak2) - ytemp(:)=y(:)+h*(B31*dydt(:)+B32*ak2(:)) - CALL derivs(ytemp,ak3) - ytemp(:)=y(:)+h*(B41*dydt(:)+B42*ak2(:)+B43*ak3(:)) - CALL derivs(ytemp,ak4) - ytemp(:)=y(:)+h*(B51*dydt(:)+B52*ak2(:)+B53*ak3(:)+B54*ak4(:)) - CALL derivs(ytemp,ak5) - ytemp(:)=y(:)+h*(B61*dydt(:)+B62*ak2(:)+B63*ak3(:)+B64*ak4(:)+B65*ak5(:)) - CALL derivs(ytemp,ak6) - yout(:)=y(:)+h*(C1*dydt(:)+C3*ak3(:)+C4*ak4(:)+C6*ak6(:)) - yerr(:)=h*(DC1*dydt(:)+DC3*ak3(:)+DC4*ak4(:)+DC6*ak6(:)) - RETURN -END - -!********************************************************************** -SUBROUTINE derivs(y,dydt) -! c=phase speed and dydt are the derivatives of the n vectors -! with respect to time. -!********************************************************************** - USE RKPARAM - USE BATHYGRID - IMPLICIT NONE - REAL,DIMENSION(ndim),INTENT(in) ::y - REAL,DIMENSION(ndim),INTENT(out)::dydt - REAL mu,nu,sp - REAL xg,yg,cg,depth,dcdx,dcdy,ca,sa,sa2 - - xg=y(1) - yg=y(2) - CALL speed(xg,yg,cg,depth,dcdx,dcdy) - - ca=cos(y(3)) - sa=sin(y(3)) - !dydt(3)=cg*(sa*dcdx/sx-ca*dcdy/sy) - - !spherical earth - mu=6378100. !earth radius in meters - nu=6378100. - - sp=cos(y(2)) - dydt(1)=cg*ca/(nu*sp) ! x and y are the lon,lat in radians - dydt(2)=cg*sa/mu - sa2=ca - dydt(3)=cg*(sa*dcdx/(sx*nu*sp)-ca*dcdy/(sy*mu)-sa2*sin(y(2))/(nu*sp)) - - RETURN -END - - -!********************************************************************** -SUBROUTINE speed(lon,lat,cg,depth,dcdx,dcdy) -!********************************************************************** -! Wave speed gradients, from Dobson (1967), for not-too-shallow water -! Code by William C. O'Reilly (1990-1998) -! Modified by Fabrice Ardhuin (1999) to accomodate any depth. -! Modified .................. 11/8/2000 with a Newton-Rapson method for -! the inversion of the dispersion relation -!********************************************************************** -! uses biquadric interpolation (bilinear would not be smooth) -!... calculates the depth, wave phase speed and gradients -! Positions of the grid points (+) used in the computations -! The current point xg,yg (*) is located in the [1,2,3,4] rectangle -! + 8 + 7 -! -! + 9 + 4 + 3 + 6 -! * -! + 10 + 1 + 2 + 5 -! -! + 11 + 12 -!********************************************************************** - USE BATHYGRID - USE Constants - USE RKparam - IMPLICIT NONE - REAL, INTENT(in) ::lon,lat - REAL, INTENT(out) ::cg,depth,dcdx,dcdy - - REAL,DIMENSION(12,6),SAVE :: sxy=reshape((/ 0.30861241,0.23684207,0.21770331, & - 0.23684207,-0.08492823,-0.05143541,-0.05143541,-0.08492823,0.00598086, & - 0.13038277,0.13038277,0.00598086, & - 0.05322964,0.19677030,0.14413872,0.10586122,0.09031100,-0.06758374, & - -0.03349283,0.03349282,-0.18241626,-0.34031099,-0.12440190,0.12440190, & - 0.05322964,0.10586122,0.14413872,0.19677030,0.03349282,-0.03349283, & - -0.06758374,0.09031099,0.12440190,-0.12440191,-0.34031099,-0.18241625, & - -0.125,-0.125,-0.125,-0.125,0.125,0.125, & - 0.,0.,0.125,0.125,-0.,-0., & - 0.05263157,-0.05263157,0.05263158,-0.05263157,-0.15789473,0.15789474, & - 0.15789474,-0.15789473,-0.15789473,0.15789473,0.15789473,-0.15789473, & - -0.125,-0.125,-0.125,-0.125,0.,0., & - 0.125,0.125,-0.,-0.,0.125,0.125 /),(/12,6/)) - - - INTEGER i,j - - INTEGER jp1,jp2,jm1,jm2 - REAL X,Y,sigma,dy,k,c, dcdd - REAL xg,yg,xp,yp,sig,aka,yhat,t,a,dddx,dddy - - xg=1.+MOD(lon-rlonmin*d2r,tpi)/sx - yg=1.+(lat-rlatmin*d2r)/sy - i=INT(xg) - j=INT(yg) - xp=mod(xg,1.0) - yp=mod(yg,1.0) - IF(ip.ne.i.OR.jp.NE.j) THEN - ip=i - jp=j -! for a full global grid - jp1=mod(j+1,nx) - jp2=mod(j+2,nx) - jm1=mod(j-1,nx) - jm2=mod(j-2,nx) - dinter(1,11)=grid(i,jm1) - dinter(1,12)=grid(i+1,jm1) - dinter(1,10)=grid(i-1,j) - dinter(1,1)=grid(i,j) - dinter(1,2)=grid(i+1,j) - dinter(1,5)=grid(i+2,j) - dinter(1,9)=grid(i-1,jp1) - dinter(1,4)=grid(i,j+1) - dinter(1,3)=grid(i+1,jp1) - dinter(1,6)=grid(i+2,jp1) - dinter(1,8)=grid(i,j+2) - dinter(1,7)=grid(i+1,jp2) - einter=MATMUL(dinter,sxy) - ENDIF - depth=einter(1,1)+(einter(1,2)+einter(1,4)*xp+einter(1,5)*yp)*xp & - +(einter(1,3)+einter(1,6)*yp)*yp - - dl=depth - - -!... gradients of bottom depths - dddx=einter(1,4)*2.*xp+einter(1,5)*yp+einter(1,2) - dddy=einter(1,6)*2.*yp+einter(1,5)*xp+einter(1,3) -!... calculate phase speed gradient with depth - CALL DISP(depth,freq,k,c,cg,dcdd) - dcdx=dcdd*dddx - dcdy=dcdd*dddy - RETURN - END - -!********************************************************************* - SUBROUTINE DISP(depth,freq,k,c,cg,dcdd) -!********************************************************************* - USE Constants - IMPLICIT NONE - REAL, INTENT(in) ::depth,freq !depth (m) and frequency (Hz) - REAL, INTENT(out) ::k,c,cg,dcdd !wave number (m-1),phase speed (m/s) - REAL dep,sigma,X,Y,dy, LOGFREQ, DLOGFREQ, ffile - INTEGER I, ILOGFREQ - - ffile=2*freq*depth/4720 - IF (ffile.GT.0) THEN - LOGFREQ=1+(LOG(ffile)+7)/0.012638983606093 - ELSE - LOGFREQ=1. - ENDIF - IF (LOGFREQ.GT.1.AND.LOGFREQ.LT.FLOAT(ntab-1)) THEN - ILOGFREQ=FLOOR(LOGFREQ) - DLOGFREQ=LOGFREQ-ILOGFREQ - c=Rayleigh(ILOGFREQ,2)*(1-DLOGFREQ)+Rayleigh(ILOGFREQ+1,2)*DLOGFREQ - k=tpi*freq/c - cg=Rayleigh(ILOGFREQ,3)*(1-DLOGFREQ)+Rayleigh(ILOGFREQ+1,3)*DLOGFREQ - -! computes (dc/dh)/c - dcdd=(2*freq)*(Rayleigh(ILOGFREQ+1,2)-Rayleigh(ILOGFREQ,2)) & - /((Rayleigh(ILOGFREQ+1,1)-Rayleigh(ILOGFREQ,1))*1500)/c - ENDIF - IF (LOGFREQ.LE.1.) THEN - c=Rayleigh(1,2) - k=tpi*freq/c - cg=Rayleigh(1,3) - dcdd=0. - ENDIF - IF (LOGFREQ.GE.FLOAT(ntab-1)) THEN - c=1500. - k=tpi*freq/c - cg=1500. - dcdd=0. - ENDIF - - RETURN - END - - -!********************************************************************* - SUBROUTINE TABULATE_RAYLEIGH -!********************************************************************* - USE Constants - USE RKPARAM - IMPLICIT NONE - - REAL X,Y,H,F,FD - INTEGER I,J - ntab=434 - - ALLOCATE(Rayleigh(1:ntab,3)) - OPEN(3,file='Rayleigh_speed.txt',status='old') - DO J=1,ntab - READ(3,*) Rayleigh(J,:) - ENDDO - CLOSE(3) - RETURN - END - -!********************************************************************** -!********************************************************************** -!********************************************************************** -!********************************************************************** -PROGRAM rayplot - USE BATHYGRID - USE Constants - USE Raytraj - USE RKPARAM - IMPLICIT NONE - - REAL dtheta,theta0,xs,ys,sig,dw,dk,c,cg,dcdd,dto,h_len2 - REAL h_len,dxy,dcdx,dcdy,a_step,ang,angs,distmax - INTEGER I,J,nrays,Iray,k,ircode - CHARACTER(len=120):: fblog,fbathy - - CALL Tabulate_Rayleigh - - - OPEN(3,file='Ray3a.inpray',status='old') - READ(3,'(a)') fblog - READ(3,'(a)') fbathy - READ(3,*) nrays - READ(3,*) freq,dtheta,theta0,timestep,depthmax,depthmin,distmax - freq=0.0373 - READ(3,*) deltaz - READ(3,*) xs,ys - CLOSE(3) - - h_len=200 - eps=0.00001 ! error tolerance in ray integration - -!------------------------------------------------------------------- -! Get bathymetry grid data -!------------------------------------------------------------------- - open(2,file=fblog) - read(2,*) rlatmin,rlatmax,rlonmin,rlonmax - read(2,*) rot - read(2,*) sx,sy - read(2,*) nx,ny - close(2) - yscal(1)=REAL(nx) - yscal(2)=REAL(ny) - yscal(3)=1. - - sx=(rlonmax-rlonmin)*d2r/(nx-1) - sy=(rlatmax-rlatmin)*d2r/(ny-1) - WRITE(6,*) 'sx:',sx,sy -! Get the grid itself - - xs=MOD(360+xs-rlonmin,360.)+rlonmin - WRITE(6,*) 'lon,lat,rlonmin,rlatmin:',xs,ys,rlonmin,rlatmin - - ALLOCATE(grid(nx,ny)) - open(2,file=fbathy,form='unformatted',access='direct',recl=4*ny) - DO i=1,nx !beware 1 should be replaced by 4 on HP terminals - read(2,rec=i) (grid(i,j),j=1,ny) - ENDDO - CLOSE(2) - - sig=2.*pi*freq - - dw=0. - call disp(dw,freq,dk,c,cg,dcdd) !calculate phase speed over land - dto=timestep !converts the time step to seconds - !h_len2=cg*dto*0.2 !lengthen the steps for long output timestep - h_len2=3000. - WRITE(6,*) 'ds2,ds, depth:',h_len2,h_len,dw - - IF (h_len2 > h_len) h_len=h_len2 - - co=c - hmin=0. - h1=h_len/co !calculate initial ray time steps, h1 - ! (major factor in computation time) - - xs=xs*d2r - ys=ys*d2r - CALL speed(xs,ys,c,dxy,dcdx,dcdy) - WRITE(6,*) 'speed',xs,ys,dxy,c,dcdx,dcdy - a_step=dtheta - !OPEN(995,file='rays.bin',status='unknown',form='unformatted') - OPEN(995,file='rays.asc',status='unknown') - ang=theta0-a_step - DO IRAY=1,nrays - ang=ang+a_step - angs=ang*d2r !transforms to radians - CALL ref(xs,ys,angs,ircode,distmax) - WRITE(6,*) 'ray:',IRAY,xs/d2r,ys/d2r,ang,ircode,nchunk,xch(nchunk),ych(nchunk),cch(nchunk) - ! write(995) nchunk,ircode - ! write(995) (xch(k),k=1,nchunk), & - ! (ych(k),k=1,nchunk),(ach(k),k=1,nchunk) - ! write(995,*) nchunk,ircode - write(995,*) (xch(k),k=1,nchunk), & - (ych(k),k=1,nchunk),(ach(k),k=1,nchunk),(cch(k),k=1,nchunk) - ENDDO - CLOSE(995) - END diff --git a/model/aux/idl_twist/raytracer.pro b/model/aux/idl_twist/raytracer.pro deleted file mode 100755 index e09dd1e31..000000000 --- a/model/aux/idl_twist/raytracer.pro +++ /dev/null @@ -1,403 +0,0 @@ -PRO Raytracemenu, anterior_root -COMMON Wray,Wrline1,Wrline2,Wrline3,Wrline4,Wrline5,WRline6 -COMMON RAYS, raysOK,raystype,raynsteps,rayx,rayy,raya,rayamin,rayamax, $ - rayres,rayfreq,rayGP,raytimestep,rayoffdep,rayflag,raydz,raymindepth -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath - - - raypath='' - raybase = WIDGET_BASE(TITLE='Ray tracer', /COLUMN) - - WRline1=LONARR(10) - WRline1(0)=WIDGET_BASE(raybase, /FRAME, /ROW) - WRline1(1)=WIDGET_DROPLIST(raybase, $ - VALUE=['ALL RAYS','OFF.RAYS','TRAP.RAYS','NO RAYS']) - - WRline2=LONARR(10) - WRline2(0)= WIDGET_BASE(raybase, /FRAME, /ROW) - WRline2(1)= WIDGET_TEXT(WRline2(0), $ - YSIZE=1,XSIZE=6,VALUE=strcompress('Freq.:')) - WRline2(2)= WIDGET_TEXT(WRline2(0), $ - XSIZE=8,YSIZE=1,/EDITABLE,VALUE=strcompress(STRING(rayfreq))) - - WRline3=LONARR(10) - WRline3(0)= WIDGET_BASE(raybase, /FRAME, /ROW) - WRline3(1)= WIDGET_LABEL(WRline3(0),VALUE='dt:') - WRline3(2)= WIDGET_TEXT(WRline3(0), $ - XSIZE=6,YSIZE=1,/EDITABLE,VALUE=strcompress(STRING(raytimestep))) - WRline3(3)= WIDGET_LABEL(WRline3(0),VALUE='dth:') - WRline3(4)= WIDGET_TEXT(WRline3(0), $ - XSIZE=6,YSIZE=1,/EDITABLE,VALUE=strcompress(STRING(rayres))) - - WRline4=LONARR(10) - WRline4(0)= WIDGET_BASE(raybase, /FRAME, /ROW) - - WRline4(1)= WIDGET_SLIDER(WRline4(0), MAXIMUM=180, MINIMUM=-180, $ - value=rayamin,TITLE='amin') - WRline4(2)= WIDGET_SLIDER(WRline4(0), MAXIMUM=180, MINIMUM=-180, $ - value=180,TITLE='amax') - - WRline5=LONARR(10) - WRline5(0)= WIDGET_BASE(raybase, /FRAME, /ROW) - WRline5(1)= WIDGET_LABEL(WRline5(0),VALUE='Depths, max:') - WRline5(2)= WIDGET_TEXT(WRline5(0), $ - XSIZE=6,YSIZE=1,/EDITABLE,VALUE=strcompress(STRING(rayoffdep))) - WRline5(3)= WIDGET_LABEL(WRline5(0),VALUE='Mean:') - WRline5(4)= WIDGET_TEXT(WRline5(0), $ - XSIZE=6,YSIZE=1,/EDITABLE,VALUE=strcompress(STRING(raydz))) - WRline5(5)= WIDGET_LABEL(WRline5(0),VALUE='Min:') - WRline5(6)= WIDGET_TEXT(WRline5(0), $ - XSIZE=6,YSIZE=1,/EDITABLE,VALUE=strcompress(STRING(raymindepth))) - - - WRline6=LONARR(10) - WRline6(0)= WIDGET_BASE(raybase, /FRAME, /ROW) - WRline6(2)=WIDGET_BUTTON(WRline6(0),VALUE="Get") - WRline6(3)=WIDGET_BUTTON(WRline6(0),VALUE="Get global") - WRline6(4)=WIDGET_BUTTON(WRline6(0),VALUE="Forward") - WRline6(5)=WIDGET_BUTTON(WRline6(0),VALUE="Forward with current") - Line7 = WIDGET_BUTTON(raybase, VALUE='OK') - - WIDGET_CONTROL, /REALIZE, raybase - XMANAGER, 'Raytracemenu', raybase -RETURN -END - - -;---------------------------------------------------------------------------- -PRO Raytracemenu_event, ev -;** 1 ** Display parameters -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,filltype -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON POSTSCRIPT, filep,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,pssizex,pssizey -COMMON TROISD, Ax3D,Az3D,smoothing -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth - -;** 2 ** Display and data variables/parameters -COMMON FREQ, freq,nfband,findex -COMMON DIR, nabin,nabint,aindex,angle -COMMON TIME, tindex,ntime,dtime,time0,day0,dtindex,nstep -COMMON TRANSECT,Ntrans,Xtrans,Ytrans,Ztrans,I1trans,I2trans,alphatrans,betatrans -COMMON SPACE, c_gp,c_cut -COMMON PLOTOP, addir,adgpsym,adbathy,adcoast - -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON ARR8m, nfTom,naTom,TomF,Tomth,OBS8m,MOD8m -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON BUOYPOS, nptrans,KS,depthbuoy,ETF,tabETF -COMMON COAST, coastx,coasty -COMMON DEPTHSTAT,distd,nbinsd -COMMON DIRSPEC, ds,ndir,kdkdth -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON GRIDPar, th1,th2,gfact,gsize1,gsize6 -COMMON GRIDSPEC,nspecgp,ispecgp,jspecgp,whichgrid,namespecgp,specfontsize -COMMON RAYS, raysOK,raystype,raynsteps,rayx,rayy,raya,rayamin,rayamax, $ - rayres,rayfreq,rayGP,raytimestep,rayoffdep,rayflag,raydz,raymindepth -COMMON SOURCE, S0,snabin,sntstep -COMMON STEADY, ETFM,etfdepth,etffact - -COMMON Wray,Wrline1,Wrline2,Wrline3,Wrline4,Wrline5,WRline6 -COMMON WW3, ww3model,ww3date,ww3time,ww3fieldname,ww3scale,ww3miss,ww3unit,ww3lon, $ - ww3lat,ww3matrix,ww3dir,ww3path,spec2D,ww3matrix2,ww3dir2,ncid,ncid2 -;*******END OF COMMON BLOCKS******************************* - type = TAG_NAMES(ev, /STRUCTURE) -; IF ev.id EQ WGsl(4) THEN BEGIN -; WIDGET_CONTROL, ev.id, GET_VALUE=value -; gfact=value -; ENDIF ELSE BEGIN - CASE type OF - 'WIDGET_BUTTON': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE value OF - 'Get': BEGIN - raystype=1 - GET_LUN,unit - OPENW,unit,raypath+'Ray3a.inpray' - PRINTF,unit,paths(2)+filenames(2) - PRINTF,unit,paths(3)+filenames(3) - nray=ROUND(ABS(rayamin-rayamax)/rayres+1) - PRINTF,unit,nray - PRINTF,unit,rayfreq,' ',rayres,rayamin,' ',raytimestep,' ',rayoffdep,' ',raymindepth - PRINTF,unit,raydz - PRINTF,unit,gridmat(0,c_gp-1)*1000./sx,gridmat(1,c_gp-1)*1000./sy - print,'Start point:',gridmat(0,c_gp-1)*1000./sx,gridmat(1,c_gp-1)*1000./sy - PRINTF,unit,' ' - CLOSE,unit - free_lun,unit - SPAWN,'rayp' - GET_LUN,unit - ;OPENR,unit,'rays.bin' - OPENR,unit,raypath+'rays.asc' - raynsteps=INTARR(nray) - rayflag=INTARR(nray) - raya=FLTARR(nray,500) - rayx=FLTARR(nray,500) - rayy=FLTARR(nray,500) - l=0 - flagr=0 - dummy=0 - ; dummies fill in the overhead info of the 'unformatted' - ; fortran binary file - FOR I=0,nray-1 DO BEGIN - ;READU,unit,dummy,dummy,dummy,l,dummy,flagr - READF,unit,l,flagr - ;PRINT,I,l,flagr - raynsteps(I)=l - rayflag(I)=flagr - x=FLTARR(l) - y=FLTARR(l) - a=FLTARR(l) - ; READU,unit,dummy,dummy,dummy,dummy,x,y,a - ; READU,unit,dummy,dummy - READF,unit,x,y,a - - ;PRINT,'X',x - ;PRINT,'Y',y - ;PRINT,'a',a - rayx(I,0:(l-1))=x - rayy(I,0:(l-1))=y - raya(I,0:(l-1))=a - ENDFOR - CLOSE,unit - free_lun,unit - RaysOK=1 - doplot - END -'Get global': BEGIN - raystype=1 - print,'LAT,LON:',gridmat(2,c_gp-1),gridmat(4,c_gp-1) - GET_LUN,unit - OPENW,unit,raypath+'Ray3a.inpray' - PRINTF,unit,paths(2)+filenames(2) - PRINTF,unit,paths(3)+filenames(3) - nray=ROUND(ABS(rayamin-rayamax)/rayres+1) - PRINTF,unit,nray - PRINTF,unit,rayfreq,' ',rayres,rayamin,' ',raytimestep,' ',rayoffdep,' ',raymindepth - PRINTF,unit,raydz - lat=gridmat(2,c_gp-1)+gridmat(3,c_gp-1)/60. - lon=gridmat(4,c_gp-1)+gridmat(5,c_gp-1)/60. - IF lon LT rlonmin THEN lon=lon+360. - PRINTF,unit,lon,lat - print,'Start point (lat,lon):',lat,lon - PRINTF,unit,' ' - CLOSE,unit - free_lun,unit - SPAWN,'raypg' - GET_LUN,unit - ;OPENR,unit,'rays.bin' - OPENR,unit,raypath +'rays.asc' - raynsteps=INTARR(nray) - rayflag=INTARR(nray) - raya=FLTARR(nray,500) - rayx=FLTARR(nray,500) - rayy=FLTARR(nray,500) - l=0 - flagr=0 - dummy=0 - ; dummies fill in the overhead info of the 'unformatted' - ; fortran binary file - FOR I=0,nray-1 DO BEGIN - ;READU,unit,dummy,dummy,dummy,l,dummy,flagr - READF,unit,l,flagr - ;PRINT,I,l,flagr - raynsteps(I)=l - rayflag(I)=flagr - lon=FLTARR(l) - lat=FLTARR(l) - a=FLTARR(l) - X=FLTARR(l) - y=FLTARR(l) - - ; READU,unit,dummy,dummy,dummy,dummy,x,y,a - ; READU,unit,dummy,dummy - READF,unit,lon,lat,a - FOR J=0,l-1 DO BEGIN - lonj=lon(J) - latj=lat(J) - LatlontoXY,latJ,0.,lonJ,0.,xl,yl - x(J)=xl - y(J)=yl - ENDFOR - ; PRINT,'X',x,lon - ;PRINT,'Y',y,lat - ;PRINT,'a',a - rayx(I,0:(l-1))=x - rayy(I,0:(l-1))=y - raya(I,0:(l-1))=a - ENDFOR - CLOSE,unit - free_lun,unit - RaysOK=1 - doplot - END - 'Forward': BEGIN - raystype=2 - GET_LUN,unit - OPENW,unit,raypath+'Ray3a.inpray' - PRINTF,unit,paths(2)+filenames(2) - PRINTF,unit,paths(3)+filenames(3) - ; The rays are separated by the same distance rayres - nray=FLOOR(((nx-41)*dx*ABS(sin(rayamin*!dtor)) $ - +(ny-41)*dy*ABS(cos(rayamin*!dtor)))/rayres) - rayamax=(nray-1)*rayres+rayamin - PRINTF,unit,nray - PRINTF,unit,rayfreq,rayres,rayamin,raytimestep,rayoffdep,raymindepth,FORMAT='(6F13.7)' - PRINTF,unit,raydz - - PRINTF,unit,' ' - CLOSE,unit - free_lun,unit - SPAWN,'raypf' - GET_LUN,unit - OPENR,unit,raypath+'rays.asc' - raynsteps=INTARR(nray) - rayflag=INTARR(nray) - raya=FLTARR(nray,3000) - rayx=FLTARR(nray,3000) - rayy=FLTARR(nray,3000) - l=0 - flagr=0 - dummy=0 -; dummies fill in the overhead info of the 'unformatted' -; fortran binary file - FOR I=0,nray-1 DO BEGIN - READF,unit,l,flagr - raynsteps(I)=l - rayflag(I)=flagr - x=FLTARR(l) - y=FLTARR(l) - a=FLTARR(l) - READF,unit,x,y,a - - rayx(I,0:(l-1))=x - rayy(I,0:(l-1))=y - raya(I,0:(l-1))=a - ENDFOR - CLOSE,unit - free_lun,unit - RaysOK=1 - doplot - END - - 'Forward with current': BEGIN - raystype=2 - x=(findgen(nx))*dx - y=(findgen(ny))*dy - XGP=FLTARR(nngp) - YGP=FLTARR(nngp) - XGP(0:nngp-1)=gridmat(0,0:nngp-1) - YGP(0:nngp-1)=gridmat(1,0:nngp-1) - - TRIANGULATE,xgp,ygp,tr,b - dircos=TRIGRID(xgp,ygp,ww3matrix*cos(ww3dir*!dtor),tr, $ - [dx,dy],[MIN(X), MIN(Y), MAX(X), MAX(Y)],XOUT=X,YOUT=Y) - dirsin=TRIGRID(xgp,ygp,ww3matrix*sin(ww3dir*!dtor),tr, $ - [dx,dy],[MIN(X), MIN(Y), MAX(X), MAX(Y)],XOUT=X,YOUT=Y) - Index=WHERE(FINITE(dircos) EQ 0, kount) - IF (kount GT 0) THEN BEGIN - dircos(Index)=0. - dirsin(Index)=0. - ENDIF - GET_LUN,unit - OPENW,unit,raypath+'Ray3a.inpray' - PRINTF,unit,paths(2)+filenames(2) - PRINTF,unit,paths(3)+filenames(3) - ; The rays are separated by the same distance rayres - nray=FLOOR(((nx-41)*dx*ABS(sin(rayamin*!dtor)) $ - +(ny-41)*dy*ABS(cos(rayamin*!dtor)))/rayres) - rayamax=(nray-1)*rayres+rayamin - PRINTF,unit,nray - PRINTF,unit,rayfreq,rayres,rayamin,raytimestep,rayoffdep,raymindepth,FORMAT='(6F13.7)' - PRINTF,unit,raydz - - PRINT,'DIRCOSBB :',size(dircos),nx,ny - PRINTF,unit,' ' - FOR J=0,NY-1 DO BEGIN - PRINTF,unit,-1.*dirsin(*,J),FORMAT='(20F8.3)' - ENDFOR - FOR J=0,NY-1 DO BEGIN - PRINTF,unit,-1.*dircos(*,J),FORMAT='(20F8.3)' - ENDFOR - CLOSE,unit - free_lun,unit - SPAWN,'raypfc' - GET_LUN,unit - OPENR,unit,raypath+'rays.asc' - raynsteps=INTARR(nray) - rayflag=INTARR(nray) - raya=FLTARR(nray,3000) - rayx=FLTARR(nray,3000) - rayy=FLTARR(nray,3000) - l=0 - flagr=0 - dummy=0 -; dummies fill in the overhead info of the 'unformatted' -; fortran binary file - FOR I=0,nray-1 DO BEGIN - READF,unit,l,flagr - raynsteps(I)=l - rayflag(I)=flagr - x=FLTARR(l) - y=FLTARR(l) - a=FLTARR(l) - READF,unit,x,y,a - - rayx(I,0:(l-1))=x - rayy(I,0:(l-1))=y - raya(I,0:(l-1))=a - ENDFOR - CLOSE,unit - free_lun,unit - RaysOK=1 - doplot - END - - - 'OK': BEGIN - WIDGET_CONTROL, /DESTROY, ev.top - RETURN - END - ENDCASE - END - 'WIDGET_TEXT_CH': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE ev.id OF - WRline2(2):rayfreq=FLOAT(value(0)) - WRline3(2):raytimestep=FLOAT(value(0)) - WRline3(4):rayres=FLOAT(value(0)) - WRline5(2):rayoffdep=FLOAT(value(0)) - WRline5(4):raydz=FLOAT(value(0)) - WRline5(6):raymindepth=FLOAT(value(0)) - ENDCASE - END - 'WIDGET_DROPLIST':BEGIN - CASE ev.id of - WRline1(1): BEGIN - raysOK=ev.index - doplot - END - ENDCASE - END - 'WIDGET_SLIDER': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE (ev.id) OF - WRline4(1):BEGIN - rayamin=FLOAT(value) - END - WRline4(2):BEGIN - rayamax=FLOAT(value) - END - ENDCASE - END - ENDCASE -; ENDELSE -RETURN -END - diff --git a/model/aux/idl_twist/read_timeseries.pro b/model/aux/idl_twist/read_timeseries.pro deleted file mode 100644 index e4e7bcdf6..000000000 --- a/model/aux/idl_twist/read_timeseries.pro +++ /dev/null @@ -1,595 +0,0 @@ -;/ -;/ +-----------------------------------+ -;/ | TWIST Ifremer-SHOM | -;/ | F. Ardhuin | -;/ | IDL command language | -;/ | Last update : 17-Oct-2013 | -;/ +-----------------------------------+ -;/ -;/ Licence information: This code is distributed under the CeCILL license -;/ generally compatible with the Gnu Public Licence (GPL) -;/ http://www.cecill.info/index.en.html -;/ -;/ 17-Oct-2013 : Creation ( version 2.00 ) -; 1. Purpose : -; -; Reads all sorts of time series formats ... -; -; 2. Method : -; -;---------------------------------------------------------------------------- -Pro read_timeseries,modspec,ncidtest,UNIT,I -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple - - -; -; defines data structure -; - modspec={specdata, typ:0, nfband:0, nabin:0, np:0, nvar:0, ntime:0L, $ - nrun:1, f1:ptr_new(), f2:ptr_new(), f:ptr_new(), df:ptr_new(), $ - theta:ptr_new(),dtheta:1.0, $ - plat:ptr_new(), plon:ptr_new(), pdepth:ptr_new(), $ - pU10:ptr_new(), pUdir:ptr_new(), $ - pCurr:ptr_new(), pCurrdir:ptr_new(), $ - pnames:ptr_new(), varnames:ptr_new(), dates: ptr_new(), $ - data:ptr_new(), flags:ptr_new(), path:ptr_new(), filename:ptr_new()} - d={date, y:0, m:0, d:0, h:0, minu:0, s:0.0, zone:0.0, jday:0.0D} - - modspec.nabin=1 - - IF (ncidtest LT 0) THEN BEGIN -; -; in this case this is not a NetCDF file -; - line='TOTO' - READF,unit,line - ts_filetype=1 - typ=0 - n1=0 - n2=0 - n3=0 -; -; If not a number: branches out to bad_num label: should be 2D spectrum -; - ON_IOERROR, bad_num - READS,line,typ - ts_filetype=0 - READF,unit,n1,n2,n3 - nrun=1 - d={date, y:0, m:0, d:0, h:0, minu:0, s:0.0, zone:0.0, jday:0.0D} - modspec.typ=typ - modspec.nfband=n1 - modspec.np=n2 - modspec.nvar=n3 - f1=FLTARR(n1) - f2=f1 - READF,unit,f1,f2 - modspec.f1=ptr_new(f1) - modspec.f2=ptr_new(f2) - f=0.5*(f1+f2) - f(0)=f1(0) - f(n1-1)=f2(n1-1) - df=ABS(f2-f1) - modspec.f=ptr_new(f) - modspec.df=ptr_new(df) - n=REPLICATE(' ',modspec.np) - FMT='(001(A8))' - IF typ LE 1 THEN BEGIN - modspec.nabin=1 - theta=FLTARR(1) - modspec.theta=ptr_new(theta) - ENDIF - STRPUT,FMT,STRING(modspec.np,FORMAT='(I3)'),1 - READF,unit,n,FORMAT=FMT - modspec.pnames=ptr_new(n) - STRPUT,FMT,STRING(modspec.nvar,FORMAT='(I3)'),1 - n=REPLICATE(' ',modspec.nvar) - READF,unit,n,FORMAT=FMT - modspec.varnames=ptr_new(n) - I=0L - y=0 - d=0 - h=0 - m=0 - minu=0 - zone=0. - nt=2600000L/(modspec.nabin*modspec.nfband) - dar=REPLICATE({date},nt) - data=FLTARR(1,modspec.np,modspec.nvar,modspec.nfband,modspec.nabin,nt) -; -; Reads frequency spectra -; - IF (typ EQ 1) THEN BEGIN - vecteur=FLTARR(modspec.nfband) - WHILE NOT EOF(unit) DO BEGIN - READF,unit,y,m,d,h,minu,zone - sec=0 - jday=JULDAY(m,d,y,h,minu,zone) - dar[i].y=y - dar[i].d=d - dar[i].m=m - dar[i].h=h - dar[i].minu=minu - dar[i].s=zone ;sec - dar[i].zone=0; zone - dar[i].jday=jday - FOR J=0,modspec.np-1 DO BEGIN - FOR K=0,modspec.nvar-1 DO BEGIN - READF,unit,vecteur - data(0,J,K,*,0,I)=vecteur - ENDFOR - ENDFOR - I=I+1 - ENDWHILE -; -; Reads bulk data -; - ENDIF ELSE BEGIN - vecteur=FLTARR(modspec.nvar) - over=0 - jdayold=0 - WHILE NOT EOF(unit) AND over EQ 0 DO BEGIN - READF,unit,y,m,d,h,minu,zone,vecteur - sec=0 - IF (I MOD 2000 EQ 0) THEN print,I,y,m,d,h,minu,zone - jday=JULDAY(m,d,y,h,minu,zone) - dar[i].y=y - dar[i].d=d - dar[i].m=m - dar[i].h=h - dar[i].minu=minu - dar[i].s=zone ;sec - dar[i].zone=0. ;zone - dar[i].jday=jday - data(0,0,*,0,0,I)=vecteur - IF jday LT jdayold THEN over=1 - jdayold=jday - IF modspec.np GT 1 and over EQ 0 THEN BEGIN - FOR J=1,modspec.np-1 DO BEGIN - READF,unit,vecteur - data(0,J,*,0,0,I)=vecteur - ENDFOR - ENDIF - I=I+1 - ENDWHILE - ENDELSE -; -; Reads spectra files (WWATCH ASCII format) -; -bad_num: IF (ts_filetype EQ 1) THEN BEGIN - typ=2 - latdeg=0 - latmin=0. - londeg=0 - lonmin=0. - n1=0 - n2=0 - n3=0 - string1=' ' - string2=' ' - itoto=0 - READS,line,string1,n1,n2,n3,string2,FORMAT='(A23,X,3I6,X,A32)' - nrun=1 - d={date, y:0, m:0, d:0, h:0, minu:0, s:0.0, zone:0.0, jday:0.0D} - modspec.typ=typ - modspec.nfband=n1 - modspec.nabin=n2 - modspec.np=n3 - print,string2 - IF STRMID(string2,0,1) EQ "'" OR STRMID(string2,0,1) EQ '"' THEN BEGIN - modspec.nvar=1 - varn=STRARR(1) - varn(0)='E(,) ' - ENDIF ELSE BEGIN - varnames=STRARR(6) - varnames(0)='E(,) ' - varnames(1)='Sin(,) ' - varnames(2)='Snl(,) ' - varnames(3)='Sds(,) ' - varnames(4)='Sbt(,) ' - varnames(5)='Stot(,) ' - string2=STRCOMPRESS(string2,/REMOVE_ALL) - invar=INTARR(6) - FOR I=0,5 DO BEGIN - if STRMID(string2,I,1) EQ 'T' THEN invar(I)=1 - ENDFOR - modspec.nvar=TOTAL(invar) - varn=STRARR(modspec.nvar) - J=0 - FOR I=0,modspec.nvar-1 DO BEGIN - IF invar(I) THEN BEGIN - varn(J)=varnames(I) - J=J+1 - ENDIF - ENDFOR - ENDELSE - modspec.varnames=ptr_new(varn) - PRINT,'Variables:',modspec.nvar,varn - - f1=FLTARR(modspec.nfband) - df=FLTARR(modspec.nfband) - READF,unit,f1 - df(0)=f1(1)-f1(0) - FOR I=1,modspec.nfband-2 DO BEGIN - df(I)=0.5*(f1(I+1)-f1(I-1)) - ENDFOR - print,'DF:',F1,'##',DF - df(modspec.nfband-1)=f1(modspec.nfband-1)-f1(modspec.nfband-2) - f=f1 - f1=f+0.5*df - f2=f-0.5*df - modspec.f1=ptr_new(f1) - modspec.f2=ptr_new(f2) - f=f1 - df=ABS(f2-f1) - modspec.f=ptr_new(f) - modspec.df=ptr_new(df) - theta=FLTARR(modspec.nabin) - READF,unit,theta - theta=!pi+theta ;plot direction is direction from - modspec.theta=ptr_new(theta) - - nt=24*10*100; *31*6;*8 - n=STRARR(modspec.np) - lats=FLTARR(modspec.np) - lons=FLTARR(modspec.np) - depths=FLTARR(modspec.np) - U10s=FLTARR(modspec.np,nt) - Udirs=FLTARR(modspec.np,nt) - Currs=FLTARR(modspec.np,nt) - Currdirs=FLTARR(modspec.np,nt) - I=0 - y=0 - d=0 - h=0 - m=0 - minu=0 - zone=0. - lat=0. - lon=0. - depth=0. - U10=0. - Udir=0. - Curr=0. - Currdir=0. - - dar=REPLICATE({date},nt) - data=FLTARR(1,modspec.np,modspec.nvar,modspec.nfband,modspec.nabin,nt) - vecteur=FLTARR(modspec.nfband,modspec.nabin) - WHILE NOT EOF(unit) DO BEGIN - READF,unit,y,m,d,h,minu,zone,FORMAT='(I4,2I2,X,3I2)' - sec=0 - print,'Reading spectrum for:',I,y,m,d,h,minu,zone - jday=JULDAY(m,d,y,h,minu,zone) - dar[i].y=y - dar[i].d=d - dar[i].m=m - dar[i].h=h - dar[i].minu=minu - dar[i].s=0. - dar[i].zone=zone - dar[i].jday=jday - FOR J=0,modspec.np-1 DO BEGIN - READF,unit,string1,lat,lon,depth,U10,Udir,Curr,Currdir, $ - FORMAT='(X,A10,X,2F7.2,F10.1,F7.2,F6.1,F7.2,F6.1)' - LatLondegtomin,lat,lon,latdeg,latmin,londeg,lonmin,latlonstring - n(J)=string1+'('+latlonstring+')' - lats(J)=lat - lons(J)=lon - depths(J)=depth - U10s(J,I)=U10 - Udirs(J,I)=Udir - Currs(J,I)=Curr - Currdirs(J,I)=Currdir - FOR K=0,modspec.nvar-1 DO BEGIN - READF,unit,vecteur,FORMAT='(7G11.3)' - data(0,J,K,*,*,I)=vecteur - ENDFOR - ENDFOR - I=I+1; - ENDWHILE - - modspec.pnames=ptr_new(n) - modspec.plat=ptr_new(lats) - modspec.plon=ptr_new(lons) - modspec.pdepth=ptr_new(depths) - modspec.pU10=ptr_new(U10s) - modspec.pUdir=ptr_new(Udirs) - modspec.pCurr=ptr_new(Currs) - modspec.pCurrdir=ptr_new(Currdirs) - - ENDIF ; end of bad_num branch - ENDIF ELSE BEGIN -; -; in this case, it is a NetCDF file -; - ncall=NCDF_INQUIRE(ncidtest) - nvars=ncall.NVARS - dimtid=NCDF_DIMID(ncidtest,'time') -; -; Globwave uses 'frequency1d' -; - dimfid=NCDF_DIMID(ncidtest,'frequency') - IF (dimfid LT 0) THEN dimfid=NCDF_DIMID(ncidtest,'frequency1d') - IF (dimfid LT 0) THEN dimfid=NCDF_DIMID(ncidtest,'frequency2d') - dimdid=NCDF_DIMID(ncidtest,'direction') - dimsid=NCDF_DIMID(ncidtest,'station') - dimxid=NCDF_DIMID(ncidtest,'string16') -; - IF (dimtid GE 0 AND dimfid GE 0 and dimdid GE 0) THEN BEGIN -; -; In this case we are reading type 2 time series: (f,theta) spectra -; - NCDF_DIMINQ,ncidtest,dimfid,name1,n1 - NCDF_DIMINQ,ncidtest,dimdid,name1,n2 - NCDF_DIMINQ,ncidtest,dimsid,name1,n3 -; - freqid=NCDF_VARID(ncidtest,'frequency') - dirid =NCDF_VARID(ncidtest,'direction') - Efthid=NCDF_VARID(ncidtest,'Efth') - IF (Efthid EQ -1) THEN Efthid=NCDF_VARID(ncidtest,'efth') ; new variable names ... - timeid=NCDF_VARID(ncidtest,'time') - - modspec.typ=2 - modspec.nfband=n1 - modspec.nabin=n2 - modspec.np=n3 - modspec.nvar=1 - varn=STRARR(1) - varn(0)='E(,) ' - modspec.varnames=ptr_new(varn) - PRINT,'Variables:',modspec.nvar,varn - - f1=FLTARR(modspec.nfband) - df=FLTARR(modspec.nfband) - varid=NCDF_VARID(ncidtest,'frequency') - NCDF_VARGET,ncidtest,varid,f - varid=NCDF_VARID(ncidtest,'frequency1') - NCDF_VARGET,ncidtest,varid,f1 - varid=NCDF_VARID(ncidtest,'frequency2') - NCDF_VARGET,ncidtest,varid,f2 - df=f2-f1 - modspec.f=ptr_new(f) - modspec.f1=ptr_new(f1) - modspec.f2=ptr_new(f2) - modspec.df=ptr_new(df) - theta=FLTARR(modspec.nabin) - varid=NCDF_VARID(ncidtest,'direction') - NCDF_VARGET,ncidtest,varid,theta -; -; Changes direction conventions to "from" -; - NCDF_ATTGET,ncidtest,varid,'units',thetaunits - NCDF_ATTGET,ncidtest,varid,'standard_name',thetaname - IF (STRING(thetaunits) EQ "degree") THEN theta = theta *!dtor - IF (STRING(thetaname) EQ "sea_surface_wave_to_direction") THEN theta=!pi+theta -; - modspec.theta=ptr_new(theta) - NCDF_DIMINQ,ncidtest,dimtid,name1,nt - print,'NC directions converted:',theta,STRING(thetaunits) - n=STRARR(modspec.np) - lats=FLTARR(modspec.np) - lons=FLTARR(modspec.np) - depths=FLTARR(modspec.np) - U10s=FLTARR(modspec.np,nt) - Udirs=FLTARR(modspec.np,nt) - Currs=FLTARR(modspec.np,nt) - Currdirs=FLTARR(modspec.np,nt) - - NCDF_VARGET,ncidtest,timeid,timeNC - NCDF_ATTGET,ncidtest,timeid,'units',timeunits - IF (STRING(timeunits) EQ "days since 1990-01-01T00:00:00Z") THEN BEGIN - jdays = timeNC + julday(1,1,1990,0,0,0) - ENDIF ELSE BEGIN - PRINT,'Unknown reference time:',STRING(timeunits) - RETURN - ENDELSE - dar=REPLICATE({date},nt) - FOR I=0,nt-1 DO BEGIN - dar[i].jday=jdays(I) - CALDAT,jdays(I),m,d,y,h,minu,sec - sec=ROUND(sec) - dar[i].y=y - dar[i].d=d - dar[i].m=m - dar[i].h=h - dar[i].minu=minu - dar[i].s=sec - dar[i].zone=0. ;zone - ENDFOR - varid=NCDF_VARID(ncidtest,'station_name') - NCDF_VARGET,ncidtest,varid,n1 - n=STRING(n1) - varid=NCDF_VARID(ncidtest,'latitude') - NCDF_VARGET,ncidtest,varid,lats - varid=NCDF_VARID(ncidtest,'longitude') - NCDF_VARGET,ncidtest,varid,lons - varid=NCDF_VARID(ncidtest,'depth') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'dpt') ; new variable names ... - NCDF_VARGET,ncidtest,varid,depths - varid=NCDF_VARID(ncidtest,'u10m') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'wnd') ; new variable names ... - NCDF_VARGET,ncidtest,varid,U10s - varid=NCDF_VARID(ncidtest,'udir') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'wnddir') ; new variable names ... - NCDF_VARGET,ncidtest,varid,Udirs - varid=NCDF_VARID(ncidtest,'curr') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'cur') ; new variable names ... - NCDF_VARGET,ncidtest,varid,Currs - varid=NCDF_VARID(ncidtest,'currdir') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'curdir') ; new variable names ... - NCDF_VARGET,ncidtest,varid,Currdirs - varid=NCDF_VARID(ncidtest,'currdir') - NCDF_VARGET,ncidtest,Efthid,dataCDF - data=FLTARR(1,modspec.np,modspec.nvar,modspec.nfband,modspec.nabin,nt) - FOR I=0,nt-1 DO BEGIN - FOR J=0,modspec.np-1 DO BEGIN - FOR K=0,modspec.nfband-1 DO BEGIN - data(0,J,0,K,*,I)=dataCDF(*,K,J,I) - ENDFOR - ENDFOR - ENDFOR - I=nt - modspec.pnames=ptr_new(n) - modspec.plat=ptr_new(lats) - modspec.plon=ptr_new(lons) - modspec.pdepth=ptr_new(depths) - modspec.pU10=ptr_new(U10s) - modspec.pUdir=ptr_new(Udirs) - modspec.pCurr=ptr_new(Currs) - modspec.pCurrdir=ptr_new(Currdirs) - NCDF_CLOSE,ncidtest -; - ENDIF ELSE BEGIN IF (dimfid GT 0) THEN BEGIN -; -; In this case we are reading type 1 time series: (f,theta) spectra -; - modspec.typ=1 - modspec.nabin=1 - theta=FLTARR(1) - modspec.theta=ptr_new(theta) - NCDF_DIMINQ,ncidtest,dimfid,name1,n1 - IF (dimsid GT 0) THEN NCDF_DIMINQ,ncidtest,dimsid,name1,n3 ELSE n3=1 - freqid=NCDF_VARID(ncidtest,'frequency') - dirid =NCDF_VARID(ncidtest,'direction') - Efthid=NCDF_VARID(ncidtest,'Efth') - timeid=NCDF_VARID(ncidtest,'time') - modspec.nfband=n1 - modspec.np=n3 - modspec.nvar=1 - varn=STRARR(1) - - f1=FLTARR(modspec.nfband) - df=FLTARR(modspec.nfband) - varid=NCDF_VARID(ncidtest,'frequency') - IF (varid LT 0) THEN $ - varid=NCDF_VARID(ncidtest,'wave_directional_spectrum_central_frequency') - IF (varid LT 0) THEN $ - varid=NCDF_VARID(ncidtest,'wave_frequency_spectrum_central_frequency') - NCDF_VARGET,ncidtest,varid,f - varid=NCDF_VARID(ncidtest,'frequency1') - IF (varid GE 0) THEN BEGIN - NCDF_VARGET,ncidtest,varid,f1 - varid=NCDF_VARID(ncidtest,'frequency2') - NCDF_VARGET,ncidtest,varid,f2 - df=f2-f1 - ENDIF ELSE BEGIN - varid=NCDF_VARID(ncidtest,'frequency') - IF (varid LT 0) THEN $ - varid=NCDF_VARID(ncidtest,'wave_directional_spectrum_frequency_range') - IF (varid LT 0) THEN $ - varid=NCDF_VARID(ncidtest,'wave_frequency_spectrum_frequency_range') - NCDF_VARGET,ncidtest,varid,df - f1=f-df*0.5 - f2=f+df*0.5 - ENDELSE - modspec.f=ptr_new(f) - modspec.f1=ptr_new(f1) - modspec.f2=ptr_new(f2) - modspec.df=ptr_new(df) - varid=NCDF_VARID(ncidtest,'direction') - NCDF_DIMINQ,ncidtest,dimtid,name1,nt - n=STRARR(modspec.np) - lats=FLTARR(modspec.np) - lons=FLTARR(modspec.np) - depths=FLTARR(modspec.np) - U10s=FLTARR(modspec.np,nt) - Udirs=FLTARR(modspec.np,nt) - Currs=FLTARR(modspec.np,nt) - Currdirs=FLTARR(modspec.np,nt) - - NCDF_VARGET,ncidtest,timeid,timeNC - NCDF_ATTGET,ncidtest,timeid,'units',timeunits - CASE STRING(timeunits) OF ; We will do a better jog with this later ;-) - 'days since 1990-01-01T00:00:00Z': jdays = timeNC + julday(1,1,1990,0,0,0) - 'seconds since 1970-01-01 00:00:00': jdays = timeNC/86400. + julday(1,1,1970,0,0,0) - ELSE: PRINT,'Unknown reference time:',STRING(timeunits),'.' - ENDCASE - dar=REPLICATE({date},nt) - zone=0. - FOR I=0,nt-1 DO BEGIN - dar[i].jday=jdays(I) - CALDAT,jdays(I),m,d,y,h,minu,sec - sec=ROUND(sec) - dar[i].y=y - dar[i].d=d - dar[i].m=m - dar[i].h=h - dar[i].minu=minu - dar[i].s=0. - dar[i].zone=zone - IF (I EQ 0) THEN print,'Reading spectrum for:',I,y,m,d,h,minu,sec - ENDFOR - print,'Last spectrum for:',I-1,y,m,d,h,minu,sec - - varid=NCDF_VARID(ncidtest,'station_name') - IF (varid EQ -1) THEN NCDF_ATTGET,ncidtest,'wmo_id',n1,/GLOBAL ELSE $ - NCDF_VARGET,ncidtest,varid,n1 - pn=STRARR(1) - pn(0)=STRING(n1) - modspec.pnames=ptr_new(pn) - - varid=NCDF_VARID(ncidtest,'latitude') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'lat') - NCDF_VARGET,ncidtest,varid,lats - - varid=NCDF_VARID(ncidtest,'longitude') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'lon') - NCDF_VARGET,ncidtest,varid,lons - varid=NCDF_VARID(ncidtest,'depth') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'dpt') ; new variable names ... - NCDF_VARGET,ncidtest,varid,depths - varid=NCDF_VARID(ncidtest,'u10m') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'wnd') ; new variable names ... - IF (varid GE 0) THEN NCDF_VARGET,ncidtest,varid,U10s - varid=NCDF_VARID(ncidtest,'udir') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'wnddir') ; new variable names ... - IF (varid GE 0) THEN NCDF_VARGET,ncidtest,varid,Udirs - IF (varid GE 0) THEN varid=NCDF_VARID(ncidtest,'curr') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'cur') ; new variable names ... - IF (varid GE 0) THEN NCDF_VARGET,ncidtest,varid,Currs - IF (varid GE 0) THEN varid=NCDF_VARID(ncidtest,'currdir') - IF (varid EQ -1) THEN varid=NCDF_VARID(ncidtest,'curdir') ; new variable names ... - IF (varid GE 0) THEN NCDF_VARGET,ncidtest,varid,Currdirs - - varid=NCDF_VARID(ncidtest,'ef') - IF (varid EQ -1) THEN $ - varid=NCDF_VARID(ncidtest,'wave_directional_spectrum_spectral_density') - IF (varid EQ -1) THEN $ - varid=NCDF_VARID(ncidtest,'wave_frequency_spectrum_spectral_density') - NCDF_VARGET,ncidtest,varid,dataCDF - IF (varid GE 0) THEN modspec.nvar = 1 - data=FLTARR(1,modspec.np,modspec.nvar,modspec.nfband,modspec.nabin,nt) -; Will add directional stuff later ... - varn=STRARR(1) - varn(0)='Ef ' - modspec.varnames=ptr_new(varn) - PRINT,'Variables:',modspec.nvar,varn - FOR I=0,nt-1 DO BEGIN - FOR J=0,modspec.np-1 DO BEGIN - FOR K=0,modspec.nfband-1 DO BEGIN - data(0,J,0,K,0,I)=dataCDF(K,I) - ENDFOR - ENDFOR - ENDFOR - I=nt - modspec.plat=ptr_new(lats) - modspec.plon=ptr_new(lons) - modspec.pdepth=ptr_new(depths) - modspec.pU10=ptr_new(U10s) - modspec.pUdir=ptr_new(Udirs) - modspec.pCurr=ptr_new(Currs) - modspec.pCurrdir=ptr_new(Currdirs) - NCDF_CLOSE,ncidtest - ENDIF - ENDELSE - ENDELSE - - modspec.ntime=I - modspec.data=ptr_new(data(*,*,*,*,*,0:I-1)) - modspec.dates=ptr_new(dar(0:I-1)) - flags=INTARR(I)+1 - PRINT,'Read ',I,' time steps.' - - modspec.flags=ptr_new(flags) - END diff --git a/model/aux/idl_twist/rt_visumain.pro b/model/aux/idl_twist/rt_visumain.pro deleted file mode 100644 index 5d4aaf33a..000000000 --- a/model/aux/idl_twist/rt_visumain.pro +++ /dev/null @@ -1,8715 +0,0 @@ -;/ -;/ +-----------------------------------+ -;/ | TWIST Ifremer-SHOM | -;/ | F. Ardhuin | -;/ | IDL command language | -;/ | Last update : 30-Nov-2013 | -;/ +-----------------------------------+ -;/ -;/ Licence information: This code is distributed under the CeCILL license -;/ generally compatible with the Gnu Public Licence (GPL) -;/ http://www.cecill.info/index.en.html -;/ -;/ 17-Oct-2013 : Clean up ( version 2.00 ) -;/ 17-Oct-2013 : Reading of GLOBWAVE NetCDF buoy data( version 2.00 ) -;/ 26-Oct-2013 : Manages different times for add. mod( version 2.00 ) -;/ 27-Oct-2013 : ASCII export from NetCDF files ( version 2.00 ) -;/ 10-Nov-2013 : Debugged the update_coordinates ( version 2.00 ) -;/ 30-Nov-2013 : Adding support for polar grids ( version 2.01 ) -; 1. Purpose : -; -; Main GUI for wave analysis. Calls sub-windows. -; -; 2. Method : -; -; - Reads some files -; - Does some processing -; - performs a plot -; -; This files contains the main procedures -; it also calls parametros.pro, raytracer.pro, gridbuild.pro -; -; All the widgets of the main window are defined in 'analyzer' -;---------------------------------------------------------------------------- -Pro rt_visumain -;+ -; NAME: -; ANALYZER -; PURPOSE: -; Displays the widgets of the main window -; CALLING SEQUENCE: -; rt_visumain -; INPUTS:none -; COMMON BLOCKS: See below -; MODIFICATION HISTORY: under construction (1/1/1999 - 17-Oct-2013) -; MODIFICATION HISTORY: increased slider width (17-Oct-2013) -;- -;** 1 ** Display parameters -COMMON AXISFRAME,axis_orient,frametype,outx1lab,outx2lab,outy1lab,outy2lab -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON THREED, Ax3D,Az3D,smoothing -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON INTERFACE, TWISTVA_VERSION - -;** 2 ** Display and data variables/parameters -COMMON FREQ, freq,nfband,findex,findex2 -COMMON DIR, nabin,nabint,aindex,THETA -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 - -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath - -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON GRIDPar, th1,th2,gfact,gsize1,gsize6 -COMMON RAYS, raysOK,raystype,raynsteps,rayx,rayy,raya,rayamin,rayamax, $ - rayres,rayfreq,rayGP,raytimestep,rayoffdep,rayflag,raydz,raymindepth -COMMON TIMESERIES, modspec,obs,obs2,om,ts_filetype, nbins, bulktype,scatvar -;*******END OF COMMON BLOCKS******************************* - bulktype=0 - scatvar=0 - Initmain ;calls main initialization procedure - YBUTSIZE = 30 - YSLISIZE = 50 - -;controls the device behaviour - device, retain=2, decomposed=0 - - base = long(0) ;main base widget - base = WIDGET_BASE(TITLE='the Wave Ifremer-SHOM tool - v2.0 - rev301', /ROW) - - left = WIDGET_BASE(base,/COLUMN) ; left widget - -; Widget bar on top of drawing window: - topleft = WIDGET_BASE(left, /FRAME, /ROW) - Wtoprow=LONARR(10) - Wtoprow(0)=WIDGET_LABEL(topleft,VALUE='Read file:') - Wtoprow(1)=WIDGET_DROPLIST(topleft, VALUE=[ $ - 'Click here to select file type', $ - 'xyz.dat file', $ - 'Bathy log file', $ - 'Binary bathy', $ - 'GSHHS coastline', $ - '*.line coastline', $ - 'GMESH triangle-based grid', $ - 'Special points (overlays)', $ - 'Transect', $ - ' ', $ - 'Observed time series', $ - 'Modelled time series', $ - 'Additional modelled TS', $ - ' ', $ - 'All modelled TS for new point', $ - ' ', $ - 'Additional bulk time series', $ - 'WW3 NetCDF map', $ - 'GSHHS coast', $ - 'Data flags', $ - 'WW3 map', $ - 'WW3 map diff', $ - 'Color palette']) - IF (TWISTVA_VERSION EQ 'LICENCE') THEN $ - Wtoprow(2)=WIDGET_BUTTON(topleft, VALUE='Palette') $ - ELSE Wtoprow(2)=WIDGET_LABEL(topleft,VALUE=' ') - Wtoprow(3)=WIDGET_BUTTON(topleft, VALUE='Refresh') - Wtoprow(5)=WIDGET_LABEL(topleft,VALUE=' ') - Wtoprow(4)=WIDGET_BUTTON(topleft, VALUE='Quit') - - -; drawing window: - Wdraw = WIDGET_DRAW(left, XSIZE=winx,YSIZE=winy, $ - /BUTTON_EVENTS,/MOTION_EVENTS,SENSITIVE=0, $ - /WHEEL_EVENTS,/COLOR_MODEL,COLORS=256) - - -; Widgets on the right: - - right = WIDGET_BASE(base, /COLUMN) ; right widget - - Wrlines=LONARR(20) - Wright=LONARR(20,15) - Wrblock=LONARR(6) - FOR I=0,5 DO BEGIN - Wrblock(I)=WIDGET_BASE(right, /FRAME, /COLUMN) - ENDFOR - -;first line (part of first block) - I=0 - Wrlines(I)=WIDGET_BASE(Wrblock(0), /ROW) - Wright(I,3)=WIDGET_LABEL(Wrlines(I), VALUE='Time series:', YSIZE=YBUTSIZE) - Wright(I,0)=WIDGET_DROPLIST(Wrlines(I), $ - VALUE=['Modelled','Observed','Comparison'], YSIZE=YBUTSIZE) - Wright(I,1)=WIDGET_LABEL(Wrlines(I), VALUE='Flags:', YSIZE=YBUTSIZE) - Wright(I,2)=WIDGET_DROPLIST(Wrlines(I), VALUE=['NO CHOICE'], YSIZE=YBUTSIZE) -; -;second line (part of first block) -; - I=2 - Wrlines(I)=WIDGET_BASE(Wrblock(0), /ROW) - ptype = ['Grid+Topo','Bathy from gmsh', 'WW3 map','WW3 map diff'] - Wright(I,0)=WIDGET_LABEL(Wrlines(I),VALUE='Other data:') - Wright(I,1)=WIDGET_DROPLIST(Wrlines(I), VALUE=ptype) - Wright(I,2)=WIDGET_BASE(Wrlines(I), /ROW,/NonExclusive) - Wright(I,3)=Widget_Button(Wright(I,2), Value='Norm') - Widget_Control, Wright(I,3), Set_Button=1 -;3rd line (second block) - I=1 - Wrlines(I)=WIDGET_BASE(Wrblock(0), /ROW) - Wright(I,4)=WIDGET_LABEL(Wrlines(I), VALUE='Var.:', YSIZE=YBUTSIZE) - Wright(I,1)=WIDGET_DROPLIST(Wrlines(I), VALUE=['NO CHOICE'], YSIZE=YBUTSIZE) - Wright(I,2)=WIDGET_DROPLIST(Wrlines(I),VALUE=['NO CHOICE'], YSIZE=YBUTSIZE) - Wright(I,3)=WIDGET_DROPLIST(Wrlines(I), VALUE=['NO CHOICE'], YSIZE=YBUTSIZE) - -;4th line (second block) - I=3 - Wrlines(I)=WIDGET_BASE(Wrblock(1), /ROW) - Wright(I,4)=WIDGET_LABEL(Wrlines(I),VALUE='Overlays') - Wright(I,0)=WIDGET_DROPLIST(Wrlines(I), $ - VALUE=['DIR','NO DIR'], YSIZE=YBUTSIZE) - Wright(I,1)=WIDGET_DROPLIST(Wrlines(I), $ - VALUE=['NO SYM','SPEC','GP','ALL','GP #'], YSIZE=YBUTSIZE) - Wright(I,2)=WIDGET_DROPLIST(Wrlines(I), $ - VALUE=['NO BATHY','DOT30-50','SOL300','DASH100','SOL20-40'], YSIZE=25, FRAME = 0) -;5th line (second block) - I=4 - Wrlines(I)=WIDGET_BASE(Wrblock(1), /ROW) - Wright(I,0)=WIDGET_DROPLIST(Wrlines(I), $ - VALUE=['Coast','No coast','outline','outline, no lakes'], YSIZE=YBUTSIZE) - Wright(I,2)=WIDGET_DROPLIST(Wrlines(I), $ - VALUE=['NO TRI','TRI','CELLS','NODES']) - Wright(I,3)=WIDGET_DROPLIST(Wrlines(I), $ - VALUE=['NO','Cont.'], YSIZE=25, FRAME = 0) - -;6th line (3rd block) - I=5 - Wrlines(I)=WIDGET_BASE(Wrblock(2), /ROW) - Wright(I,0)=WIDGET_LABEL(Wrlines(I),VALUE='Plot type:') - Wright(I,1)=WIDGET_DROPLIST(Wrlines(I), $ - VALUE=['CONTOURFILL','TV','POLYFILL','CONTOUR', $ - 'NOTHING','POLAR FILL','POLAR_CONTOUR','POLAR_POLY','SURFACE','SHADE_SURF', $ - 'SHADE_SURF2','LEGO','ONLY CBAR','2D-f spectrum'], YSIZE=YBUTSIZE) - -;7th line (3rd block) - I=6 - Wrlines(I)=WIDGET_BASE(Wrblock(2), /ROW) - Wright(I,0)=WIDGET_LABEL(Wrlines(I),VALUE='Output:') - Wright(I,1)=WIDGET_DROPLIST(Wrlines(I),VALUE=['Annotate','Save as PS', $ - 'Send to las1r2','Send to col1r1','Save as EPS','Save as PNG', $ - 'Save as JPEG','Save as TIFF','Save as GIF-M','time-GIF'], YSIZE=YBUTSIZE) - - Wright(I,2)=WIDGET_DROPLIST(Wrlines(I), $ - VALUE=['get time series','Save time series','from all files', $ - 'save from all','Save snapshot'], YSIZE=YBUTSIZE) - -;8th line (4th block) - I=7 - Wrlines(I)=WIDGET_BASE(Wrblock(3), /ROW) - Wright(I,4)=WIDGET_LABEL(Wrlines(I),VALUE='Toolboxes:') - Wright(I,0)=WIDGET_BUTTON(Wrlines(I), VALUE='Plot parameters') - ;Wright(I,1)=WIDGET_BUTTON(Wrlines(I), VALUE='Transect tool') - Wright(I,2)=WIDGET_BUTTON(Wrlines(I), VALUE='Rays') - Wright(I,3)=WIDGET_BUTTON(Wrlines(I), VALUE='Maps') - I=8 - Wright(I,1)=WIDGET_BUTTON(Wrlines(I-1), VALUE='Mesh') - Wright(I,2)=WIDGET_BUTTON(Wrlines(I-1), VALUE='Bathy') - -;9th line (5th block) - I=9 - Wrlines(I)=WIDGET_BASE(Wrblock(4), /ROW) - Wright(I,0)=WIDGET_LABEL(Wrlines(I),VALUE='Min/max:') - Wright(I,1)=WIDGET_TEXT(Wrlines(I),/EDITABLE, $ - XSIZE=8,YSIZE=1,VALUE=strcompress(STRING(mindepth))) - ;Wright(I,2)= WIDGET_LABEL(Wrlines(I),VALUE='Max:') - Wright(I,3)= WIDGET_TEXT(Wrlines(I),/EDITABLE, $ - XSIZE=8,YSIZE=1,VALUE=strcompress(STRING(maxdepth))) - -;10th line (5th block) - I=10 - ;Wrlines(I)=WIDGET_BASE(Wrblock(4), /ROW) - Wright(I,0)=WIDGET_BUTTON(Wrlines(I-1), VALUE='Zoom') - Wright(I,1)=WIDGET_BUTTON(Wrlines(I-1), VALUE='Zoom out') - Wright(I,2)=WIDGET_BUTTON(Wrlines(I-1), VALUE='Move') - -;11th line (5th block) - I=11 - Wrlines(I)=WIDGET_BASE(Wrblock(4), /ROW) - Wright(I,0)=WIDGET_LABEL(Wrlines(I),VALUE='Point:') - Wright(I,1)=WIDGET_TEXT(Wrlines(I),XSIZE=6,YSIZE=1, $ - VALUE=strcompress(' 1'),/EDITABLE) - Wright(I,3)=WIDGET_DROPLIST(Wrlines(I),VALUE=[' ']) - Wright(I,2)= WIDGET_BUTTON(Wrlines(I),VALUE='PickNew') - Wright(I,4)=WIDGET_BUTTON(Wrlines(I), VALUE='EndMove') - -;12th line (5th block) - I=12 - Wrlines(I)=WIDGET_BASE(Wrblock(4), /ROW) - Wright(I,0) = WIDGET_SLIDER(Wrlines(I), MAXIMUM=nfband, MINIMUM=1, $ - value=findex,TITLE='Min freq index', YSIZE=YSLISIZE) - Wright(I,5) = WIDGET_SLIDER(Wrlines(I), MAXIMUM=nfband, MINIMUM=1, $ - value=nfband,TITLE='Max freq index', YSIZE=YSLISIZE) - Wright(I,1) = WIDGET_SLIDER(Wrlines(I), MAXIMUM=nabin-1, MINIMUM=0, $ - value=aindex,TITLE='angle', YSIZE=YSLISIZE) - Wrlines(I)=WIDGET_BASE(Wrblock(4), /ROW) - Wright(I,2) = WIDGET_SLIDER(Wrlines(I), MAXIMUM=ntime, MINIMUM=1, $ - value=tindex,TITLE='time index start',XSIZE='150', YSIZE=YSLISIZE) - Wright(I,4) = WIDGET_SLIDER(Wrlines(I), MAXIMUM=ntime, MINIMUM=1, $ - value=dtindex,TITLE='time index end',XSIZE='150', YSIZE=YSLISIZE) - -;15th line (6th block) - I=15 - Wrlines(I)=WIDGET_BASE(Wrblock(5), /ROW) - Wright(I,0)=WIDGET_LABEL(Wrlines(I),VALUE='Lat,lon:') - Wright(I,1)=WIDGET_TEXT(Wrlines(I),XSIZE=44,YSIZE=1, $ - VALUE=strcompress('???????????? / ????????????')) - -;14th line (6th block) - I=14 - Wrlines(I)=WIDGET_BASE(Wrblock(5), /ROW) - Wright(I,0)=WIDGET_LABEL(Wrlines(I),VALUE='X,Y:') - Wright(I,1)=WIDGET_TEXT(Wrlines(I),XSIZE=17,YSIZE=1, $ - VALUE=strcompress('????????,????????')) - Wright(I,2)= WIDGET_LABEL(Wrlines(I),VALUE='Z:') - Wright(I,3)= WIDGET_TEXT(Wrlines(I),XSIZE=8,YSIZE=1, $ - VALUE=strcompress('???????')) - Wright(I,4)= WIDGET_LABEL(Wrlines(I),VALUE='Value:') - Wright(I,5)= WIDGET_TEXT(Wrlines(I),XSIZE=7,YSIZE=1, $ - VALUE=strcompress('???????')) - - - WIDGET_CONTROL, /REALIZE, base ;make widgets visible - WIDGET_CONTROL, GET_VALUE=drawval, Wdraw - Wdraw_value_update=1 - WSET, drawval - - WIDGET_CONTROL, Wdraw, SENSITIVE=1 - XMANAGER, 'analyzer', /NO_BLOCK,base ;specify event handler -END - - -;----------------------------------------------------------------------------- -PRO Addinpoly,xc,yc,marginx,marginy,x1,y1,x2,y2,xp,yp,add - add=0 - IF (X1 GT xc) THEN BEGIN - IF (X2 GT xc) THEN BEGIN - IF (Y1 GT yc) THEN BEGIN - IF (Y2 LE yc) THEN BEGIN - add=2 - xp=[xc-marginx,xc-marginx] - yp=[yc+marginy,yc-marginy] - ENDIF - ENDIF ELSE BEGIN - IF (Y2 GT yc) THEN BEGIN - add=2 - xp=[xc+marginx,xc+marginx] - yp=[yc-marginy,yc+marginy] - ENDIF - ENDELSE - ENDIF ELSE BEGIN - IF (Y1 GT yc) THEN BEGIN - IF (Y2 GT yc) THEN BEGIN - add=2 - xp=[xc+marginx,xc-marginx] - yp=[yc+marginy,yc+marginy] - ENDIF ELSE BEGIN - add=3 - xp=[xc+marginx,xc-marginx,xc-marginx] - yp=[yc+marginy,yc+marginy,yc-marginy] - ENDELSE - ENDIF ELSE BEGIN - IF (Y2 GT yc) THEN BEGIN - add=3 - xp=[xc+marginx,xc+marginx,xc-marginx] - yp=[yc-marginy,yc+marginy,yc+marginy] - ENDIF ELSE BEGIN - add=2 - xp=[xc+marginx,xc-marginx] - yp=[yc-marginy,yc-marginy] - ENDELSE - ENDELSE - ENDELSE - ENDIF ELSE BEGIN - IF (X2 GT xc) THEN BEGIN - IF (Y1 GT yc) THEN BEGIN - IF (Y2 LE yc) THEN BEGIN - add=2 - xp=[xc-marginx,xc-marginx] - yp=[yc+marginy,yc-marginy] - ENDIF - ENDIF ELSE BEGIN - IF (Y2 GT yc) THEN BEGIN - add=2 - xp=[xc+marginx,xc+marginx] - yp=[yc-marginy,yc+marginy] - ENDIF - ENDELSE - ENDIF ELSE BEGIN - IF (Y1 GT yc) THEN BEGIN - IF (Y2 GT yc) THEN BEGIN - add=2 - xp=[xc+marginx,xc-marginx] - yp=[yc+marginy,yc+marginy] - ENDIF ELSE BEGIN - add=3 - xp=[xc+marginx,xc-marginx,xc-marginx] - yp=[yc+marginy,yc+marginy,yc-marginy] - ENDELSE - ENDIF ELSE BEGIN - IF (Y2 GT yc) THEN BEGIN - add=3 - xp=[xc+marginx,xc+marginx,xc-marginx] - yp=[yc-marginy,yc+marginy,yc+marginy] - ENDIF ELSE BEGIN - add=2 - xp=[xc+marginx,xc-marginx] - yp=[yc-marginy,yc-marginy] - ENDELSE - ENDELSE - ENDELSE - ENDELSE - -END -;----------------------------------------------------------------------------- -PRO ReadDataFile,filename,filetype,widgetaction -;+ -; NAME: ReadDataFile -; PURPOSE: Reads data from file using the format prescribed by datatype -; CALLING SEQUENCE: ReadDataFile,filename,filetype -; where filename is string (without path) and datatype is an integer -; INPUT: filename: string (without path) -; filetype: integer -; COMMON BLOCKS: datainfo,xyz,choices,drawsize,plotvar,widgets,datatype, -; current,smallval,zoomidx,vecprm,prprm,psprm,dlprm,pmprm, -; flags,rotprm,rotarr -;- - -;** 1 ** Display parameters -common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON THREED, Ax3D,Az3D,smoothing -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON WGene,Wgrideditor,WG,root -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth - -;** 2 ** Display and data variables/parameters -COMMON FREQ, freq,nfband,findex,findex2 -COMMON DIR, nabin,nabint,aindex,THETA -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -COMMON MAPPOLE, XPOLE, YPOLE, SLAT, RE, E2, E -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize -COMMON TRANSLOC,igpt,thetatrans,gridtmat,transtype - -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y,c_lon,c_lat -COMMON OVERLAY, addir,adsyms,adbathy,adcoast,psyms,psymsizes,adtr,adtri - -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON DIR_STACK, DEPTH, STACK -COMMON ARR8m, nfTom,naTom,TomF,Tomth,OBS8m,MOD8m -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON COAST, coastxy,coastl,coastnp,GSHHSPoly,GSHHSPoint,GSHHSPoly2,GSHHSPoint2 -COMMON DEPTHSTAT,nbind,bindres,HISTD,MEAND,SDEVD -COMMON DIRSPEC, ds,dsnfband,ndir,kdkdth,dsfreq,dstheta,dsdf,dstime,dsntime,ds_timezone -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON TRIANGLE2,nzonetri,zonetri,nzonegp,zonegp,ngpzone,gpzone -COMMON GRIDPar, th1,th2,gfact,gsize1,gsize6 -COMMON TIMESERIES, modspec,obs,obs2,om,ts_filetype, nbins, bulktype,scatvar -COMMON RAYS, raysOK,raystype,raynsteps,rayx,rayy,raya,rayamin,rayamax, $ - rayres,rayfreq,rayGP,raytimestep,rayoffdep,rayflag,raydz,raymindepth -COMMON SOURCE, S0,snabin,sntstep -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -COMMON WW3, ww3model,ww3date,ww3time,ww3fieldname,ww3scale,ww3miss,ww3unit,ww3lon, $ - ww3lat,ww3matrix,ww3dir,ww3path,spec2D,ww3matrix2,ww3dir2,ncid,ncid2,ncivar0,ncivar -COMMON WGene,Wgrideditor,WG,root -COMMON XYZDATA, NXYZ, XYZ -COMMON SHORELINE2, open_boundary -;*******END OF COMMON BLOCKS******************************* - -; FILE TYPES: -; 0 'Ray3.inp', $ general purpose input file -; 1 'Ray3b output', $ output of the RAY3 model -; 2 'Bathy log file', $ log file for the bathymetry -; 3 'Binary bathy', $ binary bathymetry file -; 4 'Coast file', $ coastline file used for overlay on plots: reads a gshhs 2.0 file -; 5 'Grid file', $ model grid positions (x,y, lat,lon) -; 6 'Depth stats', $ depth statistics around grid points -; 7 'GMESH triangle-based grid', $ mesh using GMESH format -; 8 'Transect', $ coordinates of points for transect display -; 9 'Offshore spec.', $ time series of boundary condition -;10 'Model specials', $ -;11 'Observations', $ observed freq. spectra at sites X to I -;12 'Ray3b AtoI', $ model additional output for A to I sites -;13 '8m array OBS', $ observed 8m array spectrum -;14 '8m array MOD']) model 8m array spectrum - - - unit=filetype+1 - CD,'.',CURRENT=cpath - raypath=cpath ; BIG BUG TO BE FIXED -; - IF (filetype NE 17) THEN BEGIN -; -; closes old files and open newly selected file -; - ON_IOERROR, not_OPEN - CLOSE,unit -NOT_OPEN: print,'PATH0:',filetype,paths(filetype) - ON_IOERROR, not_NETCDF - openOK=0 - ncidtest=-1 - ncidtest=NCDF_OPEN(paths(filetype)+filename,/NOWRITE) - openOK=1 -NOT_NETCDF: IF (openOK EQ 0) THEN BEGIN - IF (((filetype EQ 1) OR (filetype EQ 3) $ - OR (filetype EQ 4))) $ ; AND !VERSION.OS_FAMILY EQ 'Windows' ) $ - THEN OPENR,unit,paths(filetype)+filename,/SWAP_ENDIAN $ - ELSE OPENR,unit,paths(filetype)+filename - ENDIF -; - ENDIF ELSE BEGIN - IF N_ELEMENTS(ncid2) EQ 0 THEN BEGIN - IF N_ELEMENTS(ncid) GT 0 THEN NCDF_CLOSE,ncid - ENDIF ELSE BEGIN - IF N_ELEMENTS(ncid) GT 0 AND (ncid NE ncid2) THEN NCDF_CLOSE,ncid - ENDELSE - ncid=NCDF_OPEN(paths(filetype)+filename,/NOWRITE) - ENDELSE - ON_IOERROR, NULL -; -; sets the flag variable to indicate that file is read -; - filestatus(filetype)=filestatus(filetype)+1 - CASE filetype of - - 1:BEGIN ;reads xyz.dat - nxyz=0L - READF,unit,nxyz - XYZ=FLTARR(NXYZ,3) - XYZ1=FLTARR(3) - FOR I=0L,nxyz-1 DO BEGIN - READF,unit,XYZ1 - XYZ(I,*)=XYZ1 - ENDFOR - readOK=1 - lonmin=MIN(XYZ(*,0)) - lonmax=MAX(XYZ(*,0)) - latmin=MIN(XYZ(*,1)) - latmax=MAX(XYZ(*,1)) - UPDATE_COORDINATES,lonmin,lonmax,latmin,latmax,widgetaction - - - FOR I=0L,nxyz-1 DO BEGIN - latdeg=FLOOR(XYZ(I,1)) - IF latdeg LT 0 THEN latdeg=latdeg+1 - londeg=FLOOR(XYZ(I,0)) - IF londeg LT 0 THEN londeg=londeg+1 - latmin=(XYZ(I,1)-latdeg)*60. - lonmin=(XYZ(I,0)-londeg)*60. - LatLontoXY,latdeg,latmin,londeg,lonmin,x,y - XYZ(I,0)=X - XYZ(I,1)=Y - ENDFOR - END -; -;reads bathy log file -; - 2:BEGIN - nx=0L - ny=0L - toto=0 - MAPLONLAT=1 - READF,unit,rlatmin,rlatmax,rlonmin,rlonmax - readOK=0 - ON_IOERROR, bad_numlog - READF,unit,toto - READF,unit,sx,sy - READF,unit,nx,ny - readOK=1 -bad_numlog: IF (readOK EQ 0) THEN BEGIN - nx=ROUND((rlonmax-rlonmin)*1200)+1 - ny=ROUND((rlatmax-rlatmin)*1200)+1 - sx=(rlonmax-rlonmin)*4E7/360./(nx-1)*cos(0.5*(rlatmax+rlatmin)*!pi/180.) - sy=(rlatmax-rlatmin)*4E7/360./(ny-1) - print,'Automatic setting of nx and ny:',nx,ny - ENDIF - dx=sx/1000. - dy=sy/1000. - nxzmin=0L - nyzmin=0L - nxzmax=nx-1 - nyzmax=ny-1 - rangex=[0,dx*FLOAT(nx-1)] - rangey=[0,dy*FLOAT(ny-1)] - IF widgetaction THEN WIDGET_CONTROL, Wdraw, SENSITIVE=1 - paths(filetype+1)=paths(filetype) - datastatus(3)=0 - END - 3:BEGIN ;reads binary bathymetry file (generated with matlab) - print,'Test NetCDF:',ncidtest - IF (ncidtest LT 0) THEN BEGIN -; -; in this case this is not a NetCDF file -; - gd=FLTARR(ny,nx) - READU,unit,gd - gd=transpose(gd) - ENDIF ELSE BEGIN - varid=NCDF_VARID(ncidtest,'x_range') - NCDF_VARGET,ncidtest,varid,rangex - rlonmin=rangex(0) - rlonmax=rangex(1) - varid=NCDF_VARID(ncidtest,'y_range') - NCDF_VARGET,ncidtest,varid,rangey - rlatmin=rangey(0) - rlatmax=rangey(1) - varid=NCDF_VARID(ncidtest,'dimension') - NCDF_VARGET,ncidtest,varid,dimensions - nx=dimensions(0) - ny=dimensions(1) - varid=NCDF_VARID(ncidtest,'z') - NCDF_VARGET,ncidtest,varid,gd - gd = REFORM(gd, nx, ny, /OVERWRITE) - gd=-1.*REVERSE(gd,2) - sx=(rlonmax-rlonmin)*4E7/360./(nx-1)*cos(0.5*(rlatmax+rlatmin)*!pi/180.) - sy=(rlatmax-rlatmin)*4E7/360./(ny-1) - dx=sx/1000. - dy=sy/1000. - nxzmin=0L - nyzmin=0L - nxzmax=nx/2-1 - nyzmax=ny/2-1 - rangex=[0,dx*FLOAT(nxzmax-1)] - rangey=[0,dy*FLOAT(nyzmax-1)] - IF widgetaction THEN WIDGET_CONTROL, Wdraw, SENSITIVE=1 - datastatus(2)=1 - ENDELSE - END - - 4:BEGIN ; reads a gshhs v2.0 coastline file - ; (cf. www.ngdc.noaa.gov/mgg/shorelines/gshhs.html) - tempoPoly=LONARR(600000,10) - tempoPoint=FLTARR(20000000,2) - ID=0L ;identity number of polygon - NP=0L ; number of points in polygon - LEV=0L ; level (1 land, 2 lake, 3 island in lake ...) - LEVMORE=BYTARR(4) - MW=0L - ME=0L - MS=0L - MN=0L - AREA=0L - FLAG=0L - AREA_FULL=0L - CONTAINER=0L - ANCESTOR=0L - X=0L - y=0L - tempoPoly(0,0)=0 ;pointer to tempoPoint - ; the points of polygon I are stored in - ;tempoPoint(tempoPoly(I,0):tempoPoly(I+1,0)-1) - IC=0L - ; PRINT,'Rlonmax:',rlonmin,rlonmax,rlatmin,rlatmax - marginx=0. - marginy=(rlatmax-rlatmin)*0.2 - rlonminn=rlonmin - IF ((rlonmax-rlonmin) LT 60) THEN BEGIN - marginx=(rlonmax-rlonmin)*0.2 - rlonminn=rlonmin-6.*marginx - ENDIF - xc=(rlonmax+rlonmin)/2. - yc=(rlatmax+rlatmin)/2. - - Outreduced=0 - Outdump=0 - - IF (outdump EQ 1) THEN BEGIN - GET_LUN,unit2 - OPENW,unit2,'GSHHS_v2_fullres_xy_nolakes.txt' - depthcote=-10. - ENDIF - - WHILE NOT EOF(unit) DO BEGIN - READU,unit,ID,NP,LEVMORE,MW,ME,MS,MN,AREA,AREA_FULL,CONTAINER,ANCESTOR ;reads the polygon header - LEV=LONG(LEVMORE(0)) - ;IF (ID LE 100) THEN PRINT,'Np and bounds:',ID,NP,'##',LEV,'##',MW,ME,MS,MN - VECTOR=LONARR(NP*2) - READU,unit,VECTOR - VECTOR=TRANSPOSE(REFORM(VECTOR,2,NP)) - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - tempoPoly(IC,1)=ID - tempoPoly(IC,3)=LEV - tempoPoly(IC,4)=MW - tempoPoly(IC,5)=ME - tempoPoly(IC,6)=MS - tempoPoly(IC,7)=MN - tempoPoly(IC,8)=AREA - tempoPoly(IC,9)=FLAG - -; -; Corrects for West indies shift ... -; - IF (MW GT 298400000 AND ME LT 299400000 AND MS GT 14200000 AND MN LT 15800000) THEN BEGIN - VECTOR(*,0) = VECTOR(*,0) + (0.0055*1E6) - VECTOR(*,1) = VECTOR(*,1) + (0.0033*1E6) - ENDIF - IF (MW GT 298000000 AND ME LT 299400000 AND MS GT 15730000 AND MN LT 16600000) THEN BEGIN - VECTOR(*,0) = VECTOR(*,0) - (0.004*1E6) - VECTOR(*,1) = VECTOR(*,1) - (0.0035*1E6) - ENDIF - ; Dump ASCII file with polygons - IF (outdump EQ 1) THEN BEGIN - IF (LEV EQ 1L) THEN BEGIN - PRINTF,unit2,FORMAT='(2I10)',ID,NP - FOR I=0L,NP-1 DO BEGIN - PRINTF,unit2,FORMAT='(2F11.6)',((FLOAT(VECTOR(I,0))*1.E-6+180.) MOD 360)-180,FLOAT(vectOR(I,1))*1.E-6 ;,depthcote - ENDFOR - ENDIF - ENDIF - - IF (outreduced EQ 1) THEN BEGIN - kountk=0L - X=LONARR(NP) - Y=X - X(*)=VECTOR(*,0) - Y(*)=VECTOR(*,1) - IF (MAPLONLAT LT 2) THEN $ - Keep=WHERE(((((FLOAT(X)*1.E-6+180.) MOD 360.) $ - -rlonmax-marginx-180) LE 0.) AND $ - ((((FLOAT(X)*1.E-6+180.) MOD 360.) $ - -rlonmin+marginx-180) GE 0.) AND $ - ((FLOAT(Y)*1.E-6 $ - -rlatmax-marginy) LE 0.) AND $ - ((FLOAT(Y)*1.E-6 $ - -rlatmin+marginy) GE 0.),kountk) $ - ELSE BEGIN - Keep=X*0+1 - kountk=NP - ENDELSE - - NPO=NP-kountk - NP=kountk - IF kountk GT 0 THEN BEGIN -print,'IC:',kountk - tempoPoint(tempoPoly(IC,0):tempoPoly(IC,0)+NP-1,0:1)=VECTOR(Keep,*) - IP1=KEEP(0) - IP2=KEEP(kountk-1) - x2=((VECTOR(IP2,0)*1.E-6+180.) MOD 360.)-180. - y2=VECTOR(IP2,1)*1.E-6 - x1=((VECTOR(IP1,0)*1.E-6+180.) MOD 360.)-180. - y1=VECTOR(IP1,1)*1.E-6 - PRINT,'IC: ',IC,ID,NP,kountk,NPO,NPO+NP,IP1,IP2,x1,x2,y1,y2,xc,yc - - IF (NPO GT 0) THEN BEGIN - IF (ABS(x2-x1) GT ABS(rlonmax-rlonmin)) $ - OR ABS(y2-y1) GT ABS(rlatmax-rlatmin) THEN BEGIN - a=(y1-y2)/(y2*x1-x2*y1) - b=(x2-x1)/(y2*x1-x2*y1) - c=1 - - IF (X2-X1)*(y2-y1) LT 0 THEN BEGIN - IF (a*xc+b*yc+c)*(a*rlonmax+b*rlatmax+c) GT 0 THEN BEGIN - ;tempoPoint(tempoPoly(IC,0)+NP,0)=FLOAT(rlonmax+marginx+360.)*1.E6 - ;tempoPoint(tempoPoly(IC,0)+NP,1)=FLOAT(rlatmax+marginy)*1.E6 - PRINT,'Adding point in polygon (1,1)...' - ENDIF ELSE BEGIN - ;tempoPoint(tempoPoly(IC,0)+NP,0)=FLOAT(rlonmin-marginx+360.)*1.E6 - ;tempoPoint(tempoPoly(IC,0)+NP,1)=FLOAT(rlatmin-marginy)*1.E6 - PRINT,'Adding point in polygon (-1,-1)...' - ENDELSE - ENDIF ELSE BEGIN - IF (a*xc+b*yc+c)*(a*rlonmax+b*rlatmin+c) GT 0 THEN BEGIN - tempoPoint(tempoPoly(IC,0)+NP,0)=FLOAT(rlonmin-marginx+360.)*1.E6 - tempoPoint(tempoPoly(IC,0)+NP,1)=FLOAT(rlatmax+marginy)*1.E6 - PRINT,'Adding point in polygon (-1,1)...' - ENDIF ELSE BEGIN - tempoPoint(tempoPoly(IC,0)+NP,0)=FLOAT(rlonmax+marginx+360.)*1.E6 - tempoPoint(tempoPoly(IC,0)+NP,1)=FLOAT(rlatmin-marginy)*1.E6 - PRINT,'Adding point in polygon (1,-1)...' - ENDELSE - ENDELSE - NP=NP+1 - ENDIF - ENDIF - tempoPoly(IC,2)=NP - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - IC=IC+1 - ENDIF - ENDIF ELSE BEGIN - IF (FLOAT(MS)*1.E-6 LT -80. AND MAPLONLAT LE 1) THEN BEGIN - NP=NP+1 - print,'Antarctica:',vectOR(0:1,0) - tempo=vectOR - VECTOR=LONARR(NP,2) - vectOR(0,0)=FIX(rlonmax)*1000000 - vectOR(0,1)=FIX(-90)*1000000 - vectOR(NP-1,0)=FIX(rlonminn)*1000000 - vectOR(NP-1,1)=FIX(-90)*1000000 - - VECTOR(1:NP-2,0:1)=tempo(0:np-3,0:1) - ENDIF - X=FLTARR(NP) - X(*)=FLOAT(VECTOR(*,0)*1.E-6 - rlonminn) - index=WHERE(X EQ 360.,kount) - X(*)=(X MOD 360.) - - IF kount GT 0 THEN X(index)=360. - Index1=WHERE(X LT 0,kount1) - IF kount1 GT 0 THEN X(Index1)=X(Index1)+360. - - ; Looks for wrap around - XP1=SHIFT(X,-1) - Indexch=WHERE(ABS(X-XP1) GT 350.,kountch) - IF ((rlonmax-rlonmin) GT 60) AND (kountch GT 2) AND (MAPLONLAT NE 2) THEN BEGIN - ;PRINT,'Flip:',IC,kountch,Indexch,X(Indexch),XP1(Indexch) - NP2=Indexch(0)+1+NP-1-Indexch(kountch-1) - FOR Iwrap=1,kountch-2,2 DO BEGIN - NP2=NP2+Indexch(Iwrap+1)-Indexch(Iwrap) - ENDFOR - NP3=NP-NP2 - VECTR=FLTARR(NP2,2) - VECTR3=FLTARR(NP3,2) - VECTR(0:Indexch(0),0)=X(0:Indexch(0))-marginx - VECTR(0:Indexch(0),1)=FLOAT(VECTOR(0:Indexch(0),1))*1.E-6-rlatmin - Ip2=Indexch(0)+1 - Iwrap=0 - Ip3=0 - FOR Iwrap=1,kountch-1,2 DO BEGIN - IF (Iwrap LT kountch-1) then BEGIN - VECTR(Ip2:Ip2+Indexch(Iwrap+1)-Indexch(Iwrap)-1,0) $ - =X(Indexch(Iwrap)+1:Indexch(Iwrap+1))-marginx - VECTR(Ip2:Ip2+Indexch(Iwrap+1)-Indexch(Iwrap)-1,1) $ - =FLOAT(VECTOR(Indexch(Iwrap)+1:Indexch(Iwrap+1),1))*1.E-6-rlatmin - Ip2=Ip2+Indexch(Iwrap+1)-Indexch(Iwrap) - ENDIF - VECTR3(Ip3:Ip3+Indexch(Iwrap)-Indexch(Iwrap-1)-1,0) $ - =X(Indexch(Iwrap-1)+1:Indexch(Iwrap))-marginx - VECTR3(Ip3:Ip3+Indexch(Iwrap)-Indexch(Iwrap-1)-1,1) $ - =FLOAT(VECTOR(Indexch(Iwrap-1)+1:Indexch(Iwrap),1))*1.E-6-rlatmin - Ip3=Ip3+Indexch(Iwrap)-Indexch(Iwrap-1) - ENDFOR - VECTR(Ip2:NP2-1,0)=X(Indexch(kountch-1)+1:NP-1)-marginx - VECTR(ip2:NP2-1,1)=FLOAT(VECTOR(Indexch(kountch-1)+1:NP-1,1))*1.E-6-rlatmin - NPold=NP - NP=NP2 - - IF (IP3 GT 3) THEN BEGIN - tempoPoint(tempoPoly(IC,0):tempoPoly(IC,0)+NP-1,0:1)=VECTR(*,*) - tempoPoly(IC,2)=NP - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - - IC=IC+1 - NP=NP3 - VECTR=VECTR3 - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - tempoPoly(IC,1)=ID - tempoPoly(IC,3)=LEV - tempoPoly(IC,4)=MW - tempoPoly(IC,5)=ME - tempoPoly(IC,6)=MS - tempoPoly(IC,7)=MN - tempoPoly(IC,8)=AREA - tempoPoly(IC,9)=FLAG - ENDIF - - ENDIF ELSE BEGIN - VECTR=FLTARR(NP,2) - VECTR(*,0)=X(*)-6.*marginx - VECTR(*,1)=FLOAT(VECTOR(*,1))*1.E-6 - IF (MAPLONLAT LT 2) THEN VECTR(*,1)=VECTR(*,1)-rlatmin - ENDELSE - tempoPoint(tempoPoly(IC,0):tempoPoly(IC,0)+NP-1,0:1)=VECTR(*,*) - tempoPoly(IC,2)=NP - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - IC=IC+1 - ENDELSE - - ENDWHILE - IF (outdump EQ 1) THEN BEGIN - CLOSE,unit2 - FREE_LUN,unit2 - ENDIF - Npoly=IC - GSHHSPoly=tempoPoly(0:Npoly,*) - PRINT,'Number of relevant polygons:',IC,GSHHSPoly(Npoly),SIZE(tempoPoint) - PRINT,'Bounds of poly 1:',tempoPoly(0,4:7)*1E-6 - - - GSHHSPoint=tempoPoint(0:GSHHSPoly(Npoly)-1,*) - -;************************************************ -; Outputs a reduced version of the original file - IF (outreduced EQ 1) THEN BEGIN - GET_LUN,unit2 - OPENW,unit2,'gshhs_cal.b' - FOR I=0L,Npoly-1 DO BEGIN - WRITEU,unit2,GSHHSPoly(I,1:9) - NP=GSHHSPoly(I,2) - AR=LONARR(NP,2) - AR(*,*)=GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,*) - WRITEU,unit2,REFORM(TRANSPOSE(AR),NP*2) - ENDFOR - CLOSE,unit2 - FREE_LUN,unit2 - ENDIF -;************************************************ - ; COnverts to kilometers - tempo=GSHHSPOINT - GSHHSPoint=FLTARR(GSHHSPoly(Npoly),2) - IF (MAPLONLAT EQ 1) THEN BEGIN - GSHHSPoint(*,0)=(nx-1)*dx*tempo(*,0)/ABS(rlonmax-rlonmin) - GSHHSPoint(*,1)=(ny-1)*dy*tempo(*,1)/ABS(rlatmax-rlatmin) - ENDIF - IF (MAPLONLAT EQ 2) THEN BEGIN - FOR I=0L,GSHHSPoly(Npoly)-1 DO BEGIN - mapll,xx,yy,tempo(I,1),tempo(I,0),1 - GSHHSPoint(I,0)=xx+XPOLE - GSHHSPoint(I,1)=yy+YPOLE - ENDFOR - ENDIF - END - - - ; reads france.line format - - 5:BEGIN - tempoPoly=LONARR(10000,10) - tempoPoint=FLTARR(2000000,2) - ID=0L ;identity number of polygon - NP=0L ; number of points in polygon - - line=' ' - Outdump=0 - IF (outdump EQ 1) THEN BEGIN - GET_LUN,unit2 - OPENW,unit2,'france_more.line' - ENDIF - READF,unit,line - IF (outdump EQ 1) THEN PRINTF,unit2,line - READF,unit,line - IF (outdump EQ 1) THEN PRINTF,unit2,line - IC=0L - ICORIGIN=0L - ICALL=0L - ALLMULTIPLES=0L - ALLP=0L - WHILE NOT EOF(unit) DO BEGIN - ICALL=ICALL+1L - READF,unit,NP,ICORIGIN - VECTOR=FLTARR(NP,2) - MULTIPLES=0L - FOR I=0L,NP-1 DO BEGIN - READF,unit,LON,LAT - VECTOR(I-MULTIPLES,0)=LON - VECTOR(I-MULTIPLES,1)=LAT - IF (I GT 0) THEN $ - IF (VECTOR(I,0) EQ VECTOR(I-1,0) AND VECTOR(I,1) EQ VECTOR(I-1,1)) $ - THEN MULTIPLES=MULTIPLES+1 - ENDFOR - NP=NP-MULTIPLES - IF (outdump EQ 1) THEN PRINTF,unit2,FORMAT='(2I10)',NP,ICORIGIN - IF (outdump EQ 1) THEN BEGIN - IF (ICALL EQ 2) THEN BEGIN - FOR I=NP-1,0L,-1 DO BEGIN - PRINTF,unit2,FORMAT='(2F13.8)',VECTOR(I,0:1) ;,depthcote - ENDFOR - ENDIF ELSE BEGIN - FOR I=0L,NP-1 DO BEGIN - PRINTF,unit2,FORMAT='(2F13.8)',VECTOR(I,0:1) ;,depthcote - ENDFOR - ENDELSE - ENDIF - ALLP=ALLP+NP - ALLMULTIPLES=ALLMULTIPLES+MULTIPLES - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - tempoPoly(IC,1)=ID - tempoPoly(IC,3)=1 - MW=MIN(VECTOR(*,0)) - ME=MAX(VECTOR(*,0)) - MS=MIN(VECTOR(*,1)) - MN=MAX(VECTOR(*,1)) - tempoPoly(IC,4)=ROUND(1E6*MW) - tempoPoly(IC,5)=ROUND(1E6*ME) - tempoPoly(IC,6)=ROUND(1E6*MS) - tempoPoly(IC,7)=ROUND(1E6*MN) - tempoPoly(IC,8)=0 - tempoPoly(IC,9)=0 - IF (ME GT rlonmin and MW LT rlonmax AND MN GT rlatmin and MS LT rlatmax) THEN BEGIN -; -; Only keeps polygons that are in the area -; - tempoPoint(tempoPoly(IC,0):tempoPoly(IC,0)+NP-1,0:1)=VECTOR(0:NP-1,*) - tempoPoly(IC,2)=NP - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - IC=IC+1 - ENDIF - ENDWHILE - IF (outdump EQ 1) THEN BEGIN - CLOSE,unit2 - FREE_LUN,unit2 - ENDIF - - Npoly=IC - GSHHSPoly2=tempoPoly(0:Npoly,*) - PRINT,'Number of relevant polygons:',IC,GSHHSPoly2(Npoly) - PRINT,'Number of points and multiples:',ALLP, MULTIPLES - - GSHHSPoint2=tempoPoint(0:GSHHSPoly2(Npoly)-1,*) - - tempo=GSHHSPOINT2 - GSHHSPoint2=FLTARR(GSHHSPoly2(Npoly),2) - GSHHSPoint2(*,0)=(nx-1)*dx*(tempo(*,0)-rlonmin)/ABS(rlonmax-rlonmin) - GSHHSPoint2(*,1)=(ny-1)*dy*(tempo(*,1)-rlatmin)/ABS(rlatmax-rlatmin) - ;print,min(GSHHSPoint2(*,0)),max(GSHHSPoint2(*,0)),min(GSHHSPoint2(*,1)),max(GSHHSPoint2(*,1)) - GSHHSPoint=GSHHSPoint2 - GSHHSPoly=GSHHSPoly2 - END - -; -; Reading mesh with GMSH format -; - 6 :BEGIN - line=' ' - name=line - WHILE NOT EOF(unit) DO BEGIN - READF,unit,line - linec=STRCOMPRESS(line) - itri=0L - CASE STRMID(linec,0,6) OF - '$File ':BEGIN - I=0 - READS,STRMID(line,6,2),I - READS,STRMID(line,8,80),name - filenames(I)=STRCOMPRESS(name,/REMOVE_ALL) - IF !VERSION.OS_FAMILY EQ 'Windows' THEN $ - spos=STRPOS(filenames(I),'\') $ - ELSE spos=STRPOS(filenames(I),'/') - PATHS(I) =STRMID(filenames(I),0,spos+1) - filenopath=STRMID(filenames(I),spos+1, STRLEN(filenames(I))-spos-1) - filenames(I)=filenopath - ReadDataFile,filenames(I),I,1 - END - '$MeshF':BEGIN - READF,unit,line - READF,unit,line - END - '$Nodes':BEGIN - nngp=0L - READF,unit,nngp - IF subwin(0) AND N_ELEMENTS(WG) > 0 THEN $ - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - gridmat=DBLARR(8,nngp) - Ind=0 - lon=0.0d - lat=0.0d - z=0.0 - FOR I=0L,nngp-1 DO BEGIN - READF,unit,Ind,lon,lat,z -; -; Converts decimal degrees to degree , minute and X, Y -; - latdeg=FLOOR(lat) - IF latdeg LT 0 THEN latdeg=latdeg+1 - londeg=FLOOR(lon) - IF londeg LT 0 THEN londeg=londeg+1 - latmin=(lat-latdeg)*60. - lonmin=(lon-londeg)*60. - gridmat(2,I)=latdeg - gridmat(3,I)=latmin - gridmat(4,I)=londeg - gridmat(5,I)=lonmin - gridmat(7,I)=z - ENDFOR - lonmin=MIN(gridmat(4,*)+gridmat(5,*)/60.) - lonmax=MAX(gridmat(4,*)+gridmat(5,*)/60.) - latmin=MIN(gridmat(2,*)+gridmat(3,*)/60.) - latmax=MAX(gridmat(2,*)+gridmat(3,*)/60.) - - UPDATE_COORDINATES,lonmin,lonmax,latmin,latmax,widgetaction - FOR I=0L,nngp-1 DO BEGIN - LatLontoXY,gridmat(2,I),gridmat(3,I),gridmat(4,I),gridmat(5,I),x,y - gridmat(0,I)=x - gridmat(1,I)=y - ENDFOR - IF subwin(0) THEN Displaygrid - READF,unit,line - datastatus(5)=1 - IF N_ELEMENTS(nspecgp) EQ 0 THEN nspecgp=0 - END - '$Eleme':BEGIN - nel=0L - READF,unit,nel - TRIGP0=LONARR(nel+1,4) - CONTOURTEMP=LONARR(NNGP,2) - open_boundary=INTARR(NNGP) - icont=0L - itri=0L - eltype=0 - Ind=0L - Inode=0L - island=0 - ntag=0 - trinodes=LONARR(3) - FOR I=0L,nel-1 DO BEGIN - line=' ' - READF,unit,line - READS,line,Ind,eltype,ntag - IF (I EQ 0) THEN BEGIN - ENDIF - ;IF (I EQ 0) THEN STOP - IF (ntag GT 0) THEN tags=LONARR(ntag) - CASE eltype OF - 15:BEGIN - READS,line,Ind,eltype,ntag,tags,Inode - open_boundary(Inode-1)=ROUND(tags(0)) - IF tags(1) EQ 0 THEN BEGIN - gridmat(6,Inode-1)=1 - ENDIF ELSE BEGIN - gridmat(6,Inode-1)=-1 - island=tags(1) - ENDELSE - CONTOURTEMP(icont,0)=Inode-1 - CONTOURTEMP(icont,1)=gridmat(6,Inode-1) - icont=icont+1L - END -; -; Reads triangle element -; - 2:BEGIN - IF (ntag GT 2) THEN BEGIN - READS,line,Ind,eltype,ntag,tags,trinodes - TRIGP0(ITRI+1,0)=tags(2) - IF tags(2) GT 5 THEN TRIGP0(ITRI+1,0)=5 - ENDIF ELSE BEGIN - READS,line,Ind,eltype,ntag,tags,trinodes - ENDELSE - TRIGP0(ITRI+1,1)=trinodes(0) - TRIGP0(ITRI+1,2)=trinodes(1) - TRIGP0(ITRI+1,3)=trinodes(2) - ITRI=ITRI+1 - END -; - 1:BEGIN - END - ENDCASE - ENDFOR - READF,unit,line -; -; Cleans up contour -; - PRINT,'Number of contour nodes:',icont - IF (icont GT 0) THEN BEGIN - CONTOURLINE=LONARR(icont+2,2) - CONTOURLINE(2:2+icont-1,*)=CONTOURTEMP(0:icont-1,*) - CONTOURLINE(0,0)=2 - CONTOURLINE(1,0)=2+icont-1 - ENDIF -; - ntri=itri - AREATRI=FLTARR(ntri+1,2) - IF (ntri GT 0) THEN BEGIN - TRIGP=LONARR(ntri+1,4) - TRIGP(0:ntri,*)=TRIGP0(0:ntri,*) - FOR I=1L,ntri DO BEGIN - FOR J=0,2 DO BEGIN - I1=TRIGP(I,J+1)-1 - I2=TRIGP(I,((J+1) MOD 3)+1)-1 - I3=TRIGP(I,((J+2) MOD 3)+1)-1 - IF ((I1 NE -1) AND (I2 NE -1) AND (I3 NE -1)) THEN BEGIN - DDX=ABS(gridmat(0,I1)-gridmat(0,I2)) - DDY=ABS(gridmat(1,I1)-gridmat(1,I2)) - SIDEL=SQRT(DDX^2+DDY^2) - IF J EQ 0 THEN BEGIN - AREATRI(I,0)=SIDEL - ENDIF ELSE BEGIN - IF AREATRI(I,0) GT SIDEL THEN AREATRI(I,0)=SIDEL - ENDELSE - ;IF (I MOD 2000) EQ 0 THEN PRINT,'SIDEL:',I,J,I1,I2,I3,AREATRI(I),DDX,DDY,SIDEL - ENDIF - ENDFOR - ENDFOR - MEDTRI=MEDIAN(AREATRI(*,0)) - PRINT,'Number of triangles and median size:',ntri,MEDTRI - PRINT,'Minimum size:', MIN(AREATRI(*,0)) - ;MEDTRI=MEAN(AREATRI(*,0)) - IKOUNT=WHERE(AREATRI(*,0) LT 0.01*MEDTRI,KOUNT) - IF (KOUNT GT 0L) THEN BEGIN - FOR I=0L,KOUNT-1L DO BEGIN - IF (IKOUNT(I) LT NTRI AND IKOUNT(I) GT 0) THEN $ - PRINT,'WARNING SMALL TRIANGLE SIDE:',IKOUNT(I),AREATRI(IKOUNT(I),0),TRANSPOSE(TRIGP(IKOUNT(I),1:3)) $ - ELSE $ - PRINT, 'NO SMALL TRIANGLES:',IKOUNT(I),NTRI - ENDFOR - ENDIF - ENDIF - END - ENDCASE - ENDWHILE - datastatus(6)=1 - IF subwin(0) GT 0 THEN BEGIN - WIDGET_CONTROL,WG(0,3),SET_VALUE=STRCOMPRESS(STRING(nngp)) - WIDGET_CONTROL,WGrideditor(1),TABLE_YSIZE=nngp+1 - ENDIF - ntri=itri - END ; end of GMSH file read -; -;reads grid file with special points (mostly for display purposes) -; - 7:BEGIN - nngptmp=0 ;number of grid points - READF,unit,nngptmp - x=0. - y=0. - ITOTO=1 - IF (nngptmp GT 0) THEN BEGIN - nngp=nngptmp - gridmat=FLTARR(8,nngptmp) - MAKE_CONTOUR - FOR I=1,nngp DO BEGIN - READF,unit,Itoto,x,y,latdeg,latmin,londeg,lonmin - if (londeg LT lonmin) THEN londeg=londeg+360 - LatLontoXY,latdeg,latmin,londeg,lonmin,x,y - gridmat(0,I-1)=x - gridmat(1,I-1)=y - gridmat(2,I-1)=latdeg - gridmat(3,I-1)=latmin - gridmat(4,I-1)=londeg - gridmat(5,I-1)=lonmin - ENDFOR - subwin(0)=0 - IF subwin(0) THEN Displaygrid - ENDIF - - ;reads info about special points (modified 10/7/99) - nspecgp=0 - name=' ' - IF NOT EOF(unit) THEN BEGIN - READF,unit,nspecgp - IF (nspecgp GT 0) THEN BEGIN - specmat=FLTARR(13,nspecgp) - specname=STRARR(nspecgp) - vecteur=FLTARR(13) - FOR I=0,(nspecgp-1) DO BEGIN - READF,unit,vecteur,name - latdeg=vecteur(3) - latmin=vecteur(4) - londeg=vecteur(5) - lonmin=vecteur(6) - if (londeg LT lonmin) THEN londeg=londeg+360 - LatLontoXY,latdeg,latmin,londeg,lonmin,x,y - vecteur(1)=x - vecteur(2)=y - - specmat(0:12,I)=(vecteur) - specname(I)=STRCOMPRESS(name) -print,'HEY:',I,x,y,specname(I) - ENDFOR - ENDIF - ENDIF - END -; -; reads transect files -; - 8:BEGIN - Ntrans=0 ;number of points in transect - NtransGP=0 - transsym=0 - transsymsize=0. - transline=0 - transthick=0 - READF,unit,Ntrans,NtransGP,transsym,transsymsize,transline,transthick - Strans=FLTARR(Ntrans) - Xtrans=FLTARR(Ntrans) - Ytrans=FLTARR(Ntrans) - Ztrans=FLTARR(Ntrans) - Itrans=INTARR(Ntrans,3) - COtrans=FLTARR(Ntrans,3) - s=0. - x=0. - y=0. - z=0. - i1=0 - i2=0 - i3=0 - co1=0. - co2=0. - co3=0. - FOR I=0,Ntrans-1 DO BEGIN - READF,unit,s,x,y,z,i1,i2,i3,co1,co2,co3 - Strans(I)=s - Xtrans(I)=x - Ytrans(I)=y - Ztrans(I)=z - Itrans(I,0)=i1 - Itrans(I,1)=i2 - Itrans(I,2)=i3 - COtrans(I,0)=co1 - COtrans(I,1)=co2 - COtrans(I,2)=co3 - ENDFOR - Ispectrans=INTARR(Ntransgp) - spectransname=STRARR(Ntransgp) - gridtmat=FLTARR(7,Ntransgp) - vecteur=FLTARR(7) - i1=0 - name=' ' - FOR I=0,Ntransgp-1 DO BEGIN - READF,unit,i1,vecteur,name - Ispectrans(I)=i1 - gridtmat(*,I)=vecteur - spectransname(I)=name - ENDFOR - TransOK=1 - END -; -; reads data time series output -; - 10:BEGIN - - read_timeseries,obs,ncidtest,UNIT,I - - WIDGET_CONTROL,Wright(12,2),SET_SLIDER_MAX=I - WIDGET_CONTROL,Wright(12,4),SET_SLIDER_MAX=I,SET_VALUE=I - tindex2=I - IF widgetaction THEN BEGIN - findex=1 - findex2=obs.nfband - WIDGET_CONTROL,Wright(12,0),SET_SLIDER_MAX=obs.nfband - WIDGET_CONTROL,Wright(12,5),SET_SLIDER_MAX=obs.nfband, $ - SET_VALUE=obs.nfband - WIDGET_CONTROL,Wright(12,2),SET_SLIDER_MAX=I - WIDGET_CONTROL,Wright(12,4),SET_SLIDER_MAX=I,SET_VALUE=I - ENDIF - findex=1 - findex2=obs.nfband - flags=INTARR(I)+1 - obs.flags=ptr_new(flags) - IF widgetaction THEN BEGIN - WIDGET_CONTROL,Wright(12,0),SET_SLIDER_MAX=obs.nfband - WIDGET_CONTROL,Wright(12,5),SET_SLIDER_MAX=obs.nfband,SET_VALUE=obs.nfband - findex=1 - findex2=obs.nfband - WIDGET_CONTROL,Wright(12,2),SET_SLIDER_MAX=I - WIDGET_CONTROL,Wright(12,4),SET_SLIDER_MAX=I,SET_VALUE=I - tindex=1L - tindex2=I - ENDIF - END -; -; reads model time series output -; - 11:BEGIN - - read_timeseries,modspec,ncidtest,UNIT,I - - WIDGET_CONTROL,Wright(12,2),SET_SLIDER_MAX=I - WIDGET_CONTROL,Wright(12,4),SET_SLIDER_MAX=I,SET_VALUE=I - tindex2=I - IF widgetaction THEN BEGIN - WIDGET_CONTROL,Wright(12,0),SET_SLIDER_MAX=modspec.nfband - WIDGET_CONTROL,Wright(12,5),SET_SLIDER_MAX=modspec.nfband, $ - SET_VALUE=modspec.nfband - WIDGET_CONTROL,Wright(12,2),SET_SLIDER_MAX=I - WIDGET_CONTROL,Wright(12,4),SET_SLIDER_MAX=I,SET_VALUE=I - ENDIF - findex=1 - findex2=modspec.nfband - print,'findex ...:',findex,findex2 - print,'tindex2:',tindex2,modspec.ntime - paths(filetype+1)=paths(filetype) - paths(filetype+4)=paths(filetype) - pathmod=STRARR(1) - filemod=STRARR(1) - pathmod(0)=paths(filetype) - filemod(0)=filename - modspec.path=ptr_new(pathmod) - modspec.filename=ptr_new(filemod) - print,'SIZE 2:',SIZE(*modspec.data) - END -; -; reads model time series output (new run) -; this assumes the same time step ... -; - 12:IF (N_ELEMENTS(modspec) NE 0) THEN BEGIN - nrun=modspec.nrun - olddata=(*modspec.data) - oldpath=(*modspec.path) - oldfile=(*modspec.filename) - - oldmod = modspec - typ=0 - n1=0 - n2=0 - n3=0 - data=FLTARR(nrun+1,oldmod.np,oldmod.nvar,oldmod.nfband, $ - oldmod.nabin,oldmod.ntime) - - read_timeseries,modspec,ncidtest,UNIT,I - - time1=(*oldmod.dates)[0].jday - time2=(*oldmod.dates)[oldmod.ntime-1].jday - timeold=(*oldmod.dates).jday - timenew=(*modspec.dates).jday - IND=WHERE(timenew GE time1 AND timenew LE time2,kount) - IND2=WHERE(timeold GE timenew(0) ,kount2) - - IF (kount GT 0) THEN BEGIN - data0=(*modspec.data) - I1=IND(0) - data(nrun,*,*,*,*,IND2(0):IND2(0)+kount-1)=data0(0,*,*,*,*,IND) - ENDIF - data(0:nrun-1,*,*,*,*,*)=olddata - modspec=oldmod - modspec.nrun=nrun+1 - - PTR_FREE,modspec.data - modspec.data=ptr_new(data) - data=(*modspec.data) - - - pathmod=STRARR(nrun+1) - filemod=STRARR(nrun+1) - pathmod(0:nrun-1)=oldpath - filemod(0:nrun-1)=oldfile - pathmod(nrun)=paths(filetype) - filemod(nrun)=filename - - print,'Additional model run, assumed same time step, variables, points.' - print,'Number of model runs:',nrun - modspec.path=ptr_new(pathmod) - modspec.filename=ptr_new(filemod) - ENDIF - - - 13:BEGIN - END - - 14:BEGIN ; reads model time series output: new point - oldpath=(*modspec.path) - oldfile=(*modspec.filename) - taille=size(oldpath) - nrun=taille(1) - print,'SIZE:',taille,'##',oldpath+filename - paths(11)=oldpath(0) - ReadDataFile,filename,11,1 - print,'HEY:',0,'##',oldpath(0),filename - FOR irun=1,nrun-1 DO BEGIN - paths(12)=oldpath(irun) - ii=STRSPLIT(filename,'.') - otherfile=oldfile(irun) - jj=STRSPLIT(otherfile,'.') - filename2=strmid(otherfile,jj(0),jj(1)-jj(0)) $ - +strmid(filename,ii(1),strlen(filename)-ii(1)) - print,'HEY:',irun,'##',oldpath(irun),filename2 - ReadDataFile,filename2,12,1 - END - END - - - 19:BEGIN ;data flags for model output and comparison with field data - IF N_ELEMENTS(modspec) NE 0 THEN BEGIN ; model time series output (file type 10) - IF (modspec.ntime NE 0) THEN BEGIN - Imax=modspec.ntime - flags=INTARR(Imax) - I=0 - y=0 - d=0 - h=0 - m=0 - min=0 - zone=0. - sec=0 - flag=1 - I2o=0 - over=0 - totflag=0 - WHILE NOT EOF(unit) AND (over EQ 0) DO BEGIN - READF,unit,y,m,d,h,minu,zone,flag - jday=JULDAY(m,d,y,h,minu,zone) - IF (jday GE (*modspec.dates)[0].jday) $ - AND (jday LE (*modspec.dates)[Imax-1].jday) THEN BEGIN - found=0 - I2=I2o - WHILE (NOT found) AND (I2 LT Imax) DO BEGIN - IF (ABS(((*modspec.dates)[I2].jday+(*modspec.dates)[I2].zone/24.0d) $ - -(jday+zone/24.0d)) LT 0.01) THEN BEGIN - flags(I2)=flag - I2o=I2 - found=1 - totflag=totflag+flag - ENDIF - I2=I2+1 - ENDWHILE - I=I+1 - ;print,y,m,d,h,min,zone,flag - ENDIF - IF (jday GT (*modspec.dates)[Imax-1].jday) THEN over = 0 - ENDWHILE - modspec.flags=ptr_new(flags) - print,'Number of good flags:',totflag - ENDIF - ENDIF - END - - - 17:BEGIN ;reads WW3 NC format - datastatus(20)=1 -; -; Stores old grid -; - IF (N_ELEMENTS(rlonmin) GT 0) THEN BEGIN - rlonminold=rlonmin - rlatminold=rlatmin - rlonmaxold=rlonmax - rlatmaxold=rlatmax - nxold=nx - nyold=ny - ENDIF ELSE BEGIN - rlonminold=0. - rlatminold=-90 - rlonmaxold=360 - rlatmaxold=90 - nxold=0 - nyold=0 - ENDELSE -; -; Gets size of arrays -; - ww3model=' ' - ncall=NCDF_INQUIRE(ncid) - nvars=ncall.NVARS - - dimtid=NCDF_DIMID(ncid,'time') - IF (dimtid GE 0 ) THEN NCDF_DIMINQ,ncid,dimtid,timename,ntime - timeid=NCDF_VARID(ncid,'time') - triid=NCDF_VARID(ncid,'tri') - MAPSTAid=NCDF_VARID(ncid,'MAPSTA') - dimxid=NCDF_DIMID(ncid,'x') - dimyid=NCDF_DIMID(ncid,'y') - IF (dimxid EQ -1) THEN BEGIN - dimxid=NCDF_DIMID(ncid,'longitude') - dimyid=NCDF_DIMID(ncid,'latitude') - END - IF (dimxid EQ -1) THEN BEGIN - dimxid=NCDF_DIMID(ncid,'lon') - dimyid=NCDF_DIMID(ncid,'lat') - END - IF (dimxid NE -1) THEN BEGIN - dimn=dimxid - NCDF_DIMINQ,ncid,dimxid,name1,size1 - NCDF_DIMINQ,ncid,dimxid,name0,size0 - lonid=NCDF_VARID(ncid,'longitude') - latid=NCDF_VARID(ncid,'latitude') - MAPLONLAT=1 -; -; Sets MAPLONLAT = 2 for curvilinear grids -; - ncvar=NCDF_VARINQ(ncid,lonid) - ndimvar=ncvar.NDIMS - IF (ndimvar EQ 2) THEN MAPLONLAT = 2 - - IF (lonid EQ -1) THEN BEGIN - MAPLONLAT=0 - lonid=NCDF_VARID(ncid,'x') - latid=NCDF_VARID(ncid,'y') - ENDIF - - ENDIF ELSE BEGIN -; -; Unstructured case: reads grid positions -; - dimn=NCDF_DIMID(ncid,'node') - dimel=NCDF_DIMID(ncid,'element') - lonid=NCDF_VARID(ncid,'longitude') - latid=NCDF_VARID(ncid,'latitude') - IF (lonid EQ -1) THEN lonid=NCDF_VARID(ncid,'lon') - IF (latid EQ -1) THEN latid=NCDF_VARID(ncid,'lat') - MAPLONLAT=1 - IF (lonid EQ -1) THEN BEGIN - MAPLONLAT=0 - lonid=NCDF_VARID(ncid,'x') - latid=NCDF_VARID(ncid,'y') - ENDIF - NCDF_VARGET,ncid,lonid,lon - NCDF_VARGET,ncid,latid,lat - NCDF_DIMINQ,ncid,dimn,name1,nngp - NCDF_DIMINQ,ncid,dimel,name1,ntri - print,'Number of nodes and triangles:',nngp,ntri - IF (N_ELEMENTS(nspecgp) EQ 0) THEN nspecgp=0 - rlonmin=MIN(lon) - rlatmin=MIN(lat) - rlonmax=MAX(lon) - rlatmax=MAX(lat) - newgrid=1 - dlon=rlonmax-rlonmin - dlat=rlatmax-rlatmin - ww3lon=lon - ww3lat=lat - IF ((ABS(rlonmaxold-rlonmax) GT dlon*0.001) OR (ABS(rlonminold-rlonmin) GT dlon*0.001) OR $ - (ABS(rlatmaxold-rlatmax) GT dlat*0.001) OR (ABS(rlatminold-rlatmin) GT dlat*0.001) ) $ - THEN newgrid=1 ELSE newgrid=0 - IF (N_ELEMENTS(nx) EQ 0 OR newgrid EQ 1) THEN BEGIN - nx=1601 - ny=1601 - datastatus(2)=1 - CASE MAPLONLAT OF - 0: BEGIN - dx=dlon*(1./((nx-1)*1000.)) - dy=dlat*(1./((ny-1)*1000.)) - END - 1: BEGIN - dx=dlon*(40000./((nx-1)*360.)) *cos(0.5*(rlatmin+rlatmax)*!dtor) - dy=dlat*(40000./((ny-1)*360.)) - END - 2: BEGIN - SLAT = 70. - RE = 6378.273 - E2 = .006693883 - PI = 3.141592654 - E = sqrt(E2) - la1=lat(0,0) - lo1=lon(0,0) - mapll,xmin,ymin,la1,lo1,1. - mapll,xmax,ymax,lat(nx-1,ny-1),lon(nx-1,ny-1),1. - dx=(xmax-xmin)*(1./((nx-1)*1000.)) - dy=(ymax-ymin)*(1./((ny-1)*1000.)) - XPOLE=-1.*xmin - YPOLE=-1.*ymin - END - ENDCASE - rangex=[0,dx*FLOAT(nx-1)] - rangey=[0,dy*FLOAT(ny-1)] - ENDIF - WIDGET_CONTROL, Wdraw,SENSITIVE=1 - Wdraw_value_update=1 - gridmat=DBLARR(8,nngp) - FOR I=0L,nngp-1 DO BEGIN - latdeg=FLOOR(lat(I)) - IF latdeg LT 0 THEN latdeg=latdeg+1 - londeg=FLOOR(lon(I)) - IF londeg LT 0 THEN londeg=londeg+1 - latmin=(lat(I)-latdeg)*60. - lonmin=(lon(I)-londeg)*60. - IF (MAPLONLAT EQ 1) THEN BEGIN - LatLontoXY,latdeg,latmin,londeg,lonmin,x,y - ENDIF ELSE BEGIN - x=lon(I)-rlonmin - y=lat(I)-rlatmin - ENDELSE - gridmat(0,I)=x - gridmat(1,I)=y - gridmat(2,I)=latdeg - gridmat(3,I)=latmin - gridmat(4,I)=londeg - gridmat(5,I)=lonmin - ENDFOR - triid=NCDF_VARID(ncid,'tri') - - NCDF_VARGET,ncid,triid,ww3tri - usetri=0 - IF (usetri EQ 1) THEN BEGIN - XGP=gridmat(0,*); - YGP=gridmat(1,*); - TRIANGULATE,XGP,YGP,tri1 - taille=size(tri1) - - ntri1=taille[2] - nngpold=nngp - nngptemp=nngpold+ntri1 - XGPnew=DBLARR(nngptemp) - YGPnew=DBLARR(nngptemp) - XGPnew(0:nngpold-1)=XGP - YGPnew(0:nngpold-1)=YGP - NFOUND=0L - FOR I=0L,ntri DO BEGIN - FOUND=0L - tr0=ww3tri(*,I) ; - tr0S=SORT(tr0) - tr0=tr0(tr0S)-1 - FOR J=0L,ntri1-1 DO BEGIN - tr1=tri1(*,J) ; - tr1S=SORT(tr1) - tr1=tr1(tr1S) - IF (tr0(0) EQ tr1(0) AND tr0(1) EQ tr1(1) AND tr0(2) EQ tr1(2)) THEN BEGIN - FOUND=J - NFOUND=NFOUND+1L - ;print,'FOUND I,J:',I,J,'##',NFOUND,ntri1-ntri,'##',tr0,'##',tr1 - BREAK - ENDIF - ENDFOR - IF (FOUND EQ 0L) THEN BEGIN - XGPnew(nngpold-1+NFOUND)=TOTAL(XGP(tr0))/3. - YGPnew(nngpold-1+NFOUND)=TOTAL(YGP(tr0))/3. - ENDIF - ENDFOR - nngp=nngpold+NFOUND - gridmatold=gridmat - gridmat=DBLARR(8,nngp) - gridmat(*,0:nngp-1)=gridmatold - FOR I=nngp,nngp+NFOUND-1 DO BEGIN - x=XGPnew(I) - y=YGPnew(I) - XYtoLATLON,x,y,latdeg,latmin,londeg,lonmin - gridmat(0,I)=x - gridmat(1,I)=y - gridmat(2,I)=latdeg - gridmat(3,I)=latmin - gridmat(4,I)=londeg - gridmat(5,I)=lonmin - ENDFOR - TRIANGULATE,XGPNew,YGPNew,ww3tri - ENDIF - taille=size(ww3tri) - ntri=taille[2] - TRIGP=LONARR(ntri+1,4) - datastatus(0)=1 - datastatus(6)=1 - TRIGP(1:ntri,1:3)=TRANSPOSE(ww3tri) - TRIGP(*,0)=5 - datastatus(5)=1 - ENDELSE - - ivar=3 - IF (triid NE -1) THEN ivar=4 - IF (MAPSTAid NE -1) THEN ivar=ivar+1 - IF (timeid EQ 3) THEN BEGIN - ivar=ivar+1 - freqid=NCDF_VARID(ncid,'f') - NCDF_VARGET,ncid,freqid,freq - nfband=N_ELEMENTS(freq) - WIDGET_CONTROL,Wright(12,0),SET_SLIDER_MAX=nfband - WIDGET_CONTROL,Wright(12,5),SET_SLIDER_MAX=nfband - FINDEX2=NFBAND-1 - ENDIF -; -; Gets date strings for first time step -; - IF (timeid GE 0 ) THEN NCDF_VARGET,ncid,timeid,timenow,COUNT=1,OFFSET=0 $ - ELSE timenow=0. - dayi=JULDAY(1,1,1990,0,0,0.) - TimetoDate,dayi,timenow*60*24,ww3date,ww3time -; -; Case of structured grids -; - IF (triid EQ -1) THEN BEGIN - NCDF_VARGET,ncid,lonid,ww3lon - NCDF_VARGET,ncid,latid,ww3lat - rlonmin=min(ww3lon) - rlonmax=max(ww3lon) - rlatmin=min(ww3lat) - rlatmax=max(ww3lat) -print,'HEYM:',MAPLONLAT - IF (MAPLONLAT EQ 0) THEN BEGIN - rlonmax=(rlonmax-rlonmin)*360./4E7 - rlonmin=0 - rlatmax=(rlatmax-rlatmin)*360./4E7 - rlatmin=0 - dlon=rlonmax/1000 - dlat=rlatmax/1000 - ENDIF - taille=size(ww3lon) - nx=taille(1) - taille=size(ww3lat) - ny=taille(1) - gridvarids=FLTARR(nvars) - igrids=0 - - varnamel=0 - igrids=0 - FOR I=0,nvars-1 DO BEGIN - ncvar=NCDF_VARINQ(ncid,I) - ndimvar=ncvar.NDIMS - FOR J=0,ndimvar-1 DO BEGIN - IF (ncvar.DIM(J) EQ dimxid AND ncvar.NDIMS GT 1 $ - AND ncvar.name NE 'MAPSTA' and ncvar.name NE 'longitude' $ - AND ncvar.name NE 'latitude' ) THEN BEGIN - gridvarids(igrids)=I - igrids=igrids+1 - IF (STRLEN(ncvar.name) GT varnamel) THEN varnamel=STRLEN(ncvar.name) - ENDIF - ENDFOR - ENDFOR - ncivar=gridvarids(0) - ncivar0=ncivar - ncvar=NCDF_VARINQ(ncid,ncivar) - ndimvar=ncvar.NDIMS -; - CASE ndimvar OF - 2: BEGIN - NCDF_VARGET,ncid,ivar,ww3m,COUNT=[nx,ny],OFFSET=[0,0] - END - 3: BEGIN - NCDF_VARGET,ncid,ivar,ww3m,COUNT=[nx,ny,1],OFFSET=[0,0,0] - END - 4: BEGIN - NCDF_VARGET,ncid,ivar,ww3m,COUNT=[nx,ny,1,1],OFFSET=[0,0,findex-1,0] - END - ELSE: print,'Problem with number of dimensions:',ndimvar - ENDCASE - - - - ENDIF ELSE BEGIN - - - gridvarids=FLTARR(nvars) - igrids=0 - - varnamel=0 - igrids=0 - FOR I=0,nvars-1 DO BEGIN - ncvar=NCDF_VARINQ(ncid,I) - ndimvar=ncvar.NDIMS - FOR J=0,ndimvar-1 DO BEGIN - IF (ncvar.DIM(J) EQ dimn AND ncvar.NDIMS GT 1 AND ncvar.name NE 'MAPSTA' ) THEN BEGIN - gridvarids(igrids)=I - igrids=igrids+1 - IF (STRLEN(ncvar.name) GT varnamel) THEN varnamel=STRLEN(ncvar.name) - ENDIF - ENDFOR - ENDFOR - ivar=gridvarids(0) - ncivar=gridvarids(0) - ncivar0=ncivar - ncvar=NCDF_VARINQ(ncid,ncivar) - ndimvar=ncvar.NDIMS -; - CASE ndimvar OF - 1: BEGIN - NCDF_VARGET,ncid,ivar,ww3m,COUNT=[nngp],OFFSET=[0] - END - 2: BEGIN - NCDF_VARGET,ncid,ivar,ww3m,COUNT=[nngp,1],OFFSET=[0,0] - END - 3: BEGIN - NCDF_VARGET,ncid,ivar,ww3m,COUNT=[nngp,1,1],OFFSET=[0,findex-1,0] - END - ELSE: print,'Problem with number of dimensions:',ndimvar - ENDCASE - - - ENDELSE - -; -; Defines all gridded variable names -; - names=STRARR(igrids) - FOR I=0,igrids-1 DO BEGIN - ivar=gridvarids(I) - ncvar=NCDF_VARINQ(ncid,ivar) - names(I)=ncvar.name - ENDFOR - print,'Variables in NetCDF file:' - print,TRANSPOSE(names) - - WIDGET_CONTROL,Wright(1,1),SET_VALUE=STRCOMPRESS(names) - - - newgrid=0 - dlon=rlonmax-rlonmin - dlat=rlatmax-rlatmin - IF (ABS(rlonmaxold-rlonmax) GT dlon*0.001 OR ABS(rlonminold-rlonmin) GT dlon*0.001 OR $ - ABS(rlatmaxold-rlatmax) GT dlat*0.001 OR ABS(rlatminold-rlatmin) GT dlat*0.001 OR $ - nxold NE nx OR nyold NE ny ) THEN newgrid=1 - - - - ivar=gridvarids(0) - var3=NCDF_VARINQ(ncid,ivar) - attOK=NCDF_ATTINQ(ncid,ivar,'scale_factor') - IF (attOK.Length GT 0) THEN NCDF_ATTGET,ncid,ivar,'scale_factor',ww3scale $ - ELSE ww3scale=1. - NCDF_ATTGET,ncid,ivar,'_FillValue',ww3miss - NCDF_ATTGET,ncid,ivar,'units',ww3unit - - - Index=WHERE(ww3m EQ ww3miss,kount) - ; ww3m=TRANSPOSE(ww3m) - - var3=NCDF_VARINQ(ncid,ncivar) - - IF STRPOS(var3.name,'fp') GT -1 THEN BEGIN - ww3m=1./(ww3m*ww3scale ) - var3.name='Tp' - ENDIF ELSE ww3m=ww3m*ww3scale - IF (kount GT 0) THEN ww3m(index)=-2.*maxval - - - IF (igrids GT 1) THEN BEGIN - IF (triid EQ -1) THEN $ - NCDF_VARGET,ncid,ivar+1,ww3m2,COUNT=[nx,ny,1],OFFSET=[0,0,0] $ - ELSE NCDF_VARGET,ncid,ivar+1,ww3m2,COUNT=[nngp,1],OFFSET=[0,0] - ww3m2=ww3m2*ww3scale - ww3dir=90.-ATAN(-ww3m2,-WW3M)/!dtor ; 90- transforms into trig direction - CASE var3.name OF - 'Fp2(k)': - 'mssx': BEGIN - WW3M=WW3M+WW3M2 - var3.name='mss' - END - 'utaw': BEGIN - WW3M=sqrt(ww3m^2+ww3M2^2) - var3.name='taw' - END - 'utwo': BEGIN - WW3M=sqrt(ww3m^2+ww3M2^2) - var3.name='two' - END - ELSE: WW3M=sqrt(ww3m^2+ww3M2^2) - ENDCASE - - IF (kount GT 0) THEN ww3dir(index)=-2.*maxval - ENDIF - - ww3fieldname = var3.name+' ('+STRING(ww3unit)+')' - PRINT,'Array:',ww3fieldname,size(ww3m) - IF STRPOS(var3.name,'th') GT -1 OR var3.name EQ 'dir' $ - OR var3.name EQ 'dp ' OR ww3fieldname EQ '.pth' THEN BEGIN - ww3dir=ww3m; - ncid2=ncid - ENDIF - IF (newgrid EQ 1) THEN BEGIN - nxzmin=0 - nyzmin=0 - nxzmax=nx-1 - nyzmax=ny-1 - ENDIF - - CASE MAPLONLAT OF - 0: BEGIN - dx=(rlonmax-rlonmin)*(1./((nx-1)*1000.)) - dy=(rlatmax-rlatmin)*(1./((ny-1)*1000.)) - END - 1: BEGIN - dx=(rlonmax-rlonmin)*(40000./((nx-1)*360.)) *cos(0.5*(rlatmin+rlatmax)*!dtor) - dy=(rlatmax-rlatmin)*(40000./((ny-1)*360.)) -print,'HEYMAA:',MAPLONLAT,dx,dy,nx,ny,rlatmin,rlatmax - END - 2: BEGIN - SLAT = 70. - RE = 6378.273 - E2 = .006693883 - PI = 3.141592654 - E = sqrt(E2) - la1=ww3lat(0,0) - lo1=ww3lon(0,0) - mapll,xmin,ymin,la1,lo1,1. - mapll,xmax,ymax,ww3lat(nx-1,ny-1),ww3lon(nx-1,ny-1),1. - XPOLE=-1.*xmin - YPOLE=-1.*ymin - dx=(xmax-xmin)*(1./((nx-1))) - dy=(ymax-ymin)*(1./((ny-1))) - END - ENDCASE - - rangex=[0,dx*FLOAT(nx-1)] - rangey=[0,dy*FLOAT(ny-1)] - WIDGET_CONTROL, Wdraw,SENSITIVE=1 - Wdraw_value_update=1 - dtindex=1 - ww3matrix=ww3m - tindex=1L - tindex2=ntime - WIDGET_CONTROL,Wright(12,2),SET_SLIDER_MAX=ntime - ; WIDGET_CONTROL,Wright(12,3),SET_SLIDER_MAX=1 - WIDGET_CONTROL,Wright(12,4),SET_SLIDER_MAX=ntime,SET_VALUE=ntime - - gridvarids=FLTARR(nvars) - igrids=0 - FOR I=0,nvars-1 DO BEGIN - ncvar=NCDF_VARINQ(ncid,I) - ndimvar=ncvar.NDIMS - FOR J=0,ndimvar-1 DO BEGIN - IF (ncvar.DIM(J) EQ timeid) THEN BEGIN - gridvarids(igrids)=J - igrids=igrids+1 - ENDIF - ENDFOR - ENDFOR - ncivar=ivar - END -; -; WWATCH ASCII output -; - 20:BEGIN ;WAVEWATCH III transfer file (see WW3 manual) for IDLA=3 - IF n_elements(ww3fieldname) EQ 0 THEN ww3fieldname=" " - ww3fieldname=" " - ww3fieldname0=ww3fieldname - ww3model=' ' - ww3date=' ' - ww3time=' ' - ww3scale=1. - ww3unit='m' - ww3check=0 - toto=0 - toto2=0 - totof="(1X,20I6)" - nx=0L - ny=0L - line=' ' - READF,unit,line - ww3model=STRMID(line,1,13) - ww3date=STRMID(line,15,9) - ww3time=STRMID(line,24,7) - pos1=STRPOS(line,'(') - pos2=STRPOS(line,')') - pos3=STRPOS(line,'.',STRLEN(line)-40,/REVERSE_SEARCH) - taille=size(line) - READS,STRMID(line,31,STRLEN(line)-31),rlonmin,rlonmax,nx, $ - rlatmin,rlatmax,ny - READS,STRMID(line,pos3,STRLEN(line)-pos3),ww3fieldname,ww3scale, $ - ww3unit,toto,toto2,FORMAT='(A4,F8.2,1X,A10,2I2)' - ;ww3fieldname,ww3scale,ww3unit,toto,toto2 - READS,STRMID(line,pos1,pos2-pos1+1), totof - READS,STRMID(line,pos2+1,STRLEN(line)-pos2-1), ww3miss - IF (POS3 LT 83) THEN BEGIN -; -; file coordinates are lat and lon -; - MAPLONLAT=1 - IF(abs(rlonmax-rlonmin)+abs(rlatmax-rlatmin) GT 1000.) THEN BEGIN - rlonmax=(rlonmax-rlonmin)/1000.*(360/40000.) - rlonmin=0. - rlatmax=(rlatmax-rlatmin)/1000.*(360/40000.) - rlatmin=0. - rlatmax=rlatmax*0.5 - rlatmin=-rlatmax - ENDIF - ww3lat=FINDGEN(ny)*(rlatmax-rlatmin)+rlatmin - IF (rlonmin GE 180 AND rlonmax GE 180) THEN BEGIN - rlonmin=rlonmin-360 - rlonmax=rlonmax-360 - ENDIF - - ENDIF ELSE BEGIN -; -; file coordinates are X and Y -; - MAPLONLAT=0 - dlon=(rlonmax-rlonmin)*360./4E7 - dlat=(rlatmax-rlatmin)*360./4E7 - rlonmin=0 - rlonmax=dlon - rlatmin=0 - rlatmax=dlat - ENDELSE - - - ; This format is for Wavewatch version 1.18 - ; FORMAT='(1X,A13,I9.8,I7.6,2(2F8.2,I4),1X,A4,F8.4,1X,A10,2I2,1X,A11,I4)' - ; This format is for Wavewatch version 2.22 - ; FORMAT='(1X,A13,I9.8,I7.6,2(2F8.2,I4),1X,A4,F8.2,1X,A10,2I2,1X,A11,I4)' - - ww3m=FLTARR(nx,ny) - vectora=STRARR(nx) - vector=FLTARR(nx) - totofa=totof - STRPUT,totofa,'A',6 - IF (ww3check EQ 1) THEN BEGIN - FOR J=0,ny-1 DO BEGIN - IF (toto2 EQ 2) THEN $ - READF,unit,vectora,FORMAT=totofa $ - ELSE READF,unit,vectora - FOR K=0,nx-1 DO BEGIN - IF vectora(K) EQ '****' THEN vector(K)=ww3miss $ - ELSE vector(K)=FLOAT(vectora(K)) - ENDFOR - ww3m(*,ny-J-1)=vector - ENDFOR - ENDIF ELSE BEGIN - FOR J=0,ny-1 DO BEGIN - IF (toto2 EQ 2) THEN $ - READF,unit,vector,FORMAT=totofa $ - ELSE READF,unit,vector - ww3m(*,ny-J-1)=vector - ENDFOR - ENDELSE - Index=WHERE(ww3m LE ww3miss,kount) - ww3m=ww3m*ww3scale -; -; Reads a two component vector -; - IF (ww3fieldname EQ '.cur') OR (ww3fieldname EQ '.wnd')$ - OR (ww3fieldname EQ '.uss') OR (ww3fieldname EQ '.tus') THEN BEGIN - ww3m2=FLTARR(nx,ny) - IF (ww3check EQ 1) THEN BEGIN - FOR J=0,ny-1 DO BEGIN - IF (toto2 EQ 2) THEN $ - READF,unit,vectora,FORMAT=totofa $ - ELSE READF,unit,vectora - FOR K=0,nx-1 DO BEGIN - IF vectora(K) EQ '****' THEN vector(K)=ww3miss $ - ELSE vector(K)=FLOAT(vectora(K)) - ENDFOR - ww3m2(*,ny-J-1)=vector - ENDFOR - ENDIF ELSE BEGIN - - FOR J=0,ny-1 DO BEGIN - IF (toto2 EQ 2) THEN $ - READF,unit,vector,FORMAT=totof $ - ELSE READF,unit,vector - ww3m2(*,ny-J-1)=vector - ENDFOR - ENDELSE - ww3m2=ww3m2*ww3scale - ww3dir=90.-ATAN(-ww3m2,-WW3M)/!dtor ;90- transforms into trig direction - WW3M=SQRT(ww3m^2+ww3M2^2) - IF (kount GT 0) THEN ww3dir(index)=2.*maxval - ENDIF - ; - ; - ; - IF (kount GT 0) THEN ww3m(index)=-2.*maxval - IF ww3fieldname EQ '.1th' OR ww3fieldname EQ '.dir' OR ww3fieldname EQ '.dp ' $ - OR ww3fieldname EQ '.pth' THEN BEGIN - ww3dir=ww3m - IF (ww3fieldname0 EQ ' ') THEN ww3matrix=ww3m - ENDIF ELSE ww3matrix=ww3m - CASE ww3fieldname OF - '.dpt':ww3fieldname = 'Depth ('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - '.hs ':ww3fieldname = 'Hs ('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - '.1hs ':ww3fieldname = 'Hs swell 1 ('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - '.phs':ww3fieldname = 'Hs partition('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - '.hsw':ww3fieldname = 'Hs wind sea ('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - '.fp ':ww3fieldname = 'Tp (s)' - '.dir':IF (ww3fieldname0 EQ ' ') THEN ww3fieldname = 'Direction ('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - '.dp' :IF (ww3fieldname0 EQ ' ') THEN ww3fieldname = 'Direction ('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - '.wnd':ww3fieldname = 'Wind ('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - '.cur':ww3fieldname = 'Courant ('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - '.uss':ww3fieldname = 'Surface Stokes drift ('+STRCOMPRESS(ww3unit,/REMOVE_ALL)+')' - ELSE: - ENDCASE - ; This is for structured grids only (unstructured: ny=1) - IF (ny GT 1) THEN BEGIN - nxzmin=0 - nyzmin=0 - nxzmax=nx-1 - nyzmax=ny-1 - dx=(rlonmax-rlonmin)*(40000./((nx-1)*360.))*cos(0.5*(rlatmin+rlatmax)*!dtor) - dy=(rlatmax-rlatmin)*(40000./((ny-1)*360.)) - rangex=[0,dx*FLOAT(nx-1)] - rangey=[0,dy*FLOAT(ny-1)] - WIDGET_CONTROL, Wdraw,SENSITIVE=1 - Wdraw_value_update=1 - ENDIF ELSE BEGIN - nxzmin=0 - nyzmin=0 - nx=FLOOR(sqrt(nx)) - ny=nx - nxzmax=nx-1 - nyzmax=ny-1 - dx=(rlonmax-rlonmin)*(40000./((nx-1)*360.))*cos(0.5*(rlatmin+rlatmax)*!dtor) - dy=(rlatmax-rlatmin)*(40000./((ny-1)*360.)) - rangex=[0,dx*FLOAT(nx-1)] - rangey=[0,dy*FLOAT(ny-1)] - WIDGET_CONTROL, Wdraw, SENSITIVE=0 - Wdraw_value_update=0 - ENDELSE - END - - 21:BEGIN ;Wavewatch III transfer file (see WW3 manual) for IDLA=3 - ww3matrixold=ww3matrix - IF N_ELEMENTS(ww3dir) THEN ww3dirold=ww3dir - tempopath=paths(20) - paths(20)=paths(21) - ReadDataFile,filenames(21),20,1 - paths(20)=tempopath - PRINT,'name:',paths(21),filenames(21) - ww3matrix2=ww3matrix - IF N_ELEMENTS(ww3dir) THEN ww3dir2=ww3dir - ww3matrix=ww3matrixold - IF N_ELEMENTS(ww3dir) THEN ww3dir=ww3dirold - END - -; - 16:BEGIN ;reads extra time series for spectral analysis vs bulk parameters - reference_data_present=0 - IF N_ELEMENTS(modspec) NE 0 THEN BEGIN ; model time series output (file type 10) - IF (modspec.ntime NE 0) THEN BEGIN - reference_data=modspec - reference_data_present=1 - ENDIF - ENDIF - IF N_ELEMENTS(obs) NE 0 THEN BEGIN ; model time series output (file type 10) - IF (obs.ntime NE 0) THEN BEGIN - reference_data=obs - reference_data_present=1 - ENDIF - ENDIF - ;print,(*modspec.dates)[0].jday,modspec.ntime,FORMAT='(f16.4)' - typ=0 - n1=0 - n2=0 - n3=0 - READF,unit,typ - IF (typ EQ 0 AND reference_data_present NE 0) THEN BEGIN - READF,unit,n1,n2,n3 - - obs2={specdata, typ:0, nfband:0, nabin:0, np:0, nvar:0, ntime:0L, $ - nrun:1, f1:ptr_new(), f2:ptr_new(), f:ptr_new(), df:ptr_new(), $ - theta:ptr_new(),dtheta:1.0, $ - plat:ptr_new(), plon:ptr_new(), pdepth:ptr_new(), $ - pU10:ptr_new(), pUdir:ptr_new(), $ - pCurr:ptr_new(), pCurrdir:ptr_new(), $ - pnames:ptr_new(), varnames:ptr_new(), dates: ptr_new(), $ - data:ptr_new(), flags:ptr_new(), path:ptr_new(), filename:ptr_new()} - d={date, y:0, m:0, d:0, h:0, minu:0, s:0.0, zone:0.0, jday:0.0D} - obs2.typ=typ - obs2.nfband=n1 - obs2.np=n2 - obs2.nvar=n3 - f1=FLTARR(n1) - f2=f1 - READF,unit,f1,f2 - df=ABS(f2-f1) - obs2.f1=ptr_new(f1) - obs2.f2=ptr_new(f2) - f=f1*0. - f(0)=f1(0) - f(n1-1)=f2(n1-1) - FOR J=1,n1-2 DO BEGIN - f(J)=f(J-1)+0.5*(df(J-1)+df(J)) - ENDFOR - df=ABS(f2-f1) - obs2.f=ptr_new(f) - obs2.df=ptr_new(df) - IF typ LE 1 THEN BEGIN - obs2.nabin=1 - theta=FLTARR(1) - obs2.theta=ptr_new(theta) - ENDIF - n=REPLICATE(' ',obs2.np) - FMT='(001(A8))' - STRPUT,FMT,STRING(obs2.np,FORMAT='(I3)'),1 - READF,unit,n,FORMAT=FMT - obs2.pnames=ptr_new(n) - STRPUT,FMT,STRING(obs2.nvar,FORMAT='(I3)'),1 - n=REPLICATE(' ',obs2.nvar) - READF,unit,n,FORMAT=FMT - obs2.varnames=ptr_new(n) - print,'Variables:',*obs2.varnames - I=0L - y=0 - d=0 - h=0 - m=0 - minu=0 - zone=0. - ntmax=900000L/(obs2.nabin*obs2.nfband) - dar=REPLICATE({date},ntmax) - Imax=reference_data.ntime-1 - data=FLTARR(1,obs2.np,obs2.nvar,obs2.nfband,obs2.nabin,ntmax) - vecteur=FLTARR(obs2.nvar) - over=0 - WHILE NOT EOF(unit) AND (over EQ 0) DO BEGIN - READF,unit,y,m,d,h,minu,zone,vecteur - ;IF (I LT 12) THEN print,'temps:',I,y,m,d,h,minu,zone,vecteur(7),vecteur(10) - sec=0 - jday=JULDAY(m,d,y,h,minu,zone) - IF (jday GE (*reference_data.dates)[0].jday) $ - AND (jday LE (*reference_data.dates)[Imax].jday) THEN BEGIN - dar[i].y=y - dar[i].d=d - dar[i].m=m - dar[i].h=h - dar[i].minu=minu - dar[i].s=zone ;sec - dar[i].zone=0. ;zone - dar[i].jday=jday - data(0,0,*,0,0,I)=vecteur - IF obs2.np GT 1 THEN BEGIN - - FOR J=1,obs2.np-1 DO BEGIN - READF,unit,vecteur - data(0,J,*,0,0,I)=vecteur - ENDFOR - ;print,I,y,m,d,h,min,zone - ENDIF - I=I+1 - ENDIF ELSE BEGIN - FOR J=1,obs2.np-1 DO BEGIN - READF,unit,vecteur - ENDFOR - ENDELSE - IF (jday GT (*reference_data.dates)[Imax].jday) THEN over=1 - ENDWHILE - - obs2.ntime=I - IF (I GT 0) THEN BEGIN - obs2.data=ptr_new(data(*,*,*,*,*,0:I-1)) - obs2.dates=ptr_new(dar(0:I-1)) - flags=INTARR(I)+1 - obs2.flags=ptr_new(flags) - ENDIF ELSE BEGIN - PRINT,'No data in common time range.' - ENDELSE - PRINT,'Read ',I,' time steps.' - ENDIF - END - - - 18:BEGIN ; reads a gshhs file - ; (cf. www.ngdc.noaa.gov/mgg/shorelines/gshhs.html) - tempoPoly=LONARR(600000,10) - tempoPoint=FLTARR(20000000,2) - ID=0L ;identity number of polygon - NP=0L ; number of points in polygon - LEV=0L ; level (1 land, 2 lake, 3 island in lake ...) - MW=0L - ME=0L - MS=0L - MN=0L - AREA=0L - FLAG=0L - X=0L - y=0L - tempoPoly(0,0)=0 ;pointer to tempoPoint - ; the points of polygon I are stored in - ;tempoPoint(tempoPoly(I,0):tempoPoly(I+1,0)-1) - IC=0L - ;PRINT,rlonmin,rlonmax,rlatmin,rlatmax - marginx=0. - marginy=(rlatmax-rlatmin)*0.2 - rlonminn=rlonmin - IF ((rlonmax-rlonmin) LT 60) THEN BEGIN - marginx=(rlonmax-rlonmin)*0.2 - rlonminn=rlonmin-6.*marginx - ENDIF - xc=(rlonmax+rlonmin)/2. - yc=(rlatmax+rlatmin)/2. - - Outreduced=0 - - ;GET_LUN,unit2 - ;OPENW,unit2,'traitcote_gshhs.dat' - ;depthcote=-10. - - WHILE NOT EOF(unit) DO BEGIN - READU,unit,ID,NP,LEV,MW,ME,MS,MN,AREA,FLAG ;reads the polygon header - ;PRINT,'Np and bounds:',ID,NP,LEV,MW,ME,MS,MN - VECTOR=LONARR(NP*2) - READU,unit,VECTOR - VECTOR=TRANSPOSE(REFORM(VECTOR,2,NP)) - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - tempoPoly(IC,1)=ID - tempoPoly(IC,3)=LEV - tempoPoly(IC,4)=MW - tempoPoly(IC,5)=ME - tempoPoly(IC,6)=MS - tempoPoly(IC,7)=MN - tempoPoly(IC,8)=AREA - tempoPoly(IC,9)=FLAG - ;FOR I=0L,NP-1 DO BEGIN - ; PRINTF,unit2,FORMAT='(2F11.6,F8.2)',VECTOR(I,0)*1.E-6-360.,vectOR(I,1)*1.E-6,depthcote - ;ENDFOR - - IF (outreduced EQ 1) THEN BEGIN - kountk=0L - X=LONARR(NP) - Y=X - X(*)=VECTOR(*,0) - Y(*)=VECTOR(*,1) - Keep=WHERE(((((FLOAT(X)*1.E-6+180.) MOD 360.) $ - -rlonmax-marginx-180) LE 0.) AND $ - ((((FLOAT(X)*1.E-6+180.) MOD 360.) $ - -rlonmin+marginx-180) GE 0.) AND $ - ((FLOAT(Y)*1.E-6 $ - -rlatmax-marginy) LE 0.) AND $ - ((FLOAT(Y)*1.E-6 $ - -rlatmin+marginy) GE 0.),kountk) - NPO=NP-kountk - NP=kountk - IF kountk GT 0 THEN BEGIN - tempoPoint(tempoPoly(IC,0):tempoPoly(IC,0)+NP-1,0:1)=VECTOR(Keep,*) - IP1=KEEP(0) - IP2=KEEP(kountk-1) - ;PRINT,'IP1, IP2:',IP1,IP2 - ;PRINT,'KEEP:',KEEP - x2=((VECTOR(IP2,0)*1.E-6+180.) MOD 360.)-180. - y2=VECTOR(IP2,1)*1.E-6 - x1=((VECTOR(IP1,0)*1.E-6+180.) MOD 360.)-180. - y1=VECTOR(IP1,1)*1.E-6 - PRINT,'IC: ',IC,ID,NP,kountk,NPO,NPO+NP,IP1,IP2,x1,x2,y1,y2,xc,yc - - IF (NPO GT 0) THEN BEGIN - IF (ABS(x2-x1) GT ABS(rlonmax-rlonmin)) $ - OR ABS(y2-y1) GT ABS(rlatmax-rlatmin) THEN BEGIN - a=(y1-y2)/(y2*x1-x2*y1) - b=(x2-x1)/(y2*x1-x2*y1) - c=1 - - IF (X2-X1)*(y2-y1) LT 0 THEN BEGIN - IF (a*xc+b*yc+c)*(a*rlonmax+b*rlatmax+c) GT 0 THEN BEGIN - ;tempoPoint(tempoPoly(IC,0)+NP,0)=FLOAT(rlonmax+marginx+360.)*1.E6 - ;tempoPoint(tempoPoly(IC,0)+NP,1)=FLOAT(rlatmax+marginy)*1.E6 - PRINT,'Adding point in polygon (1,1)...' - ENDIF ELSE BEGIN - ;tempoPoint(tempoPoly(IC,0)+NP,0)=FLOAT(rlonmin-marginx+360.)*1.E6 - ;tempoPoint(tempoPoly(IC,0)+NP,1)=FLOAT(rlatmin-marginy)*1.E6 - PRINT,'Adding point in polygon (-1,-1)...' - ENDELSE - ENDIF ELSE BEGIN - IF (a*xc+b*yc+c)*(a*rlonmax+b*rlatmin+c) GT 0 THEN BEGIN - tempoPoint(tempoPoly(IC,0)+NP,0)=FLOAT(rlonmin-marginx+360.)*1.E6 - tempoPoint(tempoPoly(IC,0)+NP,1)=FLOAT(rlatmax+marginy)*1.E6 - PRINT,'Adding point in polygon (-1,1)...' - ENDIF ELSE BEGIN - tempoPoint(tempoPoly(IC,0)+NP,0)=FLOAT(rlonmax+marginx+360.)*1.E6 - tempoPoint(tempoPoly(IC,0)+NP,1)=FLOAT(rlatmin-marginy)*1.E6 - PRINT,'Adding point in polygon (1,-1)...' - ENDELSE - ENDELSE - NP=NP+1 - ENDIF - ENDIF - tempoPoly(IC,2)=NP - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - IC=IC+1 - ENDIF - ENDIF ELSE BEGIN - - IF (FLOAT(MS)*1.E-6 LT -80.) THEN BEGIN - NP=NP+1 - print,'Antarctica:',vectOR(0:1,0) - tempo=vectOR - VECTOR=LONARR(NP,2) - vectOR(0,0)=FIX(rlonmax)*1000000 - vectOR(0,1)=FIX(-90)*1000000 - vectOR(NP-1,0)=FIX(rlonminn)*1000000 - vectOR(NP-1,1)=FIX(-90)*1000000 - - VECTOR(1:NP-2,0:1)=tempo(0:np-3,0:1) - ENDIF - X=FLTARR(NP) - X(*)=FLOAT(VECTOR(*,0)*1.E-6 - rlonminn) - index=WHERE(X EQ 360.,kount) - X(*)=(X MOD 360.) - IF kount GT 0 THEN X(index)=360. - Index1=WHERE(X LT 0,kount1) - IF kount1 GT 0 THEN X(Index1)=X(Index1)+360. - - ; Looks for wrap around - XP1=SHIFT(X,-1) - Indexch=WHERE(ABS(X-XP1) GT 350.,kountch) - IF ((rlonmax-rlonmin) GT 60) AND (kountch GT 1) THEN BEGIN - ;PRINT,'Flip:',IC,kountch,Indexch,X(Indexch),XP1(Indexch) - NP2=Indexch(0)+1+NP-1-Indexch(kountch-1) - FOR Iwrap=1,kountch-2,2 DO BEGIN - NP2=NP2+Indexch(Iwrap+1)-Indexch(Iwrap) - ENDFOR - NP3=NP-NP2 - VECTR=FLTARR(NP2,2) - VECTR3=FLTARR(NP3,2) - VECTR(0:Indexch(0),0)=X(0:Indexch(0))-marginx - VECTR(0:Indexch(0),1)=FLOAT(VECTOR(0:Indexch(0),1))*1.E-6-rlatmin - Ip2=Indexch(0)+1 - Iwrap=0 - Ip3=0 - FOR Iwrap=1,kountch-1,2 DO BEGIN - IF (Iwrap LT kountch-1) then BEGIN - VECTR(Ip2:Ip2+Indexch(Iwrap+1)-Indexch(Iwrap)-1,0) $ - =X(Indexch(Iwrap)+1:Indexch(Iwrap+1))-marginx - VECTR(Ip2:Ip2+Indexch(Iwrap+1)-Indexch(Iwrap)-1,1) $ - =FLOAT(VECTOR(Indexch(Iwrap)+1:Indexch(Iwrap+1),1))*1.E-6-rlatmin - Ip2=Ip2+Indexch(Iwrap+1)-Indexch(Iwrap) - ENDIF - VECTR3(Ip3:Ip3+Indexch(Iwrap)-Indexch(Iwrap-1)-1,0) $ - =X(Indexch(Iwrap-1)+1:Indexch(Iwrap))-marginx - VECTR3(Ip3:Ip3+Indexch(Iwrap)-Indexch(Iwrap-1)-1,1) $ - =FLOAT(VECTOR(Indexch(Iwrap-1)+1:Indexch(Iwrap),1))*1.E-6-rlatmin - Ip3=Ip3+Indexch(Iwrap)-Indexch(Iwrap-1) - ENDFOR - VECTR(Ip2:NP2-1,0)=X(Indexch(kountch-1)+1:NP-1)-marginx - VECTR(ip2:NP2-1,1)=FLOAT(VECTOR(Indexch(kountch-1)+1:NP-1,1))*1.E-6-rlatmin - NPold=NP - NP=NP2 - - IF (IP3 GT 3) THEN BEGIN - tempoPoint(tempoPoly(IC,0):tempoPoly(IC,0)+NP-1,0:1)=VECTR(*,*) - tempoPoly(IC,2)=NP - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - - IC=IC+1 - NP=NP3 - VECTR=VECTR3 - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - tempoPoly(IC,1)=ID - tempoPoly(IC,3)=LEV - tempoPoly(IC,4)=MW - tempoPoly(IC,5)=ME - tempoPoly(IC,6)=MS - tempoPoly(IC,7)=MN - tempoPoly(IC,8)=AREA - tempoPoly(IC,9)=FLAG - ENDIF - - ENDIF ELSE BEGIN - VECTR=FLTARR(NP,2) - VECTR(*,0)=X(*)-6.*marginx - VECTR(*,1)=FLOAT(VECTOR(*,1))*1.E-6-rlatmin - ENDELSE - tempoPoint(tempoPoly(IC,0):tempoPoly(IC,0)+NP-1,0:1)=VECTR(*,*) - tempoPoly(IC,2)=NP - tempoPoly(IC+1,0)=tempoPoly(IC,0)+NP - IC=IC+1 - ENDELSE - ENDWHILE - ;CLOSE,unit2 - ;FREE_LUN,unit2 - - Npoly=IC - GSHHSPoly=tempoPoly(0:Npoly,*) - PRINT,'Number of relevant polygons:',IC,GSHHSPoly(Npoly),SIZE(tempoPoint) - PRINT,'Bounds of poly 1:',tempoPoly(0,4:7)*1E-6 - - - GSHHSPoint=tempoPoint(0:GSHHSPoly(Npoly)-1,*) - -;************************************************ -; Outputs a reduced version of the original file - IF (outreduced EQ 1) THEN BEGIN - GET_LUN,unit2 - OPENW,unit2,'gshhs_cal.b' - FOR I=0L,Npoly-1 DO BEGIN - WRITEU,unit2,GSHHSPoly(I,1:9) - NP=GSHHSPoly(I,2) - AR=LONARR(NP,2) - AR(*,*)=GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,*) - WRITEU,unit2,REFORM(TRANSPOSE(AR),NP*2) - ENDFOR - CLOSE,unit2 - FREE_LUN,unit2 - ENDIF -;************************************************ - ; COnverts to kilometers - tempo=GSHHSPOINT - GSHHSPoint=FLTARR(GSHHSPoly(Npoly),2) - GSHHSPoint(*,0)=(nx-1)*dx*tempo(*,0)/ABS(rlonmax-rlonmin) - GSHHSPoint(*,1)=(ny-1)*dy*tempo(*,1)/ABS(rlatmax-rlatmin) - END - - 22: BEGIN - message,'Loading table ' + filenames(filetype),/INFO - r=BYTARR(256) - g=BYTARR(256) - b=BYTARR(256) - READF,unit,r,g,b - cbot = 0 - nc = !d.table_size - cbot - if nc ne 256 then begin ;Interpolate - p = (lindgen(nc) * 255) / (nc-1) - r = r[p] - g = g[p] - b = b[p] - endif - r_orig[cbot] = r - g_orig[cbot] = g - b_orig[cbot] = b - r_curr = r_orig - g_curr = g_orig - b_curr = b_orig - tvlct,r, g, b, cbot - END - ELSE:PRINT,'File type not supported' - - ENDCASE - filestatus(filetype)=filestatus(filetype)-1 - IF filestatus(filetype) EQ 0 THEN CLOSE,unit - datastatus(filetype)=1 - PRINT,'File type ',STRCOMPRESS(filetype),' read:',paths(filetype),filenames(filetype) -RETURN -END -;----------------------------------------------------------------------------- -PRO READ_CDF,COUNTS,OFFSETS,times,varnorm,vardir,varname -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON FREQ, freq,nfband,findex,findex2 -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON WW3, ww3model,ww3date,ww3time,ww3fieldname,ww3scale,ww3miss,ww3unit,ww3lon, $ - ww3lat,ww3matrix,ww3dir,ww3path,spec2D,ww3matrix2,ww3dir2,ncid,ncid2,ncivar0,ncivar -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y,c_lon,c_lat - ncall=NCDF_INQUIRE(ncid) - nvars=ncall.NVARS - triid=NCDF_VARID(ncid,'tri') - MAPSTAid=NCDF_VARID(ncid,'MAPSTA') - timeid=NCDF_VARID(ncid,'time') - taille=SIZE(counts) - NC=taille(1) -; - ncvar=NCDF_VARINQ(ncid,ncivar) - ndimvar=ncvar.NDIMS -; - var3=NCDF_VARINQ(ncid,ncivar) - attOK=NCDF_ATTINQ(ncid,ncivar,'scale_factor') - IF (attOK.Length GT 0) THEN NCDF_ATTGET,ncid,ncivar,'scale_factor',ww3scale $ - ELSE ww3scale=1. - NCDF_ATTGET,ncid,ncivar,'_FillValue',ww3miss - NCDF_ATTGET,ncid,ncivar,'units',ww3unit - - IF (timeid GE 0) THEN $ - NCDF_VARGET,ncid,timeid,timenow,COUNT=COUNTS(NC-1),OFFSET=OFFSETS(NC-1) $ - ELSE timenow=0. - dayi=JULDAY(1,1,1990,0,0,0.) - times=DOUBLE(timenow)+DOUBLE(dayi) - - freqid=NCDF_VARID(ncid,'f') - IF (freqid GE 0) THEN BEGIN - NCDF_VARGET,ncid,freqid,freq - TEMP=COUNTS - COUNTS=LONARR(NC+1) - COUNTS(0:NC-2)=TEMP(0:NC-2) - COUNTS(NC-1)=1 - COUNTS(NC)=TEMP(NC-1) - TEMP=OFFSETS - OFFSETS=LONARR(NC+1) - OFFSETS(0:NC-2)=TEMP(0:NC-2) - OFFSETS(NC-1)=1 - OFFSETS(NC)=TEMP(NC-1) - - IF (NC EQ 3) THEN varnorm=FLTARR(COUNTS(0),COUNTS(1)) ELSE varnorm=FLTARR(COUNTS(0)) - vardir=varnorm - lg10=ALOG(10) -; -; Reads for all frequencies and adds up -; - fac=0.5*(1.1-1./1.1) - varnorm=varnorm*0. - mat2=FLOAT(varnorm) - FOR J=findex-1,findex2-1 DO BEGIN - OFFSETS(NC-1)=J - NCDF_VARGET,ncid,ncivar,mat1,COUNT=COUNTS,OFFSET=OFFSETS - IF (J EQ findex-1) THEN Index=WHERE(mat1 EQ ww3miss,kount) - IF (kount GT 0) THEN mat1(Index)=0 - IF (J EQ findex-1) THEN Index2=WHERE(mat1 NE 0.,kount2) - CASE STRING(ww3unit) OF - 'log10(m2s+1E-12)':BEGIN - IF (kount2 GT 0) THEN $ - mat2(Index2)=exp(lg10*FLOAT(mat1(Index2))*ww3scale)-(1E-12-1E-16) - varnorm=varnorm+mat2*freq(J)*fac - END - 'log10(m4s+0.01)':BEGIN - IF (kount2 GT 0) THEN $ - mat2(Index2)=exp(lg10*FLOAT(mat1(Index2))*ww3scale)-0.00999 - varnorm=varnorm+mat2*freq(J)*fac - END - 'log10(m4s+1E-12':BEGIN - IF (kount2 GT 0) THEN $ - mat2(Index2)=exp(lg10*FLOAT(mat1(Index2))*ww3scale)-(1E-12-1E-16) - varnorm=varnorm+mat2*freq(J)*fac - END - ELSE: BEGIN - varnorm=varnorm+FLOAT(mat1*ww3scale)*freq(J)*fac - END - ENDCASE - ENDFOR - - CASE STRING(ww3unit) OF - 'log10(m4s+0.01)': ww3unit='m4' - 'log10(m2s+1E-12)': BEGIN - ww3unit='m' - varnorm=4.*sqrt(varnorm) - var3.name='Hs' - Index2=WHERE(mat1 NE ww3miss,kount2) - maxOK=MAX(varnorm(Index2)) - IF (maxOK LT 2.) THEN BEGIN - varnorm=1000*varnorm - ww3unit='mm' - var3.name='HsIG' - ENDIF - END - ELSE: - ENDCASE - varname = var3.name+' ('+STRING(ww3unit)+')' - varname = varname + ' (integrated from '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +' to '+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - IF (kount GT 0) THEN varnorm(index)=-2.*maxval - ENDIF ELSE BEGIN -; -; non-spectral data -; - NCDF_VARGET,ncid,ncivar,varnorm,COUNT=COUNTS(0:ndimvar-1),OFFSET=OFFSETS(0:ndimvar-1) - var3=NCDF_VARINQ(ncid,ncivar) - varname = var3.name+' ('+STRING(ww3unit)+')' - Index=WHERE(varnorm EQ ww3miss,kount) - IF STRPOS(var3.name,'fp') GT -1 THEN BEGIN - ;varnorm=varnorm*ww3scale - varnorm=1./(varnorm*ww3scale ) - var3.name='Tp' - print,'conversion of fp to tp... ',var3.name,MAX(varnorm) - ENDIF ELSE varnorm=varnorm*ww3scale - vardir=varnorm*0 - IF (kount GT 0) THEN varnorm(index)=-2.*maxval -; -; Computes norm from 2 components -; - IF (normvec EQ 1) THEN BEGIN - IF (nvars GT ncivar+1 AND (triid GE 0 OR ndimvar GT 2) ) THEN BEGIN - var4=NCDF_VARINQ(ncid,ncivar+1) - firstchar=STRUPCASE(STRMID(var4.name,0,1)) - IF firstchar EQ 'V' or var4.name EQ 'mssy' THEN BEGIN - NCDF_VARGET,ncid,ncivar+1,var2,COUNT=COUNTS,OFFSET=OFFSETS - var2=var2*ww3scale -; transforms into trig direction - vardir=90.-ATAN(-var2,-varnorm)/!dtor - IF (var3.name EQ 'mssx') THEN BEGIN - bvarnorm=varnorm+var2 - varname='mss' - ENDIF ELSE BEGIN - varnorm=SQRT(varnorm^2+var2^2) - varname = 'sqrt('+var3.name+'^2'+var4.name+'^2' $ - +') ('+STRING(ww3unit)+')' - ENDELSE - IF (kount GT 0) THEN vardir(index)=2.*maxval - ENDIF - ENDIF - ENDIF - IF STRPOS(var3.name,'th') GT -1 OR var3.name EQ 'dir' $ - OR var3.name EQ 'dp ' OR ww3fieldname EQ '.pth' THEN BEGIN - vardir=varnorm - ncid2=ncid - ENDIF - ENDELSE - RETURN - END -;----------------------------------------------------------------------------- -PRO UPDATE_WW3_TIME -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON FREQ, freq,nfband,findex,findex2 -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON WW3, ww3model,ww3date,ww3time,ww3fieldname,ww3scale,ww3miss,ww3unit,ww3lon, $ - ww3lat,ww3matrix,ww3dir,ww3path,spec2D,ww3matrix2,ww3dir2,ncid,ncid2,ncivar0,ncivar - - indext=tindex-1 -; -; Updates the NetCDF WW3 data and redo the plot -; - triid=NCDF_VARID(ncid,'tri') - ncvar=NCDF_VARINQ(ncid,ncivar) - ndimvar=ncvar.NDIMS - - IF (triid EQ -1) THEN BEGIN - dimxid=NCDF_DIMID(ncid,'longitude') - dimyid=NCDF_DIMID(ncid,'latitude') - IF (dimxid EQ -1) THEN BEGIN - dimxid=NCDF_DIMID(ncid,'x') - dimyid=NCDF_DIMID(ncid,'y') - END - IF (dimxid EQ -1) THEN BEGIN - dimxid=NCDF_DIMID(ncid,'lon') - dimyid=NCDF_DIMID(ncid,'lat') - END - - NCDF_DIMINQ,ncid,dimxid,name1,nx - NCDF_DIMINQ,ncid,dimyid,name1,ny - - READ_CDF,[nx,ny,1],[0,0,indext],times,varnorm,vardir,varname - ww3m=FLTARR(nx,ny) - IF ( ndimvar GT 2) THEN ww3m=varnorm(*,*,0) ELSE ww3m=varnorm - - IF (MIN(vardir) LT MAX(vardir)) THEN BEGIN - ww3dir=FLTARR(nx,ny) - ww3dir=vardir(*,*,0) - ENDIF - ENDIF ELSE BEGIN - READ_CDF,[nngp,1], [0,indext],times,varnorm,vardir,varname - ww3m=FLTARR(nngp) - ww3m(*)=varnorm(*,0) - IF (MIN(vardir) LT MAX(vardir)) THEN BEGIN - ww3dir=FLTARR(nngp) - ww3dir=vardir(*,0) - ENDIF - ENDELSE -; -PRINT,'MAX & MIN:',MAX(ww3m),MIN(ww3m) - ww3matrix=ww3m - ww3fieldname=varname - dayi=JULDAY(1,1,1990,0,0,0.) - - Time1toDate,times(0),ww3date,ww3time - RETURN - END - - - -;----------------------------------------------------------------------------- -PRO analyzer_event, ev -;+ -; NAME: analyzer_event -; PURPOSE: handles events on the main window -; (i.e. action on a widget) as they occur -; CALLING SEQUENCE: analyzer_event, ev -; where ev is a structure event variable -; INPUT: ev=widget id of the base widget -; COMMON BLOCKS: datainfo,xyz,choices,drawsize,plotvar,widgets,datatype, -; current,smallval,zoomidx,vecprm,prprm,psprm,dlprm,pmprm, -; flags,rotprm,rotarr -;- - -;** 1 ** Display parameters -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON THREED, Ax3D,Az3D,smoothing -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON WGene,Wgrideditor,WG,root -COMMON INTERFACE, TWISTVA_VERSION -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth - -;** 2 ** Display and data variables/parameters -COMMON FREQ, freq,nfband,findex,findex2 -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -COMMON DIR, nabin,nabint,aindex,THETA -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y,c_lon,c_lat -COMMON OVERLAY, addir,adsyms,adbathy,adcoast,psyms,psymsizes,adtr,adtri -common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr - -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON ARR8m, nfTom,naTom,TomF,Tomth,OBS8m,MOD8m -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON COAST, coastxy,coastl,coastnp,GSHHSPoly,GSHHSPoint,GSHHSPoly2,GSHHSPoint2 -COMMON DEPTHSTAT,nbind,bindres,HISTD,MEAND,SDEVD -COMMON DIRSPEC, ds,dsnfband,ndir,kdkdth,dsfreq,dstheta,dsdf,dstime,dsntime,ds_timezone -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON GRIDPar, th1,th2,gfact,gsize1,gsize6 -COMMON RAY3, crestsnap,freq1,freq2,datar3,datar3D,datar4D,titr1,titr2, $ - nfields2D,nfields3D,nfields,timer3,dayr3 -COMMON TIMESERIES, modspec,obs,obs2,om,ts_filetype, nbins, bulktype,scatvar -COMMON RAY3ad, NGPad,SIad,SCad,DEPTHad,HSad,PSIad,BBLDad -COMMON RAYS, raysOK,raystype,raynsteps,rayx,rayy,raya,rayamin,rayamax, $ - rayres,rayfreq,rayGP,raytimestep,rayoffdep,rayflag,raydz,raymindepth -COMMON SOURCE, S0,snabin,sntstep -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -COMMON LOCAL, nxz1,nyz1,nxz2,nyz2 -COMMON WW3, ww3model,ww3date,ww3time,ww3fieldname,ww3scale,ww3miss,ww3unit,ww3lon, $ - ww3lat,ww3matrix,ww3dir,ww3path,spec2D,ww3matrix2,ww3dir2,ncid,ncid2,ncivar0,ncivar -COMMON HScalc,Hsc -;*******END OF COMMON BLOCKS******************************* - - type = TAG_NAMES(ev, /STRUCTURE) ;obtain name of event structure - CASE type OF - 'WIDGET_BUTTON': BEGIN ;callback for the widget buttons - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE value OF - 'Norm': normvec = 1-normvec; - 'Quit': BEGIN ;Quit button - taille=size(filestatus) - FOR I=0,taille(1)-1 DO CLOSE,i+1 ;closes all files - WIDGET_CONTROL, /DESTROY, ev.top ;destroys main widget - RETURN - END - 'Palette': PALETTE,GROUP=ev.top ;calls the palette - ;which is a modified version - ;of the std idl tool - ;subwindow - 'PickNew': BEGIN - clickflag=0 ;this flag tells the draw window - WIDGET_CONTROL,Wdraw,EVENT_PRO='analyzer_event' - END - ;that the next click will be to - ;choose the current grid point - 'Refresh' : doplot ;does a plot with current param - - ;'Mesh' : IF (subwin(3) EQ 0) THEN IF (N_ELEMENTS(dx) NE 0) THEN Generator, ev.top ;calls the grid builder - 'Mesh' : IF (N_ELEMENTS(dx) NE 0) THEN Generator, ev.top ;calls the grid builder - 'Maps' : Mapping, ev.top ;calls the map tool window - ;'Plot parameters' : IF (subwin(0) EQ 0) THEN Parametros, ev.top ;calls the parameters - 'Plot parameters' : Parametros, ev.top ;calls the parameters - 'Rays': Raytracemenu,ev.top ;calls the ray tracing -; 'Transect tool': Maketransect,ev.top;calls the transect maker - 'Special points': Editspecials,ev.top - 'Bathy': Bathytool,ev.top - 'Zoom': BEGIN - WIDGET_CONTROL,Wdraw,EVENT_PRO='analyzer_event' - clickflag=1 ;zoom (corners of the zoom window - END ;are given by clicking on drawing) - 'Zoom out':BEGIN ;resets the zoom to full area - clickflag=0 - print,'ZOOM COORDINATES WAS:',nxzmin,nxzmax,nyzmin,nyzmax - nxzmin=0 - nyzmin=0 - nxzmax=nx-1 - nyzmax=ny-1 - doplot - END - 'Move': BEGIN - WIDGET_CONTROL,Wdraw,EVENT_PRO='analyzer_event' - clickflag=2 ;zoom (corners of the zoom window - END ;are given by clicking on drawing) - 'EndMove': BEGIN - WIDGET_CONTROL,Wdraw,EVENT_PRO='analyzer_event' - clickflag=0 ;zoom (corners of the zoom window - END ;are given by clicking on drawing) - 'Export spec2D':BEGIN - GET_LUN,unitspec - OPENW,unitspec,'../REFDIF/Spec2D.dat' - taille=size(Spec2d) - FOR I=0,taille1(1)-1 DO BEGIN - - PRINTF,unitspec,Spec2d(I,*) - ENDFOR - END - ELSE: PRINT, 'Last Request Ignored' - ENDCASE - END - 'WIDGET_DRAW':BEGIN - CASE ev.id OF - Wdraw: IF MAPFLAG EQ 0 THEN BEGIN - CASE ev.type OF ;case loop on action types - 0:BEGIN ;ev.type=0 : click (button pushed down) - CASE clickflag OF - 0:IF (datatype EQ 4) THEN BEGIN - coordP=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - c_x=coordP(0) - c_y=coordP(1) - NEAREST_POINT - IF datastatus(5) THEN BEGIN ;changes the current grid point - OPLOT,[gridmat(0,c_gp-1)],[gridmat(1,c_gp-1)], $ - psym=5,SYMSIZE=0.6 - strlab=strcompress(string(c_gp),/REMOVE_ALL) - XYOUTS,gridmat(0,c_gp-1),gridmat(1,c_gp-1), $ - strlab,CHARSIZE=0.9 - WIDGET_CONTROL,Wright(11,1), SET_VALUE=STRCOMPRESS(STRING(c_gp),/REMOVE_ALL) - ENDIF ELSE BEGIN - OPLOT,[c_x],[c_y], psym=5,SYMSIZE=0.6 - ENDELSE - ENDIF - - 1:BEGIN - coordP=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - nxz1=MIN([MAX([nxzmin,ROUND((coordP(0))/dx)]),nxzmax]) - nyz1=MIN([MAX([nyzmin,ROUND((coordP(1))/dy)]),nyzmax]) - END - 2:BEGIN - coordP=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - nxz2=MIN([MAX([nxzmin,ROUND((coordP(0))/dx)]),nxzmax]) - nyz2=MIN([MAX([nyzmin,ROUND((coordP(1))/dy)]),nyzmax]) - END - ENDCASE - END - 1:BEGIN ;ev.type=1 button release - CASE clickflag OF - 1:BEGIN ;picks up the second corner of the - ;zoom window when the button is released - coordR=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - nxz2=MAX([MIN([nxzmax,ROUND((coordR(0))/dx)]),nxzmin]) - nyz2=MAX([MIN([nyzmax,ROUND((coordR(1))/dy)]),nyzmin]) - nx1=MIN([nxz1,nxz2]) - nx2=MAX([nxz1,nxz2]) - IF (nx1 EQ nx2) THEN BEGIN - IF nx2 LT nxzmax THEN nx2=nx2+1 ELSE nx1=nx1-1 - ENDIF - ny1=MIN([nyz1,nyz2]) - ny2=MAX([nyz1,nyz2]) - IF (ny1 EQ ny2) THEN BEGIN - IF ny2 LT nyzmax THEN ny2=ny2+1 ELSE ny1=ny1-1 - ENDIF - nxzmax=nx2 - nxzmin=nx1 - nyzmax=ny2 - nyzmin=ny1 - clickflag=0 ;resets the clickflag to zero - ;PRINT,'Zoom indices:',nxzmin,nxzmax,nyzmin,nyzmax - doplot - END - 2:BEGIN ;Moves zoom around when the button is released - coordR=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - nxz1=MAX([MIN([nxzmax,ROUND((coordR(0))/dx)]),nxzmin]) - nyz1=MAX([MIN([nyzmax,ROUND((coordR(1))/dy)]),nyzmin]) - IF nxz2 GT nxz1 THEN BEGIN - movex=MIN([nxz2-nxz1,nx-1-nxzmax]) - nxzmax=nxzmax+movex - nxzmin=nxzmin+movex - ENDIF ELSE BEGIN - movex=MAX([nxz2-nxz1,-nxzmin]) - nxzmax=nxzmax+movex - nxzmin=nxzmin+movex - ENDELSE - IF nyz2 GT nyz1 THEN BEGIN - movey=MIN([nyz2-nyz1,ny-1-nyzmax]) - nyzmax=nyzmax+movey - nyzmin=nyzmin+movey - ENDIF ELSE BEGIN - movey=MAX([nyz2-nyz1,-nyzmin]) - nyzmax=nyzmax+movey - nyzmin=nyzmin+movey - ENDELSE - ;PRINT,'Zoom indices:',nxzmin,nxzmax,nyzmin,nyzmax - doplot - END - ELSE: - ENDCASE - END ;when the button is released - - ; Updates the cursor position and value of the current field - 2:IF Wdraw_value_update GT 0 THEN BEGIN - IF datastatus (2) OR datastatus(20) THEN BEGIN ;ev.type=2 when the cursor is in - ;in the drawing window - coord=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - i0=max([0,ROUND(coord(0)/dx)]) - j0=max([0,ROUND(coord(1)/dy)]) - IF ((i0 LT nx) AND (j0 LT ny)) THEN BEGIN - valeur=0. - CASE 1 OF - datastatus(3) EQ 1:BEGIN - valeur=gd(i0,j0) - WIDGET_CONTROL,Wright(14,5), $ - SET_VALUE=STRING(valeur,FORMAT='(F7.2)') - END - datastatus(20) EQ 1:BEGIN - taille=size(ww3matrix) - IF (taille(0) GT 1) THEN BEGIN - valeur=ww3matrix(i0,j0) - WIDGET_CONTROL,Wright(14,3), $ - SET_VALUE=STRING(valeur,FORMAT='(F7.2)') - ENDIF - END - ELSE: - ENDCASE - - - ENDIF - WIDGET_CONTROL,Wright(14,1), $ - SET_VALUE=(STRING(coord(0),FORMAT='(F8.2)')+','+STRING(coord(1),FORMAT='(F8.2)')) - ;XYstring='X:'+STRING(coord(0),FORMAT='(F8.3)') $ - ; +', Y:'+STRING(coord(1),FORMAT='(F.3)') - XYtoLatLon,coord(0),coord(1), $ - latdeg,latmin,londeg,lonmin,latlonstring,latlonstring2 - IF (MAPLONLAT GE 1) THEN WIDGET_CONTROL,Wright(15,1), $ - SET_VALUE=(latlonstring+'/'+latlonstring2) ELSE $ - WIDGET_CONTROL,Wright(15,1),SET_VALUE='' - ENDIF - ENDIF - ELSE:BEGIN ; Wheel action - IF (N_ELEMENTS(dx) NE 0 ) THEN BEGIN - coordR=CONVERT_COORD(ev.X,ev.Y, /DEVICE,/TO_DATA) - nxz1=MAX([MIN([nxzmax,ROUND((coordR(0))/dx)]),nxzmin]) - nyz1=MAX([MIN([nyzmax,ROUND((coordR(1))/dy)]),nyzmin]) - width=FLOAT(nxzmax-nxzmin)/2. - height=FLOAT(nyzmax-nyzmin)/2. - IF (ev.CLICKS EQ 1) THEN BEGIN - width=width/1.5 - height=height/1.5 - ENDIF ELSE BEGIN - width=width*1.5 - height=height*1.5 - ENDELSE - nxzmax=MIN([nx-1,nxz1+ROUND(width)]) - nxzmin=MAX([0 ,nxz1-ROUND(width)]) - nyzmax=MIN([ny-1,nyz1+ROUND(height)]) - nyzmin=MAX([0 ,nyz1-ROUND(height)]) - doplot - ENDIF - END - ENDCASE ; ev.type - END - ENDCASE ; end of case test on ev.id - END - 'WIDGET_DROPLIST':BEGIN - WIDGET_CONTROL, Wdraw, SENSITIVE=0 - CASE ev.id of - Wright(0,0):BEGIN - CASE ev.index of - ;0:BEGIN - ; datatype=0 - ; WIDGET_CONTROL,Wright(1,2),SET_VALUE=['2D','Trans','Local'] - ; END - 0:IF N_ELEMENTS(modspec) NE 0 THEN BEGIN - WIDGET_CONTROL,Wright(1,1),SET_VALUE=STRCOMPRESS(*modspec.varnames) - WIDGET_CONTROL,Wright(11,3),SET_VALUE=STRCOMPRESS(*modspec.pnames) - - IF (modspec.nabin GT 1) THEN WIDGET_CONTROL,Wright(1,2),SET_VALUE= $ - ['TS Bulk','Time series','f-spectrum', $ - 'Averaged f-spectrum','f-time plot','f-theta spec'] $ - ELSE IF (modspec.nfband GT 1) THEN WIDGET_CONTROL,Wright(1,2),SET_VALUE= $ - ['TS Bulk','Time series','f-spectrum','time-average', $ - 'freq-time','Diff vs fp','????', $ - 'Diff vs val','Binned plot','var U10,Hs'] $ - ELSE WIDGET_CONTROL,Wright(1,2),SET_VALUE= $ - ['Time series'] - - IF modspec.nfband GT 1 THEN WIDGET_CONTROL,Wright(1,3), $ - SET_VALUE=['bulk=Hs','bulk=mss','bulk=Uss','bulk=Ussd','bulk=varu','bulk=alpha','bulk=T01','bulk=T02'] - WIDGET_CONTROL,Wright(12,0),SET_SLIDER_MAX=modspec.nfband - WIDGET_CONTROL,Wright(12,5),SET_SLIDER_MAX=modspec.nfband - findex2=min([modspec.nfband,findex2]) - findex=min([modspec.nfband,findex]) - IF (findex2 LE findex) THEN findex=findex2-1 - IF (findex LT 1) THEN findex=1 - - WIDGET_CONTROL,Wright(12,2),SET_SLIDER_MAX=modspec.ntime - WIDGET_CONTROL,Wright(12,4),SET_SLIDER_MAX=modspec.ntime - IF tindex2 GT modspec.ntime THEN tindex2=modspec.ntime - IF tindex GT modspec.ntime THEN tindex=modspec.ntime - IF findex2 GT modspec.nfband THEN findex2=modspec.nfband - IF findex GT modspec.nfband THEN findex=modspec.nfband - IF (findex2 LE findex) THEN findex=findex2-1 - IF (findex LT 1) THEN findex=1 - - freq=(*modspec.f) - nfband=N_ELEMENTS(freq) - time=(*modspec.dates) - datatype=2 - ENDIF - 1:IF N_ELEMENTS(obs) NE 0 THEN BEGIN - WIDGET_CONTROL,Wright(1,1),SET_VALUE=STRCOMPRESS(*obs.varnames) - WIDGET_CONTROL,Wright(0,2),SET_VALUE=STRCOMPRESS(*obs.pnames) - WIDGET_CONTROL,Wright(11,3),SET_VALUE=STRCOMPRESS(*obs.pnames) - IF (obs.nabin GT 1) THEN WIDGET_CONTROL,Wright(1,2),SET_VALUE= $ - ['TS Bulk','Time series','f-spectrum', $ - 'Averaged f-spectrum','f-time plot','f-theta spec'] $ - ELSE IF (obs.nfband GT 1) THEN WIDGET_CONTROL,Wright(1,2),SET_VALUE= $ - ['TS Bulk','Time series','f-spectrum','Averaged f-spectrum', $ - 'scatter plot','Diff vs fp','Q-Q plot', $ - 'Diff vs val','Binned plot','var U10,Hs'] $ - ELSE WIDGET_CONTROL,Wright(1,2),SET_VALUE= $ - ['Time series'] - - WIDGET_CONTROL,Wright(12,0),SET_SLIDER_MAX=obs.nfband - WIDGET_CONTROL,Wright(12,5),SET_SLIDER_MAX=obs.nfband - findex2=min([obs.nfband,findex2]) - findex=min([obs.nfband,findex]) - nfband=obs.nfband - IF obs.nfband GT 1 THEN WIDGET_CONTROL,Wright(1,3), $ - SET_VALUE=['bulk=Hs','bulk=mss','bulk=Ussnd','bulk=Uss','bulk=alpha','bulk=varu','bulk=T01','bulk=T02'] - - freq=(*obs.f) - nfband=N_ELEMENTS(freq) - time=(*obs.dates) - WIDGET_CONTROL,Wright(12,2),SET_SLIDER_MAX=obs.ntime - WIDGET_CONTROL,Wright(12,4),SET_SLIDER_MAX=obs.ntime - IF tindex2 GT obs.ntime THEN tindex2=obs.ntime - IF tindex GT obs.ntime THEN tindex=obs.ntime - IF findex2 GT obs.nfband THEN findex2=obs.nfband - IF findex GT obs.nfband THEN findex=obs.nfband - datatype=1 - - ENDIF - 2: IF ((N_ELEMENTS(modspec) NE 0) AND (N_ELEMENTS(obs) NE 0)) THEN BEGIN - ;for comparisons: determines common variables, frequencies ... - ;The following structures contains arrays of indices for the arrays of - ;observations and model output BUT NOT THE DATA ITSELF ! - om={commons, typ:0, nfband:0, nabin:0, np:0, nvar:0, ntime:0L, $ - fo:ptr_new(), po:ptr_new(), vo:ptr_new(), dateo: ptr_new(), $ - fm:ptr_new(), pm:ptr_new(), vm:ptr_new(), datem: ptr_new()} - nfmax=MAX([modspec.nfband,obs.nfband]) - npmax=MAX([modspec.np,obs.np]) - nvmax=MAX([modspec.nvar,obs.nvar]) - ntimemax=MAX([modspec.ntime,obs.ntime]) - fo=INTARR(nfmax) - fm=INTARR(nfmax) - po=INTARR(npmax) - pm=INTARR(npmax) - vo=INTARR(nvmax) - vm=INTARR(nvmax) - dateo=LONARR(ntimemax) - datem=LONARR(ntimemax) -; -; Finds common variables -; - nvarc=0 - FOR I=0,obs.nvar-1 DO BEGIN - FOR J=0,modspec.nvar-1 DO BEGIN - IF (strcompress((*obs.varnames)[I],/REMOVE_ALL) EQ $ - strcompress((*modspec.varnames)[J],/REMOVE_ALL)) THEN BEGIN - vo(nvarc)=I - vm(nvarc)=J - nvarc=nvarc+1 - ENDIF - ENDFOR - ENDFOR -; -; Finds common points -; - IF (obs.np EQ 1 AND modspec.np EQ 1 ) THEN BEGIN - npc=1 - po(0)=0 - pm(0)=0 - ENDIF ELSE BEGIN - npc=0 - FOR I=0,obs.np-1 DO BEGIN - FOR J=0,modspec.np-1 DO BEGIN - IF (strcompress((*obs.pnames)[I],/REMOVE_ALL) $ - EQ strcompress((*modspec.pnames)[J],/REMOVE_ALL)) THEN BEGIN - po(npc)=I - pm(npc)=J - npc=npc+1 - ENDIF - ENDFOR - ENDFOR - ENDELSE -; -; Finds common frequencies -; - nfc=0 - IF (obs.typ GT 0) THEN BEGIN - FOR I=0,obs.nfband-1 DO BEGIN - FOR J=0,modspec.nfband-1 DO BEGIN - IF (ABS((*obs.f)[I]-(*modspec.f)[J]) $ - LT 0.2*((*obs.df)[I]+(*modspec.df)[J]) AND I LT obs.nfband) THEN BEGIN - ;print,'commons :',I,J,(*obs.f)[I],(*modspec.f)[J],(*obs.df)[I],(*modspec.df)[J] - fo(nfc)=I - fm(nfc)=J - IF (nfc LT nfmax-1) THEN nfc=nfc+1 - ENDIF - ENDFOR - ENDFOR - ENDIF ELSE BEGIN - nfc=1 - fo(0)=0 - fm(0)=0 - ENDELSE - ntimec=0L - I=0L - J=0L - dtm=abs((*modspec.dates)[2].jday-(*modspec.dates)[1].jday) - WHILE (J LT modspec.ntime) DO BEGIN - ; -; Finds common times -; - found=0 - WHILE (found EQ 0) AND (I LT obs.ntime) AND (J LT modspec.ntime) DO BEGIN - t1=((*obs.dates)[I].jday-(*obs.dates)[I].zone/24.0d) - t2=((*modspec.dates)[J].jday-(*modspec.dates)[J].zone/24.0d) - IF (ABS(t1 -t2) LT 0.3*dtm) THEN BEGIN - dateo(ntimec)=I - datem(ntimec)=J - ntimec=ntimec+1 - I=I+1 - J=J+1 - found=1 - ENDIF ELSE BEGIN - IF ((t1 GT t2) OR (I EQ obs.ntime)) THEN BEGIN - J=J+1 - ENDIF ELSE BEGIN - I=I+1 - ENDELSE - IF (J EQ modspec.ntime) THEN I=I+1 - ENDELSE - ENDWHILE - IF (I EQ obs.ntime) THEN J=J+1 - ENDWHILE - om.nvar=nvarc - om.nfband=nfc - om.np=npc - om.ntime=ntimec - print,'commons :',npc,nvarc,nfc,ntimec - WIDGET_CONTROL,Wright(12,5),SET_SLIDER_MAX=nfc - findex2=max(nfc,findex2) - IF (nvarc*nfc*npc*ntimec NE 0) THEN BEGIN - om.vm=PTR_NEW(vm(0:nvarc-1)) - om.vo=PTR_NEW(vo(0:nvarc-1)) - om.fm=PTR_NEW(fm(0:nfc-1)) - om.fo=PTR_NEW(fo(0:nfc-1)) - om.pm=PTR_NEW(pm(0:npc-1)) - om.po=PTR_NEW(po(0:npc-1)) - om.datem=PTR_NEW(datem(0:ntimec-1)) - om.dateo=PTR_NEW(dateo(0:ntimec-1)) - WIDGET_CONTROL,Wright(1,1),SET_VALUE=STRCOMPRESS((*obs.varnames)[*om.vo]) - WIDGET_CONTROL,Wright(11,3),SET_VALUE=STRCOMPRESS((*obs.pnames)[*om.po]) - - IF (obs.nabin GT 1) THEN WIDGET_CONTROL,Wright(1,2),SET_VALUE= $ - ['TS Bulk','Time series','f-spectrum', $ - 'Averaged f-spectrum','f-time plot','f-theta spec'] $ - ELSE IF (nfc GT 1) THEN WIDGET_CONTROL,Wright(1,2),SET_VALUE= $ - ['TS Bulk','Time series','f-spectrum','Averaged f-spectrum', $ - 'scatter plot','Diff vs fp','Q-Q plot', $ - 'Diff vs val','Binned plot','var U10,Hs'] $ - ELSE WIDGET_CONTROL,Wright(1,2),SET_VALUE= $ - ['Time series',' ',' ',' ','scatter plot','Q-Q plot','binned plot','var U10,Hs'] - ; Adjusts the time sliders range to avoid errors - WIDGET_CONTROL,Wright(12,2),SET_SLIDER_MAX=om.ntime - WIDGET_CONTROL,Wright(12,4), $ - SET_SLIDER_MAX=om.ntime,SET_VALUE=om.ntime - freq=(*modspec.f)[(*om.fm)] - time=(*modspec.dates)[(*om.datem)] - nfband=om.nfband - WIDGET_CONTROL,Wright(12,0),SET_SLIDER_MAX=om.nfband - WIDGET_CONTROL,Wright(12,5),SET_SLIDER_MAX=om.nfband - IF om.nfband GT 1 THEN WIDGET_CONTROL,Wright(1,3), $ - SET_VALUE=['bulk=Hs','bulk=mss','bulk=Uss','bulk=Ussd','bulk=varu','bulk=alpha','bulk=T01','bulk=T02'] - WIDGET_CONTROL,Wright(12,5), $ - SET_SLIDER_MAX=om.nfband,SET_VALUE=om.nfband - IF findex > nfband THEN findex=1 - IF findex2 > nfband THEN findex2=nfband - - IF tindex2 GT ntimec THEN tindex2=ntimec - print,'tindex2:',tindex2,ntimeC - ENDIF ELSE BEGIN - print,'No data in common' - om.dateo=PTR_NEW(!NULL) - ENDELSE - datatype=3 - ENDIF - ENDCASE - END - - - Wright(5,1): BEGIN - filltype=ev.index - doplot - END - Wtoprow(1) : BEGIN ;file droplist - IF (ev.index GT 0) THEN BEGIN - file=DIALOG_PICKFILE(/READ, $ - PATH = PATHS(ev.index),FILTER = FILTERS(ev.index)) - IF filestatus(ev.index) THEN CLOSE,ev.index+1 - IF file NE '' THEN BEGIN - IF !VERSION.OS_FAMILY EQ 'Windows' THEN $ - spos=STRPOS(file,'\',/REVERSE_SEARCH) $ - ELSE spos=STRPOS(file,'/',/REVERSE_SEARCH) - PATHS(ev.index)=STRMID(file,0,spos+1) - filenopath=STRMID(file,spos+1,STRLEN(file)-spos-1) - filenames(ev.index)=filenopath - ReadDataFile,filenopath,ev.index,1 - ENDIF - ENDIF - END - Wright(2,1):BEGIN - datatype=4 - plotncvar=ev.index - doplot - END - Wright(1,1):BEGIN - ;plottypeold=plottype - plottype=ev.index - IF (datatype EQ 4 ) THEN BEGIN - ncivar=ncivar0+ev.index - UPDATE_WW3_TIME - ENDIF - ;plottype=plottypeold - doplot - END - Wright(1,3):BEGIN - bulktype=ev.index - doplot - END - Wright(1,2):c_cut=ev.index - Wright(3,0):addir=ev.index - Wright(3,1):adsyms=ev.index - Wright(3,2):adbathy=ev.index - Wright(4,0):adcoast=1-ev.index - Wright(4,1):adtr=1-ev.index - Wright(4,2):adtri=ev.index - Wright(4,3):adcontour=ev.index - Wright(6,1):IF ev.index GT 0 THEN BEGIN - filtersps=['*.ps','*.ps','*.ps','*.eps','*.png','*.jpg', $ - '*.tif','*.gif','*.mpg'] - print,size(filtersps) - msgs=['Sending to file ','Sending job to las1r2 ', $ - 'Sending job to col1r1 ','Saving as EPS file to ', $ - 'Saving as png file to ','Saving as JPEG file to ', $ - 'Saving as TIFF file to ','Saving as GIF file to ', $ - 'Saving as MPEG file to '] - CASE ev.index OF - 2:filep='bw.ps' - 3:filep='color.ps' - ELSE:filep=DIALOG_PICKFILE(/WRITE,PATH=pspath,FILTER=filtersps(ev.index-1)) - ENDCASE - IF filep NE '' THEN BEGIN - IF !VERSION.OS_FAMILY EQ 'Windows' THEN $ - spos=RSTRPOS(filep,'\') $ - ;spos=STRPOS(filep,'\',/REVERSE_SEARCH) $ - ELSE spos=RSTRPOS(filep,'/') - ;ELSE spos=STRPOS(filep,'/',/REVERSE_SEARCH) - pspath=STRMID(filep,0,spos+1) - print,msgs(ev.index-1),filep - - IF (ev.index LE 4) THEN BEGIN - IF ev.index EQ 4 THEN pstype=1 ELSE pstype=0 - mydevice= !D.NAME - set_plot,'ps' - DEVICE,LANGUAGE_LEVEL=2 - output=1 - !p.thick=1.0 - print,'mydevice:',mydevice - doplot - DEVICE,/CLOSE_FILE - set_plot, mydevice - IF ev.index EQ 2 THEN SPAWN,'lp -dlas1r2 bw.ps' - IF ev.index EQ 3 THEN SPAWN,'lp -dcol1r1 color.ps' - print, 'Done' - output=0 - ENDIF ELSE BEGIN - CASE ev.index OF - 5: BEGIN - image=TVRD(TRUE=1) - taille=size(image) - ymax=MIN([taille(3)-1,taille(3)*winy/mwiny+20]) - WRITE_PNG,FILEP,image(*,0:taille(2)*winx/mwinx-1,0:ymax),r_curr,g_curr,b_curr - END - 6: BEGIN - image=TVRD(TRUE=1) - taille=size(image) - WRITE_JPEG,FILEP,image,TRUE=1,QUALITY=100 - END - 7: BEGIN - image=TVRD(TRUE=1) - taille=size(image) - WRITE_TIFF,FILEP,image,COMPRESSION=0,/SHORT - END - 8: BEGIN - image=TVRD() - taille=size(image) - print,'Writing GIF file of size:',taille - WRITE_GIF,FILEP,image,r_curr,g_curr,b_curr ;,/MULTIPLE - ;WRITE_GIF,FILEP,/CLOSE - END - 9: BEGIN - image=TVRD(TRUE=1) - taille=size(image) - mpegID = MPEG_OPEN([taille(1),taille(2)]) - FOR it=tindex,ntime DO BEGIN - indext=it-1 - UPDATE_WW3_TIME - doplot - image=TVRD(TRUE=1) - taille=size(image) - iframe=tindex-it - MPEG_PUT, mpegID, IMAGE=image, FRAME=iframe - ENDFOR - MPEG_SAVE, mpegID, FILENAME=FILEP - MPEG_CLOSE, mpegID - indext=tindex-1 - END - ENDCASE - ENDELSE - ENDIF - ENDIF ELSE BEGIN - ANNOTATE - ENDELSE -; -; Extract time series from NetCDF file -; - Wright(6,2):IF datastatus(17) THEN BEGIN - NEAREST_POINT - IF (ev.index) LT 4 THEN BEGIN - ts_filetype=1 - typ=0 - modspec={specdata, typ:0, nfband:0, nabin:0, np:0, nvar:0, ntime:0L, $ - nrun:1, f1:ptr_new(), f2:ptr_new(), f:ptr_new(), df:ptr_new(), $ - theta:ptr_new(),dtheta:1.0, $ - plat:ptr_new(), plon:ptr_new(), pdepth:ptr_new(), $ - pU10:ptr_new(), pUdir:ptr_new(), $ - pCurr:ptr_new(), pCurrdir:ptr_new(), $ - pnames:ptr_new(), varnames:ptr_new(), dates: ptr_new(), $ - data:ptr_new(), flags:ptr_new(), path:ptr_new(), filename:ptr_new()} - d={date, y:0, m:0, d:0, h:0, minu:0, s:0.0, zone:0.0, jday:0.0D} - - - modspec.typ=typ - modspec.nfband=1 - modspec.nabin=1 - modspec.np=1 - modspec.nvar=1 - modspec.nrun=1 - dimtid=NCDF_DIMID(ncid,'time') - NFILES=1 - triid=NCDF_VARID(ncid,'tri') - IF (triid EQ -1) THEN BEGIN - c_i=ROUND(c_x/dx) - c_j=ROUND(c_y/dy) - XYtoLatLon,c_x,c_y,latdeg,latmin,londeg,lonmin,latlonstring,latlonstring2 - ENDIF ELSE XYtoLatLon,gridmat(0,c_gp),gridmat(1,c_gp),latdeg,latmin, $ - londeg,lonmin, latlonstring,latlonstring2 - - varn=STRARR(modspec.nvar) - varn='data from NC' - modspec.varnames=ptr_new(varn) - - varp=STRARR(modspec.np) - varp='Point' - modspec.pnames=ptr_new(varp) - temp=fltarr(1) - modspec.f=ptr_new(temp) - modspec.theta=ptr_new(temp) - modspec.df=ptr_new(temp) - - IF (ev.index) EQ 2 OR (ev.index) EQ 3 THEN BEGIN - myfile=filenames(17) - lasti = STRPOS(myfile, '_', /REVERSE_SEARCH) - PATTERN='*'+STRMID(myfile,lasti+1) - FILESOK=FILE_SEARCH(paths(17), PATTERN) - NN=SIZE(FILESOK) - NFILES=NN(1) - NCDF_CLOSE,ncid - ncid=NCDF_OPEN(FILESOK(0),/NOWRITE) - ENDIF - - ntt=0 - FOR IFILE=0,NFILES-1 DO BEGIN - NCDF_DIMINQ,ncid,dimtid,timename,nt - IF (triid EQ -1) THEN BEGIN - READ_CDF,[1,1,nt],[c_i,c_j,0],times1,varnorm,vardir,varname - ENDIF ELSE BEGIN - READ_CDF,[1,nt],[C_gp-1,0],times1,varnorm,vardir,varname - ENDELSE - ntt=ntt+nt - data=FLTARR(1,modspec.np,modspec.nvar,modspec.nfband,modspec.nabin,ntt) - times=DBLARR(ntt) - IF (ntt GT nt) THEN BEGIN - data(0,0,0,0,0,0:ntt-nt-1)=dataold - times(0:ntt-nt-1)=timesold - ENDIF - data(0,0,0,0,0,ntt-nt:ntt-1)=varnorm - times(ntt-nt:ntt-1)=times1 - dataold=data - timesold=times - IF (NFILES GT 1) THEN BEGIN - NCDF_CLOSE,ncid - IF (IFILE LT NFILES-1) THEN NEWFILE = FILESOK(IFILE+1) ELSE $ - NEWFILE = paths(17)+filenames(17) - ncid=NCDF_OPEN(NEWFILE,/NOWRITE) - message,'Reading ' + NEWFILE,/INFO - ENDIF - ENDFOR - - - modspec.ntime=ntt - - temp=INTARR(ntt)+1 - modspec.flags=ptr_new(temp) - - modspec.data=ptr_new(data) - d={date, y:0, m:0, d:0, h:0, minu:0, s:0.0, zone:0.0, jday:0.0D} - dar=REPLICATE({date},ntt) - - FOR I=0,ntt-1 DO BEGIN - CALDAT,times(i),m,d,y,h,minu,sec - dar[i].y=y - dar[i].d=d - dar[i].m=m - dar[i].h=h - dar[i].minu=minu - dar[i].s=sec - dar[i].zone=0. ;zone - dar[i].jday=times(i) - ENDFOR - modspec.dates=ptr_new(dar(0:I-1)) - datastatus(10)=1 - c_cut=0 - ENDIF -; -; Writes time series to file -; - IF (ev.index) EQ 2 OR (ev.index) EQ 3 THEN BEGIN - GET_LUN,unit - OPENW,unit,'series_from_NC.txt' - PRINTF,unit,'Time series for point:',latlonstring,' // ',latlonstring2 - FOR I=0,ntt-1 DO BEGIN - PRINTF,unit,dar[i].y,dar[i].m,dar[i].d,dar[i].h,dar[i].minu, $ - dar[i].s,data(0,0,0,0,0,i), $ - FORMAT='(I4,X,I2,X,I2,X,I2,X,I2,X,F3.1,X,F13.4)' - ENDFOR - CLOSE,unit - free_lun,unit - ENDIF -; - IF (ev.index) EQ 4 THEN BEGIN - triid=NCDF_VARID(ncid,'tri') -; -; Gets date strings for first time step -; - timeid=NCDF_VARID(ncid,'time') - NCDF_VARGET,ncid,timeid,timenow,COUNT=1,OFFSET=0 - GET_LUN,unit - OPENW,unit,'map_from_NC.txt' - PRINTF,unit,'longitude, latitude, ',ww3fieldname,' at time (MM/DD/YYYY) ',ww3date,' ',ww3time - PRINTF,unit,'missing values: ',-2.*maxval -; -; Case of structured grids -; - IF (triid EQ -1) THEN BEGIN - PRINTF,unit,'Number of points: ',NX*NY - FOR I=0,NX-1 DO BEGIN - FOR J=0,NY-1 DO BEGIN - PRINTF,unit,ww3lon(I),ww3lat(J),ww3matrix(I,J),FORMAT='(F11.6,X,f11.6,X,G12.6)' - ENDFOR - ENDFOR - ENDIF ELSE BEGIN - NCDF_VARGET,ncid,triid,ww3tri - PRINTF,unit,'Number of points: ',NNGP - FOR I=0,NNGP-1 DO BEGIN - PRINTF,unit,ww3lon(I),ww3lat(I),ww3matrix(I,0),FORMAT='(F10.6,X,f10.6,X,G12.6)' - ENDFOR - ENDELSE - CLOSE,unit - free_lun,unit - ENDIF - - ENDIF - - - - - Wright(11,3): c_spec=ev.index - ENDCASE - WIDGET_CONTROL, Wdraw, SENSITIVE=1 - END - 'WIDGET_TEXT_CH': BEGIN - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE (ev.id) OF - Wright(9,1): mindepth=FLOAT(value(0)) - Wright(9,3): maxdepth=FLOAT(value(0)) - Wright(11,1): IF (FLOAT(value(0)) EQ FIX(value(0))) THEN BEGIN - c_gp=FIX(value(0)) - ENDIF ELSE BEGIN - real1=0. - real2=0. - READS,value(0),c_lon,c_lat - IF N_ELEMENTS(C_X) GT 0 THEN print,'TEST1:',c_x,c_y - C_x = !values.F_NaN - NEAREST_POINT - print,'TEST2:',c_x,c_y - ENDELSE - ENDCASE - END - 'WIDGET_SLIDER': BEGIN - - WIDGET_CONTROL, ev.id, GET_VALUE=value - CASE (ev.id) OF - Wright(12,0): BEGIN - findex=FIX(value) - IF (findex2 LE findex) THEN findex=findex2-1 - IF (findex LT 1) THEN findex=1 - WIDGET_CONTROL,Wright(12,0), SET_VALUE=findex - - IF (datatype EQ 4 AND plottype EQ 2) THEN BEGIN - UPDATE_WW3_TIME - ENDIF - END - Wright(12,5): BEGIN - findex2=FIX(value) -print,'TEST1:',findex,findex2,nfband - IF (findex2 LT findex) THEN findex2=findex+1 - IF (findex GE nfband) THEN findex=nfband-1 - WIDGET_CONTROL,Wright(12,5), SET_VALUE=findex2 - IF (datatype EQ 4 AND plottype EQ 2) THEN BEGIN - UPDATE_WW3_TIME - ENDIF -print,'TEST2:',findex,findex2 - END - Wright(12,1): BEGIN - aindex=FIX(value) - END - - Wright(12,2): BEGIN - tindex=LONG(value) - IF (tindex LT 1) THEN tindex=1 - IF (tindex2 LT tindex) THEN tindex=tindex2 - WIDGET_CONTROL,Wright(12,2), SET_VALUE=tindex - - indext=tindex-1 - IF (datatype EQ 4 ) THEN BEGIN - UPDATE_WW3_TIME - ENDIF ELSE BEGIN - - - - IF N_elements(Hsc) NE 0 THEN BEGIN - gd(*,*)=Hsc(indext,*,*) - ENDIF - IF datatype LT 4 THEN BEGIN - zs=' UTC' - assos=STRING(time[indext].m,FORMAT='(I2)')+'/'+ $ - STRING(time[indext].d,FORMAT='(I2)')+'/'+ $ - STRING(time[indext].y,FORMAT='(I4)')+' '+ $ - STRING(time[indext].h,FORMAT='(I2)')+':'+ $ - STRING(time[indext].minu,FORMAT='(I2)')+' UTC' - z=time[indext].zone - IF (z EQ -5) THEN zs=' EST' ELSE $ - IF (z NE 0) THEN BEGIN - IF (z < 0) THEN zs=zs+'-'+STRING(ABS(z),FORMAT='(f3.1)') $ - ELSE zs=zs+'+'+STRING(ABS(z),FORMAT='(f3.1)') - ENDIF - ; WIDGET_CONTROL,Wright(13,2),SET_VALUE=assos+zs - ENDIF - ENDELSE - END - Wright(12,4): BEGIN - tindex2=LONG(value) - IF (tindex2 LT tindex) THEN tindex2=tindex - WIDGET_CONTROL,Wright(12,4), SET_VALUE=tindex2 - END - ENDCASE - doplot - ;IF (ev.id NE Wright(12,2)) THEN doplot - END - ENDCASE - RETURN -END - -;---------------------------------------------------------------------------- -PRO Time1toDate,dayi,date,hour -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON LANGUAGE, ilang,dictionnaire - ;converts a time in juldays - ;to date and hour strings using julian day functions of IDL - CALDAT,dayi,month,day,year,h,min,sec - date='01/01/1994' - IF ilang GT 0 THEN BEGIN - date='01/01/1994' - STRPUT,date,STRING([48b+BYTE(month/10),48b+BYTE(month MOD 10)]),3 - STRPUT,date,STRING([48b+BYTE(day/10),48b+BYTE(day MOD 10)]),0 - ENDIF ELSE BEGIN - date='01/01/1994' - STRPUT,date,STRING([48b+BYTE(month/10),48b+BYTE(month MOD 10)]),0 - STRPUT,date,STRING([48b+BYTE(day/10),48b+BYTE(day MOD 10)]),3 - ENDELSE - STRPUT,date,STRING([48b+BYTE((year MOD 10000)/1000),48b+BYTE((year MOD 1000)/100), $ - 48b+BYTE((year MOD 100)/10),48b+BYTE(year MOD 10)]),6 - hour='00:00 '+timezone_string - STRPUT,hour,STRING([48b+BYTE(h/10),48b+BYTE(h MOD 10)]),0 - STRPUT,hour,STRING([48b+BYTE(min/10),48b+BYTE(min MOD 10)]),3 -END -;---------------------------------------------------------------------------- -PRO TimetoDate,dayi,timei,date,hour -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON LANGUAGE, ilang,dictionnaire - ;converts a time in minutes (counted from julian day dayi at 0:00) - time2=timei+30.d*365.d*60.d*24.d - ;to date and hour strings using julian day functions of IDL - CALDAT,dayi+FIX(timei/(60*24)),month,day,year - h=((time2 MOD (60*24))/ 60.d) - h=(h MOD 24) - min=(time2 MOD 60) - date='01/01/1994' - IF ilang GT 0 THEN BEGIN - date='01/01/1994' - STRPUT,date,STRING([48b+BYTE(month/10),48b+BYTE(month MOD 10)]),3 - STRPUT,date,STRING([48b+BYTE(day/10),48b+BYTE(day MOD 10)]),0 - ENDIF ELSE BEGIN - date='01/01/1994' - STRPUT,date,STRING([48b+BYTE(month/10),48b+BYTE(month MOD 10)]),0 - STRPUT,date,STRING([48b+BYTE(day/10),48b+BYTE(day MOD 10)]),3 - ENDELSE - STRPUT,date,STRING([48b+BYTE((year MOD 10000)/1000),48b+BYTE((year MOD 1000)/100), $ - 48b+BYTE((year MOD 100)/10),48b+BYTE(year MOD 10)]),6 - hour='00:00 '+timezone_string - STRPUT,hour,STRING([48b+BYTE(h/10),48b+BYTE(h MOD 10)]),0 - STRPUT,hour,STRING([48b+BYTE(min/10),48b+BYTE(min MOD 10)]),3 -END - -;---------------------------------------------------------------------------- -PRO LatLondegtomin,latdegi,londegi,latdeg,latmin,londeg,lonmin,latlonstring -;+ -; NAME: LatLondegtomin -; PURPOSE: converts X,Y coordinates into latitude and longitude -; (negative for west and south) -; with decimal minutes and a latlon string, -; e.g.: 36d40.500'N 74d22.100'W -; -; CALLING SEQUENCE: XYtoLatLon,x,y -; INPUT: x and y in kilometers -; OUTPUT: latdeg and londeg in degrees, latmin and lonmin in minutes -; if west or south, both minutes and degrees are negative -; COMMON BLOCKS: bathy -;- -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON LANGUAGE, ilang,dictionnaire - - IF londegi GT 180. THEN londegi=londegi-360. - londeg=FLOOR(londegi) - IF londeg LT 0 THEN londeg=londeg+1 - lonmin=(londegi-londeg)*60. - latdeg=FLOOR(latdegi) - IF latdeg LT 0 THEN latdeg=latdeg+1 - latmin=(latdegi-latdeg)*60. ;***check for negative values - ;latlonstring='36d40.500`N 74d22.100`'+dictionnaire.Wdir(ilang) - latlonstring='36d40.500`N 74d22.100`W' - STRPUT,latlonstring,string(ABS(latdeg),format='(I2)'),0 - STRPUT,latlonstring,string(ABS(latmin),format='(f6.3)'),3 - STRPUT,latlonstring,string(ABS(londeg),format='(I3)'),12 - STRPUT,latlonstring,string(ABS(lonmin),format='(f6.3)'),16 - IF (FLOAT(latdeg)+latmin) LT 0. THEN STRPUT,latlonstring,'S',10 - IF (FLOAT(londeg)+lonmin) GE 0. THEN STRPUT,latlonstring,'E',23 -END - -;---------------------------------------------------------------------------- -PRO XYtoLatLon,x,y,latdeg,latmin,londeg,lonmin,latlonstring,latlonstring2 -;+ -; NAME: XYtoLatLon -; PURPOSE: converts X,Y coordinates into latitude and longitude -; (negative for west and south) -; with decimal minutes and a latlon string, -; e.g.: 36d40.500'N 74d22.100'W -; -; CALLING SEQUENCE: XYtoLatLon,x,y -; INPUT: x and y in kilometers -; OUTPUT: latdeg and londeg in degrees, latmin and lonmin in minutes -; if west or south, both minutes and degrees are negative -; COMMON BLOCKS: bathy -;- -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -COMMON MAPPOLE, XPOLE, YPOLE, SLAT, RE, E2, E - - IF (MAPLONLAT LE 1) THEN BEGIN - dlon=rlonmax-rlonmin - dlat=rlatmax-rlatmin - lonmin=rlonmin+x*dlon/(dx*(nx-1)) - latmin=rlatmin+y*dlat/(dy*(ny-1)) - ENDIF ELSE BEGIN - MAPXY,X,Y,latmin,lonmin,1 - ENDELSE - lonmin=(lonmin-360*ROUND(FLOAT(lonmin)/360)) ;gives a longitude between -180 and 180 - londec=lonmin - londeg=FLOOR(lonmin) - IF londeg LT 0 THEN londeg=londeg+1 - lonmin=(lonmin-londeg)*60. - latdec=latmin - latdeg=FLOOR(latmin) - IF latdeg LT 0 THEN latdeg=latdeg+1 - latmin=(latmin-latdeg)*60. ;***check for negative values - latlonstring='36d40.500`N 74d22.100`W' - STRPUT,latlonstring,string(ABS(latdeg),format='(I2)'),0 - STRPUT,latlonstring,string(ABS(latmin),format='(f6.3)'),3 - STRPUT,latlonstring,string(ABS(londeg),format='(I3)'),12 - STRPUT,latlonstring,string(ABS(lonmin),format='(f6.3)'),16 - IF (FLOAT(latdeg)+latmin) LT 0. THEN STRPUT,latlonstring,'S',10 - IF (FLOAT(londeg)+lonmin) GE 0. THEN STRPUT,latlonstring,'E',23 - latlonstring2='36.000000N 74.000000W' - IF (latdec) LT 0. THEN STRPUT,latlonstring2,'S',9 - IF (londec) GE 0. THEN STRPUT,latlonstring2,'E',21 - STRPUT,latlonstring2,string(ABS(latdec),format='(f9.6)'),0 - STRPUT,latlonstring2,string(ABS(londec),format='(f10.6)'),11 -END - - -;---------------------------------------------------------------------------- -PRO LatLontoXY,latdeg,latmin,londeg,lonmin,x,y -;+ -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -COMMON MAPPOLE, XPOLE, YPOLE, SLAT, RE, E2, E -; -; NAME: LatlontoXY -; PURPOSE: converts latitude and longitude into X,Y coordinates -; (negative for west and south) -; with decimal minutes -; -; CALLING SEQUENCE: LatLontoXY,latdeg,latmin,londeg,lonmin -; INPUT: latdeg and londeg in degrees, latmin and lonmin in minutes -; OUTPUT: x and y in kilometers -; COMMON BLOCKS: bathy -;- -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -; - IF (MAPLONLAT EQ 2) THEN BEGIN - mapll,xx,yy,FLOAT(latdeg)+latmin/60.,FLOAT(londeg)+lonmin/60.,1 - X=xx+XPOLE - Y=yy+YPOLE - ENDIF ELSE BEGIN - lon=FLOAT(londeg)+(lonmin/60.) - IF lon-rlonmin GT 360 THEN lon=lon-360*(FLOOR((FLOAT(londeg)-rlonmin)/360)) - IF rlonmax-lon GT 360 THEN lon=lon-360*(FLOOR((rlonmax-FLOAT(londeg))/360)) - X=(nx-1)*dx*(lon-rlonmin)/ABS(rlonmax-rlonmin) - Y=(ny-1)*dy*(FLOAT(latdeg)+latmin/60.-rlatmin)/ABS(rlatmax-rlatmin) - ENDELSE -END - - - - -;----------------------------------------------------------------------------- -PRO NEAREST_POINT -;+ -; NAME: NEAREST_POINT -; PURPOSE: Finds nearest point either in a triangle-based grid or a regular grid -; (i.e. action on a widget) as they occur -; CALLING SEQUENCE: NEAREST_POINT - -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y,c_lon,c_lat -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple - -;*******END OF COMMON BLOCKS******************************* -; - IF (FINITE(c_x) EQ 0) THEN BEGIN - lat=c_lat - lon=c_lon - print,'Looking for nearest point:',c_lon,c_lat - latdeg=FLOOR(lat) - IF latdeg LT 0 THEN latdeg=latdeg+1 - londeg=FLOOR(lon) - IF londeg LT 0 THEN londeg=londeg+1 - latmin=(lat-latdeg)*60. - lonmin=(lon-londeg)*60. - LatLontoXY,latdeg,latmin,londeg,lonmin,c_x,c_y - ENDIF -; - IF datastatus(5) THEN BEGIN ;changes the current grid point - c_gp=0 - distmin=(c_x-gridmat(0,0))^2+(c_y-gridmat(1,0))^2 - FOR I=1L,nngp-1 DO BEGIN - dist=(c_x-gridmat(0,I))^2+(c_y-gridmat(1,I))^2 - IF (dist LT distmin) THEN BEGIN - c_gp=I - distmin=dist - ENDIF - ENDFOR - c_x=gridmat(0,c_gp) - c_y=gridmat(1,c_gp) - c_gp=c_gp+1 - PRINT,'Nearest point from triangles:',c_gp - ENDIF ELSE BEGIN - WIDGET_CONTROL,Wright(11,1), SET_VALUE=STRCOMPRESS(STRING(c_x),/REMOVE_ALL) - c_i=MIN([MAX([nxzmin,ROUND(c_x/dx)]),nxzmax]) - c_j=MIN([MAX([nyzmin,ROUND(c_y/dy)]),nyzmax]) - c_x=dx*(c_i) - c_y=dy*(c_j) - PRINT,'Nearest point: (',c_i,',',c_j,')' - ENDELSE - XYtoLatLon,c_x,c_y,latdeg,latmin,londeg,lonmin,latlonstring,latlonstring2 - c_lat=latdeg+latmin/60. - c_lon=londeg+lonmin/60. - print,'Actual position of point:',c_lon,c_lat - print,'Actual position of point, X, Y in km:',c_x,c_y - - END - - - -;---------------------------------------------------------------------------- -PRO Speeds,H,f,cphi,cg,KH - - tpi=6.2831853 - sig=tpi*f - g=9.81 - a=H*sig*sig/g - ga=-1.84 - IF(a ge 1.) THEN BEGIN - yhat=a*(1.+1.26*exp(ga*a)) - t=exp((-2.)*yhat) - KH=a*(1.+2.*t*(1.+t)) - ENDIF ELSE BEGIN - KH=sqrt(a)*(1.+a/6.*(1+a/5.)) - ENDELSE - dk=KH/H - cphi=tpi*f/dk - cg=g*((a/KH)+KH*(1-(a/KH)^2))/(2.*sig) - - RETURN -END - -;---------------------------------------------------------------------------- -PRO Colorbar,levels,cbtit,truemin,truemax -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON OVERLAY, addir,adsyms,adbathy,adcoast,psyms,psymsizes,adtr,adtri - -; -; Position of the colorbar in the page (normalized coordinantes) -; - POSCB=[blx*cbblx*winx/mwinx,bly*cbbly*winy/mwiny,trx*cbtrx*winx/mwinx,bly*cbtry*winy/mwiny] - nulevels=N_ELEMENTS(levels)-addmini-addmaxi - ncolind2=SIZE(colorind) - ncolind=ncolind2(1) - xcb=levels(addmini:addmini+nulevels-1) - ycb=[1] - IF xcb(nulevels-1) GT xcb(0) THEN BEGIN - PLOT,xcb,ycb,XSTYLE=cbexrange+4,YSTYLE=4,XTICKS=cbnticks, $ - POSITION=POSCB,/NOERASE,XRANGE=[xcb(0),xcb(nulevels-1)],XTICK_GET=XV - AXIS,XAXIS=0,TICKLEN=-0.15,XTICKS=cbnticks,XSTYLE=cbexrange,XTITLE=cbtit, $$ - XRANGE=[xcb(0),xcb(nulevels-1)] - IF truemin GE xcb(0) THEN BEGIN - IF truemax GT xv(cbnticks) THEN BEGIN - FOR I=0,nulevels-2 DO $ - POLYFILL,[xcb(i),xcb(i),xcb(i+1),xcb(i+1)],[0,1,1,0],COLOR=colorind(I) - POLYFILL,[xv(cbnticks),xv(cbnticks),xcb(nulevels-1),xcb(nulevels-1)], $ - [0,1,1,0],COLOR=colorind(N_ELEMENTS(colorind)-2) - trix=[xv(cbnticks),1.05*xv(cbnticks)-0.05*xv(0),xv(cbnticks)] - triy=[1,0.5,0] - IF filloutofrange THEN POLYFILL,trix,triy,COLOR=colorind(N_ELEMENTS(colorind)-1) - PLOTS,trix,triy - FOR I=0,nulevels-2 DO $ - POLYFILL,[xcb(i),xcb(i),xcb(i+1),xcb(i+1)],[0,1,1,0],COLOR=colorind(I) - ENDIF ELSE BEGIN - FOR I=0,nulevels-2 DO $ - POLYFILL,[xcb(i),xcb(i),xcb(i+1),xcb(i+1)],[0,1,1,0],COLOR=colorind(I) - ENDELSE - ENDIF ELSE BEGIN - IF truemax LE xv(cbnticks) THEN BEGIN -; FOR I=0,nulevels-2 DO $ - FOR I=0,nulevels-3 DO $ - POLYFILL,[xcb(i),xcb(i),xcb(i+1),xcb(i+1)],[0,1,1,0],COLOR=colorind(I+1) - IF cbexrange EQ 0 THEN POLYFILL,[xv(0),xv(0),xcb(0),xcb(0)],[0,1,1,0],COLOR=colorind(0) - trix=[xv(0),1.05*xv(0)-0.05*xv(cbnticks),xv(0)] - triy=[1,0.5,0] - IF filloutofrange THEN POLYFILL,trix,triy,COLOR=colorind(0) - IF (datatype EQ 4) AND (plottype EQ 0) AND (adcoast) AND (xv(0) EQ 0) $ - THEN POLYFILL,trix,triy,color=0 - PLOTS,trix,triy - ENDIF ELSE BEGIN - TAILLE=SIZE(colorind); - INDMAX=TAILLE(1) - FOR I=0,nulevels-2 DO BEGIN - ; POLYFILL,[xcb(i),xcb(i),xcb(i+1),xcb(i+1)],[0,1,1,0],COLOR=MIN([colorind(I+1),ncolind-1]) - POLYFILL,[xcb(i),xcb(i),xcb(i+1),xcb(i+1)],[0,1,1,0],COLOR=colorind(MIN([INDMAX-1,I+1])) - ENDFOR - IF cbexrange EQ 0 THEN BEGIN - POLYFILL,[xv(cbnticks),xv(cbnticks),xcb(nulevels-1),xcb(nulevels-1)], $ - [0,1,1,0],COLOR=colorind(N_ELEMENTS(colorind)-1) - POLYFILL,[xv(0),xv(0),xcb(0),xcb(0)],[0,1,1,0],COLOR=colorind(0) - ENDIF - trix=[xv(cbnticks),1.05*xv(cbnticks)-0.05*xv(0),xv(cbnticks)] - triy=[1,0.5,0] -;TV IF filloutofrange THEN POLYFILL,trix,triy,COLOR=colorind(N_ELEMENTS(colorind)-2) - IF filloutofrange THEN POLYFILL,trix,triy,COLOR=colorind(N_ELEMENTS(colorind)-1) - PLOTS,trix,triy - trix=[xv(0),1.05*xv(0)-0.05*xv(cbnticks),xv(0)] - triy=[1,0.5,0] - IF filloutofrange THEN POLYFILL,trix,triy,COLOR=colorind(0) - IF (datatype EQ 4) AND (plottype EQ 0) AND (adcoast) AND (xv(0) EQ 0) $ - THEN POLYFILL,trix,triy,color=Navailcolor-4 - PLOTS,trix,triy - ENDELSE - ENDELSE - - AXIS,XAXIS=0,XTICKS=cbnticks,TICKLEN=1.,XTICKNAME=REPLICATE(' ',cbnticks+1,1),XSTYLE=cbexrange - AXIS,XAXIS=1,XTICKS=1,TICKLEN=0.,XTICKNAME=[' ',' '],XSTYLE=cbexrange - AXIS,YAXIS=0,YTICKS=1,TICKLEN=0.,YTICKNAME=[' ',' '],YSTYLE=1 - AXIS,YAXIS=1,YTICKS=1,TICKLEN=0.,YTICKNAME=[' ',' '],YSTYLE=1 - ENDIF -END - -;----------------------------------------------------------------------------- -PRO Drawframe,xtit0,xtit1,ytit0,ytit1,frame=imposed_frame -;+ -; NAME: -; Drawframe -; PURPOSE: -; Draws axes around plot -; CALLING SEQUENCE: -; Drawframe,frametype -; INPUTS: -; frametype: integer, specifies the type of frame -; 0:no frame -; 1:"normal" -; 2:mixed lat-lon and cartesian -; 3: -; COMMON BLOCKS: -; DRAWING,TITLES,BATHY -; FREQ,DIR,TIME -; COMMENTS -; The ranges must be already set by the variables rangex -; and rangey before calling this procedure -; MODIFICATION HISTORY: Created 10/3/99 -;----------------------------------------------------------------------------- -COMMON AXISFRAME,axis_orient,frametype,outx1lab,outx2lab,outy1lab,outy2lab -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT - - nonames=REPLICATE(' ',30) - nonames=REPLICATE(' ',30) - - IF N_ELEMENTS(imposed_frame) NE 0 THEN frame=imposed_frame ELSE $ - frame=1+MAPLONLAT - CASE frame of - 0: ; No frame - 1:BEGIN - tickn=REPLICATE(' ',30) - IF outxtit THEN xtit='x (km)' ELSE xtit=' ' - AXIS,XRANGE=rangex,XAXIS=0,XSTYLE=1,XTITLE=xtit, XMINOR=5 - AXIS,XRANGE=rangex,XAXIS=1,XSTYLE=1,XTICKNAME=tickn - IF outytit THEN ytit='y (km)' ELSE ytit=' ' - AXIS,YRANGE=rangey,YAXIS=0,YSTYLE=1,YTITLE=ytit,YMINOR=5 - AXIS,YRANGE=rangey,YAXIS=1,YSTYLE=1,YTICKNAME=tickn - END - 2:BEGIN - ; This frame shows Longitude on the X axis below the plot - ; And latitude on the y axix on the left of the plot - latdeg=0. - latmin=0. - londeg=0. - lonmin=0. - latlonstring='' - XYtoLatLon,rangex(0),rangey(0), $ - latdeg,latmin,londeg,lonmin,latlonstring - y2min=latdeg+latmin/60. - x2min=londeg+lonmin/60. - XYtoLatLon,rangex(1),rangey(1), $ - latdeg,latmin,londeg,lonmin,latlonstring - x2max=londeg+lonmin/60. - IF x2max LE x2min THEN x2max=x2max+360. - rangex2=[x2min,x2max] - rangey2=[y2min,latdeg+latmin/60.] - - ;**********x axes****************** - - IF (rangex2(1)*rangex2(0) LT 0) THEN BEGIN - ; If the range covers positive and neg. values - AXIS,XRANGE=rangex2,XAXIS=0,XSTYLE=5,XMINOR=4,XTICK_GET=XV, $ - XTICKNAME=nonames - siz=SIZE(XV) - xnames=nonames(0:siz(1)-1) - IF outx2lab THEN BEGIN - FOR I=0,siz(1)-1 DO BEGIN - name=' 75d `' - lonmin=XV(I) - londeg=FLOOR(lonmin) - IF londeg LT 0 AND (FLOAT(londeg)-lonmin LT -0.001) $ - THEN londeg=londeg+1 - lonmin=(lonmin-londeg)*60. - STRPUT,name,string(londeg,format='(I4)'),0 - STRPUT,name,string(ROUND(ABS(lonmin)),format='(I2)'),5 - xnames(I)=name - ENDFOR - ENDIF - IF outxtit THEN xtit='Longitude' ELSE xtit=' ' - ; Plots the axis with the longitude - AXIS,XRANGE=rangex2,XAXIS=0,XSTYLE=1,XMINOR=4,XTITLE=xtit, $ - XTICKNAME=xnames - AXIS,XRANGE=rangex2,XAXIS=1,XSTYLE=1,XMINOR=4, $ - XTICKNAME=nonames - ENDIF ELSE BEGIN - IF (ABS(FLOOR(rangex2(1))-FLOOR(rangex2(0))) GT 10) THEN BEGIN - ; If the range covers more than 10 degrees - AXIS,XRANGE=rangex2,XAXIS=0,XSTYLE=5,XMINOR=4,XTICK_GET=XV, $ - XTICKNAME=nonames - siz=SIZE(XV) - xnames=nonames(0:siz(1)-1) - IF outx2lab THEN BEGIN - FOR I=0,siz(1)-1 DO BEGIN - name=' 75d' - lonmin=XV(I) - londeg=FLOOR(lonmin) - IF londeg LT 0 AND (FLOAT(londeg)-lonmin LT -0.001) $ - THEN londeg=londeg+1 - STRPUT,name,string(ABS(londeg),format='(I3)'),0 - xnames(I)=name - ENDFOR - ENDIF - IF XV(0) LT 0 THEN hemi='W' ELSE hemi='E' - IF (ABS(FLOOR(rangex2(1))-FLOOR(rangex2(0))) GT 180) THEN BEGIN - IF outxtit THEN xtit='Longitude' ELSE xtit=' ' - ENDIF ELSE BEGIN - IF outxtit THEN xtit='Longitude ('+hemi+')' ELSE xtit=' ' - ENDELSE - ; Plots the axis with the longitude - AXIS,XRANGE=rangex2,XAXIS=0,XSTYLE=1,XMINOR=4,XTITLE=xtit, $ - XTICKNAME=xnames - AXIS,XRANGE=rangex2,XAXIS=1,XSTYLE=1,XMINOR=4, $ - XTICKNAME=nonames - ENDIF ELSE BEGIN - - IF (FLOOR(rangex2(1)) NE FLOOR(rangex2(0))) THEN BEGIN - ; If the range covers more than one degree - AXIS,XRANGE=rangex2,XAXIS=0,XSTYLE=5,XMINOR=4,XTICK_GET=XV, $ - XTICKNAME=nonames - siz=SIZE(XV) - xnames=nonames(0:siz(1)-1) - IF outx2lab THEN BEGIN - FOR I=0,siz(1)-1 DO BEGIN - name=' 75d40`' - lonmin=XV(I) - londeg=FLOOR(lonmin) - IF londeg LT 0 AND (FLOAT(londeg)-lonmin LT -0.001) $ - THEN londeg=londeg+1 - lonmin=(lonmin-londeg)*60. - STRPUT,name,string(ABS(londeg),format='(I3)'),0 - STRPUT,name,string(ROUND(ABS(lonmin)),format='(I2)'),4 - xnames(I)=name - ENDFOR - ENDIF - IF XV(0) LT 0 THEN hemi='W' ELSE hemi='E' - IF outxtit THEN xtit='Longitude ('+hemi+')' ELSE xtit=' ' - ; Plots the axis with the longitude - AXIS,XRANGE=rangex2,XAXIS=0,XSTYLE=1,XMINOR=4,XTITLE=xtit, $ - XTICKNAME=xnames - ENDIF ELSE BEGIN - ; If the range covers less than one degree - AXIS,XRANGE=rangex2*60.,XAXIS=0,XSTYLE=5,XMINOR=4,XTICK_GET=XV, $ - XTICKNAME=nonames - siz=SIZE(XV) - xnames=nonames(0:siz(1)-1) - IF outx2lab THEN BEGIN - FOR I=0,siz(1)-1 DO BEGIN - name='40.00`' - lonmin=XV(I) - londeg=FLOOR(lonmin/60.) - IF londeg LT 0 AND (FLOAT(londeg*60)-lonmin LT 0.001) $ - THEN londeg=londeg+1 - lonmin=(lonmin-londeg*60) - STRPUT,name,string(ABS(lonmin),format='(F5.2)'),0 - xnames(I)=name - ENDFOR - ENDIF - IF XV(0) LT 0 THEN hemi='W' ELSE hemi='E' - IF outxtit*outx2lab THEN xtit='Longitude ('+ $ - string(ABS(londeg),format='(I3)')+'d'+hemi+')' ELSE xtit=' ' - AXIS,XRANGE=rangex2*60,XAXIS=0,XSTYLE=1,XMINOR=4,XTITLE=xtit, $ - XTICKNAME=xnames - ENDELSE - IF outxtit*outx1lab THEN xtit='x (km)' ELSE xtit=' ' - ; Plots the axis with the kilometers - IF outX1lab THEN $ - AXIS,XRANGE=rangex,XAXIS=1,XSTYLE=1,XMINOR=5,XTITLE=xtit $ - ELSE AXIS,XRANGE=rangex,XAXIS=1,XSTYLE=1,XMINOR=5,XTITLE=xtit, $ - XTICKNAME=nonames - ENDELSE - ENDELSE - - ;**********y axes****************** - IF (rangey2(1)*rangey2(0) LT 0 AND ABS(FLOOR(rangey2(1)) -FLOOR(rangey2(0))) LE 10) THEN BEGIN - ;case where the range covers latitudes north and south of the equator - AXIS,YRANGE=rangey2,YAXIS=0,YSTYLE=5,YMINOR=4,YTICK_GET=YV, $ - YTICKNAME=nonames - siz=SIZE(YV) - ynames=nonames(0:siz(1)-1) - IF outy2lab THEN BEGIN - FOR I=0,siz(1)-1 DO BEGIN - name=' 75d40` ' - latmin=YV(I) - latdeg=FLOOR(latmin) - IF latdeg LT 0 AND (FLOAT(latdeg)-latmin LT 0.001) THEN latdeg=latdeg+1 - latmin=(latmin-latdeg)*60. - STRPUT,name,string(ABS(latdeg),format='(I3)'),0 - STRPUT,name,string(ROUND(ABS(latmin)),format='(I2)'),4 - ynames(I)=name - ENDFOR - ENDIF - IF outytit THEN ytit='Latitude' ELSE ytit=' ' - AXIS,YRANGE=rangey2,YAXIS=0,YSTYLE=1,YMINOR=4,YTITLE=ytit, $ - YTICKNAME=ynames - AXIS,YRANGE=rangey2,YAXIS=1,YSTYLE=1,YMINOR=4, $ - YTICKNAME=nonames - ENDIF ELSE BEGIN - IF (ABS(FLOOR(rangey2(1)) -FLOOR(rangey2(0))) GT 10) THEN BEGIN - AXIS,YRANGE=rangey2,YAXIS=0,YSTYLE=5,YMINOR=4,YTICK_GET=YV, $ - YTICKNAME=nonames - siz=SIZE(YV) - ynames=nonames(0:siz(1)-1) - IF outy2lab THEN BEGIN - FOR I=0,siz(1)-1 DO BEGIN - name='75d' - latmin=YV(I) - latdeg=FIX(latmin) - STRPUT,name,string(ABS(latdeg),format='(I2)'),0 - ynames(I)=name - ENDFOR - ENDIF - IF YV(0) LT 0 THEN hemi='S' ELSE hemi='N' - IF outytit THEN ytit='Latitude ('+hemi+')' ELSE ytit=' ' - AXIS,YRANGE=rangey2,YAXIS=0,YSTYLE=1,YMINOR=4,YTITLE=ytit, $ - YTICKNAME=ynames - AXIS,YRANGE=rangey2,YAXIS=1,YSTYLE=1,YMINOR=4, $ - YTICKNAME=nonames - ENDIF ELSE BEGIN - IF (FLOOR(rangey2(1)) NE FLOOR(rangey2(0))) THEN BEGIN - AXIS,YRANGE=rangey2,YAXIS=0,YSTYLE=5,YMINOR=4,YTICK_GET=YV, $ - YTICKNAME=nonames - siz=SIZE(YV) - ynames=nonames(0:siz(1)-1) - IF outy2lab THEN BEGIN - FOR I=0,siz(1)-1 DO BEGIN - name='75d40` ' - latmin=YV(I) - latdeg=FLOOR(latmin) - IF latdeg LT 0 AND (FLOAT(latdeg)-latmin LT 0.001) THEN latdeg=latdeg+1 - latmin=(latmin-latdeg)*60. - STRPUT,name,string(ABS(latdeg),format='(I2)'),0 - STRPUT,name,string(ROUND(ABS(latmin)),format='(I2)'),3 - ynames(I)=name - ENDFOR - ENDIF - IF YV(0) LT 0 THEN hemi='S' ELSE hemi='N' - IF outytit THEN ytit='Latitude ('+hemi+')' ELSE ytit=' ' - AXIS,YRANGE=rangey2,YAXIS=0,YSTYLE=1,YMINOR=4,YTITLE=ytit, $ - YTICKNAME=ynames - ENDIF ELSE BEGIN - ;case where the range covers less than 1 degree - ;The degree number is written in the axis title - AXIS,YRANGE=rangey2*60.,YAXIS=0,YSTYLE=5,YMINOR=4,YTICK_GET=YV, $ - YTICKNAME=nonames - siz=SIZE(YV) - ynames=nonames(0:siz(1)-1) - IF outy2lab THEN BEGIN - FOR I=0,siz(1)-1 DO BEGIN - name='40.00`' - latmin=YV(I) - latdeg=FLOOR(latmin/60.) - IF latdeg LT 0 AND (FLOAT(latdeg*60)-latmin LT 0.001) THEN latdeg=latdeg+1 - latmin=(latmin-latdeg*60) - STRPUT,name,string(ABS(latmin),format='(F5.2)'),0 - ynames(I)=name - ENDFOR - ENDIF - IF YV(0) LT 0 THEN hemi='S' ELSE hemi='N' - IF outytit*outy2lab THEN ytit='Latitude ('+ $ - string(ABS(latdeg),format='(I2)')+'d'+hemi+')' ELSE ytit=' ' - AXIS,YRANGE=rangey2*60,YAXIS=0,YSTYLE=1,YMINOR=4,YTITLE=ytit, $ - YTICKNAME=ynames - ENDELSE - IF outytit*outy1lab THEN ytit='y (km)' ELSE ytit=' ' - IF outy1lab THEN $ - AXIS,YRANGE=rangey,YAXIS=1,YSTYLE=1,YMINOR=5,YTITLE=ytit $ - ELSE AXIS,YRANGE=rangey,YAXIS=1,YSTYLE=1,YMINOR=5,YTITLE=ytit, $ - YTICKNAME=nonames - ENDELSE - ENDELSE - - END - 3:BEGIN - PLOT,x,y,/NODATA,xstyle=1,ystyle=1, $ - XTITLE=xtitle,YTITLE=ytitle, TITLE=title,/NOERASE, $ - XRANGE=rangex,YRANGE=rangey, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - END - 4:BEGIN - tickvals=[0.,30.,60.,90.,120.,150.,180.] - ticknames=['North','30','60','East','120','150','South'] - PLOT,x,y,/NODATA,xstyle=1,ystyle=1, $ - XTITLE=xtitle,YTITLE=ytitle, TITLE=title,$ - XRANGE=rangex,YRANGE=rangey, /NOERASE, $ - XTICKS=6,XTICKV=tickvals,XTICKNAME=ticknames,XMINOR=3, $ - YTICKS=6,YTICKV=tickvals,YTICKNAME=ticknames,YMINOR=3, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - END - 5:BEGIN - tickvals=[0.,30.,60.,90.,120.,150.,180.,210.,240.,270.,300.,330,360.] - ticknames=['North','30','60','East','120','150','South', $ - '210','240','West','300','330','North'] - PLOT,[0],[0],/NODATA,xstyle=1,ystyle=1, $ - XTITLE=xtitle,YTITLE=ytitle, TITLE=title,$ - XRANGE=rangex,YRANGE=rangey, /NOERASE, $ - YTICKS=12,YTICKV=tickvals,YTICKNAME=ticknames,YMINOR=3, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - END - 6:BEGIN - tickvals=[0.,30.,60.,90.,120.,150.,180.] - ticknames=['North','30','60','East','120','150','South'] - PLOT,[0],[0],/NODATA,xstyle=1,ystyle=1, $ - XTITLE=xtitle,YTITLE=ytitle, TITLE=title,$ - XRANGE=rangex,YRANGE=rangey, /NOERASE, $ - YTICKS=6,YTICKV=tickvals,YTICKNAME=ticknames,YMINOR=3, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - END - 7:BEGIN - ;tickn=REPLICATE(' ',30) - latdeg=0. - latmin=0. - londeg=0. - lonmin=0. - latlonstring='' - XYtoLatLon,rangex(0),rangey(0), $ - latdeg,latmin,londeg,lonmin,latlonstring - y2min=latdeg+latmin/60. - x2min=londeg+lonmin/60. - XYtoLatLon,rangex(1),rangey(1), $ - latdeg,latmin,londeg,lonmin,latlonstring - rangex2=[x2min,londeg+lonmin/60.] - rangey2=[y2min,latdeg+latmin/60.] - ;**********x axes****************** - xnames=REPLICATE(' ',30) - IF (rangey2(1)-rangey2(0)) GT 1. THEN BEGIN - AXIS,XRANGE=rangex2,XAXIS=1,XSTYLE=5,XMINOR=4,XTICK_GET=XV, $ - XTICKNAME=xnames - siz=SIZE(XV) - xnames=STRARR(siz(1)) - FOR I=0,siz(1)-1 DO BEGIN - name='75d40`' - lonmin=XV(I) - londeg=FLOOR(lonmin) - IF londeg LT 0 AND (FLOAT(londeg)-lonmin LT -0.001) THEN londeg=londeg+1 - lonmin=(lonmin-londeg)*60. - STRPUT,name,string(ABS(londeg),format='(I2)'),0 - STRPUT,name,string(ROUND(ABS(lonmin)),format='(I2)'),3 - xnames(I)=name - ENDFOR - IF XV(0) LT 0 THEN hemi='W' ELSE hemi='E' - IF outxtit THEN xtit='Longitude ('+hemi+')' ELSE xtit=' ' - AXIS,XRANGE=rangex2,XAXIS=1,XSTYLE=1,XMINOR=4,XTITLE=xtit, $ - XTICKNAME=xnames - IF outxtit THEN xtit='x (km)' ELSE xtit=' ' - ENDIF ELSE BEGIN - AXIS,XRANGE=rangex2*60.,XAXIS=1,XSTYLE=5,XMINOR=4,XTICK_GET=XV, $ - XTICKNAME=xnames - siz=SIZE(XV) - xnames=STRARR(siz(1)) - FOR I=0,siz(1)-1 DO BEGIN - name='40.00`' - lonmin=XV(I) - londeg=FLOOR(lonmin/60.) - IF londeg LT 0 AND (FLOAT(londeg*60)-lonmin LT 0.001) THEN londeg=londeg+1 - lonmin=(lonmin-londeg*60) - STRPUT,name,string(ABS(lonmin),format='(F5.2)'),0 - xnames(I)=name - ENDFOR - IF XV(0) LT 0 THEN hemi='W' ELSE hemi='E' - IF outxtit THEN xtit='Longitude ('+ $ - string(ABS(londeg),format='(I2)')+'d'+hemi+')' ELSE xtit=' ' - AXIS,XRANGE=rangex2*60,XAXIS=1,XSTYLE=1,XMINOR=4,XTITLE=xtit, $ - XTICKNAME=xnames - ENDELSE - END - 8:BEGIN - latdeg=0. - latmin=0. - londeg=0. - lonmin=0. - latlonstring='' - XYtoLatLon,rangey(0),rangex(0), $ - latdeg,latmin,londeg,lonmin,latlonstring - X2min=latdeg+latmin/60. - XYtoLatLon,rangey(1),rangex(1), $ - latdeg,latmin,londeg,lonmin,latlonstring - rangeX2=[X2min,latdeg+latmin/60.] - ;**********X axes****************** - Xnames=REPLICATE(' ',30) - IF (rangeX2(1)-rangeX2(0)) GT 1. THEN BEGIN - AXIS,XRANGE=rangeX2,XAXIS=1,XSTYLE=5,XMINOR=4,XTICK_GET=XV, $ - XTICKNAME=Xnames - siz=SIZE(XV) - Xnames=STRARR(siz(1)) - FOR I=0,siz(1)-1 DO BEGIN - name='75d40` ' - latmin=XV(I) - latdeg=FLOOR(latmin) - IF latdeg LT 0 AND (FLOAT(latdeg)-latmin LT 0.001) THEN latdeg=latdeg+1 - latmin=(latmin-latdeg)*60. - STRPUT,name,string(ABS(latdeg),format='(I2)'),0 - STRPUT,name,string(ROUND(ABS(latmin)),format='(I2)'),3 - Xnames(I)=name - ENDFOR - IF XV(0) LT 0 THEN hemi='S' ELSE hemi='N' - IF outXtit THEN Xtit='Latitude ('+hemi+')' ELSE Xtit=' ' - AXIS,XRANGE=rangeX2,XAXIS=1,XSTYLE=1,XMINOR=4,XTITLE=Xtit, $ - XTICKNAME=Xnames - ENDIF ELSE BEGIN - AXIS,XRANGE=rangeX2*60.,XAXIS=1,XSTYLE=5,XMINOR=4,XTICK_GET=XV, $ - XTICKNAME=Xnames - siz=SIZE(XV) - Xnames=STRARR(siz(1)) - FOR I=0,siz(1)-1 DO BEGIN - name='40.00`' - latmin=XV(I) - latdeg=FLOOR(latmin/60.) - IF latdeg LT 0 AND (FLOAT(latdeg*60)-latmin LT 0.001) THEN latdeg=latdeg+1 - latmin=(latmin-latdeg*60) - STRPUT,name,string(ABS(latmin),format='(F5.2)'),0 - Xnames(I)=name - ENDFOR - IF XV(0) LT 0 THEN hemi='S' ELSE hemi='N' - IF outXtit THEN Xtit='Latitude ('+ $ - string(ABS(latdeg),format='(I2)')+'d'+hemi+')' ELSE Xtit=' ' - AXIS,XRANGE=rangeX2*60,XAXIS=1,XSTYLE=1,XMINOR=4,XTITLE=Xtit, $ - XTICKNAME=Xnames - ENDELSE - END - ENDCASE -RETURN -END - - -;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -pro makebin,xval,yval,rangex,rangey,nx,ny,bindata,bindataw,ibin,jbin,binweight=binweight - nel=N_elements(xval) - nely=N_elements(yval) - IF (nel EQ nely) THEN BEGIN - dx=(rangex(1)-rangex(0))/(nx-1) - dy=(rangey(1)-rangey(0))/(ny-1) - bindata=FLTARR(nx,ny) - bindataw=FLTARR(nx,ny) - ibin=INTARR(nel) - jbin=INTARR(nel) - FOR K=0L,nel-1 DO BEGIN - i=ROUND((xval(K)-rangex(0))/dx) - j=ROUND((yval(K)-rangey(0))/dy) - IF (I GT 0 AND I LT nx-1 AND J GT 0 AND J LT ny-1) THEN BEGIN - bindata(i,j)=bindata(i,j)+1 - IF keyword_set(binweight) THEN bindataw(i,j)=bindataw(i,j)+binweight(K) - ibin(K)=ROUND(i) - jbin(K)=ROUND(j) - ENDIF ELSE BEGIN - ibin(K)=-1 - jbin(K)=-1 - ENDELSE - ENDFOR - IF keyword_set(binweight) THEN BEGIN - KK=WHERE(bindata GE 1,kount) - IF (kount GT 0) THEN bindataw(KK)=bindataw(KK)/bindata(KK) - ENDIF - ENDIF ELSE BEGIN - print,'Cannot bin data, different sizes:',nel,nely - ENDELSE - RETURN -END - -;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -;---------------------------------------------------------------------------- -PRO Contorno,table,x,y,tit,xtit,ytit,cbtit,contoption,swap_palette,cbaxis, clev=clev, coli=coli, tri=tri -;+ -; NAME: -; Contorno -; PURPOSE: -; Plots a 2D array of data using various techniques -; CALLING SEQUENCE: -; Contorno,table,x,y,tit,cbtit,contoption,swap_palette -; INPUTS: -; table: the 2D data to be plotted -; x: x coordinate of the data -; y: y coordinate of the data -; tit: title of the plot -; cbtit: title for the color bar -; contoption: changes the fill technique for CONTOUR -; should be set to 1 for irregular grids -; swap_palette: -; COMMON BLOCKS: -; CONTOURPARAM,CURRENT... -; MODIFICATION HISTORY: Created 1/1/99-10/10/99 -;- -;** 1 ** Display parameters -common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON OVERLAY2,adbathydot,adcontour -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON THREED, Ax3D,Az3D,smoothing -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -;*******END OF COMMON BLOCKS******************************* - - tablep=table - IF (filltype GE 5) AND (filltype LE 7) AND (maxdepth EQ 1) THEN BEGIN - taille=size(tablep) - FOR I=0,taille(1)-1 DO BEGIN - tablep(I,*)=tablep(I,*)/x(I) ; division by the radial coordinate - ; to obtain densities for the polar plots - ENDFOR - taille=SIZE(tablep) - table2=FLTARR(taille(1)+1,taille(2)) ;+2.*maxval - table2(1:taille(1),*)=tablep ;adds one value for R so that - ;there will be no contours around R=0 - x2=FLTARR(taille(1)+1) - x2(1:taille(1))=x - x2(0)=MAX([0,2*x(0)-x(1)]) - tablep=tablep/max(tablep) - ENDIF - - index=WHERE(tablep GT maxval,kount) - table2=tablep - ;IF (kount GE 1) THEN table2(index)=-2.*maxval - truemin=min(tablep) - truemax=max(table2) - - IF logplot THEN BEGIN - indexminus=WHERE(tablep LT 0. AND tablep GT -1*maxval,kountminus) - indexplus=WHERE(tablep GT 0. AND tablep LT maxval,kountplus) - indexzero=WHERE(tablep EQ 0.,kountzero) - truemax=-25. - truemin=-30. - IF (kountplus GT 1) THEN BEGIN - truemin=MIN(ALOG10(tablep(indexplus))) - truemax=MAX(ALOG10(tablep(indexplus))) - ENDIF - IF (kountminus GT 1) THEN BEGIN - truemin2=MIN(ALOG10(-1.*tablep(indexminus))) - truemax2=MAX(ALOG10(-1.*tablep(indexminus))) - IF truemin2 LT truemin THEN truemin=truemin2 - IF truemax2 GT truemax THEN truemax=truemax2 - ENDIF - IF (kountzero GT 1) THEN truemin=-30. - cbtit='LOG10['+cbtit+']' - ENDIF - IF fixrange THEN BEGIN - mindata=mindepth - maxdata=maxdepth - ENDIF ELSE BEGIN - maxdata=MIN([truemax,maxdepth]) - mindata=MAX([truemin,mindepth]) - ENDELSE - IF (mindata LT maxdata) THEN BEGIN - IF outtit EQ 1 THEN title=tit ELSE title='' - - IF (MAPFLAG EQ 1) THEN CASE MAPPROJ OF - 0: MAP_SET,MAPLATCENTER,MAPLONGCENTER, /NOBORDER, /orthographic,/isotropic , /HORIZON, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - 1 :MAP_SET,MAPLATCENTER,MAPLONGCENTER, /NOBORDER, /mollweide,/isotropic , /HORIZON, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - 2 :MAP_SET,MAPLATCENTER,MAPLONGCENTER, /NOBORDER, /mercator,/isotropic, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - 3 :MAP_SET,MAPLATCENTER,MAPLONGCENTER, /NOBORDER, /azimuthal,/isotropic , /HORIZON, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - ENDCASE - - CASE filltype OF - 0:BEGIN - IF keyword_set(clev) THEN BEGIN - taille=size(clev) - c_numlev=taille(1)-1 - table(0,0)=clev(c_numlev) - truemax=table(0,0) - addmaxi=1 - addmini=0 - lev=clev - colorind=coli - ENDIF ELSE BEGIN - c_numlev=numlevels - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(c_numlev-1+addmini+addmaxi) $ - *(Navailcolor-5)/(c_numlev+addmini+addmaxi-2) - ENDELSE - IF swap_palette THEN colorind=navailcolor-2-colorind - if cbar AND MAPFLAG EQ 0 THEN ColorBar,lev,cbtit,truemin,truemax - IF logplot THEN BEGIN - IF (kountplus GT 1) THEN tablep(indexplus)=ALOG10(tablep(indexplus)) - IF (kountminus GT 1) THEN tablep(indexminus)=ALOG10(-1.*tablep(indexminus)) - IF (kountzero GT 1) THEN tablep(indexzero)=-30. - indexsmall=WHERE(tablep LT -30., kountsmall) - IF (kountsmall GE 1) THEN tablep(indexsmall)=-30. - ENDIF - taille=size(lev) - doit=1 - trie=sort(lev) - FOR I=0,taille(1)-1 DO BEGIN - if trie(I) NE I THEN doit=0 - ENDFOR - IF doit AND lev(taille(1)-1) GT lev(0) THEN BEGIN - IF contoption EQ 0 THEN BEGIN - IF (MAPFLAG EQ 1) THEN BEGIN - - taille=SIZE(tablep) - nx=taille(1); - IF (rlonmax-rlonmin GT 360*(nx-1.2)/nx) THEN BEGIN - PRINT,'GLOBAL' - table2=FLTARR(nx+1,taille(2)) ; - table2(0:nx-1,*)=tablep - table2(nx,*)=tablep(0,*) - x2=FLTARR(taille(1)+1) - x2(0:nx-1,*)=x - x2(nx)=x(0) - x=x2 - tablep=table2 - ENDIF - CONTOUR,tablep,rlonmin+x*(rlonmax-rlonmin)/(max(x)-min(x)), $ - rlatmin+y*(rlatmax-rlatmin)/max(y),xstyle=5,ystyle=5,/FOLLOW,CELL_FILL=kount, $ - /FILL,C_COLOR=colorind(0:c_numlev-2+addmini+addmaxi), $ - LEVELS=lev, /NOERASE,TITLE=title, /overplot,MAX_VALUE=maxval - - c_numlev=numlevels - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(c_numlev-1+addmini+addmaxi) $ - *(Navailcolor-5)/(c_numlev+addmini+addmaxi-2) - - ENDIF ELSE BEGIN - CONTOUR,tablep,x,y,xstyle=5,ystyle=5, $ - /FILL,C_COLOR=colorind(0:c_numlev-2+addmini+addmaxi), $ - LEVELS=lev, /NOERASE,TITLE=title, $ - XRANGE=rangex,YRANGE=rangey, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - ENDELSE - ENDIF ELSE BEGIN - CONTOUR,tablep,x,y,$ - xstyle=5,ystyle=5, TRIANGULATION=tri, $ ; TRIANGULATION=tri2(0:2,0:16578), $ - /CELL_FILL,C_COLOR=colorind(0:c_numlev-2+addmini+addmaxi), $ - LEVELS=lev,/NOERASE,TITLE=title,CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)], $ - XRANGE=rangex,YRANGE=rangey,MAX_VALUE=maxval, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - ENDELSE - ENDIF - - - - END - 1:BEGIN ;Uses the TV procedure to diplay an image - IF contoption EQ 0 THEN BEGIN - c_numlev=Navailcolor-4 - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(navailcolor-5+addmini+addmaxi) - toto=size(tablep) - image=1+ $ - BYTSCL(tablep,min=mindata,max=maxdata,Top=(navailcolor-5)) - IF swap_palette THEN BEGIN - image=navailcolor-2-image - colorind=navailcolor-2-colorind - ENDIF - if cbar AND MAPFLAG EQ 0 THEN ColorBar,lev,cbtit,truemin,truemax - IF (MAPFLAG EQ 0) THEN PLOT,[x(0)],[y(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,TITLE=title, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - IF (output EQ 0) THEN BEGIN - - IF (MAPFLAG EQ 1) THEN BEGIN - result=MAP_IMAGE(image , $ - x0,y0,xx,yy, $ - LATMIN=rlatmin,LONMIN=rlonmin,LATMAX=rlatmax,LONMAX=rlonmax,COMPRESS=1 ) - TV, result,x0,y0 ;, xsize=(trx-blx)*winx,ysize=(try-bly)*winy,/device - ENDIF ELSE $ - TV,POLY_2D(image,$ - [[0,0],[(toto(1)+0.5)^2/((toto(1)+1.5)*winx*(trx-blx)),0]], $ - [[0,(toto(2)+0.5)^2/((toto(2)+1.5)*winy*(try-bly))],[0,0]],$ - keyword_set(interp),(trx-blx)*winx,(try-bly)*winy), $ - xsize=(trx-blx)*winx,ysize=(try-bly)*winy, $ - min(x),min(y),/data - ENDIF ELSE BEGIN - print,'min et max col:',min(image),max(image) - TV,image,blx*pssizex,bly*pssizey, $ - XSIZE=(trx-blx)*pssizex,YSIZE=(try-bly)*pssizey,/CENTIMETERS - ENDELSE - ENDIF - END - 2:BEGIN ; Uses Polyfill to draw squares filled with a color - taille=size(tablep) - IF (numlevels LT 0) THEN BEGIN - c_numlev=-numlevels - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(c_numlev-1+addmini+addmaxi) $ - *(Navailcolor-5)/(c_numlev+addmini+addmaxi-2) - IF swap_palette THEN colorind=navailcolor-2-colorind - COLORf=tablep*0. - FOR I=1,c_numlev-1 DO BEGIN - IND=WHERE (tablep GT lev(I-1) AND tablep LE lev(I),kount) - IF (kount GT 0) THEN COLORf(IND)=colorind(I-1) - ENDFOR - ENDIF ELSE BEGIN - c_numlev=Navailcolor-4 - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(navailcolor-5+addmini+addmaxi) - COLORf=1+ROUND((Navailcolor-3)*(tablep-mindata)/(maxdata-mindata)) - - IF swap_palette THEN COLORf=navailcolor-2-COLORf - IND=WHERE (COLORF LT 1,kount) - IF (kount GT 0) THEN COLORF(IND)=1 - IND=WHERE (COLORF GT Navailcolor-3,kount) - IF (kount GT 0) THEN COLORF(IND)=Navailcolor-3 - IND=WHERE (tablep GT MAXVAL,kount) - IF (kount GT 0) THEN COLORF(IND)=Navailcolor-2 - ENDELSE - if cbar THEN ColorBar,lev,cbtit,truemin,truemax - PLOT,[x(0)],[y(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,TITLE=title, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - i=0 - dx2=0.5*(x(1)-x(0)) ;for regular grids only - dy2=0.5*(y(1)-y(0)) - FOR J=0,taille(2)-1 DO BEGIN - firstx=0 - FOR i=0,taille(1)-1 DO BEGIN - IF (tablep(i,j) LT maxval) THEN BEGIN - - IF (firstx EQ 0) AND (COLORF(I,J) NE Navailcolor-2) THEN firstx=1 - IF (COLORf(I,J) LT Navailcolor) THEN BEGIN - im1=max([i-1,0]) - xim1=x(i)-dx2 - IF (im1 EQ i) THEN xim1=x(i) - ip1=min([i+1,taille(1)-1]) - xip1=x(i)+dx2 - IF (ip1 EQ i) THEN xip1=x(i) - - jm1=max([j-1,0]) - yjm1=y(j)-dy2 - IF (jm1 EQ j) THEN yjm1=y(j) - jp1=min([j+1,taille(2)-1]) - yjp1=y(j)+dy2 - IF (jp1 EQ j) THEN yjp1=y(j) - - xx=[xim1,xip1,xip1,xim1] - yy=[yjm1,yjm1,yjp1,yjp1] - IF firstx EQ 1 THEN POLYFILL,xx,yy, COLOR=COLORf(I,J),NOCLIP=0, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - ENDIF - - ENDIF - ENDFOR - ENDFOR - END - 3:BEGIN - c_numlev=numlevels - MakeLevels,mindata,maxdata,truemin,truemax - IF contoption EQ 0 AND kount EQ 0 THEN BEGIN - CONTOUR,tablep,x,y,xstyle=5,ystyle=5,/FOLLOW, $ - TITLE=tit,LEVELS=lev,/NOERASE,XRANGE=rangex,YRANGE=rangey, $ ; C_LABELS=[0] ,$ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - ENDIF ELSE BEGIN - CONTOUR,tablep,x,y,TRIANGULATION=tri, $ - xstyle=5,ystyle=5, LEVELS=lev,/NOERASE,TITLE=title, $ - XRANGE=rangex,YRANGE=rangey,MAX_VALUE=maxval, $ - NOCLIP=0,CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)], $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - ENDELSE - END - 4:PLOT,[x(0)],[y(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,TITLE=title, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - - 5:BEGIN ; makes a filled polar contour plot - IF logplot THEN BEGIN - IF (kountplus GE 1) THEN tablep(indexplus)=ALOG10(tablep(indexplus)) - IF (kountminus GE 1) THEN tablep(indexminus)=ALOG10(-1.*tablep(indexminus)) - IF (kountzero GE 1) THEN tablep(indexzero)=-30. - indexsmall=WHERE(tablep LT -30., kountsmall) - IF (kountsmall GE 1) THEN tablep(indexsmall)=-30. - ENDIF - c_numlev=numlevels ;number of contour levels - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(c_numlev-1+addmini+addmaxi) $ - *(Navailcolor-5)/(c_numlev+addmini+addmaxi-2) - IF swap_palette THEN colorind=navailcolor-1-colorind - ;print,'lev',lev - ;print,'colorind',colorind - ;print,'tablep',tablep(*,25) - yrad=(90.-y)*!dtor - PLOT,[x(0)],[y(0)],xstyle=4,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - XTICK_GET=Radii, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - rangex=[-rangex(1),rangex(1)] - rangey=[-rangex(1),rangex(1)] - - Rescale,1 - POLAR_CONTOUR,TRANSPOSE(tablep),yrad,x,/FILL,XRANGE=rangex,$ - TITLE=title,YRANGE=rangey,POSITION=[blx*winx/mwinx,bly*winy/mwiny, $ - trx*winx/mwinx,try*winy/mwiny],xstyle=5,ystyle=5, $ - C_COLOR=colorind(1-filloutofrange*addmini: $ - numlevels-2+filloutofrange*(addmini+addmaxi)), $ - LEVELS=lev(1-filloutofrange*addmini: $ - numlevels-1-(1-filloutofrange)*addmaxi), $ - MAX_VALUE=maxval,/NOERASE - IF (logplot EQ 1) THEN $ - IF (kountplus GE 1) AND (kountminus GE 1) THEN BEGIN - - POLAR_CONTOUR,TRANSPOSE(table2),yrad,x2,XRANGE=rangex,$ - YRANGE=rangey, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny, $ - trx*winx/mwinx,try*winy/mwiny],xstyle=5,ystyle=5, $ - LEVELS=[0],/NOERASE,C_LABEL=[0],THICK=2 - - XX=FLTARR(taille(2),taille(1)+1) - YY=FLTARR(taille(2),taille(1)+1) - FOR I=0,taille(1) DO XX(*,I)=COS(yrad(*)*!dtor)*x2(I) - FOR I=0,taille(1) DO YY(*,I)=SIN(yrad(*)*!dtor)*x2(I) - ENDIF - FOR I=0,N_ELEMENTS(Radii)-1 DO IF Radii(I) LE rangex(1) THEN BEGIN - acirc=FLTARR(N_ELEMENTS(yrad)+1) - acirc(0:N_ELEMENTS(yrad)-1)=yrad - acirc(N_ELEMENTS(yrad))=yrad(0) - OPLOT,Radii(I)*COS(acirc),Radii(I)*SIN(acirc),LINESTYLE=1, $ - NOCLIP=0,CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - XYOUTS,-Radii(I),0,STRING(Radii(I),FORMAT='(f4.2)'),ALIGNMENT=0.5 - ENDIF - FOR I=0,5 DO OPLOT,rangex*COS(!pi*I/6.),rangex*SIN(!pi*I/6.), $ - LINESTYLE=((1+(I MOD 3))/2) - if cbar THEN ColorBar,lev,cbtit,truemin,truemax - PLOT,[x(0)],[y(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey,/NOERASE, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - END - - 6:BEGIN - c_numlev=numlevels - MakeLevels,mindata,maxdata,truemax,truemin - yrad=(90.-y)*!dtor - PLOT,[x(0)],[y(0)],xstyle=4,ystyle=4,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - XTICK_GET=Radii, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - rangex=[-rangex(1),rangex(1)] - rangey=[-rangex(1),rangex(1)] - Rescale,1 - IF logplot THEN BEGIN - IF (kountplus GE 1 and kountminus GE 1) THEN $ - POLAR_CONTOUR,TRANSPOSE(tablep),yrad,x,XRANGE=rangex,$ - TITLE=title,YRANGE=rangey, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny, $ - trx*winx/mwinx,try*winy/mwiny],xstyle=5,ystyle=5, $ - LEVELS=[0],/NOERASE,TITLE=title,C_LABEL=[1],THICK=3 - - tableplot=tablep - tableplot(*,*)=2.*maxval - IF (kountplus GT 1) THEN BEGIN - tableplot(indexplus)=ALOG10(tablep(indexplus)) - POLAR_CONTOUR,TRANSPOSE(tableplot),yrad,x,XRANGE=rangex,$ - YRANGE=rangey,MAX_VALUE=maxval, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny, $ - trx*winx/mwinx,try*winy/mwiny],xstyle=5,ystyle=5, $ - LEVELS=lev,/NOERASE,TITLE=title,C_LABEL=[0, 1] - ENDIF - tableplot(*,*)=2.*maxval - IF (kountminus GT 1) THEN BEGIN - tableplot(indexminus)=ALOG10(tablep(-indexminus)) - POLAR_CONTOUR,TRANSPOSE(tableplot),yrad,x,XRANGE=rangex,$ - YRANGE=rangey,MAX_VALUE=maxval, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny, $ - trx*winx/mwinx,try*winy/mwiny],xstyle=5,ystyle=5, $ - LEVELS=lev,/NOERASE,TITLE=title,C_LABEL=[0, 1],LINESTYLE=1 - ENDIF - ENDIF ELSE BEGIN - taille=SIZE(tablep) - table2=FLTARR(taille(1)+1,taille(2))+2.*maxval - table2(1:taille(1),*)=tablep ;adds one value for R so that - ;there will be no contours around R=0 - linestyles=FIX(lev)*0. - linesthick=FIX(lev)*0.+1 - labels=FIX(lev)*0. - - Index=WHERE(lev LT 0,kount) - IF kount GE 1 THEN linestyles(index)=2. - - - POLAR_CONTOUR,TRANSPOSE(table2),yrad,x2,XRANGE=rangex,$ - YRANGE=rangey, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny, $ - trx*winx/mwinx,try*winy/mwiny],xstyle=5,ystyle=5, $ - LEVELS=lev,C_LINESTYLE=linestyles,C_THICK=[2], $ - /NOERASE,TITLE=title,C_LABEL=[1],MAX_VALUE=maxval,C_CHARSIZE=1.2 - POLAR_CONTOUR,TRANSPOSE(table2),yrad,x2,XRANGE=rangex,$ - YRANGE=rangey, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny, $ - trx*winx/mwinx,try*winy/mwiny],xstyle=5,ystyle=5, $ - LEVELS=[0],C_LINESTYLE=[0],C_THICK=[4],C_CHARTHICK=[2], $ - /NOERASE,TITLE=title,C_LABEL=[1],MAX_VALUE=maxval,C_CHARSIZE=1.2 - - ENDELSE - adpolarstuff=0 - IF adpolarstuff THEN BEGIN - XYOUTS,Rangex(0),Rangey(0),'Minimum: '+STRING(truemin,FORMAT='(E10.2)'), $ - ALIGNMENT=0. - XYOUTS,Rangex(1),Rangey(0),'Maximum: '+STRING(truemax,FORMAT='(E10.2)'), $ - ALIGNMENT=1. - FOR I=0,N_ELEMENTS(Radii)-1 DO BEGIN - IF Radii(I) LE rangex(1) THEN BEGIN - acirc=FLTARR(N_ELEMENTS(yrad)+1) - acirc(0:N_ELEMENTS(yrad)-1)=yrad - acirc(N_ELEMENTS(yrad))=yrad(0) - OPLOT,Radii(I)*COS(acirc),Radii(I)*SIN(acirc),LINESTYLE=1, $ - NOCLIP=0,CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - XYOUTS,-Radii(I),0,STRING(Radii(I),FORMAT='(f4.2)'),ALIGNMENT=0.5 - ENDIF - ENDFOR - FOR I=0,5 DO OPLOT,rangex*COS(!pi*I/6.),rangex*SIN(!pi*I/6.), $ - LINESTYLE=((1+(I MOD 3))/2) - ENDIF - END - 7:BEGIN ; makes a filled polar contour plot using POLYFILL - taille=size(tablep) - c_numlev=Navailcolor-4 - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(navailcolor-5+addmini+addmaxi) - PLOT,[x(0)],[y(0)],xstyle=4,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - XTICK_GET=Radii, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - rangex=[-rangex(1),rangex(1)] - rangey=[-rangex(1),rangex(1)] - Rescale,1 - - PLOT,[x(0)],[y(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey,/NOERASE, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - yrad=(90.-y)*!dtor - da=yrad(1)-yrad(0) - FOR i=0,taille(1)-1 DO BEGIN - IF I EQ 0 THEN dr1=(x(1)-x(0))/2. ELSE dr1=(x(i)-x(i-1))/2. - IF I EQ taille(1)-1 THEN dr2=(x(taille(1)-1)-x(taille(1)-2))/2. $ - ELSE dr2=(x(i+1)-x(i))/2. - - IF (x(I) LE rangex(1)) AND (dr1> 0) and (dr2> 0) THEN BEGIN - FOR J=0,taille(2)-1 DO BEGIN - x1=(x(i)-dr1)*cos(yrad(J)) - y1=(x(i)-dr1)*sin(yrad(J)) - x1=(x(i)-dr1)*cos(yrad(J)) - y1=(x(i)-dr1)*sin(yrad(J)) - dy=y(1)-y(0) - xx=[(x(i)-dr1)*cos(yrad(J)-da/2),(x(i)+dr2)*cos(yrad(J)-da/2), $ - (x(i)+dr2)*cos(yrad(J)+da/2),(x(i)-dr1)*cos(yrad(J)+da/2)] - yy=[(x(i)-dr1)*sin(yrad(J)-da/2),(x(i)+dr2)*sin(yrad(J)-da/2), $ - (x(i)+dr2)*sin(yrad(J)+da/2),(x(i)-dr1)*sin(yrad(J)+da/2)] - COLORf=1+(Navailcolor-5)*(tablep(i,J)-mindata)/(maxdata-mindata) - IF COLORF LT 1 THEN COLORF=1 - IF COLORF GT Navailcolor-4 THEN COLORF=Navailcolor-4 - POLYFILL,xx,yy, $ - COLOR=COLORf - ENDFOR - ENDIF - ENDFOR - ;XYOUTS,Rangex(0),Rangey(0),'Minimum: '+STRING(truemin,FORMAT='(E10.2)'), $ - ; ALIGNMENT=0. - ;XYOUTS,Rangex(1),Rangey(0),'Maximum: '+STRING(truemax,FORMAT='(E10.2)'), $ - ; ALIGNMENT=1. - FOR I=0,N_ELEMENTS(Radii)-1 DO IF Radii(I) LE rangex(1) THEN BEGIN - acirc=FLTARR(N_ELEMENTS(yrad)+1) - acirc(0:N_ELEMENTS(yrad)-1)=yrad - acirc(N_ELEMENTS(yrad))=yrad(0) - OPLOT,Radii(I)*COS(acirc),Radii(I)*SIN(acirc),LINESTYLE=1, $ - NOCLIP=0,CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - XYOUTS,-Radii(I),0,STRING(Radii(I),FORMAT='(f4.2)'),ALIGNMENT=0.5 - ENDIF - FOR I=0,5 DO OPLOT,rangex*COS(!pi*I/6.),rangex*SIN(!pi*I/6.), $ - LINESTYLE=((1+(I MOD 3))/2) - if cbar THEN ColorBar,lev,cbtit,truemin,truemax - PLOT,[x(0)],[y(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey,/NOERASE, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - END - - 8:BEGIN - pfontmemo=!P.font - !P.font=-1 - IF outxtit THEN xti=xtit ELSE xti=' ' - IF outytit THEN yti=ytit ELSE yti=' ' - IF outcbtit THEN cbti=cbtit ELSE cbti=' ' - SURFACE,(1-2*swap_palette)*tablep,x,y,AX=Ax3D,AZ=Az3D,XSTYLE=1,YSTYLE=1, $ - XTITLE=xti,YTITLE=yti,TITLE=ti,MAX_VALUE=maxval - !P.font=pfontmemo - END - - 9:BEGIN - c_numlev=Navailcolor-4 - MakeLevels,mindata,maxdata,truemin,truemax - toto=size(tablep) - image=1+ $ - BYTSCL(tablep,min=mindata,max=maxdata,Top=(navailcolor-3)) - colorind=1+FINDGEN(navailcolor-5+addmini+addmaxi) - IF swap_palette THEN BEGIN - image=navailcolor-2-image - colorind=navailcolor-2-colorind - ENDIF - if cbar THEN ColorBar,lev,cbtit,truemin,truemax - index1=WHERE(tablep GT maxdata,count1) - index2=WHERE(tablep LT mindata,count2) - IF count1 GT 0 THEN tablep(index1)=maxdepth - IF count2 GT 0 THEN tablep(index2)=mindepth - IF (smoothing GT 1) THEN tablep=SMOOTH(tablep,smoothing) - pfontmemo=!P.font - !P.font=-1 - IF outxtit THEN xti=xtit ELSE xti=' ' - IF outytit THEN yti=ytit ELSE yti=' ' - IF outcbtit THEN cbti=cbtit ELSE cbti=' ' - SHADE_SURF,(1-2*swap_palette)*tablep,x,y,shades=image,xstyle=1,ystyle=1, $ - XTITLE=xti,/NOERASE,MAX_VALUE=maxval, $ - YTITLE=yti, TITLE=ti,$ - XRANGE=rangex,YRANGE=rangey,/SAVE,Ax=ax3D,Az=az3D, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - !P.font=pfontmemo - END - - 10:BEGIN - index1=WHERE(tablep GT maxdata,count1) - index2=WHERE(tablep LT mindata,count2) - IF count1 GT 0 THEN tablep(index1)=maxdepth - IF count2 GT 0 THEN tablep(index2)=mindepth - IF (smoothing GT 1) THEN tablep=SMOOTH(tablep,smoothing) - pfontmemo=!P.font - !P.font=-1 - IF outxtit THEN xti=xtit ELSE xti=' ' - IF outytit THEN yti=ytit ELSE yti=' ' - IF outcbtit THEN cbti=cbtit ELSE cbti=' ' - - SHADE_SURF,(1-2*swap_palette)*tablep,x,y,xstyle=1,ystyle=1,/SAVE,Ax=ax3D,Az=az3D, $ - XTITLE=xti,/NOERASE,MAX_VALUE=maxval, $ - YTITLE=yti, TITLE=ti,$ - XRANGE=rangex,YRANGE=rangey, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - !P.font=pfontmemo - END - 11:BEGIN - pfontmemo=!P.font - !P.font=-1 - IF outxtit THEN xti=xtit ELSE xti=' ' - IF outytit THEN yti=ytit ELSE yti=' ' - IF outcbtit THEN cbti=cbtit ELSE cbti=' ' - - SURFACE,(1-2*swap_palette)*tablep,x,y,MAX_VALUE=maxval, $ - AX=Ax3D,AZ=Az3D,/LEGO,XSTYLE=1,YSTYLE=1, $ - XTITLE=xti,YTITLE=yti,ZTITLE=cbti - !P.font=pfontmemo - IF outtit THEN ti=tit ELSE ti=' ' - XYOUTS,rangex(0)+0.5*(rangex(1)-rangex(0)), $ - rangey(1)-0.05*(rangey(1)-rangey(0)),ti,ALIGNMENT=0.5 - END - 12:BEGIN ; color bar only - c_numlev=Navailcolor-4 - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(navailcolor-5+addmini+addmaxi) - toto=size(tablep) - IF swap_palette THEN BEGIN - colorind=navailcolor-2-colorind - ENDIF - if cbar THEN ColorBar,lev,cbtit,truemin,truemax - END - 13:BEGIN ; collapses the 2D plot into a 1D plot - taille=size(x) - y1=TOTAL(tablep,2)*(y(1)-y(0))*!dtor - print,'Hs:',4.*SQRT(TOTAL(y1*(x(1)-x(0)))) - print,'dtheta:',y(1)-y(0),!dtor - H=8. - cg=x - cg1=0. - kh=0. - cphi=0. - FOR I=0,taille(1)-1 DO BEGIN - Speeds,H,x(I),cphi,cg1,KH - cg(I)=cg1 - ENDFOR - print,'Cg:',cg - Eflux=0. - Etot=0. - FOR I=0,taille(1)-1 DO BEGIN - Eflux=Eflux+cg(I)*(y(1)-y(0))*!dtor*(x(1)-x(0))*TOTAL(tablep(I,*)*ABS(cos((70-y(*))*!dtor))) - ENDFOR - Eflux2=TOTAL(cg*TOTAL(tablep,1)*(y(1)-y(0))*!dtor*ABS(sin((90-y)*!dtor))*(x(1)-x(0))) - print,'Eflux:',Eflux,Eflux*1026.*9.81,TOTAL(cg*y1*(x(1)-x(0))),Eflux2 - plot,x,y1, $ - xstyle=1,ystyle=0,$ - /NOERASE,TITLE=' ',XTITLE=xtit,YTITLE='E(f) (m^2/Hz)',THICK=3, $ - XRANGE=rangex,YRANGE=[0,max(y1)],MAX_VALUE=maxval, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - END - ENDCASE - IF (filltype LE 3) AND (adcontour GT 0) THEN BEGIN ; Adds the contour lines corresponding to - lev2=mindata+(maxdata-mindata)*FINDGEN(cbnticks+1)/(cbnticks) - print,'LEV2:',lev2,'##',adcontour - Cstyle=FLTARR(cbnticks+1)+adcontour-1 - IF contoption EQ 0 AND MAPFLAG EQ 0 THEN $ - CONTOUR,tablep,x,y,xstyle=5,ystyle=5,/FOLLOW, $ - TITLE=tit,$ - LEVELS=lev2,C_LINESTYLE=Cstyle,/NOERASE,XRANGE=rangex,YRANGE=rangey, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] $ - ELSE $ - CONTOUR,tablep,x,y,/IRREGULAR, $ - xstyle=5,ystyle=5,/FOLLOW, $ - LEVELS=lev2,C_LINESTYLE=Cstyle,/NOERASE,TITLE=title, $ - XRANGE=rangex,YRANGE=rangey,MAX_VALUE=maxval, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - ENDIF - IF MAPFLAG EQ 1 THEN BEGIN - IF (adcontour) THEN BEGIN - c_numlev=numlevels - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(c_numlev-1+addmini+addmaxi) $ - *(Navailcolor-5)/(c_numlev+addmini+addmaxi-2) - - CONTOUR,tablep,rlonmin+x*(rlonmax-rlonmin)/max(x),rlatmin+y*(rlatmax-rlatmin)/max(y),xstyle=5,ystyle=5,/overplot,/FOLLOW, $ - LEVELS=lev - ENDIF - IF MAPCONTINENT GT 0 THEN MAP_CONTINENTS, FILL=MAPCONTINENT-1 - MAP_GRID,LATDEL=10, LONDEL=10,LONS=-170,LABEL=1 - if cbar THEN ColorBar,lev,cbtit,truemin,truemax - IF (title NE '') THEN XYOUTS,blx,try,title,/NORMAL - ENDIF - ENDIF ELSE BEGIN - PRINT,'Array is constant:',mindata - ENDELSE - -RETURN -END - -;---------------------------------------------------------------------------- -PRO Makelevels,mini,maxi,truemin,truemax -; Generates an increasing series of values from mini to maxi, used for -; contouring and the color bar. The true min and max are also used for cases -; in which the range of values of the displayed data goes beyond mini and maxi -; in that case the color bar may be extended by triangles to indicate that the -; range shown does not cover all the data (the parameters addmini and addmaxi -; are passed in the COLORBARPAR common block to the Colorbar procedure) -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec - addmini=0 - addmaxi=0 - IF (truemin LT mini) AND (fixrange GE 0) THEN addmini=1 - IF (truemax GT maxi) AND (fixrange GE 0) THEN addmaxi=1 - lev=FLTARR(c_numlev+addmini+addmaxi) - IF addmini THEN lev(0)=truemin-0.00001*(maxi-truemin) - IF addmaxi THEN lev(c_numlev+addmini+addmaxi-1)=truemax+0.00001*(truemax-mini) - ;print,'C_numlev:',c_numlev,addmini - CASE C_repart OF - 0: BEGIN - lev(addmini:c_numlev+addmini-1)=mini+(maxi-mini)*FINDGEN(c_numlev)/(c_numlev-1) - END - 1: BEGIN - toto=EXP(2*(FINDGEN(c_numlev)+1-c_numlev)/c_numlev) - mini2=toto(0) - lev(addmini:c_numlev+addmini-1)=mini+(maxi-mini)/(1-mini2) $ - *(EXP(2*(FINDGEN(c_numlev)+1-numlevels)/c_numlev)-mini2) - END - 2: BEGIN - toto=EXP(6.*(FINDGEN(c_numlev)+1-c_numlev)/c_numlev) - mini2=toto(0) - lev(addmini:c_numlev+addmini-1)=mini+(maxi-mini)/(1-mini2) $ - *(EXP(6.*(FINDGEN(c_numlev)+1-c_numlev)/c_numlev)-mini2) - END - 3: BEGIN - toto=EXP(5*(FINDGEN(c_numlev)+1-numlevels)/c_numlev) - mini2=toto(0) - lev(addmini:c_numlev+addmini-1)=mini+(maxi-mini)/(1-mini2) $ - *(EXP(5*(FINDGEN(c_numlev)+1-c_numlev)/c_numlev)-mini2) - END - 4: BEGIN - IF maxi LT 1.2 THEN BEGIN - lev(addmini:c_numlev+addmini-1)=mini+(maxi-mini)*FINDGEN(c_numlev)/(c_numlev-1) - ENDIF ELSE BEGIN - n1=c_numlev/2 - n2=2*n1 - lev(addmini:c_numlev+addmini-1)=mini+(1.2-mini)*FINDGEN(c_numlev)/(n1-1) - lev(n1:c_numlev-1+addmini)=1.2+ $ - (maxi-1.2)*(1.+FINDGEN(c_numlev-n1))/(c_numlev-n1) - ENDELSE - END - 5: BEGIN - logmax=FIX(MAX([ALOG10(abs(maxi)),ALOG10(abs(mini))]))+1 - lev(addmini:c_numlev+addmini-1)=mini+(maxi-mini)*FINDGEN(c_numlev)/(c_numlev-1) - END - ENDCASE -RETURN -END - - -;---------------------------------------------------------------------------- -PRO VECT,u,v,x,y,miss,rangex,rangey - s = size(u) - - r = .3 ;len of arrow head - angle = 22.5 * !dtor ;Angle of arrowhead - st = r * sin(angle) ;sin 22.5 degs * length of head - ct = r * cos(angle) -; arrow - xmotif=[0.,1.,1.-ct,1.,1.-ct]*(rangex(1)-rangex(0))/40. - ymotif=[0.,0.,st,0.,-st]*(rangex(1)-rangex(0))/40. - - mag=SQRT(u^2+v^2) - u0=u/mag - v0=v/mag - Index=WHERE(miss EQ 0 and x GT rangex(0) AND x LT rangex(1) $ - AND y GT rangey(0) AND y LT rangey(1),kount) - IF (kount GT 0) AND (kount LT 10000) THEN BEGIN - FOR i=0,kount-1 DO BEGIN - PLOTS,x(Index(I))+xmotif*u0(Index(I))-ymotif*v0(Index(I)), $ - y(Index(I))+xmotif*v0(Index(I))+ymotif*u0(Index(I)),THICK=2 - ENDFOR - ENDIF -END - -;---------------------------------------------------------------------------- -PRO ad2Dmisc -;**********DESCRIPTION**** -; This procedure overlays sympols and lines over 2d plots. -; Symbols can be grid points, special points, and arrows for wave direction -; lines can be bathymetry contours, rays, survey lines, coastline -; The flags governing the display (or not) of these are contain in the -; PLOTOP group of common variables -; This procedure is called by doplotothers after a backgroung plot -; has been produced. The coordinates for all symbols are in kilometers from the -; bottom left corner of the bathymetry grid. -;** 1 ** Display parameters -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON OVERLAY, addir,adsyms,adbathy,adcoast,psyms,psymsizes,adtr,adtri -COMMON OVERLAY2,adbathydot,adcontour -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth - -;** 3 ** I/O and data variables -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON COAST, coastxy,coastl,coastnp,GSHHSPoly,GSHHSPoint,GSHHSPoly2,GSHHSPoint2 -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON TRIANGLE2,nzonetri,zonetri,nzonegp,zonegp,ngpzone,gpzone -COMMON RAYS, raysOK,raystype,raynsteps,rayx,rayy,raya,rayamin,rayamax, $ - rayres,rayfreq,rayGP,raytimestep,rayoffdep,rayflag,raydz,raymindepth -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -COMMON TIMESTEPSUG,TIMESTEPS,NTIMESTEPS,FLAGTSTEP, TIMESTEPS_ORDER -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize -COMMON MAPPOLE, XPOLE, YPOLE, SLAT, RE, E2, E - -COMMON XYZDATA, NXYZ, XYZ -;*******END OF COMMON BLOCKS******************************* - -; -; Plots xyz.dat -; - IF datastatus(1) THEN BEGIN - - index=WHERE(XYZ(*,2) GT maxval,kount) - table2=XYZ(*,2) - truemin=min(XYZ(*,2)) - truemax=max(table2) - IF fixrange THEN BEGIN - mindata=mindepth - maxdata=maxdepth - ENDIF ELSE BEGIN - maxdata=MIN([truemax,maxdepth]) - mindata=MAX([truemin,mindepth]) - ENDELSE - - c_numlev=Navailcolor-4 - MakeLevels,mindata,maxdata,truemin,truemax - colorind=1+FINDGEN(navailcolor-5+addmini+addmaxi) - c_numlev=Navailcolor-4 - - FOR I=0,c_numlev+addmini+addmaxi-2 DO BEGIN - IND=WHERE(XYZ(*,2) GE lev(I) AND XYZ(*,2) LE lev(I+1),kount) - IF (kount GT 0) THEN OPLOT,XYZ(IND,0),XYZ(IND,1),psym=3, $ ; - linestyle=0,SYMSIZE=1,COLOR=I - ENDFOR - - ;ENDFOR - - ENDIF -; -; Adds shoreline -; - IF datastatus(4) OR datastatus(18) THEN BEGIN - taille=SIZE(GSHHSPoly) - Npoly=taille(1)-1 - CASE adcoast OF - 1: BEGIN - FOR I=0L,Npoly-1 DO BEGIN - IF GSHHSPoly(I,0) LT GSHHSPoly(I+1,0)-1 THEN BEGIN - COLORI=253.+(GSHHSPoly(I,3) MOD 2) - POLYFILL,GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,0), $ - GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,1), $ - COLOR=253.+(GSHHSPoly(I,3) MOD 2), $ - NOCLIP=0, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - drx=0; (rangex(1)-rangex(0))*0.25 - dry=0;(rangey(1)-rangey(0))*0.25 - ;,COLOR=Navailcolor-1 $ - ENDIF - ENDFOR - outdump=0 - IF (outdump EQ 1) THEN BEGIN - GET_LUN,unit2 - OPENW,unit2,'GSHHS_v2_islands_in_zoom.txt' - FOR I=0L,Npoly-1 DO BEGIN - XBOUNDS=(((FLOAT(GSHHSPoly(I,4:5))*1.E-6+180.) MOD 360)-180-rlonmin)/(ABS(rlonmax-rlonmin)/((nx-1)*dx)) - YBOUNDS= (FLOAT(GSHHSPoly(I,6:7))*1.E-6 -rlatmin)/(ABS(rlatmax-rlatmin)/((ny-1)*dy)) - IF ( XBOUNDS(0) GT rangex(0) AND XBOUNDS(1) LT rangex(1) AND $ - YBOUNDS(0) GT rangey(0) AND YBOUNDS(1) LT rangey(1) ) THEN BEGIN - PRINTF,unit2,FORMAT='(2I10)',GSHHSPoly(I+1,0)-GSHHSPoly(I,0), GSHHSPoly(I,1) - FOR J=GSHHSPoly(I,0),GSHHSPoly(I+1,0)-1 DO BEGIN - PRINTF,unit2,FORMAT='(2F11.6)', rlonmin+GSHHSPoint(J,0)*ABS(rlonmax-rlonmin)/((nx-1)*dx), $ - rlatmin+GSHHSPoint(J,1)*ABS(rlatmax-rlatmin)/((ny-1)*dy) - ENDFOR - ENDIF - ENDFOR - CLOSE,unit2 - FREE_LUN,unit2 - ENDIF - END - -1:BEGIN - FOR I=0L,Npoly-1 DO BEGIN - PLOTS,GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,0)+0*dx, $ - GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,1)-0*dy, $ - COLOR=253.+(GSHHSPoly(I,3) MOD 2),NOCLIP=0, THICK=2, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - IF (rangex(1)-rangex(0) LT 2 ) AND (adsyms GT 3) THEN BEGIN - STRA=STRARR(2) - STRA(0)=strcompress(string(I+1L)) - FOR J=GSHHSPoly(I,0),GSHHSPoly(I+1,0)-1 DO BEGIN - IF (adsyms GT 3 AND GSHHSPoint(J,0) GT rangex(0) and GSHHSPoint(J,0) LT rangex(1) $ - AND GSHHSPoint(J,1) GT rangey(0) AND GSHHSPoint(J,1) LT rangey(1) ) THEN BEGIN - STRA(1)=strcompress(string(1L+J-GSHHSPoly(I,0))) - strlab=STRJOIN(STRA,',') - XYOUTS,GSHHSPoint(J,0),GSHHSPoint(J,1),strlab, $ - CHARSIZE=0.5,NOCLIP=0,COLOR=253, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - ENDIF - ENDFOR - ENDIF - ENDFOR - END - -2:BEGIN - FOR I=0L,Npoly-1 DO BEGIN - IF (GSHHSPoly(I,3) MOD 2 EQ 1) THEN $ - PLOTS,GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,0)+0*dx, $ - GSHHSPoint(GSHHSPoly(I,0):GSHHSPoly(I+1,0)-1,1)-0*dy, $ - COLOR=253.+(GSHHSPoly(I,3) MOD 2),NOCLIP=0, THICK=2, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - ENDFOR - END - 0:BEGIN - END - ENDCASE - ENDIF - - IF datastatus(4) THEN BEGIN - taille=SIZE(GSHHSPoly2) - Npoly=taille(1)-1 - CASE adcoast OF - 1: BEGIN - FOR I=0L,Npoly-1 DO BEGIN - IF GSHHSPoly2(I,0) LT GSHHSPoly2(I+1,0)-1 THEN BEGIN - POLYFILL,GSHHSPoint2(GSHHSPoly2(I,0):GSHHSPoly2(I+1,0)-1,0)+dx*0, $ - GSHHSPoint2(GSHHSPoly2(I,0):GSHHSPoly2(I+1,0)-1,1)+dy*0, $ - COLOR=Navailcolor-2, NOCLIP=0, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - drx=0; (rangex(1)-rangex(0))*0.25 - dry=0;(rangey(1)-rangey(0))*0.25 - ;COLOR=252.+(GSHHSPoly2(I,3) MOD 2), $ - ; - ENDIF - ENDFOR - END - -1:BEGIN - FOR I=0L,Npoly-1 DO BEGIN - PLOTS,GSHHSPoint2(GSHHSPoly2(I,0):GSHHSPoly2(I+1,0)-1,0)+0*dx, $ - GSHHSPoint2(GSHHSPoly2(I,0):GSHHSPoly2(I+1,0)-1,1)-0*dy, $ - COLOR=251.+(GSHHSPoly2(I,3) MOD 2),NOCLIP=0, THICK=2, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - IF (rangex(1)-rangex(0) LT 2 ) AND (adsyms GT 3) THEN BEGIN - STRA=STRARR(2) - STRA(0)=strcompress(string(I+1L)) - FOR J=GSHHSPoly2(I,0),GSHHSPoly2(I+1,0)-1 DO BEGIN - STRA(1)=strcompress(string(1L+J-GSHHSPoly2(I,0))) - strlab=STRJOIN(STRA,',') - IF (adsyms GT 3 AND GSHHSPoint2(J,0) GT rangex(0) and GSHHSPoint2(J,0) LT rangex(1) $ - and GSHHSPoint2(J,1) GT rangey(0) and GSHHSPoint2(J,1) LT rangey(1) ) $ - THEN XYOUTS,GSHHSPoint2(J,0),GSHHSPoint2(J,1)+0.002*(I MOD 2L),strlab, $ - CHARSIZE=0.5,NOCLIP=0,COLOR=252, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - ENDFOR - ENDIF - ENDFOR - END - ELSE:BEGIN - END - ENDCASE - ENDIF - - -; -; Displays the triangle mesh -; - IF adtri GE 1 AND adtri LE 2 AND datastatus(6) THEN BEGIN - IIGP=INTARR(3) - FOR I=1L,ntri DO BEGIN -; -; Gets indices of the three points in the triangle -; - I1=TRIGP(I,1)-1 - I2=TRIGP(I,2)-1 - I3=TRIGP(I,3)-1 - IF ((I1 NE -1) AND (I2 NE -1) AND (I3 NE -1)) THEN BEGIN - X=[gridmat(0,I1),gridmat(0,I2),gridmat(0,I3),gridmat(0,I1)] - Y=[gridmat(1,I1),gridmat(1,I2),gridmat(1,I3),gridmat(1,I1)] - PLOTS,X,Y,NOCLIP=0, CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)],THICK=1 ;,COLOR=250 -; -; Plots the median dual cells -; - IF adtri EQ 2 THEN BEGIN - XG=MEAN(X(0:2)) - YG=MEAN(Y(0:2)) - PLOTS,XG,YG,PSYM=3,SYMSIZE=1,NOCLIP=0,CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - OPLOT,[0.5*(X(0)+X(1)),XG,0.5*(X(1)+X(2)),XG,0.5*(X(2)+X(0))], $ - [0.5*(Y(0)+Y(1)) ,YG,0.5*(Y(2)+Y(1)) ,YG ,0.5*(Y(0)+Y(2))],LINESTYLE=1, $ - NOCLIP=0, CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)],THICK=1 - ENDIF - ENDIF - ENDFOR - ENDIF - - IF adtri EQ 3 AND datastatus(6) THEN BEGIN - ALLIND = UNIQ(SORT( [TRIGP(0:NTRI,1), TRIGP(0:NTRI,2), TRIGP(0:NTRI,3)] -1)); - X=[gridmat(0,ALLIND)] - Y=[gridmat(1,ALLIND)] - PLOTS,X,Y,LINESTYLE=-1,PSYM=8,SYMSIZE=0.3, $ - NOCLIP=0,CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - ENDIF - - -; -; Draws the mesh contour line -; - IF adcoast EQ -1 THEN BEGIN - OK=0 - IF (n_elements(contourline) GT 5) THEN BEGIN - NP=n_elements(contourline) -; -; J0 is the index of first point in polygon -; - J0=contourline(2,0) - I=0L - FOR J=2,contourline(1,0) DO BEGIN - J1=contourline(J,0) - IF (J LT contourline(1,0)) THEN BEGIN - J2=contourline(J+1,0) - IF (contourline(J+1,1) LT 0) THEN BEGIN -; -; If this is negative: end of poygon: closing it back to J0 -; - J2=J0 - J0=J-1 - ENDIF - ENDIF ELSE J2 = J0 - x1=gridmat(0,J1) - y1=gridmat(1,J1) - x2=gridmat(0,J2) - y2=gridmat(1,J2) - PLOTS,[x1,x2],[y1,y2], $ ;HICK=4, $ - NOCLIP=0,CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)],COLOR=253+(I MOD 2L), THICK=2 - IF (J LT contourline(1,0)) THEN BEGIN - IF (contourline(J+1,1) LT 0) THEN I=I+1L - ENDIF - ENDFOR - ENDIF - ENDIF - - IF datastatus(7) THEN BEGIN - IF (adsyms GE 2) THEN BEGIN - NP=8 - A = FINDGEN(NP+1) * (!PI*2/FLOAT(NP)) ;Make a vector of 16 points, A[i] = 2pi/16. - USERSYM, COS(A), SIN(A), /FILL ;Define the symbol to be a filled circle - FOR I=1L,nngp DO BEGIN - OPLOT,[gridmat(0,i-1)],[gridmat(1,i-1)], $ - psym=psyms(0),SYMSIZE=psymsizes(0),NOCLIP=0, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - strlab=strcompress(string(I)) - IF (adsyms GT 3) THEN XYOUTS,gridmat(0,i-1),gridmat(1,i-1),strlab, $ - CHARSIZE=0.5,NOCLIP=0, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - ENDFOR - ENDIF - - IF (N_ELEMENTS(nspecgp) GT 0) THEN BEGIN - IF (adsyms MOD 2) AND (nspecgp GT 0) THEN BEGIN - FOR I=0,nspecgp-1 DO BEGIN - IF (specmat(7,I) GE 0) THEN BEGIN - IF specmat(9,I) GT 0 THEN BEGIN - OPLOT,[specmat(1,I)],[specmat(2,I)], $ - PSYM=specmat(9,I),SYMSIZE=specmat(8,I), THICK=specmat(10,I) - ENDIF ELSE BEGIN - OPLOT,specmat(1,I-1:I),specmat(2,I-1:I), $ - PSYM=specmat(9,I),SYMSIZE=specmat(8,I), $ - LINESTYLE=specmat(11,I), THICK=specmat(10,I),NOCLIP=0, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)]; - ENDELSE - deltax0=0. - deltay0=-0.1 - deltax=deltax0*(rangex(1)-rangex(0))/30. - deltay=deltay0*(rangex(1)-rangex(0))/40. - ; 1 point is 1/72 US inch or 0.0353 cm - IF output EQ 1 THEN deltay=deltay0*0.4*specmat(12,I)*basefontsize*0.0353 $ - *(rangex(1)-rangex(0))/(FLOAT(pssizex)*(trx-blx)) - IF I MOD 2 THEN BEGIN - deltay=-deltay0*(rangex(1)-rangex(0))/20. - IF output EQ 1 THEN deltay=-1.4*deltay0*specmat(12,I)*basefontsize*0.0353 $ - *(rangex(1)-rangex(0))/(FLOAT(pssizex)*(trx-blx)) - ENDIF - IF specmat(12,I) GT 0 THEN BEGIN - xout=specmat(1,I)+deltax - yout=specmat(2,I)+deltay - IF (xout GT rangex(0)) AND (xout LT rangex(1)) AND $ - (yout GT rangey(0)) AND (yout LT rangey(1)) THEN $ - XYOUTS,xout,yout,STRMID(specname(I),0,15),CHARSIZE=specmat(12,I),ALIGNMENT=0. ;, $ - ENDIF - ENDIF - ENDFOR - ENDIF - ENDIF ; end of test : (N_ELEMENTS(nspecgp) GT 0) - ENDIF - - IF datastatus(3) AND adbathy GT 0 THEN BEGIN - x=(findgen(nxzmax-nxzmin+1)+nxzmin)*dx - y=(findgen(nyzmax-nyzmin+1)+nyzmin)*dy - CASE adbathy OF - 1:CONTOUR,gd(nxzmin:nxzmax,nyzmin:nyzmax),x,y, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - XSTYLE=5,YSTYLE=5, C_LINESTYLE=[1,1],C_LABELS=[1,1], $ - LEVELS=[30,50], $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - 2:CONTOUR,gd(nxzmin:nxzmax,nyzmin:nyzmax),x,y, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - XSTYLE=5,YSTYLE=5, C_LINESTYLE=[0],C_LABELS=[1], $ - LEVELS=[300], $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - 3:CONTOUR,SMOOTH(gd(nxzmin:nxzmax,nyzmin:nyzmax),[10,10]),x,y, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - XSTYLE=5,YSTYLE=5, C_LINESTYLE=[0],C_LABELS=[1,1,1], $ - LEVELS=[50,80,100], C_THICK=[2], $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - 4:CONTOUR,gd(nxzmin:nxzmax,nyzmin:nyzmax),x,y, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - XSTYLE=5,YSTYLE=5, C_LINESTYLE=[0],C_LABELS=[0], $ - LEVELS=[0,1000,2000,3000], C_THICK=[1], $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - ENDCASE - ENDIF - - - IF N_ELEMENTS(raya) NE 0 THEN BEGIN - nrays=(rayamax-rayamin)/rayres+1 - nray0=(180+rayamin)/rayres - IF (raystype EQ 1) THEN BEGIN - N1=nray0 - N2=nray0+nrays-1 - ENDIF ELSE BEGIN - N1=0 - N2=nrays-1 - ENDELSE - nstepmax=MAX(raynsteps,Imax) - FOR I=N1,N2 DO BEGIN - doit=0 - CASE RaysOK OF - 0:doit=1 - 1:IF rayflag(I) THEN doit=1 - 2:IF rayflag(I) THEN doit=0 - 3:doit=0 - ENDCASE - IF doit THEN BEGIN - x0=[rayx(I,0)] - y0=[rayy(I,0)] - ;OPLOT,x0,y0,psym=1 - FOR J=1,raynsteps(I)-1 DO BEGIN - IF (rayx(I,J) GT rangex(0) and rayx(I,J) LT rangex(1) and $ - rayy(I,J) GT rangey(0) and rayy(I,J) LT rangey(1)) THEN BEGIN - - OPLOT,[x0,rayx(I,J)],[y0,rayy(I,J)],THICK=4, $ ;psym=-1, $ - linestyle=0,SYMSIZE=0.15 ;,COLOR=2+((J/10)MOD 8)*(Navailcolor-5)/6 - ENDIF - x0=rayx(I,J) - y0=rayy(I,J) - ENDFOR - IF raynsteps(I) GE 1 THEN OPLOT,[x0,x0],[y0,y0],psym=-6, $ - linestyle=0,THICK=4,SYMSIZE=0.4,NOCLIP=0 - x0=rayx(I,J) - y0=rayy(I,J) - ENDIF - ENDFOR - ENDIF - - - IF FLAGTSTEP THEN BEGIN - MAXS=MAX(TIMESTEPS(1,*)) - MINS=MAX(TIMESTEPS(1,*)) - - FOR I=NTIMESTEPS-1,0,-1 DO BEGIN - OPLOT,[TIMESTEPS(2,I)],[TIMESTEPS(3,I)],THICK=4, psym=4, $ ; *TIMESTEPS(1,I)/MAXS - linestyle=0,SYMSIZE=4,COLOR=Navailcolor-3-I - ENDFOR - ENDIF - - - IF transOK and adtr THEN BEGIN - PSIZES=FLTARR(Ntrans)+0.2 - PSIZES(0)=1. - Psizes(Ntrans-1)=1. - OPLOT,Xtrans,Ytrans,PSYM=transsym, $ - LINESTYLE=transline,THICK=transthick,SYMSIZE=transsymsize - ENDIF - IF adbathydot GT 0 THEN plot_dot_bathy - RETURN -END - -;---------------------------------------------------------------------------- -PRO doplot -;** 1 ** Display parameters -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -;*******END OF COMMON BLOCKS******************************* - - ERASE - WIDGET_CONTROL, Wdraw, SENSITIVE=1 - - CASE datatype OF - 0:print,'Plot not updated' - 4:doplotothers - ELSE:IF TOTAL(datastatus(10:13)) GE 1 THEN doplottimeseries - ENDCASE -END - -;---------------------------------------------------------------------------- -PRO wavepar_from_spectrum,Spec,freq,theta,df,dtheta,Hs,fp,thet,sigth - - nf=N_ELEMENTS(freq) - nth=N_ELEMENTS(theta) - a1=FLTARR(nf) - b1=FLTARR(nf) - IN2=FLTARR(nf) - thet=FLTARR(nf) - Etot=FLTARR(nf) - Etot1=FLTARR(nf) - Etot2=FLTARR(nf) - Etot3=FLTARR(nf) - Etot4=FLTARR(nf) - I1=WHERE(sin(theta*!dtor) < 0.) - I2=WHERE(sin(theta*!dtor) > 0.) - I3=WHERE(cos(theta*!dtor) < 0.) - I4=WHERE(cos(theta*!dtor) > 0.) -; I5=WHERE((-1.*cos(theta*!dtor)-0.8) > 0.) -; I5=WHERE((sin(theta*!dtor)) > 0.) - FOR I=0,nf-1 DO BEGIN -;Spec(I,I5)=0. - Etot(I)=TOTAL(Spec(I,*))*Df(I)*dtheta*!dtor - Etot1(I)=TOTAL(Spec(I,I1))*Df(I)*dtheta*!dtor - Etot2(I)=TOTAL(Spec(I,I2))*Df(I)*dtheta*!dtor - Etot3(I)=TOTAL(Spec(I,I3))*Df(I)*dtheta*!dtor - Etot4(I)=TOTAL(Spec(I,I4))*Df(I)*dtheta*!dtor - ENDFOR - ETOTW=TOTAL(ETOT1) - ETOTE=TOTAL(ETOT2) - ETOTN=TOTAL(ETOT3) - ETOTS=TOTAL(ETOT4) - ETOT2=TOTAL(ETOT) - PRINT,NF,ETOT2,', 4 QUAD W E S N:',4*ETOTW,4*ETOTE,4*ETOTN,4*ETOTS - PRINT,'R EW NS:',ETOTE/ETOTW,ETOTS/ETOTN - Hs=4*SQRT(Etot2) - ; COMPUTES BULK PARAMETERS, WITH THE REFLECTED WAVES REMOVED - ;Index=where((y GT 180) AND (y LT 360),kount) - ;IF kount GT 0 THEN table(*,index)=0. ;removes the reflected wave - Ef=TOTAL(Spec,2)*dtheta*!dtor ;frequency spectrum - Efmax=MAX(Ef,ifp) - fp=(freq(ifp)*Ef(ifp)+freq(max([ifp-1,0]))*Ef(max([ifp-1,0]))+ $ - freq(min([ifp+1,nf-1]))*Ef(min([ifp+1,nf-1]))) - if (FP NE 0) THEN $ - fp=fp/(Ef(ifp)+Ef(max([ifp-1,0]))+Ef(min([ifp+1,nf-1]))) - FOR I=0,nf-1 DO BEGIN - a1(I)=TOTAL(cos(theta(*)*!dtor)*spec(I,*))*dtheta*!dtor - b1(I)=TOTAL(sin(theta(*)*!dtor)*spec(I,*))*dtheta*!dtor - IN2(I)=TOTAL(spec(I,0:nth/2-1)*spec(I,nth/2:nth-1))*dtheta*!dtor/(Ef(I)^2) - thet(I)=ATAN(b1(I),a1(I)) - IF thet(I) < 0. THEN thet(I)=thet(I)+2.*!pi - ENDFOR - - ; Spread at peak - sigth=SQRT(ABS(2*(1-(a1(Ifp)*cos(thet(Ifp)) $ - +b1(Ifp)*sin(thet(ifp)))/Efmax)))/!dtor - thet=thet(ifp)/!dtor - PRINT,'I at fp:',IN2(ifp) - -END - - -;---------------------------------------------------------------------------- -PRO doplottimeseries -; -; Performs all plots based on time series data -; -; Method: first processes the data from modelled or observed time series -; then plots the data -; -; - three possible values for 'datatype': (1) observed, (2) modeled, or (3) comparison -; NB: other values (4) correspond to maps ... -; - three possible 'typ' of data: (2) f-theta spectra, (1) f-spectra, (0) parameters (Hs ...) - -;** 1 ** Display parameters -COMMON AXISFRAME,axis_orient,frametype,outx1lab,outx2lab,outy1lab,outy2lab -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON LANGUAGE, ilang,dictionnaire -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON OVERLAY, addir,adsyms,adbathy,adcoast,psyms,psymsizes,adtr,adtri -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON THREED, Ax3D,Az3D,smoothing -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth - -;** 2 ** Display and data variables/parameters -COMMON FREQ, freq,nfband,findex,findex2 -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize - -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y,c_lon,c_lat - -;** 3 ** I/O and data variables -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON TIMESERIES, modspec,obs,obs2,om,ts_filetype, nbins, bulktype,scatvar -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -COMMON LOCALY, Ymem,ymem2,ymem3,ymem4,ymem5 -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -;*******END OF COMMON BLOCKS******************************* - indext=0L+(tindex-1)*dtindex - indext2=0L+(tindex2-1)*dtindex - nt=0L+indext2-indext+1 - POSBOX=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - -ytit='' - nf=findex2-findex+1 - -; -; 1. manages type of data (1: observed, 2: modeled, 3: comparison) -; - CASE datatype OF - 1:BEGIN - dates0=*obs.dates - dates=dates0(indext:indext2) - nabin=obs.nabin - np=obs.np - nv=obs.nvar - nr=obs.nrun - typ=obs.typ - f=*obs.f - theta=*obs.theta - df=*obs.df - varname=strcompress((*obs.varnames)[plottype],/REMOVE_ALL) - pname=(*obs.pnames)[c_spec] - pnames=(*obs.pnames) - data0=(*obs.data) - data=data0(*,*,*,findex-1:findex2-1,0:nabin-1,indext:indext2) - flag0=*obs.flags - flags=flag0(indext:indext2) - END -; - 2:BEGIN - dates0=*modspec.dates - IF (indext GT indext2) THEN BEGIN - RETURN - ENDIF - dates=dates0(indext:indext2) - nv=modspec.nvar - nabin=modspec.nabin - np=modspec.np - nr=modspec.nrun - typ=modspec.typ - IF typ EQ 2 THEN BEGIN - U10=*modspec.pU10 - Udir=*modspec.pUdir - Curr=*modspec.pCurr - Currdir=*modspec.pCurrdir - depth=*modspec.pdepth - ENDIF - f=*modspec.f - theta=*modspec.theta - df=*modspec.df - flag0=*modspec.flags - varname=strcompress((*modspec.varnames)[plottype],/REMOVE_ALL) - pname=(*modspec.pnames)[c_spec] - pnames=(*modspec.pnames) - data0=(*modspec.data) - size0=size(data0) - f1=MIN([findex,size0(4)])-1 - f2=MIN([findex2,size0(4)])-1 -print,'TEST:',f1,f2,size(data0) - data=data0(*,*,*,f1:f2,0:nabin-1,indext:indext2) - flags=flag0(indext:indext2) - END -; - 3:BEGIN - IF (*om.dateo EQ !NULL) THEN BEGIN - PRINT,'No common dates: no plot.' - RETURN - ENDIF - dates0=(*obs.dates)[*om.dateo] - IF (indext LT 0) THEN indext=0 - - IF (indext GT indext2) THEN BEGIN - PRINT,'time index 1 > time index2:',indext,indext2 - RETURN - ENDIF - dates=dates0(indext:indext2) - - nv=om.nvar - nabin=obs.nabin - np=om.np - nr=obs.nrun - typ=modspec.typ - f=(*obs.f)[*om.fo] - df=(*obs.df)[*om.fo] - theta=*modspec.theta - data=FLTARR(1,np,nv,findex2-findex+1,nabin,nt) - data2=FLTARR(modspec.nrun,np,nv,findex2-findex+1,nabin,nt) - names=(*obs.varnames) - varname=strcompress(names((*om.vo)[plottype]),/REMOVE_ALL) - IF varname EQ 'sth1' THEN varname='sth1m' - pname=(*obs.pnames)[(*om.po)[c_spec]] - pnames=(*obs.pnames)[(*om.po)] - data0=(*modspec.data)*1.; - - FOR I=0L,nt-1 DO $ - IF ((*modspec.flags)[indext+I] NE 0) THEN BEGIN - J=0L+(*om.datem)[indext+I] - data2(*,*,*,*,*,I)= $ - data0(*,*om.pm,*om.vm,(*om.fm)[findex-1:findex2-1],0:nabin-1,J); - ENDIF - data0=(*obs.data) - ;I=WHERE(data0 NE 0) - ;data0(I)=1./data0(I) - FOR I=0L,nt-1 DO $ - IF ((*modspec.flags)[indext+I] NE 0) THEN $ - data(0,*,*,*,*,I)= $ - data0(0,*om.po,*om.vo,(*om.fo)[findex-1:findex2-1],0:nabin-1,(*om.dateo)[indext+I]) - flag0=*modspec.flags - flags=flag0(indext:indext2) - END - ENDCASE - -; -; 2. manages typ of data (2: 2D spectra, 1: 1D spectra ... -; -; -; Frequency-direction spectrum -; - IF typ EQ 2 THEN BEGIN - IF (c_cut EQ 5) THEN BEGIN - rangex=[min(F),max(F)] - x=f(findex-1:findex2-1) - y=theta/!dtor - rangey=[min(y),max(y)] - ; Restricts the frequency range to that of the model if defined - rangex=[min(x),max(x)] - Rescale,0 - yp=FLTARR(findex2-findex+1,modspec.nabin) - yp(*,*)=data(0,c_spec,plottype,*,*,0) - ats='at' - ; ats=dictionnaire.at(ilang) - ;tit=varname+' '+ats+' '+pname - tit=varname+' '+'at'+' '+pname - xtit='f (Hz)' - ytit='Compass direction (from) in degrees ' - cbtit='Energy density (m^2/Hz/rad)' - taille2=size(yp) - Contorno,yp,x,y,tit,xtit,' ',' ',0,0,1 - IF (filltype LE 4) THEN Drawframe,xtit,' ',ytit,' ',FRAME=5 -; - spec2D=yp - timec=((dates[0].h+timezone_plot-dates[0].zone)*60+dates[0].minu) - TimetoDate,dates[0].jday,timec,date,hour - strlab3=date+' '+hour - XYOUTS,rangex(0)+0.95*(rangex(1)-rangex(0)), $ - rangey(1)-0.05*(rangey(1)-rangey(0)),strlab3,ALIGNMENT=1.0 -; - IF varname EQ 'E(,)' THEN BEGIN - r = .3 ;len of arrow head - angle = 22.5 * !dtor ;Angle of arrowhead - st = r * sin(angle) ;sin 22.5 degs * length of head - ct = r * cos(angle) - ; arrow - xmotif=[0.,1.,1.-ct,1.,1.-ct] - ymotif=[0.,0.,st,0.,-st] - - - u0=2*cos((90-Udir(c_spec,indext))*!dtor)*x(1) - v0=2*sin((90-Udir(c_spec,indext))*!dtor)*x(1) - IF (U10(c_spec,indext) GT 0) THEN PLOTS,u0*(1-xmotif)+v0*ymotif, $ - v0*(1-xmotif)-U0*ymotif,THICK=4 - u0=-2*cos((90-Currdir(c_spec,indext))*!dtor)*x(1) - v0=-2*sin((90-Currdir(c_spec,indext))*!dtor)*x(1) - IF (Curr(c_spec,indext) GT 0) THEN PLOTS,u0*(xmotif)+v0*ymotif, $ - v0*(xmotif)-U0*ymotif,THICK=2,LINESTYLE=0 - - - df2=df(findex-1:findex2-1) - dtheta=360/N_ELEMENTS(Y) - Hs=0. - fp=0. - thet=0. - sigth=0. -; -; Computes bulk parameters from spectrum -; - wavepar_from_spectrum,yp,x,y,df2,dtheta,Hs,fp,thet,sigth -; -; Overlays parameter values on plot -; - strlab='Hs:'+STRCOMPRESS(STRING(Hs,FORMAT='(F5.2)'))+'m' - XYOUTS,rangex(0)+0.05*(rangex(1)-rangex(0)), $ - rangey(1)-0.05*(rangey(1)-rangey(0)),strlab - strlab='fp:'+STRCOMPRESS(STRING(Fp,FORMAT='(F6.4)'))+' Hz' - XYOUTS,rangex(0)+0.05*(rangex(1)-rangex(0)), $ - rangey(1)-0.1*(rangey(1)-rangey(0)),strlab - strlab='Mean dir. at fp: ' $ - +STRCOMPRESS(STRING(thet,FORMAT='(F6.2)')) +' deg' - XYOUTS,rangex(0)+0.05*(rangex(1)-rangex(0)), $ - rangey(1)-0.15*(rangey(1)-rangey(0)),strlab - strlab='Spread at fp: ' $ - +STRCOMPRESS(STRING(sigth,FORMAT='(F5.2)')) +' deg' - XYOUTS,rangex(0)+0.05*(rangex(1)-rangex(0)), $ - rangey(1)-0.2*(rangey(1)-rangey(0)),strlab - - strlab='U10: ' $ - +STRCOMPRESS(STRING(U10(c_spec,indext),FORMAT='(F5.2)'))+' m/s' - XYOUTS,rangex(0)+0.05*(rangex(1)-rangex(0)), $ - rangey(1)-0.25*(rangey(1)-rangey(0)),strlab - - strlab='Curr: ' $ - +STRCOMPRESS(STRING(Curr(c_spec,indext),FORMAT='(F5.2)'))+' m/s' - XYOUTS,rangex(0)+0.05*(rangex(1)-rangex(0)), $ - rangey(1)-0.3*(rangey(1)-rangey(0)),strlab - ENDIF - RETURN - ENDIF ELSE BEGIN -; -; Integrated the f,theta spectrum over directions -; - tempo=TOTAL(data,5)*abs(theta(1)-theta(0)) - nabin=1 - data=FLTARR(nr,np,nv,findex2-findex+1,nabin,indext2-indext+1) - data(*,*,*,*,0,*)=tempo - typ=1 - varname='Ef' - ENDELSE - ENDIF - - - - - ;***************************************************************** - ; The following section determines the appearance of the x-axis - ; for time series: ticks, labels, dates, ... - ;***************************************************************** - xposi=0. - xnminor=1 - IF (c_cut LE 1) OR (c_cut EQ 4) OR (c_cut EQ 5 and typ EQ 1) THEN BEGIN -; -; Prepares data for time series plot: the x-axis is time -; - IF (FLOOR(dates[0].jday-0.5) EQ FLOOR(dates[nt-1].jday-0.5)) THEN BEGIN -; -; all the data is from the same day, therefore the -; x-axis shows hours, and the x-label indicates the date. -; - xtit='Hours ('+months(ilang,dates[0].m-1)+' '+ $ - STRING(dates[0].d,FORMAT='(I2)')+', '+ STRING(dates[0].y,FORMAT='(I4)')+')' - rangex=[dates[0].h,dates[nt-1].h + 1] - xnticks=dates[nt-1].h+1-dates[0].h - ;print,dates[0].h,dates[nt-1].h+1,xnticks - xnames=[''] - xposi=[0] - x=dates.h+dates.minu/60.+dates.s/3600. - ENDIF ELSE BEGIN - x=dates.jday-0.5-LONG(dates[0].jday-0.5); +((dates[0].h+dates[0].minu/60.+dates[0].s/3600.)/24.) - ; IF x(0) GE 1 THEN x=x-1. - IF (dates[0].m EQ dates[nt-1].m AND dates[0].y EQ dates[nt-1].y) THEN BEGIN -; -; Here all the data is from the same month: the ticks are the -; 00:00 hour at the end of each day, and the tick labels (day numbers) are shifted to appear between two ticks -; - rangex=[0,dates[nt-1].d-dates[0].d+ 1] -; xtit=dictionnaire.days(ilang)+' ('+months(ilang,dates[0].m-1)+' '+ STRING(dates[0].y,FORMAT='(I4)')+')' - xtit='days'+' ('+months(ilang,dates[0].m-1)+' '+ STRING(dates[0].y,FORMAT='(I4)')+')' - xnticks=dates[nt-1].d+1-dates[0].d - IF (xnticks LE 10) THEN xnminor=4 - IF (xnticks LE 3) THEN xnminor=24 - xnames=STRING(FINDGEN(xnticks)+dates[0].d,FORMAT='(I2)') -; -; Position of ticks on the date (x) axis -; - xposi=FINDGEN(xnticks)+0.5 - xntickval=FINDGEN(xnticks+1) - ENDIF ELSE BEGIN - rangex=[0,CEIL(max(x))] -; xtit=dictionnaire.days(ilang)+' ('+STRING(dates[0].y,FORMAT='(I4)')+')' - xtit='days'+' ('+STRING(dates[0].y,FORMAT='(I4)')+')' -; -; defines maximum number of days for writing dates -; - jmax=62 - IF (axis_orient EQ 1) THEN jmax=124 - IF ((dates[nt-1].Jday-dates[0].Jday) LT jmax) THEN BEGIN - xnticks=rangex(1) - ;dj=2; - dj=1+xnticks/15 - IF (axis_orient EQ 1) THEN dj=2; %1+xnticks/30 - xnminor=dj - xnticks=xnticks/dj - CALDAT,FINDGEN(xnticks)*dj+dates[0].jday,m,d,y - xnames=STRARR(xnticks) - FOR I=0,xnticks-1 DO BEGIN - IF (m(I) LT 10) THEN ms=STRING(m(I),FORMAT='(I1)') ELSE ms=STRING(m(I),FORMAT='(I2)') - IF (ilang EQ 0) THEN $ - xnames(I)=ms+'/'+STRING(d(I),FORMAT='(I2)') $ - ELSE xnames(I)=STRING(d(I),FORMAT='(I2)')+'/'+ms - ENDFOR - xntickval=FINDGEN(xnticks+1)*dj - xposi=FINDGEN(xnticks)*dj+0.5 - IF (axis_orient EQ 1) THEN xposi=xposi+0.4 - - ENDIF ELSE BEGIN - j1=JULDAY(dates[nt-1].m,1,dates[nt-1].y) - j0=JULDAY(dates[0].m,1,dates[0].y) - xnticks=LONG(dates[nt-1].jday)+1-LONG(dates[nt-1].jday) - IF (xnticks GT 59) THEN xnticks=xnticks/2 - IF (xnticks > 60) THEN xnticks=xnticks/2 - xnposi=FIX((j1-j0)/29.5) - rangex=[j0-dates[0].jday,j1-dates[0].jday] - xposi=FINDGEN(xnposi)*29.5+14.5+rangex(0) - CALDAT,xposi+dates[0].jday,m,d,y - ;print,'months',m - xnames=months(ilang,m-1) - xntickval=FINDGEN(xnticks+1) - ENDELSE - IF (xnticks LE 10) THEN xnminor=4 - ENDELSE - xtnames=REPLICATE(' ',xnticks+1) - ENDELSE - ENDIF -; - IF typ EQ 1 THEN BEGIN ; for frequency-dependent variables - y0=FLTARR(nr,np,findex2-findex+1,nt) - y0w=FLTARR(nr,np,findex2-findex+1,nt) - y0(*,*,*,*)=data(*,*,plottype,*,0,*) - y0w(*,*,*,*)=data(*,*,0,*,0,*) - y0d=y0w; - TAILLE=SIZE(data) - IF (TAILLE(3) GE 2) THEN y0d(*,*,*,*)=data(*,*,1,*,0,*) - IF (datatype EQ 3) THEN BEGIN - y02=FLTARR(modspec.nrun,np,findex2-findex+1,nt) - y02w=FLTARR(modspec.nrun,np,findex2-findex+1,nt) - y02(*,*,*,*)=data2(*,*,plottype,*,0,*) - y02w(*,*,*,*)=data2(*,*,0,*,0,*) - y02d=y02w; - IF (TAILLE(3) GE 2) THEN y02d(*,*,*,*)=data2(*,*,1,*,0,*) - y2=FLTARR(modspec.nrun,np,nt) - ENDIF - y=FLTARR(nr,np,nt) -; - CASE varname OF - 'Ef': BEGIN - IF (bulktype EQ 3) THEN BEGIN - Isth=-1 - IF (datatype NE 1) THEN BEGIN ; case of model data - FOR J=modspec.nvar-1,0,-1 DO BEGIN - var3=STRMID((*modspec.varnames)[J],0,4) - IF STRPOS(var3,'sth1') GT -1 THEN Isth=J - ENDFOR - ENDIF ELSE BEGIN - FOR J=obs.nvar-1,0,-1 DO BEGIN ; case of obs. - var3=STRMID((*obs.varnames)[J],0,4) - IF STRPOS(var3,'sth1') GT -1 THEN Isth=J - ENDFOR - ENDELSE - y01=FLTARR(nr,np,findex2-findex+1,nt) - IF (Isth GE 0) THEN y01(*,*,*,*)=data(*,*,Isth,*,0,*) - ENDIF ; (bulktype EQ 3) -; GET_LUN,unit1 -; OPENW,unit1,'buoy.txt' - FOR I=0,nt-1 DO BEGIN - FOR J=0,np-1 DO BEGIN - FOR K=0,nr-1 DO BEGIN -; -; Computes the bulk parameters according to the chosen moment: E(f), E(f)*f^4 ... -; - IF (bulktype EQ 0) THEN $ - y(k,J,I)=4.*SQRT(TOTAL(y0(K,J,*,I)*df(findex-1:findex2-1))) - IF (bulktype EQ 1) THEN $ - y(k,J,I)=TOTAL((2*!pi*freq(findex-1:findex2-1))^4*y0(K,J,*,I)*df(findex-1:findex2-1))/9.81^2 - IF (bulktype EQ 2) THEN $ - y(k,J,I)=2.*TOTAL((2*!pi*freq(findex-1:findex2-1))^3*y0(K,J,*,I)*df(findex-1:findex2-1))/9.81 - IF (bulktype EQ 3) THEN $ - y(k,J,I)=2.*TOTAL((2*!pi*freq(findex-1:findex2-1))^3*y0(K,J,*,I) $ - *df(findex-1:findex2-1)*(1-0.5*(y01(K,J,*,I)*!dtor)^2))/9.81 - IF (bulktype EQ 4) THEN $ - y(k,J,I)=MEAN((2*!pi)^4*freq(findex-1:findex2-1)^5*y0(K,J,*,I))/9.81^2 - IF (bulktype EQ 5) THEN y(k,J,I)=TOTAL((2*!pi*freq(findex-1:findex2-1))^2*y0(K,J,*,I)*df(findex-1:findex2-1)) - IF (bulktype EQ 6) THEN BEGIN - m1=TOTAL((freq(findex-1:findex2-1))^1*y0(K,J,*,I)*df(findex-1:findex2-1)) - m0=TOTAL(y0(K,J,*,I)*df(findex-1:findex2-1)) - y(k,J,I)=m0/m1 -; PRINTF,unit1,dates[I].y,dates[I].m,dates[I].d,dates[I].h,m1,y(k,J,I) - ENDIF - IF (bulktype EQ 7) THEN BEGIN - m2=TOTAL((freq(findex-1:findex2-1))^(2)*y0(K,J,*,I)*df(findex-1:findex2-1)) - m0=TOTAL(y0(K,J,*,I)*df(findex-1:findex2-1)) - y(k,J,I)=(m0/m2)^(0.5) - ENDIF - ENDFOR - ENDFOR - ENDFOR -; close,unit1 -; FREE_LUN,unit1 - - yp2=FLTARR(nt) - FOR I=0,nt-1 DO BEGIN - yp2(I)=4.*SQRT(TOTAL(y0(0,0,*,I)*df(findex-1:findex2-1))) - ENDFOR - IF (datatype EQ 3) THEN BEGIN - IF (bulktype EQ 3) THEN BEGIN - y01=FLTARR(modspec.nrun,np,findex2-findex+1,nt) - y01(*,*,*,*)=data2(*,*,Isth,*,0,*) - ENDIF -; GET_LUN,unit1 -; OPENW,unit1,'model.txt' - FOR I=0,nt-1 DO BEGIN - FOR J=0,np-1 DO BEGIN - FOR K=0,modspec.nrun-1 DO BEGIN - IF (bulktype EQ 0) THEN $ - y2(K,J,I)=4.*SQRT(TOTAL(y02(K,J,*,I)*df(findex-1:findex2-1))) - IF (bulktype EQ 1) THEN $ - y2(K,J,I)=TOTAL((2*!pi*freq(findex-1:findex2-1))^4*y02(K,J,*,I)*df(findex-1:findex2-1))/9.81^2 - IF (bulktype EQ 2) THEN $ - y2(K,J,I)=2.*TOTAL((2*!pi*freq(findex-1:findex2-1))^3*y02(K,J,*,I)*df(findex-1:findex2-1))/9.81 - IF (bulktype EQ 3) THEN $ - y2(K,J,I)=2.*TOTAL((2*!pi*freq(findex-1:findex2-1))^3*y02(K,J,*,I) $ - *df(findex-1:findex2-1)*(1-0.5*(y01(K,J,*,I)*!dtor)^2))/9.81 - IF (bulktype EQ 4) THEN $ - y2(k,J,I)=MEAN((2*!pi)^4*freq(findex-1:findex2-1)^5*y02(K,J,*,I))/9.81^2 - IF (bulktype EQ 5) THEN $ - y2(k,J,I)=TOTAL((2*!pi*freq(findex-1:findex2-1))^2*y02(K,J,*,I)*df(findex-1:findex2-1)) - IF (bulktype EQ 6) THEN BEGIN - m1=TOTAL((freq(findex-1:findex2-1))^1*y02(K,J,*,I)*df(findex-1:findex2-1)) - m0=TOTAL(y02(K,J,*,I)*df(findex-1:findex2-1)) - y2(k,J,I)=m0/m1 -; PRINTF,unit1,dates[I].y,dates[I].m,dates[I].d,dates[I].h,m1,y2(k,J,I) - - ENDIF - IF (bulktype EQ 7) THEN BEGIN - m2=TOTAL((freq(findex-1:findex2-1))^(2)*y02(K,J,*,I)*df(findex-1:findex2-1)) - m0=TOTAL(y02(K,J,*,I)*df(findex-1:findex2-1)) - y2(k,J,I)=(m0/m2)^(0.5) -; PRINTF,unit1,dates[I].y,dates[I].m,dates[I].d,dates[I].h,m1,y2(k,J,I) - - ENDIF - ENDFOR - ENDFOR - ENDFOR -; close,unit1 -; FREE_LUN,unit1 - - ENDIF ;(datatype EQ 3) - END - 'sth1m':BEGIN - FOR I=0,nt-1 DO BEGIN - FOR J=0,np-1 DO BEGIN - FOR K=0,nr-1 DO BEGIN - ; y(k,J,I)=SQRT(TOTAL(y0(K,J,*,I)^2*y0w(K,J,*,I)*df(findex-1:findex2-1))/ $ - ; TOTAL(y0w(K,J,*,I)*df(findex-1:findex2-1)) ) - m1temp=abs(1-0.5*(y0(K,J,*,I)*!dtor)^2) - a1temp=cos(y0d(K,J,*,I)*!dtor)*m1temp - b1temp=sin(y0d(K,J,*,I)*!dtor)*m1temp - a1=TOTAL(a1temp*y0w(K,J,*,I)*df(findex-1:findex2-1)) - b1=TOTAL(b1temp*y0w(K,J,*,I)*df(findex-1:findex2-1)) - E=TOTAL(y0w(K,J,*,I)*df(findex-1:findex2-1)) - m1=sqrt(a1^2+b1^2)/E - y(k,J,I)=sqrt(abs(2*(1-m1)))/!dtor - ENDFOR - ENDFOR - ENDFOR - IF (datatype EQ 3) THEN BEGIN - FOR I=0,nt-1 DO BEGIN - FOR J=0,np-1 DO BEGIN - FOR K=0,modspec.nrun-1 DO BEGIN - ; y2(k,J,I)=SQRT(TOTAL(y02(K,J,*,I)^2*y02w(K,J,*,I)*df(findex-1:findex2-1))/ $ - ; TOTAL(y02w(K,J,*,I)*df(findex-1:findex2-1)) ) - m1temp=abs(1-0.5*(y02(K,J,*,I)*!dtor)^2) - a1temp=cos(y02d(K,J,*,I)*!dtor)*m1temp - b1temp=sin(y02d(K,J,*,I)*!dtor)*m1temp - a1=TOTAL(a1temp*y02w(K,J,*,I)*df(findex-1:findex2-1)) - b1=TOTAL(b1temp*y02w(K,J,*,I)*df(findex-1:findex2-1)) - E=TOTAL(y02w(K,J,*,I)*df(findex-1:findex2-1)) - m1=sqrt(a1^2+b1^2)/E - y2(k,J,I)=sqrt(abs(2*(1-m1)))/!dtor - - - ENDFOR - ENDFOR - ENDFOR - ENDIF - END -; - ELSE: BEGIN - yp=FLTARR(nr,np,findex2-findex+1,nt) - yp(*,*,*,*)=data(*,*,plottype,*,0,*) - y=FLTARR(nr,np,nt) - FOR I=0,nt-1 DO BEGIN - FOR J=0,np-1 DO BEGIN - FOR K=0,nr-1 DO BEGIN - fp=MAX(data(K,J,0,*,0,I),Ifmax) - y(K,J,I)=data(K,J,plottype,Ifmax,0,I) - ENDFOR - ENDFOR - ENDFOR - IF (datatype EQ 3) THEN BEGIN - y2=FLTARR(modspec.nrun,np,nt) - FOR I=0,nt-1 DO BEGIN - FOR J=0,np-1 DO BEGIN - FOR K=0,modspec.nrun-1 DO BEGIN - fp=MAX(data2(K,J,0,*,0,I),Ifmax) - y2(K,J,I)=data2(K,J,plottype,Ifmax,0,I) - ENDFOR - ENDFOR - ENDFOR - ENDIF - END - ENDCASE - ENDIF - - - tit=' ' - CASE varname of - 'Ef':BEGIN - ats='at' - ; ats=dictionnaire.at(ilang) - hss='significant wave height' - ; hss=dictionnaire.hs(ilang) - IF (c_cut EQ 0) OR (c_cut EQ 3) OR (c_cut EQ 4) OR (c_cut GE 6) THEN BEGIN - IF (bulktype EQ 0) THEN tit=hss+' (Hs) '+ats+' '+pname - IF (bulktype EQ 1) THEN tit='pseudo-m.s.s. '+ats+' '+pname - IF (bulktype EQ 2) THEN tit='Non-directional surface Stokes drift '+ats+' '+pname - IF (bulktype EQ 3) THEN tit='Surface Stokes drift '+ats+' '+pname - IF (bulktype EQ 4) THEN tit="Phillips' constant "+ats+' '+pname - IF (bulktype EQ 5) THEN tit="Surface velocity variance "+ats+' '+pname - IF (bulktype EQ 6) THEN tit="Mean period Tm01 "+ats+' '+pname - IF (bulktype EQ 0) THEN BEGIN - mmtom='m' - IF (MAX(y) LT 0.5) THEN BEGIN - mmtom='cm' - y=y*100. - IF (datatype EQ 3) THEN y2=y2*100. - IF (MAX(y) LT 3) THEN BEGIN - mmtom='mm' - y=y*10. - IF (datatype EQ 3) THEN y2=y2*10. - ENDIF - ENDIF - ytit='Hs ('+ mmtom+' '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - ENDIF - IF (bulktype EQ 1) THEN ytit='pseudo-m.s.s. (m, '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - IF (bulktype EQ 1) THEN ytit='pseudo-m.s.s. (m, '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - IF (bulktype EQ 2) THEN ytit='Ussnd (m/s, '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - IF (bulktype EQ 3) THEN ytit='Uss (m/s, '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - IF (bulktype EQ 4) THEN ytit='mean alpha ('+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - IF (bulktype EQ 5) THEN ytit=' (m2/s2, '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - IF (bulktype EQ 6) THEN ytit='Mean period Tm01 (s, '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - ENDIF ELSE BEGIN - tit='E(f) at '+pname - ytit='E (m^2/Hz)' - ENDELSE - END - 'Fp':BEGIN - ats='at' - ; ats=dictionnaire.at(ilang) - IF (c_cut EQ 0) OR (c_cut EQ 3) OR (c_cut EQ 4) OR (c_cut EQ 7) THEN BEGIN - IF (bulktype EQ 0) THEN tit='Microseismic bottom pressure variance'+' (m2/s2) '+ats+' '+pname - IF (bulktype EQ 1) THEN tit='pseudo-m.s.s. '+ats+' '+pname - IF (bulktype EQ 0) THEN ytit='Hs (m, '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - IF (bulktype EQ 1) THEN ytit='pseudo-m.s.s. (m, '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - ENDIF ELSE BEGIN - tit='Microseismic bottom pressure spectrum at '+pname - ytit='Fp (m^2/s)' - ENDELSE - END - 'Hs':BEGIN - ytit = 'Hs (m)' - tit='Significant wave height at '+pname - END - 'Curr':BEGIN - ytit = 'Current speed (m/s)' - tit='Current at '+pname - END - 'fp':BEGIN - ytit = 'fp (Hz)' - tit='Peak period at '+pname - END - 'f0-1':BEGIN - ytit = 'f0-1 (Hz)' - tit='Mean frequency (f0-1) at '+pname - END - 'f02':BEGIN - ytit = 'f02 (Hz)' - tit='Mean frequency (f02) at '+pname - END - 'U10':BEGIN - ytit = 'U10 (m/s)' - tit='Wind speed at '+pname - END - 'Udir':BEGIN - ytit = 'wind direction (deg)' - tit='Wind direction at '+pname - END - 'Hsband':BEGIN - ytit = 'Hs (m, 0.055 - 0.155 Hz only)' - tit='Significant wave height at '+pname - END - 'psi':ytit = 'Normalised Shields number' - 'ab':BEGIN - ytit = '0.7 * d1/3 (m)' - ypnoz=0.7*ypnoz - END - 'ub':ytit = 'r.m.s. bottom velocity amplitude (m/s)' - 'th1':BEGIN - IF (c_cut EQ 0) OR (c_cut EQ 3) OR (c_cut EQ 4) OR (c_cut GE 7) THEN BEGIN - ytit ='mean direction ('+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' from, degrees)' - ENDIF ELSE BEGIN - ytit = 'theta_mean(fp) (from, degrees)' - ENDELSE - tit='Mean direction at '+pname - IF typ EQ 1 THEN BEGIN - index180=WHERE(yp LT 0, kount) - IF kount GT 0 THEN yp(index180)=yp(index180)+360. - ENDIF - END - 'th1m':BEGIN - IF (c_cut EQ 0) OR (c_cut EQ 3) OR (c_cut EQ 4) OR (c_cut GE 7) THEN BEGIN - ytit ='mean direction ('+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' from, degrees)' - ENDIF ELSE BEGIN - ytit = 'theta_mean(fp) (from, degrees)' - ENDELSE - tit='Mean direction at '+pname - IF typ EQ 1 THEN BEGIN - index180=WHERE(yp LT 0, kount) - IF kount GT 0 THEN yp(index180)=yp(index180)+360. - ENDIF - END - 'th2':BEGIN - ytit = 'Mean direction 2 (from, degrees)' - IF typ EQ 1 THEN BEGIN - index180=WHERE(yp GE 180, kount) - IF kount GT 0 THEN yp(index180)=yp(index180)-180. - index180=WHERE(yp LT 0, kount) - IF kount GT 0 THEN yp(index180)=yp(index180)+180. - ENDIF - END - 'th2m':BEGIN - ytit = 'Mean direction 2 (from, degrees)' - IF typ EQ 1 THEN BEGIN - index180=WHERE(yp GE 180, kount) - IF kount GT 0 THEN yp(index180)=yp(index180)-180. - index180=WHERE(yp LT 0, kount) - IF kount GT 0 THEN yp(index180)=yp(index180)+180. - ENDIF - END - 'thu':ytit = 'theta_u (degrees)' - 'sth1':BEGIN - ats='at' - ; ats=dictionnaire.at(ilang) - IF (c_cut EQ 0) OR (c_cut EQ 3) OR (c_cut EQ 4) OR (c_cut GE 7) THEN BEGIN - tit='Directional spread (sth1m) '+ats+' '+pname - ytit='sth1m (deg., '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - END - END - 'sth1m':BEGIN - IF typ EQ 0 THEN BEGIN - ytit = 'sigma_theta(fp) (degrees)' - tit = 'Directional spread at '+pname - ENDIF ELSE BEGIN - ats='at' - ; ats=dictionnaire.at(ilang) - tit='Directional spread (sth1m) '+ats+' '+pname - ytit='sth1m (deg., '+STRING(FREQ(findex-1),FORMAT='(F5.3)') $ - +'-'+STRING(FREQ(findex2-1),FORMAT='(F5.3)')+' Hz)' - ENDELSE - END - 'sth2':ytit = 'Directional spread 2 (degrees)' - 'sth2m':ytit = 'Directional spread 2 (degrees)' - ELSE: - ENDCASE - - IF typ EQ 1 THEN BEGIN - CASE c_cut OF - 0:BEGIN ;time series of bulk parameter - yp=FLTARR(nr,nt) - yp(*,*)=y(*,c_spec,*) - IF (datatype EQ 3) THEN BEGIN - yp2=FLTARR(modspec.nrun,nt) - yp2(*,*)=y2(*,c_spec,*) - ENDIF - END - 1:BEGIN ;time series - yp=FLTARR(nt) - yp(*)=data(0,c_spec,plottype,findex-1,0,*) - IF (datatype EQ 3) THEN BEGIN - yp2=FLTARR(modspec.nrun,nt) - yp2(*,*)=data2(*,c_spec,plottype,findex-1,0,*) - ENDIF - END - 2:BEGIN ;f-spectrum - x=f(findex-1:findex2-1) - rangex=[min(x),max(x)] - xtit='f (Hz)' - yp=FLTARR(nr,findex2-findex+1) - yp(*,*)=data(*,c_spec,plottype,*,0) - ;time average - IF (smoothing GT 1) THEN BEGIN - nstrue=MIN([indext2-indext+1,smoothing]) - FOR I=0,nstrue-1 DO yp(*)=yp(*)+data(0,c_spec,plottype,*,0,I) - yp(*)=yp(*)/nstrue - ENDIF - IF (datatype EQ 3) THEN BEGIN - yp2=FLTARR(modspec.nrun,findex2-findex+1) - yp2(*,*)=data2(*,c_spec,plottype,*,0) - IF (smoothing GT 1) THEN BEGIN - nstrue=MIN([indext2-indext+1,smoothing]) - FOR I=0,nstrue-1 DO yp2(*,*)=yp2(*,*)+data2(*,c_spec,plottype,*,0,I) - yp2(*,*)=yp2(*,*)/nstrue - ENDIF - ENDIF - rangey=[min(yp),max(yp)] - IF fixrange THEN rangey=[mindepth,maxdepth] - END -; - 3:BEGIN ;mean f-spectrum - x=f(findex-1:findex2-1) - rangex=[min(x),max(x)] - xtit='f (Hz)' - yp=FLTARR(nr,findex2-findex+1) - yp(*,*)=TOTAL(data(*,c_spec,plottype,*,0,*),6)/nt - IF (datatype EQ 3) THEN BEGIN - yp2=FLTARR(modspec.nrun,findex2-findex+1) - yp2(*,*)=TOTAL(data2(*,c_spec,plottype,*,0,*),6)/nt - ENDIF - rangey=[min(yp),max(yp)] - IF fixrange THEN rangey=[mindepth,maxdepth] - END; - 4:BEGIN - kount=nt - I=FINDGEN(NT) - yp=FLTARR(nr,kount) - yp(*)=data(*,c_spec,plottype,0,0,I) - yp=FLTARR(nr,kount) - yp(*,*)=y(*,c_spec,I) - IF (datatype EQ 3) THEN BEGIN ;scatterplot of bulk - yp2=FLTARR(modspec.nrun,kount) - yp2(*,*)=y2(*,c_spec,I) - x=yp - rangex=[min(x),max(x)] - IF fixrange THEN rangex=[mindepth,maxdepth] - xtit='observations' - ENDIF ELSE BEGIN ;f-time plot - yp2=FLTARR(nt,findex2-findex+1) - yp2(*,*)=TRANSPOSE(data(0,c_spec,plottype,*,0,*)) - ytit='frequency (Hz)' - ENDELSE - END - - 5:BEGIN ;frequency-time plot - yp=FLTARR(nt,findex2-findex+1) - yp(*,*)=TRANSPOSE(data(0,c_spec,plottype,*,0,*)) - END -; -;Q-Q plot -; - 6:BEGIN - nav=nbins; - yp=FLTARR(1,nt) - yp(0,*)=y(0,c_spec,*) - indexnoz=WHERE(yp NE 0,kountz) - print,'YP:',size(yp),max(indexnoz),min(indexnoz) - ys=SORT(yp(indexnoz)); - taille=size(ys); - nQ=taille(1)/nav; - Indexz=WHERE(yp EQ 0,kountz) - yQ=REBIN(yp(ys(0:nQ*nav-1)),nav) - yp2=FLTARR(nt) - dirs=FLTARR(nt) - yp2(*)=y(0,c_spec,*) - IF (datatype EQ 3) THEN BEGIN - yp1=FLTARR(modspec.nrun,nt) - yp3=FLTARR(modspec.nrun,nt) - FOR K=0,modspec.nrun-1 DO BEGIN - yp1(K,*)=y2(K,c_spec,*) - yp3(K,indexnoz)=(y2(K,c_spec,indexnoz)-yp(indexnoz))^2 - ENDFOR - yp2=REBIN(yp1(*,ys(0:nQ*nav-1)),modspec.nrun,nav) - yp4=sqrt(REBIN(yp3(*,ys(0:nQ*nav-1)),modspec.nrun,nav)) ; STD dev of error - ENDIF - x=yQ - yp=FLTARR(1,nav); - yp(0,*)=yQ - rangex=[min(x),max(x)] - IF fixrange THEN rangex=[mindepth,maxdepth] - xtit='observations' - END -; -; Binned data plot: should make a separate subroutine !! -; - 8:BEGIN - - yp=FLTARR(nr,nt) - yp(*)=y(*,c_spec,*) - yp2=FLTARR(modspec.nrun,nt) - indexnoz=WHERE(yp NE 0,kountz) - ys=yp(indexnoz); - K=0 ; first model run - x=yp; - - yp2(K,*)=y2(K,c_spec,*) - y=yp2; - - rangex=[min(x),max(x)] - rangey=[min(y),max(y)] - IF fixrange THEN rangex=[mindepth,maxdepth] - IF fixrange THEN rangey=[mindepth,maxdepth] - nbin=nbins; - makebin,x,y,rangex,rangey,nbin,nbin,bindata,bindataw, ibin,jbin - xx=rangex(0)+FINDGEN(nbin)*(rangex(1)-rangex(0))/(nbin-1) - yy=rangey(0)+FINDGEN(nbin)*(rangey(1)-rangey(0))/(nbin-1) - fixrangememo=fixrange - mindepthmemo=mindepth - maxdepthmemo=maxdepth - mindepth=0 - maxdepth=1 - fixrange=1 - - NMAX=MAX(bindata) - bindata=bindata/NMAX - IND=WHERE(bindata EQ 0,kount) - IF (kount GT 0) THEN bindata(IND)=2*maxval - ;IND=WHERE(bindata LT maxval,kount) - ;IF (kount GT 0) THEN bindata(IND)=bindata(IND)/nmax - IF outxtit THEN xtit='observations' ELSE xtit='' - IF outxtit THEN ytit='model' ELSE xtit='' - Rescale,1 - POSBOX=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - PLOT,rangex,rangey,XSTYLE=1,YSTYLE=1, $ ;xticks=cbnticks, yticks=cbnticks, $ - XTITLE=xtit,YTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - xrange=rangex,yrange=rangey,THICK=3,/NODATA,LINESTYLE=2, $ - YGRIDSTYLE=2,Yticklen=1, XGRIDSTYLE=2,Xticklen=1 , POSITION=POSBOX - IF outcbtit THEN cbtit='Normalized occurence (nmax='+STRING(NMAX,FORMAT='(I6)')+')' $ - ELSE cbtit='' - binplot=bindata - Contorno,binplot,xx,yy,'',xtit,ytit,cbtit,0,0,1 - xm1=FLTARR(nbin) - ym1=xm1 - xm2=xm1 - ym2=ym1 - FOR I=0,nbin-1 DO BEGIN - IND=WHERE(ibin EQ I,kount) - IF (kount GT 0) THEN BEGIN - xm1(I)=TOTAL(x(IND))/kount - ym1(I)=TOTAL(y(IND))/kount - xm2(I)=MEDIAN(x(IND)) - ym2(I)=MEDIAN(y(IND)) - ENDIF ELSE BEGIN - xm1(I)=maxval*1.2 - ym1(I)=maxval*1.2 - xm2(I)=maxval*1.2 - ym2(I)=maxval*1.2 - ENDELSE - ENDFOR - OPLOT,xm1,ym1,THICK=4,LINESTYLE=0,MAX_VALUE=maxval - ;OPLOT,xm2,ym2,THICK=2,LINESTYLE=0,MAX_VALUE=maxval,COLOR=120 - OPLOT,rangex,rangey,THICK=3,LINESTYLE=2 - mindepth=mindepthmemo - maxdepth=maxdepthmemo - fixrange=fixrangememo - RETURN - END - - 9:BEGIN ;mss avg in bin ... JEJE PLOT - varn=STRMID(varname,0,3) - IU10=-1 - IHs=-1 - Imsc=-1 - FOR J=obs2.nvar-1,0,-1 DO BEGIN -; -; Looks for wind and other variables -; - var3=STRMID((*obs2.varnames)[J],0,3) - IF (var3 EQ 'U10') THEN IU10=J - IF (var3 EQ 'msc') THEN Imsc=J - ENDFOR -; - FOR J=obs2.nvar-1,0,-1 DO BEGIN - var2=STRMID((*obs2.varnames)[J],0,2) - IF (var2 EQ 'Hs') THEN IHs=J - ENDFOR - IF (iHS GE 0 AND iU10 GE 0) THEN BEGIN - - yp=FLTARR(nt) - IF (datatype EQ 1) THEN yp(*)=y(0,c_spec,*) ELSE yp(*)=y2(0,c_spec,*) - - - x=FLTARR(nt) - y=FLTARR(nt) - data02=(*obs2.data) - - FOR I=0L,nt-1 DO $ - IF ((*obs2.flags)[indext+I] NE 0) THEN BEGIN - x(I)=data02(0,c_spec,IU10,0,0,I) - y(I)=data02(0,c_spec,IHs,0,0,I) - ENDIF - - indexnoz=WHERE(yp NE 0 AND x LT 45,kountz) - - ys=yp(indexnoz); - - IF fixrange THEN rangex=[mindepth,maxdepth] - IF fixrange THEN rangey=[mindepth,maxdepth] - hsmax=maxdepth; - nbiny=nbins; - nbinx=26 - rangex=[0,25]; [min(x),max(x)] - hsmin=0.0; - rangey=[hsmin,hsmax] - - ys2=FLTARR(kountz); - FOR I=0L,kountz-1 DO BEGIN - ys2(I)=0.85*(1.25-0.25*(0.5/freq(findex2-1))^1.3)*2*(0.000295*x(indexnoz(I)) $ - *MIN([x(indexnoz(I)),14.5])+(y(indexnoz(I))-0.0)*0.0135); - ys2(I)=1*(1.25-0.25*(0.5/freq(findex2-1))^1.3)*(0.00059*x(indexnoz(I)) $ - *MIN([x(indexnoz(I)),14.5])+(y(indexnoz(I))-0.4)*0.027); - ENDFOR - - makebin,x(indexnoz),y(indexnoz),rangex,rangey,nbinx,nbiny,bindata,bindataw, $ - ibin,jbin ,binweight=ys - xx=rangex(0)+FINDGEN(nbinx)*(rangex(1)-rangex(0))/(nbinx-1) - yy=hsmin+FINDGEN(nbiny)*(hsmax-hsmin)/(nbiny-1) - yyy=bindataw(ibin,jbin) - - - var1=sqrt(mean((ys-yyy)^2)) - var2=sqrt(mean((ys2-ys)^2)) - rms1=sqrt(mean(ys^2)) - PRINT,'fcut:',freq(findex2-1),'rel to 0.5:',(1.125-0.0625/freq(findex2-1)) - PRINT,'Variance left:',var1,var2,mean(ys-ys2),100*var1/rms1,100*var2/rms1 - IF outxtit THEN xtit='U10 (m/s)' ELSE xtit='' - IF outytit THEN ytit=ytit ELSE xtit='' - rangey=[min(ys),max(ys)] - Rescale,0 - PLOT,rangex,rangey,XSTYLE=1,YSTYLE=1, $ ;xticks=cbnticks, yticks=cbnticks, $ - XTITLE=xtit,YTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - xrange=rangex,yrange=rangey,THICK=3,/NODATA,LINESTYLE=2, $ - YGRIDSTYLE=2,Yticklen=1, XGRIDSTYLE=2,Xticklen=1 , POSITION=POSBOX - IF outcbtit THEN cbtit='Hs (m)' ELSE cbtit='' - c_numlev=Navailcolor-4 - - zmin=min(y) - zmax=max(y) - IF fixrange THEN BEGIN - mindata=mindepth - maxdata=maxdepth - ENDIF ELSE BEGIN - maxdata=MIN([zmax,maxdepth]) - mindata=MAX([zmin,mindepth]) - ENDELSE - IF (mindepth GT zmin) THEN zmin=mindepth - IF (maxdepth LT zmax) THEN zmax=maxdepth - - MakeLevels,mindata,maxdata,zmin,zmax - colorind=1+FINDGEN(navailcolor-5+addmini+addmaxi) - image=1+ BYTSCL(yy,min=mindata,max=maxdata,Top=(navailcolor-4)) - - FOR I=0,nbinx-1 DO BEGIN - FOR J=0,nbiny-1 DO BEGIN - ;cindex=MAX(MIN(ROUND((y(J)-zmin)/(zmax-zmin))*255,255),0) - IF (bindata(I,J) GT 0) THEN BEGIN - II=WHERE(IBIN EQ I AND JBIN EQ J,kount) - IF (kount GE 2) THEN BEGIN - err=0.5*STDDEV(ys(II)-bindataw(I,J)) - PLOTS,xx(I),[bindataw(I,J)-err,bindataw(I,J)+err],THICK=2 - err=STDDEV(ys(II)-bindataw(I,J)) - ENDIF - PLOTS,xx(I),bindataw(I,J),THICK=2,PSYM=-4-(J MOD 4),COLOR=image(J),SYMSIZE=2 - ;PLOTS,xx(I),0.02+3.2*0.000295*xx(I)*MIN([xx(I),14.5])+(YY(J)-0.0)*0.0135,THICK=2,PSYM=-4-(J MOD 4),COLOR=image(J),SYMSIZE=2 - ;PLOTS,xx(I),0.00028*xx(I)+(YY(J)-0.0)*0.022,THICK=2,PSYM=-4-(J MOD 4),COLOR=image(J),SYMSIZE=2 - ENDIF - ENDFOR - ENDFOR - if cbar THEN ColorBar,lev,cbtit,zmin,zmax - ENDIF - RETURN - END - - ELSE: BEGIN - Print,'This plot option is not available' - RETURN - END - ENDCASE - ENDIF - - - - - IF typ EQ 0 THEN BEGIN ; For data files with bulk parameters. - ; some of the code here can probably be merged with typ EQ 1 code ... - - yp=FLTARR(nr,nt) - yp(*)=data(*,c_spec,plottype,0,0,*) - FOR K=0,nr-1 DO BEGIN - yp(K,*)=data(K,c_spec,plottype,0,0,*) - ENDFOR - yp2=FLTARR(nt) - dirs=FLTARR(nt) - yp2(*)=data(0,c_spec,plottype,0,0,*) - IF (datatype EQ 3) THEN BEGIN - yp2=FLTARR(modspec.nrun,nt) - FOR K=0,modspec.nrun-1 DO BEGIN - yp2(K,*)=data2(K,c_spec,plottype,0,0,*) - ENDFOR - ENDIF - - - CASE c_cut OF -; -;scatterplot for typ EQ 0 -; - 4:IF (datatype EQ 3) THEN BEGIN - yp=FLTARR(nr,nt) - yp(*)=data(*,c_spec,plottype,0,0,*) - FOR K=0,nr-1 DO BEGIN - yp(K,*)=data(K,c_spec,plottype,0,0,*) - ENDFOR - yp2=FLTARR(nt) - dirs=FLTARR(nt) - yp2(*)=data(0,c_spec,plottype,0,0,*) - yp2=FLTARR(modspec.nrun,nt) - FOR K=0,modspec.nrun-1 DO BEGIN - yp2(K,*)=data2(K,c_spec,plottype,0,0,*) - ENDFOR - x=yp - rangex=[min(x),max(x)] - IF fixrange THEN rangex=[mindepth,maxdepth] - xtit='observations' - ENDIF -; -;Q-Q plot for typ EQ 0 -; - 5:BEGIN - nav=nbins; - yp=FLTARR(nr,nt) - yp(*)=data(*,c_spec,plottype,0,0,*) - indexnoz=WHERE(yp NE 0,kountz) - ys=SORT(yp(indexnoz)); - taille=size(ys); - - nQ=taille(1)/nav; - Indexz=WHERE(yp EQ 0,kountz) - yQ=REBIN(yp(0,ys(0:nQ*nav-1)),nr,nav) - FOR K=0,nr-1 DO BEGIN - yp(K,*)=data(K,c_spec,plottype,0,0,*) - ENDFOR - yp2=FLTARR(nt) - dirs=FLTARR(nt) - yp2(*)=data(0,c_spec,plottype,0,0,*) - ;yp2=0.6*data(0,0,0,0,0,*)/data(0,0,2,0,0,*) - IF (datatype EQ 3) THEN BEGIN - yp1=FLTARR(modspec.nrun,nt) - yp3=FLTARR(modspec.nrun,nt) - FOR K=0,modspec.nrun-1 DO BEGIN - yp1(K,*)=data2(K,c_spec,plottype,0,0,*) - yp3(K,indexnoz)=(data2(K,c_spec,plottype,0,0,indexnoz)-yp(indexnoz))^2 - ENDFOR - yp2=REBIN(yp1(*,ys(0:nQ*nav-1)),modspec.nrun,nav) - yp4=sqrt(REBIN(yp3(*,ys(0:nQ*nav-1)),modspec.nrun,nav)) ; STD dev of error - ENDIF - x=yQ - yp=FLTARR(1,nav); - yp(0,*)=yQ - rangex=[min(x),max(x)] - IF fixrange THEN rangex=[mindepth,maxdepth] - xtit='observations' - END - -; -; Binned data plot for typ EQ 0 -; - 6:BEGIN - yp=FLTARR(nr,nt) - yp(*)=data(*,c_spec,plottype,0,0,*) - yp2=FLTARR(modspec.nrun,nt) - indexnoz=WHERE(yp NE 0,kountz) - ys=yp(indexnoz); - K=0 ; first model run - x=yp; - yp2(K,*)=data2(K,c_spec,plottype,0,0,*) - y=yp2; - rangex=[min(x),max(x)] - rangey=[min(y),max(y)] - IF fixrange THEN rangex=[mindepth,maxdepth] - IF fixrange THEN rangey=[mindepth,maxdepth] - nbin=nbins; - makebin,x,y,rangex,rangey,nbin,nbin,bindata,bindataw, ibin,jbin - xx=rangex(0)+FINDGEN(nbin)*(rangex(1)-rangex(0))/(nbin-1) - yy=rangey(0)+FINDGEN(nbin)*(rangey(1)-rangey(0))/(nbin-1) - fixrangememo=fixrange - mindepthmemo=mindepth - maxdepthmemo=maxdepth - mindepth=0 - maxdepth=1 - fixrange=1 - - NMAX=MAX(bindata) - bindata=bindata/NMAX - IND=WHERE(bindata EQ 0,kount) - IF (kount GT 0) THEN bindata(IND)=2*maxval - ;IND=WHERE(bindata LT maxval,kount) - ;IF (kount GT 0) THEN bindata(IND)=bindata(IND)/nmax - IF outxtit THEN xtit='observations' ELSE xtit='' - IF outxtit THEN ytit='model' ELSE xtit='' - Rescale,1 - POSBOX=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - PLOT,rangex,rangey,XSTYLE=1,YSTYLE=1, $ ;xticks=cbnticks, yticks=cbnticks, $ - XTITLE=xtit,YTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - xrange=rangex,yrange=rangey,THICK=3,/NODATA,LINESTYLE=2, $ - YGRIDSTYLE=2,Yticklen=1, XGRIDSTYLE=2,Xticklen=1 , POSITION=POSBOX - IF outcbtit THEN cbtit='Normalized occurence (nmax='+STRING(NMAX,FORMAT='(I6)')+')' $ - ELSE cbtit='' - binplot=bindata - Contorno,binplot,xx,yy,'',xtit,ytit,cbtit,0,0,1 - ; IF filltype LE 4 THEN Drawframe,xtit,' ',ytit,' ',FRAME=1 - xm1=FLTARR(nbin) - ym1=xm1 - xm2=xm1 - ym2=ym1 - FOR I=0,nbin-1 DO BEGIN - IND=WHERE(ibin EQ I,kount) - IF (kount GT 0) THEN BEGIN - xm1(I)=TOTAL(x(IND))/kount - ym1(I)=TOTAL(y(IND))/kount - xm2(I)=MEDIAN(x(IND)) - ym2(I)=MEDIAN(y(IND)) - ENDIF ELSE BEGIN - xm1(I)=maxval*1.2 - ym1(I)=maxval*1.2 - xm2(I)=maxval*1.2 - ym2(I)=maxval*1.2 - ENDELSE - ENDFOR - OPLOT,xm1,ym1,THICK=4,LINESTYLE=0,MAX_VALUE=maxval - ;OPLOT,xm2,ym2,THICK=2,LINESTYLE=0,MAX_VALUE=maxval,COLOR=120 - OPLOT,rangex,rangey,THICK=3,LINESTYLE=2 - mindepth=mindepthmemo - maxdepth=maxdepthmemo - fixrange=fixrangememo - RETURN - END - 7:BEGIN ;mss avg in bin ... JEJE PLOT - varn=STRMID(varname,0,3) - IU10=-1 - IHs=-1 - Imsc=-1 - IF datatype NE 1 THEN BEGIN ; model - FOR J=modspec.nvar-1,0,-1 DO BEGIN - var3=STRMID((*modspec.varnames)[J],0,3) - IF (var3 EQ 'U10') THEN IU10=J - IF (var3 EQ 'msc') THEN Imsc=J - ENDFOR -; FOR J=obs.nvar-1,0,-1 DO BEGIN - FOR J=modspec.nvar-1,0,-1 DO BEGIN - var2=STRMID((*modspec.varnames)[J],0,2) - IF (var2 EQ 'Hs') THEN IHs=J - ENDFOR - IF (iHS GE 0 AND iU10 GE 0) THEN BEGIN - yp=FLTARR(nr,nt) - IF Imsc GE 0 THEN BEGIN - ymsc=FLTARR(nt) - data0=(*modspec.data) - FOR I=0L,nt-1 DO $ - IF ((*modspec.flags)[indext+I] NE 0) THEN BEGIN - J=0L+(*om.datem)[indext+I] - ymsc(I)=data0(0,c_spec,Imsc,(*om.fm)[findex-1:findex2-1],0,J) - ENDIF - yp(*)=data0(0,c_spec,plottype,0,0,*); ymsc(*)*1.5 - ENDIF ELSE BEGIN - yp(*)=data0(0,c_spec,plottype,0,0,*) - ENDELSE - - data0=(*modspec.data) - data1=(*obs.data) - x=FLTARR(nt) - y=FLTARR(nt) - FOR I=0L,nt-1 DO $ - IF ((*modspec.flags)[indext+I] NE 0) THEN BEGIN - J=0L+(*om.datem)[indext+I] - ;JO=0L+(*om.dateo)[indext+I] ; index for obs ... - x(I)=data0(0,c_spec,IU10,(*om.fm)[findex-1:findex2-1],0,J) - y(I)=data0(0,c_spec,IHs,(*om.fm)[findex-1:findex2-1],0,J) -; y(I)=data1(0,c_spec,IHs,(*obs.f)[findex-1:findex2-1],0,JO) - ENDIF - ENDIF - ENDIF ELSE BEGIN ; observations - FOR J=obs.nvar-1,0,-1 DO BEGIN - ; FOR J=modspec.nvar-1,0,-1 DO BEGIN - var3=STRMID((*modspec.varnames)[J],0,3) - IF (var3 EQ 'U10') THEN IU10=J - IF (var3 EQ 'msc') THEN Imsc=J - ENDFOR - FOR J=obs.nvar-1,0,-1 DO BEGIN - var2=STRMID((*obs.varnames)[J],0,2) - IF (var2 EQ 'Hs') THEN IHs=J - ENDFOR - - IF (iHS GE 0 AND iU10 GE 0) THEN BEGIN - yp=FLTARR(nt) - yp(*)=data(0,c_spec,plottype,0,0,*) - ENDIF ELSE BEGIN - yp(*)=data(0,c_spec,plottype,0,0,*) - ENDELSE - - data0=(*modspec.data) - x=FLTARR(nt) - y=FLTARR(nt) - FOR I=0L,nt-1 DO $ - IF ((*obs.flags)[indext+I] NE 0) THEN BEGIN - x(I)=data0(0,c_spec,IU10,(*om.fm)[findex-1:findex2-1],0,I) - ; x(I)=data(0,c_spec,IU10,(*obs.f)[findex-1:findex2-1],0,I) - y(I)=data(0,c_spec,IHs,(*obs.f)[findex-1:findex2-1],0,I) - ENDIF - ENDELSE ; end of if test on model / obs - - - - IF (iHS GE 0 AND iU10 GE 0) THEN BEGIN - indexnoz=WHERE(yp NE 0 AND x LT 45,kountz) - ys=yp(indexnoz); - IF fixrange THEN rangex=[mindepth,maxdepth] - IF fixrange THEN rangey=[mindepth,maxdepth] - nbiny=nbins; - nbinx=26 - rangex=[0,25]; [min(x),max(x)] - hsmin=0.0; - hsmax=13 ; - rangey=[hsmin,hsmax] - - ys2=ys; - - makebin,x(indexnoz),y(indexnoz),rangex,rangey,nbinx,nbiny,bindata,bindataw, $ - ibin,jbin ,binweight=ys - xx=rangex(0)+FINDGEN(nbinx)*(rangex(1)-rangex(0))/(nbinx-1) - yy=hsmin+FINDGEN(nbiny)*(hsmax-hsmin)/(nbiny-1) - yyy=bindataw(ibin,jbin) - varl=sqrt(mean((ys-yyy)^2)) - var2=sqrt(mean((ys2-ys)^2)) - rms1=sqrt(mean(ys^2)) - PRINT,'Variance left:',varl,var2,mean(ys-ys2),100*var2/rms1 - IF outxtit THEN xtit='U10 (m/s)' ELSE xtit='' - IF outxtit THEN ytit=varname ELSE xtit='' - rangey=[min(ys),max(ys)] - Rescale,0 - PLOT,rangex,rangey,XSTYLE=1,YSTYLE=1, $ ;xticks=cbnticks, yticks=cbnticks, $ - XTITLE=xtit,YTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - xrange=rangex,yrange=rangey,THICK=3,/NODATA,LINESTYLE=2, $ - YGRIDSTYLE=2,Yticklen=1, $ - XGRIDSTYLE=2,Xticklen=1 , $ - POSITION=POSBOX - IF outcbtit THEN cbtit='Hs (m)' ELSE cbtit='' - c_numlev=Navailcolor-4 - - zmin=min(y) - zmax=max(y) - IF fixrange THEN BEGIN - mindata=mindepth - maxdata=maxdepth - ENDIF ELSE BEGIN - maxdata=MIN([zmax,maxdepth]) - mindata=MAX([zmin,mindepth]) - ENDELSE - IF (mindepth GT zmin) THEN zmin=mindepth - IF (maxdepth LT zmax) THEN zmax=maxdepth - - MakeLevels,mindata,maxdata,zmin,zmax - colorind=1+FINDGEN(navailcolor-5+addmini+addmaxi) - image=1+ BYTSCL(yy,min=mindata,max=maxdata,Top=(navailcolor-4)) - - FOR I=0,nbinx-1 DO BEGIN - FOR J=0,nbiny-1 DO BEGIN - ;cindex=MAX(MIN(ROUND((y(J)-zmin)/(zmax-zmin))*255,255),0) - IF (bindata(I,J) GT 0) THEN BEGIN - II=WHERE(IBIN EQ I AND JBIN EQ J,kount) - IF (kount GE 2) THEN BEGIN - err=0.5*STDDEV(ys(II)-bindataw(I,J)) - PLOTS,xx(I),[bindataw(I,J)-err,bindataw(I,J)+err],THICK=2 - err=STDDEV(ys(II)-bindataw(I,J)) - ENDIF - PLOTS,xx(I),bindataw(I,J),THICK=2,PSYM=-4-(J MOD 4),COLOR=image(J),SYMSIZE=2 - ENDIF - ENDFOR - ENDFOR - if cbar THEN ColorBar,lev,cbtit,zmin,zmax - ENDIF - ; ENDIF - RETURN - END - 8:BEGIN ;error map - varn=STRMID(varname,0,3) - Ilat=-1 - Ilon=-1 - names=(*obs.varnames) - FOR J=obs.nvar-1,0,-1 DO BEGIN - var3=STRMID(names(J),0,3) - IF (var3 EQ 'lon') THEN Ilon=J - IF (var3 EQ 'lat') THEN Ilat=J - ENDFOR - IF (ilon GE 0 AND ilat GE 0) THEN BEGIN - yp=FLTARR(nr,nt) - yp(*)=data2(0,c_spec,plottype,0,0,*)-data(0,c_spec,plottype,0,0,*) - - data0=(*modspec.data) - x=FLTARR(nt) - y=FLTARR(nt) - FOR I=0L,nt-1 DO $ - IF ((*modspec.flags)[indext+I] NE 0) THEN BEGIN - J=0L+(*om.datem)[indext+I] - x(I)=data0(0,c_spec,Ilon,(*om.fm)[findex-1:findex2-1],0,J) - y(I)=data0(0,c_spec,Ilat,(*om.fm)[findex-1:findex2-1],0,J) - ENDIF - indexnoz=WHERE(yp NE 0,kountz) - ys=yp(indexnoz); - IF fixrange THEN rangex=[mindepth,maxdepth] - IF fixrange THEN rangey=[mindepth,maxdepth] - nbiny=nbins; - nx=180 - ny=72 - - rangex=[0,360]; [min(x),max(x)] - rangey=[-72,72] - makebin,x(indexnoz),y(indexnoz),rangex,rangey,nx,ny,bindata,bindataw, $ - ibin,jbin ,binweight=ys - IZ=WHERE(bindata EQ 0,kount) - bindataw(IZ)=2*maxval - xx=rangex(0)+FINDGEN(nx)*(rangex(1)-rangex(0))/(nx-1) - yy=min(y)+FINDGEN(ny)*(max(y)-min(y))/(ny-1) - - IF outxtit THEN cbtit='mss bias' ELSE cbtit='' - rlonmax=max(xx) - rlonmin=min(xx) - rlatmax=max(yy) - rlatmin=min(yy) - - nxzmin=0 - nyzmin=0 - nxzmax=nx-1 - nyzmax=ny-1 - dx=(rlonmax-rlonmin)*(40000./((nx-1)*360.))*cos(0.5*(rlatmin+rlatmax)*!dtor) - dy=(rlatmax-rlatmin)*(40000./((ny-1)*360.)) - - dlat=rlatmax-rlatmin - - Rescale,1 - - PLOT,rangex,rangey,XSTYLE=1,YSTYLE=1, $ ;xticks=cbnticks, yticks=cbnticks, $ - XTITLE=xtit,YTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - xrange=rangex,yrange=rangey,THICK=3,/NODATA,LINESTYLE=2, $ - YGRIDSTYLE=2,Yticklen=1, $ - XGRIDSTYLE=2,Xticklen=1 , $ - POSITION=POSBOX - Contorno,bindataw,xx,yy,tit,'x (km)','y (km)',cbtit,0,0,0 - IF (filltype LE 4) THEN BEGIN - !P.CLIP=[min(x),min(y),0,max(x),max(y),1] - ad2dmisc - ENDIF - - ENDIF - RETURN - END - 9:BEGIN ;rms error map for typ EQ 0 - varn=STRMID(varname,0,3) - Ilat=-1 - Ilon=-1 - names=(*obs.varnames) - FOR J=obs.nvar-1,0,-1 DO BEGIN - var3=STRMID(names(J),0,3) - IF (var3 EQ 'lon') THEN Ilon=J - IF (var3 EQ 'lat') THEN Ilat=J - ENDFOR - IF (ilon GE 0 AND ilat GE 0) THEN BEGIN - yp=FLTARR(nt) - yp(*)=data2(0,c_spec,plottype,0,0,*)-data(0,c_spec,plottype,0,0,*) - - data0=(*modspec.data) - x=FLTARR(nt) - y=FLTARR(nt) - FOR I=0L,nt-1 DO $ - IF ((*modspec.flags)[indext+I] NE 0) THEN BEGIN - J=0L+(*om.datem)[indext+I] - x(I)=data0(0,c_spec,Ilon,(*om.fm)[findex-1:findex2-1],0,J) - y(I)=data0(0,c_spec,Ilat,(*om.fm)[findex-1:findex2-1],0,J) - ENDIF - indexnoz=WHERE(yp NE 0,kountz) - ys=yp(indexnoz); - IF fixrange THEN rangex=[mindepth,maxdepth] - IF fixrange THEN rangey=[mindepth,maxdepth] - nbiny=nbins; - nx=180 - ny=72 - - rangex=[0,360]; [min(x),max(x)] - rangey=[-72,72] - makebin,x(indexnoz),y(indexnoz),rangex,rangey,nx,ny,bindata,bindataw0, $ - ibin,jbin ,binweight=ys - - ys=FLTARR(kountz) - ys(*)=(data2(0,c_spec,plottype,0,0,indexnoz)- $ - data(0,c_spec,plottype,0,0,indexnoz))^2 - ;-bindataw0(ibin(indexnoz),jbin(indexnoz)) - makebin,x(indexnoz),y(indexnoz),rangex,rangey,nx,ny,bindata,bindataw, $ - ibin,jbin ,binweight=ys - IZ=WHERE(bindata EQ 0,kount) - bindataw=sqrt(bindataw) - bindataw(IZ)=2*maxval - xx=rangex(0)+FINDGEN(nx)*(rangex(1)-rangex(0))/(nx-1) - yy=min(y)+FINDGEN(ny)*(max(y)-min(y))/(ny-1) - - IF outxtit THEN cbtit='RMSE' ELSE cbtit='' - rlonmax=max(xx) - rlonmin=min(xx) - rlatmax=max(yy) - rlatmin=min(yy) - - nxzmin=0 - nyzmin=0 - nxzmax=nx-1 - nyzmax=ny-1 - dx=(rlonmax-rlonmin)*(40000./((nx-1)*360.))*cos(0.5*(rlatmin+rlatmax)*!dtor) - dy=(rlatmax-rlatmin)*(40000./((ny-1)*360.)) - - dlat=rlatmax-rlatmin - - Rescale,1 - - PLOT,rangex,rangey,XSTYLE=1,YSTYLE=1, $ ;xticks=cbnticks, yticks=cbnticks, $ - XTITLE=xtit,YTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - xrange=rangex,yrange=rangey,THICK=3,/NODATA,LINESTYLE=2, $ - YGRIDSTYLE=2,Yticklen=1, XGRIDSTYLE=2,Xticklen=1 , POSITION=POSBOX - Contorno,bindataw,xx,yy,tit,'x (km)','y (km)',cbtit,0,0,0 - IF (filltype LE 4) THEN BEGIN - !P.CLIP=[min(x),min(y),0,max(x),max(y),1] - ad2dmisc - ENDIF - - ENDIF - RETURN - END - 10:BEGIN ;diff vs fp - IF (datatype EQ 3) THEN BEGIN - - FOR I=0,nt-1 DO BEGIN - IF (yp(0,I) EQ 0.) OR (yp2(0,I) EQ 0.) THEN yp2(*,I)=0. $ - ELSE yp2(*,I)=(yp2(*,I)-yp(0,I))/yp(0,I) - ENDFOR - yp(*,*)=0. - ENDIF - x=FLTARR(nt) - FOR I=0,nt-1 DO BEGIN - ;print,I,yp2(0,I),yp(0,I),data0(0,((*om.po)[c_spec]),7,0,(*om.dateo)[indext+I]) - ;x(I)=data0(0,(*om.po)[c_spec],7,0,(*om.dateo)[indext+I]) - x(I)=data0(0,(*om.po)[c_spec],2,0,(*om.dateo)[indext+I]) - ENDFOR - rangex=[0.06,0.12] - xtit='fp (Hz)' - ytit='Relative error on '+varname+' at '+pname - END - - 11:BEGIN ;diff vs value - IF (datatype EQ 3) THEN BEGIN - - FOR I=0,nt-1 DO BEGIN - IF (yp(0,I) EQ 0.) OR (yp2(0,I) EQ 0.) THEN yp2(*,I)=0. $ -; ELSE yp2(*,I)=(yp2(*,I)-yp(0,I))/yp(0,I) - ELSE yp2(*,I)=yp2(*,I) - ENDFOR - ENDIF - x=FLTARR(nt) - FOR I=0,nt-1 DO BEGIN - x(I)=data0(0,5,(*om.vo)[plottype],0,0,(*om.dateo)[indext+I]) - ENDFOR - yp(*,*)=0. - rangex=[Min(x),MAX(x)] - xtit='Measured '+varname+' at X6' - ytit='Measured '+varname+' at '+pname - END - - ELSE: - ENDCASE - IF (varname EQ 'th1') THEN BEGIN - index180=WHERE(yp LT 0, kount) - IF kount GT 0 THEN yp(index180)=yp(index180)+360. - ;index180=WHERE(yp GT 180, kount) - ;IF kount GT 0 THEN yp(index180)=4.*maxval - index180=WHERE(yp2 LT 0, kount) - IF kount GT 0 THEN yp2(index180)=yp2(index180)+360. - ENDIF - IF (varname EQ 'th2') THEN BEGIN - index180=WHERE(yp GE 180, kount) - IF kount GT 0 THEN yp(index180)=yp(index180)-180. - index180=WHERE(yp2 LT 0, kount) - IF kount GT 0 THEN yp2(index180)=yp2(index180)+180. - ENDIF - ENDIF - - - - IF varname EQ 'th2' THEN BEGIN - indexpi=WHERE(yp LT 0,kountpi) - IF kountpi NE 0 THEN yp(indexpi)=yp(indexpi)+180. - indexpi=WHERE(yp GE 180,kountpi) - IF kountpi NE 0 THEN yp(indexpi)=yp(indexpi)-180. - ENDIF - IF varname EQ 'th2m' THEN BEGIN - indexpi=WHERE(yp GE 180.,kountpi) - IF kountpi NE 0 THEN yp(indexpi)=yp(indexpi)-180. - indexpi=WHERE(yp LT 0,kountpi) - IF kountpi NE 0 THEN yp(indexpi)=yp(indexpi)+180. - ENDIF - taille=size(yp) - ypnoz=yp - - Indexz=WHERE(yp EQ 0,kountz) - Indexnoz=WHERE(yp NE 0,kountnoz) - wherez=yp*0 - IF (kountnoz GT 0) THEN wherez(Indexnoz)=1 - wherez2=wherez - kountz2=0 - IF (typ EQ 0 AND taille(2) GT 3 AND taille(0) EQ 2) THEN BEGIN - wherez2(*,1:taille(2)-1)=wherez2(*,1:taille(2)-1)+ $ - wherez(*,0:taille(2)-2) - wherez2(*,0:taille(2)-2)=wherez2(*,0:taille(2)-2)+ $ - wherez(*,1:taille(2)-1) - Indexz2=WHERE((wherez2 EQ 1) OR (wherez2 EQ 2),kountz2) - ENDIF - IF kountz GT 0 THEN ypnoz(Indexz)=4.*maxval - rangey=[min(ypnoz),max(yp)] - IF (datatype EQ 3) THEN BEGIN - yp2noz=yp2 - Indexnoz2=WHERE(yp2 EQ 0,kountnoz2) - IF kountnoz2 GT 0 THEN yp2noz(Indexnoz2)=4.*maxval - rangey=[min([min(ypnoz),min(yp2noz)]),max([max(yp),max(yp2)])] - ENDIF - - IF C_cut EQ 2 THEN BEGIN - y=f(findex-1:findex2-1) - cbtit=ytit - ytit='E(f) (m2/Hz)' - ENDIF - IF fixrange THEN rangey=[mindepth,maxdepth] - - - IF (kountnoz EQ 0) THEN PRINT,'All data are zero' ELSE BEGIN - Rescale,0 - nonames=REPLICATE(' ',30) - - IF outtit EQ 0 THEN tit='' - IF outxtit EQ 0 THEN xtit='' - IF outytit EQ 0 THEN ytit='' - - ts_processed = c_cut - IF (typ EQ 0 AND c_cut LT 4) THEN ts_processed = 0 - - IF (NT GT 1) THEN BEGIN -; Plots with orientation "portrait" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - IF axis_orient EQ 0 THEN BEGIN - IF (datatype EQ 3 OR ts_processed NE 4) THEN BEGIN - IF (ts_processed NE 4 AND ts_processed NE 7) THEN BEGIN - IF (N_ELEMENTS(xposi) GT 1) THEN BEGIN - PLOT,x,ypnoz(0,*),/NODATA,XSTYLE=1,YSTYLE=0, $; yticks=cbnticks, $ ;Ytickname=nonames, $ - xminor=xnminor,xticks=xnticks,xtickname=xtnames, $ - XTITLE=xtit,YTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - xrange=rangex,yrange=rangey,THICK=3, $ - YGRIDSTYLE=2,Yticklen=1, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - ENDIF ELSE BEGIN -print,'TEST:',c_cut,ts_processed - PLOT,x,ypnoz(0,*),XSTYLE=1, YSTYLE=0, $ - XTITLE=xtit,YTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - xrange=rangex,yrange=rangey,THICK=3, POSITION=POSBOX - ENDELSE -; -; Adds model runs for comparison -; - IF (datatype EQ 3) THEN BEGIN - FOR I=0,modspec.nrun-1 DO BEGIN - OPLOT,x,yp2noz(I,*),LINESTYLE=I+1,MAX_VALUE=maxval,THICK=2, $ - PSYM=1+((I+3) MOD 8), $ - COLOR=1+(I+1)*(Navailcolor-4)/modspec.nrun-1 - ENDFOR - ENDIF - - OPLOT,x,ypnoz(0,*),THICK=5,MAX_VALUE=maxval - IF (kountz2 NE 0) THEN OPLOT,x(indexz2),ypnoz(0,indexz2),PSYM=1,MAX_VALUE=maxval,THICK=2 - IF (outx1lab EQ 1) AND (N_ELEMENTS(xposi) GT 1) THEN BEGIN - yposi=xposi*0+bly - XY=CONVERT_COORD(xposi,yposi,/DATA,/TO_NORMAL) - XYOUTS,XY(0,*),yposi-0.020,xnames,ALIGNMENT=0.5,/NORMAL - ENDIF - ENDIF ELSE BEGIN -; Scatter plot %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - rangep=rangex - if rangey(0) LT rangex(0) THEN rangep(0)=rangey(0) - if rangey(1) GT rangex(1) THEN rangep(1)=rangey(1) - rangex=rangep - rangey=rangep - Rescale,1 - PLOT,rangex,rangex,XSTYLE=1,YSTYLE=1, xticks=cbnticks, yticks=cbnticks, $ - XTITLE=xtit,YTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - xrange=rangex,yrange=rangex,THICK=3, $ - YGRIDSTYLE=2,Yticklen=1, XGRIDSTYLE=2,Xticklen=1, POSITION=POSBOX - FOR I=modspec.nrun-1,0,-1 DO BEGIN - OPLOT,x(Indexnoz),yp2noz(I,Indexnoz),LINESTYLE=I+1,MAX_VALUE=maxval,THICK=2, $ - PSYM=1+((I+3) MOD 8), $ - COLOR=1+(I+1)*(Navailcolor-4)/modspec.nrun-1 - ENDFOR - ENDELSE -; -; this draw the E(f,time) plot -; - ENDIF ELSE BEGIN - yp=f(findex-1:findex2-1) - rangey=[min(yp),max(yp)] - tit='time-frequency diagram at '+pname - PLOT,rangex,rangey,YSTYLE=1,XSTYLE=1,/NODATA,/NOERASE, $ - xminor=xnminor,xticks=xnticks,xtickname=xtnames,xtickv=xntickval, $ - Yticklen=1,YTITLE=ytit,XTITLE=xtit,TITLE=tit, yminor=1, $ - Xticklen=1, $ - yrange=rangey,xrange=rangex, $ - XGRIDSTYLE=2,YGRIDSTYLE=2, $ - POSITION=POSBOX - Contorno,yp2,x,yp,tit,xtit,ytit,cbtit,0,0,1 - fp=FLTARR(nt) - - FOR I=0,nt-1 DO BEGIN - efmax=MAX(yp2(I,*),J) - fp(I) = yp(J) - ENDFOR - - IF (NF GT 2) THEN BEGIN - XFRALL=yp(1:NF-1)/yp(0:NF-2) - IF (ABS(MIN(XFRALL)-MAX(XFRALL)) LT 0.2 ) THEN BEGIN - XFR=MEAN(XFRALL) - - XL = 1./XFR - 1. - XH = XFR - 1. - XL2 = XL^2 - XH2 = XH^2 - NMAX=N_ELEMENTS(yp) - FOR I=0,nt-1 DO BEGIN - efmax=MAX(yp2(I,*),J) - - ILOW = MAX ([ 0 , J-1] ) - ICEN = MAX ([ 0 , J ] ) - IHGH = MIN ([ NMAX-1, J+1 ]) - EL = yp2(I,ILOW) - yp2(I,ICEN) - EH = yp2(I,IHGH) - yp2(I,ICEN) - DENOM = XL*EH - XH*EL - TEMP=DENOM - IF ABS(DENOM) LT 1E-15 THEN DENOM = 1E-15 - IF (TEMP LT 0) THEN DENOM = -1E-15 - IF efmax GT 0 THEN fp(I) = yp(J) * ( 1. + 0.5 * ( XL2*EH - XH2*EL ) $ - / DENOM) ELSE yp(I)=4.*maxval - ENDFOR - ENDIF - ENDIF - - OPLOT,x,fp,THICK=3,MAX_VALUE=maxval - IF (outx1lab EQ 1) AND (N_ELEMENTS(xposi) GT 1) THEN BEGIN - yposi=xposi*0+bly-textdy - XY=CONVERT_COORD(xposi,yposi,/DATA,/TO_NORMAL) - XYOUTS,XY(0,*),yposi-0.0670*!p.charsize,xnames,ALIGNMENT=0.5,/NORMAL - ENDIF - - ENDELSE - -; Plots with orientation "landscape" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - ENDIF ELSE BEGIN - IF ts_processed LT 4 THEN BEGIN - xpnoz=-x - indexz=WHERE(ypnoz(0,*) GT MAXVAL,kount) - IF kount GT 0 THEN xpnoz(indexz)=4.*maxval - IF (N_ELEMENTS(xposi) GT 1) THEN BEGIN - PLOT,ypnoz(0,*),xpnoz,/nodata,XSTYLE=1,YSTYLE=0, $ - yminor=xnminor,yticks=xnticks,ytickname=xtnames,ytickv=-xntickval, $ - YTITLE=xtit,XTITLE=ytit,TITLE=tit, xminor=1, $ - xticks=cbnticks, $ - yrange=[-rangex(1),-rangex(0)],xrange=rangey, $ - Xticklen=1,Yticklen=1,XGRIDSTYLE=2,YGRIDSTYLE=2, $ - POSITION=POSBOX - ENDIF ELSE BEGIN - PLOT,ypnoz(0,*),xpnoz,YSTYLE=1,XSTYLE=0, $ - YTITLE=xtit,XTITLE=ytit,TITLE=tit,MAX_VALUE=maxval, $ - yrange=[-rangex(1),-rangex(0)],xrange=rangey,THICK=4,COLOR=252, $ - POSITION=POSBOX - ENDELSE - xpnoz2=-x - indexz=WHERE(yp2 EQ 0,kount) - IF kount GT 0 THEN xpnoz2(indexz)=4.*maxval - IF (datatype EQ 3) THEN BEGIN - FOR I=0,modspec.nrun-1 DO BEGIN - OPLOT,yp2noz(I,*),xpnoz,LINESTYLE=I+1,MAX_VALUE=maxval,THICK=2, $ - PSYM=1+((I+3) MOD 8), COLOR=1+(I+1)*(Navailcolor-4)/modspec.nrun-1 - ENDFOR - ENDIF - OPLOT,ypnoz(0,*),xpnoz,THICK=5,MAX_VALUE=maxval - - ENDIF ELSE BEGIN ; this draw the E(f,time) plot - memo=rangex - xp=f(findex-1:findex2-1) - rangex=[min(xp),max(xp)] - rangey=[-memo(1),-memo(0)] - taille=size(yp) - yy=FLTARR(taille(1)) - yy(*)=x(0,0,*) -; yp2=SMOOTH(ALOG(yp+0.00001)/ALOG(10),3) - PLOT,rangex,rangey,YSTYLE=1,XSTYLE=1,/NODATA,/NOERASE, $ - yminor=xnminor,yticks=xnticks,ytickname=xtnames,ytickv=-xntickval, $ - Yticklen=1,YTITLE=xtit,XTITLE=ytit,TITLE=tit, xminor=1, $ - Xticklen=1, $ - yrange=rangey,xrange=rangex, $ - XGRIDSTYLE=2,YGRIDSTYLE=2, $ - POSITION=POSBOX - IF (filltype EQ 1) THEN $ - Contorno,transpose(REVERSE(yp2,1)),xp,-x,tit,xtit,ytit,cbtit,0,0,1 $ - ELSE Contorno,transpose(yp2),xp,-x,tit,xtit,ytit,cbtit,0,0,1 - - fp=FLTARR(nt) - FOR I=0,nt-1 DO BEGIN - efmax=MAX(yp2(I,*),J) - IF efmax GT 0 THEN fp(I)=xp(J) ELSE xp(I)=4.*maxval - ENDFOR - OPLOT,fp,-x,THICK=3,MAX_VALUE=maxval - - ENDELSE - IF (outx1lab EQ 1) AND (N_ELEMENTS(xposi) GT 1) THEN BEGIN - yposi=xposi*0+blx-textdy*0.1 - XY=CONVERT_COORD(yposi,-xposi,/DATA,/TO_NORMAL) - XYOUTS,yposi-0.0670*!p.charsize,XY(1,*),xnames,ALIGNMENT=0.5,/NORMAL - ENDIF - ENDELSE -; -; Overlays some text on the plot -; - IF (datatype EQ 3) AND (ts_processed LE 4 OR ts_processed EQ 7 OR ts_processed EQ 9) THEN BEGIN - ;comparison of model and data - SI=FLTARR(modspec.nrun) - SI2=FLTARR(modspec.nrun) - BIAS=FLTARR(modspec.nrun) - CORR=FLTARR(modspec.nrun) - MOYC=COMPLEXARR(modspec.nrun+1) - this_var_is_a_direction=(varname EQ 'th1tot') OR (varname EQ 'th1p') OR (varname EQ 'th1m') $ - OR (varname EQ 'Currdir') OR (varname EQ 'Udir') - IF (kountnoz NE 0) THEN BEGIN - IF this_var_is_a_direction THEN BEGIN - ypnoz=complex(cos(ypnoz*!dtor),sin(ypnoz*!dtor)) - yp2=complex(cos(yp2*!dtor),sin(yp2*!dtor)) - ENDIF - MOYC(0)=TOTAL(ypnoz(0,indexnoz),/PRESERVE_TYPE)/kountnoz - - - FOR I=0,modspec.nrun-1 DO BEGIN - IF this_var_is_a_direction THEN $ - SI(I)=TOTAL(ATAN(IMAGINARY(yp2(I,indexnoz)/ypnoz(0,indexnoz)), $ - REAL_PART(yp2(I,indexnoz)/ypnoz(0,indexnoz)))^2) ELSE $ - SI(I)=TOTAL((ypnoz(0,indexnoz)-yp2(I,indexnoz))^2) - - IF rangex(1) EQ 360 THEN BEGIN - SI(I)=0. - FOR II=0,kountnoz-1 DO BEGIN - mod1=ypnoz(0,indexnoz(II)) - obs1=yp2(I,indexnoz(II)) - ENDFOR - ENDIF - MOYC(I+1)=TOTAL(yp2(I,indexnoz),/PRESERVE_TYPE)/kountnoz - MOY=REAL_PART(MOYC) - IF this_var_is_a_direction THEN $ - BIAS(I)=ATAN(IMAGINARY(MOYC(I+1)/MOYC(0)),REAL_PART(MOYC(I+1)/MOYC(0))) $ - ELSE BIAS(I)=(MOY(I+1)-MOY(0)) - - CORR(I)=(TOTAL((yp2(I,indexnoz)-MOYC(I+1)) $ - *(ypnoz(0,indexnoz)-MOYC(0)))) $ - /SQRT(TOTAL(ABS(yp2(I,indexnoz)-MOY(I+1))^2) $ - *TOTAL(ABS(ypnoz(0,indexnoz)-MOY(0))^2)) - IF this_var_is_a_direction THEN $ - SI2(I)=TOTAL(ATAN(IMAGINARY(yp2(I,indexnoz)/ypnoz(0,indexnoz)), $ - REAL_PART(yp2(I,indexnoz)/ypnoz(0,indexnoz))-BIAS(I))^2) ELSE $ - SI2(I)=TOTAL((ypnoz(0,indexnoz)+BIAS(I)-yp2(I,indexnoz))^2) - ENDFOR - true_norm=TOTAL(ypnoz(0,indexnoz)^2) - true_norm2=sqrt(true_norm/kountnoz) - ENDIF ELSE BEGIN - true_norm=1. - FOR I=0,modspec.nrun-1 DO BEGIN - Indexnoz2=WHERE(yp2(I,*) NE 0,kountnoz2) - IF (kountnoz2 GT 0) THEN $ - MOY(I+1)=TOTAL(yp2(I,Indexnoz2))/kountnoz2 ELSE MOY(I+1)=0. - - ENDFOR - ENDELSE - FOR I=0,modspec.nrun-1 DO BEGIN - ;print, true_norm, I, SI(I)/true_norm - PLOTS,textx-0.015,texty+0.007-textdy*(1+I),THICK=2,PSYM=1+((I+3) MOD 8), $ - COLOR=1+(I+1)*(Navailcolor-4)/modspec.nrun-1,/NORMAL - IF this_var_is_a_direction THEN BEGIN - XYOUTS,textx+textdx,texty-textdy*(1+I), $ - STRING(BIAS(I)/!dtor,FORMAT='(F6.2)'), $ - ALIGNMENT=0.0,/NORMAL - XYOUTS,textx,texty-textdy*(1+I), $ - STRING(SQRT(SI(I)/kountnoz)/!dtor,FORMAT='(F6.3)'), $ - ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+2*textdx,texty-textdy*(1+I), $ - STRING(SQRT(SI2(I)/kountnoz)/!dtor,FORMAT='(F6.3)'), $ - ALIGNMENT=0.0,/NORMAL - - ENDIF ELSE BEGIN - XYOUTS,textx,texty-textdy*(1+I), $ - STRING(100.*SQRT(SI(I)/true_norm),FORMAT='(F5.1)'), $ - ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+textdx,texty-textdy*(1+I), $ - STRING(SQRT(SI(I)/kountnoz),FORMAT='(F6.3)'), $ - ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+2.*textdx,texty-textdy*(1+I), $ - STRING(100.*BIAS(I)/true_norm2,FORMAT='(F6.2)'), $ - ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+3.*textdx,texty-textdy*(1+I), $ - STRING(CORR(I),FORMAT='(F7.4)'), $ - ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+4.*textdx,texty-textdy*(1+I), $ - STRING(100.*SQRT(SI2(I)/true_norm),FORMAT='(F5.1)'), $ - ALIGNMENT=0.0,/NORMAL - ENDELSE - ENDFOR - IF this_var_is_a_direction THEN BEGIN - XYOUTS,textx+textdx,texty,'Bias (deg):',ALIGNMENT=0.0,/NORMAL - XYOUTS,textx,texty,'RMSE (deg):',ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+2*textdx,texty,'std. dev. (deg):',ALIGNMENT=0.0,/NORMAL - ENDIF ELSE BEGIN - XYOUTS,textx,texty,'NRMSE (%):',ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+textdx,texty,'RMSE:',ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+2*textdx,texty,'Bias (%):',ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+3*textdx,texty,'Corr.(r):',ALIGNMENT=0.0,/NORMAL - XYOUTS,textx+4*textdx,texty,'S. I.(%):',ALIGNMENT=0.0,/NORMAL - ENDELSE - PRINT,'NRMSE,NB, r, SI:' - FOR I=0,modspec.nrun-1 DO BEGIN - PRINT,'&',100.*SQRT(SI(I)/true_norm), ' ',FORMAT='($,A,F6.1,A)' - ENDFOR - PRINT,'' - FOR I=0,modspec.nrun-1 DO BEGIN - PRINT,'&',100.*BIAS(I)/true_norm2, ' ',FORMAT='($,A,F6.1,A)' - ENDFOR - PRINT,'' - FOR I=0,modspec.nrun-1 DO BEGIN - PRINT,'&',CORR(I),' ',FORMAT='($,A,F9.4,A)' - ENDFOR - PRINT,'' - FOR I=0,modspec.nrun-1 DO BEGIN - PRINT,'&',100.*SQRT(SI2(I)/true_norm), ' ',FORMAT='($,A,F6.1,A)' - ENDFOR - PRINT,'' - PRINT,'MEAN [',STRING(Moy(*),FORMAT='(7F9.4)'),'] ...' - PRINT,'RMSE [',STRING(SQRT(SI(*)/kountnoz),FORMAT='(7F7.3)'),'] ...' - print, 'NP:',kountnoz - print, 'Norm:',true_norm - ENDIF ELSE BEGIN - ;FOR I=0,taille(1)-1 DO PRINT,x(I),yp(*,I) - ENDELSE - - IF (ts_processed GE 2) AND (ts_processed LT 4) THEN BEGIN - zs=' UTC' - assos=STRING(time[tindex-1].m,FORMAT='(I2)')+'/'+ $ - STRING(time[tindex-1].d,FORMAT='(I2)')+'/'+ $ - STRING(time[tindex-1].y,FORMAT='(I4)')+' '+ $ - STRING(time[tindex-1].h,FORMAT='(I2)')+':'+ $ - STRING(time[tindex-1].minu,FORMAT='(I2)') - z=time[tindex-1].zone - IF (z EQ -5) THEN zs=' EST' ELSE $ - IF (z NE 0) THEN BEGIN - IF (z < 0) THEN zs=zs+'-'+STRING(ABS(z),FORMAT='(f3.1)') $ - ELSE zs=zs+'+'+STRING(ABS(z),FORMAT='(f3.1)') - ENDIF - XYOUTS,rangex(0)+0.05*(rangex(1)-rangex(0)), $ - rangey(1)-0.1*(rangey(1)-rangey(0)),assos+zs - ENDIF - ENDIF - ENDELSE - RETURN -END - -;---------------------------------------------------------------------------- -PRO doplotothers -; -; Performs all plots except time series -; -;** 1 ** Display parameters -COMMON AXISFRAME,axis_orient,frametype,outx1lab,outx2lab,outy1lab,outy2lab -COMMON CONTOURPARAM,numlevels,c_repart,lev,maxval,fixrange -COMMON COLORBARPAR,cbnticks,cbexrange,cbtrx,cbtry,cbblx,cbbly, $ - filloutofrange,addmini,addmaxi -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON TITLES, font,outtit,outxtit,outytit,outcbtit,textx,texty,textdx,textdy -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON THREED, Ax3D,Az3D,smoothing -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth - -;** 2 ** Display and data variables/parameters -COMMON FREQ, freq,nfband,findex,findex2 -COMMON DIR, nabin,nabint,aindex,THETA -COMMON LANGUAGE, ilang,dictionnaire -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -COMMON TIME, timestep,tindex,tindex2,ntime,dtime,time0,day0,dtindex,nstep, $ - timezone_plot,timezone_string,months,time -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize - -COMMON SPACE, c_gp,c_cut,indexgp,c_x,c_y,c_lon,c_lat -COMMON OVERLAY, addir,adsyms,adbathy,adcoast,psyms,psymsizes,adtr,adtri - -;** 3 ** I/O and data variables -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON COAST, coastxy,coastl,coastnp,GSHHSPoly,GSHHSPoint,GSHHSPoly2,GSHHSPoint2 -COMMON DEPTHSTAT,nbind,bindres,HISTD,MEAND,SDEVD -COMMON DIRSPEC, ds,dsnfband,ndir,kdkdth,dsfreq,dstheta,dsdf,dstime,dsntime,ds_timezone -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON GRIDPar, th1,th2,gfact,gsize1,gsize6 -COMMON RAY3ad, NGPad,SIad,SCad,DEPTHad,HSad,PSIad,BBLDad -COMMON RAYS, raysOK,raystype,raynsteps,rayx,rayy,raya,rayamin,rayamax, $ - rayres,rayfreq,rayGP,raytimestep,rayoffdep,rayflag,raydz,raymindepth -COMMON SOURCE, S0,snabin,sntstep -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -COMMON TIMESERIES, modspec,obs,obs2,om,ts_filetype, nbins, bulktype,scatvar -COMMON TRANSECT,Ntrans,Strans,Xtrans,Ytrans,Ztrans,Itrans, $ - COtrans,TransOK,transsym,transline,transthick,Ispectrans, $ - spectransname,ntransgp,transsymsize -COMMON TRIANGLES,ntri,trigp,nzone,c_zone,zcolor,Hlandsea,contourline -COMMON LOCAL2,ymemo,ymemo2 -COMMON WW3, ww3model,ww3date,ww3time,ww3fieldname,ww3scale,ww3miss,ww3unit,ww3lon, $ - ww3lat,ww3matrix,ww3dir,ww3path,spec2D,ww3matrix2,ww3dir2,ncid,ncid2,ncivar0,ncivar -;*******END OF COMMON BLOCKS******************************* - - CASE plotncvar OF - 0 :IF c_cut EQ 1 AND transOK THEN BEGIN - ; Plots the depth along a transect defined in a *.tr file - X=Strans - Y=-Ztrans - rangex=[min(x,imin) -10.,max(x)] - rangey=[max([min(y),-1*maxdepth]),10.] ;max(y)] - Rescale,0 - IF (MAX(Xtrans)-min(Xtrans)) GE ((MAX(Ytrans)-min(Ytrans))) THEN BEGIN - IF Xtrans(Ntrans-1) LT Xtrans(0) THEN BEGIN - PRINT,'REVERSE X AXIS !!' - X=X(Ntrans-1)-X - imin=Ntrans-1-imin - ;Y=Reverse(Y) - ENDIF - ENDIF ELSE BEGIN - IF Ytrans(Ntrans-1) LT Ytrans(0) THEN BEGIN - PRINT,'REVERSE Y AXIS !!' - X=X(Ntrans-1)-X - ;Y=Reverse(Y) - ENDIF - ENDELSE - PLOT,X,Y,XSTYLE=1,YSTYLE=1,MAX_VALUE=maxval,/YNOZERO, $ - YTITLE='Depth (m)',XRANGE=rangex, $ - XTITLE='Distance along transect (km)',YRANGE=rangey, $ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - XX=FLTARR(Ntrans+3) - YY=FLTARR(Ntrans+3) - XX(0:Ntrans-1)=X - YY(0:Ntrans-1)=Y - XX(Ntrans)=rangex(1) - XX(Ntrans+1:Ntrans+2)=rangex(0) - YY(Ntrans:Ntrans+1)=rangey(0) - YY(Ntrans+2)=Y(0) - POLYFILL,XX,YY,/LINE_FILL,ORIENTATION=120,NOCLIP=0, $ - CLIP=[rangex(0),rangey(0),rangex(1),rangey(1)] - - ;XYOUTS,X(Ispectrans(0)),alignment=0.5, $ - ; rangey(1)-0.2*(rangey(1)-rangey(0)),spectransname(0) - ;XYOUTS,X(Ispectrans(ntransgp-1)),alignment=0.5, $ - ; rangey(1)-0.2*(rangey(1)-rangey(0)),spectransname(ntransgp-1) - ;FOR I=1,ntransgp-1 DO $ - ;XYOUTS,X(Ispectrans(I)),rangey(1)-0.1*(rangey(1)-rangey(0)),spectransname(I) - rangex0=rangex - IF (MAX(Xtrans)-min(Xtrans)) GE ((MAX(Ytrans)-min(Ytrans))) THEN BEGIN - rangex=rangex+Xtrans(imin) - ; Drawframe,'Distance along transect (km)', $ - ; 'Longitude (W)','Bottom elevation (m)',' ',FRAME=7, - ENDIF ELSE BEGIN - rangex=rangex+Ytrans(imin) - Drawframe,'Distance along transect (km)', $ - 'Latitude (N)','Bottom elevation (m)',' ',FRAME=8 - ENDELSE - posi=CONVERT_COORD(X(Ispectrans),REPLICATE(rangey(1),ntransgp),/DATA,/TO_NORMAL) - Y(Ispectrans(1))=0. - FOR I=0,ntransgp-1 DO BEGIN - OPLOT,[X(Ispectrans(I))],[Y(Ispectrans(I))],PSYM=6 - XYOUTS,X(Ispectrans(I))+0.04*(1 $;+2*(I MOD 2) - )*(rangex(1)-rangex(0)),ALIGNMENT=0.5, $ - Y(Ispectrans(I))-0.02*(1-2*(I MOD 2))*(rangey(1)-rangey(0)),spectransname(I) - ;PLOT,[posi(0,I),posi(0,I)],[0,1],LINESTYLE=3,/NORMAL, $ - ; XSTYLE=4,YSTYLE=4,/NOERASE,XRANGE=[0,1], $ - ; POSITION=[0,bly*winy/mwiny,1,try*winy/mwiny] - ENDFOR - xp=rangex0(0)+FINDGEN(850)*(rangex0(1)-rangex0(0))/849. - wavel=33 - waveh=4. - taille=SIZE(xp) - ywave=FLTARR(taille(1)) - meanw=1*!pi/SQRT(3)-0.5 - FOR I=0,taille(1)-1 DO BEGIN - I2=I-(wavel-1)*(I/(wavel-1)) - ywave(I)=meanw-2.*SQRT(1.-(FLOAT(I2-wavel/2)/FLOAT(wavel/2))^2) - ENDFOR - OPLOT,xp,ywave - - ENDIF ELSE BEGIN - x=(findgen(nxzmax-nxzmin+1)+nxzmin)*dx - y=(findgen(nyzmax-nyzmin+1)+nyzmin)*dy - rangex=[min(x),max(x)] - rangey=[min(y),max(y)] - Rescale,1 - IF ((filltype LE 2) OR (filltype EQ 7)) $ - AND ((RaysOK MOD 2) EQ 1) THEN BEGIN - stfr=string(rayfreq,format='(f6.4)') - tit='Rays of '+stfr+' Hz waves' - cbtit='Depth (m)' - ENDIF ELSE BEGIN - tit='Bottom topography' - cbtit=dictionnaire.dpt(ilang)+' (m)' ; au dessus du zero des cartes)' - ENDELSE - IF datastatus(3) THEN BEGIN -;AAA=stddev(gd(nxzmin:nxzmax,nyzmin:nyzmax)) -; print,'STDDEV:',AAA, AAA/mean(gd(nxzmin:nxzmax,nyzmin:nyzmax)) - table=gd(nxzmin:nxzmax,nyzmin:nyzmax) - Contorno,table,x,y,tit,'x (km)','y (km)',cbtit,0,1,0 - -;slope=0. -;shore=0.1 -;ns=0 -;FOR J=1,nyzmax-nyzmin-2 DO BEGIN -; ;LAND=WHERE(table(*,J) < shore,kount) -; LAND=WHERE(table(*,J) > shore,kount) -; IF (kount GT 0) THEN BEGIN -; shift=0 -; I0=LAND(0) -; ;I0=LAND(kount-1) -; shift=2 -; slope=slope+0.001*sqrt(((table(I0-2+shift,J)-table(I0-1+shift,J))/dx)^2+((table(I0,J+1)-table(I0,J))/dy)^2) -; ns=ns+1 -; ENDIF -;ENDFOR -;meanslope=slope/ns -;print,'Mean slope:',meanslope - - ENDIF ELSE PLOT,[x(0)],[y(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - - IF (filltype LE 4) THEN BEGIN - ;!P.CLIP=[min(x),min(y),0,max(x),max(y),1] - ad2dmisc - Drawframe,Drawframe,FRAME=1+MAPLONLAT - ENDIF - - ENDELSE - -; -; Plots bathymetry from gmsh file -; - 1 :BEGIN - x=(findgen(nxzmax-nxzmin+1)+nxzmin)*dx - y=(findgen(nyzmax-nyzmin+1)+nyzmin)*dy - rangex=[min(x),max(x)] - rangey=[min(y),max(y)] - Rescale,1 - IF ((filltype LE 2) OR (filltype EQ 7)) $ - AND ((RaysOK MOD 2) EQ 1) THEN BEGIN - stfr=string(rayfreq,format='(f6.4)') - tit='Rays of '+stfr+' Hz waves' - cbtit='Depth (m)' - ENDIF ELSE BEGIN - tit='Bottom topography' - cbtit='Depth (m)' - ;cbtit=dictionnaire.dpt(ilang)+' (m)' ; au dessus du zero des cartes)' - cbtit='Depth (m)' ; au dessus du zero des cartes)' - ENDELSE - IF (N_ELEMENTS(gridmat) GT 0) THEN BEGIN - Z=gridmat(7,*) - X=gridmat(0,*) - Y=gridmat(1,*) - IF (MAX(Z) GT MIN(Z)) THEN BEGIN - tri=TRANSPOSE(TRIGP(1:ntri,1:3)-1) - IF (filltype EQ 0 OR FILLTYPE EQ 3) THEN BEGIN - TRIANGULATE,X,Y,tri - ;Contorno,Z,X,Y,tit,'x (km)','y (km)',cbtit,1,0,1,tri=tri - Contorno,Z,X,Y,tit,'x (km)','y (km)',cbtit,1,1,1,tri=tri - ENDIF ELSE BEGIN - nnx=nxzmax-nxzmin+1 - nny=nyzmax-nyzmin+1 - IF (LONG(NNX)*LONG(NNY) LT 80000000L) THEN BEGIN - arr=trigrid(X,Y,z,tri,[dx,dy],[rangex(0),rangey(0),rangex(1),rangey(1)]) - x=(findgen(nnx)+nxzmin)*dx - y=(findgen(nny)+nyzmin)*dy - Contorno,arr,x,y,tit,'x (km)','y (km)',cbtit,0,1,0 - ENDIF ELSE BEGIN - PRINT,'Plot not performed because interpolation on too large array:',nnx,nny - PRINT,'Please change resolution in *.log file' - ENDELSE - ENDELSE - IF (filltype LE 4) THEN BEGIN - ad2dmisc - IF (MAPFLAG EQ 0) THEN Drawframe,FRAME=1+MAPLONLAT - ENDIF - ENDIF ELSE PRINT,'This array is constant' - ENDIF ; N_ELEMENTS(gridmat) - END -; -; Plots WWATCH gridded output -; - 2 :BEGIN -; -; Shifts indices for global grids to move longitudes -; - nnx=nxzmax-nxzmin+1 - nny=nyzmax-nyzmin+1 - taille=size(ww3matrix) - nlat=taille(0) - IF (nlat GT 1) THEN BEGIN - nshift=0; - ww3matrixshift=SHIFT(ww3matrix,nshift,0); - nxzmaxshift=nxzmax+nshift*dx - nxzminshift=nxzmin+nshift*dx - nnx=nxzmaxshift-nxzminshift+1 - ENDIF - x=(findgen(nnx)+nxzmin)*dx - y=(findgen(nny)+nyzmin)*dy - rangex=[min(x),max(x)] - rangey=[min(y),max(y)] - Rescale,1 - - tit=ww3model+' '+ww3date+' '+ww3time - cbtit=ww3fieldname;"Vitesse d'agitation sur le fond" -; -; -; - IF (nlat GT 1 ) THEN BEGIN ; This is for structured grids - IF (STRPOS(cbtit,'W/m2') NE -1) THEN BEGIN - flux=0. - - I=WHERE(ww3matrix EQ -2.*maxval,KOUNT) - IF (KOUNT GT 0) THEN ww3matrix(I)=0. - FOR J=nyzmin,nyzmax DO BEGIN - flux=flux+TOTAL(ww3matrix(nxzmin:nxzmax,J))*cos(ww3lat(J)*!dtor) - ENDFOR - flux=flux*(ww3lat(2)-ww3lat(1))*(ww3lon(2)-ww3lon(1))*(!dtor*4E7/(2*!pi))^2 - print,'FLUX =',flux,' W' - - ENDIF - IF datastatus(20) THEN BEGIN - table=ww3matrixshift(nxzmin:nxzmax,nyzmin:nyzmax) - IF ((STRPOS(cbtit,'Hs') NE -1 OR STRPOS(cbtit,'hs') NE -1 )AND fixrange EQ 0) THEN BEGIN - clev=[0, 0.05, 0.1, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, $ - 2.25 ,2.5, 2.75, 3, 3.25, 3.5, 3.75, 4. ,4.5 ,5., 5.5, 6 ,7, $ - 8 , 9, 10, 11, 12, 13 , 14, 15, 40] - IF (fixrange) THEN clev=clev*maxdepth/15. - coli=[1, 3, 5, 8, 9, 15, 20, 21, 26, 30, $ - 35, 39, 40, 45, 52, 57, 61, 66, 67, 79, 89, 98, 99 , 134, $ - 149, 150, 182, 183, 215, 216, 251, 252] - Contorno,table,x,y,tit,'x (km)','y (km)',cbtit,0,0,0,clev=clev,coli=coli - ENDIF ELSE BEGIN - table(0,0)=-1. - Contorno,table,x,y,tit,'x (km)','y (km)',cbtit,0,0,0 - ENDELSE - ENDIF ELSE PLOT,[x(0)],[y(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - IF (addir EQ 0) and (n_elements(ww3dir) NE 0) THEN BEGIN - dirplot=ww3dir -; In case of polar projection: rotation ... - IF (MAPLONLAT EQ 2) THEN dirplot=dirplot-(ww3lon+45); - - xvect=-sin(dirplot(nxzmin:nxzmax,nyzmin:nyzmax)*!dtor) - yvect=-cos(dirplot(nxzmin:nxzmax,nyzmin:nyzmax)*!dtor) - xx=transpose(1.+FLTARR(nny))##x - yy=transpose(y)##(1.+FLTARR(nnx)) - missing=FLTARR(nnx,nny) - Index=WHERE(abs(ww3dir(nxzmin:nxzmax,nyzmin:nyzmax)) GT maxval,kount) - IF kount GT 0 THEN missing(Index)=1 - IF (smoothing GT 1) THEN BEGIN - FOR I=0,nnx-1 DO BEGIN - FOR J=0,nny-1 DO BEGIN - IF (I MOD smoothing) +(J MOD smoothing) NE 0 $ - THEN missing(i,j)=1. - ENDFOR - ENDFOR - ENDIF - VECT,reform(xvect,LONG(nnx)*LONG(nny)),reform(yvect,LONG(nnx)*LONG(nny)), $ - reform(xx,LONG(nnx)*LONG(nny)),reform(yy,LONG(nnx)*LONG(nny)), $ - reform(missing,LONG(nnx)*LONG(nny)),rangex,rangey - ENDIF - ENDIF ELSE BEGIN ; this is for unstructured grids - XGP=FLTARR(nngp) - YGP=FLTARR(nngp) - array2=ww3matrix - array2=array2; ^2*0.001*0.0015 - XGP(0:nngp-1)=gridmat(0,0:nngp-1) - YGP(0:nngp-1)=gridmat(1,0:nngp-1) - IF (STRPOS(cbtit,'Hs') NE -1 AND STRPOS(cbtit,'HsIG') EQ -1 AND fixrange EQ 0) THEN BEGIN - clev=[0, 0.05, 0.1, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, $ - 2, 2.25 ,2.5, 2.75, 3, 3.25, 3.5, 3.75, 4. ,4.5 ,5., 5.5, 6 ,7, $ - 8 , 9, 10, 11, 12, 13 , 14, 15, 40] - IF (fixrange) THEN clev=clev*maxdepth/15. - coli=[1, 3, 5, 8, 9, 15, 20, 21, 26, $ - 30, 35, 39, 40, 45, 52, 57, 61, 66, 67, 79, 89, 98, 99 , 134, $ - 149, 150, 182, 183, 215, 216, 251, 252] - tri=TRANSPOSE(TRIGP(1:ntri,1:3)-1) - IF (filltype EQ 0 OR FILLTYPE EQ 3) THEN $ - Contorno,array2,XGP,YGP,tit,'x (km)','y (km)',cbtit,1,0,1,clev=clev,coli=coli,tri=tri $ - ELSE BEGIN - ENDELSE - ENDIF ELSE BEGIN - tri=TRANSPOSE(TRIGP(1:ntri,1:3))-1L - ;X=XGP - ;Y=YGP - ;Z=array2 - ;SAVE,X,Y,Z,TRI,rangex,rangeY,dx,dy,filename='TRIANGULATION_MARSEILLE.sav', $ - ; DESCRIPTION="Example of grid that fails in CONTOUR with TRIANGULATION keyword" - IF (filltype EQ 0 OR FILLTYPE EQ 3) THEN BEGIN - TRIANGULATE,XGP,YGP,tri - Contorno,array2,XGP,YGP,tit,'x (km)','y (km)',cbtit,1,0,1,tri=tri - ENDIF ELSE BEGIN - arr=trigrid(XGP,YGP,array2,tri,[dx,dy],[rangex(0),rangey(0),rangex(1),rangey(1)], $ - MAX_VALUE=maxval) - x=(findgen(nnx)+nxzmin)*dx - y=(findgen(nny)+nyzmin)*dy - Contorno,arr,x,y,tit,'x (km)','y (km)',cbtit,0,0,0 - ENDELSE - ENDELSE - - - IF (addir EQ 0 AND MAPFLAG EQ 0) and (n_elements(ww3dir) NE 0) THEN BEGIN - TRIANGULATE,xgp,ygp,tr,b - Index=WHERE(ww3matrix GT maxval,kount) - IF (kount GT 1) THEN ww3dir(Index)=1./0 - dircos=TRIGRID(xgp,ygp,cos(ww3dir*!dtor),tr, $ - [dx,dy],[MIN(X), MIN(Y), MAX(X), MAX(Y)],XOUT=X,YOUT=Y) - dirsin=TRIGRID(xgp,ygp,sin(ww3dir*!dtor),tr, $ - [dx,dy],[MIN(X), MIN(Y), MAX(X), MAX(Y)],XOUT=X,YOUT=Y) - xvect=-dirsin - yvect=-dircos - - xx=transpose(1.+FLTARR(nny))##x - yy=transpose(y)##(1.+FLTARR(nnx)) - missing=FLTARR(nnx,nny) - IF (smoothing GT 1) THEN BEGIN - FOR I=0,nnx-1 DO BEGIN - FOR J=0,nny-1 DO BEGIN - IF (I MOD smoothing) +(J MOD smoothing) NE 0 $ - THEN missing(i,j)=1. - ENDFOR - ENDFOR - ENDIF - VECT,reform(xvect,LONG(nnx)*LONG(nny)),reform(yvect,LONG(nnx)*LONG(nny)), $ - reform(xx,LONG(nnx)*LONG(nny)),reform(yy,LONG(nnx)*LONG(nny)), $ - reform(missing,LONG(nnx)*LONG(nny)),rangex,rangey - ENDIF - - - - ENDELSE - - IF (filltype LE 4) THEN BEGIN - ;!P.CLIP=[min(x),min(y),0,max(x),max(y),1] - ad2dmisc - IF (MAPFLAG EQ 0) THEN Drawframe,FRAME=2-ABS(MAPLONLAT-1) - ENDIF - - END - 3:BEGIN - nnx=nxzmax-nxzmin+1 - nny=nyzmax-nyzmin+1 - x=(findgen(nnx)+nxzmin)*dx - y=(findgen(nny)+nyzmin)*dy - rangex=[min(x),max(x)] - rangey=[min(y),max(y)] - Rescale,1 - tit=ww3model+' '+ww3date+' '+ww3time - cbtit='diff. '+ww3fieldname - taille=size(ww3matrix) - nlat=taille(2) - IF (nlat GT 1) THEN BEGIN - IF datastatus(21) THEN BEGIN - table=ww3matrix(nxzmin:nxzmax,nyzmin:nyzmax)-ww3matrix2(nxzmin:nxzmax,nyzmin:nyzmax) - Contorno,table,x,y,tit,'x (km)','y (km)',cbtit,0,0,0 - ENDIF ELSE PLOT,[x(0)],[y(0)],xstyle=5,ystyle=5,/NODATA, $ - XRANGE=rangex,YRANGE=rangey, /NOERASE,$ - POSITION=[blx*winx/mwinx,bly*winy/mwiny,trx*winx/mwinx,try*winy/mwiny] - - IF (addir EQ 0) and (n_elements(ww3dir) NE 0) THEN BEGIN - xvect=-sin(ww3dir(nxzmin:nxzmax,nyzmin:nyzmax)*!dtor) - yvect=-cos(ww3dir(nxzmin:nxzmax,nyzmin:nyzmax)*!dtor) - xx=transpose(1.+FLTARR(nny))##x - yy=transpose(y)##(1.+FLTARR(nnx)) - missing=FLTARR(nnx,nny) - Index=WHERE(ww3dir(nxzmin:nxzmax,nyzmin:nyzmax) GT maxval,kount) - IF kount GT 0 THEN missing(Index)=1 - IF (smoothing GT 1) THEN BEGIN - FOR I=0,nnx-1 DO BEGIN - FOR J=0,nny-1 DO BEGIN - IF (I MOD smoothing) +(J MOD smoothing) NE 0 $ - THEN missing(i,j)=1. - ENDFOR - ENDFOR - ENDIF - VECT,reform(xvect,LONG(nnx)*LONG(nny)),reform(yvect,LONG(nnx)*LONG(nny)), $ - reform(xx,LONG(nnx)*LONG(nny)),reform(yy,LONG(nnx)*LONG(nny)), $ - reform(missing,LONG(nnx)*LONG(nny)),rangex,rangey - ENDIF - ENDIF ELSE BEGIN - XGP=FLTARR(nngp) - YGP=FLTARR(nngp) - array2=ww3matrix-ww3matrix2 - XGP(0:nngp-1)=gridmat(0,0:nngp-1) - YGP(0:nngp-1)=gridmat(1,0:nngp-1) - Contorno,array2,XGP,YGP,tit,'x (km)','y (km)',cbtit,1,0,1 - ENDELSE - - IF (filltype LE 4) THEN BEGIN - ;!P.CLIP=[min(x),min(y),0,max(x),max(y),1] - ad2dmisc - IF (MAPFLAG EQ 0) THEN Drawframe,FRAME=1+MAPLONLAT - ENDIF - - END - ENDCASE - RETURN -END - - -;---------------------------------------------------------------------------- -pro gfunct,X,A,f,pder - bx=EXP(A[3]*X) - p1=A[0]*X^2+A[1]*X+A[2] - F=p1*bx+A[4] - IF N_PARAMS() GE 4 THEN $ - pder=[[X^2*bx],[X*bx],[bx],[x*p1*bx],[replicate(1.0, N_ELEMENTS(X))]] - RETURN -END -;---------------------------------------------------------------------------- -PRO LINEPLOT,X,Y,xtit,ytit,tit,SYMOP,LOGFLAG - - rangex=[min(x),max(x)] - rangey=[min(y),max(y)] - Rescale,0 - SYMARR=[-1,4,5,6,8,8,8,-7,2] - XUSYM=FLTARR(9,5) - YUSYM=FLTARR(9,5) - XUSYM(4,*)=[-1,1,0.,-1,1] - YUSYM(4,*)=[1,1,-1,1,1] - XUSYM(5,*)=[-1,1,-1,1,-1] - YUSYM(5,*)=[1,1,-1,-1,1] - XUSYM(6,*)=[-1,1,1,-1,-1] - YUSYM(6,*)=[1,-1,1,-1,1] - XUSYM(8,*)=[-1,1,1,-1,-1] - YUSYM(8,*)=[1,-1,1,-1,1] - PLOT,X,Y(*,0),YRANGE=rangey,XRANGE=rangex, $ - title=title,YLOG=LOGFLAG,XTITLE=xtit,YTITLE=ytit,/NODATA - taille=size(y) - print,taille - IF SYMOP THEN BEGIN - FOR I=0,taille(2)-1 DO BEGIN - USERSYM,XUSYM(I,*),YUSYM(I,*) - OPLOT,X,Y(*,I),PSYM=SYMARR(I),SYMSIZE=0.6 - ENDFOR - ENDIF ELSE BEGIN - SARR=['A','B','C','D','E','F','G','H','I'] - SYMARR=[-3,3,3,3,3,3,3,-3,3] - FOR I=0,taille(2)-1 DO BEGIN - OPLOT,X,Y(*,I),PSYM=SYMARR(I) - XYOUTS,X,Y(*,I),REPLICATE(SARR(I),taille(1)),ALIGNMENT=0.5 - ENDFOR - ENDELSE -END -;---------------------------------------------------------------------------- -PRO UPDATE_COORDINATES,lonmin,lonmax,latmin,latmax,widgetaction -COMMON BATHY, gd,nx,ny,dx,dy,sx,sy,rlonmax,rlonmin,rlatmin,rlatmax -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON FILES, filestatus,datastatus,paths,filters,filenames,raypath -COMMON GRID, gridmat,nngp,ngpused,zonestart,zoneend,truegp,gpused,gpnotused -COMMON SPECIALS,nspecgp,specmat,specname,c_spec,ispec1,ispec2 -COMMON WIDGETS, Wtoprow,Wright,Wdraw,Wdraw_value_update,Wsimple -COMMON ZOOM, nxzmax,nyzmax,nxzmin,nyzmin,maxdepth,mindepth - - inbox=1 - IF (datastatus(2) EQ 1) THEN BEGIN - IF (lonmin LT rlonmin) THEN inbox = 0 - IF (latmin LT rlatmin) THEN inbox = 0 - IF (lonmax GT rlonmax) THEN inbox = 0 - IF (latmax GT rlatmax) THEN inbox = 0 - ENDIF - IF (rlonmin EQ 0 and rlatmax EQ 0) THEN inbox = 0 - IF (datastatus(2) EQ 0 OR inbox EQ 0) THEN BEGIN - nx=4001 - ny=4001 - rlonmin=lonmin - rlonmax=lonmax - rlatmin=latmin - rlatmax=latmax - dlon=rlonmax-rlonmin - dlat=rlatmax-rlatmin - LX=dlon*cos(0.5*(rlatmax+rlatmin)*!pi/180.)*4E7/360. - LY=dlat*4E7/360. - - sx=LX/(nx-1) - sy=LY/(ny-1) - dx=sx/1000. - dy=sy/1000. - PRINT,'Defining coordinate system :',nx,ny,dx,dy - PRINT,'Defining coordinate system :',rlonmin,rlonmax,rlatmin,rlatmax - nxzmin=0L - nyzmin=0L - nxzmax=nx-1 - nyzmax=ny-1 - rangex=[0,dx*FLOAT(nx-1)] - rangey=[0,dy*FLOAT(ny-1)] - datastatus(2)=1 - MAPLONLAT=1 - IF widgetaction THEN WIDGET_CONTROL, Wdraw, SENSITIVE=1 - ENDIF -END - -;-------------- determine les dimensions du graphique ------------------- -PRO Rescale,flag ;appele par Doplot -;** 1 ** Display parameters -COMMON CURRENT, datatype,plottype,line,column,c_numlev,output,plotncvar,normvec -COMMON DRAWING, Navailcolor,colorind,rangex,rangey,xtoy,filltype,logplot -COMMON DRAWSIZE,winx,winy,mwinx,mwiny,blx,bly,trx,try -COMMON FLAGS, eqscale,cbar,clickflag,subwin -COMMON POSTSCRIPT, filep,pspath,prcoul,psor,pstype, $ - pwinx,pwiny,papierx,papiery,xoffset,yoffset, $ - facpolice,fontrescale,basefontsize,pssizex,pssizey,psfont -COMMON MAP, MAPFLAG, MAPPROJ, MAPLONGCENTER, MAPLATCENTER, MAPCONTINENT, $ - MAPCOUNTRIES, MAPLONLAT -;*******END OF COMMON BLOCKS******************************* - - - IF output EQ 1 THEN BEGIN -!p.thick = 2 -!x.thick = 2 -!y.thick = 2 -!z.thick = 2 - winx=mwinx - winy=mwiny -; Conditions sur la taille de la fenetre: -; pssizex < or = pwinx with pssizex=fx*mwinx -; pssizey < or = pwiny with pssizey=fx*ff*mwiny -; The ratio ff between the two factors is determined by: -; (in the case EQSCALE=1): -; pssizex*(trx-blx)/(pssizey*(try-bly)) -; = (rangex(1)-rangex(0))/(rangey(1)-rangey(0)) -; - - IF psor EQ 0 THEN BEGIN ;portrait - pssizex=pwinx - pssizey=pwiny - IF flag EQ 1 AND MAPFLAG EQ 0 THEN BEGIN ;portrait and equal scaling - f=MIN([FLOAT(pssizex)*(trx-blx)/(rangex(1)-rangex(0)), $ - FLOAT(pssizey)*(try-bly)/(rangey(1)-rangey(0))]) - ;print,'factors',f,FLOAT(pssizex)*(trx-blx)/(rangex(1)-rangex(0)), $ - ; FLOAT(pssizey)*(try-bly)/(rangey(1)-rangey(0)) - ;f is the min of the maximum ratio of - ;poststcript distance and data distance for both axes - ;then we apply the same f ratio to both axes: - winx=f*FLOAT(mwinx)*(rangex(1)-rangex(0))/ $ - ((trx-blx)*pssizex) ; horizontal size of plot output - winy=f*FLOAT(mwiny)*(rangey(1)-rangey(0))/ $ - ((try-bly)*pssizey) ; vertical size of plot output - ;print,'winx',winx,mwinx,winy,mwiny - ;print,'plots',pssizex*FLOAT(winx)*(trx-blx)/(rangex(1)-rangex(0))/FLOAT(mwinx), $ - ;pssizey*FLOAT(winy)*(try-bly)/(rangey(1)-rangey(0))/FLOAT(mwiny) - POSI=[blx*FLOAT(winx)/FLOAT(mwinx),bly*FLOAT(winy)/FLOAT(mwiny), $ - trx*FLOAT(winx)/FLOAT(mwinx),try*FLOAT(winy)/FLOAT(mwiny)] - ;print,POSI - ;print,POSI*pssizex - ;print,POSI*pssizey - ;print,'ranges',rangex,rangey - ENDIF ELSE BEGIN ;portrait without equal scaling - winx=mwinx - winy=mwiny - ENDELSE - ENDIF ELSE BEGIN - pssizex=pwiny - pssizey=pwinx - IF flag EQ 1 THEN BEGIN ; landscape and equal scaling - f=MIN([FLOAT(pssizex)*(trx-blx)/(rangex(1)-rangex(0)), $ - FLOAT(pssizey)*(try-bly)/(rangey(1)-rangey(0))]) - IF pstype THEN BEGIN ; case of encapsulated postscript - pssizex=f*(rangex(1)-rangex(0))/(trx-blx) - pssizey=f*(rangey(1)-rangey(0))/(try-bly) - ENDIF - ;f is the min of the maximum ratio of - ;poststcript distance and data distance for both axes - ;then we apply the same f ratio to both axes: - winx=f*mwinx*(rangex(1)-rangex(0))/ $ - ((trx-blx)*pssizex) ; horizontal size of plot output - winy=f*mwiny*(rangey(1)-rangey(0))/ $ - ((try-bly)*pssizey) ; vertical size of plot output - ENDIF ELSE BEGIN ;landscape without equal scaling - winx=mwinx - winy=mwiny - ENDELSE - ENDELSE - - IF output EQ 1 THEN BEGIN - IF psfont EQ 0 THEN DEVICE,/HELVETICA ELSE DEVICE,/TIMES - PRINT,'PSfont:',psfont - ENDIF - IF !P.FONT EQ 1 THEN !P.FONT=0 - !p.charsize=1.5*MIN([pssizex,pssizey])*facpolice/20.0 - - ; adapte la taille de la police a la - ; dimension du graphique - PRINT,'Dimensions de la zone imprimee:',pssizex,pssizey - IF fontrescale THEN BEGIN - !p.charsize=1.5*MIN([pssizex,pssizey])*facpolice/20.0 - PRINT,'Taille reelle de la police (Max(' $ - +strcompress(string(pssizex))+',' $ - +strcompress(string(pssizey))+')*' $ - +strcompress(string(facpolice))+'/20.0):',!p.charsize*basefontsize - ENDIF ELSE BEGIN - !p.charsize=facpolice - PRINT,'Taille reelle de la police :',!p.charsize*basefontsize - ENDELSE - DEVICE,/ISOLATIN1 - IF psor EQ 1 THEN BEGIN ;ouverture fichier postcript couleur - print,'pssizex',pssizex,pssizey - DEVICE,/COLOR, XSIZE=pssizex, YSIZE=pssizey, BITS_PER_PIXEL=8, $ - FONT_SIZE=basefontsize, XOFFSET=xoffset, YOFFSET=(papiery-yoffset), $ - /LANDSCAPE,ENCAPSULATED=pstype, filename=filep - ENDIF ELSE BEGIN - DEVICE,/COLOR, XSIZE=pssizex, YSIZE=pssizey,BITS_PER_PIXEL=8, $ - FONT_SIZE=basefontsize, XOFFSET=xoffset, YOFFSET=yoffset-1., /PORTRAIT, $ - ENCAPSULATED=pstype,filename=filep - ENDELSE - ENDIF ELSE BEGIN -; calculate x and y size for screen display -; Conditions sur la taille de la fenetre: -; winx < ou = mwinx avec winx=f* -; winy < ou = mwiny avec winy=f* -; le rapport ff entre les deux facteurs est determine par la condition: -; (dans le cas ou EQSCALE=1): -; winx*(trx-blx)/(winy*(try-bly)) -; = (rangex(1)-rangex(0))/(rangey(1)-rangey(0)) - - IF flag EQ 1 AND MAPFLAG EQ 0 THEN BEGIN - f=MIN([FLOAT(mwinx)*(trx-blx)/(rangex(1)-rangex(0)), $ - FLOAT(mwiny)*(try-bly)/(rangey(1)-rangey(0))]) - ;f is the maximum number of pixels per data unit - - winx=f*(rangex(1)-rangex(0))/(trx-blx) ; horizontal size of plot output - winy=f*(rangey(1)-rangey(0))/(try-bly) ; vertical size of plot output - ENDIF ELSE BEGIN ;no equal scaling required - winx=(mwinx) ; horizontal size of plot output - winy=(mwiny) ; vertical size of plot output - ENDELSE - ENDELSE - xtoy=1./(FLOAT(winx)/FLOAT(winy)*(rangey(1)-rangey(0))/(rangex(1)-rangex(0))) -END - -;********************************************************************** -PRO LOCATE,itype,ihem,itrans,lat,lon,i,j -;ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc - -; attention -;parametres du locate -;ihem=1 ;Pole NORD -;itype=1 ;resolution 12.5km -;itrans=1 ;i,j==>lat,lon ;LOCATE,itype,ihem,itrans,lat,lon,ix,iy - ;sous IDL rajouter 1 a ix et iy avant appel au locate -;itrans=2 ;lat,lon ==>i,j ;LOCATE,itype,ihem,itrans,lat,lon,ix,iy - ;sous IDL enlever 1 a ix et iy apres appel au locate -;;;;; - - - -;ATTENTION cette routine est traduite du fortran. -;les indice i et j commencent a 1 et non pas a zero -; (Attention a PV-Wave il faut enlever 1 a I et J dans le sens lat lon vers I,J -; (Attention a PV-Wave il faut ajouter 1 a I et J dans le sens I,J vers lat lon -; -; LOCATE - This routine transforms I,J coordinates of an SSM/I grid cell -; to latitude and longitude coordinates. This program provides -; the inverse functions as well. LOCATE interfaces to the revised -; forms of the subroutines, MAPXY and MAPLL. -; -; User-defined Parameters: -; -; itype : Integer supplied by the user to describe one of the three -; grid cell dimensions (12.5 km, 25.0 km, or 50.0 km). -; -; ihem : Integer supplied by the user to describe one of the two -; polar regions (1=North , 2=South) -; -; itrans : Integer supplied by the user to describe the type of -; transformation LOCATE will perform (1=I,J-to-Lat,Lon; -; 2=Lat,Lon-to-I,J) -; -; i,j : Integers supplied by the user when itrans = 1. These -; integers describe the position of a cell in an SSM/I grid. -; -; lat,lon : Reals supplied by the user when itrans = 2. These -; integers describe the latitude and longitude in an SSM/I -; grid which LOCATE will transform to an I,J grid cell position. -; Note: All latitudes and longitudes must be entered as -; positive numbers! -; -; Internal: -; -; x,y : Distance in kilometers from the origin of the grid -; (ie., pole). -; -; alat, -; alon : Computed latitude and longitude returned from MAPXY. -; -; SGN : Sign of the latitude (positive = north latitude, -; negative = south latitude) -; -; delta : Meridian offset for the SSM/I grids (0 degrees for -; the South Polar grids; 45 degrees for the North Polar -; grids. -; -; kk : Integer variable used for reorientation of the grid. The -; grid is 'flipped' in the Y direction for transformations. -; -; SLAT : Standard latitude for the SSM/I grids is 70 degrees. -; -; numy : Number of lines in an SSM/I grid. This attribute varies -; for each of the six grids. -; -; cell : Size of the SSM/I grid ( 12.5 km, 25.0 km, 50.0 km) -; -; xydist : Distance from the origin of the grid in the cartesian plane. -; The x-y coordinates for the edge of the lower left pixel -; is (3850.0, 5350.0) for the northern grids and -; (3950.0, 3950.0) for the southern grids. -; -; RE : Radius of the earth in kilometers. -; -; E : Eccentricity of the Hughes ellipsoid -; -; E2 : Eccentricity squared -; -; PI : Pi -; Written by V.J.Troisi - January, 1990 -;ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -numy=INTARR(2,3) -cell=FLTARR(3) -xydist=FLTARR(2,2) -numy(0,0)=896 -numy(1,0)=664 -numy(0,1)=448 -numy(1,1)=332 -numy(0,2)=224 -numy(1,2)=166 -cell(0)=12.5 -cell(1)=25. -cell(2)=50. -xydist(0,0)=3850. -xydist(1,0)=5350. -xydist(0,1)=3950. -xydist(1,1)=3950. -; -SLAT = 70. -RE = 6378.273 -E2 = .006693883 -PI = 3.141592654 -E = SQRT(E2) -; -; grid cell size. -; -; the grid cell dimension: itype -; 1 - 12.5 Km' -; 2 - 25.0 Km' -; 3 - 50.0 Km' -; -; -; the hemisphere of interest: ihem -; 1 - North' -; 2 - South' -; -; Define the sign and meridian offset (delta) for the SSM/I grids. -; -IF (ihem EQ 1) THEN BEGIN -SGN = 1.0 -delta = 45. -ENDIF ELSE BEGIN -SGN = -1.0 -delta = 0.0 -ENDELSE -; -; translation type : itrans -; 0 - Exit' -; 1 - Convert I,J to Latitude, Longitude' -; 2 - Convert Latitude, Longitude to I,J' -; -; Start translation -; -; Because of PV-WAVE indexing starts with 0: -ihem=ihem-1 -itype=itype-1 -IF itrans EQ 0 THEN GOTO, sortie -IF itrans EQ 1 THEN GOTO, ijintoll -IF itrans EQ 2 THEN GOTO, llintoij -; -; Convert I,J pairs to x and y distances from origin. The grid will be -; -; 'flipped' in the 'Y' direction. -; -ijintoll: x=((i-1)*cell(itype))-(xydist(0,ihem)-cell(itype)/2.) -kk=numy(ihem,itype)-(j-1) -y=((kk-1)*cell(itype))-(xydist(1,ihem)-cell(itype)/2.) -; -; Transform x and y distances to latitude and longitude -; -MAPXY,x,y,alat,alon,SLAT,SGN,E,RE -; -; Transform radians to degrees. -; -alon=alon*180./PI -lat=alat*180./PI -alon=alon-delta -; -; Convert longitude to positive degrees -; -lon=alon -IF alon LE 0.0 THEN lon=alon+360. -IF alon GE 360.0 THEN lon=alon-360. -; -GOTO, sortie -; -; llintoij transforms lat,lon en i,j -; -llintoij: alat=abs(lat)*PI/180. -alon=(lon+delta)*PI/180. - -; -; Transform latitude and longitude to x and y distances from origin -; -MAPLL,x,y,alat,alon,SLAT,SGN,E,RE -; -; Convert x and y distances from origin to I,J pair (ii,jj) -; - - -i=FIX(((x+xydist(0,ihem)-cell(itype)/2.)/cell(itype))+.5)+1 -j=FIX(((y+xydist(1,ihem)-cell(itype)/2.)/cell(itype))+.5)+1 - - -; -; Flip grid orientation in the 'Y' direction -; -j=numy(ihem,itype)-(j-1) - -; -sortie: ihem=ihem+1 -itype=itype+1 -RETURN -END -;***************************************************************************** -PRO MAPLL,X,Y,AALAT,AALONG,SGN -;***************************************************************************** -; -; DESCRIPTION: -; -; This subroutine converts from geodetic latitude and longitude to Polar * -; Stereographic (X,Y) coordinates for the polar regions. The equations * -; are from Snyder, J. P., 1982, Map Projections Used by the U.S. * -; Geological Survey, Geological Survey Bulletin 1532, U.S. Government * -; Printing Office. See JPL Technical Memorandum 3349-85-101 for further * -; details. -; -; ; -; ARGUMENTS: -; -; Variable Type I/O Description -; * -; ALAT REAL*4 I Geodetic Latitude (degrees, +90 to -90) * -; ALONG REAL*4 I Geodetic Longitude (degrees, 0 to 360) * -; X REAL*4 O Polar Stereographic X Coordinate (km) * -; Y REAL*4 O Polar Stereographic Y Coordinate (km) * -; * -; * -; Written by C. S. Morris - April 29, 1985 * -; Revised by C. S. Morris - December 11, 1985 * -; -; Revised by V. J. Troisi - January 1990 -; SGN - provides hemisphere dependency (+/- 1) -;***************************************************************************** -; DEFINITION OF CONSTANTS: * -; * -; Conversion constant from degrees to radians = 57.29577951. * -COMMON MAPPOLE, XPOLE, YPOLE, SLAT, RE, E2, E - -CDR=57.29577951 -E2=E*E -PI=3.141592654 -;***************************************************************************** -; Compute X and Y in grid coordinates. - - ALAT = AALAT / CDR - ALONG = (AALONG+45) / CDR - -IF ABS(ALAT) LT PI/2. THEN GOTO, T - X=0.0 - Y=0.0 - GOTO, ret -T: T=TAN(PI/4.-ALAT/2.)/((1.-E*SIN(ALAT))/(1.+E*SIN(ALAT)))^(E/2.) -IF ABS(90.-SLAT) LT 1.E-5 THEN BEGIN -RHO=2.*RE*T/((1.+E)^(1.+E)*(1.-E)^(1.-E))^(1/2.) - -ENDIF ELSE BEGIN -SL=SLAT*PI/180. -TC=TAN(PI/4.-SL/2.)/((1.-E*SIN(SL))/(1.+E*SIN(SL)))^(E/2.) -MC=COS(SL)/SQRT(1.0-E2*(SIN(SL)^2)) -RHO=RE*MC*T/TC -ENDELSE -Y=-RHO*SGN*COS(SGN*ALONG) -X= RHO*SGN*SIN(SGN*ALONG) - -ret: RETURN -END -;***************************************************************************** -PRO MAPXY,XI,YI,ALAT,ALONG,SGN -;***************************************************************************** -; * -; * -; DESCRIPTION: * -; * -; This subroutine converts from Polar Stereographic (X,Y) coordinates * -; to geodetic latitude and longitude for the polar regions. The equations * -; are from Snyder, J. P., 1982, Map Projections Used by the U.S. * -; Geological Survey, Geological Survey Bulletin 1532, U.S. Government * -; Printing Office. See JPL Technical Memorandum 3349-85-101 for further * -; details. * -; * -; * -; ARGUMENTS: * -; * -; Variable Type I/O Description * -; * -; X REAL*4 I Polar Stereographic X Coordinate (km) * -; Y REAL*4 I Polar Stereographic Y Coordinate (km) * -; ALAT REAL*4 O Geodetic Latitude (degrees, +90 to -90) * -; ALONG REAL*4 O Geodetic Longitude (degrees, 0 to 360) * -; * -; * -; Written by C. S. Morris - April 29, 1985 * -; Revised by C. S. Morris - December 11, 1985 * -; * -; Revised by V. J. Troisi - January 1990 -; SGN - provide hemisphere dependency (+/- 1) -; -;***************************************************************************** -; * -; DEFINITION OF CONSTANTS: * -; * -; Conversion constant from degrees to radians = 57.29577951. * -COMMON MAPPOLE, XPOLE, YPOLE, SLAT, RE, E2, E - -X=XI-XPOLE -Y=YI-YPOLE -CDR=57.29577951 -E2=E*E -PI=3.141592654 -; * -;***************************************************************************** -SL = SLAT*PI/180. -E200: RHO=SQRT(X^2+Y^2) -IF RHO GT 0.1 THEN GOTO, E250 -ALAT=90.*SGN -ALONG=0.0 -GOTO, E999 -E250: CM=COS(SL)/SQRT(1.0-E2*(SIN(SL)^2)) -T=TAN((PI/4.0)-(SL/(2.0)))/((1.0-E*SIN(SL))/(1.0+E*SIN(SL)))^(E/2.0) -IF ABS(SLAT-90.) LT 1.E-5 THEN BEGIN -T=RHO*SQRT((1.+E)^(1.+E)*(1.-E)^(1.-E))/2./RE -ENDIF ELSE BEGIN -T=RHO*T/(RE*CM) -ENDELSE -CHI=(PI/2.0)-2.0*ATAN(T) -ALAT=CHI+((E2/2.0)+(5.0*E2^2.0/24.0)+(E2^3.0/12.0))*SIN(2*CHI) -ALAT=ALAT+((7.0*E2^2.0/48.0)+(29.0*E2^3/240.0))*SIN(4.0*CHI)+(7.0*E2^3.0/120.0)*SIN(6.0*CHI) -AALAT=SGN*ALAT -ALONG=ATAN(SGN*X,-SGN*Y) -AALONG=SGN*ALONG - - ALAT = AALAT * CDR - ALONG = AALONG/CDR -45 - -E999: RETURN -END - - - - diff --git a/model/aux/idl_twist/visu.pro b/model/aux/idl_twist/visu.pro deleted file mode 100755 index d9dab2325..000000000 --- a/model/aux/idl_twist/visu.pro +++ /dev/null @@ -1,14 +0,0 @@ -.compile initmain.pro -.compile rt_visumain.pro -.compile read_timeseries.pro -.compile gridbuild.pro -.compile bathytool.pro -.compile editspecials.pro -.compile maketransect.pro -.compile raytracer.pro -.compile parametros.pro -.compile palette.pro -.compile xloadpalette.pro -.compile mapping.pro -CLOSE,/ALL -rt_visumain diff --git a/model/aux/idl_twist/xloadpalette.pro b/model/aux/idl_twist/xloadpalette.pro deleted file mode 100755 index 6ae89a04b..000000000 --- a/model/aux/idl_twist/xloadpalette.pro +++ /dev/null @@ -1,628 +0,0 @@ -; $Id: xloadct.pro,v 1.25 1998/08/20 15:04:17 alan Exp $ -; -; Copyright (c) 1991-1998, Research Systems, Inc. All rights reserved. -; Unauthorized reproduction prohibited. - -PRO XLCT_PSAVE ;Save/Restore our plotting state. -; Swaps our state with the current state each time its called. - -COMMON xloadct_com, r0, g0, b0, tfun, state, filename, cps, psave, pnt, $ - top, bot, silent, chop, lock, g_lbl, vbot, vtop, g_slider, $ - gamma, color, use_values, ncolors, cbot, siz, w_height, show_win, $ - updt_callback, updt_cb_data - -tmp = { xlct_psave, win: !d.window, x: !x.s, y: !y.s , xtype: !x.type, $ - ytype: !y.type, clip: !p.clip } - -wset, psave.win -!x.type = psave.xtype -!y.type = psave.ytype -!x.s = psave.x -!y.s = psave.y -!p.clip = psave.clip -psave = tmp -end - -pro xlct_alert_caller -COMMON xloadct_com, r0, g0, b0, tfun, state, filename, cps, psave, pnt, $ - top, bot, silent, chop, lock, g_lbl, vbot, vtop, g_slider, $ - gamma, color, use_values, ncolors, cbot, siz, w_height, show_win, $ - updt_callback, p_updt_cb_data - - ErrorStatus = 0 - CATCH, ErrorStatus - if (ErrorStatus NE 0) then begin - CATCH, /CANCEL - v = DIALOG_MESSAGE(['Unexpected error in XLOADCT:', $ - '!ERR_STRING = ' + !ERR_STRING], $ - /ERROR) - return - endif - if (STRLEN(updt_callback) gt 0) then begin - if (PTR_VALID(p_updt_cb_data)) then begin - CALL_PROCEDURE, updt_callback, DATA=*(p_updt_cb_data) - endif else begin - CALL_PROCEDURE, updt_callback - endelse - endif -end - - -; Redraw the ramp image. -PRO xlct_show -COMMON xloadct_com, r0, g0, b0, tfun, state, filename, cps, psave, pnt, $ - top, bot, silent, chop, lock, g_lbl, vbot, vtop, g_slider, $ - gamma, color, use_values, ncolors, cbot, siz, w_height, show_win, $ - updt_callback, p_updt_cb_data - - cur_win = !D.WINDOW - WSET, show_win - TV, BYTE((FLOAT(ncolors)*FINDGEN(siz)/FLOAT(siz-1)) # $ - REPLICATE(1, w_height)) + BYTE(cbot) - - WSET, cur_win - - ; Let the caller of XLOADCT know that the color table was modified - xlct_alert_caller -END - -PRO xlct_draw_cps, i, c -COMMON colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr -COMMON xloadct_com, r0, g0, b0, tfun, state, filename, cps, psave, pnt, $ - top, bot, silent, chop, lock, g_lbl, vbot, vtop, g_slider, $ - gamma, color, use_values, ncolors, cbot - -tc = color -if n_elements(c) gt 0 then begin - tc = c - if c ne 0 then color = c - endif - -if i[0] eq -1 then j = indgen(n_elements(cps)) else j = i - -plots, cps[j], tfun[j], /noclip, color = tc -plots, cps[j], tfun[j], /noclip, psym=6, color = tc -end - -PRO xlct_transfer, UPDATE=update -COMMON colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr -COMMON xloadct_com, r0, g0, b0, tfun, state, filename, cps, psave, pnt, $ - top, bot, silent, chop, lock, g_lbl, vbot, vtop, g_slider, $ - gamma, color, use_values, ncolors, cbot - -l = lonarr(ncolors) ;Subscripts -m = n_elements(cps) -for i=0, m-2 do begin - n = cps[i+1]-cps[i] ;Interval - b = (tfun[i+1]-tfun[i])/float(n) - l[cps[i]] = findgen(n) * b + (tfun[i] + cbot) - endfor -l[ncolors-1] = tfun[m-1] ;Last point -if use_values then begin - r_curr[cbot] = (r = l[r_orig]) - g_curr[cbot] = (g = l[g_orig]) - b_curr[cbot] = (b = l[b_orig]) -endif else begin - r_curr[cbot] = (r = r_orig[l]) - g_curr[cbot] = (g = g_orig[l]) - b_curr[cbot] = (b = b_orig[l]) -endelse - -tvlct, r,g,b, cbot -if (keyword_set( update )) then $ - xlct_show -end - -PRO xloadpalette_event, event -COMMON colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr -COMMON xloadct_com, r0, g0, b0, tfun, state, filename, cps, psave, pnt, $ - top, bot, silent, chop, lock, g_lbl, vbot, vtop, g_slider, $ - gamma, color, use_values, ncolors, cbot, siz, w_height, show_win, $ - updt_callback, p_updt_cb_data - - -IF event.id eq state.draw THEN BEGIN ;** PROCESS DRAWABLE EVENTS ** - if event.press ne 0 then begin ;Pressed button? - dmin = 1.0e8 ;Find closest control pnt - xlct_psave ;Remove old - p = convert_coord(event.x, event.y, /TO_DATA, /DEVICE) - xlct_psave ;Restore old - x = fix(p[0]) - y = fix(p[1]) - for i=0, n_elements(cps)-1 do begin - d = (p[0]-cps[i])^2 + (p[1]-tfun[i])^2 ; dist ^ 2 - if d lt dmin then begin - dmin = d - pnt = i - endif - endfor - return - endif - if event.release ne 0 then begin ;Released button? - pnt = -1 - xlct_transfer, /update - return - endif - if pnt lt 0 then return ;Don't care here... - - xlct_psave ;Remove old - ; For visuals with static colormaps, erase plot before drawing new - if ((COLORMAP_APPLICABLE(redrawRequired) GT 0) and $ - (redrawRequired GT 0)) then begin - ERASE, color=0 - endif - p = convert_coord(event.x, event.y, /TO_DATA, /DEVICE) ;Coord of mouse - n = ncolors -1 ;Into range.... - m = n_elements(cps)-1 - x = fix(p[0]) > 0 < n - if pnt eq 0 then x = 0 else $ ;1st & last are fixed - if pnt eq m then x = n else $ - x = x > (cps[pnt-1] + 1) < (cps[pnt+1]-1) ;Others must be between - - if pnt eq 0 then xlct_draw_cps, [0, 1],0 $ ;Erase old segment - else if pnt eq m then xlct_draw_cps, [m-1, m],0 $ - else xlct_draw_cps, [pnt-1, pnt, pnt+1],0 - cps[pnt] = x - tfun[pnt] = fix(p[1]) > 0 < n - xlct_transfer - - b = r_curr * .3 + g_curr * .586 + b_curr * .114 ;Ntsc colors - c = max(abs(b-b[cbot]), j) ; *** J is color index furthest from 0 - - if pnt eq 0 then xlct_draw_cps, [0, 1], j $ - else if pnt eq m then xlct_draw_cps, [m-1, m], j $ - else xlct_draw_cps, [pnt-1, pnt, pnt+1], j - - xlct_psave ;Remove old - return - ENDIF - -WIDGET_CONTROL, event.id, GET_UVALUE = eventval - -abstop = NCOLORS -1 - -if event.id eq state.name_list then begin - ;PRINT,event.index,silent,filename,ncolors,cbot - LOADPALETTE, silent=silent, event.index, FILE=filename, NCOLORS=ncolors, $ - BOTTOM=cbot - PRINT,'DONE' - goto, set_gamma - ENDIF - -CASE eventval OF - "TOP": BEGIN - WIDGET_CONTROL, top, GET_VALUE = vtop - if lock ne 0 then begin - vbot = (vtop - lock) > 0 < 100 - widget_control, bot, SET_VALUE=vbot - endif - GOTO, set_gamma - END - - "BOTTOM": BEGIN - WIDGET_CONTROL, bot, GET_value = vbot - if lock ne 0 then begin - vtop = (vbot + lock) > 0 < 100 - widget_control, top, SET_VALUE=vtop - ENDIF - set_gamma: - if use_values then nc = 256 else nc = ncolors - s = (nc-1)/100. - x0 = vbot * s - x1 = vtop * s - if x0 ne x1 then s = (nc-1.0)/(x1 - x0) else s = 1.0 - int = -s * x0 - if gamma eq 1.0 then s = round(findgen(nc) * s + int > 0.0) $ - else s = ((findgen(nc) * (s/nc) + (int/nc) > 0.0) ^ gamma) * nc - if chop ne 0 then begin - too_high = where(s ge nc, n) - if n gt 0 then s[too_high] = 0L - endif - if use_values then begin - s = s < 255L - l = lindgen(ncolors) + cbot - r_curr[cbot] = (r = s[r_orig[l]]) - g_curr[cbot] = (g = s[g_orig[l]]) - b_curr[cbot] = (b = s[b_orig[l]]) - endif else begin - s = s + cbot - r_curr[cbot] = (r = r_orig[s]) - g_curr[cbot] = (g = g_orig[s]) - b_curr[cbot] = (b = b_orig[s]) - endelse - tvlct, r,g,b, cbot - xlct_show - ENDCASE - - "GAMMA": BEGIN - WIDGET_CONTROL, g_slider, GET_VALUE = gamma - gamma = 10^((gamma/50.) - 1) - WIDGET_CONTROL, g_lbl, SET_VALUE = $ - STRING(gamma, format='(f6.3)') - goto, set_gamma - ENDCASE - - "GANG" : IF event.value eq 0 then lock = 0 else lock = vtop - vbot - - "CHOP" : BEGIN - chop = event.value - goto, set_gamma ;And redraw - ENDCASE - - "VALUES": BEGIN - use_values = event.value - ENDCASE - - "HELP" : XDisplayFile, FILEPATH("xloadct.txt", subdir=['help', 'widget']), $ - TITLE = "Xloadct Help", $ - GROUP = event.top, $ - WIDTH = 55, $ - HEIGHT = 16 - - "RESTORE" : BEGIN ;Restore the original tables - r_curr = (r_orig = r0) - g_curr = (g_orig = g0) - b_curr = (b_orig = b0) - tvlct, r_curr, g_curr, b_curr - xlct_show - ENDCASE - - "OVERWRITE" : BEGIN ;overwrite original tables - r0 = (r_orig = r_curr) - g0 = (g_orig = g_curr) - b0 = (b_orig = b_curr) - reset_all: - WIDGET_CONTROL, top, SET_VALUE = 100 - WIDGET_CONTROL, bot, SET_VALUE = 0 - WIDGET_CONTROL, g_slider, SET_VALUE = 50 - vbot = 0 - vtop = 100 - gamma = 1.0 - GOTO, set_gamma - ENDCASE - - "REVERSE" : BEGIN ;Reverse the table - l = lindgen(ncolors) + cbot - r_orig[cbot] = reverse(r_orig[l]) - g_orig[cbot] = reverse(g_orig[l]) - b_orig[cbot] = reverse(b_orig[l]) - goto, set_gamma ;And redraw - ENDCASE - - "DONE": BEGIN - WIDGET_CONTROL, event.top, /DESTROY - r0 = 0 & g0 = 0 & b0 = 0 ;Free common - if PTR_VALID(p_updt_cb_data) then PTR_FREE, p_updt_cb_data - ENDCASE - "SAVE": BEGIN - file=DIALOG_PICKFILE(/READ, FILTER = '*.ct') - IF file NE '' THEN BEGIN - get_lun, lun2 - OPENW,lun2,file - PRINTF,lun2,CONGRID(r_curr,256),CONGRID(g_curr,256),CONGRID(b_curr,256) - message,'Writing table ' + file,/INFO - CLOSE,lun2 - ENDIF - ENDCASE - - "NEWBASE": BEGIN - mode = event.value - b = ([0, 0, 1])[mode] ;Top base to map: 0 or 1. - for i=0,1 do WIDGET_CONTROL, state.bases[i], MAP=i eq b - if b eq 0 then begin ;table or option mode? - b = ([2,3,0])[mode] ;bottom base to map (mode eq 0 or 1) - for i=2,3 do WIDGET_CONTROL, state.bases[i], MAP=i eq b - endif - if mode eq 2 then begin - reset_all = 1 - xlct_psave ;Save old state - plot, [0, ncolors-1], [0, ncolors-1], xstyle=3, $ - ystyle=3, xmargin = [1,1], ymargin=[1,1], ticklen = -0.03, $ - /NODATA, $ - xtickname = replicate(' ', 10), ytickname = replicate(' ', 10) - goto, interp_cps - endif - - ENDCASE - - "TFUNR": BEGIN - reset_tfun: - xlct_psave - xlct_draw_cps, -1, 0 ;Erase all - tfun = cps ;Linear ramp - goto, interp_cps - ENDCASE - - "REMCP": BEGIN - n = n_elements(cps) - if n gt 2 then begin - xlct_psave - xlct_draw_cps, -1, 0 - igap = 0 - for i=0, n-2 do $ - if (cps[i+1] - cps[i]) lt (cps[igap+1]-cps[igap]) then $ - igap = i - keep = where(indgen(n) ne (igap > 1)) - cps = cps[keep] - tfun = tfun[keep] - goto, interp_cps - ENDIF - ENDCASE - "ADDCP": BEGIN - xlct_psave - xlct_draw_cps, -1, 0 - igap = 0 ;Find largest gap - for i=0, n_elements(cps)-2 do $ - if (cps[i+1] - cps[i]) gt (cps[igap+1]-cps[igap]) then $ - igap = i - cps = [ cps[0:igap], (cps[igap]+cps[igap+1])/2, cps[igap+1:*]] - tfun = [ tfun[0:igap], (tfun[igap]+tfun[igap+1])/2, tfun[igap+1:*]] - interp_cps: xlct_draw_cps, -1 ;Redraw new - xlct_transfer, /update - xlct_psave ;Restore old points - if n_elements(reset_all) then goto, reset_all - ENDCASE -ENDCASE - -END - - -;+ -; NAME: -; XLOADPALETTE -; PURPOSE: -; A graphical interface to the LOADCT user library procedure. -; XLOADCT displays the current color map and provides -; an array of buttons, one per availible predefined color -; table. Using the mouse to press these buttons causes -; the corresponding color map to be loaded. -; CATEGORY: -; Widgets -; CALLING SEQUENCE: -; XLOADCT -; INPUTS: -; None. -; KEYWORDS: -; FILE: If this keyword is set, the file by the given name is used -; instead of the file colors1.tbl in the IDL directory. This -; allows multiple IDL users to have their own color table file. -; GROUP = The widget ID of the widget that calls XLoadct. When -; this ID is specified, a death of the caller results in a -; death of XLoadct -; NCOLORS = number of colors to use. Use color indices from BOTTOM -; to the smaller of !D.TABLE_SIZE-1 and NCOLORS-1. -; Default = !D.TABLE_SIZE = all available colors. -; BOTTOM = first color index to use. Use color indices from BOTTOM to -; BOTTOM+NCOLORS-1. Default = 0. -; SILENT - Normally, no informational message is printed when -; a color map is loaded. If this keyword is present and -; zero, this message is printed. -; USE_CURRENT: If set, use the current color tables, regardless of -; the contents of the COMMON block COLORS. -; MODAL: If set, then XLOADCT runs in "modal" mode, meaning that -; all other widgets are blocked until the user quits XLOADCT. -; A group leader must be specified (via the GROUP keyword) -; for the MODAL keyword to have any effect. The default -; is to not run in modal mode. -; BLOCK: Set this keyword to have XMANAGER block when this -; application is registered. By default the Xmanager -; keyword NO_BLOCK is set to 1 to provide access to the -; command line if active command line processing is available. -; Note that setting BLOCK for this application will cause -; all widget applications to block, not only this -; application. For more information see the NO_BLOCK keyword -; to XMANAGER. -; UPDATECALLBACK: Set this keyword to a string containing the name of -; a user-supplied procedure that will be called when the color -; table is updated by XLOADCT. The procedure may optionally -; accept a keyword called DATA, which will be automatically -; set to the value specified by the optional UPDATECBDATA -; keyword. -; UPDATECBDATA: Set this keyword to a value of any type. It will be -; passed via the DATA keyword to the user-supplied procedure -; specified via the UPDATECALLBACK keyword, if any. If the -; UPDATECBDATA keyword is not set the value accepted by the -; DATA keyword to the procedure specified by UPDATECALLBACK -; will be undefined. -; -; OUTPUTS: -; None. -; COMMON BLOCKS: -; None. -; SIDE EFFECTS: -; One of the predefined color maps may be loaded. -; RESTRICTIONS: -; This routine uses the LOADCT user library procedure to -; do the actual work. -; MODIFICATION HISTORY: -; 24, August, 1990, Written by AB, RSI. -; March 1, 1992 Mark Rivers added Reverse Table to options menu. -; 7/92, DMS, Added new color tables (allows more than 16). -; 9/92, ACY, Add FILE keyword. -; 10/1/96, AB, Removed the PICK_ONE keyword. It was broken for 4 years -; without anyone noticing, and the idea doesn't really fit -; XLOADCT anymore. -; 1/10/97, DJC - Fixed color bar display bug, and added "MODAL" keyword. -; 1/13/96, AB, Improved the saving and restoring of the current -; graphics window to prevent other applications from drawing -; on this applications windows. -; 1/17/97, DJC - Moved group_leader keyword from "XManager" to -; "WIDGET_BASE". Added check to ignore "MODAL" keyword -; if a group leader is not specified. -; 8/20/98, ACY - Added UPDATECALLBACK and UPDATECBDATA keywords. -;- - -PRO XLoadpalette, SILENT=silent_f, GROUP=group, FILE=file, $ - USE_CURRENT=use_current, NCOLORS = nc, BOTTOM=bottom, $ - MODAL=modal, BLOCK=block, UPDATECALLBACK=updt_cb_name, $ - UPDATECBDATA=updt_cb_data - -COMMON colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr -COMMON xloadct_com, r0, g0, b0, tfun, state, filename, cps, psave, pnt, $ - top, bot, silent, chop, lock, g_lbl, vbot, vtop, g_slider, $ - gamma, color, use_values, ncolors, cbot, siz, w_height, show_win, $ - updt_callback, p_updt_cb_data - - -IF(XRegistered("xloadct") NE 0) THEN return - -IF N_ELEMENTS(block) EQ 0 THEN block=0 -IF N_ELEMENTS(updt_cb_name) EQ 0 THEN updt_callback="" $ - ELSE updt_callback=updt_cb_name -IF N_ELEMENTS(updt_cb_data) GT 0 THEN p_updt_cb_data=PTR_NEW(updt_cb_data) $ - ELSE p_updt_cb_data=PTR_NEW() - -values_button = lonarr(2) - -IF KEYWORD_SET(SILENT_f) THEN silent = SILENT_F ELSE silent = 1 - -IF N_ELEMENTS(file) GT 0 THEN filename = file - -siz = 256 ;Basic width of tool -names = 0 -LOADPALETTE, GET_NAMES = names, FILE = file ;Get table names -w_height = 50 ;Height of ramp -cur_win = !D.WINDOW -lock = 0 -chop = 0 -vbot = 0 -vtop = 100 -gamma = 1.0 -use_values=0 - - -; Bases: -; 0 = slider base (stretch bottom, stretch top, gamma) -; 1 = transfer function drawable + buttons -; 2 = color table list -; 3 = options base (sliders. top, stretch) - -state = { bases: lonarr(4), draw: 0L, name_list: 0L } - -; DJC - Added modal keyword. -; Moved "group_leader" keyword from XMANAGER to WIDGET_BASE. -; Ignore modal keyword if a group leader is not supplied. -if (N_ELEMENTS(group) GT 0L) then $ - base = WIDGET_BASE(TITLE="XLoadct", /COLUMN, GROUP_LEADER=group, $ - MODAL=KEYWORD_SET(modal)) $ -else $ - base = WIDGET_BASE(TITLE="XLoadpalette", /COLUMN) - - -; Setting the managed attribute indicates our intention to put this app -; under the control of XMANAGER, and prevents our draw widgets from -; becoming candidates for becoming the default window on WSET, -1. XMANAGER -; sets this, but doing it here prevents our own WSETs at startup from -; having that problem. -WIDGET_CONTROL, /MANAGED, base - - -show = WIDGET_DRAW(base, YSIZE=w_height, XSIZE=siz, /FRAME, RETAIN = 2) -junk = WIDGET_BASE(base, /ROW) -save = WIDGET_BUTTON(junk, VALUE=' Save ', UVALUE = "SAVE") -done = WIDGET_BUTTON(junk, VALUE=' Done ', UVALUE = "DONE") -junk1 = WIDGET_BUTTON(junk, VALUE=' Help ', UVALUE = "HELP") - -junk = CW_BGROUP(base, /ROW, /EXCLUSIVE, /NO_REL, $ - ['Tables', 'Options', 'Function'], $ - UVALUE='NEWBASE', SET_VALUE=0) - -junk = widget_base(base) -for i=0,1 do state.bases[i] = WIDGET_BASE(junk, /COLUMN) - -sbase=WIDGET_BASE(state.bases[0], /COLUMN) -bot = WIDGET_SLIDER(sbase, TITLE = "Stretch Bottom", MINIMUM = 0, $ - MAXIMUM = 100, VALUE = 0, /DRAG, UVALUE = "BOTTOM", xsize=siz) -top = WIDGET_SLIDER(sbase, TITLE = "Stretch Top", MINIMUM = 0, $ - MAXIMUM = 100, VALUE = 100, /DRAG, UVALUE = "TOP", xsize=siz) -g_lbl = WIDGET_LABEL(sbase, VALUE = STRING(1.0)) -g_slider = WIDGET_slider(sbase, TITLE = "Gamma Correction", $ - MINIMUM = 0, MAXIMUM = 100, VALUE = 50, UVALUE = "GAMMA", $ - /SUPPRESS_VALUE, /DRAG, xsize=siz) - -junk = WIDGET_BASE(sbase) -for i=2,3 do state.bases[i] = WIDGET_BASE(junk, /COLUMN) -DEVICE, GET_SCREEN = junk -if junk[1] le 768 then junk = 8 else junk = 16 -state.name_list = WIDGET_LIST(state.bases[2], VALUE = names, ysize = junk) - - -; Drawable for transfer function - -junk = WIDGET_BASE(state.bases[1], /COLUMN, /FRAME) -junk1 = WIDGET_BUTTON(junk, VALUE = 'Reset Transfer Function', $ - UVALUE='TFUNR') -junk1 = WIDGET_BUTTON(junk, VALUE='Add Control Point', UVALUE='ADDCP') -junk1 = WIDGET_BUTTON(junk, VALUE='Remove Control Point', UVALUE='REMCP') - -state.draw = WIDGET_DRAW(state.bases[1], xsize = siz, ysize = siz, $ - /BUTTON_EVENTS, /MOTION_EVENTS) - - - opt_id = state.bases[3] - junk = CW_BGROUP(opt_id, /ROW, LABEL_LEFT='Sliders:', /EXCLUSIVE, /NO_REL, $ - ['Independent', 'Gang'], UVALUE='GANG', SET_VALUE=lock) - junk = CW_BGROUP(opt_id, /ROW, LABEL_LEFT = 'Top:', /EXCLUSIVE, /NO_REL, $ - ['Clip', 'Chop'], SET_VALUE=chop, UVALUE='CHOP') - junk = CW_BGROUP(opt_id, /ROW, LABEL_LEFT='Stretch:', /EXCLUSIVE, /NO_REL, $ - ['Indices', 'Intensity'], UVALUE='VALUES', $ - SET_VALUE=use_values) - junk = WIDGET_BUTTON(opt_id, VALUE='Reverse Table', $ - UVALUE="REVERSE", /NO_REL) - junk = WIDGET_BUTTON(opt_id, VALUE='REPLACE Original Table', $ - UVALUE = "OVERWRITE", /NO_REL) - junk = WIDGET_BUTTON(opt_id, VALUE='RESTORE Original Table', $ - UVALUE="RESTORE", /NO_REL) - -WIDGET_CONTROL, state.bases[1], MAP=0 ;Tfun is not visible -WIDGET_CONTROL, state.bases[3], MAP=0 ;options are not visible - -WIDGET_CONTROL, base, /REALIZE -WIDGET_CONTROL, state.draw, GET_VALUE=tmp - -if n_elements(bottom) gt 0 then cbot = bottom else cbot = 0 -ncolors = !d.table_size - cbot -if n_elements(nc) gt 0 then ncolors = ncolors < nc -if ncolors le 0 then message,'Number of colors is 0 or negative' - -psave = { xlct_psave, win: !d.window, x: !x.s, y: !y.s , xtype: !x.type, $ - ytype: !y.type, clip: !p.clip } -;Our initial state -wset, tmp ;Initial graph -xlct_psave ;Save original scaling & window -plot, [0, ncolors-1], [0, ncolors-1], xstyle=3, ystyle=3, $ - xmargin = [1,1], ymargin=[1,1], ticklen = -0.03, /NODATA -xlct_psave ;Restore original scaling & window - - ;If no common, use current colors -IF KEYWORD_SET(use_current) or N_ELEMENTS(r_orig) LE 0 THEN BEGIN - TVLCT, r_orig, g_orig, b_orig, /GET - r_curr = r_orig - b_curr = b_orig - g_curr = g_orig - ENDIF - -r0 = r_curr ;Save original colors -g0 = g_curr -b0 = b_curr -color = ncolors + cbot -1 -cps = [0, ncolors-1] -tfun = cps -pnt = -1 - -WIDGET_CONTROL, show, GET_VALUE=show_win -WSET, show_win - -; DJC - fixed color bar display bug. - -;TVSCL, BYTSCL(INDGEN(siz) # REPLICATE(1, w_height), top = ncolors-1) -TV, BYTE((FLOAT(ncolors)*FINDGEN(siz)/FLOAT(siz-1)) # $ - REPLICATE(1, w_height)) + BYTE(cbot) - -WSET, cur_win - -; DJC - moved GROUP_LEADER keyword to WIDGET_BASE. -XManager, "xloadpalette", base, NO_BLOCK=(NOT(FLOAT(block))), $ - MODAL=KEYWORD_SET(modal) - -END diff --git a/model/aux/make_multi_nco_cray b/model/aux/make_multi_nco_cray deleted file mode 100755 index c8745a00a..000000000 --- a/model/aux/make_multi_nco_cray +++ /dev/null @@ -1,304 +0,0 @@ -#!/bin/bash - -# Create ww3_ codes in NCO format for use at NCEP Cray - -# Run script from tree level above model directory - -# Set version number (Manually, should somewhat resemble trunk version) -WW3VER="6.02" - -# Check out latest trunk -if [ -d model ] -then -# Update model - cd model - svn update - cd .. -else - svn co https://svnemc.ncep.noaa.gov/projects/ww3/branches/ncep_opcode/model ./model -fi - -# Set WWATCH package and work directories -SAVE=`pwd` -export WWATCH3_DIR=${SAVE}/model -export WWATCH3_TMP=/gpfs/hps/stmp/emc.wavepa/make_multi/work # Scratch directory -export WWATCH3_BUILD=${SAVE}/ww3_code.v${WW3VER} - -# Create parameter indicating source-term and other code options (eg nc etc) -options=st4nc - -# FORTRAN source code extension -fextf='F90' - -echo ' ' -echo " Creating new code on ${WWATCH3_BUILD}" - -mkdir -p $WWATCH3_BUILD -mkdir -p $WWATCH3_TMP - -cd $WWATCH3_BUILD - -# Load system-specific modules -chipset=sandybridge - -source $MODULESHOME/etc/modules.sh - module load prod_util prod_envir - module load PrgEnv-intel - module unload craype-haswell - module load craype-${chipset} - - module load HDF5-serial-intel-${chipset} - module load NetCDF-intel-${chipset} - module load iobuf - -# used for multiwavegrib2 - module load jasper-gnu-${chipset} - module load png-intel-${chipset} - module load zlib-intel-${chipset} - module load g2-intel - -# used for multiwavegrib1 and grib2 - module load w3nco-intel - module load bacio-intel/2.0.2 - -# Create new env file for this build -cat > wwatch3.env << EOF -WWATCH3_LPR Printer -WWATCH3_F90 ifort -WWATCH3_CC icc -WWATCH3_DIR ${WWATCH3_DIR} -WWATCH3_TMP ${WWATCH3_TMP} -WWATCH3_SOURCE no -WWATCH3_LIST no -EOF - -export WWATCH3_ENV=${WWATCH3_BUILD}/bin/wwatch3.env - -comps=ftn -compm=ftn -progs='ww3_grid ww3_bound ww3_prep ww3_prnc ww3_multi ww3_sbs1 ww3_outf ww3_ounf ww3_ounp ww3_outp gx_outf gx_outp ww3_grib ww3_gint ww3_systrk' - -# SWITCH file -# Source term and propagation scheme choices for switch file -GEN="F90 NCO LRB4" -GRB="NCEP2" -SCRIP="SCRIP SCRIPNC" -NC="NC4" -PROP="PR3 UQ" -#STERM="ST4 STAB0 FLX0 LN1 NL3 BT1 DB1 IC0 IS0 REF0 MLIM TR0 BS0 XX0"; -STERM="ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC0 IS0 REF0 MLIM TR0 BS0 XX0"; -WNDCUR="WNX1 WNT1 CRX1 CRT1" -OFLAG="O0 O1 O2 O4 O5 O6 O7 O14 O15" -MOV="MGP MGW MGG" - -# Define alternate switch types -# Shared memory/serial -PROC='SHRD' -GRB='NCEP2' -SBS= -SWITCH_SHRD="${GEN} ${GRB} ${PROC} ${SBS} ${SCRIP} ${NC} ${PROP} ${STERM} ${WNDCUR} ${OFLAG} ${MOV}" - -# MPI -PROC='DIST MPI' -GRB=NOGRB -SBS= -SWITCH_MPI="${GEN} ${GRB} ${PROC} ${SBS} ${SCRIP} ${NC} ${PROP} ${STERM} ${WNDCUR} ${OFLAG} ${MOV}" - -# Side-by-side multi -PROC='DIST MPI' -GRB=NOGRB -SBS='SBS' -SWITCH_SBS="${GEN} ${GRB} ${PROC} ${SBS} ${SCRIP} ${NC} ${PROP} ${STERM} ${WNDCUR} ${OFLAG} ${MOV}" - -# NetCDF libraries -NCINC='-I${NETCDF}/include' -LIBFCSTNC='-L${NETCDF}/lib -lnetcdff -lnetcdf -L${HDF5}/lib -lhdf5_hl -lhdf5 -lrt -lm -lz' - -# Define compilation options -OPTFL="-O3 -convert big_endian -assume byterecl -prec-div -prec-sqrt -ip -ftz" - -# Loop through programs -for prog in $progs -do - case $prog in - ww3_grid ) name=multiwavegrid ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL} ; - ldflags= ; - libs= ;; - ww3_bound ) name=multiwavebound ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL} ; - ldflags= ; - libs= ;; - ww3_prep ) name=multiwaveprep ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL} ; - ldflags= ; - libs= ;; - ww3_prnc ) name=multiwaveprnc ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL}' -I${NETCDF}/include' ; - ldflags= ; - libs='-L${NETCDF}/lib -lnetcdff -lnetcdf -L${HDF5}/lib -lhdf5_hl -lhdf5 -lrt -lm -lz' ;; - ww3_shel ) name=multiwaveshel ; switch="$SWITCH_MPI" ; comp=$compm ; - fflags=${OPTFL}' '${NCINC} ; - ldflags= ; - libs=${LIBFCSTNC} ;; - ww3_multi ) name=multiwavefcst ; switch="$SWITCH_MPI" ; comp=$compm ; - fflags=${OPTFL}' '${NCINC} ; - ldflags= ; - libs=${LIBFCSTNC} ;; - ww3_sbs1 ) name=multiwavefcst_sbs ; switch="$SWITCH_SBS" ; comp=$compm ; - fflags=${OPTFL}' '${NCINC} ; - ldflags= ; - libs=${LIBFCSTNC} ;; - ww3_gint) name=multiwavegrid_interp ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL} ; - ldflags= ; - libs= ;; - ww3_outp ) name=multiwavespec ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL} ; - ldflags= ; - libs= ;; - ww3_outf ) name=multiwaveflds ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL} ; - ldflags= ; - libs= ;; - ww3_ounf ) name=multiwavefldn ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL}' -I${NETCDF}/include' ; - ldflags= ; - libs='-L${NETCDF}/lib -lnetcdff -lnetcdf -L${HDF5}/lib -lhdf5_hl -lhdf5 -lrt -lm -lz' ;; - ww3_ounp ) name=multiwavespnc ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL}' -I${NETCDF}/include' ; - ldflags= ; - libs='-L${NETCDF}/lib -lnetcdff -lnetcdf -L${HDF5}/lib -lhdf5_hl -lhdf5 -lrt -lm -lz' ;; - ww3_grib ) name=multiwavegrib2 ; switch="$SWITCH_SHRD" ; comp=$comps ; - libs='${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}' ; - fflags=${OPTFL} ; - ldflags= ;; - ww3_systrk) name=wavesystrk ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL} ; - ldflags= ; - libs='-L${NETCDF}/lib -lnetcdff -lnetcdf -L${HDF5}/lib -lhdf5_hl -lhdf5 -lrt -lm -lz' ;; - gx_outf ) name=multiwavegrads_fields ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL} ; - ldflags= ; - libs= ;; - gx_outp ) name=multiwavegrads_points ; switch="$SWITCH_SHRD" ; comp=$comps ; - fflags=${OPTFL} ; - ldflags= ; - libs= ;; - * ) echo "do not recognize $prog." ; exit ;; - esac - -# Set up flags for w3_source -export FC=${comp} -export FFLAGS=${fflags} -export LDFLAGS=${ldflags} -export LIBS=${libs} - -rm -f ${WWATCH3_DIR}/bin/switch - -echo $switch > ${WWATCH3_DIR}/bin/switch - -# Run w3_source -echo ' ' -echo " Running w3_source for $prog " - -${WWATCH3_DIR}/bin/w3_setup ${WWATCH3_DIR} -q -c Intel - -${WWATCH3_DIR}/bin/w3_source $prog > source_${prog}.out 2>&1 - -# Move to build directory -rm -rf ${WWATCH3_BUILD}/${options}/sorc/${prog}.fd -mkdir -p ${WWATCH3_BUILD}/${options}/exec -mkdir -p ${WWATCH3_BUILD}/${options}/sorc/${prog}.fd -mv -f ${WWATCH3_DIR}/work/$prog.tar.gz ${WWATCH3_BUILD}/${options}/sorc/${prog}.fd -tar zxvf ${WWATCH3_BUILD}/${options}/sorc/${prog}.fd/$prog.tar.gz -C ${WWATCH3_BUILD}/${options}/sorc/${prog}.fd > /dev/null 2>&1 -rm -f ${WWATCH3_BUILD}/${options}/sorc/${prog}.fd/$prog.tar.gz - - -cd ${WWATCH3_BUILD}/${options}/sorc/${prog}.fd/ - - echo " Changing ${prog} and input file to NCO main program name " - echo ' ' - - case $prog in - ww3_grid ) sed -e 's/W3GRID/WAVEGRID/g' \ - -e 's/ww3_grid/${name}/g' $prog.${fextf} > $name.${fextf} - sed -e 's/NOSW = 5/NOSW = 2/g' $name.${fextf} > ${name}.dummy - mv ${name}.dummy ${name}.${fextf} - rm -f $prog.${fextf} ;; - ww3_bound ) sed -e 's/W3BOUND/WAVEBOUND/g' \ - -e 's/ww3_bound/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_prep ) sed -e 's/W3PREP/WAVEPREP/g' \ - -e 's/ww3_prep/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_prnc ) sed -e 's/W3PRNC/WAVEPRNC/g' \ - -e 's/ww3_prnc/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_shel ) sed -e 's/W3SHEL/WAVEFCST/g' \ - -e 's/ww3_shel/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_multi ) sed -e 's/W3SHEL/WAVEFCST/g' \ - -e 's/ww3_multi/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_sbs1 ) sed -e 's/W3SHEL/WAVEFCST/g' \ - -e 's/ww3_multi/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_gint ) sed -e 's/W3GRID_INT/WAVEGRID_INT/g' \ - -e 's/ww3_gint/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_grib ) sed -e 's/W3GRIB/WAVEGRIB2/g' \ - -e 's/ww3_grib/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_outp ) sed -e 's/W3OUTP/WAVESPEC/g' \ - -e 's/ww3_outp/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_outf ) sed -e 's/W3OUTF/WAVEFLDS/g' \ - -e 's/ww3_outf/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_ounp ) sed -e 's/W3OUNF/WAVESPNC/g' \ - -e 's/ww3_ounp/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_ounf ) sed -e 's/W3OUNF/WAVEFLDS/g' \ - -e 's/ww3_ounf/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - ww3_systrk ) sed -e 's/W3SYSTRK/WAVESYSTRK/g' -e 's/WW3_SYSTRK/WAVESYSTRK/g'\ - -e 's/ww3_systrk/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - gx_outf ) sed -e 's/GXOUTF/WAVEGXFL/g' \ - -e 's/gx_outf/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - gx_outp ) sed -e 's/GXOUTP/WAVEGXSP/g' \ - -e 's/gx_outp/${name}/g' $prog.${fextf} > $name.${fextf} - rm -f $prog.${fextf} ;; - * ) if [ "$prog" != "$name" ] - then - mv $prog.${fextf} $name.${fextf} - fi;; - esac - -# Change makefile to reflect NCO main prog name - sed -e "s/$prog/$name/g" makefile > makefile.temp - - mv makefile.temp makefile - rm -rf ${WWATCH3_BUILD}/${options}/sorc/${name}.fd - mv ${WWATCH3_BUILD}/${options}/sorc/${prog}.fd ${WWATCH3_BUILD}/${options}/sorc/${name}.fd - -cd $WWATCH3_BUILD/${options}/sorc/${name}.fd - -make clean -make > $WWATCH3_BUILD/${options}/sorc/${name}.fd/make.${name}.out 2>&1 -mv -f $WWATCH3_BUILD/${options}/sorc/${name}.fd/${name} $WWATCH3_BUILD/${options}/exec -make clean - -# Remove obj and mod files to ensure switch options are enforced -rm -f ${WWATCH3_DIR}/obj*/* -rm -f ${WWATCH3_DIR}/mod*/* - -done - -# Copy make.codes.sh script from aux/scripts -#cp ${SAVE}/aux/scripts/make.codes.sh ${WWATCH3_BUILD}/${options}/sorc/ - -echo ' ' -echo " All done " diff --git a/model/aux/matlab/example_plot_from_netcdf_rect.m b/model/aux/matlab/example_plot_from_netcdf_rect.m deleted file mode 100644 index b919fa929..000000000 --- a/model/aux/matlab/example_plot_from_netcdf_rect.m +++ /dev/null @@ -1,42 +0,0 @@ -% example_plot_rect -% -% example of using read_WWNC_var and plotting some results -% -% Here is how you can obtain the sample data: -% p1='http://tinyurl.com/iowagaftp/HINDCAST' -% p2='2011_ECMWF/hs' -% wget ${p1}/GLOBAL/${p2}/ww3.201102_hs.nc -O ww3.201102_hs-global.nc -% wget ${p1}/ATNE/${p2}/ww3.201102_hs.nc -O ww3.201102_hs-atne.nc -% wget ${p1}/NORGASUG/${p2}/ww3.201102_hs.nc -O ww3.201102_hs-ngug.nc - - -filename='ww3.201102_hs-global.nc'; % This example uses a file with only hs in it -%filename='ww3.201102_hs-atne.nc'; % This example uses a file with only hs in it - -varname='hs'; -[lat,lon,time,mat1,var1,unit1]=read_WWNC_var(filename,varname); - -% Looks for a specific time: here 2011/2/15 at 18:00:00 UTC -tt=find(time >= datenum(2011,2,15,21,0,0)); -it=tt(1); - - -rundate = time(it); -figure(1) -clf -pcolor(lon,lat,double(squeeze(mat1(:,:,it)))') -shading flat; -colormap(jet);colorbar; -caxis([0 10]); -latmin=min(lat); -latmax=max(lat); -coslat=cos(0.5*(latmax+latmin)*pi/180); -set(gca,'DataAspectRatio',[1 coslat 1]); %# data aspect ratio - -title(['H_{m0} (m): ' datestr(rundate,31)]); -xlabel('Longitude (deg)') -ylabel('Latitude (deg)') - -%print(gcf,'-dpng',[filename '_it' num2str(it,'%3.3d') '.png']) - - diff --git a/model/aux/matlab/example_plot_from_netcdf_unst.m b/model/aux/matlab/example_plot_from_netcdf_unst.m deleted file mode 100644 index 64d6eb612..000000000 --- a/model/aux/matlab/example_plot_from_netcdf_unst.m +++ /dev/null @@ -1,47 +0,0 @@ -% example_plot_unst -% -% example of using read_WWNC_var and plotting some results -% This is for model output on a triangular mesh. - -% Here is how you can obtain the sample data: -% p1='http://tinyurl.com/iowagaftp/HINDCAST' -% p2='2011_ECMWF/hs' -% wget ${p1}/GLOBAL/${p2}/ww3.201102_hs.nc -O ww3.201102_hs-global.nc -% wget ${p1}/ATNE/${p2}/ww3.201102_hs.nc -O ww3.201102_hs-atne.nc -% wget ${p1}/NORGASUG/${p2}/ww3.201102_hs.nc -O ww3.201102_hs-ngug.nc - - -% -it=0 -%filename='ANTILLES_FORECAST.nc';it=10; % This example uses a file with - % many variables -filename='ww3.201102_hs-ngug.nc'; % This example uses a file with - % with only hs in it -varname='hs'; -[tri,lat,lon,time,mat1,var1,unit1]=read_WWNC_UG_var(filename,varname); - -if it==0 -% Looks for a specific time: here 2011/2/15 at 18:00:00 UTC -tt=find(time >= datenum(2011,2,15,21,0,0)); -it=tt(1); -end - -rundate = time(it); -figure(2) -%clf -trisurf(tri',lon,lat,mat1(:,it)) -view(0,90);shading interp; -colormap(jet);colorbar; -caxis([0 10]); -latmin=min(lat); -latmax=max(lat); -coslat=cos(0.5*(latmax+latmin)*pi/180); -set(gca,'DataAspectRatio',[1 coslat 1]); %# data aspect ratio - -title(['H_{m0} (m): ' datestr(rundate,31)]); -xlabel('Longitude (deg)') -ylabel('Latitude (deg)') - -%print(gcf,'-dpng',[filename '_it' num2str(it,'%3.3d') '.png']) - - diff --git a/model/aux/matlab/example_plotf_from_netcdf_rect.m b/model/aux/matlab/example_plotf_from_netcdf_rect.m deleted file mode 100644 index 968837976..000000000 --- a/model/aux/matlab/example_plotf_from_netcdf_rect.m +++ /dev/null @@ -1,68 +0,0 @@ -i% example_plotf_from_netcdf_rect -% -% example of using read_WWNCf_var and plotting some results: -% this reads frequency-dependent parameters. In the example here -% we read the energy spectrum E(f). -% -% Here is how you can obtain the sample data: -% Warning this is a VERY BIG file (1.6 Gb). -% Hopefully it will be soon accessible via OpenDAP. -% -% p1='http://tinyurl.com/iowagaftp/HINDCAST' -% p2='2011_ECMWF/ef' -% wget ${p1}/GLOBAL/${p2}/ww3.201102_ef.nc -O ww3.201102_ef.nc - - -% -clear all; -close all; - -% Example for seismic noise sources -%filename='ww3.200803_p2l.nc'; -%date1=datenum(2008,03,20,12,0,0); -%varname='Fp3D'; - -% Example for wave spectra -filename='ww3.201102_ef.nc'; -date1=datenum(2011,02,15,18,0,0); -varname='ef'; - -[lat,lon,freq,time,mat1,var1,unit1,MAPSTA]=read_WWNCf_var(filename,varname,date1); - -rundate = date1; -% -% choice of frequency -% -%jf=10; -jj=find(freq <= 0.05); -df=freq.*(0.5*(1.1-1/1.1)); % Only good if XFR =1.1 in WW3 -nx=length(lon); -ny=length(lat); -matplot=zeros(nx,ny); -for i=1:length(jj) - efmap=double(squeeze(mat1(:,:,jj(1)))); - %min(min(efmap)) - %max(max(efmap)) - matplot=matplot+efmap.*df(jj(i)); - -end -matplot=4.*sqrt(double(matplot)); - -figure(2) -clf -pcolor(lon,lat,matplot') -shading flat; -colormap(jet);colorbar; -latmin=min(lat); -latmax=max(lat); -coslat=cos(0.5*(latmax+latmin)*pi/180); -set(gca,'DataAspectRatio',[1 coslat 1]); %# data aspect ratio - -title(['Hs for T > 20 s (m) on ' datestr(rundate,31) ]); -%title(['F_{p3D}(2f,k~0)/(\rho_w^2 g^2) (m^4/Hz): ' datestr(rundate,31) ', f=' num2str(freq(jf)) 'Hz' ]); -xlabel('Longitude (deg)') -ylabel('Latitude (deg)') - -%print(gcf,'-dpng',[filename '_it' num2str(it,'%3.3d') '.png']) - - diff --git a/model/aux/matlab/example_read_spectrum.m b/model/aux/matlab/example_read_spectrum.m deleted file mode 100755 index 6eb222ee6..000000000 --- a/model/aux/matlab/example_read_spectrum.m +++ /dev/null @@ -1,184 +0,0 @@ -% -% Example of reading and plotting directional spectra from NetCDF files. -% Sample files can be found at : -% ftp://ftp.ifremer.fr/ifremer/cersat/products/gridded/wavewatch3/HINDCAST/GLOBAL/2008_ECMWF/SPECTRA_NC/ -% Note: you may have to wait for the listing to appear (over 9000 files ...) -% -clear all -close all -addpath('~/TOOLS/MATLAB') -filename='ww3.62069_2008_spec.nc' -varname='efth'; -[lat,lon,freq,dir,df,dates,Efth,depth,curr,currdir,unit1]=readWWNC_SPEC(filename,varname); -nth=size(Efth,1); -nk=size(Efth,2); -dth=360/nth; -% -% Reads a color table -% -col=load('doppler_modified_land_2.ct'); -col(:,254)=col(:,253); -col(:,255)=col(:,253); -col(:,256)=col(:,253); -% -% Converting directions from nautical to trigonometric convention x=90-w -% and from 'To' to 'From' convention: y = x + 180 -% and shifts by half bin to have the polygons centered: z = z -dth/2; -% -dirmemo=dir; -dir=(90.-dir)+180-dth/2; -dtor=pi/180; -% -% Selects one of the time steps in the file -% -%I=find (dates >= datenum(2008,3,12) ); -%i=I(1) -i=1000; -Efth1(:,:)=double(Efth(:,:,1,i)'); -% Displays the date onf that step (year month day hour minute second) -datevec(dates(i)) -% - -%------------------------------------------------------------- -% 1. Polar plot display -%------------------------------------------------------------- -% The first direction is repeated at the end in order to make -% a nice plot -dirr=[dir' dir(1)]'; -dir2=repmat(dirr',nk,1); -freq2=repmat(freq,1,nth+1); -Efth2(:,1:nth)=Efth1; -Efth2(:,nth+1)=Efth1(:,1); -x2=cos(dir2.*dtor).*freq2; % - sign converts direction "to" to direction "from" -y2=sin(dir2.*dtor).*freq2; -% -figure(1); -colormap(col'./255); -pcolor(x2,y2,Efth2);axis equal;shading flat; -hold on; -for i=1:7 - plot(0.1*i*cos(linspace(0,2*pi,25)),0.1*i*sin(linspace(0,2*pi,25))) -end - -% Integrates over frequencies and plots the freq. spectrum -figure(2); -clf -dth=360./real(nth); -dthr=2.*pi./real(nth); - -Ef=sum(Efth1,2)*dthr; -% Computes the directional integral that comes into the seismic noise -% source -DirInt = 2*sum(Efth1(:,1:nth/2).*Efth1(:,nth/2+1:nth),2)*dthr./(Ef.^2); - - -Hs=4.*sum(Ef.*df) -plot(freq,Ef,'k-+','LineWidth',2); -set(gca,'FontSize',15); -xlabel('Frequency (Hz)'); -ylabel('E(f) (m^2/Hz)'); - -dir=90+dirmemo; -% Computes mean directions and directional spread -dir2=repmat(dir',nk,1); -a1=sum(Efth1.*cos(dir2.*dtor),2).*dthr./Ef; -b1=sum(Efth1.*sin(dir2.*dtor),2).*dthr./Ef; - -m1=sqrt(a1.^2+b1.^2); -sth1m=sqrt(2*(1-m1))*180/pi; - -figure(5); -clf -th1m=atan2(b1,a1)*180/pi; -plot(freq,th1m,'k-','LineWidth',2); -set(gca,'FontSize',15); -xlabel('Frequency (Hz)'); -ylabel('mean direction th1m (deg)'); - - -figure(6); -clf -plot(freq,sth1m,'k-','LineWidth',2); -set(gca,'FontSize',15); -xlabel('Frequency (Hz)'); -ylabel('directional spread (deg)'); - - - - -%------------------------------------------------------------- -% 2. Simulates a surface assuming linear superposition -%------------------------------------------------------------- -% a . gets phases from random draw -phases=rand(nk,nth)*2*pi; - -% b. Computes amplitudes -% b.1 frequency increment -df=freq.*(1.1-1/1.1)./2; -% b.2 direction increment in radians -as=zeros(nk,nth); -for i=1:nk - as(i,:)=sqrt(2.*Efth1(i,:)*df(i)*dthr); - %as(:,2:end)=0; -end - -% c. definition du domaine de realisation de la surface (carre de 1 km par 1km) -nx=201; -x=linspace(0,1000,nx); -y2=repmat(x',1,nx); -x2=repmat(x,nx,1); -y=x; -g=9.81; -%%% Computes the wave numbers -sig=2*pi.*freq; -ks=sig.^2./g;% ... ?? use the dispersion relation. Here for deep water. - % How would it be for a different depth? - -% d. Prepares for a movie with nt timesteps -nt=20; -t=linspace(0,(nt-1)*0.5,nt); -% Loads a "nice" color table -col=load('doppler_modified_land_2.ct'); -col(:,254)=col(:,253); -col(:,255)=col(:,253); -col(:,256)=col(:,253); -colormap(col'./255); - -nfig=3; -figure(nfig); -clf -set(nfig,'Position',[1 1 3*nx+40 3*nx+40]) -colormap(col'./255); -M=struct([]); -mov = avifile('example_surface.avi'); -for ii=1:nt -% -% initialise la surface a zero -% -dirt=(90.-dirmemo); -zeta=zeros(nx,nx); -E=0; -for i=1:nk - for j=1:nth - zeta(:,:)= zeta(:,:)+as(i,j)*cos( ks(i)*cos(dirt(j).*dtor).*x2 ... - +ks(i)*sin(dirt(j).*dtor).*y2 + phases(i,j)-sig(i)*t(ii) ); - E=E+as(i,j).^2.; - end -end -pcolor(x2,y2,zeta); -if ii == 1 -hs=4*sqrt(E); -caxis([-Hs,Hs]); -end -axis equal;shading interp;colorbar; -xlabel('x (m)'); -ylabel('y (m)'); -N(ii)=getframe; -F=getframe; -mov = addframe(mov,F); -end -% Checks that the Hs is indeed 4 x stdev(elevation) -hs=4*sqrt(E) - -mov = close(mov); -movie(N,1,1) diff --git a/model/aux/matlab/read_WWNCUG_var.m b/model/aux/matlab/read_WWNCUG_var.m deleted file mode 100644 index bc9aaaeda..000000000 --- a/model/aux/matlab/read_WWNCUG_var.m +++ /dev/null @@ -1,84 +0,0 @@ - -function [tri,lat,lon,time,mat1,var1,unit1]=read_WWNCUG_var(filename,varname,date1,lon1,lat1) -% -% Reads all or a subsed of a NetCDF file. -% If date1 is specified: takes only the closest dates in the file -% if lon1 is specificied: takes only the closest longitude ... - -% -% 1. Opens file and gets dimensions of arrays -% - fid=netcdf.open(filename,'NC_NOWRITE'); - nodeid=netcdf.inqDimID(fid,'node'); - elemid=netcdf.inqDimID(fid,'element'); - timeid=netcdf.inqDimID(fid,'time'); - - [d0,nx]=netcdf.inqDim(fid,nodeid); - [d1,ntri]=netcdf.inqDim(fid,elemid); - [d3,nt]=netcdf.inqDim(fid,timeid); - - varlon = netcdf.inqVarID(fid,'longitude'); - varlat = netcdf.inqVarID(fid,'latitude'); - vartri = netcdf.inqVarID(fid,'tri'); - - lon=netcdf.getVar(fid,varlon); - lat=netcdf.getVar(fid,varlat); - tri=netcdf.getVar(fid,vartri); - - - -% -% We assume that the date reference is 1 Jan 1990. -% This is normally written in the time attributes -% - time0=datenum(1990,1,1); - vartime = netcdf.inqVarID(fid,'time'); - time=netcdf.getVar(fid,vartime)+time0; - varids=[]; -myvar= netcdf.inqVarID(fid,varname); - -% -% Gets all the indices for the variables -% - [var1 type vardims]=netcdf.inqVar(fid,myvar); -% -% 2. defines the indices for the data subset -% -if exist('date1') - [timedist,kk]=min(abs(time-date1)); - time=time(kk); - KK=kk; - nk=1; -else - KK=1; - nk=nt; -end -if exist('lon1') & exist('lat1') - [xdist,ii]=min(abs(lon-lon1)+abs(lat-lat1)); - lon=lon(ii); - lat=lat(ii); - II=ii; - ni=1; -else - II=1; - ni=nx; -end - -% -% 3. Extracts data -% - j=1; - j1=j; - varid=myvar; - eval(['unit' num2str(j) '=netcdf.getAtt(fid,varid,''units'');']); - eval(['scale=netcdf.getAtt(fid,varid,''scale_factor'');']); - eval(['fillv=netcdf.getAtt(fid,varid,''_FillValue'');']); - eval(['vali=netcdf.getVar(fid,varid,[II-1 KK-1],[ni nk]);']); - I=find(vali== fillv); - val=double(vali).*scale; - val(I)=NaN; - eval(['mat' num2str(j) '=val;']); - -netcdf.close(fid); - - diff --git a/model/aux/matlab/read_WWNC_var.m b/model/aux/matlab/read_WWNC_var.m deleted file mode 100644 index 83af987c8..000000000 --- a/model/aux/matlab/read_WWNC_var.m +++ /dev/null @@ -1,90 +0,0 @@ - -function [lat,lon,time,mat1,var1,unit1]=read_WWNC_var(filename,varname,date1,lon1,lat1) -% -% Reads all or a subsed of a NetCDF file. -% If date1 is specified: takes only the closest dates in the file -% if lon1 is specificied: takes only the closest longitude ... - -% -% 1. Opens file and gets dimensions of arrays -% - fid=netcdf.open(filename,'NC_NOWRITE'); - [ndims,nvars,ngatts,unlimdimid]=netcdf.inq(fid); - [d0,nx]=netcdf.inqDim(fid,ndims-3); - [d1,ny]=netcdf.inqDim(fid,ndims-2); - [d2,nt]=netcdf.inqDim(fid,ndims-1); - v0=netcdf.inqVar(fid,0); - if (v0=='x') - varlon=0; - varlat=1; - else - varlon = netcdf.inqVarID(fid,'longitude'); - varlat = netcdf.inqVarID(fid,'latitude'); - end - lon=netcdf.getVar(fid,varlon); - lat=netcdf.getVar(fid,varlat); -% -% We assume that the date reference is 1 Jan 1990. -% This is normally written in the time attributes -% - time0=datenum(1990,1,1); - vartime = netcdf.inqVarID(fid,'time'); - time=netcdf.getVar(fid,vartime)+time0; - varids=[]; -myvar= netcdf.inqVarID(fid,varname); - -% -% Gets all the indices for the variables -% - [var1 type vardims]=netcdf.inqVar(fid,myvar); -% -% 2. defines the indices for the data subset -% -if exist('date1') - [timedist,kk]=min(abs(time-date1)); - time=time(kk); - KK=kk; - nk=1; -else - KK=1; - nk=nt; -end -if exist('lon1') - [xdist,ii]=min(abs(lon-lon1)); - lon=lon(ii); - II=ii; - ni=1; -else - II=1; - ni=nx; -end -if exist('lat1') - [ydist,jj]=min(abs(lat-lat1)); - lat=lat(jj); - JJ=jj; - nj=1; -else - JJ=1; - nj=ny; -end - -% -% 3. Extracts data -% - j=1; - j1=j; - varid=myvar; - eval(['unit' num2str(j) '=netcdf.getAtt(fid,varid,''units'');']); - eval(['scale=netcdf.getAtt(fid,varid,''scale_factor'');']); - eval(['fillv=netcdf.getAtt(fid,varid,''_FillValue'');']); - eval(['vali=netcdf.getVar(fid,varid,[II-1 JJ-1 KK-1],[ni nj nk]);']); - %eval(['var' num2str(j) '=netcdf.getAtt(fid,var' num2str(j) 'id,''long_name'');']); - I=find(vali== fillv); - val=double(vali).*scale; - val(I)=NaN; - eval(['mat' num2str(j) '=val;']); - -netcdf.close(fid); -% pcolor(lon1,lat1,squeeze(val1(:,:,1))');shading flat; - - diff --git a/model/aux/matlab/read_WWNCf_var.m b/model/aux/matlab/read_WWNCf_var.m deleted file mode 100644 index 9a809c29b..000000000 --- a/model/aux/matlab/read_WWNCf_var.m +++ /dev/null @@ -1,287 +0,0 @@ - - -function [lat,lon,freq,time,mat1,var1,unit,MAPSTA]=read_WWNCf_var(filename,varname,date1,lon1,lat1) - -% - -% Reads all or a subset of a NetCDF file, with a frequency dimension. - -% If date1 is specified: takes only the closest dates in the file - -% if lon1 is specificied: takes only the closest longitude ... - - - -% - -% 1. Opens file and gets dimensions of arrays - -% - - fid=netcdf.open(filename,'NC_NOWRITE'); - - [ndims,nvars,ngatts,unlimdimid]=netcdf.inq(fid); - - - - MAPSTAid=netcdf.inqVarID(fid,'MAPSTA'); - - - - dimlon = netcdf.inqDimID(fid,'longitude'); - - dimlat = netcdf.inqDimID(fid,'latitude'); - - dimtime = netcdf.inqDimID(fid,'time'); - - dimf = netcdf.inqDimID(fid,'f'); - - [d0,nx]=netcdf.inqDim(fid,dimlon); - - [d1,ny]=netcdf.inqDim(fid,dimlat); - - [d3,nt]=netcdf.inqDim(fid,dimtime); - - [d4,nf]=netcdf.inqDim(fid,dimf); - - v0=netcdf.inqVar(fid,0); - - if (v0=='x') - - varlon=0; - - varlat=1; - - else - - varlon = netcdf.inqVarID(fid,'longitude'); - - varlat = netcdf.inqVarID(fid,'latitude'); - - end - - varf = netcdf.inqVarID(fid,'f'); - - varM = netcdf.inqVarID(fid,'MAPSTA'); - - freq=netcdf.getVar(fid,varf); - - MAPSTA=netcdf.getVar(fid,varM); - - lon=netcdf.getVar(fid,varlon); - - lat=netcdf.getVar(fid,varlat); - -% - -% We assume that the date reference is 1 Jan 1990. - -% This is normally written in the time attributes - -% - - time0=datenum(1990,1,1); - - vartime = netcdf.inqVarID(fid,'time'); - - time=netcdf.getVar(fid,vartime)+time0; - - varids=[]; - -myvar= netcdf.inqVarID(fid,varname); - - - -% - -% Gets all the indices for the variables - -% - - [var1 type vardims]=netcdf.inqVar(fid,myvar); - -% - -% 2. defines the indices for the data subset - -% - -if exist('date1') - - [timedist,kk]=min(abs(time-date1)); - - time=time(kk); - - KK=kk; - - nk=1; - -else - - KK=1; - - nk=nt; - -end - -if exist('lon1') - - [xdist,ii]=min(abs(lon-lon1)); - - lon=lon(ii); - - II=ii; - - ni=1; - -else - - II=1; - - ni=nx; - -end - -if exist('lat1') - - [ydist,jj]=min(abs(lat-lat1)); - - lat=lat(jj); - - JJ=jj; - - nj=1; - -else - - JJ=1; - - nj=ny; - -end - - - -LL=1; - -nl=nf; - - - -% - -% 3. Extracts data - -% - - unit=netcdf.getAtt(fid,myvar,'units'); - - scale=netcdf.getAtt(fid,myvar,'scale_factor'); - - fillv=netcdf.getAtt(fid,myvar,'_FillValue'); - - vali=netcdf.getVar(fid,myvar,[II-1 JJ-1 LL-1 KK-1],[ni nj nl nk]); - - - -% - -% Converts to normal units in case of log scales ... - -% - - lg10=log(10); - - tabOK=0; - - imin=-2^15+1; - - imax=2^15; - - tabmat=linspace(imin,imax,imax-imin+1); - -lenu=length(unit); - - if unit(1:15) == 'log10(m4s+1E-12' - - tabmat=exp(lg10.*tabmat.*scale)-(1E-12-1E-16); - - tabOK=1; - - end - - if unit(1:15) == 'log10(m4s+0.01)' - - tabmat=exp(lg10.*tabmat.*scale)-0.009999; - - tabOK=2; - - end - - - -if (lenu >= 17) - - if unit(1:17) == 'log10(Pa2s+1E-12)' - - tabmat=exp(lg10.*tabmat.*scale)-(1E-12-1E-16); - - tabOK=2; - - end - - if unit(1:17) == 'log10(m2 s+1E-12)' - - tabmat=exp(lg10.*tabmat.*scale)-(1E-12-1E-16); - - tabOK=2; - - end - -end - - - -if (lenu >= 18) - -if unit(1:18) == 'log10(Pa2 s+1E-12)' - - tabmat=exp(lg10.*tabmat.*scale)-(1E-12-1E-16); - - tabOK=2; - -end - -end - - - - - -if tabOK > 0 - - mat1=tabmat(imax+int32(squeeze(vali))); - - I=find(vali== fillv); - - mat1(I)=NaN; - - - -else - - I=find(vali== fillv); - - val=double(vali).*scale; - - val(I)=NaN; - - eval(['mat' num2str(j) '=val;']); - -end - -netcdf.close(fid); - -% pcolor(lon1,lat1,squeeze(val1(:,:,1))');shading flat; - - diff --git a/model/aux/matlab/read_outf_hs_generic.m b/model/aux/matlab/read_outf_hs_generic.m deleted file mode 100644 index 85641efb6..000000000 --- a/model/aux/matlab/read_outf_hs_generic.m +++ /dev/null @@ -1,146 +0,0 @@ -function read_outf_hs_generic(time_filename,hmax,dt,axisin,ext,variablename,units,plot_bathy,iprint,ifig) - -% Purpose: scan depth (if ploty_bath==1) and Hs files -% and make simple x,y plots and save fields -% to a .mat file. The x,y plots are just for simple diagnostics. It is -% assumed that the .mat file will subsequently be used to make better -% plots (especially in case of curvilinear grid, since plot will be -% distorted here). -% Example input: time_filename=datenum(1968,06,06,0,0,0);hmax=5; dt=1/24;axisin=[];ext='hs';variablename='SWH';units{1}='deg';units{2}='m';plot_bathy=0; - - -% Name: read_outf_hs_generic.m -% Origination: E Rogers -% This header last updated: E Rogers Jan 11 2013 - -icheck=1; - -fz=12; -set(0,'defaultaxesfontsize',fz); - -BUFFER=1; - -wermap=jet; -wermap(1,:)=[0 0.6 0]; - -v2=[-10 0 10]; - -for itime=1:1000 - - Z1=datestr(time_filename,30); - Z2=[Z1(3:8) Z1(10:11)]; - - if itime==1 & plot_bathy==1 - - filename=['./ww3.' Z2 '.dpt']; - - if exist(filename) == 0 - disp([filename ' does not exist']) - break - end - if exist(filename) == 2 - disp([filename ' does exist.']) - - [xgrd,ygrd,depth,year,month,day,hour,minute]=read_scalar(filename,icheck); - time(itime)=datenum(year,month,day,hour,minute,0); - icheck=0; - - figure(1),clf,hold off - imagesc(xgrd,ygrd,depth') - colormap(jet) - axis xy - axis equal - if isempty(axisin)==1 - axis1=[min(min(xgrd))-BUFFER max(max(xgrd))+BUFFER min(min(ygrd))-BUFFER max(max(ygrd))+BUFFER]; - else - axis1=axisin; - end - axis(axis1) - xlabel(['x (' units{1} ')'],'fontsize',(fz+2)) - ylabel(['y (' units{1} ')'],'fontsize',(fz+2)) - set(gca,'fontsize',fz) - caxis([-300 300]) - colorbar - title(['depth (m) ; ' datestr(time(itime),0)]) - pause(0.1) - end - - end - - filename=['./ww3.' Z2 '.' ext]; - - if exist(filename) == 0 - disp([filename ' does not exist']) - break - end - if exist(filename) == 2 - disp([filename ' does exist; itime = ' num2str(itime)]) - - str=['[xgrd,ygrd,' variablename ',year,month,day,hour,minute]=read_scalar(filename,icheck);'];eval(str) - filenames{itime}=filename; % for error checking - time_filenames(itime)=time_filename; % for error checking - time(itime)=datenum(year,month,day,hour,minute,0); - icheck=0; - -% This operation is disabled since depth at first time step may not apply for this field -% (depth field is affected by nonstationary ice, for example) -% if plot_bathy==1 -% [i]=find(depth<0); -% str=[' ' variablename '(i)=-99;'];eval(str) -% end - - figure(ifig),clf,hold off - str=[' imagesc(xgrd,ygrd,' variablename ''')'];eval(str) - colormap(wermap) - axis xy - axis equal - if isempty(axisin)==1 - axis1=[min(min(xgrd))-BUFFER max(max(xgrd))+BUFFER min(min(ygrd))-BUFFER max(max(ygrd))+BUFFER]; - else - axis1=axisin; - end - axis(axis1) - xlabel(['x (' units{1} ')'],'fontsize',(fz+2)) - ylabel(['y (' units{1} ')'],'fontsize',(fz+2)) - set(gca,'fontsize',fz) - caxis([-hmax/63 hmax]) - colorbar - if plot_bathy==1 - hold on - contour(xgrd,ygrd,depth',v2,'w-') - end - title([variablename ' (' units{2} ') ; ' datestr(time(itime),0)]) - pause(0.1) - if iprint==1 - icount=icount+1; - if icount==1 - print -dpsc2 outf.ps - else - print -dpsc2 -append outf.ps - end - end - - time_filename=time_filename+dt; -% round to nearest minute to avoid limits of precision in dt that causes creepage over many time steps - time_filename=round(time_filename*1440)/1440; - - str=[' ' variablename '_t{itime}=' variablename ';'];eval(str) - - end - -end - -%print -dpsc2 pcolor.final.ps -%print -dpng pcolor.final.png - -if exist('xgrd')==0 - error('did you put in the correct date?') -end - -disp('saving final .mat file....') -if plot_bathy==1 - str=['save ' variablename '.OUTF.mat xgrd ygrd depth ' variablename '_t time'];eval(str) -else - str=['save ' variablename '.OUTF.mat xgrd ygrd ' variablename '_t time'];eval(str) -end -disp('....done') diff --git a/model/aux/matlab/read_scalar.m b/model/aux/matlab/read_scalar.m deleted file mode 100644 index 361904cc8..000000000 --- a/model/aux/matlab/read_scalar.m +++ /dev/null @@ -1,78 +0,0 @@ -function [xgrid,ygrid,height,year,month,day,hour,minute]=read_scalar(filename,icheck) -% usage: function [xgrid,ygrid,height,year,month,day,hour]=read_scalar(filename) -% example usage : -% read_scalar('ww3.01011021.hs'); - -% Name: read_scalar.m -% Purpose: read .hs files, and similar files -% Origination: E Rogers -% This header last updated: E Rogers Jan 11 2013 - -fid = fopen(filename,'r'); -header=fgets(fid); -C = textscan(header,'%s'); -YYYYMMDD=C{1}{3}; -HHMMSS=C{1}{4}; - -year=str2num(YYYYMMDD(1:4)); -month=str2num(YYYYMMDD(5:6)); -day=str2num(YYYYMMDD(7:8)); -hour=str2num(HHMMSS(1:2)); -minute=str2num(HHMMSS(3:4)); - -xmin=str2num(C{1}{5}); -xmax=str2num(C{1}{6}); -nx=str2num(C{1}{7}); -ymin=str2num(C{1}{8}); -ymax=str2num(C{1}{9}); -ny=str2num(C{1}{10}); -variable=C{1}{11}; -factors=str2num(C{1}{12}); - -if icheck>0 - str=['!head -n 1 ' filename];disp(str);eval(str) - disp(['year = ' num2str(year)]) - disp(['month = ' num2str(month)]) - disp(['day = ' num2str(day)]) - disp(['hour = ' num2str(hour)]) - disp(['minute = ' num2str(minute)]) - disp(['xmin = ' num2str(xmin)]) - disp(['xmax = ' num2str(xmax)]) - disp(['nx = ' num2str(nx)]) - disp(['ymin = ' num2str(ymin)]) - disp(['ymax = ' num2str(ymax)]) - disp(['ny = ' num2str(ny)]) - disp(['factors = ' num2str(factors)]) -end - -dx=(xmax-xmin)/(nx-1); -dy=(ymax-ymin)/(ny-1); -xgrid=xmin:dx:xmax; -ygrid=ymin:dy:ymax; -if nx ~= size(xgrid,2); - error('uh oh.') -end -if ny ~= size(ygrid,2); - error('uh oh.') -end - -disp('scanning data.....') -for j=1:ny - for i=1:nx - height(i,j)=fscanf(fid,'%f',1); - end -end -disp('done scanning data.') -height=height .* factors; - -fclose(fid); - -disp(['variable read is ' variable]) - -if icheck>1 - beep - iq=input('Do the variables look ok (1=yes)? '); - if iq ~= 1 - error('does not look ok, stopping') - end -end diff --git a/model/aux/matlab/write_x_and_y_example.m b/model/aux/matlab/write_x_and_y_example.m deleted file mode 100644 index 576729ff9..000000000 --- a/model/aux/matlab/write_x_and_y_example.m +++ /dev/null @@ -1,88 +0,0 @@ - -clear - -% Name: write_x_and_y_example.m -% Purpose: Make example curvilinear grid -% Origination: E Rogers March 11 2008 -% Updated: E Rogers Jan 8 2013 -% Notes: -% ..1) This grid is used with /regtests/ww3_tp2.1/input/ww3_grid_c.inp -% ..2) This test case (tp2.1c) is an idealized deepwater case: -% .......depths are specified in ww3_grid_c.inp -% ..3) General remarks about irregular grids: -% .......irregular grids are logically rectangular, specified as -% .......x(i,j) and y(i,j). (This script creates these two arrays.) -% .......x varies in i or j or both. -% .......y varies in i or j or both. -% .......Grid lines can be straight. For example, you might have a grid -% ...........where the spacing becomes smaller as you get closer to shore. -% ...........In this case the grid is irregular but not curvilinear. -% .......Grid lines can be curved. That would be an irregular and curvilinear -% ...........grid. -% .......It is possible to specify a rotated regular grid in WW3 by treating -% ...........it as an irregular grid. (SWAN users may be familiar with the -% ..........."CGRID...alpc" variable which is another way to specify a -% ...........rotated regular grid) - -% theta-dimension is i -dtheta=0.4; -theta=180:(-1*dtheta):90; -theta=theta .* (pi/180); -ni=length(theta); - -% radial dimension is j -radius(1)=600000; -nj=331; - -% offset is arbitrary -xoffset=7e+6; -yoffset=2e+6; - -disp('calculating xgrd ygrd') - -for jj=1:nj - if jj > 1 - ds=dtheta*(pi/180)*radius(jj-1); % arc-length of cells - dr=ds; % make each cell roughly square - radius(jj)=radius(jj-1)+dr; - end - for ii=1:ni - xgrd(ii,jj)=radius(jj)*cos(theta(ii)); - ygrd(ii,jj)=radius(jj)*sin(theta(ii)); - end -end - -xgrd=xgrd+xoffset; -ygrd=ygrd+yoffset; - -disp('finished calculating xgrd ygrd') - -figure(1),clf,hold off - -subplot(2,2,1) -plot(xgrd,ygrd,'k.') -axis equal -axis([min(min(xgrd)) max(max(xgrd)) min(min(ygrd)) max(max(ygrd))]) -grid on - -subplot(2,2,2) -plot(xgrd,ygrd,'k.') -axis equal -axis([6220000 6460000 1980000 2220000]) -grid on - -subplot(2,2,3) -plot(xgrd,ygrd,'k.') -axis equal -axis([974000 1210000 1930000 2170000]) -grid on - -disp('saving grid') - -xgrd=xgrd'; -ygrd=ygrd'; - -save xgrd.2.1c.dat xgrd -ascii -save ygrd.2.1c.dat ygrd -ascii - -disp('finished saving grid') diff --git a/model/aux/profile.gs b/model/aux/profile.gs deleted file mode 100644 index 5a8d8d2a1..000000000 --- a/model/aux/profile.gs +++ /dev/null @@ -1,555 +0,0 @@ -* -* profile.gs : Visualize multi-scale wave model profiler info. -* ---------------------------------------------------------------- -* version 2: color of bw option added -* -* This GrADS scripts reads and displays information from the -* profile output from WAVEWATCH III as generated with the !/MPRF -* switch. ALl data is read from the files prf.NNN.mww3 -* -* General set up - - - - - - - - - - - - - - - - - - - - - - - - - -* - 'set display color white' - 'clear' -* -* Set up page - - - - - - - - - - - - - - - - - - - - - - - - - - -* - header = ' es' - legend = 'yes' -* - headf = 1 / 60 - subhf = 1 / 80 - axisf = 1 / 80 - legnf = 1 / 100 - bhmaxf = 3.0 * axisf -* -* Set up colors - - - - - - - - - - - - - - - - - - - - - - - - - -* -* 20: WMINIT -* 21: WMFINL -* 22: WMWAVE ST00 -* 23: WMWAVE ST01 -* 24: WMWAVE ST02 -* 25: WMWAVE ST04 -* 26: WMWAVE ST05 -* 27: WMWAVE ST06 -* 28: WMWAVE ST07 UPTS -* 29: WMWAVE BCST -* 31+ WMWAVE ST03 --> 30 + IMOD -* - 'set rgb 20 105 105 105' - 'set rgb 21 155 155 155' - 'set rgb 22 0 0 55' - 'set rgb 23 0 0 105' - 'set rgb 24 0 0 155' - 'set rgb 25 0 0 255' - 'set rgb 26 55 55 255' - 'set rgb 27 105 105 255' - 'set rgb 28 155 155 255' - 'set rgb 29 205 205 205' -* - 'set rgb 31 255 0 255' - 'set rgb 32 0 105 0' - 'set rgb 33 0 190 0' - 'set rgb 34 0 215 0' - 'set rgb 35 0 255 0' - 'set rgb 36 205 0 0' - 'set rgb 37 105 0 0' - 'set rgb 38 255 0 0' - 'set rgb 39 255 0 0' - 'set rgb 40 255 0 0' - 'set rgb 41 255 0 0' - 'set rgb 42 255 0 0' - 'set rgb 43 255 0 0' - 'set rgb 44 255 0 0' - 'set rgb 45 255 0 0' - 'set rgb 46 255 0 0' - 'set rgb 47 255 0 0' - 'set rgb 48 255 0 0' - 'set rgb 49 255 0 0' - 'set rgb 50 255 0 0' -* -* Get size of page - - - - - - - - - - - - - - - - - - - - - - - - -* - 'q gxinfo' - line = sublin(result,2) - xmax = subwrd(line,4) - ymax = subwrd(line,6) -* -* Current date and time - - - - - - - - - - - - - - - - - - - - - -* - gdate="yyyy/mm/dd" - '!date -u "+%Y/%m/%d" > tmp_grads_gdate' - result = read (tmp_grads_gdate) - gdate = sublin(result,2) - '!rm -f tmp_grads_gdate' -* -* Print initial info to screen - - - - - - - - - - - - - - - - - - -* - say ' ' - say '--------------------------' - say '*** Running profile.gs ***' - say '--------------------------' - say ' ' -* -* Number of profile files - - - - - - - - - - - - - - - - - - - - -* - '!rm -f tmp_grads_data tmp_grads_err' - '!ls prf.*.mww3 2> tmp_grads_err | wc -l > tmp_grads_data' - - result = read (tmp_grads_err) - line = sublin(result,2) - error = subwrd(line,1) - - if ( error = 'ls:' ) - say ' ' - say ' *** connot find profile data files ***' - say ' ' - 'quit' - endif - - result = read (tmp_grads_data) - line = sublin(result,2) - nproc = subwrd(line,1) - say 'Number of proceccors : ' nproc -* - i_min = 1 - i_max = nproc -* - '!rm -f tmp_grads_data tmp_grads_err' -* -* Min and max times - - - - - - - - - - - - - - - - - - - - - - - -* - - '!ls -l prf.*.mww3 | wc -l > tmp_grads_wc' - result = read (tmp_grads_wc) - line = sublin(result,2) - files = subwrd(line,1) - - if ( files = 1 ) - i1 = 1 - i2 = 2 - else - i1 = 2 - i2 = 3 - endif - - '!grep WMINIT prf.*.mww3 | sort -un -k ' i1 ' | head -1> tmp_grads_tmin' - result = read (tmp_grads_tmin) - line = sublin(result,2) - tmin = subwrd(line,i1) - - '!grep WMFINL prf.*.mww3 | sort -un -k ' i2 ' | tail -1> tmp_grads_tmax' - result = read (tmp_grads_tmax) - line = sublin(result,2) - tmax = subwrd(line,i2) - - say 'Time range : ' tmin ' - ' tmax - - '!rm -f tmp_grads_wc tmp_grads_tmin tmp_grads_tmax' -* -* Min and max times to plot - - - - - - - - - - - - - - - - - - - -* - tdmin = tmin - tdmax = tmax -* -* tdmin = 18.000 -* tdmax = 48.000 -* -* Set up page - - - - - - - - - - - - - - - - - - - - - - - - - - -* - xpmin = 0.75 - xpmax = xmax - 0.5 -* - head = headf * ( xpmax - xpmin ) - subh = subhf * ( xpmax - xpmin ) - axis = axisf * ( xpmax - xpmin ) - legn = legnf * ( xpmax - xpmin ) - bhmax = bhmaxf * ( xpmax - xpmin ) -* - ypmin = 1.5 - ypmax = ymax - 1.0 - dy = ( ypmax - ypmin ) / ( i_max - i_min + 1 ) - if ( dy > bhmax ) - dy = bhmax - endif - ypmin = ypmax - ( i_max - i_min + 1 ) * dy - xfac = ( xpmax - xpmin ) / ( tdmax - tdmin ) -* - 'draw rec ' xpmin ' ' ypmin ' ' xpmax ' ' ypmax -* - 'set font 1' -* -* header -* - if ( header = 'yes' ) - 'set string 1 c 3' - 'set strsiz ' head - xtc = 0.5 * ( xpmin + xpmax ) - ytc = ypmax + 2.5 * head - 'draw string ' xtc ' ' ytc ' MWW3 profiling info' - 'set strsiz ' subh - ytc = ypmax + 1. * head - 'draw string ' xtc ' ' ytc ' times from ' tdmin ' to ' tdmax - endif -* -* axes -* - 'set string 1 r 3' - 'set strsiz ' axis - 'set font 0' - xa = xpmin - 0.5 * axis - ya = ypmax - 0.5 * dy - ylast = ya - i = i_min - 'draw string ' xa ' ' ya ' ' i - i = i_min + 1 - while ( i <= i_max ) - ya = ya - dy - if ( ylast - ya > 2.5 * axis ) - 'draw string ' xa ' ' ya ' ' i - ylast = ya - endif - i = i + 1 - endwhile -* - 'set string 1 c 3 90' - 'set strsiz ' axis - 'set font 1' - xtc = xpmin - 5.5 * axis - ytc = 0.5 * ( ypmin + ypmax ) - 'draw string ' xtc ' ' ytc ' processor' - 'set string 1 c 3 0' -* - dtt = ( tdmax - tdmin ) / 8 - dttt = dtt - if ( dttt <= 1. ) - i = 0 - while ( dttt <= 1. ) - dttt = dttt * 10. - i = i + 1 - endwhile - '!echo ' dttt ' | sed "s/\./ /g" > tmp_grads_dt' - result = read (tmp_grads_dt) - line = sublin(result,2) - dt = subwrd(line,1) - while ( i > 0 ) - dt = dt / 10. - i = i - 1 - endwhile - else - i = 0 - while ( dttt >= 1. ) - dttt = dttt / 10. - i = i + 1 - endwhile - dttt = dttt * 10. - i = i - 1 - '!echo ' dttt ' | sed "s/\./ /g" > tmp_grads_dt' - result = read (tmp_grads_dt) - line = sublin(result,2) - dt = subwrd(line,1) - while ( i > 0 ) - dt = dt * 10. - i = i - 1 - endwhile - endif - '!rm -f tmp_grads_dt' -* - 'set string 1 c 3' - 'set strsiz ' axis - 'set font 1' - xtc = 0.5 * ( xpmin + xpmax ) - ytc = ypmin - 3.5 * axis - 'draw string ' xtc ' ' ytc ' time (s)' -* - nr_lev = ( tdmax - tdmin ) / dt - if ( nr_lev > 12 ) - dt = dt * 2 - endif - if ( nr_lev < 6 ) - dt = dt / 2 - endif -* - 'set string 1 c 3' - 'set line 1 1 5' - xa = xpmin - 0.5 * axis - ya = ypmin - 1.5 * axis - yl = ypmin - 0.25 * axis - 'set font 0' - t = 0 - while ( t < tdmax ) - if ( t >= tdmin ) - xa = xpmin + xfac * ( t - tdmin ) - 'draw line ' xa ' ' ypmin ' ' xa ' ' yl - 'draw string ' xa ' ' ya ' ' t - endif - t = t + dt - endwhile -* - say ' ' -* -* Loop over data files - - - - - - - - - - - - - - - - - - - - - - -* - '!ls prf.*.mww3 > tmp_grads_files' - i = i_min - mmx = 0 - while ( i <= i_max ) - result = read (tmp_grads_files) - file = subwrd(result,2) -* - yh = ypmax - (i-1) * dy - yl = ypmax - i * dy -* -* Loop over data in file - - - - - - - - - - - - - - - - - - - - - -* - OK = 0 - j = 0 - jj = 1 -* - while ( OK = 0 ) -* - result = read (file) - line = sublin(result,1) - OK = subwrd(result,1) - if ( OK = 0 ) - line = sublin(result,2) - t1 = subwrd(line,1) - t2 = subwrd(line,2) - ID = subwrd(line,4) - if ( ID = 'WMWAVE' ) - ID2 = subwrd(line,5) - if ( ID2 = 'TIME' ) - ttime.jj.i = t1 - jj = jj + 1 - endif - if ( ID2 = 'ST03' ) - imod = subwrd(line,6) - if ( imod > mmx ) - mmx = imod - endif - endif - endif -* -* Check time range, convert to plot -* - if ( t1 < tdmax & t2 > tdmin ) -* - if ( t1 < tdmin ) - tl = tdmin - else - tl = t1 - endif - if ( t2 > tdmax ) - tr = tdmax - else - tr = t2 - endif -* - xl = xpmin + xfac * ( tl - tdmin ) - xr = xpmin + xfac * ( tr - tdmin ) -* -* Case WMINIT -* - if ( ID = 'WMINIT' ) - 'set line 20' - 'draw recf ' xl ' ' yl ' ' xr ' ' yh - endif -* -* Case WMWAVE -* - if ( ID = 'WMWAVE' ) - if ( t1 != t2 ) - lcol = -1 - if ( ID2 = 'ST00' ) - lcol = 22 - endif - if ( ID2 = 'ST01' ) - lcol = 23 - endif - if ( ID2 = 'ST02' ) - lcol = 24 - endif - if ( ID2 = 'ST03' ) - lcol = 30 + imod - endif - if ( ID2 = 'ST04' ) - lcol = 25 - endif - if ( ID2 = 'ST05' ) - lcol = 26 - endif - if ( ID2 = 'ST06' ) - lcol = 27 - endif - if ( ID2 = 'ST07' ) - lcol = 28 - endif - if ( ID2 = 'UPTS' ) - lcol = 28 - endif - if ( ID2 = 'BCST' ) - lcol = 29 - endif - if ( lcol > 0 ) - 'set line ' lcol - 'draw recf ' xl ' ' yl ' ' xr ' ' yh - endif - endif - endif -* -* Case WMFINL -* - if ( ID = 'WMFINL' ) - 'set line 21' - if ( t1 != t2 ) - 'draw recf ' xl ' ' yl ' ' xr ' ' yh - else - 'draw line ' xl ' ' yl ' ' xr ' ' yh - endif - endif -* - endif -* - j = j + 1 - else - say 'file ' file ' : ' j ' data read' - endif -* - endwhile -* - i = i + 1 - endwhile -* - '!rm -f tmp_grads_tmin tmp_grads_files' -* -* time step lines -* - 'set line 1 1 5' - j = 1 - xl = -1. - while ( j < jj ) - i = i_min - while ( i <= i_max ) - xlast = xl - xl = xpmin + xfac * ( ttime.j.i - tdmin ) - yh = ypmax - (i-1) * dy - yl = ypmax - i * dy - if ( xl > xpmin & xl < xpmax ) - 'draw line ' xl ' ' yl ' ' xl ' ' yh - endif - if ( i > 1 ) - if ( xlast < xl ) - xhl = xlast - xhr = xl - else - xhl = xl - xhr = xlast - endif - if ( xhl < xpmax & xhr > xpmin ) - if ( xhl < xpmin) - xhl = xpmin - endif - if ( xhr > xpmax) - xhr = xpmax - endif - 'draw line ' xhl ' ' yh ' ' xhr ' ' yh - endif - endif - i = i + 1 - endwhile - j = j + 1 - endwhile -* - 'set line 1 1 10' - 'draw rec ' xpmin ' ' ypmin ' ' xpmax ' ' ypmax -* -* legend -* - if ( legend = 'yes' ) -* - boxs = 10 + mmx - bscale = boxs / 20 - if ( bscale > 0.9 ) - bscale = 0.9 - endif - bsep = ( xpmax - xpmin ) / boxs * bscale - bwdt = 0.5 * bsep -* if ( bwdt > 0.75 * dy ) -* bwdt = 0.75 * dy -* bsep = 2 * bwdt -* endif -* - xl = 0.5 * ( xpmax + xpmin ) - ( boxs / 2 * bsep ) + ( 0.5 * bsep ) - yt = ypmin - 5.5 * axis - yb = yt - 1.0 * legn - 0.5 * bwdt -* - 'set string 1 c 3' - 'set strsiz ' legn - 'set font 1' - i = 1 - while ( i <= boxs ) - if ( i = 1 ) - bID = 'ini' - endif - if ( i = 2 ) - bID = 'fnl' - endif - if ( i = 3 ) - bID = 'inp' - endif - if ( i = 4 ) - bID = 'low' - endif - if ( i = 5 ) - bID = 'tme' - endif - if ( i = 6 ) - bID = 'eql' - endif - if ( i = 7 ) - bID = 'hgh' - endif - if ( i = 8 ) - bID = 'das' - endif - if ( i = 9 ) - bID = 'out' - endif - if ( i = 10 ) - bID = 'bct' - endif - if ( i > 10 ) - bID = 'm' i-10 - endif - 'draw string ' xl ' ' yt ' ' bID -* - if ( i <= 10 ) - icol = 19 + i - else - icol = 20 + i - endif - 'set line ' icol - ' draw recf ' xl-0.5*bwdt ' ' yb-0.5*bwdt ' ' xl+0.5*bwdt ' ' yb+0.5*bwdt - 'set line 1 1 3' - ' draw rec ' xl-0.5*bwdt ' ' yb-0.5*bwdt ' ' xl+0.5*bwdt ' ' yb+0.5*bwdt -* - i = i + 1 - xl = xl + bsep - endwhile -* - endif -* -* End of operations - - - - - - - - - - - - - - - - - - - - - - - -* - 'printim ww3_profile.png' -* - say ' ' - say '-------------------------' - say '*** End of profile.gs ***' - say '-------------------------' - say ' ' -* - 'quit' -* -* End of profile.gs - - - - - - - - - - - - - - - - - - - - - - - diff --git a/model/aux/source.gs b/model/aux/source.gs deleted file mode 100644 index bbb369b13..000000000 --- a/model/aux/source.gs +++ /dev/null @@ -1,1150 +0,0 @@ -* -* source.gs : GrADS plots of wave spectrum and sources -* ---------------------------------------------------------------- -* version 2: grid options now in one script -* color of bw option added -* polar / Cartesian option added -* -* This is a generic grads scripts that runs without modifications -* for arbitary numbers of output locations and times. For each -* and location a five-panel plot is produced. -* -* Scripts and files used : -* colorset.gs : Sets up shading colors -* spec_ids : Grid and center ID's, defaults if not given -* ww3.spec.grads : GrADS data file. -* ww3.spec.ctl : GrADS control file. -* ww3.mean.grads : Suplemental GrAds data file. -* -* The files ww3.* are generated automatically by gx_outp -* (WAVEWATCH postprocessor). -* -* *** NOTE it is expected that gx_outp produces spectra at -* level = 1 and all available source terms. -* This is not checked internally -* *** NOTE it is expected that the point name does not contains -* spaces, othewise mean parameters will be clobbered -* -* General set up - - - - - - - - - - - - - - - - - - - - - - - - - -* - display=white -* -* llgrd : long-lat grid [yes/---] -* color : color or b&w [yes/---] -* polar : polar repres. [yes/---] -* - llgrd = ' es' - color = 'yes' - polar = 'yes' -* - if ( polar = 'yes' ) -* -* dth : grid directional increment for polar plot -* dfr : grid frequency increment for polar plot -* fmx : maximum frequency in polar plot -* - dth = 15 - dfr = 0.05 - fmx = 0.25 - else -* -* thoff : direction at bottom of plot -* dth : grid directional increment for Cartesian plot -* dfr : grid frequency increment for Cartesian plot -* fmn : maximum frequency in Cartesian plot -* fmx : minimum frequency in Cartesian plot -* - thoff = -180. - dth = 45. - dfr = 0.05 - fmn = 0.0412 - fmx = 0.4056 - endif -* - 'set display color ' display - 'clear' - 'run colorset.gs' -* -* ID strings from file - - - - - - - - - - - - - - - - - - - - - - -* - result = read (spec_ids) - OK = sublin(result,1) - if ( OK = '0' ) - grid_ID = sublin(result,2) - else - grid_ID = 'unidentified grid' - endif -* - result = read (spec_ids) - OK = sublin(result,1) - if ( OK = '0' ) - center_ID = sublin(result,2) ', ' - else - center_ID = '' - endif -* -* Current date and time - - - - - - - - - - - - - - - - - - - - - -* - gdate="yyyy/mm/dd" - '!date -u "+%Y/%m/%d" > tmp_grads_gdate' - result = read (tmp_grads_gdate) - gdate = sublin(result,2) - '!rm -f tmp_grads_gdate' -* - center_ID = center_ID gdate -* -* Get size of page - - - - - - - - - - - - - - - - - - - - - - - - -* - 'q gxinfo' - line = sublin(result,2) - xmax = subwrd(line,4) - ymax = subwrd(line,6) -* -* Print initial info to screen - - - - - - - - - - - - - - - - - - -* - say ' ' - say '-------------------------' - say '*** Running source.gs ***' - say '-------------------------' - say ' ' - say 'Grid ID : ' grid_ID - say 'Center ID : ' center_ID - say 'Page : ' xmax ' by ' ymax -* -* Open data file - - - - - - - - - - - - - - - - - - - - - - - - - -* - 'open ww3.spec' -* -* Get some info for file - - - - - - - - - - - - - - - - - - - - - -* - 'q file 1' - line = sublin(result,5) - ntime = subwrd(line,12) - line = sublin(result,6) - nloc = subwrd(line,5) -* - say 'Nr. of times : ' ntime - say 'Nr. of loc. : ' nloc -* - iloc = 1 - while ( iloc <= nloc ) - iline = 6 + iloc - line = sublin(result,iline) - par_ID.iloc = subwrd(line,1) - loc_ID.iloc = substr(line,21,10) - say ' location ' iloc ' is called ' loc_ID.iloc ' and stored as ' par_ID.iloc - iloc = iloc + 1 - endwhile -* -* loop over time and location to get mean pars and max - - - - - - -* - say ' ' - say 'Reading mean data and getting maximum spectral density ...' - 'set gxout stat' -* - fmin = 1.e20 - fmax = -1.e20 - smin = 1.e20 - smax = -1.e20 -* - itime = 1 - while ( itime <= ntime ) -* - 'set t ' itime - say ' processing time ' showtime(itime) -* - iloc = 1 - while ( iloc <= nloc ) -* - result = read (ww3.mean.grads) - line = sublin(result,2) - lo.iloc.itime = subwrd(line,2) - la.iloc.itime = subwrd(line,3) - de.iloc.itime = subwrd(line,4) - ua.iloc.itime = subwrd(line,5) - ux.iloc.itime = subwrd(line,6) - uy.iloc.itime = subwrd(line,7) - ca.iloc.itime = subwrd(line,9) - cx.iloc.itime = subwrd(line,10) - cy.iloc.itime = subwrd(line,11) - hs.iloc.itime = subwrd(line,12) -* -* say result -* say iloc ' ' itime ' ' hs.iloc.itime -* say ua.iloc.itime ' ' ux.iloc.itime ' ' uy.iloc.itime -* say ca.iloc.itime ' ' cx.iloc.itime ' ' cy.iloc.itime -* - 'set lev 1' - 'd ' par_ID.iloc - line = sublin(result,8) - lmin = subwrd(line,4) - lmax = subwrd(line,5) - if ( lmin < fmin) ; fmin = lmin ; endif - if ( lmax > fmax) ; fmax = lmax ; endif -* - ilev = 2 - while ( ilev <= 6 ) - 'set lev ' ilev - 'd ' par_ID.iloc - line = sublin(result,8) - lmin = subwrd(line,4) - lmax = subwrd(line,5) - if ( lmin < smin) ; smin = lmin ; endif - if ( lmax > smax) ; smax = lmax ; endif - ilev = ilev + 1 - endwhile -* -* say result -* say fmin ' ' fmax ' ' lmin ' ' lmax -* - iloc = iloc + 1 -* - endwhile -* - itime = itime + 1 -* - endwhile -* - if ( -smin > smax ) - sscl = -smin - else - sscl = smax - endif - - say ' ' - say 'Done, min and max for spectrum are ' fmin ' and ' fmax - say ' min and max for sources are ' smin ' and ' smax ' (' sscl ')' -* -* Generic page setup - - - - - - - - - - - - - - - - - - - - - - - -* - say ' ' - say 'Setting up the page ...' -* - st1 = '' - st2 = '' - st3 = '' - st4 = '' -* -* settings for 6 panel ... -* - xtc = 0.5 * xmax - yt1 = 10.7 - yt2 = 0.2 - yt3 = 0.4 - size1 = 0.20 - size2 = 0.12 - size3 = 0.12 - size4 = 0.12 - nc = 30 -* - pw = 3.0 - sx = 0.2 - sy = 0.3 - xp0 = 0.5 * ( xmax - sx ) - pw - yp0 = 7.25 -* - xt1 = xtc - pw - xt2 = xtc - pw + 12*size4 - xt3 = 0.5 * ( xt2 + xtc ) - ytl0 = yp0 - pw - sy - 0.3*pw -* -* Actual plotting loop - - - - - - - - - - - - - - - - - - - - - - -* - say ' ' - say 'Starting actual plotting ...' -* - ipage = 0 -* - i = 1 - while ( i <= ntime ) - 'set t ' i -* - j = 1 - while ( j <= nloc ) -* -* ... new page ... -* - ipage = ipage + 1 - say ' Starting with page ' ipage -* - if ( ipage > 1 ) - iplot = ipage - 1 - 'printim sterms_plot_'iplot'.png' - 'clear' - endif -* - page_ID = loc_ID.j ' at ' showtime(i) -* - 'set string 1 c 5' - 'set strsiz ' size1 - 'draw string ' xtc ' ' yt1 ' ' page_ID - 'set strsiz ' size2 - 'draw string ' xtc ' ' yt2 ' ' grid_ID - 'set strsiz ' size3 - 'draw string ' xtc ' ' yt3 ' ' center_ID -* - 'set string 1 l 5' - 'set strsiz ' size4 - ytl = ytl0 - if ( llgrd = 'yes' ) - 'draw string ' xt1 ' ' ytl ' Location' - else - 'draw string ' xt1 ' ' ytl ' Location (km)' - endif - 'set string 1 c 5' - 'draw string ' xt2 ' ' ytl ' :' - if ( llgrd = 'yes' ) - if ( la.j.i >= 0 ) - lat = la.j.i - loc = lat 'N ' - else - lat = - la.j.i - loc = lat 'S ' - endif - if ( lo.j.i > 180 ) - lon = 360 - lo.j.i - loc = loc lon 'W' - else - lon = lo.j.i - loc = loc lon 'E' - endif - else - loc = lo.j.i '-' la.j.i - endif -* - 'draw string ' xt3 ' ' ytl ' ' loc -* - 'set string 1 l 5' - ytl = ytl - 2.0 * size4 - 'draw string ' xt1 ' ' ytl ' Depth' - 'set string 1 c 5' - 'draw string ' xt2 ' ' ytl ' :' - 'draw string ' xt3 ' ' ytl ' ' de.j.i ' m' -* - 'set string 1 l 5' - ytl = ytl - 2.0 * size4 - 'draw string ' xt1 ' ' ytl ' Wind speed' - 'set string 1 c 5' - 'draw string ' xt2 ' ' ytl ' :' - 'draw string ' xt3 ' ' ytl ' ' ua.j.i ' m/s' -* - ytl = ytl - 2.0 * size4 - 'set string 1 l 5' - 'draw string ' xt1 ' ' ytl ' Current vel.' - 'set string 1 c 5' - 'draw string ' xt2 ' ' ytl ' :' - 'draw string ' xt3 ' ' ytl ' ' ca.j.i ' m/s' -* - ytl = ytl - 2.0 * size4 - 'set string 1 l 5' - 'draw string ' xt1 ' ' ytl ' Wave height' - 'set string 1 c 5' - 'draw string ' xt2 ' ' ytl ' :' - 'draw string ' xt3 ' ' ytl ' ' hs.j.i ' m' -* -* ... plot spectrum ... -* - 'set lev 1' - st1 = 'spectrum' - xp = xp0 - yp = yp0 -* - if ( polar = 'yes' ) - dummy = plotspec (xp,yp,pw,dth,dfr,fmx,par_ID.j,fmax,st1,st2,st3,st4,nc,ua.j.i,ux.j.i,uy.j.i,ca.j.i,cx.j.i,cy.j.i,color) - else - dummy = plotspec_c (xp,yp,pw,thoff,dth,fmn,fmx,dfr,par_ID.j,fmax,st1,st2,st3,st4,nc,ua.j.i,ux.j.i,uy.j.i,ca.j.i,cx.j.i,cy.j.i,color) - endif -* -* ... plot input ... -* - 'set lev 2' - st1 = 'wind source term' - xp = xp0 + pw + sx - yp = yp0 -* - if ( polar = 'yes' ) - dummy = plotsrce (xp,yp,pw,dth,dfr,fmx,par_ID.j,sscl,st1,st2,st3,st4,nc,color) - else - dummy = plotsrce_c (xp,yp,pw,thoff,dth,fmn,fmx,dfr,par_ID.j,sscl,st1,st2,st3,st4,nc,color) - endif -* -* ... plot interactions ... -* - 'set lev 3' - st1 = 'nonlinear interations' - xp = xp0 + pw + sx - yp = yp0 - pw - sy -* - if ( polar = 'yes' ) - dummy = plotsrce (xp,yp,pw,dth,dfr,fmx,par_ID.j,sscl,st1,st2,st3,st4,nc,color) - else - dummy = plotsrce_c (xp,yp,pw,thoff,dth,fmn,fmx,dfr,par_ID.j,sscl,st1,st2,st3,st4,nc,color) - endif -* -* ... plot dissipation ... -* - 'define diss = ' par_ID.j'(z=4) + ' par_ID.j'(z=5)' - st1 = 'dissipation source term' - xp = xp0 + pw + sx - yp = yp0 - 2*pw - 2*sy -* - if ( polar = 'yes' ) - dummy = plotsrce (xp,yp,pw,dth,dfr,fmx,diss,sscl,st1,st2,st3,st4,nc,color) - else - dummy = plotsrce_c (xp,yp,pw,thoff,dth,fmn,fmx,dfr,diss,sscl,st1,st2,st3,st4,nc,color) - endif -* -* ... plot total source term ... -* - 'set lev 6' - st1 = 'total source term' - xp = xp0 - yp = yp0 - pw - sy -* - if ( polar = 'yes' ) - dummy = plotsrce (xp,yp,pw,dth,dfr,fmx,par_ID.j,sscl,st1,st2,st3,st4,nc,color) - else - dummy = plotsrce_c (xp,yp,pw,thoff,dth,fmn,fmx,dfr,par_ID.j,sscl,st1,st2,st3,st4,nc,color) - endif -* - j = j + 1 - endwhile -* - i = i + 1 - endwhile -* -* End of operations - - - - - - - - - - - - - - - - - - - - - - - -* - say ' ' - say '------------------------' - say '*** End of source.gs ***' - say '------------------------' - say ' ' -* - 'quit' -* -* End of main script - - - - - - - - - - - - - - - - - - - - - - - - -* ------------------------------------------------------------------------------ - function plotspec (xp0,yp0,dxyp,dxgrid,dygrid,ymax,spec,scale,str1,str2,str3,str4,strlen,u,ux,uy,c,cx,cy,color) -* -* Function to plot a spectrum at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* dxgrid Grid line increment for directions. -* dygrid Grid line increment for frequencies. -* ymax Maximum frequency. -* spec Spectrum to be plotted. -* scale Scale (division) factor for spectrum. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* ux/y Wind speed and components. -* cx/y Current speed and components. -* color color of b&w [yes/---] -* -* 0. Initializations -* - 'set grads off' - 'set lon -180 180' - 'set lat ' 90-ymax ' 90' -* -* 1. Set up plot location -* - 'set parea ' xp0 ' ' xp0+dxyp ' ' yp0 ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 15 - factor = 2 - level=1.001 - levels='' -* - while ( i > 0 ) - level = level / factor - levels = level ' ' levels - i = i - 1 - endwhile -* -* 3. Plot spectrum -* - 'set mproj nps' - 'set grid off' -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38' - 'd ' spec'/'scale - cblack = 1 - current = 65 - wind = 64 - else - cblack = 3 - current = 66 - wind = 63 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set clevs ' levels - 'set ccolor 60' - 'set clab off' - 'set clevs ' levels - 'd ' spec'/'scale -* -* 4. Plot grid lines manually to avoid bug -* - if ( color = 'yes' ) - 'set line 66 5 2' - else - 'set line 66 1 3' - endif -* - x = 0 - while ( x < 360+0.1*dxgrid ) - 'q ll2xy 'x' '90.-dygrid - x1 = subwrd(result,1) - y1 = subwrd(result,2) - 'q ll2xy 'x' '90.-ymax - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - x = x + dxgrid - endwhile -* - dx = 5 - y = dygrid - while ( y < ymax + 0.1*dygrid ) - x = 0 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - while ( x < 360 ) - x = x+dx - x1 = x2 - y1 = y2 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - endwhile - y = y + dygrid - endwhile -* - 'set gxout contour' - 'set cthick ' cblack - 'set clevs ' levels - 'set ccolor 60' - 'set clab off' - 'set clevs ' levels - 'd ' spec'/'scale -* -* 5. Plot current and wind vector -* - xc = xp0 + 0.5*dxyp - yc = yp0 + 0.5*dxyp -* -* 5.a current -* - 'set line ' current ' 1 6' -* - cmax = 1.5 - cmin = 0.1 - if ( c > cmin ) - if ( c < cmax ) - dc = 0.375 * (dygrid/ymax) * dxyp * c / cmax - else - dc = 0.375 * (dygrid/ymax) * dxyp - endif - dcx = dc * cx / c - dcy = dc * cy / c - x2 = xc - dcx - y2 = yc - dcy - x1 = xc + dcx - y1 = yc + dcy -* -* 'draw line ' x2 ' ' y2 ' ' x1 ' ' y1 -* - 'q xy2w 'x1' 'y1 - lon = subwrd(result,3) - lat = subwrd(result,6) - lonh = lon + 10 - lath = 90. - 0.75*(90.-lat) - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 - lonh = lon - 10 - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 -* - endif -* -* 5.b wind -* - 'set line ' wind ' 1 6' -* - umax = 20. - umin = 2.5 - if ( u > umin ) - if ( u < umax ) - du = 0.375 * (dygrid/ymax) * dxyp * u / umax - else - du = 0.375 * (dygrid/ymax) * dxyp - endif - dux = du * ux / u - duy = du * uy / u - x2 = xc - dux - y2 = yc - duy - x1 = xc + dux - y1 = yc + duy -* - 'draw line ' x2 ' ' y2 ' ' x1 ' ' y1 -* - 'q xy2w 'x1' 'y1 - lon = subwrd(result,3) - lat = subwrd(result,6) - lonh = lon + 10 - lath = 90. - 0.75*(90.-lat) - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 - lonh = lon - 10 - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 -* - endif -* -* 6. ID text around spectrum -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl 4' - 'draw string ' xp0 ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br 4' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr 4' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* - if ( str4 != '' ) - 'set string 1 tl 4' - 'draw string ' xp0 ' ' yp0 -0.75*size ' ' str4 - endif -* - return - -* ------------------------------------------------------------------------------ - function plotsrce (xp0,yp0,dxyp,dxgrid,dygrid,ymax,source,scale,str1,str2,str3,str4,strlen,color) -* -* Function to plot a source term at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* dxgrid Grid line increment for directions. -* dygrid Grid line increment for frequencies. -* ymax Maximum frequency. -* source Source term to be plotted. -* scale Scale (division) factor for source term. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* color color of b&w [yes/---] -* -* 0. Initializations -* - 'set grads off' - 'set lon -180 180' - 'set lat ' 90-ymax ' 90' -* -* 1. Set up plot location -* - 'set parea ' xp0 ' ' xp0+dxyp ' ' yp0 ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 7 - factor = 2 - levelp = 1.001 - leveln = -1.001 - levpos = '' - levneg = '' -* - while ( i > 0 ) - levelp = levelp / factor - leveln = leveln / factor - levpos = levelp ' ' levpos - levneg = levneg ' ' leveln - i = i - 1 - endwhile - levels = levneg ' 0 ' levpos -* -* 3. Plot source term -* - 'set mproj nps' - 'set grid off' -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56' -* 'set ccols 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41' - 'd ' source'/'scale - cblack = 1 - stpos = 1 - stneg = 1 - else - cblack = 3 - stpos = 1 - stneg = 3 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stpos - 'set clevs ' levpos - 'd ' source'/'scale -* -* 4. Plot grid lines manually to avoid bug -* - if ( color = 'yes' ) - 'set line 60 5 2' - else - 'set line 66 1 3' - endif -* - x = 0 - while ( x < 360+0.1*dxgrid ) - 'q ll2xy 'x' '90.-dygrid - x1 = subwrd(result,1) - y1 = subwrd(result,2) - 'q ll2xy 'x' '90.-ymax - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - x = x + dxgrid - endwhile -* - dx = 5 - y = dygrid - while ( y < ymax + 0.1*dygrid ) - x = 0 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - while ( x < 360 ) - x = x+dx - x1 = x2 - y1 = y2 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - endwhile - y = y + dygrid - endwhile -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stpos - 'set clevs ' levpos - 'd ' source'/'scale - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stneg - 'set clevs ' levneg - 'd ' source'/'scale -* -* 5. ID text around source term -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl 4' - 'draw string ' xp0 ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br 4' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr 4' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* - if ( str4 != '' ) - 'set string 1 tl 4' - 'draw string ' xp0 ' ' yp0 -0.75*size ' ' str4 - endif -* - return - -* ------------------------------------------------------------------------------ - function plotspec_c (xp0,yp0,dxyp,xoff,dx,ymin,ymax,dy,spec,scale,str1,str2,str3,str4,strlen,u,ux,uy,c,cx,cy,color) -* -* Function to plot a spectrum at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* xoff Shift of first frequency (if 0, axis from 0-360 cartesian) -* dx Directional increment (axis). -* ymin Minimum frequency. -* ymax Maximum frequency. -* dy Frequency increment (axis). -* spec Spectrum to be plotted. -* scale Scale (division) factor for spectrum. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* ux/y Wind speed and components. -* cx/y Current speed and components. -* -* 0. Initializations -* - 'set grads off' - 'set lon ' xoff-270 ' ' xoff+90 - 'set lat ' 90-ymax ' ' 90-ymin -* -* 1. Set up plot location -* - 'set parea ' xp0+0.07*dxyp ' ' xp0+dxyp ' ' yp0+0.05*dxyp ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 15 - factor = 2 - level=1.001 - levels='' -* - while ( i > 0 ) - level = level / factor - levels = level ' ' levels - i = i - 1 - endwhile -* -* 3. Plot spectrum -* - 'set mproj scaled' - 'set xyrev on' - 'set xflip on' - 'set grid off' - 'set xlab off' - 'set ylab off' - labsize = dxyp / strlen / 1.25 - 'set ylopts 1 4 ' labsize - 'set ylint ' dx - 'set xlint ' dy -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38' - 'd ' spec'/'scale - cblack = 1 - else - cblack = 3 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set clevs ' levels - 'd ' spec'/'scale -* -* 4. Plot axes manually -* - freq = 0. - 'set line 1 1 4' - 'set string 1 c 4' - 'set strsiz ' labsize -* - while ( freq <= ymax ) - if ( freq >= ymin ) - xt = xp0 + 0.07*dxyp + 0.93*dxyp * ( freq - ymin ) / ( ymax - ymin ) - 'draw line ' xt ' ' yp0+1.5*labsize ' ' xt ' ' yp0 + 0.05*dxyp - 'draw string ' xt ' ' yp0+0.5*labsize ' ' freq - endif - freq = freq + dy - endwhile -* - thmin = xoff - thmax = xoff + 360. - th = 0. -* - while ( th > thmin ) - th = th - dx - endwhile -* - 'set string 1 r 4' - while ( th <= thmax ) - if ( th >= thmin ) - yt = yp0 + 0.05*dxyp + 0.95*dxyp * ( th - thmin ) / ( thmax - thmin ) - 'draw line ' xp0+0.07*dxyp ' ' yt ' ' xp0+0.07*dxyp-0.5*labsize ' ' yt - 'draw string ' xp0+0.07*dxyp-1.0*labsize ' ' yt ' ' th - endif - th = th + dx - endwhile -* -* 5. Plot current and wind vector -* -* -* 6. ID text around spectrum -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl 4' - 'draw string ' xp0+0.07*dxyp ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br 4' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr 4' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* - if ( str4 != '' ) - 'set string 1 tl 4' - 'draw string ' xp0+0.07*dxyp ' ' yp0 -0.75*size ' ' str4 - endif -* - return - -* ------------------------------------------------------------------------------ - function plotsrce_c (xp0,yp0,dxyp,xoff,dx,ymin,ymax,dy,source,scale,str1,str2,str3,str4,strlen,color) -* -* Function to plot a source term at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* xoff Shift of first frequency (if 0, axis from 0-360 cartesian) -* dx Directional increment (axis). -* ymin Minimum frequency. -* ymax Maximum frequency. -* dy Frequency increment (axis). -* source Source term to be plotted. -* scale Scale (division) factor for source term. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* -* 0. Initializations -* - 'set grads off' - 'set lon ' xoff-270 ' ' xoff+90 - 'set lat ' 90-ymax ' ' 90-ymin -* -* 1. Set up plot location -* - 'set parea ' xp0+0.07*dxyp ' ' xp0+dxyp ' ' yp0+0.05*dxyp ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 7 - factor = 2 - levelp = 1.001 - leveln = -1.001 - levpos = '' - levneg = '' -* - while ( i > 0 ) - levelp = levelp / factor - leveln = leveln / factor - levpos = levelp ' ' levpos - levneg = levneg ' ' leveln - i = i - 1 - endwhile - levels = levneg ' 0 ' levpos -* -* 3. Plot source term -* - 'set mproj scaled' - 'set xyrev on' - 'set xflip on' - 'set grid off' - 'set xlab off' - 'set ylab off' - labsize = dxyp / strlen / 1.25 - 'set ylopts 1 4 ' labsize - 'set ylint ' dx - 'set xlint ' dy -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56' -* 'set ccols 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41' - 'd ' source'/'scale - cblack = 1 - stpos = 1 - stneg = 1 - else - cblack = 3 - stpos = 1 - stneg = 3 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stpos - 'set clevs ' levpos - 'd ' source'/'scale - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set cstyle ' stneg - 'set clevs ' levneg - 'd ' source'/'scale -* -* 4. Plot axes manually -* - freq = 0. - 'set line 1 1 4' - 'set string 1 c 4' - 'set strsiz ' labsize -* - while ( freq <= ymax ) - if ( freq >= ymin ) - xt = xp0 + 0.07*dxyp + 0.93*dxyp * ( freq - ymin ) / ( ymax - ymin ) - 'draw line ' xt ' ' yp0+1.5*labsize ' ' xt ' ' yp0 + 0.05*dxyp - 'draw string ' xt ' ' yp0+0.5*labsize ' ' freq - endif - freq = freq + dy - endwhile -* - thmin = xoff - thmax = xoff + 360. - th = 0. -* - while ( th > thmin ) - th = th - dx - endwhile -* - 'set string 1 r 4' - while ( th <= thmax ) - if ( th >= thmin ) - yt = yp0 + 0.05*dxyp + 0.95*dxyp * ( th - thmin ) / ( thmax - thmin ) - 'draw line ' xp0+0.07*dxyp ' ' yt ' ' xp0+0.07*dxyp-0.5*labsize ' ' yt - 'draw string ' xp0+0.07*dxyp-1.0*labsize ' ' yt ' ' th - endif - th = th + dx - endwhile -* -* 5. ID text around source term -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl 4' - 'draw string ' xp0+0.07*dxyp ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br 4' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr 4' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* - if ( str4 != '' ) - 'set string 1 tl 4' - 'draw string ' xp0+0.07*dxyp ' ' yp0 -0.75*size ' ' str4 - endif -* - return - -* ------------------------------------------------------------------------------ - function showtime (itime) -* -* Get date and time in preferred format -* -* Parameter list : -* -* itime Discrete time counter -* - 'set t ' itime - 'query time' - gradsdate = subwrd(result,3) - test = substr ( gradsdate, 3, 1 ) - if ( test='Z' ) - year = substr ( gradsdate, 9, 4 ) - mnth = substr ( gradsdate, 6, 3 ) - day = substr ( gradsdate, 4, 2 ) - hour = substr ( gradsdate, 1, 2 ) - min = '00' - else - year = substr ( gradsdate, 12, 4 ) - mnth = substr ( gradsdate, 9, 3 ) - day = substr ( gradsdate, 7, 2 ) - hour = substr ( gradsdate, 1, 2 ) - min = substr ( gradsdate, 4, 2 ) - endif - - month= '??' - if (mnth='JAN'); month= '01'; endif; - if (mnth='FEB'); month= '02'; endif; - if (mnth='MAR'); month= '03'; endif; - if (mnth='APR'); month= '04'; endif; - if (mnth='MAY'); month= '05'; endif; - if (mnth='JUN'); month= '06'; endif; - if (mnth='JUL'); month= '07'; endif; - if (mnth='AUG'); month= '08'; endif; - if (mnth='SEP'); month= '09'; endif; - if (mnth='OCT'); month= '10'; endif; - if (mnth='NOV'); month= '11'; endif; - if (mnth='DEC'); month= '12'; endif; - - if ( test='Z' ) - vdate = year '/' month '/' day ' ' hour 'z' - else - vdate = year '/' month '/' day ' ' hour ':' min 'z' - endif -* - return vdate diff --git a/model/aux/spec.gs b/model/aux/spec.gs deleted file mode 100644 index 2efac30a5..000000000 --- a/model/aux/spec.gs +++ /dev/null @@ -1,825 +0,0 @@ -* -* spec.gs : GrADS plots of wave spectra -* ---------------------------------------------------------------- -* version 2: color of bw option added -* -* This is a generic grads scripts that runs without modifications -* for arbitary numbers of output locations and times. If one plot -* is asked for, a page filling spectrum is plotted. If more are -* asked for, spectral are grouped per time, with 4 or six plots -* on the page. -* -* Scripts and files used : -* colorset.gs : Sets up shading colors -* spec_ids : Grid and center ID's, defaults if not given -* ww3.spec.grads : GrADS data file. -* ww3.spec.ctl : GrADS control file. -* ww3.mean.grads : Suplemental GrAds data file. -* -* The files ww3.* are generated automatically by gx_outp -* (WAVEWATCH postprocessor). -* -* *** NOTE it is expected that gx_outp produces spectra at -* level = 1, this is not checked internally -* *** NOTE it is expected that the point name does not contains -* spaces, othewise mean parameters will be clobbered -* -* General set up - - - - - - - - - - - - - - - - - - - - - - - - - -* - display=white -* -* color : color or b&w [yes/---] -* polar : polar repres. [yes/---] -* - color = 'yes' - polar = 'yes' -* - if ( polar = 'yes' ) -* -* dth : grid directional increment for polar plot -* dfr : grid frequency increment for polar plot -* fmx : maximum frequency in polar plot -* - dth = 15 - dfr = 0.05 - fmx = 0.25 - else -* -* thoff : direction at bottom of plot -* dth : grid directional increment for Cartesian plot -* dfr : grid frequency increment for Cartesian plot -* fmn : maximum frequency in Cartesian plot -* fmx : minimum frequency in Cartesian plot -* - thoff = -180. - dth = 45. - dfr = 0.05 - fmn = 0.0412 - fmx = 0.4056 -* fmn = 0.04 -* fmx = 0.25 - endif - -* - 'set display color ' display - 'clear' - 'run colorset.gs' -* -* ID strings from file - - - - - - - - - - - - - - - - - - - - - - -* - result = read (spec_ids) - OK = sublin(result,1) - if ( OK = '0' ) - grid_ID = sublin(result,2) - else - grid_ID = 'unidentified grid' - endif -* - result = read (spec_ids) - OK = sublin(result,1) - if ( OK = '0' ) - center_ID = sublin(result,2) ', ' - else - center_ID = '' - endif -* -* Current date and time - - - - - - - - - - - - - - - - - - - - - -* - gdate="yyyy/mm/dd" - '!date -u "+%Y/%m/%d" > tmp_grads_gdate' - result = read (tmp_grads_gdate) - gdate = sublin(result,2) - '!rm -f tmp_grads_gdate' -* - center_ID = center_ID gdate -* -* Get size of page - - - - - - - - - - - - - - - - - - - - - - - - -* - 'q gxinfo' - line = sublin(result,2) - xmax = subwrd(line,4) - ymax = subwrd(line,6) -* -* Print initial info to screen - - - - - - - - - - - - - - - - - - -* - say ' ' - say '-----------------------' - say '*** Running spec.gs ***' - say '-----------------------' - say ' ' - say 'Grid ID : ' grid_ID - say 'Center ID : ' center_ID - say 'Page : ' xmax ' by ' ymax -* -* Open data file - - - - - - - - - - - - - - - - - - - - - - - - - -* - 'open ww3.spec' -* -* Get some info for file - - - - - - - - - - - - - - - - - - - - - -* - 'q file 1' - line = sublin(result,5) - ntime = subwrd(line,12) - line = sublin(result,6) - nloc = subwrd(line,5) -* - say 'Nr. of times : ' ntime - say 'Nr. of loc. : ' nloc -* - iloc = 1 - while ( iloc <= nloc ) - iline = 6 + iloc - line = sublin(result,iline) - par_ID.iloc = subwrd(line,1) - loc_ID.iloc = substr(line,21,10) - say ' location ' iloc ' is called ' loc_ID.iloc ' and stored as ' par_ID.iloc - iloc = iloc + 1 - endwhile -* -* loop over time and location to get mean pars and max - - - - - - -* - say ' ' - say 'Reading mean data and getting maximum spectral density ...' - 'set gxout stat' -* - fmin = 1.e20 - fmax = -1.e20 - 'set lev 1' -* - itime = 1 - while ( itime <= ntime ) -* - 'set t ' itime - say ' processing time ' showtime(itime) -* - iloc = 1 - while ( iloc <= nloc ) -* - result = read (ww3.mean.grads) - line = sublin(result,2) - ua.iloc.itime = subwrd(line,5) - ux.iloc.itime = subwrd(line,6) - uy.iloc.itime = subwrd(line,7) - ca.iloc.itime = subwrd(line,9) - cx.iloc.itime = subwrd(line,10) - cy.iloc.itime = subwrd(line,11) - hs.iloc.itime = subwrd(line,12) - gr.iloc.itime = subwrd(line,13) -* -* say result -* say iloc ' ' itime ' ' hs.iloc.itime -* say ua.iloc.itime ' ' ux.iloc.itime ' ' uy.iloc.itime -* say ca.iloc.itime ' ' cx.iloc.itime ' ' cy.iloc.itime -* - 'd ' par_ID.iloc - line = sublin(result,8) - lmin = subwrd(line,4) - lmax = subwrd(line,5) - if ( lmin < fmin) ; fmin = lmin ; endif - if ( lmax > fmax) ; fmax = lmax ; endif -* -* say result -* say fmin ' ' fmax ' ' lmin ' ' lmax -* - iloc = iloc + 1 -* - endwhile -* - itime = itime + 1 -* - endwhile -* - say ' ' - say 'Done, min and max for spectrum are ' fmin ' and ' fmax -* -* Generic page setup - - - - - - - - - - - - - - - - - - - - - - - -* - say ' ' - say 'Setting up the page ...' -* - st1 = '' - st2 = '' - st3 = '' - st4 = '' -* - if ( nloc = 1 ) - ntest = ntime - itype = 0 - say ' Single location, location ID in header.' - else - ntest = nloc - itype = 1 - say ' Multiple locations, time ID in header.' - endif -* - if ( ntest = 1 ) - npan = 1 - else - if ( ntest <= 4 ) - npan = 4 - else - npan = 6 - endif - endif - say ' Putting ' npan ' panels on a page.' -* -* settings for 1 panel ... -* - if ( npan = 1 ) -* - xtc = 0.5 * xmax - yt1 = 9.1 - yt2 = 1.8 - yt3 = 2.0 - size1 = 0.25 - size2 = 0.12 - size3 = 0.12 - nc = 50 -* - pw = 6. - sx = 0. - sy = 0. - xp0 = 0.5 * ( xmax - pw ) - yp0 = 0.5 * ( ymax - pw ) -* - endif -* -* settings for 4 panel ... -* - if ( npan = 4 ) -* - xtc = 0.5 * xmax - yt1 = 10.0 - yt2 = 1.0 - yt3 = 1.2 - size1 = 0.22 - size2 = 0.12 - size3 = 0.12 - nc = 35 -* - pw = 3.6 - sx = 0.2 - sy = 0.5 - xp0 = 0.5 * ( xmax - sx ) - pw - yp0 = 0.5 * ( ymax + sy ) -* - endif -* -* settings for 6 panel ... -* - if ( npan = 6 ) -* - xtc = 0.5 * xmax - yt1 = 10.7 - yt2 = 0.2 - yt3 = 0.4 - size1 = 0.20 - size2 = 0.12 - size3 = 0.12 - nc = 35 -* - pw = 3.0 - sx = 0.2 - sy = 0.3 - xp0 = 0.5 * ( xmax - sx ) - pw - yp0 = 7.3 -* - endif -* -* Actual plotting loop - - - - - - - - - - - - - - - - - - - - - - -* - say ' ' - say 'Starting actual plotting ...' -* - ipage = 0 - ipan = 1 - xp = xp0 - yp = yp0 -* - i = 1 - while ( i <= ntime ) - 'set t ' i -* - j = 1 - while ( j <= nloc ) -* -* ... new page ... -* - if ( ipan = 1 ) -* - ipage = ipage + 1 - say ' Starting with page ' ipage -* - if ( ipage > 1 ) - iplot = ipage - 1 - 'printim spec_plot_'iplot'.png' - 'clear' - endif - - if ( npan = 1 ) - page_ID = 'Spectrum for ' - else - page_ID = 'Spectra for ' - endif - if ( itype = 0 ) - page_ID = page_ID loc_ID.j - else - page_ID = page_ID showtime (i) - endif - 'set string 1 c 5' - 'set strsiz ' size1 - 'draw string ' xtc ' ' yt1 ' ' page_ID - 'set strsiz ' size2 - 'draw string ' xtc ' ' yt2 ' ' grid_ID - 'set strsiz ' size3 - 'draw string ' xtc ' ' yt3 ' ' center_ID -* - endif -* -* ... plot spectrum ... -* - if ( itype = 0 ) - st1 = showtime(i) - else - st1 = loc_ID.j - endif -* - if ( hs.j.i < 10 ) - st2 = 'Hs = ' hs.j.i 'm' - else - st2 = 'Hs = ' hs.j.i 'm' - endif -* - if ( npan < 6 ) -* - if ( ua.j.i < 10 ) - st3 = 'U = ' ua.j.i 'm/s' - else - st3 = 'U = ' ua.j.i 'm/s' - endif -* - if ( ca.j.i < 0.1 ) - st4 = gr.j.i - else - st4 = gr.j.i ' C = ' ca.j.i 'm/s' - endif -* - endif -* - if ( polar = 'yes' ) - dummy = plotspec (xp,yp,pw,dth,dfr,fmx,par_ID.j,fmax,st1,st2,st3,st4,nc,ua.j.i,ux.j.i,uy.j.i,ca.j.i,cx.j.i,cy.j.i,color) - else - dummy = plotspec_c (xp,yp,pw,thoff,dth,fmn,fmx,dfr,par_ID.j,fmax,st1,st2,st3,st4,nc,ua.j.i,ux.j.i,uy.j.i,ca.j.i,cx.j.i,cy.j.i,color) - endif -* -* ... update panel counter ... -* - ipan = ipan + 1 - xp = xp + pw + sx - if ( xp + pw > xmax ) - xp = xp0 - yp = yp - pw - sy - endif - if ( ipan > npan ) - ipan = 1 - xp = xp0 - yp = yp0 - endif -* - j = j + 1 - endwhile -* - if ( nloc > 1 ) - ipan = 1 - xp = xp0 - yp = yp0 - endif -* - i = i + 1 - endwhile -* -* End of operations - - - - - - - - - - - - - - - - - - - - - - - -* -* - say ' ' - say '----------------------' - say '*** End of spec.gs ***' - say '----------------------' - say ' ' -* - 'quit' -* -* End of main script - - - - - - - - - - - - - - - - - - - - - - - - -* ------------------------------------------------------------------------------ - function plotspec (xp0,yp0,dxyp,dxgrid,dygrid,ymax,spec,scale,str1,str2,str3,str4,strlen,u,ux,uy,c,cx,cy,color) -* -* Function to plot a spectrum at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* dxgrid Grid line increment for directions. -* dygrid Grid line increment for frequencies. -* ymax Maximum frequency. -* spec Spectrum to be plotted. -* scale Scale (division) factor for spectrum. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* ux/y Wind speed and components. -* cx/y Current speed and components. -* color color of b&w [yes/---] -* -* 0. Initializations -* - 'set grads off' - 'set lon -180 180' - 'set lat ' 90-ymax ' 90' -* -* 1. Set up plot location -* - 'set parea ' xp0 ' ' xp0+dxyp ' ' yp0 ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 17 - factor = 2 - level=1.001 - levels='' -* - while ( i > 0 ) - level = level / factor - levels = level ' ' levels - i = i - 1 - endwhile -* -* 3. Plot spectrum -* - 'set mproj nps' - 'set grid off' -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38' - 'd ' spec'/'scale - cblack = 1 - current = 65 - wind = 64 - else - cblack = 3 - current = 66 - wind = 63 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set clevs ' levels - 'd ' spec'/'scale -* -* 4. Plot grid lines manually to avoid bug -* - if ( color = 'yes' ) - 'set line 66 5 3' - else - 'set line 66 1 3' - endif -* - x = 0 - while ( x < 360+0.1*dxgrid ) - 'q ll2xy 'x' '90.-dygrid - x1 = subwrd(result,1) - y1 = subwrd(result,2) - 'q ll2xy 'x' '90.-ymax - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - x = x + dxgrid - endwhile -* - dx = 5 - y = dygrid - while ( y < ymax + 0.1*dygrid ) - x = 0 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - while ( x < 360 ) - x = x+dx - x1 = x2 - y1 = y2 - 'q ll2xy 'x' '90.-y - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' ' y1 ' ' x2 ' ' y2 - endwhile - y = y + dygrid - endwhile -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set clevs ' levels - 'd ' spec'/'scale -* -* 5. Plot current and wind vector -* - xc = xp0 + 0.5*dxyp - yc = yp0 + 0.5*dxyp -* -* 5.a current -* - 'set line ' current ' 1 6' -* - cmax = 1.5 - cmin = 0.1 - if ( c > cmin ) - if ( c < cmax ) - dc = 0.375 * (dygrid/ymax) * dxyp * c / cmax - else - dc = 0.375 * (dygrid/ymax) * dxyp - endif - dcx = dc * cx / c - dcy = dc * cy / c - x2 = xc - dcx - y2 = yc - dcy - x1 = xc + dcx - y1 = yc + dcy -* -* 'draw line ' x2 ' ' y2 ' ' x1 ' ' y1 -* - 'q xy2w 'x1' 'y1 - lon = subwrd(result,3) - lat = subwrd(result,6) - lonh = lon + 10 - lath = 90. - 0.75*(90.-lat) - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 - lonh = lon - 10 - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 -* - endif -* -* 5.b wind -* - 'set line ' wind ' 1 6' -* - umax = 20. - umin = 2.5 - if ( u > umin ) - if ( u < umax ) - du = 0.375 * (dygrid/ymax) * dxyp * u / umax - else - du = 0.375 * (dygrid/ymax) * dxyp - endif - dux = du * ux / u - duy = du * uy / u - x2 = xc - dux - y2 = yc - duy - x1 = xc + dux - y1 = yc + duy -* - 'draw line ' x2 ' ' y2 ' ' x1 ' ' y1 -* - 'q xy2w 'x1' 'y1 - lon = subwrd(result,3) - lat = subwrd(result,6) - lonh = lon + 10 - lath = 90. - 0.75*(90.-lat) - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 - lonh = lon - 10 - 'q ll2xy 'lonh' 'lath - x2 = subwrd(result,1) - y2 = subwrd(result,2) - 'draw line ' x1 ' 'y1 ' ' x2 ' ' y2 -* - endif -* -* 6. ID text around spectrum -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl 4' - 'draw string ' xp0 ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br 4' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr 4' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* - if ( str4 != '' ) - 'set string 1 tl 4' - 'draw string ' xp0 ' ' yp0 -0.75*size ' ' str4 - endif -* - return - -* ------------------------------------------------------------------------------ - function plotspec_c (xp0,yp0,dxyp,xoff,dx,ymin,ymax,dy,spec,scale,str1,str2,str3,str4,strlen,u,ux,uy,c,cx,cy,color) -* -* Function to plot a spectrum at a given location on the page with identifying -* output around it -* -* Parameter list : -* -* x/yp0 Lower left corner of the plot in paper coordinates. -* dxy Size of the plot in paper coordinates. -* xoff Shift of first frequency (if 0, axis from 0-360 cartesian) -* dx Directional increment (axis). -* ymin Minimum frequency. -* ymax Maximum frequency. -* dy Frequency increment (axis). -* spec Spectrum to be plotted. -* scale Scale (division) factor for spectrum. -* strN Strings around the plot, top left, clockwise, set to '' -* to deactivate -* strlen Number of charcters from left to right, used to scale text -* ux/y Wind speed and components. -* cx/y Current speed and components. -* -* 0. Initializations -* - 'set grads off' - 'set lon ' xoff-270 ' ' xoff+90 - 'set lat ' 90-ymax ' ' 90-ymin -* -* 1. Set up plot location -* - 'set parea ' xp0+0.07*dxyp ' ' xp0+dxyp ' ' yp0+0.05*dxyp ' ' yp0+dxyp -* -* 2. Set up contour intervals -* - i = 15 - factor = 2 - level=1.001 - levels='' -* - while ( i > 0 ) - level = level / factor - levels = level ' ' levels - i = i - 1 - endwhile -* -* 3. Plot spectrum -* - 'set mproj scaled' - 'set xyrev on' - 'set xflip on' - 'set grid off' - 'set xlab off' - 'set ylab off' - labsize = dxyp / strlen / 1.25 - 'set ylopts 1 4 ' labsize - 'set ylint ' dx - 'set xlint ' dy -* - if ( color = 'yes' ) - 'set gxout shaded' - 'set clevs ' levels - 'set ccols 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38' - 'd ' spec'/'scale - cblack = 1 - else - cblack = 3 - endif -* - 'set gxout contour' - 'set cthick ' cblack - 'set ccolor 60' - 'set clab off' - 'set clevs ' levels - 'd ' spec'/'scale -* -* 4. Plot axes manually -* - freq = 0. - 'set line 1 1 4' - 'set string 1 c 4' - 'set strsiz ' labsize -* - while ( freq <= ymax ) - if ( freq >= ymin ) - xt = xp0 + 0.07*dxyp + 0.93*dxyp * ( freq - ymin ) / ( ymax - ymin ) - 'draw line ' xt ' ' yp0+1.5*labsize ' ' xt ' ' yp0 + 0.05*dxyp - 'draw string ' xt ' ' yp0+0.5*labsize ' ' freq - endif - freq = freq + dy - endwhile -* - thmin = xoff - thmax = xoff + 360. - th = 0. -* - while ( th > thmin ) - th = th - dx - endwhile -* - 'set string 1 r 4' - while ( th <= thmax ) - if ( th >= thmin ) - yt = yp0 + 0.05*dxyp + 0.95*dxyp * ( th - thmin ) / ( thmax - thmin ) - 'draw line ' xp0+0.07*dxyp ' ' yt ' ' xp0+0.07*dxyp-0.5*labsize ' ' yt - 'draw string ' xp0+0.07*dxyp-1.0*labsize ' ' yt ' ' th - endif - th = th + dx - endwhile -* -* 5. Plot current and wind vector -* -* 6. ID text around spectrum -* - size = dxyp / strlen - 'set strsiz ' size -* - if ( str1 != '' ) - 'set string 1 bl 4' - 'draw string ' xp0+0.07*dxyp ' ' yp0+dxyp+0.75*size ' ' str1 - endif -* - if ( str2 != '' ) - 'set string 1 br 4' - 'draw string ' xp0+dxyp ' ' yp0+dxyp+0.75*size ' ' str2 - endif -* - if ( str3 != '' ) - 'set string 1 tr 4' - 'draw string ' xp0+dxyp ' ' yp0 -0.75*size ' ' str3 - endif -* - if ( str4 != '' ) - 'set string 1 tl 4' - 'draw string ' xp0+0.07*dxyp ' ' yp0 -0.75*size ' ' str4 - endif -* - return - -* ------------------------------------------------------------------------------ - function showtime (itime) -* -* Get date and time in preferred format -* -* Parameter list : -* -* itime Discrete time counter -* - 'set t ' itime - 'query time' - gradsdate = subwrd(result,3) - test = substr ( gradsdate, 3, 1 ) - if ( test='Z' ) - year = substr ( gradsdate, 9, 4 ) - mnth = substr ( gradsdate, 6, 3 ) - day = substr ( gradsdate, 4, 2 ) - hour = substr ( gradsdate, 1, 2 ) - min = '00' - else - year = substr ( gradsdate, 12, 4 ) - mnth = substr ( gradsdate, 9, 3 ) - day = substr ( gradsdate, 7, 2 ) - hour = substr ( gradsdate, 1, 2 ) - min = substr ( gradsdate, 4, 2 ) - endif - - month= '??' - if (mnth='JAN'); month= '01'; endif; - if (mnth='FEB'); month= '02'; endif; - if (mnth='MAR'); month= '03'; endif; - if (mnth='APR'); month= '04'; endif; - if (mnth='MAY'); month= '05'; endif; - if (mnth='JUN'); month= '06'; endif; - if (mnth='JUL'); month= '07'; endif; - if (mnth='AUG'); month= '08'; endif; - if (mnth='SEP'); month= '09'; endif; - if (mnth='OCT'); month= '10'; endif; - if (mnth='NOV'); month= '11'; endif; - if (mnth='DEC'); month= '12'; endif; - - if ( test='Z' ) - vdate = year '/' month '/' day ' ' hour 'z' - else - vdate = year '/' month '/' day ' ' hour ':' min 'z' - endif -* - return vdate diff --git a/model/aux/spec_ids.gen b/model/aux/spec_ids.gen deleted file mode 100644 index 20a982b48..000000000 --- a/model/aux/spec_ids.gen +++ /dev/null @@ -1,2 +0,0 @@ -unidentified test (set in file spec_ids) -WAVEWATCH III TEST diff --git a/model/bin/comp.Altix b/model/bin/comp.Altix deleted file mode 100755 index 5e0d1116c..000000000 --- a/model/bin/comp.Altix +++ /dev/null @@ -1,191 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - opt="-c -fast -fp-model source -assume byterecl -convert big_endian -module $path_m" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.Altix_debug b/model/bin/comp.Altix_debug deleted file mode 100755 index 4214375eb..000000000 --- a/model/bin/comp.Altix_debug +++ /dev/null @@ -1,194 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - opt="-c -CB -O0 -fpe0 -fp-model source -traceback -assume byterecl -convert big_endian -module $path_m" - opt="-p -pg -g $opt" - opt="-check bounds -check uninit -ftrapuv -warn -warn interface $opt" - opt="-fno-alias -fno-fnalias -debug -check all -implicitnone -warn all -fp-stack-check -heap-arrays $opt" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.DATARMOR b/model/bin/comp.DATARMOR deleted file mode 100755 index 9276ab109..000000000 --- a/model/bin/comp.DATARMOR +++ /dev/null @@ -1,293 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - opt="-c -module $path_m" - - -################################################################################ -# *** System-dependant instructions # -# -xHost : Generates instructions for the highest instruction set available on # -# the compilation host processor # -# -xcore-avx2 : Intel Advanced Vector Extensions 2 # -# -no-fma : Generates separate multiply and add instructions with intermediate # -# rounding # -# # -# The value for must be lower case on Linux or OS X # -################################################################################ - opt="$opt -xHost -no-fma" - - -################################################################################ -# *** Optimization levels # -# -O0 : No optimizations applied # -# -O1 : Provides a minimum of statement–level optimizations # -# -O2 : Enables basic block level optimizations # -# -O3 : Adds loop unrolling and global optimizations at the function level # -# -O4 : Adds automatic inlining of routines contained in the same file # -# -ip : Enables interprocedural optimizations for single-file compilation # -# # -# Debugging with -g does not suppress -On, but -On limits -g in certain ways # -################################################################################ - opt="$opt -O3 -ip" - - -################################################################################ -# *** Profiling and debugging analysis # -# -p : Profiling # -# -pg : Profiling with statistics in gmon.out # -# -g : Compiles for debugging and performance analysis. # -# -debug all : Generates complete debugging information # -# # -# The compiler options -p, -pg, or -xpg should not be used to compile # -# multi-threaded programs, because the runtime support for these options is # -# not thread-safe. If a program that uses multiple threads is compiled with # -# these options invalid results or a segmentation fault could occur at runtime # -# If you compile with -pg, then be sure to link with -pg. # -################################################################################ - opt="$opt -p" -# opt="$opt -g -debug all" - - -################################################################################ -# *** Warning messages # -# -warn all : Specifies all diagnostic messages to be issued by the compiler # -# -warn declarations : Enables warnings about any undeclared names. Equivalent # -# to -implicitnone # -################################################################################ -# opt="$opt -warn all" - - -################################################################################ -# *** Check messages # -# -check all : Checks for all conditions at run time # -# -check noarg_temp_created : Disables message for temporary array created # -################################################################################ -# opt="$opt -check all -check noarg_temp_created - - -################################################################################ -# *** Numbers format # -# -fp-model precise : Disables optimizations that are not value-safe on # -# floating-point data and rounds intermediate results to # -# source-defined precision # -# -assume byterecl : Defines the record length in bytes for the OPEN statement # -# RECL specifier in unformatted files # -# -convert big-endian: Specifies that the format will be big endian for # -# integer data and big endian IEEE floating-point for # -# real and complex data # -# -fp-stack-check : Generates extra code after every function call to ensure # -# that the floating-point stack is in the expected state # -################################################################################ - opt="$opt -fp-model precise -assume byterecl -convert big_endian" -# opt="$opt -fp-stack-check" - - -################################################################################ -# *** Aliasing # -# -fno-alias : Aliasing during a procedure call is not assumed # -# -fno-fnalias : Aliasing is not assumed within functions, but it is assumed # -# across calls # -################################################################################ - opt="$opt -fno-alias -fno-fnalias" - - -################################################################################ -# *** Memory setting # -# -heap-arrays : Puts automatic arrays and arrays for temporary computations # -# on the heap instead of the stack # -# -traceback : Issue a stack trace if a severe error occurs in execution # -# # -# If you compile with -traceback, then be sure to link with -traceback # -# The heap is memory set aside for dynamic allocation # -# The stack is the memory set aside as scratch space for a thread of execution # -# Each thread gets a stack, while there is only one heap for the application # -################################################################################ -# opt="$opt -heap-arrays -traceback" - - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=ifort - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -qopenmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.DATARMOR_debug b/model/bin/comp.DATARMOR_debug deleted file mode 100755 index 2cea76574..000000000 --- a/model/bin/comp.DATARMOR_debug +++ /dev/null @@ -1,293 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - opt="-c -module $path_m" - - -################################################################################ -# *** System-dependant instructions # -# -xHost : Generates instructions for the highest instruction set available on # -# the compilation host processor # -# -xcore-avx2 : Intel Advanced Vector Extensions 2 # -# -no-fma : Generates separate multiply and add instructions with intermediate # -# rounding # -# # -# The value for must be lower case on Linux or OS X # -################################################################################ - opt="$opt -xHost -no-fma" - - -################################################################################ -# *** Optimization levels # -# -O0 : No optimizations applied # -# -O1 : Provides a minimum of statement–level optimizations # -# -O2 : Enables basic block level optimizations # -# -O3 : Adds loop unrolling and global optimizations at the function level # -# -O4 : Adds automatic inlining of routines contained in the same file # -# -ip : Enables interprocedural optimizations for single-file compilation # -# # -# Debugging with -g does not suppress -On, but -On limits -g in certain ways # -################################################################################ - opt="$opt -O0 -ip" - - -################################################################################ -# *** Profiling and debugging analysis # -# -p : Profiling # -# -pg : Profiling with statistics in gmon.out # -# -g : Compiles for debugging and performance analysis. # -# -debug all : Generates complete debugging information # -# # -# The compiler options -p, -pg, or -xpg should not be used to compile # -# multi-threaded programs, because the runtime support for these options is # -# not thread-safe. If a program that uses multiple threads is compiled with # -# these options invalid results or a segmentation fault could occur at runtime # -# If you compile with -pg, then be sure to link with -pg. # -################################################################################ - opt="$opt -p" - opt="$opt -g -debug all" - - -################################################################################ -# *** Warning messages # -# -warn all : Specifies all diagnostic messages to be issued by the compiler # -# -warn declarations : Enables warnings about any undeclared names. Equivalent # -# to -implicitnone # -################################################################################ - opt="$opt -warn all" - - -################################################################################ -# *** Check messages # -# -check all : Checks for all conditions at run time # -# -check noarg_temp_created : Disables message for temporary array created # -################################################################################ - opt="$opt -check all -check noarg_temp_created" - - -################################################################################ -# *** Numbers format # -# -fp-model precise : Disables optimizations that are not value-safe on # -# floating-point data and rounds intermediate results to # -# source-defined precision # -# -assume byterecl : Defines the record length in bytes for the OPEN statement # -# RECL specifier in unformatted files # -# -convert big-endian: Specifies that the format will be big endian for # -# integer data and big endian IEEE floating-point for # -# real and complex data # -# -fp-stack-check : Generates extra code after every function call to ensure # -# that the floating-point stack is in the expected state # -################################################################################ - opt="$opt -fp-model precise -assume byterecl -convert big_endian" - opt="$opt -fp-stack-check" - - -################################################################################ -# *** Aliasing # -# -fno-alias : Aliasing during a procedure call is not assumed # -# -fno-fnalias : Aliasing is not assumed within functions, but it is assumed # -# across calls # -################################################################################ - opt="$opt -fno-alias -fno-fnalias" - - -################################################################################ -# *** Memory setting # -# -heap-arrays : Puts automatic arrays and arrays for temporary computations # -# on the heap instead of the stack # -# -traceback : Issue a stack trace if a severe error occurs in execution # -# # -# If you compile with -traceback, then be sure to link with -traceback # -# The heap is memory set aside for dynamic allocation # -# The stack is the memory set aside as scratch space for a thread of execution # -# Each thread gets a stack, while there is only one heap for the application # -################################################################################ - opt="$opt -heap-arrays -traceback" - - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=ifort - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -qopenmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.Gnu b/model/bin/comp.Gnu deleted file mode 100755 index 087f43c5b..000000000 --- a/model/bin/comp.Gnu +++ /dev/null @@ -1,201 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the GNU compilers on any architecture. # -# # -# Timothy J. Campbell # -# October 2009 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Gnu compiler on Linux ------------------------------------------------------ -# 2.b.1 Build options and determine compiler name -# Note that all but GrADS output is forced to big endian data - -# Notes re: changing compilers (important) -# ...1) run cleaner scrip to get rid of old .mod and .o files -# ...2) change switch or remove makefile to force creation of new makefile -# ...3) use -c {compiler name} in run_test - -# Gnu: -# -Idir : where to search for .mod files -# -Jdir or -Mdir : where to put .mod files - - # compilation options - opt="-c -O3 -fno-second-underscore -ffree-line-length-none -fconvert=big-endian -J$path_m" -# opt="$opt -I$HOME/g2lib -I/opt/local/include" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=gfortran - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -fopenmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.Gnu_debug b/model/bin/comp.Gnu_debug deleted file mode 100755 index 3e8eb2c74..000000000 --- a/model/bin/comp.Gnu_debug +++ /dev/null @@ -1,201 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the GNU compilers on any architecture. # -# # -# Timothy J. Campbell # -# October 2009 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Gnu compiler on Linux ------------------------------------------------------ -# 2.b.1 Build options and determine compiler name -# Note that all but GrADS output is forced to big endian data - -# Notes re: changing compilers (important) -# ...1) run cleaner scrip to get rid of old .mod and .o files -# ...2) change switch or remove makefile to force creation of new makefile -# ...3) use -c {compiler name} in run_test - -# Gnu: -# -Idir : where to search for .mod files -# -Jdir or -Mdir : where to put .mod files - - # compilation options - opt="-c -g -O0 -fbounds-check -fbacktrace -fno-second-underscore -ffree-line-length-none -fconvert=big-endian -J$path_m" -# opt="$opt -I$HOME/g2lib -I/opt/local/include" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=gfortran - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -fopenmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.Intel b/model/bin/comp.Intel deleted file mode 100755 index 5491ecb56..000000000 --- a/model/bin/comp.Intel +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 12 on Xeon Westmere # -# - On zeus the -list option slows down the compilation time by an order # -# of magnitude. For this section 1.c is added. # -# # -# Hendrik L. Tolman # -# June 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list=' -list' - list= - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - opt="-c $list -O3 -assume byterecl -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" -# opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" - - if [ "$name" != 'ww3_gspl' ] - then - opt="$opt -convert big_endian" - fi - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp=ifort - fi - - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.Intel_debug b/model/bin/comp.Intel_debug deleted file mode 100755 index ec28fcf2b..000000000 --- a/model/bin/comp.Intel_debug +++ /dev/null @@ -1,203 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - - opt="-c -xCORE-AVX2 -O0 -fno-alias -fp-model precise -assume byterecl -convert big_endian -no-fma -ip -module $path_m" - opt="-CB -traceback $opt" - opt="-p -pg -g $opt" - opt="-check bounds -check uninit -ftrapuv -warn -warn interface $opt" - opt="-fno-alias -fno-fnalias -debug -check all -implicitnone -warn all -fp-stack-check -heap-arrays $opt" - opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp=ifort - fi - - else - comp=ifort - fi - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.Lahey b/model/bin/comp.Lahey deleted file mode 100755 index 22c14df6a..000000000 --- a/model/bin/comp.Lahey +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Lahey lf95 compiler version 8.1 and up. # -# # -# Hendrik L. Tolman # -# July 2013 # -# # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Lahey compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - opt="-c --lst --fast -M $path_m" -# opt="-c --lst -g --trap --chk --chkglobal -M $path_m" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=lf95 -Lmpi - else - comp=lf95 - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt i--openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'Encountered' $name.err | grep 'errors' | awk '{ print $2}'` - nr_war=`grep 'Encountered' $name.err | grep 'errors' | awk '{ print $4}'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.Mpt b/model/bin/comp.Mpt deleted file mode 100755 index 8898b0d1e..000000000 --- a/model/bin/comp.Mpt +++ /dev/null @@ -1,191 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - opt="-c -O3 -fp-model precise -assume byterecl -convert big_endian -module $path_m" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp='ifort -lmpi' - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.Mpt_debug b/model/bin/comp.Mpt_debug deleted file mode 100755 index 866ccfb8f..000000000 --- a/model/bin/comp.Mpt_debug +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - opt="-c -O0 -assume byterecl -convert big_endian -module $path_m" - opt="-p -pg -g $opt" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp='ifort -lmpi' - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.NEC b/model/bin/comp.NEC deleted file mode 100755 index c5fcebcfe..000000000 --- a/model/bin/comp.NEC +++ /dev/null @@ -1,209 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 - Customised for compilation on the # -# NEC SX6/SX8 supercomputer using the sxf90 compiler # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# # -# Hendrik L. Tolman # -# February 2005 # -# # -# Modification history: # -# # -# 05-Mar-2008 Modified original compile script for use on NEC. # -# (Chris Bunney, UK Met Office) # -# # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# sxf90 cross compiler under Linux-------------------------------------------- -# 2.b.1 Build options and determine compiler name - -# compiler flags description: -# -c Compilation only (no link) -# -f2003 Compile to Fortran 2003 standard. -# -Chopt Use highest level of vector optimisation. -# -Wf'-pvctl vwork=stack' Use the stack for vector work space. -# -Wf'-M noinv' Don't report invalid operation errors. -# -Wf'-M noflovf' Don't report floating point overflow errors. -# -Wf'-cont' Specifies to use an array pointer name or an assumed shape array -# name in the actual argument list or the input/output list contiguously. -# The compiler does not use a work array for the variable. -# -I Module include path - - opt="-c -f2003 -Chopt -Wf'-pvctl vwork=stack' -Wf'-M noinv' -Wf'-M noflovf' -Wf'-cont' -I $path_m" - -# If you have a large model with more than 5000 sea points, it might be necessary to increase the -# compiler's maximum vector loop size. If the loop size (default 5000) is less than the number of model sea -# points, you will get run time errors similar to "Loop count is greater than that assumed by the compiler:". -# To fix this un-comment the following line and set 'xxx' to be >= to number of model sea points: -# -# opt="$opt -Wf'-pvctl loopcnt=xxx'" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=sxmpif90 - else - comp=sxf90 - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - eval $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - -# if [ -s $name.lst ] -# then -# mv $name.lst $name.l -# fi - -# 2.b.3 Add test output to listing for later viewing - -# if [ -s $name.l ] -# then -# echo '------------' >> $name.l -# echo "$comp $opt" >> $name.l -# echo '------------' >> $name.l -# cat $name.out >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# cat $name.err >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - echo > /dev/null - - nr_err=`grep -i 'f[97][750]: error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep -i 'f[97][750]: warn' $name.err | wc -l | awk '{ print $1 }'` - - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.Portland b/model/bin/comp.Portland deleted file mode 100755 index 7c0dcb9e1..000000000 --- a/model/bin/comp.Portland +++ /dev/null @@ -1,237 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Portland pgf90 compiler versions 6 and up. # -# # -# Hendrik L. Tolman # -# February 2012 # -# # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Portland Group Inc FORTRAN on Redhad Linux -------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - opt="-c -Mlist -module $path_m" ; fast="yes" -# opt="-c -Mlist -fast -module $path_m" - -# opt="-c -O0 -g -traceback -Mbounds -Mchkfpstk -Mchkptr -Mchkstk -Mlist -module $path_m" ; fast= - - if [ "$name" != 'ww3_gspl' ] - then - opt="$opt -byteswapio" - fi - - if [ "$fast" = 'yes' ] - then - if [ "$name" = 'w3iogrmd' ] || [ "$name" = 'w3iogomd' ] - then - opt="-O3 $opt" - else - opt="-fast $opt" - fi - else - opt="-O3 $opt" - fi - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=pgf90 - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - echo > /dev/null - - grep inform $name.err | grep warnings | grep severes > $name.err2 - mv $name.err2 $name.err - err_lines=`wc -l $name.err | awk '{ print $1 }'` - - nr_inf=0 - nr_war=0 - nr_sev=0 - nr_fat=0 - - line=1 - while [ "$line" -le "$err_lines" ] - do - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $1}'` - nr_inf=$(($nr_inf + $nr_loc)) - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $3}'` - nr_war=$(($nr_war + $nr_loc)) - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $5}'` - nr_sev=$(($nr_sev + $nr_loc)) - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $7}'` - nr_fat=$(($nr_fat + $nr_loc)) - line=$(($line + 1)) - done - - nr_err=$(($nr_sev + $nr_fat)) - nr_war=$(($nr_war + $nr_inf)) - - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.SGI_Xeon_Intel b/model/bin/comp.SGI_Xeon_Intel deleted file mode 100755 index 875ed671e..000000000 --- a/model/bin/comp.SGI_Xeon_Intel +++ /dev/null @@ -1,201 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for an SGI Altix Linux cluster with Dual-core Xeon # -# processors (Woodcrest 5160). The compiler is Intel Fortran 10.1.1008. # -# # -# Hendrik L. Tolman # -# Fabrice Ardhuin # -# February 2008 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name -# Note that all but GrADS output is forced to big endian data -# -# options for fast executable on SGI Linux cluster with -# 3.0Ghz Intel Dual-core Xeon Processors(Woodcrest 5160) -# compiler used is Intel Fortran 10.1.1008 - - # compilation options - opt="-c -O3 -assume byterecl -convert big_endian -module $path_m" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - opt="-c -xT -ipo -O3 -assume byterecl -convert big_endian -module $path_m" - comp=mpiifort - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - -# if [ -s $name.lst ] -# then -# mv $name.lst $name.l -# fi - -# 2.b.3 Add test output to listing for later viewing - -# if [ -s $name.l ] -# then -# echo '------------' >> $name.l -# echo "$comp $opt" >> $name.l -# echo '------------' >> $name.l -# cat $name.out >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# cat $name.err >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - echo > /dev/null - - nr_err=`grep 'fortcom: Error:' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'fortcom: Warning:' $name.err | wc -l | awk '{ print $1 }'` - - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.cray_xc.Intel b/model/bin/comp.cray_xc.Intel deleted file mode 100755 index eedf15bba..000000000 --- a/model/bin/comp.cray_xc.Intel +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 12 on Xeon Westmere # -# - On zeus the -list option slows down the compilation time by an order # -# of magnitude. For this section 1.c is added. # -# # -# Hendrik L. Tolman # -# June 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list=' -list' - list= - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** -# *** (nothing to do here) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name -# Note that all but GrADS output is forced to big endian data - - opt="-c $list -module $path_m" - opt="$opt -xHost -O3 -ip -fno-alias -fp-model strict -no-fma -ftz" - opt="$opt -i4 -real-size 32" - opt="$opt -traceback" - - if [ "$name" != 'gx_outp' ] && [ "$name" != 'gx_outf' ] && \ - [ "$name" != 'ww3_gspl' ] - then - opt="$opt -convert big_endian -assume byterecl" - fi - - if [ "$mpi_mod" = 'yes' ] - then - comp=ftn - else - comp=ftn - fi - - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp -openmp-report=1" - fi - - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - -# if [ -s $name.l ] -# then -# echo '------------' >> $name.l -# echo "$comp $opt" >> $name.l -# echo '------------' >> $name.l -# cat $name.out >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# cat $name.err >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.cray_xc.Portland b/model/bin/comp.cray_xc.Portland deleted file mode 100755 index ba9252cf5..000000000 --- a/model/bin/comp.cray_xc.Portland +++ /dev/null @@ -1,223 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 12 on Xeon Westmere # -# - On zeus the -list option slows down the compilation time by an order # -# of magnitude. For this section 1.c is added. # -# # -# Hendrik L. Tolman # -# June 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list=' -Mlist' - list= - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** -# *** (nothing to do here) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name -# Note that all but GrADS output is forced to big endian data - - opt="-c $list -module $path_m" - opt="$opt -fastsse" - opt="$opt -i4 -r4" - opt="$opt -traceback" - - if [ "$name" != 'gx_outp' ] && [ "$name" != 'gx_outf' ] && \ - [ "$name" != 'ww3_gspl' ] - then - opt="$opt -byteswapio" - fi - - if [ "$mpi_mod" = 'yes' ] - then - comp=ftn - else - comp=ftn - fi - - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - echo > /dev/null - - grep inform $name.err | grep warnings | grep severes > $name.err2 - mv $name.err2 $name.err - err_lines=`wc -l $name.err | awk '{ print $1 }'` - - nr_inf=0 - nr_war=0 - nr_sev=0 - nr_fat=0 - - line=1 - while [ "$line" -le "$err_lines" ] - do - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $1}'` - nr_inf=$(($nr_inf + $nr_loc)) - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $3}'` - nr_war=$(($nr_war + $nr_loc)) - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $5}'` - nr_sev=$(($nr_sev + $nr_loc)) - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $7}'` - nr_fat=$(($nr_fat + $nr_loc)) - line=$(($line + 1)) - done - - nr_err=$(($nr_sev + $nr_fat)) - nr_war=$(($nr_war + $nr_inf)) - - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.cray_xt b/model/bin/comp.cray_xt deleted file mode 100755 index e8dc908ab..000000000 --- a/model/bin/comp.cray_xt +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Cray XT series. # -# # -# James D. Dykes # -# April 2010 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK - -# Cray compiler -------------------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - opt="-c -Mlist -fastsse -module $path_m" - - # seq implementation - comp=ftn - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - echo > /dev/null - - grep inform $name.err | grep warnings | grep severes > $name.err2 - mv $name.err2 $name.err - err_lines=`wc -l $name.err | awk '{ print $1 }'` - - nr_inf=0 - nr_war=0 - nr_sev=0 - nr_fat=0 - - line=1 - while [ "$line" -le "$err_lines" ] - do - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $1}'` - nr_inf=$(($nr_inf + $nr_loc)) - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $3}'` - nr_war=$(($nr_war + $nr_loc)) - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $5}'` - nr_sev=$(($nr_sev + $nr_loc)) - nr_loc=`sed -n "$line,${line}p" $name.err | awk '{ print $7}'` - nr_fat=$(($nr_fat + $nr_loc)) - line=$(($line + 1)) - done - - nr_err=$(($nr_sev + $nr_fat)) - nr_war=$(($nr_war + $nr_inf)) - - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.datamor.intel b/model/bin/comp.datamor.intel deleted file mode 100755 index c8f3c6246..000000000 --- a/model/bin/comp.datamor.intel +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 12 on Xeon Westmere # -# - On zeus the -list option slows down the compilation time by an order # -# of magnitude. For this section 1.c is added. # -# # -# Hendrik L. Tolman # -# June 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list=' -list' - list= - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - opt="-c $list -O3 -assume byterecl -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" -# opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" - - if [ "$name" != 'ww3_gspl' ] - then - opt="$opt -convert big_endian" - fi - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp=ifort - fi - - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.kubuntu.intel.mpich b/model/bin/comp.kubuntu.intel.mpich deleted file mode 100755 index 32654a206..000000000 --- a/model/bin/comp.kubuntu.intel.mpich +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the Intel ifort version 12 on Xeon Westmere # -# - On zeus the -list option slows down the compilation time by an order # -# of magnitude. For this section 1.c is added. # -# # -# Hendrik L. Tolman # -# June 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# 1.c Set listing option - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list=' -list' - list= - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - opt="-c $list -O3 -assume byterecl -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" -# opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" - - if [ "$name" != 'ww3_gspl' ] - then - opt="$opt -convert big_endian" - fi - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - which mpif90 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp=ifort - fi - - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.mac_pro_Intel b/model/bin/comp.mac_pro_Intel deleted file mode 100755 index 02a25cda1..000000000 --- a/model/bin/comp.mac_pro_Intel +++ /dev/null @@ -1,198 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is modified to work with the intel compiler on a mac pro. # -# NOTE: -g flag may result in link errors. Monte thinks this is a compiler # -# error. # -# # -# Hendrik L. Tolman # -# Monte Hanson # -# February 2008 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Intel compiler on Linux ---------------------------------------------------- -# 2.b.1 Build options and determine compiler name - - # compilation options - #opt="-c CB -list -O3 -assume byterecl -convert big_endian -module $path_m" - #opt="-c $list -assume byterecl -g -traceback -debug full -convert big_endian -use-asm -O3 -xSSE4.2 -module $path_m" - opt="-c -heap-arrays 20480 -assume byterecl -zero -O3 -mssse3 -convert big_endian -module $path_m" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - -# if [ -s $name.lst ] -# then -# mv $name.lst $name.l -# fi - -# 2.b.3 Add test output to listing for later viewing - -# if [ -s $name.l ] -# then -# echo '------------' >> $name.l -# echo "$comp $opt" >> $name.l -# echo '------------' >> $name.l -# cat $name.out >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# cat $name.err >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # - - - diff --git a/model/bin/comp.xlf b/model/bin/comp.xlf deleted file mode 100755 index d70dd014b..000000000 --- a/model/bin/comp.xlf +++ /dev/null @@ -1,228 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the IBM xlf compiler version 8.1.1.6 # -# on an RS6000 SP wth power4 processors. # -# # -# Hendrik L. Tolman # -# February 2005 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK - - -# IBM RS6000 SP with xlf ----------------------------------------------------- -# 2.b.1 Build options and determine compiler name -# This compiler expects the .f extension -# My compiler had problems optimizing xnlserv.f90 - - if [ -f $name.f90 ] - then - mv $name.f90 $name.f - fi - fext='f' - - # compilation options - opt="-c -qsource -O3 -qstrict -qarch=auto -qtune=auto -qcache=auto -qfloat=hsflt -I$path_m -qnosave" - -# debug=' -g -C -qcheck -qfltrap:enable -qsigtrap -qfullpath' - debug= - - opt="$opt$debug" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp="mpxlf90_r -q64" - else - comp="xlf90_r -q64" - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - comp="xlf90_r -q64" - opt="$opt -qsmp=noauto" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing -# For this compiler i need to get error information from the listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - sed -n '/^TOTAL UNR/,/^$/p' $name.l | head -3 > $name.err2 - fi - -# 2.b.3 Add test output to listing for later viewing - -# if [ -s $name.l ] -# then -# echo '------------' >> $name.l -# echo "$comp $opt" >> $name.l -# echo '------------' >> $name.l -# cat $name.out >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# cat $name.err >> $name.l 2> /dev/null -# echo '------------' >> $name.l -# fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - echo > /dev/null - - if [ -s $name.err2 ] - then - - nr_tot2="`tail -1 $name.err2 | awk '{ print $1}'`" - nr_unr2="`tail -1 $name.err2 | awk '{ print $2}'`" - nr_sev2="`tail -1 $name.err2 | awk '{ print $3}'`" - nr_err2="`tail -1 $name.err2 | awk '{ print $4}'`" - nr_war2="`tail -1 $name.err2 | awk '{ print $5}'`" - nr_inf2="`tail -1 $name.err2 | awk '{ print $6}'`" - - nr_err=$(($nr_unr2 + $nr_sev2)) - nr_war=$(($nr_err2 + $nr_war2)) - else - OK=1 - fi - - rm -f $name.err2 - -# End hardware / software dep. ------------- - - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/link.Gnu b/model/bin/link.Gnu deleted file mode 100755 index 6f496a65e..000000000 --- a/model/bin/link.Gnu +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the GNU compilers on any architecture. # -# # -# Timothy J. Campbell # -# October 2009 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" -# libs="-L/opt/local/lib -L$HOME/g2lib -lg2 -lw3 -lpng -ljasper" - opt="-o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=gfortran - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -fopenmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.Gnu_debug b/model/bin/link.Gnu_debug deleted file mode 100755 index 6f496a65e..000000000 --- a/model/bin/link.Gnu_debug +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the GNU compilers on any architecture. # -# # -# Timothy J. Campbell # -# October 2009 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" -# libs="-L/opt/local/lib -L$HOME/g2lib -lg2 -lw3 -lpng -ljasper" - opt="-o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=gfortran - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -fopenmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.Intel b/model/bin/link.Intel deleted file mode 100755 index d91226912..000000000 --- a/model/bin/link.Intel +++ /dev/null @@ -1,208 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 12 on nehalem. # -# processor. # -# # -# Hendrik L. Tolman # -# February 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-O3 -ip -o $prog" -# opt="-O3 -xSSE4.2 -ip -o $prog" -# opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" -# opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp='ifort -lmpi' - fi -# opt="-O3 -o $prog" - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.Intel_debug b/model/bin/link.Intel_debug deleted file mode 100755 index b1f59f4d2..000000000 --- a/model/bin/link.Intel_debug +++ /dev/null @@ -1,206 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="-L/appli/ddt/ddt-7.0.6/lib/64 -dlmalloc" - opt="-O0 -xCORE-AVX2 -o $prog" - opt="-Zp8 -tpp7 $opt" - opt="-p -pg -g $opt" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - which mpiifort 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp='ifort -lmpi' - fi -# opt="-O3 -o $prog" - else - comp=ifort - fi - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.Lahey b/model/bin/link.Lahey deleted file mode 100755 index d2e40ac0a..000000000 --- a/model/bin/link.Lahey +++ /dev/null @@ -1,196 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Lahey lf95 compiler version 8.1 and up. # -# # -# Hendrik L. Tolman # -# July 2013 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=lf95 - else - comp=lf95 - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmpi" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.Mpt b/model/bin/link.Mpt deleted file mode 100755 index 59e27936d..000000000 --- a/model/bin/link.Mpt +++ /dev/null @@ -1,198 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-O2 -o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp="ifort -lmpi" - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.Mpt_debug b/model/bin/link.Mpt_debug deleted file mode 100755 index 4a51e7e43..000000000 --- a/model/bin/link.Mpt_debug +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 8.1 on a Pentium 4 # -# processor. # -# # -# Hendrik L. Tolman # -# April 2015 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt=" -p -pg -g -O0 -o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp="ifort -lmpi" - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.NEC b/model/bin/link.NEC deleted file mode 100755 index 87408b524..000000000 --- a/model/bin/link.NEC +++ /dev/null @@ -1,194 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Link script for use in ad3 - Customised for compilation on the # -# NEC SX6/SX8 supercomputer using the sxf90 compiler # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# Hendrik L. Tolman # -# February 2005 # -# # -# Modification history: # -# # -# 05-Mar-2008 Modified original compile script for use on NEC. # -# (Chris Bunney, UK Met Office) # -# # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-f2003 -o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=sxmpif90 - else - comp=sxf90 - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - eval $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.Portland b/model/bin/link.Portland deleted file mode 100755 index 5bd265640..000000000 --- a/model/bin/link.Portland +++ /dev/null @@ -1,196 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Portland Group compilers on x86_64. # -# # -# Hendrik L. Tolman # -# February 2005 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=pgf90 - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.SGI_Xeon_Intel b/model/bin/link.SGI_Xeon_Intel deleted file mode 100755 index 9aaf053c5..000000000 --- a/model/bin/link.SGI_Xeon_Intel +++ /dev/null @@ -1,203 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for an SGI Altix Linux cluster with Dual-core Xeon # -# processors (Woodcrest 5160). The compiler is Intel Fortran 10.1.1008. # -# # -# Hendrik L. Tolman # -# Fabrice Ardhuin # -# February 2008 # - -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one -# -# options for fast executable on SGI Linux cluster with -# 3.0Ghz Intel Dual-core Xeon Processors(Woodcrest 5160) -# compiler used is Intel Fortran 10.1.1008 -# - libs="" - opt="-fast -o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpiifort - opt="-O3 -Zp8 -tpp7 -o $prog" - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.cray_xc.Intel b/model/bin/link.cray_xc.Intel deleted file mode 100755 index 59a37eb38..000000000 --- a/model/bin/link.cray_xc.Intel +++ /dev/null @@ -1,205 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 12 on nehalem. # -# processor. # -# # -# Hendrik L. Tolman # -# February 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name - - opt="-o $prog" - opt="$opt -xHost -O3 -ip -fno-alias -fp-model strict -no-fma -ftz" - opt="$opt -i4 -real-size 32" - opt="$opt -traceback" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=ftn - else - comp=ftn - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp -openmp-report=1" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - if [ "$ncep_grib_compile" = 'yes' ] - then -# GRIB libraries for this one - opt="$opt -convert big_endian -assume byterecl -prec-div -prec-sqrt -ip" - libs="$libs ${G2_LIB4} ${W3NCO_LIB4} ${BACIO_LIB4} ${JASPER_LIB} ${PNG_LIB} ${Z_LIB}" - fi - -# netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.cray_xc.Portland b/model/bin/link.cray_xc.Portland deleted file mode 100755 index 1c4ad99b7..000000000 --- a/model/bin/link.cray_xc.Portland +++ /dev/null @@ -1,199 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 12 on nehalem. # -# processor. # -# # -# Hendrik L. Tolman # -# February 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - opt="-o $prog" - opt="$opt -fastsse" - opt="$opt -i4 -r4" - opt="$opt -traceback" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=ftn - else - comp=ftn - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.cray_xt b/model/bin/link.cray_xt deleted file mode 100755 index e218b2932..000000000 --- a/model/bin/link.cray_xt +++ /dev/null @@ -1,191 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Cray XT series. # -# # -# James D. Dykes # -# April 2010 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-o $prog" - - # seq implementation - comp=ftn - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.kubuntu.intel.mpich b/model/bin/link.kubuntu.intel.mpich deleted file mode 100755 index e357cfc50..000000000 --- a/model/bin/link.kubuntu.intel.mpich +++ /dev/null @@ -1,210 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the Intel ifort version 12 on nehalem. # -# processor. # -# # -# Hendrik L. Tolman # -# February 2012 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# Intel compiler ------------------------------------------------------------ -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - - - # linking options - libs="" - opt="-O3 -ip -o $prog" -# opt="-O3 -xSSE4.2 -ip -o $prog" -# opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" -# opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - which mpif90 1> /dev/null 2> /dev/null - OK=$? - if [ $OK != 0 ] - then - comp='ifort -lmpi' - fi -# opt="-O3 -o $prog" - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -openmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.mac_pro_Intel b/model/bin/link.mac_pro_Intel deleted file mode 100755 index f74c1ca87..000000000 --- a/model/bin/link.mac_pro_Intel +++ /dev/null @@ -1,200 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# # -# - This version is modified to work with the intel compiler on a mac pro. # -# NOTE: -g flag may result in link errors. Monte thinks this is a compiler # -# error. # -# # -# Hendrik L. Tolman # -# Monte Hanson # -# February 2008 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" - opt="-o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=ifort - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -mp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.xlf b/model/bin/link.xlf deleted file mode 100755 index 712d8f54d..000000000 --- a/model/bin/link.xlf +++ /dev/null @@ -1,208 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the IBM xlf compiler version 8.1.1.6 # -# on an RS6000 SP wth power4 processors. # -# # -# Hendrik L. Tolman # -# February 2005 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# IBM RS 6000 xlf ---------------------------------------------------------- -# 3.a Build options and determine compiler name -# Note GRIB libraries for this one - - libs="" - opt="-o $prog -O3 -qstrict -qarch=auto -qtune=auto -qcache=auto -qfloat=hsflt -qnosave" - -# debug=' -g -C -qcheck -qfltrap:enable -qsigtrap -qfullpath' - debug= - - opt="$opt$debug" - - comp="xlf90_r -q64" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp="mpxlf90_r -q64" - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - comp="xlf90_r -q64" - opt="$opt -qsmp=noauto" - fi - - case $prog in - 'ww3_grib' ) libs="-L /nwprod/lib -l w3_4 -l bacio_4" ;; - * ) libs= ;; - esac - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/regtests/ww3_tp2.17/input/.ww3_multi_grdset_aa.inp.swp b/regtests/ww3_tp2.17/input/.ww3_multi_grdset_aa.inp.swp deleted file mode 100644 index 6eeb7a6015a3ad5f0015568120d83034a05123a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeHN-)kdP6uv9#uhsp5`z##SVp`oKlce3<7DZ~Cb^~r&lk8UUq26R}+M$z~ICs)) zAN+x!zAcFO4~U@nBDjy@n}2|)Ac7AfEC_=7DEs7h?o5(tx0Tg5@eX{MnLBgOJ@-4` zId@8L+qqV|LKh3O0>>F4e!hL`-wpTO_HSHP#h zyTIGPYd{0I3_J>)0d9edZ-GyM_ks6-w}3Z+>%cC+d`Z9_mI2FvW#DKArl=aY6n4pM zRiZAoG>Iuelxw!ubIDb_tu|HQ=7=2AKn~5%&r@l9UcviRcAR-zB&ZUGKZm)nzbAX%m z&RQjruaxma4S8-lFAN1B2A@&e|Zxt}=?$s{>4my1v}f+X5MR>G|& ziPnI4H=5p7KJPdyBy+iYcjAzw@6%S~xf-2mDGYXboG_3+h5P(CbUdOB5B=MUWWVow z%1s=g7PVjv#|oUMZWvKd>K*o7#?+6%0gO}Z^%ReK*n6F@2NEQ^!n2HrVSXt0C;%gD z2IFwQJ7$`;OejD4opMHXP1cTa56OaD;7j&S8{d&2XpFr`Q7?3rPthPS6U})+015B} zazU6I{lM#8#dqV2$unHRB|>&VWza~8e~2?I2TJ~pF<3fiEFp*8!ok5UP_0XGG*IV> zC&N|1P+7RLwp?2#Pt%sdOk}LwG$5tQ4EmbzWu@m1dVMAb1*M&2>Yhn*8ffKGdk^M4 z$lDBTe$42mp;XG3$}_aAx?TVmka{M#u!LCm27%X+F@!SRkHU`9TIrd@D68k7)kp?A z8X2Oo>yqW+dfl#y5F^Ys9P}v|^x7&il7<&0hv%}Ic|y~Wpo*Y!e-CD)*4|ct3Fr_* zL84=O=~U*~Km&uOmU;d>vwe1S7=b^MkkG{BOvF>;YBp`(4iZJJ#)orjMSKh z&^BGwO>Y0rh>0NLiyUE@UYET-g4qy82;S3Ro73 zE~T{?aq$9EBG8zQY3NTZl=GJ$msIE6&%B~DDUz_O5%72$R>xkX9+X&Znf@je=G`R3 zu?jTTMTn3aQmGiSc*1=d$)19|IT4{ms0%Tbq~S88;dA5@YJo0@c^*RlJfg%AXD<<{BDFo(Qg-4y~Zxt)OIbmANo8Sz_1`O?n$&4{*R$ zE>{!`m9Assx{`=uF4J@JZu*ib`-i!j^qrjz#y0O?=x=giNjm-A=yzWQ{aO5t&ME?SfbXvUt From c758e87e9b2025cc9af5ebb4745adedef6a00001 Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Mon, 8 Feb 2021 03:18:30 +0000 Subject: [PATCH 63/84] Extra TP field and direction/magnitude outputs. (#302) * Added new peak period (TP) gridded output field derived from the existing peak freq (FP0) internal field. * Added alternative direction/magitude convenrion output for directional fields in ww3_ounf * Update docs * Added TP output and alternative dir/mag directional output to ww3_tnc1 regtest. * Added TP output to ww3_outf. Also added to tp2.11 regtest. * Update ww3_gint for new TP field * Fixed circular dependency due to USEing w3odatmd and w3gdatmd in w3servmd * Removed VECTOR option from ww3_ounf.inp file - only user confiugurable via namelist file ww3_ounf.nml. * Fixed missing MPI communication setup for TP field * Switched (incorrect) TM01 field for TP field in regtest ww3_tp2.11 --- manual/eqs/output.tex | 2 + model/ftn/w3adatmd.ftn | 3 +- model/ftn/w3initmd.ftn | 6 +- model/ftn/w3iogomd.ftn | 16 ++- model/ftn/w3nmlounfmd.ftn | 2 + model/ftn/w3odatmd.ftn | 5 +- model/ftn/w3ounfmetamd.ftn | 149 ++++++++++++++++++------- model/ftn/w3servmd.ftn | 105 ++++++++++++++++- model/ftn/ww3_gint.ftn | 4 +- model/ftn/ww3_ounf.ftn | 52 +++++++-- model/ftn/ww3_outf.ftn | 27 ++++- model/inp/ww3_shel.inp | 1 + model/nml/ww3_ounf.nml | 2 + model/nml/ww3_shel.nml | 1 + regtests/ww3_tnc1/input/ounfmeta.inp | 14 ++- regtests/ww3_tnc1/input/ww3_ounf.inp | 2 +- regtests/ww3_tnc1/input/ww3_ounf.nml | 5 +- regtests/ww3_tnc1/input/ww3_shel.inp | 2 +- regtests/ww3_tnc1/input/ww3_shel.nml | 3 +- regtests/ww3_tp2.11/input/ww3_ounf.inp | 2 +- regtests/ww3_tp2.11/input/ww3_ounf.nml | 2 +- regtests/ww3_tp2.11/input/ww3_outf.inp | 28 +---- regtests/ww3_tp2.11/input/ww3_shel.inp | 2 +- regtests/ww3_tp2.11/input/ww3_shel.nml | 2 +- 24 files changed, 336 insertions(+), 101 deletions(-) diff --git a/manual/eqs/output.tex b/manual/eqs/output.tex index adcf49fe3..84ace1252 100644 --- a/manual/eqs/output.tex +++ b/manual/eqs/output.tex @@ -96,6 +96,8 @@ \subsection{~Output parameters} \label{sub:outpars} \item \textbf{SDMH} St Dev of MXC (STE) \item \textbf{SDMHC} St Dev of MXHC (STE) \item \textbf{WBT} Dominant wave breaking probability $b_T$ (\ref{eq:bt}) +\item \textbf{TP} Peak wave period, derived from reciprocal of peak freq +(\textbf{FP}). \end{list} \item{Spectral parameters (first 5 moments and wavenumbers). diff --git a/model/ftn/w3adatmd.ftn b/model/ftn/w3adatmd.ftn index 1c1d5a208..ada79edc5 100644 --- a/model/ftn/w3adatmd.ftn +++ b/model/ftn/w3adatmd.ftn @@ -1515,7 +1515,8 @@ CHECK_ALLOC_STATUS ( ISTAT ) END IF ! - IF ( OUTFLAGS( 2, 6) ) THEN + IF ( OUTFLAGS( 2, 6) .OR. OUTFLAGS( 2,18) ) THEN + ! TP output shares FP0 internal field with FP ALLOCATE ( WADATS(IMOD)%XFP0(NXXX), STAT=ISTAT ) CHECK_ALLOC_STATUS ( ISTAT ) ELSE diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index ee5927dd5..d8baa5b71 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -2116,7 +2116,8 @@ !/MPIT WRITE (NDST,9011) IH, ' 2/05', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! -!/MPI IF ( FLGRDALL( 2, 6) ) THEN +!/MPI IF ( FLGRDALL( 2, 6) .OR. FLGRDALL( 2,18) ) THEN +!/MPI ! TP output shares FP0 internal field with FP !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_SEND_INIT (FP0 (1),NSEALM , MPI_REAL, IROOT, & @@ -2920,7 +2921,8 @@ !/MPIT WRITE (NDST,9011) IH, ' 2/05', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! -!/MPI IF ( FLGRDALL( 2, 6) ) THEN +!/MPI IF ( FLGRDALL( 2, 6) .OR. FLGRDALL( 2,18) ) THEN +!/MPI ! TP output shares FP0 internal field with FP !/MPI IH = IH + 1 !/MPI IT = IT + 1 !/MPI CALL MPI_RECV_INIT (FP0 (I0),1,WW3_FIELD_VEC, IFROM, IT, & diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 4320f39c4..6cdd77e5e 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -57,6 +57,8 @@ !/ (Roberto Padilla-Hernandez & J.H. Alves) !/ 03-Nov-2020 : Factored out NAME matching into ( version 7.12 ) !/ seperate subroutine. (C. Bunney) +!/ 15-Jan-2020 : Added TP output based on exsiting ( version 7.12 ) +!/ FP internal field. (C. Bunney) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -800,6 +802,9 @@ CASE('WBT') I = 2 J = 17 + CASE('TP') ! Uses FP0 internally, as per FP + I = 2 + J = 18 ! ! Group 3 ! @@ -2653,7 +2658,8 @@ IF ( FLOGRD( 2, 3) ) T02 (ISEA) = UNDEF IF ( FLOGRD( 2, 4) ) T0M1 (ISEA) = UNDEF IF ( FLOGRD( 2, 5) ) T01 (ISEA) = UNDEF - IF ( FLOGRD( 2, 6) ) FP0 (ISEA) = UNDEF + IF ( FLOGRD( 2, 6) .OR. FLOGRD( 2,18) ) & + FP0 (ISEA) = UNDEF ! FP or TP IF ( FLOGRD( 2, 7) ) THM (ISEA) = UNDEF IF ( FLOGRD( 2, 8) ) THS (ISEA) = UNDEF IF ( FLOGRD( 2, 9) ) THP0 (ISEA) = UNDEF @@ -2868,7 +2874,9 @@ WRITE ( NDSOG ) T0M1(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 5 ) THEN WRITE ( NDSOG ) T01(1:NSEA) - ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 6 ) THEN + ELSE IF ( (IFI .EQ. 2 .AND. IFJ .EQ. 6) .OR. & + (IFI .EQ. 2 .AND. IFJ .EQ. 18) ) THEN + ! Note: TP output is derived from FP field. WRITE ( NDSOG ) FP0(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 7 ) THEN WRITE ( NDSOG ) THM(1:NSEA) @@ -3140,7 +3148,9 @@ READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) T0M1(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 5 ) THEN READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) T01(1:NSEA) - ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 6 ) THEN + ELSE IF ( (IFI .EQ. 2 .AND. IFJ .EQ. 6) .OR. & + (IFI .EQ. 2 .AND. IFJ .EQ. 18) ) THEN + ! Note: TP output is derived from FP field. READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) FP0(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 7 ) THEN READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) THM(1:NSEA) diff --git a/model/ftn/w3nmlounfmd.ftn b/model/ftn/w3nmlounfmd.ftn index 8b72fce7a..c3736f3c6 100644 --- a/model/ftn/w3nmlounfmd.ftn +++ b/model/ftn/w3nmlounfmd.ftn @@ -32,6 +32,7 @@ CHARACTER(1024) :: LIST CHARACTER(15) :: PARTITION LOGICAL :: SAMEFILE + LOGICAL :: VECTOR INTEGER :: TYPE END TYPE NML_FIELD_T @@ -267,6 +268,7 @@ FIELD%LIST = 'unset' FIELD%PARTITION = '0 1 2 3' FIELD%SAMEFILE = .TRUE. + FIELD%VECTOR = .TRUE. FIELD%TYPE = 3 ! read field namelist diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 175fe1f71..2f4fb21be 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -44,6 +44,8 @@ !/ for alternative partition methods. !/ (C. Bunney, UKMO) !/ 25-Sep-2020 : Flags for coupling restart ( version 7.10 ) +!/ 15-Jan-2020 : Added TP based on existing FP ( version 7.12 ) +!/ internal fields. (C. Bunney, UKMO) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -688,7 +690,7 @@ ! ! 2) Standard mean wave parameters ! - NOGE(2) = 17 + NOGE(2) = 18 ! IDOUT( 2, 1) = 'Wave height ' IDOUT( 2, 2) = 'Mean wave length ' @@ -707,6 +709,7 @@ IDOUT( 2, 15) = 'STD Space-Time Hmax' IDOUT( 2, 16) = 'STD ST Hmax^crest ' IDOUT( 2, 17) = 'Dominant wave bT ' + IDOUT( 2, 18) = 'Peak prd. (from fp)' ! IDOUT( 2,10) = 'Mean wave dir. a2b2' ! IDOUT( 2,11) = 'Mean dir. spr. a2b2' ! IDOUT( 2,12) = 'Windsea height(Sin)' diff --git a/model/ftn/w3ounfmetamd.ftn b/model/ftn/w3ounfmetamd.ftn index d968427e1..ad8f7f7d1 100644 --- a/model/ftn/w3ounfmetamd.ftn +++ b/model/ftn/w3ounfmetamd.ftn @@ -6,10 +6,12 @@ !/ | C. Bunney | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 02-Nov-2020 | +!/ | Last update : 26-Jan-2021 | !/ +-----------------------------------+ !/ !/ 02-Nov-2020 : Creation ( version 7.12 ) +!/ 26-Jan-2021 : Added TP and alternative dir/mag ( version 7.12 ) +!/ metadata for directional fields. !/ ! 1. Purpose : ! @@ -111,7 +113,7 @@ PUBLIC - LOGICAL :: DEBUG = .FALSE. + LOGICAL, PRIVATE :: DEBUG = .FALSE. CHARACTER(LEN=*), PARAMETER :: FN_META = "ounfmeta.inp" @@ -167,20 +169,23 @@ CHARACTER(LEN=30) :: DIRCOM ! Direction convention comment CHARACTER(LEN=128) :: PARTCOM ! Partitioning method comment + LOGICAL, PRIVATE :: VECTOR ! Vector or dir/mag for dir fields? + CONTAINS !/ ------------------------------------------------------------------- / - SUBROUTINE INIT_META() + SUBROUTINE INIT_META(VEC) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | C. Bunney | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 09-Nov-2020 | +!/ | Last update : 25-Jan-2021 | !/ +-----------------------------------+ !/ !/ 09-Nov-2020 : Creation ( version 7.12 ) +!/ 26-Jan-2021 : Added vector flag ( version 7.12 ) !/ ! ! 1. Purpose : @@ -189,6 +194,8 @@ ! !/ ------------------------------------------------------------------- / IMPLICIT NONE + + LOGICAL, INTENT(IN), OPTIONAL :: VEC !/ !/ ------------------------------------------------------------------- / !/ Local parameters @@ -196,6 +203,9 @@ LOGICAL :: FLGNML INTEGER :: I, J + VECTOR = .TRUE. + IF(PRESENT(VEC)) VECTOR = VEC + ! 1. Allocate nested GROUP, FIELD structure: ALLOCATE(GROUP(NOGRP)) DO I = 1,NOGRP @@ -446,10 +456,12 @@ !/ | C. Bunney | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 09-Nov-2020 | +!/ | Last update : 26-Jan-2021 | !/ +-----------------------------------+ !/ !/ 09-Nov-2020 : Creation ( version 7.12 ) +!/ 26-Jan-2021 : Added TP and alternative dir/mag ( version 7.12 ) +!/ metadata for directional fields. !/ ! ! 1. Purpose : @@ -1559,46 +1571,90 @@ META(1)%VMAX = 70000 ! IFI=1, IFJ=2 META => GROUP(1)%FIELD(2)%META - META(1)%FSC = 0.01 META(1)%ENAME = '.cur' - META(1)%UNITS = 'm s-1' - META(1)%VMIN = -9.9 - META(1)%VMAX = 9.9 - META(1)%VARNM='ucur' - META(1)%VARNL='eastward current' - META(1)%VARNS='eastward_sea_water_velocity' - META(1)%VARNG='eastward_sea_water_velocity' - META(1)%VARNC='cur=sqrt(U**2+V**2)' - META(1)%VARND = DIRCOM - - ! Second component - META(2) = META(1) - META(2)%VARNM='vcur' - META(2)%VARNL='northward current' - META(2)%VARNS='northward_sea_water_velocity' - META(2)%VARNG='northward_sea_water_velocity' - META(2)%VARNC='cur=sqrt(U**2+V**2)' + IF(VECTOR) THEN + META(1)%FSC = 0.01 + META(1)%UNITS = 'm s-1' + META(1)%VMIN = -9.9 + META(1)%VMAX = 9.9 + META(1)%VARNM='ucur' + META(1)%VARNL='eastward current' + META(1)%VARNS='eastward_sea_water_velocity' + META(1)%VARNG='eastward_sea_water_velocity' + META(1)%VARNC='cur=sqrt(U**2+V**2)' + META(1)%VARND = DIRCOM + + ! Second component + META(2) = META(1) + META(2)%VARNM='vcur' + META(2)%VARNL='northward current' + META(2)%VARNS='northward_sea_water_velocity' + META(2)%VARNG='northward_sea_water_velocity' + META(2)%VARNC='cur=sqrt(U**2+V**2)' + ELSE + META(1)%FSC = 0.01 + META(1)%UNITS = 'm s-1' + META(1)%VMIN = 0 + META(1)%VMAX = 10.0 + META(1)%VARNM='cspd' + META(1)%VARNL='current speed' + META(1)%VARNS='sea_water_speed' + META(1)%VARNG='sea_water_speed' + + ! Second component + META(2) = META(1) + META(2)%FSC = 0.1 + META(2)%VARNM='cdir' + META(2)%UNITS= 'degrees' + META(2)%VARNL='current direction (toward)' + META(2)%VARNS='direction_of_sea_water_velocity' + META(2)%VARNG='direction_of_sea_water_velocity' + META(2)%VMIN = 0 + META(2)%VMAX = 360.0 + ENDIF ! VECTOR ! IFI=1, IFJ=3 META => GROUP(1)%FIELD(3)%META - META(1)%FSC = 0.1 META(1)%ENAME = '.wnd' - META(1)%UNITS = 'm s-1' - META(1)%VARNM='uwnd' - META(1)%VARNL='eastward_wind' - META(1)%VARNS='eastward_wind' - META(1)%VARNG='eastward_wind' - META(1)%VARNC='wind=sqrt(U10**2+V10**2)' - META(1)%VMIN = -99.0 - META(1)%VMAX = 99.0 - META(1)%VARND = DIRCOM - - ! Second component - META(2) = META(1) - META(2)%VARNM='vwnd' - META(2)%VARNL='northward_wind' - META(2)%VARNS='northward_wind' - META(2)%VARNG='northward_wind' - META(2)%VARNC='wind=sqrt(U10**2+V10**2)' + IF(VECTOR) THEN + META(1)%FSC = 0.1 + META(1)%UNITS = 'm s-1' + META(1)%VARNM='uwnd' + META(1)%VARNL='eastward_wind' + META(1)%VARNS='eastward_wind' + META(1)%VARNG='eastward_wind' + META(1)%VARNC='wind=sqrt(U10**2+V10**2)' + META(1)%VMIN = -99.0 + META(1)%VMAX = 99.0 + META(1)%VARND = DIRCOM + + ! Second component + META(2) = META(1) + META(2)%VARNM='vwnd' + META(2)%VARNL='northward_wind' + META(2)%VARNS='northward_wind' + META(2)%VARNG='northward_wind' + META(2)%VARNC='wind=sqrt(U10**2+V10**2)' + ELSE + META(1)%FSC = 0.01 + META(1)%UNITS= 'm s-1' + META(1)%VARNM='wspd' + META(1)%VARNL='wind speed' + META(1)%VARNS='wind_speed' + META(1)%VARNG='wind_speed' + META(1)%VMIN = 0.0 + META(1)%VMAX = 100.0 + + ! Second component + META(2) = META(1) + META(2)%FSC = 0.1 + META(2)%VARNM='wdir' + META(2)%UNITS='degrees' + META(2)%VARNL='wind direction (from)' + META(2)%VARNS='wind_from_direction' + META(2)%VARNG='wind_from_direction' + META(2)%VMIN = 0.0 + META(2)%VMAX = 360.0 + ENDIF ! VECTOR ! IFI=1, IFJ=4 META => GROUP(1)%FIELD(4)%META META(1)%FSC = 0.1 @@ -1871,6 +1927,17 @@ META(1)%VARNG='dominant_wave_breaking_probability' META(1)%VMIN = 0 META(1)%VMAX = 1 +! IFI=2, IFJ=18, TP + META => GROUP(2)%FIELD(18)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 's' + META(1)%ENAME = '.tp' + META(1)%VARNM='tp' + META(1)%VARNL='wave peak period' + META(1)%VARNS='sea_surface_wave_peak_period' + META(1)%VARNG='dominant_wave_period' + META(1)%VMIN = 0 + META(1)%VMAX = 50 ! !---------- GROUP 3 ---------------- ! diff --git a/model/ftn/w3servmd.ftn b/model/ftn/w3servmd.ftn index 589f5ac4b..567db6f29 100644 --- a/model/ftn/w3servmd.ftn +++ b/model/ftn/w3servmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 01-Mar-2018 | +!/ | Last update : 15-Jan-2021 | !/ +-----------------------------------+ !/ !/ For update log see individual subroutines. @@ -17,6 +17,7 @@ !/ 18-Aug-2016 : Add dist_sphere: angular distance ( version 5.11 ) !/ 01-Mar-2016 : Added W3THRTN and W3XYRTN for post ( version 6.02 ) !/ processing rotated grid data +!/ 15-Jan-2021 : Added UV_TO_MAG_DIR routine ( version 7.12 ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -1959,6 +1960,108 @@ END SUBROUTINE STR_TO_UPPER END SUBROUTINE ROTATE END SUBROUTINE DIAGONALIZE +!/ ------------------------------------------------------------------- / + SUBROUTINE UV_TO_MAG_DIR(U, V, NSEA, MAG, DIR, TOLERANCE, CONV) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | FORTRAN 90 | +!/ | Last update : 15-Jan-2021 | +!/ +-----------------------------------+ +!/ +!/ 15-Jan-2021 : Creation ( version 7.12 ) +!/ +! 1. Purpose : +! +! Converts seapoint arrays formulated as U/V vectors into magnitude +! and direction arrays. +! +! If MAG and DIR input parameters are not specificed then the +! conversion is performed in-place (U => MAG, v => DIR). +! +! 2. Parameters +! +! Parameter list +! ---------------------------------------------------------------- +! U/V R.Arr I Array of U/V components +! NSEA Int I Number of sea points +! MAG R.Arr O Magnitude array (Optional) +! DIR R.Arr O Direction array (degrees) (Optional) +! TOLERANCE Real I Minimum allowed magnitude (Optional) +! CONV Char I Ouput direciton convention (Optional) +! ---------------------------------------------------------------- +! +! 3. Remarks +! +! Optional CONV specifies direction convention. Must be one of: +! 'N'=Nautical : North=0, clockwise, direction-from (default) +! 'O'=Oceangraphic : North=0, clockwise, direction-to +! 'C'=Cartesian : North=90, counter-clockwise, direction-to +! +!/ ------------------------------------------------------------------- / + USE CONSTANTS, ONLY: RADE, UNDEF + IMPLICIT NONE + + REAL, INTENT(INOUT) :: U(NSEA), V(NSEA) + INTEGER, INTENT(IN) :: NSEA + REAL, INTENT(OUT), OPTIONAL :: MAG(NSEA), DIR(NSEA) + REAL, INTENT(IN), OPTIONAL :: TOLERANCE + CHARACTER, INTENT(IN), OPTIONAL :: CONV +!/ ------------------------------------------------------------------- / +!/ Local parameters +! + REAL :: TOL, SGN, OFFSET, TMP + CHARACTER :: DIRCONV + INTEGER :: ISEA + LOGICAL :: INPLACE + + DIRCONV = 'N' + TOL = 1.0 + INPLACE = .TRUE. + IF(PRESENT(TOLERANCE)) TOL = TOLERANCE + IF(PRESENT(CONV)) DIRCONV = CONV + IF(PRESENT(MAG) .AND. PRESENT(DIR)) INPLACE = .FALSE. + + SELECT CASE (CONV) + CASE('N') + OFFSET = 630. + SGN = -1. + CASE('O') + OFFSET = 450. + SGN = -1. + CASE('C') + OFFSET = 360. + SGN = 1. + CASE DEFAULT + WRITE(*,*) "UV_TO_MAG_DIR: UNKNOWN DIR CONVENTION: ", DIRCONV + CALL EXTCDE(1) + END SELECT + + IF(INPLACE) THEN + DO ISEA=1, NSEA + TMP = SQRT(U(ISEA)**2 + V(ISEA)**2) + IF(TMP .GE. TOL) THEN + V(ISEA) = MOD(OFFSET + (SGN * RADE * ATAN2(V(ISEA), U(ISEA))), 360.) + U(ISEA) = TMP + ELSE + U(ISEA) = UNDEF + V(ISEA) = UNDEF + END IF + END DO + ELSE + DO ISEA=1, NSEA + MAG(ISEA) = SQRT(U(ISEA)**2 + V(ISEA)**2) + IF(MAG(ISEA) .GE. TOL) THEN + DIR(ISEA) = MOD(OFFSET + (SGN * RADE * ATAN2(V(ISEA), U(ISEA))), 360.) + ELSE + MAG(ISEA) = UNDEF + DIR(ISEA) = UNDEF + END IF + END DO + ENDIF + + END SUBROUTINE UV_TO_MAG_DIR !/ !/ End of module W3SERVMD -------------------------------------------- / !/ diff --git a/model/ftn/ww3_gint.ftn b/model/ftn/ww3_gint.ftn index 5da0627fd..807aee9a1 100644 --- a/model/ftn/ww3_gint.ftn +++ b/model/ftn/ww3_gint.ftn @@ -19,6 +19,7 @@ !/ 26-Jul-2018 : Write weights file WHTGRIDINT.bin !/ (F.Ardhuin, M.Accensi, J.H.Alves) ( version 6.05 ) !/ 31-Aug-2018 : Update groups 2,4,6,8 (S. Zieger) ( version 6.05 ) +!/ 26-Jan-2021 : Added TP field (derived from FP) ( version 7.12 ) !/ ! 1. Purpose : ! @@ -1569,7 +1570,8 @@ END IF END IF ! - IF ( FLOGRD(2,6) .AND. ACTIVE ) THEN + IF ( (FLOGRD(2,6) .OR. FLOGRD(2,18)) .AND. ACTIVE ) THEN + ! Note: Output TP [FLOGRD(2,18)] is derived from FP0 IF ( WADATS(IGRID)%FP0(GSEA) .NE. UNDEF ) THEN SUMWT2(6) = SUMWT2(6) + WT IF ( FP0AUX .EQ. UNDEF ) THEN diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 72107568b..89ff19351 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -8,7 +8,7 @@ !/ | F. Ardhuin | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 07-Oct-2019 | +!/ | Last update : 26-Jan-2021 | !/ +-----------------------------------+ !/ !/ 17-Mar-2010 : Creation ( version 3.14_SHOM ) @@ -39,6 +39,8 @@ !/ 03-Nov-2020 : Moved NetCDF metadata to separate ( version 7.12 ) !/ module. !/ 09-Dec-2020 : Set fixed values for VARID indices ( version 7.12 ) +!/ 26-Jan-2021 : Added TP output (derived from fp) ( version 7.12 ) +!/ and alternative dir/mag output. !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -288,6 +290,7 @@ NCVARTYPE = NML_FIELD%TYPE STRINGIPART = NML_FIELD%PARTITION TOGETHER = NML_FIELD%SAMEFILE + VECTOR = NML_FIELD%VECTOR FILEPREFIX = NML_FILE%PREFIX S3 = NML_FIELD%TIMESPLIT IF(SMCGRD) THEN @@ -305,7 +308,6 @@ IYN = NML_FILE%IYN ENDIF ! SMCGRD END IF ! FLGNML - ! ! process old ww3_ounf.inp format ! @@ -333,6 +335,8 @@ READ (NDSI,'(A)',END=801,ERR=802) STRINGIPART CALL NEXTLN ( COMSTR , NDSI , NDSE ) READ (NDSI,*,END=801,ERR=802) TOGETHER +! CALL NEXTLN ( COMSTR , NDSI , NDSE ) +! READ (NDSI,*,END=801,ERR=802) VECTOR CALL NEXTLN ( COMSTR , NDSI , NDSE ) FILEPREFIX= 'ww3.' READ (NDSI,*,END=801,ERR=802) FILEPREFIX @@ -356,6 +360,8 @@ CLOSE(NDSI,ERR=800,IOSTAT=IERR) + VECTOR = .TRUE. ! Only vector output for .inp files. + END IF ! .NOT. FLGNML ! Keep track of original NCVARTYPE, as it may change @@ -489,11 +495,9 @@ IYN = MIN ( IYN , NY ) WRITE (NDSO,3940) IX1, IXN, IY1, IYN ENDIF ! SMCGRD - - VECTOR = .TRUE. ! ! 4.4 Initialise meta-data - CALL INIT_META() + CALL INIT_META(VECTOR) ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 5. Time management. @@ -711,7 +715,7 @@ !/ | F. Ardhuin | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 14-Oct-2014 | +!/ | Last update : 26-Jan-2021 | !/ +-----------------------------------+ !/ !/ 17-Mar-2010 : Creation ( version 3.14_SHOM ) @@ -724,6 +728,8 @@ !/ 03-Nov-2020 : NetCDF metadata moved to separate ( version 7.12 ) !/ module. !/ 09-Dec-2020 : Set fixed values for VARID indices ( version 7.12 ) +!/ 26-Jan-2021 : Added TP output (derived from fp) ( version 7.12 ) +!/ and alternative dir/mag output. !/ ! 1. Purpose : ! @@ -784,7 +790,7 @@ ! 10. Source code : ! !/ ------------------------------------------------------------------- / - USE W3SERVMD, ONLY : W3S2XY + USE W3SERVMD, ONLY : W3S2XY, UV_TO_MAG_DIR !/RTD USE W3SERVMD, ONLY : W3THRTN, W3XYRTN, W3EQTOLL USE W3ARRYMD, ONLY : OUTA2I, PRTBLK USE W3GDATMD, ONLY : SIG, GTYPE, FLAGLL, MAPSTA, MAPST2 @@ -842,7 +848,7 @@ REAL, ALLOCATABLE :: X1(:,:), X2(:,:), XX(:,:), XY(:,:), & XK(:,:,:), XXK(:,:,:), XYK(:,:,:), & MX1R(:,:), MXXR(:,:), MYYR(:,:), & - MXYR(:,:) + MXYR(:,:), AUX1(:) ! DOUBLE PRECISION :: OUTJULDAY DOUBLE PRECISION :: SXD, SYD, X0D, Y0D @@ -902,6 +908,7 @@ ALLOCATE(MX1(NX,NY), MXX(NX,NY), MYY(NX,NY), MXY(NX,NY), MAPOUT(NX,NY)) ALLOCATE(MX1R(NX,NY), MXXR(NX,NY), MYYR(NX,NY), MXYR(NX,NY)) ENDIF ! SMCGRD + ALLOCATE(AUX1(NSEA)) X1 = UNDEF X2 = UNDEF @@ -1023,6 +1030,12 @@ !! Note - CX and CY read in from .ww3 file are X-Y vectors !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, CX(1:NSEA), CY(1:NSEA), AnglD) +! + IF( .NOT. VECTOR ) THEN + CALL UV_TO_MAG_DIR(CX(1:NSEA), CY(1:NSEA), NSEA, & + TOLERANCE=0.05, CONV='O') + ENDIF +! IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( CX(1:NSEA), XX ) !/SMC CALL W3S2XY_SMC( CY(1:NSEA), XY ) @@ -1039,7 +1052,12 @@ !! Note - UA and UD read in from .ww3 file are UX,UY !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, UA(1:NSEA), UD(1:NSEA), AnglD) - +! + IF( .NOT. VECTOR ) THEN + CALL UV_TO_MAG_DIR(UA(1:NSEA), UD(1:NSEA), NSEA, & + TOLERANCE=1.0, CONV='N') + ENDIF +! IF( SMCGRD ) THEN !/SMC CALL W3S2XY_SMC( UA(1:NSEA), XX ) !/SMC CALL W3S2XY_SMC( UD(1:NSEA), XY ) @@ -1251,6 +1269,21 @@ ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WBT, MAPSF, X1 ) END IF +! + ! Wave peak period (derived from peak freq field) + ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 18 ) THEN + DO I=1,NSEA + IF(FP0(I) .NE. UNDEF) THEN + AUX1(I) = 1.0 / FP0(I) + ELSE + AUX1(I) = UNDEF + ENDIF + ENDDO + IF( SMCGRD ) THEN +!/SMC CALL W3S2XY_SMC(AUX1, X1) + ELSE + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, AUX1, MAPSF, X1 ) + ENDIF ! ! Wave elevation spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 1 ) THEN @@ -3311,6 +3344,7 @@ DEALLOCATE(X1, X2, XX, XY, XK, XXK, XYK) DEALLOCATE(MX1, MXX, MYY, MXY, MAPOUT) DEALLOCATE(MX1R, MXXR, MYYR, MXYR) + DEALLOCATE(AUX1) IF (ALLOCATED(LON)) DEALLOCATE(LON, LAT) IF (ALLOCATED(LON2D)) DEALLOCATE(LON2D, LAT2D) !/RTD IF (ALLOCATED(LON2DEQ)) DEALLOCATE(LAT2DEQ, LON2DEQ, ANGLD2D) diff --git a/model/ftn/ww3_outf.ftn b/model/ftn/ww3_outf.ftn index f06b06778..6348987f6 100644 --- a/model/ftn/ww3_outf.ftn +++ b/model/ftn/ww3_outf.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 12-Sep-2018 | +!/ | Last update : 26-Jan-2021 | !/ +-----------------------------------+ !/ !/ 19-Oct-1998 : Final FORTRAN 77 ( version 1.18 ) @@ -34,6 +34,7 @@ !/ trunk ( version 4.13 ) !/ 27-Aug-2015 : ICEH and ICEF added as output ( version 5.10 ) !/ 12-Sep-2018 : Added new partitioned output fields ( version 6.06 ) +!/ 26-Jan-2021 : Added TP field (derived from FP0) ( version 7.12 ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -493,7 +494,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 25-Dec-2012 | +!/ | Last update : 26-Jan-2021 | !/ +-----------------------------------+ !/ !/ 26-Sep-1997 : Final FORTRAN 77 ( version 1.18 ) @@ -514,6 +515,7 @@ !/ 31-Jul-2007 : Fix file extension errors. ( version 3.12 ) !/ 25-Dec-2012 : New structure of output fields. ( version 4.11 ) !/ 25-Jun-2013 : Add type 4 sea point text output. ( version 4.11 ) +!/ 26-Jan-2021 : Added TP field (derived from FP0) ( version 7.12 ) !/ ! 1. Purpose : ! @@ -600,7 +602,7 @@ REAL :: X1(NX+1,NY), X2(NX+1,NY), & XX(NX+1,NY), XY(NX+1,NY), DPTMAX(1) !!Li Type 4 sea point only text output variables. JGLi25Jun2013 - REAL, Dimension(NSEA) :: XS1, XS2, XS3, XS4 + REAL, Dimension(NSEA) :: XS1, XS2, XS3, XS4, AUX !!Li DOUBLE PRECISION :: XDS, XDSQ LOGICAL :: FLONE, FLTWO, FLDIR, FLTRI @@ -1079,6 +1081,25 @@ ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WBT, MAPSF, X1) ENDIF +! + ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 18 ) THEN + FLONE = .TRUE. + FSC = 0.01 + UNITS = 's' + ENAME = '.tp' + DO I=1,NSEA + IF(FP0(I) .NE. UNDEF) THEN + AUX(I) = 1.0 / FP0(I) + ELSE + AUX(I) = UNDEF + ENDIF + ENDDO + + IF ( ITYPE .EQ. 4 ) THEN + XS1 = AUX + ELSE + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, AUX, MAPSF, X1) + ENDIF ! ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 1 ) THEN FLONE = .TRUE. diff --git a/model/inp/ww3_shel.inp b/model/inp/ww3_shel.inp index 2b45e0709..38413c577 100644 --- a/model/inp/ww3_shel.inp +++ b/model/inp/ww3_shel.inp @@ -134,6 +134,7 @@ $ T T 2 14 HCMAXE MXHC Max wave height from crest (STE) $ T T 2 15 HMAXD SDMH St Dev of MXC (STE) $ T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) $ F T 2 17 WBT WBT Dominant wave breaking probability bT +$ F F 2 18 FP0 TP Peak period (from peak freq) $ ------------------------------------------------- $ 3 Spectral Parameters (first 5) $ ------------------------------------------------- diff --git a/model/nml/ww3_ounf.nml b/model/nml/ww3_ounf.nml index d57d22c5a..d1c3ff494 100644 --- a/model/nml/ww3_ounf.nml +++ b/model/nml/ww3_ounf.nml @@ -27,6 +27,8 @@ ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file +! FIELD%VECTOR = T ! Vector [T] or dir/magnitude [F] for +! ! directional fields ! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] ! -------------------------------------------------------------------- ! &FIELD_NML diff --git a/model/nml/ww3_shel.nml b/model/nml/ww3_shel.nml index a7262b720..9d96cd633 100644 --- a/model/nml/ww3_shel.nml +++ b/model/nml/ww3_shel.nml @@ -124,6 +124,7 @@ ! T T 2 15 HMAXD SDMH St Dev of MXC (STE) ! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) ! F T 2 17 WBT WBT Dominant wave breaking probability bT +! F F 2 18 FP0 TP Peak period (from peak freq) ! ------------------------------------------------- ! 3 Spectral Parameters (first 5) ! ------------------------------------------------- diff --git a/regtests/ww3_tnc1/input/ounfmeta.inp b/regtests/ww3_tnc1/input/ounfmeta.inp index 8f23e1ca3..b2bbca5dc 100644 --- a/regtests/ww3_tnc1/input/ounfmeta.inp +++ b/regtests/ww3_tnc1/input/ounfmeta.inp @@ -33,15 +33,17 @@ META T02 $ Multi-component fields (like wind) can take an extra integer $ parameter to select the component (1 - 3) META WND 1 - $ First component of wind + $ First component of wind (speed) ename=".w10" - varnm="WU10" - standard_name="eastward_wind" + varnm="WSPD" + standard_name="wind_speed" META WND 2 - $ Second component of wind - varnm="WV10" - standard_name="northward_wind" + $ Second component of wind (direction) + varnm="WDIR" + standard_name="wind_from_direction" + units="degrees" + convention="direction from" META DIR ename=".vmdr" diff --git a/regtests/ww3_tnc1/input/ww3_ounf.inp b/regtests/ww3_tnc1/input/ww3_ounf.inp index ebaf673ae..3c7591da4 100644 --- a/regtests/ww3_tnc1/input/ww3_ounf.inp +++ b/regtests/ww3_tnc1/input/ww3_ounf.inp @@ -6,7 +6,7 @@ $ $ $ Fields requested --------------------------------------------------- $ N - HS DIR WND T01 T02 PHS PTP + HS DIR WND T01 T02 TP PHS PTP $ $--------------------------------------------------------------------- $ $ netCDF version [3,4] diff --git a/regtests/ww3_tnc1/input/ww3_ounf.nml b/regtests/ww3_tnc1/input/ww3_ounf.nml index 45a49670a..c5903da28 100644 --- a/regtests/ww3_tnc1/input/ww3_ounf.nml +++ b/regtests/ww3_tnc1/input/ww3_ounf.nml @@ -27,14 +27,17 @@ ! FIELD%LIST = 'unset' ! List of output fields ! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] ! FIELD%SAMEFILE = T ! All the variables in the same file +! FIELD%VECTOR = T ! Vector [T] or dir/magnitude [F] for +! ! directional fields ! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] ! -------------------------------------------------------------------- ! &FIELD_NML FIELD%TIMESTART = '20100101 000000' FIELD%TIMESTRIDE = '3600' FIELD%TIMECOUNT = '3' - FIELD%LIST = 'HS DIR WND T01 T02 PHS PTP' + FIELD%LIST = 'HS DIR WND T01 T02 TP PHS PTP' FIELD%SAMEFILE = F + FIELD%VECTOR = F FIELD%TYPE = 2 / diff --git a/regtests/ww3_tnc1/input/ww3_shel.inp b/regtests/ww3_tnc1/input/ww3_shel.inp index 5f98154d7..56261ed17 100644 --- a/regtests/ww3_tnc1/input/ww3_shel.inp +++ b/regtests/ww3_tnc1/input/ww3_shel.inp @@ -23,7 +23,7 @@ $ $ Type 1 : Fields of mean wave parameters 20100101 000000 3600 20100101 020000 N - HS DIR WND T01 T02 PHS PTP + HS DIR WND T01 T02 TP PHS PTP $ $ Type 2 : Point output 20100101 000000 0 20100101 000000 diff --git a/regtests/ww3_tnc1/input/ww3_shel.nml b/regtests/ww3_tnc1/input/ww3_shel.nml index 3133c5583..84b25d1dc 100644 --- a/regtests/ww3_tnc1/input/ww3_shel.nml +++ b/regtests/ww3_tnc1/input/ww3_shel.nml @@ -120,6 +120,7 @@ ! T T 2 15 HMAXD SDMH St Dev of MXC (STE) ! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) ! F T 2 17 WBT WBT Dominant wave breaking probability bT +! F F 2 18 FP0 TP Peak period (from peak freq) ! ------------------------------------------------- ! 3 Spectral Parameters (first 5) ! ------------------------------------------------- @@ -250,7 +251,7 @@ ! ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML - TYPE%FIELD%LIST = 'HS DIR WND T01 T02 PHS PTP' + TYPE%FIELD%LIST = 'HS DIR WND T01 T02 TP PHS PTP' / diff --git a/regtests/ww3_tp2.11/input/ww3_ounf.inp b/regtests/ww3_tp2.11/input/ww3_ounf.inp index 28a758997..cb7aaf1c6 100644 --- a/regtests/ww3_tp2.11/input/ww3_ounf.inp +++ b/regtests/ww3_tp2.11/input/ww3_ounf.inp @@ -11,7 +11,7 @@ $ file for a full documentation of field output options. Namelist type $ selection is used here (for alternative F/T flags, see ww3_shel.inp). $ N - WND HS T0M1 + WND HS TP $ $--------------------------------------------------------------------- $ $ Output type 4 [3,4] (version netCDF) diff --git a/regtests/ww3_tp2.11/input/ww3_ounf.nml b/regtests/ww3_tp2.11/input/ww3_ounf.nml index a7109f70c..3d736a51a 100644 --- a/regtests/ww3_tp2.11/input/ww3_ounf.nml +++ b/regtests/ww3_tp2.11/input/ww3_ounf.nml @@ -33,7 +33,7 @@ FIELD%TIMESTART = '19680606 000000' FIELD%TIMESTRIDE = '10800' FIELD%TIMECOUNT = '999' - FIELD%LIST = 'WND HS T0M1' + FIELD%LIST = 'WND HS TP' FIELD%PARTITION = '0 1 2' FIELD%TYPE = 4 / diff --git a/regtests/ww3_tp2.11/input/ww3_outf.inp b/regtests/ww3_tp2.11/input/ww3_outf.inp index 4cc39bfa1..4b80c4aff 100644 --- a/regtests/ww3_tp2.11/input/ww3_outf.inp +++ b/regtests/ww3_tp2.11/input/ww3_outf.inp @@ -3,32 +3,10 @@ $ WAVEWATCH III Grid output post-processing $ $--------------------------------------------------------------------- $ $ Time, time increment and number of outputs $ - 19680606 060000 10800. 24 + 19680606 010000 3600. 24 $ -$ (1) Forcing Fields - T -$ DPT CUR WND DT WLV ICE IBG D50 - F F T F F F F F -$ (2) Standard mean wave Parameters - T -$ HS LM TZ TE T01 FP DIR SPR DP - T F F F T F F F F -$ (3) Frequency-dependent parameters - F -$ (4) Spectral Partition Parameters - F -$ (5) Atmosphere-waves layer - F -$ (6) Wave-Ocean layer - F -$ (7) Wave-bottom layer - F -$ (8) Spectrum parameters - F -$ (9) Numerical diagnostics - F -$ (10) User defined (NOEXTR flags needed) - F + N + WND HS TP $ 3 1 $ diff --git a/regtests/ww3_tp2.11/input/ww3_shel.inp b/regtests/ww3_tp2.11/input/ww3_shel.inp index bd41f6dec..bc595300f 100644 --- a/regtests/ww3_tp2.11/input/ww3_shel.inp +++ b/regtests/ww3_tp2.11/input/ww3_shel.inp @@ -18,7 +18,7 @@ $ 19680606 000000 3600 19680608 000000 $ N - WND HS T01 + WND HS TP $ 19680606 000000 3600 19680608 000000 -5.00 45.20 '62001_Gasc' diff --git a/regtests/ww3_tp2.11/input/ww3_shel.nml b/regtests/ww3_tp2.11/input/ww3_shel.nml index d25c117a8..9bd8b7647 100644 --- a/regtests/ww3_tp2.11/input/ww3_shel.nml +++ b/regtests/ww3_tp2.11/input/ww3_shel.nml @@ -237,7 +237,7 @@ ! ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML - TYPE%FIELD%LIST = 'WND HS T01' + TYPE%FIELD%LIST = 'WND HS TP' TYPE%POINT%FILE = '../input/points.list' / From 634e266b0761bbc7aebf4dfc21280afdc8807cc7 Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Tue, 23 Feb 2021 14:46:52 -0500 Subject: [PATCH 64/84] Updates to make WW3 thread safe (#315) * making TAUNUX, TAUNUY threadprivate - update from @JamesAbeles-NOAA * adding gaae and jet to WW3 cmplr, also adding '.intel' to NCEP machines for future flexibility of having '*.gnu' options * adding thread private for w3canomd since it's called from W3SREF which is called in w3srce which is threaded * added more saved variables to threadprivate * fix cmpr.env for typo and add files to gitignore * removing two files that should have been removed in a previous PR --- .gitignore | 4 +- model/bin/cmplr.env | 17 +- model/bin/w3_setup | 14 +- model/esmf/Makefile | 8 +- model/ftn/w3canomd.ftn | 12 +- model/ftn/w3fld1md.ftn | 4 + model/ftn/w3fld2md.ftn | 1 + model/ftn/w3flxxmd.ftn | 1 + model/ftn/w3srcemd.ftn | 6 +- regtests/bin/matrix.base.v1 | 1006 ------------------------- regtests/bin/matrix_ncep | 4 +- regtests/bin/matrix_zeus_HLT | 129 ---- regtests/ww3_tp2.14/input/prep_env.sh | 13 +- 13 files changed, 55 insertions(+), 1164 deletions(-) delete mode 100755 regtests/bin/matrix.base.v1 delete mode 100755 regtests/bin/matrix_zeus_HLT diff --git a/.gitignore b/.gitignore index b43cb68a2..0c3df2c13 100644 --- a/.gitignore +++ b/.gitignore @@ -52,8 +52,8 @@ regtests/*/input*/*/*.nc regtests/*/input*/partition.ww3 regtests/*/*.png regtests/ww3_tp2.14/input/oasis3-mct/doc -regtests/ww3_tp2.14/input*/*.nc.OAS*CM -regtests/ww3_tp2.14/input*/*/*.nc.OAS*CM +regtests/ww3_tp2.14/input*/*.nc.OAS*CM* +regtests/ww3_tp2.14/input*/*/*.nc.OAS*CM* regtests/ww3_tp2.17/input/inlet.msh *.nc */*.nc diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index e9b8ffc69..8fddea569 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -109,8 +109,9 @@ fi if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$cmplr" == "intel_prof" ] || \ [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || [ "$cmplr" == "so_intel_prof" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || [ "$cmplr" == "datarmor_intel_prof" ] || \ - [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne" ] || \ - [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || [ "$cmplr" == "stampede" ] ; then + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne.intel" ] || \ + [ "$cmplr" == "gaea.intel" ] || [ "$cmplr" == "jet.intel" ] || \ + [ "$cmplr" == "hera.intel" ] || [ "$cmplr" == "orion.intel" ] || [ "$cmplr" == "stampede.intel" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -120,11 +121,11 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c comp_mpi='mpiifort' # cray compiler - if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then + if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] || [ "$cmplr" == "gaea.intel" ]; then comp_seq='ftn' comp_mpi='ftn' fi - + if [ ! -z "$(echo $cmplr | grep cheyenne)" ] ; then comp_seq='ifort' comp_mpi='mpif90' @@ -156,9 +157,10 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi # omp options - if [ ! -z "$(echo $cmplr | grep datarmor)" ] || [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ - [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne" ] || \ - [ "$cmplr" == "stampede" ]; then + if [ ! -z "$(echo $cmplr | grep datarmor)" ] || [ "$cmplr" == "hera.intel" ] || [ "$cmplr" == "orion.intel" ] || \ + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne.intel" ] || \ + [ "$cmplr" == "gaea.intel" ] || [ "$cmplr" == "jet.intel" ] || \ + [ "$cmplr" == "stampede.intel" ]; then optomp="-qopenmp" else optomp="-openmp" @@ -205,6 +207,7 @@ fi if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || [ "$cmplr" == "gnu_prof" ] || \ [ "$cmplr" == "so_gnu" ] || [ "$cmplr" == "so_gnu_debug" ] || [ "$cmplr" == "so_gnu_prof" ] || \ + [ "$cmplr" == "hera.gnu" ] || [ "$cmplr" == "cheyenne.gnu" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || [ "$cmplr" == "datarmor_gnu_prof" ] || \ [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ] || [ "$cmplr" == "ukmo_cray_gnu_prof" ] ; then diff --git a/model/bin/w3_setup b/model/bin/w3_setup index 89f2e531f..d8e0d4b62 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -414,9 +414,10 @@ then [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ - [ "$cmplr" == "stampede" ] || \ - [ "$cmplr" == "cheyenne" ] || \ + [ "$cmplr" == "hera.intel" ] || [ "$cmplr" == "orion.intel" ] || \ + [ "$cmplr" == "hera.gnu" ] || [ "$cmplr" == "jet.intel" ] || \ + [ "$cmplr" == "stampede.intel" ] || [ "$cmplr" == "gaea.intel" ] || \ + [ "$cmplr" == "cheyenne.intel" ] || [ "$cmplr" == "cheyenne.gnu" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ @@ -441,9 +442,10 @@ then [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "hera" ] || [ "$cmplr" == "orion" ] || \ - [ "$cmplr" == "stampede" ] || \ - [ "$cmplr" == "cheyenne" ] || \ + [ "$cmplr" == "hera.intel" ] || [ "$cmplr" == "orion.intel" ] || \ + [ "$cmplr" == "hera.gnu" ] || [ "$cmplr" == "jet.intel" ] || \ + [ "$cmplr" == "stampede.intel" ] || [ "$cmplr" == "gaea.intel" ] || \ + [ "$cmplr" == "cheyenne.intel" ] || [ "$cmplr" == "cheyenne.gnu" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ diff --git a/model/esmf/Makefile b/model/esmf/Makefile index 9a09d7b34..f17026be9 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -35,9 +35,11 @@ ifeq ($(WW3_COMP),Portland) else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","pgi" "datarmor_pgi" "datarmor_pgi_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -byteswapio # intel -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","Intel" "hera" "orion" "cheyenne" "stampede")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","Intel" "hera.intel" "orion.intel" "jet.intel")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_cray" "wcoss_dell_p3")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)", "cheyenne.intel" "stampede.intel")) + ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_cray" "wcoss_dell_p3" "gaea.intel")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","intel" "datarmor_intel" "datarmor_intel_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian @@ -47,6 +49,8 @@ else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","mpt" "datarmor_mpt" "datarmor_m # gnu else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","gnu" "datarmor_gnu" "datarmor_gnu_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -fconvert=big-endian +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","hera.gnu" "cheyenne.gnu")) + ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -fconvert=big-endian # error else $(error Unsupported WW3_COMP: $(WW3_COMP)) diff --git a/model/ftn/w3canomd.ftn b/model/ftn/w3canomd.ftn index ef441b9dc..2f2b9a1c1 100644 --- a/model/ftn/w3canomd.ftn +++ b/model/ftn/w3canomd.ftn @@ -93,12 +93,16 @@ INTEGER :: NDEPTH REAL :: DEPTHA ! first depth in table REAL, SAVE , PRIVATE, ALLOCATABLE :: OMEGA(:) +!/OMPG/!$omp threadprivate( OMEGA ) INTEGER, SAVE , PRIVATE :: COUNTER = 0 +!/OMPG/!$omp threadprivate( COUNTER ) ! Tables for non-linear coefficients ... REAL, SAVE , PRIVATE, ALLOCATABLE :: TA(:,:,:,:),TB(:,:,:,:),TC_QL(:,:,:,:),& TT_4M(:,:,:,:),TT_4P(:,:,:,:),TFAKH(:,:), & TFAK(:,:) +!/OMPG/!$omp threadprivate( TA, TB, TC_QL, TT_4M, TT_4P, TFAKH, TFAK ) INTEGER, SAVE, PRIVATE, ALLOCATABLE :: IM_P(:,:),IM_M(:,:) +!/OMPG/!$omp threadprivate( IM_P, IM_M ) ! @@ -202,10 +206,13 @@ REAL :: CO1, ATOE, DPTH !/S INTEGER, SAVE :: IENT = 0 LOGICAL, SAVE :: FIRST = .TRUE. +!/OMPG/!$omp threadprivate( FIRST ) REAL, ALLOCATABLE, SAVE :: FR(:), DFIM(:) REAL, ALLOCATABLE, SAVE :: F1(:,:), F3(:,:) +!/OMPG/!$omp threadprivate( FR, DFIM, F1, F3 ) INTEGER, SAVE :: NFRE, NANG INTEGER, SAVE :: NFREH, NANGH +!/OMPG/!$omp threadprivate( NFRE, NANG, NFREH, NANGH ) !/ !/ ------------------------------------------------------------------- / !/ @@ -342,11 +349,12 @@ INTEGER MDW,M,K, K0,M0,MP,KP,MM,KM,KL,KLL,ML,JD INTEGER, SAVE :: MR, MA,NMAX - +!/OMPG/!$omp threadprivate( MR, MA, NMAX ) ! PARAMETER (NFREH=32,NANGH=36) INTEGER, SAVE :: INDEP +!/OMPG/!$omp threadprivate( INDEP ) REAL,ALLOCATABLE :: PF1(:,:),PF3(:,:) @@ -357,7 +365,7 @@ C2,XM,XK REAL, SAVE :: OMSTART REAL, SAVE :: XMR,XMA, DELTHH, CO1 - +!/OMPG/!$omp threadprivate( OMSTART, XMR,XMA, DELTHH, CO1 ) REAL :: F13(NFREH,NANGH) REAL :: SUM0,AKMEAN REAL :: DELOM(NFREH),THH(NANGH),DFDTH(NFREH) diff --git a/model/ftn/w3fld1md.ftn b/model/ftn/w3fld1md.ftn index 2c202b029..436f0a827 100644 --- a/model/ftn/w3fld1md.ftn +++ b/model/ftn/w3fld1md.ftn @@ -74,11 +74,14 @@ PUBLIC ! Tail_Choice: Chose the method to determine the level of the tail INTEGER, SAVE :: Tail_Choice +!/OMPG/!$omp threadprivate(Tail_Choice) REAL, SAVE :: Tail_Level !if Tail_Choice=0, tail is constant REAL, SAVE :: Tail_transition_ratio1! freq/fpi where tail ! adjustment begins REAL, SAVE :: Tail_transition_ratio2! freq/fpi where tail ! adjustment ends +!/OMPG/!$omp threadprivate(Tail_Level) +!/OMPG/!$omp threadprivate(Tail_transition_ratio1,Tail_transition_ratio2) !/ CONTAINS !/ ------------------------------------------------------------------- / @@ -228,6 +231,7 @@ LOGICAL :: FSFL1,FSFL2, CRIT1, CRIT2 LOGICAL :: IT_FLAG1, IT_FLAG2 LOGICAL, SAVE :: FIRST = .TRUE. +!/OMPG/!$omp threadprivate( FIRST) !/ !/ ------------------------------------------------------------------- / !/ diff --git a/model/ftn/w3fld2md.ftn b/model/ftn/w3fld2md.ftn index d9aecbb33..bae17012e 100644 --- a/model/ftn/w3fld2md.ftn +++ b/model/ftn/w3fld2md.ftn @@ -206,6 +206,7 @@ INTEGER :: COUNT !/S INTEGER, SAVE :: IENT = 0 LOGICAL, SAVE :: FIRST = .TRUE. +!/OMPG/!$omp threadprivate( FIRST ) !/ !/ ------------------------------------------------------------------- / !/ diff --git a/model/ftn/w3flxxmd.ftn b/model/ftn/w3flxxmd.ftn index ee081026e..b31817f96 100644 --- a/model/ftn/w3flxxmd.ftn +++ b/model/ftn/w3flxxmd.ftn @@ -180,6 +180,7 @@ !/ !/S INTEGER, SAVE :: IENT = 0 LOGICAL, SAVE :: FIRST = .TRUE. +!/OMPG/!$omp threadprivate( FIRST ) !/ !/ ------------------------------------------------------------------- / !/ diff --git a/model/ftn/w3srcemd.ftn b/model/ftn/w3srcemd.ftn index 159d2b4c7..63e6be201 100644 --- a/model/ftn/w3srcemd.ftn +++ b/model/ftn/w3srcemd.ftn @@ -511,12 +511,14 @@ !/ST4 REAL :: BRLAMBDA(NSPEC) !/IS2 DOUBLE PRECISION :: SCATSPEC(NTH) REAL :: FOUT(NK,NTH), SOUT(NK,NTH), DOUT(NK,NTH) -!/FLD1 REAL, SAVE :: TAUNUX, TAUNUY -!/FLD2 REAL, SAVE :: TAUNUX, TAUNUY + REAL, SAVE :: TAUNUX, TAUNUY +!/OMPG/!$omp threadprivate( TAUNUX, TAUNUY) LOGICAL, SAVE :: FLTEST = .FALSE., FLAGNN = .TRUE. +!/OMPG/!$omp threadprivate( FLTEST, FLAGNN ) LOGICAL :: SHAVE LOGICAL :: LBREAK LOGICAL, SAVE :: FIRST = .TRUE. +!/OMPG/!$omp threadprivate( FIRST ) LOGICAL :: PrintDeltaSmDA REAL :: eInc1, eInc2 REAL :: DeltaSRC(NSPEC), MAXDAC(NSPEC) diff --git a/regtests/bin/matrix.base.v1 b/regtests/bin/matrix.base.v1 deleted file mode 100755 index 4c162ccbe..000000000 --- a/regtests/bin/matrix.base.v1 +++ /dev/null @@ -1,1006 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# matrix.base : Core of setting up matrix of regression test. # -# # -# Remarks: # -# - This code uses three temporary files, # -# matrix.head: This file can pre-exist with batch queue data etc. to be # -# set in matrix.go. If not, the head will start as a bash # -# script. # -# matrix.body: All options, separated out to allow for switch filtering. # -# matrix.tail: Ending identification. # -# - This script generates the file "matrix" that can then be executed # -# interactively and/or in batch, and can be edited by hand as needed. # -# # -# Hendrik L. Tolman # -# August 2013 # -# # -# Copyright 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. # -# # -# --------------------------------------------------------------------------- # -# 1. Set up -# 1.a Check environment parameters needed to be set up in calling script. - - for par in mpi np rtst ww3 testtest shrd dist omp \ - prop1D prop2D time fetch hur1mg \ - multi01 multi02 multi03 multi04 multi05 - do - eval " value=\$$par" -# echo "$par = $value" - if [ -z "$value" ] - then - echo "error matrix.base: parameter $par not set ..." - exit 1 - fi - done - -# 1.b Check on existence of matrix.head - - - - - - - - - - - - - - - - - - - - - if [ ! -f matrix.head ] - then - echo "#!/bin/sh" > matrix.head - fi - - rm -f matrix.body - rm -f matrix.tail - -# 1.c Output to ID script - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo " echo ' '" >> matrix.head - echo " echo ' **********************************************'" >> matrix.head - echo " echo ' *** WAVEWATCH III matrix of regression tests ***'">> matrix.head - echo " echo ' **********************************************'" >> matrix.head - echo " echo ' '" >> matrix.head - - if [ "$testtest" = 'y' ] - then - echo " echo ' Run one of each test only ....'" >> matrix.head - echo " echo ' Tests for single CPU codes : $shrd'" >> matrix.head - echo " echo ' Tests for multiple CPU codes (MPI) : $dist'" >> matrix.head - else - echo " echo ' Tests for single CPU codes : $shrd'" >> matrix.head - echo " echo ' Tests for multiple CPU codes (MPI) : $dist'" >> matrix.head - # echo " echo ' Tests for multiple CPU codes (OMP) : $omp'" >> matrix.head - echo " echo ' '" >> matrix.head - - echo " echo ' 1D pure propagation tests : $prop1D'" >> matrix.head - echo " echo ' 2D pure propagation tests : $prop2D'" >> matrix.head - echo " echo ' Growth curves (time) : $time'" >> matrix.head - echo " echo ' Growth curves (fetch) : $fetch'" >> matrix.head - echo " echo ' Shallow water tests : $shwtr'" >> matrix.head - echo " echo ' Unstructured grid tests : $unstr'" >> matrix.head - echo " echo ' SMC / Rotated grid tests : $smcgr'" >> matrix.head - echo " echo ' Hurricane with one moving grid : $hur1mg'" >> matrix.head - echo " echo ' Mud/Ice and wave interaction tests : $mudice'" >> matrix.head - echo " echo ' Multi 01 (wet and dry) : $multi01'" >> matrix.head - echo " echo ' Multi 02 (basic nesting) : $multi02'" >> matrix.head - echo " echo ' Multi 03 (nesting and overlap) : $multi03'" >> matrix.head - echo " echo ' Multi 04 (swell on mount/current) : $multi04'" >> matrix.head - echo " echo ' Multi 05 (hurricane 3 moving grds) : $multi05'" >> matrix.head - echo " echo ' Multi 06 (curv. + reg. grds) : $multi06'" >> matrix.head - echo " echo ' '" >> matrix.head - if [ -n "$filter" ] - then - echo " echo ' Filter for tests : $filter'" >> matrix.head - echo " echo ' '" >> matrix.head - fi - fi - -# --------------------------------------------------------------------------- # -# 2. Pure propagation tests # -# --------------------------------------------------------------------------- # - -if [ "$testtest" != 'y' ] -then - - echo " echo ' '" > matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo '*** pure propapgation tests ***'" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo ' '" >> matrix.body - - if [ "$prop1D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp1.1" >> matrix.body - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp1.2" >> matrix.body - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp1.3" >> matrix.body - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp1.4" >> matrix.body - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp1.5" >> matrix.body - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp1.6" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_curv -g curv $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR1 -w work_PR1 $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR1 -w work_REF_PR1 -i input_REF $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_a -g a $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_b -g b $ww3 ww3_tp2.9" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR1_MPI -w work_PR1_MPI -f -p $mpi -n $np $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI -f -p $mpi -n $np $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI -f -p $mpi -n $np $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_curv_MPI -g curv -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR1_MPI -w work_REF_PR1_MPI -i input_REF -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_a_MPI -g a -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_b_MPI -g b -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - fi - - if [ "$prop1D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp1.1" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp1.2" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp1.3" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp1.4" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp1.5" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp1.6" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_curv -g curv $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR2_UQ -w work_REF_PR2_UQ -i input_REF $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_a -g a $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_b -g b $ww3 ww3_tp2.9" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_curv_MPI -g curv -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_REF_PR2_UQ_MPI -i input_REF -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_a_MPI -g a -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_b_MPI -g b -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - fi - - if [ "$prop1D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp1.1" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp1.2" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp1.3" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp1.4" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp1.5" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp1.6" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_curv -g curv $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR2_UNO -w work_REF_PR2_UNO -i input_REF $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_a -g a $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_b -g b $ww3 ww3_tp2.9" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_curv_MPI -g curv -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_REF_PR2_UNO_MPI -i input_REF -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_a_MPI -g a -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_b_MPI -g b -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - fi - - if [ "$prop1D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp1.1" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp1.2" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp1.3" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp1.4" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp1.5" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp1.6" >> matrix.body - echo "$rtst -w work_PR3_UQ $ww3 ww3_tp1.7" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_curv -g curv $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR3_UQ -w work_REF_PR3_UQ -i input_REF $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_a -g a $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_b -g b $ww3 ww3_tp2.9" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_curv_MPI -g curv -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_REF_PR2_UQ_MPI -i input_REF -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_a_MPI -g a -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_b_MPI -g b -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - fi - - if [ "$prop1D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp1.1" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp1.2" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp1.3" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp1.4" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp1.5" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp1.6" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_curv -g curv $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR3_UNO -w work_REF_PR3_UNO -i input_REF $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_a -g a $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_b -g b $ww3 ww3_tp2.9" >> matrix.body - fi - - if [ "$prop2D" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_curv_MPI -g curv -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_REF_PR3_UNO_MPI -i input_REF -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_a_MPI -g a -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_b_MPI -g b -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - fi - -# -------------------------------------------------------------------------- # -# 3. Source term tests # -# -------------------------------------------------------------------------- # - - echo " echo ' '" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo '*** source term tests ***'" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo ' '" >> matrix.body - - if [ "$time" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s ST1 -w work_ST1 $ww3 ww3_ts1" >> matrix.body - echo "$rtst -s ST1_RWND -w work_ST1_RWND $ww3 ww3_ts1" >> matrix.body - echo "$rtst -s ST2 -w work_ST2 $ww3 ww3_ts1" >> matrix.body - echo "$rtst -s ST3 -w work_ST3 $ww3 ww3_ts1" >> matrix.body - echo "$rtst -s ST4 -w work_ST4 $ww3 ww3_ts1" >> matrix.body - echo "$rtst -s ST6 -w work_ST6 $ww3 ww3_ts1" >> matrix.body - fi - - if [ "$fetch" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s ST1_PR1 -w work_ST1_PR1 $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST1_PR2_UQ -w work_ST1_PR2_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST1_PR2_UNO -w work_ST1_PR2_UNO $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST1_PR3_UQ -w work_ST1_PR3_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST1_PR3_UNO -w work_ST1_PR3_UNO $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST2_PR1 -w work_ST2_PR1 $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST2_PR2_UQ -w work_ST2_PR2_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST2_PR2_UNO -w work_ST2_PR2_UNO $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST2_PR3_UQ -w work_ST2_PR3_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST2_PR3_UNO -w work_ST2_PR3_UNO $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST3_PR1 -w work_ST3_PR1 $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST3_PR2_UQ -w work_ST3_PR2_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST3_PR2_UNO -w work_ST3_PR2_UNO $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST3_PR3_UQ -w work_ST3_PR3_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST3_PR3_UNO -w work_ST3_PR3_UNO $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST4_PR1 -w work_ST4_PR1 $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST4_PR2_UQ -w work_ST4_PR2_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST4_PR2_UNO -w work_ST4_PR2_UNO $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST4_PR3_UQ -w work_ST4_PR3_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST4_PR3_UNO -w work_ST4_PR3_UNO $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST6_PR1 -w work_ST6_PR1 $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST6_PR2_UQ -w work_ST6_PR2_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST6_PR2_UNO -w work_ST6_PR2_UNO $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST6_PR3_UQ -w work_ST6_PR3_UQ $ww3 ww3_ts2" >> matrix.body - echo "$rtst -s ST6_PR3_UNO -w work_ST6_PR3_UNO $ww3 ww3_ts2" >> matrix.body - fi - - if [ "$hur1mg" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s ST1_PR1 -w work_ST1_PR1 $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST1_PR2_UQ -w work_ST1_PR2_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST1_PR2_UNO -w work_ST1_PR2_UNO $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST1_PR3_UQ -w work_ST1_PR3_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST1_PR3_UNO -w work_ST1_PR3_UNO $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR1 -w work_ST2_PR1 $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR2_UQ -w work_ST2_PR2_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR2_UNO -w work_ST2_PR2_UNO $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR3_UQ -w work_ST2_PR3_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR3_UNO -w work_ST2_PR3_UNO $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR1 -w work_ST3_PR1 $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR2_UQ -w work_ST3_PR2_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR2_UNO -w work_ST3_PR2_UNO $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR3_UQ -w work_ST3_PR3_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR3_UNO -w work_ST3_PR3_UNO $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR1 -w work_ST4_PR1 $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR2_UQ -w work_ST4_PR2_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR2_UNO -w work_ST4_PR2_UNO $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR3_UQ -w work_ST4_PR3_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR3_UNO -w work_ST4_PR3_UNO $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR1 -w work_ST6_PR1 $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR2_UQ -w work_ST6_PR2_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR2_UNO -w work_ST6_PR2_UNO $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR3_UQ -w work_ST6_PR3_UQ $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR3_UNO -w work_ST6_PR3_UNO $ww3 ww3_ts3" >> matrix.body - fi - - if [ "$hur1mg" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s ST1_PR1_MPI -w work_ST1_PR1_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST1_PR2_UQ_MPI -w work_ST1_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST1_PR2_UNO_MPI -w work_ST1_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST1_PR3_UQ_MPI -w work_ST1_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST1_PR3_UNO_MPI -w work_ST1_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR1_MPI -w work_ST2_PR1_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR2_UQ_MPI -w work_ST2_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR2_UNO_MPI -w work_ST2_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR3_UQ_MPI -w work_ST2_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST2_PR3_UNO_MPI -w work_ST2_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR1_MPI -w work_ST3_PR1_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR2_UQ_MPI -w work_ST3_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR2_UNO_MPI -w work_ST3_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR3_UQ_MPI -w work_ST3_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST3_PR3_UNO_MPI -w work_ST3_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR1_MPI -w work_ST4_PR1_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR2_UQ_MPI -w work_ST4_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR2_UNO_MPI -w work_ST4_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR3_UQ_MPI -w work_ST4_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST4_PR3_UNO_MPI -w work_ST4_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR1_MPI -w work_ST6_PR1_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR2_UQ_MPI -w work_ST6_PR2_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR2_UNO_MPI -w work_ST6_PR2_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR3_UQ_MPI -w work_ST6_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - echo "$rtst -s ST6_PR3_UNO_MPI -w work_ST6_PR3_UNO_MPI -f -p $mpi -n $np $ww3 ww3_ts3" >> matrix.body - fi - -# --------------------------------------------------------------------------- # -# 4. Unstructured grid tests # -# --------------------------------------------------------------------------- # - - echo " echo ' '" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo '*** Unstructured grid tests ***'" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo ' '" >> matrix.body - - if [ "$unstr" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s ST0 -w work_ST0 $ww3 ww3_tp2.6" >> matrix.body - echo "$rtst -s ST0 -w work_ST0 $ww3 ww3_tp2.7" >> matrix.body - echo "$rtst -s ST4 -w work_ST4 $ww3 ww3_tp2.6" >> matrix.body - fi - -# --------------------------------------------------------------------------- # -# 5. SMC & Rotated grid tests # -# --------------------------------------------------------------------------- # - - echo " echo ' '" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo '*** SMC and Rotated grid tests ***'" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo ' '" >> matrix.body - - if [ "$smcgr" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst $ww3 ww3_tp2.10" >> matrix.body - echo "$rtst $ww3 ww3_tp2.11" >> matrix.body - fi - - if [ "$smcgr" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s MPI -w work_MPI -f -p $mpi -n $np $ww3 ww3_tp2.10" >> matrix.body - echo "$rtst -s MPI -w work_MPI -f -p $mpi -n $np $ww3 ww3_tp2.11" >> matrix.body - fi - -# --------------------------------------------------------------------------- # -# 6. Mud/Ice wave interaction tests # -# --------------------------------------------------------------------------- # - - echo " echo ' '" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo '*** mud/ice tests ***'" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo ' '" >> matrix.body - - if [ "$mudice" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s BT8 -w work_BT8 $ww3 ww3_tbt1.1" >> matrix.body - echo "$rtst -s BT9 -w work_BT9 $ww3 ww3_tbt1.1" >> matrix.body - echo "$rtst -s BT8 -w work_BT8 $ww3 ww3_tbt2.1" >> matrix.body - echo "$rtst -s BT9 -w work_BT9 $ww3 ww3_tbt2.1" >> matrix.body - echo "$rtst -g 100m -w work_100m_IC1 -i input_IC1 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 350m -w work_350m_IC1 -i input_IC1 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 1000m -w work_1000m_IC1 -i input_IC1 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 2500m -w work_2500m_IC1 -i input_IC1 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 5km -w work_5km_IC1 -i input_IC1 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 10km -w work_10km_IC1 -i input_IC1 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 20km -w work_20km_IC1 -i input_IC1 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 1000m -w work_1000m_IC2 -i input_IC2 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 350m -w work_350m_IC3 -i input_IC3 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 1000m -w work_1000m_IC3 -i input_IC3 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -g 2500m -w work_2500m_IC3 -i input_IC3 $ww3 ww3_tic1.1" >> matrix.body - echo "$rtst -w work_IC3_A0.5k -i input_IC3_A0.5k $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -w work_IC3_A1.0k -i input_IC3_A1.0k $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -w work_IC3_A2.5k -i input_IC3_A2.5k $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -w work_IC3_B0.5k -i input_IC3_B0.5k $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -w work_IC3_B1.0k -i input_IC3_B1.0k $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -w work_IC3_B2.5k -i input_IC3_B2.5k $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -s PR1_REFRX -w work_IC3_0.5k_PR1 -i input_IC3_0.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -s PR1_REFRX -w work_IC3_2.5k_PR1 -i input_IC3_2.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -s PR2_UQ_REFRX -w work_IC3_0.5k_PR2_UQ -i input_IC3_0.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -s PR2_UQ_REFRX -w work_IC3_2.5k_PR2_UQ -i input_IC3_2.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -s PR2_UNO_REFRX -w work_IC3_0.5k_PR2_UNO -i input_IC3_0.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -s PR2_UNO_REFRX -w work_IC3_2.5k_PR2_UNO -i input_IC3_2.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -s PR3_UQ_REFRX -w work_IC3_0.5k_PR3_UQ -i input_IC3_0.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -s PR3_UQ_REFRX -w work_IC3_2.5k_PR3_UQ -i input_IC3_2.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -s PR3_UNO_REFRX -w work_IC3_0.5k_PR3_UNO -i input_IC3_0.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -s PR3_UNO_REFRX -w work_IC3_2.5k_PR3_UNO -i input_IC3_2.5k $ww3 ww3_tic1.3" >> matrix.body - echo "$rtst -w work_IC1 -i input_IC1 $ww3 ww3_tic2.1" >> matrix.body - fi - - if [ "$mudice" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s BT8_MPI -w work_BT8_MPI -f -p $mpi -n $np $ww3 ww3_tbt1.1" >> matrix.body - echo "$rtst -s BT9_MPI -w work_BT9_MPI -f -p $mpi -n $np $ww3 ww3_tbt1.1" >> matrix.body - echo "$rtst -s BT8_MPI -w work_BT8_MPI -f -p $mpi -n $np $ww3 ww3_tbt2.1" >> matrix.body - echo "$rtst -s BT9_MPI -w work_BT9_MPI -f -p $mpi -n $np $ww3 ww3_tbt2.1" >> matrix.body - echo "$rtst -s MPI -w work_IC3_A0.5k_MPI -i input_IC3_A0.5k -f -p $mpi -n $np $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -s MPI -w work_IC3_A1.0k_MPI -i input_IC3_A1.0k -f -p $mpi -n $np $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -s MPI -w work_IC3_A2.5k_MPI -i input_IC3_A2.5k -f -p $mpi -n $np $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -s MPI -w work_IC3_B0.5k_MPI -i input_IC3_B0.5k -f -p $mpi -n $np $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -s MPI -w work_IC3_B1.0k_MPI -i input_IC3_B1.0k -f -p $mpi -n $np $ww3 ww3_tic1.2" >> matrix.body - echo "$rtst -s MPI -w work_IC3_B2.5k_MPI -i input_IC3_B2.5k -f -p $mpi -n $np $ww3 ww3_tic1.2" >> matrix.body - fi - -# --------------------------------------------------------------------------- # -# 7. Multigrid tests # -# --------------------------------------------------------------------------- # -# Note that test 03 has separate grid sets for MPI and non-MPI tests. -# Note that test 04 has separate grid sets for MPI and non-MPI tests. -# Note that test 06 has separate grid sets for MPI and non-MPI tests. - - echo " echo ' '" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo '*** multi grid tests ***'" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo ' '" >> matrix.body - - if [ "$multi01" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR1 -w work_PR1 $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR1 -w work_PR1_a -m grdset_a $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_b -m grdset_b $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_c -m grdset_c $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_d -m grdset_d $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR1 -w work_PR1_a -m grdset_a $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_b -m grdset_b $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_c -m grdset_c $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_d -m grdset_d $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_e -m grdset_e $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR1 -w work_PR1_a -m grdset_a $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_b -m grdset_b $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_f -m grdset_f $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR1 -w work_PR1_g -m grdset_g $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi01" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UQ -w work_PR2_UQ $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UQ -w work_PR2_UQ_a -m grdset_a $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_b -m grdset_b $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_c -m grdset_c $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_d -m grdset_d $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UQ -w work_PR2_UQ_a -m grdset_a $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_b -m grdset_b $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_c -m grdset_c $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_d -m grdset_d $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_e -m grdset_e $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UQ -w work_PR2_UQ_a -m grdset_a $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_b -m grdset_b $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_f -m grdset_f $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UQ -w work_PR2_UQ_g -m grdset_g $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi01" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UNO -w work_PR2_UNO $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UNO -w work_PR2_UNO_a -m grdset_a $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_b -m grdset_b $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_c -m grdset_c $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_d -m grdset_d $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UNO -w work_PR2_UNO_a -m grdset_a $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_b -m grdset_b $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_c -m grdset_c $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_d -m grdset_d $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_e -m grdset_e $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR2_UNO -w work_PR2_UNO_a -m grdset_a $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_b -m grdset_b $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_f -m grdset_f $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UNO -w work_PR2_UNO_g -m grdset_g $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi01" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ -w work_PR3_UQ_a -m grdset_a $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_b -m grdset_b $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_c -m grdset_c $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_d -m grdset_d $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ -w work_PR3_UQ_a -m grdset_a $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_b -m grdset_b $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_c -m grdset_c $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_d -m grdset_d $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_e -m grdset_e $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ -w work_PR3_UQ_a -m grdset_a $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_b -m grdset_b $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_f -m grdset_f $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_g -m grdset_g $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi02" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_a_c -m grdset_a -g curv $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_b_c -m grdset_b -g curv $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_c_c -m grdset_c -g curv $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_d_c -m grdset_d -g curv $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_a_c -m grdset_a $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_b_c -m grdset_b $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_c_c -m grdset_c $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_d_c -m grdset_d $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_e_c -m grdset_e $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_a_c -m grdset_a $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_b_c -m grdset_b $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_f_c -m grdset_f $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_g_c -m grdset_g $ww3 mww3_test_04" >> matrix.body - fi - if [ "$multi06" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UQ_SCRIP -w work_PR3_UQ_d -m grdset_d $ww3 mww3_test_06" >> matrix.body - fi - - if [ "$multi01" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO -w work_PR3_UNO $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO -w work_PR3_UNO_a -m grdset_a $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_b -m grdset_b $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_c -m grdset_c $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_d -m grdset_d $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO -w work_PR3_UNO_a -m grdset_a $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_b -m grdset_b $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_c -m grdset_c $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_d -m grdset_d $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_e -m grdset_e $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO -w work_PR3_UNO_a -m grdset_a $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_b -m grdset_b $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_f -m grdset_f $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO -w work_PR3_UNO_g -m grdset_g $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi02" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_a_c -m grdset_a -g curv $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_b_c -m grdset_b -g curv $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_c_c -m grdset_c -g curv $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_d_c -m grdset_d -g curv $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_a_c -m grdset_a $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_b_c -m grdset_b $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_c_c -m grdset_c $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_d_c -m grdset_d $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_e_c -m grdset_e $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_a_c -m grdset_a $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_b_c -m grdset_b $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_f_c -m grdset_f $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_g_c -m grdset_g $ww3 mww3_test_04" >> matrix.body - fi - if [ "$multi06" = 'y' ] && [ "$shrd" = 'y' ] - then - echo "$rtst -s PR3_UNO_SCRIP -w work_PR3_UNO_d -m grdset_d $ww3 mww3_test_06" >> matrix.body - fi - - if [ "$multi01" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR1_MPI -w work_PR1_MPI -f -p $mpi -n $np $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR1_MPI -w work_PR1_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR1_MPI -w work_PR1_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_d2 -m grdset_d2 -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR1_MPI -w work_PR1_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR1_MPI -w work_PR1_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi01" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI -f -p $mpi -n $np $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_b -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_c -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_d -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_d2 -m grdset_d2 -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UQ_MPI -w work_PR2_UQ_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi01" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI -f -p $mpi -n $np $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_b -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_c -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_d -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_d2 -m grdset_d2 -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR2_UNO_MPI -w work_PR2_UNO_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi01" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_b -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_c -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_d -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_d2 -m grdset_d2 -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi02" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_a_c -m grdset_a -g curv -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_b_c -m grdset_a -g curv -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_c_c -m grdset_a -g curv -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_d_c -m grdset_a -g curv -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_a_c -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_b_c -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_c_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_d_c -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_d2_c -m grdset_d2 -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_e_c -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_b_c -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_c_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_d_c -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UQ_MPI_SCRIP -w work_PR3_UQ_MPI_e_c -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi01" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI -f -p $mpi -n $np $ww3 mww3_test_01" >> matrix.body - fi - if [ "$multi02" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_b -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_c -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_d -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_a -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_d2 -m grdset_d2 -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_b -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_d -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO_MPI -w work_PR3_UNO_MPI_e -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi02" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_a_c -m grdset_a -g curv -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_b_c -m grdset_a -g curv -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_c_c -m grdset_a -g curv -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_d_c -m grdset_a -g curv -f -p $mpi -n $np $ww3 mww3_test_02" >> matrix.body - fi - if [ "$multi03" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_a_c -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_b_c -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_c_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_d_c -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_d2_c -m grdset_d2 -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_e_c -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_03" >> matrix.body - fi - if [ "$multi04" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_b_c -m grdset_b -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_c_c -m grdset_c -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_d_c -m grdset_d -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - echo "$rtst -s PR3_UNO_MPI_SCRIP -w work_PR3_UNO_MPI_e_c -m grdset_e -f -p $mpi -n $np $ww3 mww3_test_04" >> matrix.body - fi - - if [ "$multi05" = 'y' ] && [ "$dist" = 'y' ] - then - echo "$rtst -s ST1_PR1_MPI -w work_ST1_PR1_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST1_PR2_UQ_MPI -w work_ST1_PR2_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST1_PR2_UNO_MPI -w work_ST1_PR2_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST1_PR3_UQ_MPI -w work_ST1_PR3_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST1_PR3_UNO_MPI -w work_ST1_PR3_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST2_PR1_MPI -w work_ST2_PR1_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST2_PR2_UQ_MPI -w work_ST2_PR2_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST2_PR2_UNO_MPI -w work_ST2_PR2_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST2_PR3_UQ_MPI -w work_ST2_PR3_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST2_PR3_UNO_MPI -w work_ST2_PR3_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST3_PR1_MPI -w work_ST3_PR1_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST3_PR2_UQ_MPI -w work_ST3_PR2_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST3_PR2_UNO_MPI -w work_ST3_PR2_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST3_PR3_UQ_MPI -w work_ST3_PR3_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST3_PR3_UNO_MPI -w work_ST3_PR3_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST4_PR1_MPI -w work_ST4_PR1_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST4_PR2_UQ_MPI -w work_ST4_PR2_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST4_PR2_UNO_MPI -w work_ST4_PR2_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST4_PR3_UQ_MPI -w work_ST4_PR3_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST4_PR3_UNO_MPI -w work_ST4_PR3_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST6_PR1_MPI -w work_ST6_PR1_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST6_PR2_UQ_MPI -w work_ST6_PR2_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST6_PR2_UNO_MPI -w work_ST6_PR2_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST6_PR3_UQ_MPI -w work_ST6_PR3_UQ_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - echo "$rtst -s ST6_PR3_UNO_MPI -w work_ST6_PR3_UNO_MPI -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - fi - - -# --------------------------------------------------------------------------- # -# 6. Other .......... unknown or still to be done ......... # -# --------------------------------------------------------------------------- # - -# $rtst $ww3 ww3_tp2.6 -## $rtst $ww3 ww3_tp2.7 -## $rtst $ww3 ww3_tp2.8 -## $rtst $ww3 ww3_tps4 -## $rtst $ww3 ww3_systrk_test_01 -## $rtst $ww3 mww3_test_06 -## $rtst $ww3 mww3_test_07 - -# --------------------------------------------------------------------------- # -# 7. Default test setup, for testing of run_test only # -# --------------------------------------------------------------------------- # - -else - - echo " echo ' '" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo '*** One of each test ***'" >> matrix.body - echo " echo '**********************************************************'" >> matrix.body - echo " echo ' '" >> matrix.body - echo ' ' - - if [ "$shrd" = 'y' ] - then - echo "$rtst $ww3 ww3_tp1.1" >> matrix.body - echo "$rtst $ww3 ww3_tp1.2" >> matrix.body - echo "$rtst $ww3 ww3_tp1.3" >> matrix.body - echo "$rtst $ww3 ww3_tp1.4" >> matrix.body - echo "$rtst $ww3 ww3_tp1.5" >> matrix.body - echo "$rtst $ww3 ww3_tp1.6" >> matrix.body - - echo "$rtst $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst $ww3 ww3_tp2.5" >> matrix.body - - echo "$rtst $ww3 ww3_ts1" >> matrix.body - echo "$rtst $ww3 ww3_ts2" >> matrix.body - echo "$rtst $ww3 ww3_ts3" >> matrix.body - - echo "$rtst $ww3 mww3_test_01" >> matrix.body - echo "$rtst -m grdset_b $ww3 mww3_test_02" >> matrix.body - echo "$rtst -m grdset_d $ww3 mww3_test_03" >> matrix.body - echo "$rtst -m grdset_f $ww3 mww3_test_04" >> matrix.body - fi - if [ "$dist" = 'y' ] - then - echo "$rtst -m grdset_a -f -p $mpi -n $np $ww3 mww3_test_05" >> matrix.body - fi - -fi - -# --------------------------------------------------------------------------- # -# 8. End of script output # -# --------------------------------------------------------------------------- # - - echo " echo ' '" > matrix.tail - echo " echo ' *****************************************************'" >> matrix.tail - echo " echo ' *** end of WAVEWATCH III matrix of regression tests ***'" >> matrix.tail - echo " echo ' *****************************************************'" >> matrix.tail - echo " echo ' '" >> matrix.tail - -# --------------------------------------------------------------------------- # -# 9. Put it together and clean up # -# --------------------------------------------------------------------------- # - - mv matrix.head matrix - - if [ -z "$filter" ] - then - cat matrix.body >> matrix - rm -f matrix.body - else - for filt in $filter - do - mv matrix.body matrix.head - grep $filt matrix.head > matrix.body - rm -f matrix.head - done - cat matrix.body >> matrix - rm -f matrix.body - fi - - cat matrix.tail >> matrix - rm -f matrix.tail - - echo "file matrix prepared ...." - -# --------------------------------------------------------------------------- # -# End to matrix.base # -# --------------------------------------------------------------------------- # diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index b121f8e10..6e3b99335 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -44,7 +44,7 @@ isorion=`hostname | grep Orion` if [ $ishera ] then # If no other h, assuming Hera - cmplr=hera + cmplr='hera.intel' batchq="slurm" modcomp='intel/18.0.5.274' modmpi='impi/2018.0.4' @@ -52,7 +52,7 @@ then metispath='/scratch2/COASTAL/coastal/save/Ali.Abdolali/parmetis-4.0.3' elif [ $isorion ] then - cmplr=orion + cmplr='orion.intel' batchq="slurm" modcomp='intel/2018.4' modmpi='impi/2018.4' diff --git a/regtests/bin/matrix_zeus_HLT b/regtests/bin/matrix_zeus_HLT deleted file mode 100755 index a0da496cd..000000000 --- a/regtests/bin/matrix_zeus_HLT +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# matrix.go: Run matrix of regression tests on target machine. # -# # -# Remarks: # -# - This version is set up for automatic w3_setenv script and for the # -# NOAA RDHPC 'zeus' system. When using this for your own setup and # -# computer, please copy rather than modify. # -# # -# Hendrik L. Tolman # -# August 2013 # -# December 2013 # -# April 2018 # -# # -# Copyright 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. # -# # -# --------------------------------------------------------------------------- # -# 0. Environment file - - source $(dirname $0)/../../model/bin/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - echo "Main directory : $main_dir" - echo "Scratch directory : $temp_dir" - echo "Save source codes : $source" - echo "Save listings : $list" - - -# 1. Set up -# 1.a Computer/ user dependent set up - - echo '#!/bin/sh --login' > matrix.head - echo ' ' >> matrix.head - echo '#PBS -l procs=24' >> matrix.head - echo '#PBS -q batch' >> matrix.head - echo '#PBS -l walltime=08:00:00' >> matrix.head - echo '#PBS -A marine-cpu' >> matrix.head - echo '#PBS -N ww3_regtest' >> matrix.head - echo '#PBS -j oe' >> matrix.head - echo '#PBS -o matrix.out' >> matrix.head - echo ' ' >> matrix.head - - echo " cd $(dirname $main_dir)/regtests" >> matrix.head - echo ' ' >> matrix.head - -# Netcdf and Parmetis modules & variables - - echo " module load netcdf/4.3.0" >> matrix.head - echo " export WWATCH3_NETCDF=NC4" >> matrix.head - echo " export NETCDF_CONFIG=`which nc-config`" >> matrix.head - echo " export METIS_PATH=/scratch3/NCEPDEV/stmp2/Jessica.Meixner/parmetis-4.0.3" >> matrix.head - echo " export WW3_PARCOMPN=4" >> matrix.head - echo ' ' - -# Compiler option. Choose appropriate compiler and set cmplOption to -# y if using for the first time or using a different compiler - - cmplr=Intel - export cmplOption='y' - - export mpi='mpirun' - export np='24' - export nr='4' - export nth='6' - - if [ "$cmplOption" = 'y' ] - then - export rtst="./bin/run_test -c $cmplr -S" - else - export rtst="./bin/run_test -S" - fi - - export ww3='../model' - -# 1.b Flags to do course selection - - - - - - - - - - - - - - - - - - - - - - -# Addition selection by commenting out lines as below - - export shrd='y' # Do shared architecture tests - export dist='y' # Do distributed architecture (MPI) tests - export omp='y' # Threaded (OpenMP) tests - export hybd='n' # Hybrid options - - export prop1D='y' # 1-D propagation tests (ww3_tp1.X) - export prop2D='y' # 2-D propagation tests (ww3_tp2.X) - export time='y' # time linmited growth - export fetch='y' # fetch linmited growth - export hur1mg='y' # Hurricane with one moving grid - export shwtr='y' # shallow water tests - export unstr='y' # unstructured grid tests - export pdlib='y' # unstr with pdlib for domain decomposition and implicit solver - export smcgr='y' # SMC grid test - export rtd='y' # Rotated pole test - export mudice='y' # Mud/Ice and wave interaction tests - export infgrv='y' # Second harmonic generation tests - export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) - export assim='y' # Restart spectra update - export oasis='y' # Atmosphere, ocean, and ice coupling using oasis - export calendar='y' # Calendar type - export confignc='y' # Configurable netCDF meta data (ww3_ounf) - - export multi01='y' # mww3_test_01 (wetting and drying) - export multi02='y' # mww3_test_02 (basic two-way nesting test)) - export multi03='y' # mww3_test_03 (three high and three low res grids). - export multi04='y' # mww3_test_04 (swell on sea mount and/or current) - export multi05='y' # mww3_test_05 (three-grid moving hurricane) - export multi06='y' # mww3_test_06 (curvilinear grid tests) - export multi07='y' # mww3_test_07 (unstructured grid tests) - export multi08='y' # mww3_test_08 (wind and ice tests) - -# export filter='PR3 ST2 UQ' - # The filter does a set of consecutinve greps on the - # command lines generated by filter.base with the above - # selected options. - -# --------------------------------------------------------------------------- # -# 2. Execute matrix.base ... # -# --------------------------------------------------------------------------- # - - $main_dir/../regtests/bin/matrix.base - -# --------------------------------------------------------------------------- # -# End to the matrix # -# --------------------------------------------------------------------------- # diff --git a/regtests/ww3_tp2.14/input/prep_env.sh b/regtests/ww3_tp2.14/input/prep_env.sh index bba5df192..fa926c706 100755 --- a/regtests/ww3_tp2.14/input/prep_env.sh +++ b/regtests/ww3_tp2.14/input/prep_env.sh @@ -27,20 +27,21 @@ then echo ' ' echo ' Setup cmplr file' if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ - [ "$cmplr" == "zeus_mpt" ] || [ "$cmplr" == "zeus_mpt_debug" ] || \ [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] || \ [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ - [ "$cmplr" == "zeus_intel" ] || [ "$cmplr" == "zeus_intel_debug" ] || \ + [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || \ [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "zeus_gnu" ] || [ "$cmplr" == "zeus_gnu_debug" ] || \ + [ "$cmplr" == "hera.intel" ] || [ "$cmplr" == "orion.intel" ] || \ + [ "$cmplr" == "hera.gnu" ] || [ "$cmplr" == "jet.intel" ] || \ + [ "$cmplr" == "stampede.intel" ] || [ "$cmplr" == "gaea.intel" ] || \ + [ "$cmplr" == "cheyenne.intel" ] || [ "$cmplr" == "cheyenne.gnu" ] || \ + [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ - [ "$cmplr" == "zeus_pgi" ] || [ "$cmplr" == "zeus_pgi_debug" ] || \ [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || \ [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ - [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ] || \ - [ "$cmplr" == "hera" ] ; then + [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ]; then source $WWATCH3_DIR/bin/cmplr.env # shortlist optl alloptl=( $optl ) From 5b63005b05fb1ff0c8da070c00199df4c6f62401 Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Fri, 26 Feb 2021 02:08:38 +0000 Subject: [PATCH 65/84] Added default value for COMSTR in ww3_shel.ftn so comment lines (#325) can be used when reading the points.list file in nml mode. Suggestion by @CarstenHansen. --- model/ftn/ww3_shel.ftn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 4ce54edd3..cb1113b17 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -554,6 +554,9 @@ ! ! 1.c Local parameters ! +! Default COMSTR to "$" (for when using nml input files) + COMSTR = "$" +! ! inferred from context: these flags (FL) are to indicate that the last (LST) ! field has been read from a file. FLLSTL = .FALSE. ! This is associated with J.EQ.1 (wlev) From fc509248a1cd397e138e65d57c1b10183fc64e2f Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Mon, 1 Mar 2021 15:35:28 -0500 Subject: [PATCH 66/84] Add code comments about WRST switch (#146) * changing file type (removing execute option) * adding in-line comments to document the usage of the WRST switch #110 --- model/ftn/w3iorsmd.ftn | 7 +++++++ model/ftn/w3sic5md.ftn | 0 model/ftn/w3src4md.ftn | 0 model/ftn/w3triamd.ftn | 0 model/ftn/w3uostmd.ftn | 0 model/ftn/wmesmfmd.ftn | 5 +++++ model/inp/ww3_trnc.inp | 0 7 files changed, 12 insertions(+) mode change 100755 => 100644 model/ftn/w3sic5md.ftn mode change 100755 => 100644 model/ftn/w3src4md.ftn mode change 100755 => 100644 model/ftn/w3triamd.ftn mode change 100755 => 100644 model/ftn/w3uostmd.ftn mode change 100755 => 100644 model/inp/ww3_trnc.inp diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index 615abe3ec..2a4003770 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -763,6 +763,13 @@ (ICE(ISEA),ISEA=1+(IPART-1)*NSIZE, & MIN(NSEA,IPART*NSIZE)) END DO + +!/WRST ! The WRST switch saves the values of wind in the +!/WRST ! restart file and then uses the wind for the first +!/WRST ! time step here. This is needed when coupling with +!/WRST ! an atm model that does not have 10m wind speeds at +!/WRST ! initialization. If there is no restart, wind is zero + !/WRST DO IX=1, NX !/WRST DO IPART=1,NPRTY2 !/WRST NREC = NREC + 1 diff --git a/model/ftn/w3sic5md.ftn b/model/ftn/w3sic5md.ftn old mode 100755 new mode 100644 diff --git a/model/ftn/w3src4md.ftn b/model/ftn/w3src4md.ftn old mode 100755 new mode 100644 diff --git a/model/ftn/w3triamd.ftn b/model/ftn/w3triamd.ftn old mode 100755 new mode 100644 diff --git a/model/ftn/w3uostmd.ftn b/model/ftn/w3uostmd.ftn old mode 100755 new mode 100644 diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index 83c6f00fb..07ab846c7 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -2284,6 +2284,11 @@ tw0 = twn wx0 = wxn wy0 = wyn +!/WRST ! The WRST switch saves the values of wind in the +!/WRST ! restart file and then uses the wind for the first +!/WRST ! time step here. This is needed when coupling with +!/WRST ! an atm model that does not have 10m wind speeds at +!/WRST ! initialization. If there is no restart, wind is zero !/WRST wxn = WXNwrst !replace with values from restart !/WRST wyn = WYNwrst !/WRST wx0 = WXNwrst diff --git a/model/inp/ww3_trnc.inp b/model/inp/ww3_trnc.inp old mode 100755 new mode 100644 From c5d5b2c5ab202f23c8cf103acd09ffbaa92c4045 Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Wed, 17 Mar 2021 21:54:12 -0400 Subject: [PATCH 67/84] Create pull_request_template.md (#330) * Create pull_request_template.md --- .github/pull_request_template.md | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..006e685d1 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,43 @@ +# Pull Request Summary +(Instructions: this, and all subsequent sections of text should be removed and filled in as appropriate.) +Please describe the PR summary + +## Description +Provide a detailed description of what this PR does. +What bug does it fix, or what feature does it add? +Is a change of answers expected from this PR? + +### Issue(s) addressed +* Is there an issue associated with this development (bug fix, enhancement, new feature)? +Please add a reference to a related issue(s) in WW3 repository (Follow [link](https://docs.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue)). +Link the issues to be closed with this PR, whether in this repository, or in another repository. +(Remember, issues should always be created before starting work on a PR branch!). +Note that properly "linked issues" (either automatic links, or manual ones using the correct keywords) will be automatically closed when the PR is merged. + +- fixes # +- fixes noaa-emc/ww3/issues/ + +### Check list +* Is your feature branch up to date with the authoritative repository (NOAA/develop)? +* Make sure you have checked the [checklist for a developer submitting to develop](https://github.com/NOAA-EMC/WW3/wiki/Code-Management#checklist-for-a-developer-submitting-to-develop), [checklist for a developer submitting to develop](https://github.com/NOAA-EMC/WW3/wiki/Code-Management#checklist-for-a-developer-submitting-to-develop) and [updating version number](https://github.com/NOAA-EMC/WW3/wiki/Code-Management#checklist-for-updating-version-number) +* Reviewers: @mentions of suggested reviewers of the proposed changes. + + +### Testing +* How were these changes tested? +* Are the changes covered by regression tests? (If not, why? Do new tests need to be added?) +* If a new feature was added, was a new regression test added? +* Have regression tests been run? +* Which compiler / HPC you used to run the regression tests in the PR? +* Please provide the summary output of matrix.comp (_matrix.Diff.out_, _matrixCompFull.out_ and _matrixCompSummary.out_): +Please indicate the expected changes in the outputs ([excluding the known list of non-identical tests](https://github.com/NOAA-EMC/WW3/wiki/How-to-use-matrix.comp-to-compare-regtests-with-master#4-look-at-results)). + + + + + + + + + + From c26cd2a67d5613cdfc14bbe1b70e2a0188533f6d Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Wed, 17 Mar 2021 22:29:31 -0400 Subject: [PATCH 68/84] Update issue templates (#329) * Update issues templates for enhancement, documentation, bug report and suggestion --- .../ISSUE_TEMPLATE/add-development-request.md | 10 ++++++++ .github/ISSUE_TEMPLATE/bug_report.md | 23 +++++++++++++++++++ .github/ISSUE_TEMPLATE/documentation.md | 15 ++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/add-development-request.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/documentation.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/add-development-request.md b/.github/ISSUE_TEMPLATE/add-development-request.md new file mode 100644 index 000000000..88f73dbe8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/add-development-request.md @@ -0,0 +1,10 @@ +--- +name: Add Development Request +about: Request that a new development be added to WW3 +title: '' +labels: 'enhancement' +assignees: '' + +--- + + diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..642cffd15 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,23 @@ +--- +name: Bug report +about: Create a report to help us improve WW3 +title: '' +labels: 'bug' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md new file mode 100644 index 000000000..0c2f533c2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -0,0 +1,15 @@ +--- +name: Documentation request/update +about: Add new section in the documentation or report a type/mistake in the documentation +title: '' +labels: 'documentation' +assignees: '' + +--- + +**Describe the section in the documentation that is missing or requires an update?** + +**Report a bug/typo in the documentation** + +**Link the issue(s) associated with this documentation update** + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..10a01c2d7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for WW3 +title: '' +labels: 'enhancement' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is.  + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From 6d95c334eebdb55d3ac1211240fa24d9f959cc83 Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Fri, 19 Mar 2021 13:30:01 +0000 Subject: [PATCH 69/84] UKMO Staging jan2021 (#327) * First set of changes intended to fix the bug (#19) Fixes: https://github.com/NOAA-EMC/WW3/issues/314 * Interpolation weights now correctly calculated on points next to land and BC locations. * Changes to improve the code: the possibility of reading zero values from the input is considered, and points that should not be taken into account in the interpolation are identified by the netcdf fill value; a subroutine is created to avoid code duplication * Bug fix and small simplification/optimization change (#18) * Fixes NOAA-EMC#290 (ww3_multi hanging when generating restart with IOSTYP >= 2) * Also fixes out-of-bounds array access error. * Includes some MPI optimizations * Correction to the bug fix in branch bf_multi_hang to take into account the coupled configurations, that are also affected * Small correction to the multi_hang branch: revert changes to JSEA index in w3iorsmd Co-authored-by: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Co-authored-by: ukmo-juan.castillo --- model/ftn/w3gsrumd.ftn | 6 +- model/ftn/w3odatmd.ftn | 4 +- model/ftn/ww3_prnc.ftn | 209 +++++++++++++----- .../mww3_test_04/input/ww3_multi_grdset_d.inp | 4 +- .../mww3_test_04/input/ww3_multi_grdset_d.nml | 3 +- 5 files changed, 165 insertions(+), 61 deletions(-) diff --git a/model/ftn/w3gsrumd.ftn b/model/ftn/w3gsrumd.ftn index 7bed47be0..93aa85864 100644 --- a/model/ftn/w3gsrumd.ftn +++ b/model/ftn/w3gsrumd.ftn @@ -3726,10 +3726,14 @@ IF ( K .EQ. 1 ) THEN SIGN1 = SIGN(ONE,CROSS) ELSE - IF ( SIGN(ONE,CROSS) .NE. SIGN1 ) THEN + ! If point lies along a border, the cross product + ! is zero and its sign is not well defined + IF ( ABS(CROSS) .GT. LEPS ) THEN + IF ( SIGN(ONE,CROSS) .NE. SIGN1 ) THEN LSBC = .FALSE. CYCLE SUBCELL_LOOP END IF + END IF END IF END DO !K IF ( LSBC ) RETURN diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 2f4fb21be..fc5c3ee01 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -1591,9 +1591,9 @@ !/MPI RSBLKS => OUTPTS(IMOD)%OUT4%RSBLKS !/MPI IF ( NRQRS .NE. 0 ) THEN !/MPI IRQRS => OUTPTS(IMOD)%OUT4%IRQRS -!/MPI IRQRSS => OUTPTS(IMOD)%OUT4%IRQRSS -!/MPI VAAUX => OUTPTS(IMOD)%OUT4%VAAUX !/MPI END IF +!/MPI IRQRSS => OUTPTS(IMOD)%OUT4%IRQRSS +!/MPI VAAUX => OUTPTS(IMOD)%OUT4%VAAUX ! NBI => OUTPTS(IMOD)%OUT5%NBI NBI2 => OUTPTS(IMOD)%OUT5%NBI2 diff --git a/model/ftn/ww3_prnc.ftn b/model/ftn/ww3_prnc.ftn index 6d2fb9d2e..53aa81379 100644 --- a/model/ftn/ww3_prnc.ftn +++ b/model/ftn/ww3_prnc.ftn @@ -1649,7 +1649,6 @@ ! forces to 0 values that are undefined WHERE(XC.NE.XC) XC = FILLVALUE WHERE (XC.NE.FILLVALUE) XC=XC*XCFAC+XCOFF - WHERE (XC.EQ.FILLVALUE) XC=0. ! !/T2 WRITE (NDST,9060) 1 @@ -1683,7 +1682,6 @@ CALL CHECK_ERR(IRET) WHERE(YC.NE.YC) YC = FILLVALUE WHERE (YC.NE.FILLVALUE) YC=YC*YCFAC+YCOFF - WHERE (YC.EQ.FILLVALUE) YC=0. ! !/T2 WRITE (NDST,9060) 2 !/T2 IXP0 = 1 @@ -1802,72 +1800,44 @@ !/O3 IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,976) ' ' IF (( IFLD.LE.2 ).AND.( .NOT. FLBERG )) THEN ! - DO IY=1,NY - DO IX=1,NX - FA(IX,IY) & - = RD11(IX,IY) * XC(IX21(IX,IY),IY21(IX,IY)) & - + RD21(IX,IY) * XC(IX22(IX,IY),IY21(IX,IY)) & - + RD12(IX,IY) * XC(IX21(IX,IY),IY22(IX,IY)) & - + RD22(IX,IY) * XC(IX22(IX,IY),IY22(IX,IY)) - END DO - END DO + CALL INTERP(MXM, MYM, XC, IX21, IX22, IY21, IY22, & + RD11, RD12, RD21, RD22, FILLVALUE, FA) ! IF (NFCOMP.EQ.2) THEN !/O3 IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,976) ' (2) ' - DO IY=1,NY - DO IX=1,NX - FA(IX,IY) = FA(IX,IY) & - + XD11(IX,IY) * YC(JX21(IX,IY),JY21(IX,IY)) & - + XD21(IX,IY) * YC(JX22(IX,IY),JY21(IX,IY)) & - + XD12(IX,IY) * YC(JX21(IX,IY),JY22(IX,IY)) & - + XD22(IX,IY) * YC(JX22(IX,IY),JY22(IX,IY)) - END DO - END DO - END IF + CALL INTERP(YC, JX21, JX22, JY21, JY22, XD11, XD12,& + XD21, XD22, FILLVALUE, FA) + END IF ! ! ... Two-component fields ! ELSE !so if IFLD.GT.2 ! + CALL INTERP(MXM, MYM, XC, IX21, IX22, IY21, IY22, & + RD11, RD12, RD21, RD22, FILLVALUE, FX) + + CALL INTERP(MXM, MYM, YC, IX21, IX22, IY21, IY22, & + RD11, RD12, RD21, RD22, FILLVALUE, FY) + + CALL INTERP(MXM, MYM, AC, IX21, IX22, IY21, IY22, & + RD11, RD12, RD21, RD22, FILLVALUE, FA) + + CALL INTERP(MXM, MYM, SQRT(XC**2+YC**2), IX21, IX22, & + IY21, IY22, RD11, RD12, RD21, RD22, & + SQRT(2.0)*FILLVALUE, A2) + + CALL INTERP(MXM, MYM, XC**2+YC**2, IX21, IX22, & + IY21, IY22, RD11, RD12, RD21, RD22, & + 2.0*FILLVALUE*FILLVALUE, A3) + DO IY=1,NY DO IX=1,NX - FX(IX,IY) & - = RD11(IX,IY) * XC(IX21(IX,IY),IY21(IX,IY)) & - + RD21(IX,IY) * XC(IX22(IX,IY),IY21(IX,IY)) & - + RD12(IX,IY) * XC(IX21(IX,IY),IY22(IX,IY)) & - + RD22(IX,IY) * XC(IX22(IX,IY),IY22(IX,IY)) - FY(IX,IY) & - = RD11(IX,IY) * YC(IX21(IX,IY),IY21(IX,IY)) & - + RD21(IX,IY) * YC(IX22(IX,IY),IY21(IX,IY)) & - + RD12(IX,IY) * YC(IX21(IX,IY),IY22(IX,IY)) & - + RD22(IX,IY) * YC(IX22(IX,IY),IY22(IX,IY)) - FA(IX,IY) & - = RD11(IX,IY) * AC(IX21(IX,IY),IY21(IX,IY)) & - + RD21(IX,IY) * AC(IX22(IX,IY),IY21(IX,IY)) & - + RD12(IX,IY) * AC(IX21(IX,IY),IY22(IX,IY)) & - + RD22(IX,IY) * AC(IX22(IX,IY),IY22(IX,IY)) A1(IX,IY) = MAX ( 1.E-10 , & SQRT( FX(IX,IY)**2 + FY(IX,IY)**2 ) ) - A2(IX,IY) & - = RD11(IX,IY) * SQRT(XC(IX21(IX,IY),IY21(IX,IY))**2 & - +YC(IX21(IX,IY),IY21(IX,IY))**2) & - + RD21(IX,IY) * SQRT(XC(IX22(IX,IY),IY21(IX,IY))**2 & - +YC(IX22(IX,IY),IY21(IX,IY))**2) & - + RD12(IX,IY) * SQRT(XC(IX21(IX,IY),IY22(IX,IY))**2 & - +YC(IX21(IX,IY),IY22(IX,IY))**2) & - + RD22(IX,IY) * SQRT(XC(IX22(IX,IY),IY22(IX,IY))**2 & - +YC(IX22(IX,IY),IY22(IX,IY))**2) - A3(IX,IY) = SQRT ( & - RD11(IX,IY) * ( XC(IX21(IX,IY),IY21(IX,IY))**2 & - + YC(IX21(IX,IY),IY21(IX,IY))**2 ) & - + RD21(IX,IY) * ( XC(IX22(IX,IY),IY21(IX,IY))**2 & - + YC(IX22(IX,IY),IY21(IX,IY))**2 ) & - + RD12(IX,IY) * ( XC(IX21(IX,IY),IY22(IX,IY))**2 & - + YC(IX21(IX,IY),IY22(IX,IY))**2 ) & - + RD22(IX,IY) * ( XC(IX22(IX,IY),IY22(IX,IY))**2 & - + YC(IX22(IX,IY),IY22(IX,IY))**2 ) ) - END DO + + A3(IX,IY) = SQRT( A3(IX,IY) ) END DO + END DO ! ! ... Winds, correct for velocity or energy conservation ! @@ -2238,6 +2208,135 @@ END PROGRAM W3PRNC +!============================================================================== + + SUBROUTINE INTERP(MXM, MYM, XC, IX21, IX22, IY21, IY22, & + RD11, RD12, RD21, RD22, FILLVALUE, FA) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | J. M. Castillo | +!/ | FORTRAN 90 | +!/ | Last update : 23-Feb-2021 | +!/ +-----------------------------------+ +!/ +!/ 23-Feb-2021 : First version ( version 7.xx ) +!/ +! 1. Purpose : +! +! Interpolate from a field read from file to the wave grid +! +! 2. Method : +! +! Invalid points are identified by the fill value read from the +! netcdf input, and interpolation does not take into account +! these points. The valid interpolation coefficients are scaled +! so that the sum is one, otherwise unphysical values can be +! generated. +! +! When one point is on the boundary but is not an ocean grid point, +! the interpolation coefficients are zero, and in this case we +! provide a sensible value - the value as read, not interpolated +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! MxM I I Dimensions of the XC variable +! XC R.A. I Field to be interpolated, as read from the +! input netcdf +! IXxx I.A. I List of x-index to convert from the original +! field to the model grid +! IYxx I.A. I List of y-index to convert from the original +! field to the model grid +! RDxx R.A. I Interpolation factors +! FILLVALUE R I Fill value identifying non valid input +! FA F O Result of the interpolation +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! None +! +! 5. Called by : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! WW3_PRNC Prog. N/A Input data preprocessor. +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None +! +! 7. Remarks : +! +! 8. Structure : +! +! See source code. +! +! 9. Switches : +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / + USE W3GDATMD, ONLY: NX, NY + + IMPLICIT NONE +!/ +!/ ------------------------------------------------------------------- / +!/ Parameter list +!/ + INTEGER, INTENT(IN) :: MXM, MYM + REAL, DIMENSION(MXM,MYM), INTENT(IN) :: XC + INTEGER, DIMENSION(NX,NY), INTENT(IN) :: IX21, IX22, IY21, IY22 + REAL, DIMENSION(NX,NY), INTENT(IN) :: RD11, RD12, RD21, RD22 + REAL, INTENT(IN) :: FILLVALUE + REAL, DIMENSION(NX,NY), INTENT(OUT) :: FA +!/ +!/ ------------------------------------------------------------------- / +!/ Local variables +!/ + INTEGER :: IX, IY + REAL :: FACTOR +!/ ------------------------------------------------------------------- / + + DO IY=1,NY + DO IX=1,NX + FACTOR = 0.0 + FA(IX,IY) = 0.0 + + IF(XC(IX21(IX,IY),IY21(IX,IY)).NE.FILLVALUE) THEN + FACTOR = FACTOR + RD11(IX,IY) + FA(IX,IY) = RD11(IX,IY) * XC(IX21(IX,IY),IY21(IX,IY)) + ENDIF + IF(XC(IX22(IX,IY),IY21(IX,IY)).NE.FILLVALUE) THEN + FACTOR = FACTOR + RD21(IX,IY) + FA(IX,IY) = FA(IX,IY) + RD21(IX,IY) * XC(IX22(IX,IY),IY21(IX,IY)) + ENDIF + IF(XC(IX21(IX,IY),IY22(IX,IY)).NE.FILLVALUE) THEN + FACTOR = FACTOR + RD12(IX,IY) + FA(IX,IY) = FA(IX,IY) + RD12(IX,IY) * XC(IX21(IX,IY),IY22(IX,IY)) + ENDIF + IF(XC(IX22(IX,IY),IY22(IX,IY)).NE.FILLVALUE) THEN + FACTOR = FACTOR + RD22(IX,IY) + FA(IX,IY) = FA(IX,IY) + RD22(IX,IY) * XC(IX22(IX,IY),IY22(IX,IY)) + ENDIF + + IF(FACTOR.GT.0.0) THEN + FA(IX,IY) = FA(IX,IY) / FACTOR + ELSE + IF(XC(IX,IY).EQ.FILLVALUE) THEN + FA(IX,IY) = 0.0 + ELSE + FA(IX,IY) = XC(IX,IY) + ENDIF + END IF + END DO + END DO + + END SUBROUTINE INTERP + !============================================================================== SUBROUTINE CHECK_ERR(IRET) diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_04/input/ww3_multi_grdset_d.inp index 1de081f38..4be1543c8 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_d.inp @@ -15,7 +15,7 @@ $ 19680606 000000 1200 19680608 000000 $ N - DPT CUR HS FP DP DIR SPR + DPT CUR HS FP DP DIR SPR WND UST LM $ 19680606 000000 3600 19680608 000000 -100.E3 50.E3 'A1' @@ -43,7 +43,7 @@ $ 0.E3 0.E3 'STOPSTRING' $ 19680606 000000 0 19680608 000000 - 19680606 011200 0 19680606 011200 + 19680606 020000 3600 19680606 020000 19680606 000000 0 19680608 000000 19680606 000000 0 19680608 000000 $ diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml b/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml index c3a7f01b2..16649180a 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_d.nml @@ -164,7 +164,7 @@ ! ITYPE(3)%TRACK%FORMAT = F ! -------------------------------------------------------------------- ! &OUTPUT_TYPE_NML - ALLTYPE%FIELD%LIST = 'DPT CUR HS FP DP DIR SPR' + ALLTYPE%FIELD%LIST = 'DPT CUR HS FP DP DIR SPR WND UST LM' ALLTYPE%POINT%NAME = 'points' ALLTYPE%POINT%FILE = '../input/points.list' / @@ -208,6 +208,7 @@ &OUTPUT_DATE_NML ALLDATE%FIELD = '19680606 000000' '1200' '19680608 000000' ALLDATE%POINT = '19680606 000000' '3600' '19680608 000000' + ALLDATE%RESTART = '19680606 020000' '3600' '19680606 020000' / ! -------------------------------------------------------------------- ! From 854fc863973a620f501ef991f461db0d7af92e5a Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Mon, 22 Mar 2021 09:22:08 -0400 Subject: [PATCH 70/84] Fb_global_unstr (#335) * Added boundary checks to the SMC grid input files for ww3_grid, to ensure they comply with the limits of the nameslist. * Fb 360 calendar (#8) Changes to add support to 360-day and 365-day (no leap year) calendar - see ticket #209 * Additional CALTYPE namelist parameter in MISC section * New ww3_tc1 regtest. * RTD support for ww3_boun[dc] (#10) * Updated ww3_bound and ww3_bounc to handle model grids formulated on a rotated pole. * Manual and nml/inp files to updated clarify that ww3_bound/ww3_bounc only accept input spectra formulated on a standard pole grid. * Fb coupling time (#9) Updates to allow a coupling time step that is different from the model time step. * Includes new regtest (in ww3_tp2.14) for non-default oasis time step. * ww3_tp2.14 regtest added to matrix.base. * bug fix for ukmet development * Periodicity fix for global unstructured grids - Corrects calculation of element areas and edge lengths across the dateline in w3triamd.ftn - Fixes calculation to determine whether a point is inside an element that spans the dateline in w3triamd.ftn - Corrects calculation of element centers and corners across dateline in wmscrpmd.ftn - Write out SCRIP file in netCDF format at the end of ww3_grid (for creating offline remaping files). This required adding netCDF support to ww3_grid - Also includes minor fix for the /O7a switch in w3iopomd.ftn * modify the model/ftn/w3triamd.ftn and model/ftn/wmscrpmd.ftn and change from global grids from min(longitude)=-180, max(longitude)=180 to \delta(longitude)=360 degrees and added the regression test ww3_tp2.21 * bug fix for ww3_grid make without SCRIP switch * Fix for corner node periodicity in wmscrpmd.ftn * PDLIB/yowpdlibmain.ftn: fix to handle global meshes * bug fix for SCRIPNC switch * update info for ww3_tp2.21 for domain decomposition and PDLIB option * fix for mww3_04 link with SCRIP and SCRIPNC switch * add inputs to tar file, update model/bin/ww3_from_ftp.sh and remove inputs from ww3_tp2.21 * reduce the duration of ww3_tp2.21 for the sake of regtest time * small editorial fixes * fixes for SCRIPNC switch * change date for ww3_ounf and ww3_ounp for ww3_tp2.21 * edit w3_make Co-authored-by: lewis.sampson Co-authored-by: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Co-authored-by: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Co-authored-by: Ali Abdolali Co-authored-by: Steven Brus Co-authored-by: Steven Brus Co-authored-by: Lorenzo Mentaschi --- model/bin/make_makefile.sh | 12 +- model/bin/w3_make | 5 +- model/bin/ww3_from_ftp.sh | 4 +- model/ftn/PDLIB/yowpdlibmain.ftn | 42 ++ model/ftn/SCRIP/scrip_grids.f | 4 + model/ftn/w3iopomd.ftn | 4 +- model/ftn/w3triamd.ftn | 135 ++++++- model/ftn/wmscrpmd.ftn | 178 +++++++-- model/ftn/ww3_grid.ftn | 93 ++++- regtests/bin/matrix.base | 10 + regtests/ww3_tp2.21/info | 41 ++ regtests/ww3_tp2.21/input/switch_NO_PDLIB | 1 + regtests/ww3_tp2.21/input/switch_PDLIB | 1 + regtests/ww3_tp2.21/input/ww3_grid_a.inp | 36 ++ regtests/ww3_tp2.21/input/ww3_grid_b.inp | 60 +++ regtests/ww3_tp2.21/input/ww3_ounf.inp | 83 ++++ regtests/ww3_tp2.21/input/ww3_ounp.inp | 117 ++++++ regtests/ww3_tp2.21/input/ww3_prnc.inp | 51 +++ regtests/ww3_tp2.21/input/ww3_shel.inp | 443 ++++++++++++++++++++++ regtests/ww3_tp2.21/input/ww3_strt.inp | 72 ++++ 20 files changed, 1344 insertions(+), 48 deletions(-) create mode 100644 regtests/ww3_tp2.21/info create mode 100644 regtests/ww3_tp2.21/input/switch_NO_PDLIB create mode 100644 regtests/ww3_tp2.21/input/switch_PDLIB create mode 100644 regtests/ww3_tp2.21/input/ww3_grid_a.inp create mode 100644 regtests/ww3_tp2.21/input/ww3_grid_b.inp create mode 100755 regtests/ww3_tp2.21/input/ww3_ounf.inp create mode 100755 regtests/ww3_tp2.21/input/ww3_ounp.inp create mode 100755 regtests/ww3_tp2.21/input/ww3_prnc.inp create mode 100644 regtests/ww3_tp2.21/input/ww3_shel.inp create mode 100644 regtests/ww3_tp2.21/input/ww3_strt.inp diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index dec155c22..3bd83cc3a 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -887,7 +887,17 @@ prop= source="w3parall w3triamd $stx $nlx $btx $is $uostmd" IO='w3iogrmd' - aux="constants w3servmd w3arrymd w3dispmd w3gsrumd w3timemd w3nmlgridmd $pdlibyow $memcode" ;; + aux="constants w3servmd w3arrymd w3dispmd w3gsrumd w3timemd w3nmlgridmd $pdlibyow $memcode" + if [ "$scrip" = 'SCRIP' ] + then + aux="$aux scrip_constants scrip_grids scrip_iounitsmod" + aux="$aux scrip_remap_vars scrip_timers scrip_errormod scrip_interface" + aux="$aux scrip_kindsmod scrip_remap_conservative wmscrpmd" + fi + if [ "$scripnc" = 'SCRIPNC' ] + then + aux="$aux scrip_netcdfmod scrip_remap_write scrip_remap_read" + fi ;; ww3_strt) IDstring='Initial conditions program' core= data="$memcode w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd" diff --git a/model/bin/w3_make b/model/bin/w3_make index 56e7f4cbc..86199fc59 100755 --- a/model/bin/w3_make +++ b/model/bin/w3_make @@ -135,8 +135,7 @@ # GRID STRT BOUND OUTF OUTP TRCK GRIB GINT GX* UPRSTR LIBWW3 # reg_programs = non-NetCDF programs - reg_programs="ww3_grid" - reg_programs="$reg_programs ww3_strt" + reg_programs="ww3_strt" reg_programs="$reg_programs ww3_bound" reg_programs="$reg_programs ww3_outf" reg_programs="$reg_programs ww3_outp" @@ -171,6 +170,7 @@ # MULTI MULTI_ESMF SBS1 if [ -n "`grep SCRIPNC $switch_file`" ] || [ -n "`grep OASIS $switch_file`" ] || [ -n "`grep PDLIB $switch_file`" ] then + cdf_programs="$cdf_programs ww3_grid" cdf_programs="$cdf_programs ww3_multi" cdf_programs="$cdf_programs ww3_sbs1" cdf_programs="$cdf_programs libww3" @@ -179,6 +179,7 @@ cdf_programs="$cdf_programs ww3_multi_esmf" fi else + reg_programs="$reg_programs ww3_grid" reg_programs="$reg_programs ww3_multi" reg_programs="$reg_programs ww3_sbs1" reg_programs="$reg_programs libww3" diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index fa7178274..03d0f4fe4 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -8,7 +8,7 @@ curr_dir=`pwd` # Set WW3 code version -ww3ver=v7.07 +ww3ver=v7.12.1 #Get top level directory of ww3 from user: echo -e "\n\n This script will download data from the ftp for WAVEWATCH III " @@ -51,7 +51,7 @@ cp -r data_regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM regtests/ww cp -r data_regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM6 cp -r data_regtests/ww3_tp2.14/input/toy/*.nc regtests/ww3_tp2.14/input/toy/ cp -r data_regtests/ww3_tp2.17/input/* regtests/ww3_tp2.17/input/ - +cp -r data_regtests/ww3_tp2.21/input/* regtests/ww3_tp2.21/input/ #Do you want to clean up (aka delete tar file, delete the data_regtests directory) echo -e "\n\n Do you want to delete the tar file ww3_from_ftp.${ww3ver}.tar.gz [y|n]: " diff --git a/model/ftn/PDLIB/yowpdlibmain.ftn b/model/ftn/PDLIB/yowpdlibmain.ftn index d1aba643f..be63fe447 100644 --- a/model/ftn/PDLIB/yowpdlibmain.ftn +++ b/model/ftn/PDLIB/yowpdlibmain.ftn @@ -1145,6 +1145,7 @@ module yowpdlibMain implicit none integer I1, I2, I3, stat, IE, NI(3) real(rkind) :: DXP1, DXP2, DXP3, DYP1, DYP2, DYP3, DBLTMP, TRIA03 + logical :: CROSSES_DATELINE allocate(PDLIB_SI(npa), PDLIB_CCON(npa), PDLIB_IEN(6,ne), PDLIB_TRIA(ne), stat=stat) if(stat/=0) call parallel_abort('SI allocation failure') @@ -1163,6 +1164,12 @@ module yowpdlibMain DYP2=y(I3) - y(I2) DXP3=x(I1) - x(I3) DYP3=y(I1) - y(I3) + CALL ELEMENT_CROSSES_DATELINE(DXP1, DXP2, DXP3, CROSSES_DATELINE) + IF (CROSSES_DATELINE) THEN + CALL CORRECT_DX_GT180(DXP1) + CALL CORRECT_DX_GT180(DXP2) + CALL CORRECT_DX_GT180(DXP3) + ENDIF PDLIB_IEN(1,IE) = - DYP2 PDLIB_IEN(2,IE) = DXP2 @@ -1185,6 +1192,41 @@ module yowpdlibMain end subroutine !********************************************************************** !* * +!********************************************************************** + subroutine ELEMENT_CROSSES_DATELINE(RX1, RX2, RX3, CROSSES_DATELINE) +! Purpose: understanding if an element crosses the dateline. +! An element crossing the dateline has, e.g. a node with lon < 180 +! and another 2 with lon > -180 + IMPLICIT NONE + REAL(rkind), INTENT(IN) :: RX1, RX2, RX3 + LOGICAL, INTENT(OUT) :: CROSSES_DATELINE + INTEGER :: R1GT180, R2GT180, R3GT180 + R1GT180 = MERGE(1, 0, ABS(RX1).GT.180) + R2GT180 = MERGE(1, 0, ABS(RX2).GT.180) + R3GT180 = MERGE(1, 0, ABS(RX3).GT.180) +! if R1GT180+R2GT180+R3GT180 .eq. 0 the element does not cross the dateline +! if R1GT180+R2GT180+R3GT180 .eq. 1 the element contains the pole +! if R1GT180+R2GT180+R3GT180 .eq. 2 the element crosses the dateline + CROSSES_DATELINE = R1GT180+R2GT180+R3GT180 .EQ. 2 + end subroutine +!********************************************************************** +!* * +!********************************************************************** + subroutine CORRECT_DX_GT180(DXP) +! Purpose: the absolute zonal distance between 2 points is always <= 180 +! This subroutine corrects the zonal distance to satifsy +! this requirement + IMPLICIT NONE + REAL(rkind), INTENT(INOUT) :: DXP + IF (DXP .le. -180) THEN + DXP=DXP + 360 + END IF + IF (DXP .ge. 180) THEN + DXP=DXP - 360 + END IF + end subroutine +!********************************************************************** +!* * !********************************************************************** subroutine ComputeIA_JA_POSI_NNZ use yowElementpool, only: ne, ne_global, INE, ielg diff --git a/model/ftn/SCRIP/scrip_grids.f b/model/ftn/SCRIP/scrip_grids.f index 4b38fa9df..193d00cb7 100644 --- a/model/ftn/SCRIP/scrip_grids.f +++ b/model/ftn/SCRIP/scrip_grids.f @@ -96,6 +96,10 @@ module scrip_grids & special_polar_cell1, ! cell with only 1 corner at pole & special_polar_cell2 ! + integer (SCRIP_i4), dimension(:), allocatable, target,save :: + & grid1_imask, ! flag which cells participate + & grid2_imask ! flag which cells participate + real (SCRIP_r8), dimension(:), allocatable, target, save :: & grid1_center_lat, ! lat/lon coordinates for & grid1_center_lon, ! each grid center in radians diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index 80f71e556..04f6a705a 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -242,7 +242,7 @@ INTEGER :: IX1, IY1, IXS, IYS !/S INTEGER, SAVE :: IENT = 0 !/O7a INTEGER :: IX0, IXN, IY0, IYN, NNX, & -!/O7a KX, KY, JX, IIX +!/O7a KX, KY, JX, IIX, IX2, IY2, IS1 INTEGER :: IX(4), IY(4) ! Indices of points used in interp. REAL :: RD(4) ! Interpolation coefficient !/O7a REAL :: RD1, RD2, RDTOT, ZBOX(4), DEPTH @@ -392,7 +392,7 @@ !/O7a RD(4)*ZBOX(4) ) / RDTOT !/O7a WRITE (SCREEN,943) DEPTH ! -!/O7a *** implementation of O7a option with curvilinear grids is incomplete *** +!/O7a ! *** implementation of O7a option with curvilinear grids is incomplete *** ! !/O7a IF ( RD1 .LT. 0.05 ) IX2 = IX1 !/O7a IF ( RD1 .GT. 0.95 ) IX1 = IX2 diff --git a/model/ftn/w3triamd.ftn b/model/ftn/w3triamd.ftn index d3a0e56f7..962b8bf3a 100644 --- a/model/ftn/w3triamd.ftn +++ b/model/ftn/w3triamd.ftn @@ -614,7 +614,6 @@ CONTAINS ! ! 1. purpose: defines open boundary points based on depth ! 2. Method : a boundary node has more node around it than triangles -! ! ! ! 3. Parameters : @@ -739,6 +738,8 @@ CONTAINS REAL :: TL1, TL2, TL3, TMPTRIGP INTEGER :: I1, I2, I3 INTEGER :: K + REAL*8 :: PT(3,2) + !/S INTEGER :: IENT = 0 !/ ------------------------------------------------------------------- / !/S CALL STRACE (IENT, 'SPATIAL_GRID') @@ -748,13 +749,16 @@ CONTAINS I1 = TRIGP(K,1) I2 = TRIGP(K,2) I3 = TRIGP(K,3) + + CALL FIX_PERIODCITY(I1,I2,I3,XYB,PT) ! ! cross product of edge-vector (orientated anticlockwise) ! - TRIA(K) = REAL( (XYB(I2,2)-XYB(I1,2)) & ! (Y2-Y1) - *(XYB(I1,1)-XYB(I3,1)) & ! *(X1-X3) - +(XYB(I3,2)-XYB(I1,2)) & ! (Y3-Y1)*(X2-X1) - *(XYB(I2,1)-XYB(I1,1)) )*0.5 + + TRIA(K) = REAL( (PT(2,2)-PT(1,2)) & ! (Y2-Y1) + *(PT(1,1)-PT(3,1)) & ! *(X1-X3) + +(PT(3,2)-PT(1,2)) & ! (Y3-Y1)*(X2-X1) + *(PT(2,1)-PT(1,1)) )*0.5 ! ! test on negative triangle area, which means that the orientiation is not as assumed to be anticw. ! therefore we swap the nodes !!! @@ -832,6 +836,7 @@ CONTAINS REAL*8 :: N1(2), N2(2), N3(2) REAL*8 :: TMP(3) REAL*8 :: TMPINV(3) + REAL*8 :: PT(3,2) !/S INTEGER :: IENT = 0 !/ ------------------------------------------------------------------- / !/S CALL STRACE (IENT, 'NVECTRI') @@ -845,12 +850,14 @@ CONTAINS I2 = TRIGP(IE,2) I3 = TRIGP(IE,3) - P1(1) = XYB(I1,1) - P1(2) = XYB(I1,2) - P2(1) = XYB(I2,1) - P2(2) = XYB(I2,2) - P3(1) = XYB(I3,1) - P3(2) = XYB(I3,2) + CALL FIX_PERIODCITY(I1,I2,I3,XYB,PT) + + P1(1) = PT(1,1) + P1(2) = PT(1,2) + P2(1) = PT(2,1) + P2(2) = PT(2,2) + P3(1) = PT(3,1) + P3(2) = PT(3,2) ! ! I1 -> I2, I2 -> I3, I3 -> I1 (anticlockwise orientation is preserved) ! @@ -1418,6 +1425,7 @@ END SUBROUTINE DOUBLE PRECISION :: x1, x2, x3 DOUBLE PRECISION :: y1, y2, y3 DOUBLE PRECISION :: s1, s2, s3, sg1, sg2, sg3 + REAL*8 :: PT(3,2) INTEGER :: ITRI INTEGER :: I1, I2, I3 INTEGER :: nbFound @@ -1433,15 +1441,17 @@ END SUBROUTINE I1=GRIDS(IMOD)%TRIGP(ITRI,1) I2=GRIDS(IMOD)%TRIGP(ITRI,2) I3=GRIDS(IMOD)%TRIGP(ITRI,3) + + CALL FIX_PERIODCITY(I1,I2,I3,GRIDS(IMOD)%XYB,PT) ! coordinates of the first vertex A - x1=GRIDS(IMOD)%XYB(I1,1) - y1=GRIDS(IMOD)%XYB(I1,2) + x1 = PT(1,1) + y1 = PT(1,2) ! coordinates of the 2nd vertex B - x2=GRIDS(IMOD)%XYB(I2,1) - y2=GRIDS(IMOD)%XYB(I2,2) + x2 = PT(2,1) + y2 = PT(2,2) !coordinates of the 3rd vertex C - x3=GRIDS(IMOD)%XYB(I3,1) - y3=GRIDS(IMOD)%XYB(I3,2) + x3 = PT(3,1) + y3 = PT(3,2) !with M = (XTIN,YTIN) the target point ... !vector product of AB and AC sg3=(y3-y1)*(x2-x1)-(x3-x1)*(y2-y1) @@ -2729,4 +2739,95 @@ END SUBROUTINE RETURN END SUBROUTINE SETUGIOBP !/ ------------------------------------------------------------------- / + + SUBROUTINE FIX_PERIODCITY(I1,I2,I3,XYB,PT) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | Steven Brus | +!/ | Ali Abdolali | +!/ | FORTRAN 90 | +!/ | Last update : 21-May-2020 | +!/ +-----------------------------------+ +!/ +!/ 21-May-2020 : Origination. ( version 6.07 ) +!/ +!/ +! 1. Purpose : +! +! Adjust element longitude coordinates for elements straddling the +! dateline with distance of ~360 degrees +! +! 2. Method : +! +! Detect if element has nodes on both sides of dateline and adjust +! coordinates so that all nodes have the same sign +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- + IMPLICIT NONE + INTEGER, INTENT(IN) :: I1, I2, I3 + DOUBLE PRECISION, INTENT(IN) :: XYB(:,:) + REAL*8, INTENT(OUT) :: PT(3,2) +! ---------------------------------------------------------------- +! +! Local variables. +! ---------------------------------------------------------------- + INTEGER :: I + INTEGER :: R1GT180, R2GT180, R3GT180 +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! + +! 5. Called by : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! SPATIAL_GRID Subr. W3TRIAM Triangle area calculation +! NVECTRI Subr. W3TRIAM Edge length, angle, normal calcuation +! IS_IN_UNGRID Subr. W3TRIAM Point in element calculation +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! 8. Structure : +! +! 9. Switches : +! +! 10. Source code : +!/ ------------------------------------------------------------------- / + + PT(1,1) = XYB(I1,1) + PT(1,2) = XYB(I1,2) + PT(2,1) = XYB(I2,1) + PT(2,2) = XYB(I2,2) + PT(3,1) = XYB(I3,1) + PT(3,2) = XYB(I3,2) + + + R1GT180 = MERGE(1, 0, ABS(PT(3,1)-PT(2,1)).GT.180) + R2GT180 = MERGE(1, 0, ABS(PT(1,1)-PT(3,1)).GT.180) + R3GT180 = MERGE(1, 0, ABS(PT(2,1)-PT(1,1)).GT.180) + ! if R1GT180+R2GT180+R3GT180 .eq. 0 the element does not cross the dateline + ! if R1GT180+R2GT180+R3GT180 .eq. 1 the element contains the pole + ! if R1GT180+R2GT180+R3GT180 .eq. 2 the element crosses the dateline + + + IF ( R1GT180 + R2GT180 == 2 ) THEN + PT(3,1)=PT(3,1)-SIGN(360.0,(PT(3,1)-PT(2,1))) + ELSE IF ( R2GT180 + R3GT180 == 2 ) THEN + PT(1,1)=PT(1,1)-SIGN(360.0,(PT(1,1)-PT(2,1))) + ELSE IF ( R1GT180 + R3GT180 == 2 ) THEN + PT(2,1)=PT(2,1)-SIGN(360.0,(PT(2,1)-PT(3,1))) + ENDIF + + RETURN + END SUBROUTINE FIX_PERIODCITY END MODULE W3TRIAMD diff --git a/model/ftn/wmscrpmd.ftn b/model/ftn/wmscrpmd.ftn index fda61c00e..217188b6f 100644 --- a/model/ftn/wmscrpmd.ftn +++ b/model/ftn/wmscrpmd.ftn @@ -540,6 +540,7 @@ REAL*8 :: ELAT1, ELAT2, ELAT3, ELAT, ELATC REAL *8 :: DELTALON12, DELTALON13, DELTALAT12, DELTALAT13 REAL *8 :: THEDET + REAL*8 :: PT(3,2) INTEGER, POINTER :: IOBP(:), TRIGINCD(:) INTEGER, POINTER :: NEIGHBOR_PREV(:), NEIGHBOR_NEXT(:) INTEGER, POINTER :: NBASSIGNEDCORNER(:), LISTNBCORNER(:) @@ -618,10 +619,13 @@ CHECK_ALLOC_STATUS ( ISTAT ) ALLOCATE(LAT_CENT_TRIG(MNE), STAT=ISTAT) CHECK_ALLOC_STATUS ( ISTAT ) + CALL GET_UNSTRUCTURED_VERTEX_DEGREE (MNP, MNE, & GRIDS(ID_GRD)%TRIGP, TRIGINCD) CALL GET_BOUNDARY(MNP, MNE, GRIDS(id_grd)%TRIGP, IOBP, & NEIGHBOR_PREV, NEIGHBOR_NEXT) + + ! Find max number of corners MAXCORNER=0 DO IP=1,MNP IF (NEIGHBOR_NEXT(IP) .EQ. 0) THEN @@ -635,6 +639,7 @@ END IF END DO GRID_CORNERS=MAXCORNER + ALLOCATE(GRID_CENTER_LON(MNP), STAT=ISTAT) CHECK_ALLOC_STATUS ( ISTAT ) ALLOCATE(GRID_CENTER_LAT(MNP), STAT=ISTAT) @@ -645,6 +650,8 @@ CHECK_ALLOC_STATUS ( ISTAT ) ALLOCATE(GRID_MASK(MNP), STAT=ISTAT) CHECK_ALLOC_STATUS ( ISTAT ) + + ! Add first three corners for boundaries NBASSIGNEDCORNER(:)=0 DO IP=1,MNP GRID_MASK(IP)=.TRUE. @@ -657,10 +664,21 @@ ELATNEXT=DBLE(GRIDS(ID_GRD)%XYB(IPNEXT,2)) ELONPREV=DBLE(GRIDS(ID_GRD)%XYB(IPPREV,1)) ELATPREV=DBLE(GRIDS(ID_GRD)%XYB(IPPREV,2)) - ELONN=(ELONIP+ELONNEXT)/2 - ELATN=(ELATIP+ELATNEXT)/2 - ELONP=(ELONIP+ELONPREV)/2 - ELATP=(ELATIP+ELATPREV)/2 + + ! Periodicity fix for corner node + IF ( ABS(ELONIP - ELONNEXT) .GT. 180.0 ) THEN + ELONNEXT = ELONNEXT -SIGN(360.0,(ELONIP - ELONNEXT)) + ENDIF + IF ( ABS(ELONIP - ELONPREV) .GT. 180.0 ) THEN + ELONPREV = ELONPREV -SIGN(360.0,(ELONIP - ELONPREV)) + ENDIF + + ELONN=(ELONIP+ELONNEXT)/2.0 + ELATN=(ELATIP+ELATNEXT)/2.0 + ELONP=(ELONIP+ELONPREV)/2.0 + ELATP=(ELATIP+ELATPREV)/2.0 + + GRID_CORNER_LON(1,IP)=ELONN GRID_CORNER_LAT(1,IP)=ELATN GRID_CORNER_LON(2,IP)=ELONIP @@ -670,22 +688,38 @@ NBASSIGNEDCORNER(IP)=3 END IF END DO + + ! Compute centers DO IP=1,MNP GRID_CENTER_LON(IP)=DBLE(GRIDS(ID_GRD)%XYB(IP,1)) GRID_CENTER_LAT(IP)=DBLE(GRIDS(ID_GRD)%XYB(IP,2)) END DO + + ! Check triangle node orientation + ! Compute triangle centers NBPLUS=0 NBMINUS=0 DO IE=1,MNE I1=GRIDS(ID_GRD)%TRIGP(IE,1) I2=GRIDS(ID_GRD)%TRIGP(IE,2) I3=GRIDS(ID_GRD)%TRIGP(IE,3) - ELON1=DBLE(GRIDS(ID_GRD)%XYB(I1,1)) - ELON2=DBLE(GRIDS(ID_GRD)%XYB(I2,1)) - ELON3=DBLE(GRIDS(ID_GRD)%XYB(I3,1)) - ELAT1=DBLE(GRIDS(ID_GRD)%XYB(I1,2)) - ELAT2=DBLE(GRIDS(ID_GRD)%XYB(I2,2)) - ELAT3=DBLE(GRIDS(ID_GRD)%XYB(I3,2)) + + PT(1,1)=DBLE(GRIDS(ID_GRD)%XYB(I1,1)) + PT(2,1)=DBLE(GRIDS(ID_GRD)%XYB(I2,1)) + PT(3,1)=DBLE(GRIDS(ID_GRD)%XYB(I3,1)) + PT(1,2)=DBLE(GRIDS(ID_GRD)%XYB(I1,2)) + PT(2,2)=DBLE(GRIDS(ID_GRD)%XYB(I2,2)) + PT(3,2)=DBLE(GRIDS(ID_GRD)%XYB(I3,2)) + + CALL FIX_PERIODCITY(PT) + + ELON1 = PT(1,1) + ELON2 = PT(2,1) + ELON3 = PT(3,1) + ELAT1 = PT(1,2) + ELAT2 = PT(2,2) + ELAT3 = PT(3,2) + DELTALON12=ELON2 - ELON1 DELTALON13=ELON3 - ELON1 DELTALAT12=ELAT2 - ELAT1 @@ -697,10 +731,13 @@ IF (THEDET.LT.0) THEN NBMINUS=NBMINUS+1 END IF - ELON=(ELON1 + ELON2 + ELON3)/3 - ELAT=(ELAT1 + ELAT2 + ELAT3)/3 + ELON=(ELON1 + ELON2 + ELON3)/3.0 + ELAT=(ELAT1 + ELAT2 + ELAT3)/3.0 + + LON_CENT_TRIG(IE)=ELON LAT_CENT_TRIG(IE)=ELAT + END DO DODEBUG=0 IF (DODEBUG.EQ.1) THEN @@ -1050,10 +1087,11 @@ INTEGER, INTENT(OUT) :: GRID_SIZE, GRID_CORNERS, GRID_RANK REAL*8 :: DLON1, DLAT1, DLON2, DLAT2, THEDET INTEGER :: I, J - INTEGER :: IC, JC, IP, CHECKSIGNS, NBPLUS, NBMINUS + INTEGER :: IC, JC, IP, CHECKSIGNS, NBPLUS, NBMINUS, NBZERO INTEGER :: PRINTDATA, PRINTMINMAX REAL*8 :: MINLON, MINLAT, MAXLON, MAXLAT REAL*8 :: MINLONCORNER, MAXLONCORNER, MINLATCORNER, MAXLATCORNER + REAL*8 :: PT(3,2) IF (GRIDS(ID_GRD)%GTYPE .EQ. UNGTYPE) THEN CALL GET_SCRIP_INFO_UNSTRUCTURED (ID_GRD, & & GRID_CENTER_LON, GRID_CENTER_LAT, & @@ -1065,10 +1103,11 @@ & GRID_CORNER_LON, GRID_CORNER_LAT, GRID_MASK, & & GRID_DIMS, GRID_SIZE, GRID_CORNERS, GRID_RANK) END IF - CHECKSIGNS=0 + CHECKSIGNS=1 IF (CHECKSIGNS.EQ.1) THEN NBPLUS=0 NBMINUS=0 + NBZERO=0 DO IP=1,GRID_SIZE DO IC=1,GRID_CORNERS IF (IC.EQ.GRID_CORNERS) THEN @@ -1076,20 +1115,34 @@ ELSE JC=IC+1 END IF - DLON1=GRID_CORNER_LON(IC,IP)-GRID_CENTER_LON(IP) - DLON2=GRID_CORNER_LON(JC,IP)-GRID_CENTER_LON(IP) - DLAT1=GRID_CORNER_LAT(IC,IP)-GRID_CENTER_LAT(IP) - DLAT2=GRID_CORNER_LAT(JC,IP)-GRID_CENTER_LAT(IP) + + PT(1,1) = GRID_CENTER_LON(IP) + PT(1,2) = GRID_CENTER_LAT(IP) + PT(2,1) = GRID_CORNER_LON(IC,IP) + PT(2,2) = GRID_CORNER_LAT(IC,IP) + PT(3,1) = GRID_CORNER_LON(JC,IP) + PT(3,2) = GRID_CORNER_LAT(JC,IP) + + CALL FIX_PERIODCITY(PT) + + DLON1=PT(2,1)-PT(1,1) + DLON2=PT(3,1)-PT(1,1) + DLAT1=PT(2,2)-PT(1,2) + DLAT2=PT(3,2)-PT(1,2) + THEDET=DLON1*DLAT2 - DLON2*DLAT1 - IF (THEDET.GT.0) THEN + IF (THEDET.GT.1d-8) THEN NBPLUS=NBPLUS+1 - END IF - IF (THEDET.LT.0) THEN + ELSE IF (THEDET.LT.-1d-8) THEN NBMINUS=NBMINUS+1 + ELSE + NBZERO=NBZERO+1 END IF END DO END DO - WRITE(*,*) 'SI nbPlus=', nbPlus, ' nbMinus=', nbMinus + + WRITE(*,*) 'SI nbPlus=', nbPlus, ' nbMinus=', nbMinus, ' nbZero=', nbZero + END IF END SUBROUTINE GET_SCRIP_INFO @@ -1439,6 +1492,87 @@ CHECK_DEALLOC_STATUS ( ISTAT ) END SUBROUTINE +!/ ------------------------------------------------------------------- / + SUBROUTINE FIX_PERIODCITY(PT) + +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | Steven Brus | +!/ | Ali Abdolali | +!/ | FORTRAN 90 | +!/ | Last update : 21-May-2020 | +!/ +-----------------------------------+ +!/ +!/ 21-May-2020 : Origination. ( version 6.07 ) +!/ +!/ +! 1. Purpose : +! +! Adjust element longitude coordinates for elements straddling the +! dateline with distance of ~360 degrees +! +! 2. Method : +! +! Detect if element has nodes on both sides of dateline and adjust +! coordinates so that all nodes have the same sign +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- + IMPLICIT NONE + REAL*8, INTENT(INOUT) :: PT(3,2) +! ---------------------------------------------------------------- +! +! Local variables. +! ---------------------------------------------------------------- + INTEGER :: I + INTEGER :: R1GT180, R2GT180, R3GT180 +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! + +! 5. Called by : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! GET_SCRIP_INFO_UNSTRUCTURED Subr. WMSCRPMD Element center calculation +! GET_SCRIP_INFO Subr. WMSCRPMD Check signs +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! 8. Structure : +! +! 9. Switches : +! +! 10. Source code : +!/ ------------------------------------------------------------------- / + + R1GT180 = MERGE(1, 0, ABS(PT(3,1)-PT(2,1)).GT.180) + R2GT180 = MERGE(1, 0, ABS(PT(1,1)-PT(3,1)).GT.180) + R3GT180 = MERGE(1, 0, ABS(PT(2,1)-PT(1,1)).GT.180) +! if R1GT180+R2GT180+R3GT180 .eq. 0 the element does not cross the +! dateline +! if R1GT180+R2GT180+R3GT180 .eq. 1 the element contains the pole +! if R1GT180+R2GT180+R3GT180 .eq. 2 the element crosses the dateline + + IF ( R1GT180 + R2GT180 == 2 ) THEN + PT(3,1)=PT(3,1)-SIGN(360.0,(PT(3,1)-PT(2,1))) + ELSE IF ( R2GT180 + R3GT180 == 2 ) THEN + PT(1,1)=PT(1,1)-SIGN(360.0,(PT(1,1)-PT(2,1))) + ELSE IF ( R1GT180 + R3GT180 == 2 ) THEN + PT(2,1)=PT(2,1)-SIGN(360.0,(PT(2,1)-PT(3,1))) + ENDIF + + RETURN + END SUBROUTINE FIX_PERIODCITY !/ !/ End of module WMSCRPMD -------------------------------------------- / !/ diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 1335b96e0..d5bfdf18d 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -523,6 +523,15 @@ NOSWLL, PTMETH, PTFCUT USE W3TIMEMD, ONLY: CALTYPE USE W3NMLGRIDMD +!/SCRIP USE SCRIP_GRIDS, ONLY: GRID1_UNITS, GRID1_NAME, & +!/SCRIP GRID1_CENTER_LON, GRID1_CENTER_LAT, & +!/SCRIP GRID1_CORNER_LON, GRID1_CORNER_LAT, & +!/SCRIP GRID1_MASK, GRID1_SIZE, GRID1_RANK, & +!/SCRIP GRID1_IMASK, & +!/SCRIP GRID1_CORNERS, GRID1_DIMS +!/SCRIP USE SCRIP_KINDSMOD +!/SCRIP USE WMSCRPMD +!/SCRIPNC USE NETCDF ! !/NL3 USE W3SNL3MD, ONLY: LAMMAX, DELTHM !/NLS USE W3SNLSMD, ONLY: ABMAX @@ -704,6 +713,15 @@ STATUS*20,FNAME2*60, PNAME2*40 CHARACTER(LEN=6) :: YESXNO(2) !/FLX3 CHARACTER(LEN=18) :: TYPEID + +!/SCRIP INTEGER :: NCID +!/SCRIP INTEGER :: grid_size_dimid, grid_rank_dimid, grid_corners_dimid +!/SCRIP INTEGER :: grid_center_lat_varid, grid_center_lon_varid +!/SCRIP INTEGER :: grid_corner_lat_varid, grid_corner_lon_varid +!/SCRIP INTEGER :: grid_area_varid, grid_imask_varid +!/SCRIP INTEGER :: grid_dims_varid +!/SCRIP REAL (SCRIP_R8) :: CONV_DX,CONV_DY,OFFSET + !/ ------------------------------------------------------------------- / !/ Namelists !/ @@ -5346,8 +5364,79 @@ END IF ENDIF ! GTYPE .EQ. UNGTYPE - WRITE (NDSO,9999) - + WRITE (NDSO,9999) + +!/SCRIP GRID1_UNITS='degrees' ! the other option is radians...we don't use this +!/SCRIP GRID1_NAME='src' ! this is not used, except for netcdf output +!/SCRIP CALL GET_SCRIP_INFO(1, & +!/SCRIP & GRID1_CENTER_LON, GRID1_CENTER_LAT, & +!/SCRIP & GRID1_CORNER_LON, GRID1_CORNER_LAT, GRID1_MASK, & +!/SCRIP & GRID1_DIMS, GRID1_SIZE, GRID1_CORNERS, GRID1_RANK) +!/SCRIP +!/SCRIP + +!/SCRIP IF (GTYPE .EQ. UNGTYPE) THEN +!/SCRIP GRID1_RANK=1 +!/SCRIP DEALLOCATE(GRID1_DIMS) +!/SCRIP ALLOCATE(GRID1_DIMS(GRID1_RANK)) +!/SCRIP GRID1_DIMS(1) = GRID1_SIZE +!/SCRIP ENDIF + +!/SCRIP DO I = 1,GRID1_SIZE +!/SCRIP IF (GRID1_CENTER_LON(I) < 0.0) THEN +!/SCRIP GRID1_CENTER_LON(I) = GRID1_CENTER_LON(I)+360.0 +!/SCRIP ENDIF +!/SCRIP DO J = 1,GRID1_CORNERS +!/SCRIP IF (GRID1_CORNER_LON(J,I) < 0.0) THEN +!/SCRIP GRID1_CORNER_LON(J,I) = GRID1_CORNER_LON(J,I)+360.0 +!/SCRIP ENDIF +!/SCRIP ENDDO +!/SCRIP ENDDO + +!/SCRIPNC IERR = NF90_CREATE(TRIM('scrip.nc'), NF90_NETCDF4, NCID) +!/SCRIPNC IERR = NF90_DEF_DIM(NCID, 'grid_size', GRID1_SIZE, grid_size_dimid) +!/SCRIPNC IERR = NF90_DEF_DIM(NCID, 'grid_corners', GRID1_CORNERS, grid_corners_dimid) +!/SCRIPNC IERR = NF90_DEF_DIM(NCID, 'grid_rank', GRID1_RANK, grid_rank_dimid) + +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_center_lat', NF90_DOUBLE, & +!/SCRIPNC (/grid_size_dimid/),grid_center_lat_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_center_lon', NF90_DOUBLE, & +!/SCRIPNC (/grid_size_dimid/),grid_center_lon_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_corner_lat', NF90_DOUBLE, & +!/SCRIPNC (/grid_corners_dimid,grid_size_dimid/), & +!/SCRIPNC grid_corner_lat_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_corner_lon', NF90_DOUBLE, & +!/SCRIPNC (/grid_corners_dimid,grid_size_dimid/), & +!/SCRIPNC grid_corner_lon_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_imask', NF90_INT, & +!/SCRIPNC (/grid_size_dimid/),grid_imask_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_dims', NF90_INT, & +!/SCRIPNC (/grid_rank_dimid/),grid_dims_varid) +!/SCRIPNC IERR = NF90_ENDDEF(NCID) + +!/SCRIP ALLOCATE(GRID1_IMASK(GRID1_DIMS(1))) +!/SCRIP GRID1_IMASK = 0 +!/SCRIP DO I = 1,GRID1_DIMS(1) +!/SCRIP IF (GRID1_MASK(I)) THEN +!/SCRIP GRID1_IMASK(I) = 1 +!/SCRIP ENDIF +!/SCRIP ENDDO + +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_center_lat_varid,'units',GRID1_UNITS) +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_center_lon_varid,'units',GRID1_UNITS) +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_corner_lat_varid,'units',GRID1_UNITS) +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_corner_lon_varid,'units',GRID1_UNITS) +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_imask_varid,'units','unitless') + +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_center_lat_varid,GRID1_CENTER_LAT) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_center_lon_varid,GRID1_CENTER_LON) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_corner_lat_varid,GRID1_CORNER_LAT) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_corner_lon_varid,GRID1_CORNER_LON) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_imask_varid,GRID1_IMASK) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_dims_varid,GRID1_DIMS) +!/SCRIPNC IERR = NF90_CLOSE(NCID) + + ! ! Formats ! diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 2d626a8e1..ea67a7b51 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -2006,6 +2006,16 @@ echo "$rtst -w work_ug -i input_ug $ww3 ww3_ts4" >> matrix.body fi fi + # Global unstructured grid and Unresolved Obstacles Source Term (UOST) + if [ "$uost" = 'y' ] && [ "$dist" = 'y' ] + then + echo ' ' >> matrix.body + echo "$rtst -s MPI -s NO_PDLIB -w work_a -g a -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.21" >> matrix.body + if [ "$pdlib" = 'y' ] + then + echo "$rtst -s MPI -s PDLIB -w work_b -g b -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.21" >> matrix.body + fi + fi #Test of updating the restart spectra if [ "$assim" = 'y' ] diff --git a/regtests/ww3_tp2.21/info b/regtests/ww3_tp2.21/info new file mode 100644 index 000000000..85cc8fcba --- /dev/null +++ b/regtests/ww3_tp2.21/info @@ -0,0 +1,41 @@ +############################################################################# +# # +# ww3_tp2.21 Test script for WW-III, global unstructured mesh. # +# # +# The input grid (mesh.msh) is in gmsh format. The unstructured mesh has 2 # +# degree resolution globally with 1/2 degree resolution around the U.S. # +# coastlines. The transition in resolution occurs at 4000m depth with a 10% # +# resolution grading (Total nodes = 16160). # +# # +# The OUST option requires: # +# Local obstructions file for use with UOST source term switch # +# > obstructions_local.glo_unst.in # +# Shadow obstructions file for use with UOST source term switch # +# > obstructions_shadow.glo_unst.in # +# # +# --------------------------------------------------------------------------# +# For more information, see Brus et al. 2020. # +# [Data set]. Zenodo. http://doi.org/10.5281/zenodo.4088520 # +# --------------------------------------------------------------------------# +# Model should be compiled with the switches : # +# # +# F90 NOGRB TRKNC DIST MPI SCRIP MLIM PR3 UQ NC4 FLX0 LN1 ST4 STAB0 NL1 BT1 # +# DB1 TR0 BS0 IS0 IC0 REF0 XX0 WNT2 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b # +# O2c O3 O4 O5 O6 O7 UOST # +# # +# Remarks : # +# # +# - No other optional switches should be used. # +# # +# Sample run_test commands : # +# ./bin/run_test -c intel -S -T -s MPI -s NO_PDLIB -w work_a -g a -f -p # +# mpirun -n 24 -o netcdf ../model ww3_tp2.21 # +# # +# if PDLIB is added to the switch, the domain decompostion can be testes # +# ./bin/run_test -c intel -S -T -s MPI -s PDLIB -w work_b -g b -f -p # +# mpirun -n 24 -o netcdf ../model ww3_tp2.21 # +# # +# Ali Abdolali, Steven Brus, Lorenzo Mentaschi March 2021 # +# Last Mod : March 2021 # +# # +############################################################################# diff --git a/regtests/ww3_tp2.21/input/switch_NO_PDLIB b/regtests/ww3_tp2.21/input/switch_NO_PDLIB new file mode 100644 index 000000000..cf017614c --- /dev/null +++ b/regtests/ww3_tp2.21/input/switch_NO_PDLIB @@ -0,0 +1 @@ +F90 NOGRB TRKNC DIST MPI SCRIP SCRIPNC MLIM PR3 UQ NC4 FLX0 LN1 ST4 STAB0 NL1 BT1 DB1 TR0 BS0 IS0 IC0 REF0 XX0 WNT2 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST diff --git a/regtests/ww3_tp2.21/input/switch_PDLIB b/regtests/ww3_tp2.21/input/switch_PDLIB new file mode 100644 index 000000000..f12ad60b9 --- /dev/null +++ b/regtests/ww3_tp2.21/input/switch_PDLIB @@ -0,0 +1 @@ +F90 NOGRB TRKNC DIST MPI SCRIP SCRIPNC PDLIB MLIM PR3 UQ NC4 FLX0 LN1 ST4 STAB0 NL1 BT1 DB1 TR0 BS0 IS0 IC0 REF0 XX0 WNT2 WNX1 RWND CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 UOST diff --git a/regtests/ww3_tp2.21/input/ww3_grid_a.inp b/regtests/ww3_tp2.21/input/ww3_grid_a.inp new file mode 100644 index 000000000..176760116 --- /dev/null +++ b/regtests/ww3_tp2.21/input/ww3_grid_a.inp @@ -0,0 +1,36 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ + 'glo_unst' +$ + 1.07 0.035 50 36 0.5 +$ + F T T T F T +$ + 900 300 450 30 +$ +&UNST UGOBCAUTO = T EXPFSN = T / +&UOST + UOSTFILELOCAL = '../input/obstructions_local.glo_unst.in', + UOSTFILESHADOW = '../input/obstructions_shadow.glo_unst.in', + UOSTFACTORLOCAL = .9, UOSTFACTORSHADOW = .9 / +END OF NAMELISTS +$ + 'UNST' T T +$ Bathymetry + -0.1 2.5 20 -1.0 4 1 '(....)' 'NAME' '../input/mesh.msh' +$ Sub-grid information +$ 21 0.01 1 1 '(....)' 'NAME' 'glo_30m.obst' +$ Mask information +$ 22 1 1 '(....)' 'NAME' 'glo_30m.mask' +$ Input boundary points + 10 3 1 '(...)' 'PART' 'mapsta.inp' + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.21/input/ww3_grid_b.inp b/regtests/ww3_tp2.21/input/ww3_grid_b.inp new file mode 100644 index 000000000..c6fbf1ca8 --- /dev/null +++ b/regtests/ww3_tp2.21/input/ww3_grid_b.inp @@ -0,0 +1,60 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ + 'glo_unst' +$ + 1.07 0.035 50 36 0.5 +$ + F T T T F T +$ + 900 900 900 900 +$ +&UNST UGOBCAUTO = F, + UGOBCDEPTH= -10., + EXPFSN = F, + EXPFSPSI = F, + EXPFSFCT = F, + IMPFSN = F, + EXPTOTAL = F, + IMPTOTAL = T, + IMPREFRACTION = T, + IMPFREQSHIFT = T, + IMPSOURCE = T, + SETUP_APPLY_WLV = F, + SOLVERTHR_SETUP=1E-14, + CRIT_DEP_SETUP=0.1, + JGS_USE_JACOBI = T, + JGS_BLOCK_GAUSS_SEIDEL = T, + JGS_TERMINATE_MAXITER = T, + JGS_MAXITER = 1000, + JGS_TERMINATE_NORM = F, + JGS_TERMINATE_DIFFERENCE = T, + JGS_DIFF_THR = 1.E-8, + JGS_PMIN = 3.0, + JGS_LIMITER = F, + JGS_NORM_THR = 1.E-6 / +$ +&UOST + UOSTFILELOCAL = '../input/obstructions_local.glo_unst.in', + UOSTFILESHADOW = '../input/obstructions_shadow.glo_unst.in', + UOSTFACTORLOCAL = .9, UOSTFACTORSHADOW = .9 / +END OF NAMELISTS +$ + 'UNST' T T +$ Bathymetry + -0.1 2.5 20 -1.0 4 1 '(....)' 'NAME' '../input/mesh.msh' +$ Sub-grid information +$ 21 0.01 1 1 '(....)' 'NAME' 'glo_30m.obst' +$ Mask information +$ 22 1 1 '(....)' 'NAME' 'glo_30m.mask' +$ Input boundary points + 10 3 1 '(...)' 'PART' 'mapsta.inp' + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.21/input/ww3_ounf.inp b/regtests/ww3_tp2.21/input/ww3_ounf.inp new file mode 100755 index 000000000..cc4c39df3 --- /dev/null +++ b/regtests/ww3_tp2.21/input/ww3_ounf.inp @@ -0,0 +1,83 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Grid output post-processing $ +$--------------------------------------------------------------------- $ +$ Time, time increment and number of outputs (set to 4 days) +$ + 20180902 000000 900. 9999 +$ +$ Fields requested --------------------------------------------------- $ +$ +$ Output request flags identifying fields as in ww3_shel.inp. See that +$ file for a full documentation of field output options. Namelist type +$ selection is used here (for alternative F/T flags, see ww3_shel.inp). +$ +$ DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 HS LM T02 T0M1 T01 FP DIR SPR +$ DP HIG EF TH1M STH1M TH2M STH2M WN PHS PTP PLP PDIR PSPR PWS PDP +$ PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR UST CHA CGE FAW TAW TWA WCC +$ WCF WCH WCM SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC ABR UBR BED +$ FBB TBB MSS MSC DTD FC CFX CFD CFK U1 U2 +$ + N +WND HS FP DP +$--------------------------------------------------------------------- $ +$ netCDF version [3,4] +$ and variable type 4 [2 = SHORT, 3 = it depends , 4 = REAL] +$ swell partitions [0 1 2 3 4 5] +$ variables in same file [T] or not [F] +$ + 4 4 + 0 1 2 + F +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, print plots. +$ IX,IY range and stride, flag for automatic scaling to +$ maximum value (otherwise fixed scaling), +$ vector component flag (dummy for scalar quantities). +$ +$ 1 12 1 1 12 1 F T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, field statistics. +$ IX,IY range. +$ +$ 1 12 1 12 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, transfer files. +$ IX, IY range, IDLA and IDFM as in ww3_grid.inp. +$ The additional option IDLA=5 gives ia longitude, lattitude +$ and parameter value(s) per record (defined points only). +$ +$1 12518 1 1 3 2 +$ +$ For each field and time a new file is generated with the file name +$ ww3.yymmddhh.xxx, where yymmddhh is a conventional time idicator, +$ and xxx is a field identifier. The first record of the file contains +$ a file ID (C*13), the time in yyyymmdd hhmmss format, the lowest, +$ highest and number of longitudes (2R,I), id. latitudes, the file +$ extension name (C*$), a scale factor (R), a unit identifier (C*10), +$ IDLA, IDFM, a format (C*11) and a number identifying undefined or +$ missing values (land, ice, etc.). The field follows as defined by +$ IDFM and IDLA, defined as in the grid proprocessor. IDLA=5 is added +$ and gives a set of records containing the longitude, latitude and +$ parameter value. Note that the actual data is written as an integers. +$ -------------------------------------------------------------------- $ +$ ITYPE = 4, Netcdf Files +$ S3: number of characters in date +$ IX, IY range +$ +ww3. +6 + 1 16160 1 1 3 2 +$ For each field and time a new file is generated with the file name +$ ww3.date_xxx.nc , where date is a conventional time idicator with S3 +$ characters, +$ and xxx is a field identifier. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.21/input/ww3_ounp.inp b/regtests/ww3_tp2.21/input/ww3_ounp.inp new file mode 100755 index 000000000..1510e7600 --- /dev/null +++ b/regtests/ww3_tp2.21/input/ww3_ounp.inp @@ -0,0 +1,117 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III NETCDF Point output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 20180902 000000 900. 9999 +$ +$ Points requested --------------------------------------------------- $ +$ +$ Define points index for which output is to be generated. +$ If no one defined, all points are selected +$ One index number per line, negative number identifies end of list. +$ +$ mandatory end of list + -1 +$ +$--------------------------------------------------------------------- $ +$ file prefix +$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ netCDF version [3,4] +$ points in same file [T] or not [F] +$ and max number of points to be processed in one pass +$ output type ITYPE [0,1,2,3] +$ flag for global attributes WW3 [0] or variable version [1-2-3-4] +$ flag for dimensions order time,station [T] or station,time [F] +$ + ww3. + 6 + 4 + T 1 + 2 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, netCDF Spectra. +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D spectra +$ 3 : Transfer file. +$ 4 : Spectral partitioning. +$ - Scaling factors for 1-D and 2-D spectra Negative factor +$ disables, output, factor = 0. gives normalized spectrum. +$ +$ 3 1 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points. +$ grid name in quotes (for unformatted file C*21,3I,C*30). +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*40), lat, lon, d, U10 and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) | points | times +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, netCDF Tables of (mean) parameter +$ - Sub-type OTYPE : 1 : Depth, current, wind +$ 2 : Mean wave pars. +$ 3 : Nondimensional pars. (U*) +$ 4 : Nondimensional pars. (U10) +$ 5 : 'Validation table' +$ 6 : WMO standard output + 2 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, netCDF Source terms +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D S(f). +$ 3 : Table of 1-D inverse time scales +$ (1/T = S/F). +$ 4 : Transfer file +$ - Scaling factors for 1-D and 2-D source terms. Negative +$ factor disables print plots, factor = 0. gives normalized +$ print plots. +$ - Flags for spectrum, input, interactions, dissipation, +$ bottom, ice and total source term. +$ - scale ISCALE for OTYPE=2,3 +$ 0 : Dimensional. +$ 1 : Nondimensional in terms of U10 +$ 2 : Nondimensional in terms of U* +$ 3-5: like 0-2 with f normalized with fp. +$ +$ 4 0 0 T T T T T T T 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points, +$ flags for spectrum and source terms (C*21, 3I, 6L) +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*40), depth, wind speed and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) if requested | points | times +$ - Sin(f,theta) if requested | | +$ - Snl(f,theta) if requested | | +$ - Sds(f,theta) if requested | | +$ - Sbt(f,theta) if requested | | +$ - Sice(f,theta) if requested | | +$ - Stot(f,theta) if requested | | +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.21/input/ww3_prnc.inp b/regtests/ww3_tp2.21/input/ww3_prnc.inp new file mode 100755 index 000000000..42b03a7e4 --- /dev/null +++ b/regtests/ww3_tp2.21/input/ww3_prnc.inp @@ -0,0 +1,51 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Field preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ Mayor types of field and time flag +$ Field types : ICE Ice concentrations. +$ LEV Water levels. +$ WND Winds. +$ WNS Winds (including air-sea temp. dif.) +$ CUR Currents. +$ DAT Data for assimilation. +$ +$ Format types : AI Transfer field 'as is'. (ITYPE 1) +$ LL Field defined on regular longitude-latitude +$ or Cartesian grid. (ITYPE 2) +$ Format types : AT Transfer field 'as is', performs tidal +$ analysis on the time series (ITYPE 6) +$ When using AT, another line should be added +$ with the choice ot tidal constituents: +$ ALL or FAST or VFAST or a list: e.g. 'M2 S2' +$ +$ - Format type not used for field type 'DAT'. +$ +$ Time flag : If true, time is included in file. +$ Header flag : If true, header is added to file. +$ (necessary for reading, FALSE is used only for +$ incremental generation of a data file.) +$ + 'WND' 'AI' T T +$ +$ Name of dimensions ------------------------------------------------- $ +$ + time +$ +$ Variables to use --------------------------------------------------- $ +$ + uwnd vwnd +$ +$ Additional time input ---------------------------------------------- $ +$ If time flag is .FALSE., give time of field in yyyymmdd hhmmss format. +$ +$ 19680606 053000 +$ +$ Define data files -------------------------------------------------- $ +$ The input line identifies the filename using for the forcing field. +$ + '../input/ww3.201809_wnd.nc' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ + diff --git a/regtests/ww3_tp2.21/input/ww3_shel.inp b/regtests/ww3_tp2.21/input/ww3_shel.inp new file mode 100644 index 000000000..b6f101309 --- /dev/null +++ b/regtests/ww3_tp2.21/input/ww3_shel.inp @@ -0,0 +1,443 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shell input file $ +$ -------------------------------------------------------------------- $ +$ +$ Define input to be used ---------------------------------------------$ +$ + F F + F F + T F + F + F + F + F +$ +$ Time frame of calculations ------------------------------------------$ +$ + 20180902 000000 + 20180902 040000 +$ +$ Define output data --------------------------------------------------$ +$ + 0 +$ +$ Fields of mean wave parameters +$ + 20180902 000000 900 20180903 000000 + N + WND HS FP DP +$ +$ Point output +$ + 20180902 000000 900 20180903 000000 + -86.417 45.329 '45002' NDBC NDBC Meteorological/Ocean + -79.925 31.633 'tybg1' Skidaway IOOS Partners + -83.724 27.495 '42022' COMPS (University of South Florida) IOOS Partners + -82.45 27.07 'venf1' NDBC C-MAN + -177.576 57.051 '46035' NDBC NDBC Meteorological/Ocean + -67.02 44.89 '44035' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -122.436 47.662 'wpow1' NDBC C-MAN + -96.396 28.446 'pcnt2' TCOON IOOS Partners + -73.147 41.099 'ncsc3' Long Island Ferry IOOS Partners + -117.37 32.748 '46231' SCRIPPS IOOS Partners + -80.376 25.012 'mlrf1' NDBC C-MAN + 166.618 19.29 'wakp8' NOS NOS/CO-OPS + -124.617 48.368 'neaw1' NOS NOS/CO-OPS + -81.43 30.397 'mypf1' NOS NOS/CO-OPS + -90.728 47.079 'disw3' NDBC C-MAN + -90.663 29.253 'luml1' LUMCON IOOS Partners + -74.01 40.467 'sdhn4' NOS NOS/CO-OPS + -162.208 23.432 '51001' NDBC NDBC Meteorological/Ocean + -84.373 46.502 'swpm4' NOS NOS/CO-OPS + -86.442 43.947 'ldtm4' NOS NOS/CO-OPS + -121.889 35.737 '46028' NDBC NDBC Meteorological/Ocean + -160.806 53.926 '46075' NDBC NDBC Meteorological/Ocean + -130.0 38.033 '46059' NDBC NDBC Meteorological/Ocean + -87.5 42.0 'chii2' GLERL IOOS Partners + -89.957 29.267 'gdil1' NDBC C-MAN + -78.479 28.953 '41010' NDBC NDBC Meteorological/Ocean + -76.436 38.899 'tplm2' NDBC C-MAN + -76.465 37.995 'lwtv2' NOS NOS/CO-OPS + -82.733 28.285 'ptrf1' COMPS (University of South Florida) IOOS Partners + -82.862 24.638 'dryf1' NDBC C-MAN + -74.147 40.64 'bgnn4' NOS NOS/CO-OPS + -121.899 36.835 '46091' MBARI IOOS Partners + -123.317 38.225 '46013' NDBC NDBC Meteorological/Ocean + -89.313 47.867 'roam4' NDBC C-MAN + -67.047 17.972 'mgip4' NOS NOS/CO-OPS + -53.022 14.5 '41040' NDBC NDBC Meteorological/Ocean + -153.348 59.378 'auga2' NDBC C-MAN + -84.517 28.5 '42036' NDBC NDBC Meteorological/Ocean + -76.452 38.317 'slim2' NOS NOS/CO-OPS + -94.985 29.682 'mgpt2' NOS NOS/CO-OPS + -165.43 64.5 'nmta2' NOS NOS/CO-OPS + -66.117 18.462 'sjnp4' NOS NOS/CO-OPS + -123.971 39.216 '46014' NDBC NDBC Meteorological/Ocean + -122.413 47.267 'tcnw1' NOS NOS/CO-OPS + -70.144 43.531 '44007' NDBC NDBC Meteorological/Ocean + 179.002 51.17 '46071' NDBC NDBC Meteorological/Ocean + -120.76 35.177 'pslc1' NOS NOS/CO-OPS + -74.418 39.355 'acyn4' NOS NOS/CO-OPS + -72.001 40.7 '44017' NDBC NDBC Meteorological/Ocean + -122.758 48.112 'ptww1' NOS NOS/CO-OPS + -74.96 38.968 'cman4' NOS NOS/CO-OPS + -94.037 27.89 '42046' TABS IOOS Partners + -89.825 47.348 '45006' NDBC NDBC Meteorological/Ocean + -83.897 45.992 'dtlm4' NOS NOS/CO-OPS + -119.417 34.317 '46228' SCRIPPS IOOS Partners + -73.166 40.25 '44025' NDBC NDBC Meteorological/Ocean + -70.06 43.57 '44031' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -118.633 33.854 '46221' SCRIPPS IOOS Partners + -95.308 28.948 'fptt2' NOS NOS/CO-OPS + -79.353 42.493 'dbln6' NDBC C-MAN + -66.55 43.62 '44038' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -78.489 33.848 '41024' CORMP IOOS Partners + -71.033 41.397 'buzm3' NDBC C-MAN + -83.299 28.302 '42021' COMPS (University of South Florida) IOOS Partners + -81.105 24.712 'vcaf1' NOS NOS/CO-OPS + -136.162 56.593 '46084' NDBC NDBC Meteorological/Ocean + -124.04 44.625 'sbeo3' NOS NOS/CO-OPS + -73.58 40.956 '44040' MYSOUND IOOS Partners + -97.405 27.295 'babt2' TCOON IOOS Partners + -123.708 38.913 'anvc1' NOS NOS/CO-OPS + -89.22 28.16 '42363' Shell Oil Oil and Gas Industry + -73.185 41.175 'bhrc3' Long Island Ferry IOOS Partners + -81.111 24.628 'smkf1' NDBC C-MAN + -94.793 29.31 'gtot2' NOS NOS/CO-OPS + -73.07 40.948 'ptjn6' Long Island Ferry IOOS Partners + -123.166 48.333 '46088' NDBC NDBC Meteorological/Ocean + -82.643 43.847 'hrbm4' NOS NOS/CO-OPS + -75.8 44.467 'supn6' NDBC C-MAN + -123.47 37.946 '46214' SCRIPPS IOOS Partners + -81.265 29.857 'sauf1' NDBC C-MAN + -71.327 41.505 'nwpr1' NOS NOS/CO-OPS + -124.322 43.345 'chao3' NOS NOS/CO-OPS + -81.878 24.454 'sanf1' NDBC C-MAN + -122.975 37.997 'pryc1' NOS NOS/CO-OPS + -87.809 42.589 'knsw3' NWS Central Region IOOS Partners + -72.077 41.305 'ldlc3' MYSOUND IOOS Partners + -122.21 37.507 'rtyc1' NOS NOS/CO-OPS + -79.63 32.81 '41029' CORMP IOOS Partners + -75.12 38.782 'lwsd1' NOS NOS/CO-OPS + -70.672 41.523 'bzbm3' NOS NOS/CO-OPS + -82.789 28.193 'ancf1' COMPS (University of South Florida) IOOS Partners + -137.479 40.8 '46006' NDBC NDBC Meteorological/Ocean + -122.038 38.057 'pcoc1' NOS NOS/CO-OPS + -71.96 41.048 'mtkn6' NOS NOS/CO-OPS + -76.478 37.227 'yktv2' NOS NOS/CO-OPS + -97.215 26.06 'ptit2' NOS NOS/CO-OPS + -73.108 41.024 'scsn6' Long Island Ferry IOOS Partners + -154.984 52.696 '46066' NDBC NDBC Meteorological/Ocean + -76.245 39.213 'tcbm2' NOS NOS/CO-OPS + -148.281 60.796 '46081' NDBC NDBC Meteorological/Ocean + -75.988 37.167 'kptv2' NOS NOS/CO-OPS + -85.944 26.066 '42003' NDBC NDBC Meteorological/Ocean + -76.015 37.538 'rplv2' NOS NOS/CO-OPS + -82.926 27.164 '42013' COMPS (University of South Florida) IOOS Partners + -71.96 41.048 'qptr1' NOS NOS/CO-OPS + -94.033 29.683 'srst2' NDBC C-MAN + -146.825 60.218 '46061' NDBC NDBC Meteorological/Ocean + -90.368 30.05 'labl1' NOS NOS/CO-OPS + -84.291 30.058 'shpf1' COMPS (University of South Florida) IOOS Partners + -79.099 32.501 '41004' NDBC NDBC Meteorological/Ocean + -81.807 26.13 'npsf1' NOS NOS/CO-OPS + -74.72 39.09 'avan4' Stevens IOOS Partners + -87.433 44.608 'agmw3' NWS Central Region IOOS Partners + -71.34 41.635 'ptcr1' NOS NOS/CO-OPS + -146.7 61.06 'pota2' NDBC C-MAN + -76.526 38.389 '44044' Chesapeake Biological Lab IOOS Partners + -117.471 33.179 '46224' SCRIPPS IOOS Partners + -117.173 32.713 'sdbc1' NOS NOS/CO-OPS + -123.62 46.214 'mlto3' CORIE IOOS Partners + -68.128 43.968 'mdrm1' NDBC C-MAN + -124.735 48.392 'ttiw1' NDBC C-MAN + -88.769 30.09 '42007' NDBC NDBC Meteorological/Ocean + -97.217 27.58 'mqtt2' NOS NOS/CO-OPS + -79.888 32.685 'fbis1' NDBC C-MAN + -71.163 41.705 'frvm3' NOS NOS/CO-OPS + -118.5 34.008 'smoc1' NOS NOS/CO-OPS + -73.095 41.998 'sosn6' Long Island Ferry IOOS Partners + -82.627 27.76 'sapf1' NOS NOS/CO-OPS + -82.841 41.629 'sbio1' NDBC C-MAN + -124.244 46.857 '46211' SCRIPPS IOOS Partners + -120.782 34.455 '46218' SCRIPPS IOOS Partners + -82.732 41.545 'mrho1' NOS NOS/CO-OPS + -172.157 51.627 '46072' NDBC NDBC Meteorological/Ocean + -72.087 41.355 'nlnc3' NOS NOS/CO-OPS + -88.65 30.04 '42067' USM IOOS Partners + -76.133 38.59 'hplm2' University of Maryland Horn Point Laboratory IOOS Partners + -75.933 44.333 'aban6' NDBC C-MAN + -122.029 36.751 '46092' MBARI IOOS Partners + -122.338 47.605 'ebsw1' NOS NOS/CO-OPS + -130.36 42.578 '46002' NDBC NDBC Meteorological/Ocean + -119.846 34.236 '46053' NDBC NDBC Meteorological/Ocean + -64.92 18.335 'chav3' NOS NOS/CO-OPS + -124.067 44.613 'nwpo3' NDBC C-MAN + -45.997 14.507 '41041' NDBC NDBC Meteorological/Ocean + -76.525 34.622 'clkn7' NDBC C-MAN + -82.801 28.153 'fhpf1' COMPS (University of South Florida) IOOS Partners + -74.702 38.464 '44009' NDBC NDBC Meteorological/Ocean + -124.847 42.747 '46015' NDBC NDBC Meteorological/Ocean + -78.507 33.865 'snsn7' CaroCOOPS IOOS Partners + -88.075 30.25 'dpia1' NDBC C-MAN + -74.836 36.611 '44014' NDBC NDBC Meteorological/Ocean + -124.375 43.342 'caro3' NDBC C-MAN + -90.418 29.777 'bygl1' NOS NOS/CO-OPS + -96.5 26.217 '42045' TABS IOOS Partners + -83.537 44.018 'gslm4' NWS Central Region IOOS Partners + -87.025 42.676 '45007' NDBC NDBC Meteorological/Ocean + -75.687 37.607 'wahv2' NOS NOS/CO-OPS + -117.444 32.632 '46227' SCRIPPS IOOS Partners + -65.909 42.324 '44024' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -117.257 32.867 'ljpc1' SCRIPPS IOOS Partners + -74.993 14.978 '42058' NDBC NDBC Meteorological/Ocean + -149.47 59.742 'pila2' NDBC C-MAN + -93.343 29.765 'capl1' NOS NOS/CO-OPS + -75.548 35.795 'orin7' NOS NOS/CO-OPS + -72.655 41.138 '44039' MYSOUND IOOS Partners + -82.667 28.433 'arpf1' COMPS (University of South Florida) IOOS Partners + -87.693 43.749 'sgnw3' NDBC C-MAN + -75.402 35.006 '41025' NDBC NDBC Meteorological/Ocean + -96.696 26.944 '42020' NDBC NDBC Meteorological/Ocean + -70.097 41.285 'ntkm3' NOS NOS/CO-OPS + -152.481 17.523 '51004' NDBC NDBC Meteorological/Ocean + -82.707 28.772 'hssf1' COMPS (University of South Florida) IOOS Partners + -69.355 43.716 '44032' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -73.121 41.049 'misn6' Long Island Ferry IOOS Partners + -76.113 36.967 'cbbv2' NOS NOS/CO-OPS + -83.446 45.046 'apnm4' GLERL IOOS Partners + -80.316 30.8 'secg1' NC-COOS IOOS Partners + -122.4 37.928 'rcmc1' NOS NOS/CO-OPS + -95.36 27.913 '42019' NDBC NDBC Meteorological/Ocean + -76.67 34.703 'bftn7' NOS NOS/CO-OPS + -124.382 41.852 '46027' NDBC NDBC Meteorological/Ocean + -81.881 26.404 'bgcf1' COMPS (University of South Florida) IOOS Partners + -160.74 19.164 '51003' NDBC NDBC Meteorological/Ocean + 144.789 13.354 '52200' Pacific Islands Ocean Observing System IOOS Partners + -82.755 42.465 'lscm4' NWS Central Region IOOS Partners + -124.727 48.494 '46087' NDBC NDBC Meteorological/Ocean + -151.398 60.683 'nkta2' NOS NOS/CO-OPS + -86.978 45.29 'npdw3' NWS Central Region IOOS Partners + -120.859 35.204 '46215' SCRIPPS IOOS Partners + -124.217 40.767 'hbyc1' NOS NOS/CO-OPS + -150.009 58.002 '46080' NDBC NDBC Meteorological/Ocean + -97.471 25.801 'rsjt2' TCOON IOOS Partners + -119.533 32.433 '46047' NDBC NDBC Meteorological/Ocean + -73.8 40.45 'alsn6' NDBC C-MAN + -86.289 42.401 'svnm4' GLERL IOOS Partners + -121.888 36.605 'mtyc1' NOS NOS/CO-OPS + -87.902 44.655 'gblw3' NWS Central Region IOOS Partners + -124.183 41.745 'cecc1' NOS NOS/CO-OPS + -97.051 27.826 'ptat2' NDBC C-MAN + -176.632 51.863 'adka2' NOS NOS/CO-OPS + -124.503 44.627 '46050' NDBC NDBC Meteorological/Ocean + -120.869 34.88 '46011' NDBC NDBC Meteorological/Ocean + -124.485 47.675 'desw1' NDBC C-MAN + -120.2 33.65 '46069' NDBC NDBC Meteorological/Ocean + -157.678 21.415 '51202' Pacific Islands Ocean Observing System IOOS Partners + -92.554 27.421 '42038' NDBC NDBC Meteorological/Ocean + -87.225 47.184 'stdm4' NDBC C-MAN + -76.302 36.778 'mnpv2' NOS NOS/CO-OPS + -85.88 30.213 'pcbf1' NOS NOS/CO-OPS + -94.417 25.167 '42002' NDBC NDBC Meteorological/Ocean + -90.462 27.504 '42041' NDBC NDBC Meteorological/Ocean + -80.862 24.843 'lonf1' NDBC C-MAN + -82.215 25.245 '42014' COMPS (University of South Florida) IOOS Partners + -71.173 41.705 'bltm3' NOS NOS/CO-OPS + -146.833 60.588 '46060' NDBC NDBC Meteorological/Ocean + -69.163 43.187 '44005' NDBC NDBC Meteorological/Ocean + -143.421 59.685 '46082' NDBC NDBC Meteorological/Ocean + -66.624 41.108 '44011' NDBC NDBC Meteorological/Ocean + -118.272 33.72 'ohbc1' NOS NOS/CO-OPS + -70.565 42.522 '44029' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -87.121 45.202 'syww3' NWS Central Region IOOS Partners + -120.957 34.703 '46023' NDBC NDBC Meteorological/Ocean + -67.314 44.273 '44027' NDBC NDBC Meteorological/Ocean + -76.068 38.573 'camm2' NOS NOS/CO-OPS + -80.567 31.375 'spag1' Skidaway IOOS Partners + -78.89 42.877 'bufn6' NOS NOS/CO-OPS + -67.88 43.491 '44037' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -73.083 40.973 'ofpn6' Long Island Ferry IOOS Partners + -81.872 26.647 'fmrf1' NOS NOS/CO-OPS + -117.767 33.458 '46223' SCRIPPS IOOS Partners + -122.758 48.863 'chyw1' NOS NOS/CO-OPS + -122.465 37.807 'ftpc1' NOS NOS/CO-OPS + -76.33 36.947 'swpv2' NOS NOS/CO-OPS + -83.194 41.826 'thlo1' GLERL IOOS Partners + -76.512 43.463 'osgn6' NOS NOS/CO-OPS + -123.01 48.547 'frdw1' NOS NOS/CO-OPS + -119.882 33.221 '46219' SCRIPPS IOOS Partners + -172.029 54.942 '46073' NDBC NDBC Meteorological/Ocean + -77.59 33.485 'fpsn7' NDBC C-MAN + -87.538 41.73 'cmti2' NOS NOS/CO-OPS + -81.465 30.672 'frdf1' NOS NOS/CO-OPS + -70.623 42.967 'iosn3' NDBC C-MAN + -151.952 58.915 'amaa2' NDBC C-MAN + -80.533 30.041 '41012' NDBC NDBC Meteorological/Ocean + -80.871 31.402 '41008' NDBC NDBC Meteorological/Ocean + -87.212 30.403 'pclf1' NOS NOS/CO-OPS + -152.451 56.054 '46078' NDBC NDBC Meteorological/Ocean + -138.006 58.259 '46083' NDBC NDBC Meteorological/Ocean + -83.029 29.136 'cdrf1' NDBC C-MAN + -80.236 31.534 'skmg1' Skidaway IOOS Partners + -122.423 36.753 '46042' NDBC NDBC Meteorological/Ocean + -122.41 36.69 '46093' MBARI IOOS Partners + -148.172 56.296 '46001' NDBC NDBC Meteorological/Ocean + -120.462 34.273 '46054' NDBC NDBC Meteorological/Ocean + -82.423 43.007 'ftgm4' NOS NOS/CO-OPS + -123.767 46.208 'asto3' NOS NOS/CO-OPS + -72.678 34.729 '41001' NDBC NDBC Meteorological/Ocean + -76.451 38.317 'cbim2' Chesapeake Biological Lab IOOS Partners + -120.648 34.577 'ptgc1' NDBC C-MAN + -73.182 41.173 'brhc3' NOS NOS/CO-OPS + -69.431 40.5 '44008' NDBC NDBC Meteorological/Ocean + -77.022 38.873 'wasd2' NOS NOS/CO-OPS + -77.715 34.141 '41038' CORMP IOOS Partners + -70.247 43.657 'casm1' NOS NOS/CO-OPS + -84.632 46.485 'ptim4' NOS NOS/CO-OPS + -119.804 34.334 '46216' SCRIPPS IOOS Partners + -146.662 61.082 'mrka2' NDBC C-MAN + -123.44 48.125 'ptaw1' NOS NOS/CO-OPS + -148.527 70.4 'prda2' NOS NOS/CO-OPS + -86.55 47.572 '45004' NDBC NDBC Meteorological/Ocean + -82.838 45.35 '45003' NDBC NDBC Meteorological/Ocean + -117.353 32.848 '46226' SCRIPPS IOOS Partners + -123.955 46.226 'dmno3' Center for Coastal Margin Observation and Prediction IOOS Partners + -122.298 37.772 'aamc1' NOS NOS/CO-OPS + -75.142 39.933 'phbp1' NOS NOS/CO-OPS + -74.2 39.61 'brbn4' Stevens IOOS Partners + -75.713 36.905 'chlv2' NDBC C-MAN + -158.116 21.673 '51201' Pacific Islands Ocean Observing System IOOS Partners + -79.34 32.52 '41030' CaroCOOPS IOOS Partners + -122.833 37.759 '46026' NDBC NDBC Meteorological/Ocean + -146.884 60.839 'blia2' NDBC C-MAN + -83.073 26.058 '42023' COMPS (University of South Florida) IOOS Partners + -68.109 44.106 '44034' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -75.573 39.558 'rdyd1' NOS NOS/CO-OPS + -118.012 33.623 '46230' SCRIPPS IOOS Partners + -68.998 44.06 '44033' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -133.63 57.272 'ffia2' NDBC C-MAN + -86.928 41.729 'mcyi3' GLERL IOOS Partners + -75.81 39.527 'chcm2' NOS NOS/CO-OPS + -92.49 27.55 '42361' Shell Oil Oil and Gas Industry + -72.908 41.283 'nwhc3' NOS NOS/CO-OPS + -82.76 27.601 'egkf1' COMPS (University of South Florida) IOOS Partners + -78.918 33.655 'mros1' NOS NOS/CO-OPS + -73.172 41.15 'fwic3' Long Island Ferry IOOS Partners + -80.593 28.415 'trdf1' NOS NOS/CO-OPS + -157.785 17.143 '51002' NDBC NDBC Meteorological/Ocean + -124.74 40.294 '46213' SCRIPPS IOOS Partners + -48.134 -27.705 '31201' SCRIPPS IOOS Partners + -118.029 32.499 '46086' NDBC NDBC Meteorological/Ocean + -82.758 28.156 'tarf1' COMPS (University of South Florida) IOOS Partners + -80.097 25.591 'fwyf1' NDBC C-MAN + -73.134 41.074 'misc3' Long Island Ferry IOOS Partners + -89.957 29.263 'gisl1' NOS NOS/CO-OPS + -89.428 28.905 'burl1' NDBC C-MAN + -71.343 41.717 'cptr1' NOS NOS/CO-OPS + -71.402 41.807 'foxr1' NOS NOS/CO-OPS + -66.985 44.903 'psbm1' NOS NOS/CO-OPS + -84.192 46.265 'rckm4' NOS NOS/CO-OPS + -80.162 24.732 'vakf1' NOS NOS/CO-OPS + -74.015 40.7 'batn6' NOS NOS/CO-OPS + -92.093 46.775 'dulm5' NOS NOS/CO-OPS + -122.881 37.357 '46012' NDBC NDBC Meteorological/Ocean + -149.89 61.238 'anta2' NOS NOS/CO-OPS + -117.258 32.867 'ljac1' NOS NOS/CO-OPS + -86.021 28.794 '42039' NDBC NDBC Meteorological/Ocean + -124.497 42.74 'poro3' NOS NOS/CO-OPS + -74.42 39.38 'acmn4' Stevens IOOS Partners + -157.867 21.307 'oouh1' NOS NOS/CO-OPS + -89.667 25.9 '42001' NDBC NDBC Meteorological/Ocean + -88.214 29.185 '42040' NDBC NDBC Meteorological/Ocean + -83.397 41.693 'thro1' NOS NOS/CO-OPS + -156.472 20.898 'klih1' NOS NOS/CO-OPS + -177.36 28.212 'sndp5' NOS NOS/CO-OPS + -120.665 34.276 '46063' NDBC NDBC Meteorological/Ocean + -70.529 38.466 '44004' NDBC NDBC Meteorological/Ocean + -64.753 17.697 'ltbv3' NOS NOS/CO-OPS + -75.36 32.319 '41002' NDBC NDBC Meteorological/Ocean + -123.965 46.708 'tokw1' NOS NOS/CO-OPS + -71.052 42.355 'bhbm3' NOS NOS/CO-OPS + -93.597 27.897 '42047' TABS IOOS Partners + -76.578 39.267 'bltm2' NOS NOS/CO-OPS + -87.776 48.072 '45001' NDBC NDBC Meteorological/Ocean + -76.528 39.219 'fskm2' NOS NOS/CO-OPS + -124.542 40.781 '46022' NDBC NDBC Meteorological/Ocean + -124.558 43.618 '46229' SCRIPPS IOOS Partners + -87.378 46.545 'mcgm4' NOS NOS/CO-OPS + -70.428 43.181 '44030' Northeastern Regional Association of Coastal Ocean Observing Systems IOOS Partners + -78.994 26.704 'spgf1' NDBC C-MAN + -124.313 40.753 '46212' SCRIPPS IOOS Partners + -118.317 33.618 '46222' SCRIPPS IOOS Partners + -81.808 24.553 'kywf1' NOS NOS/CO-OPS + -80.41 32.28 '41033' CORMP IOOS Partners + -90.281 30.315 'lkpl1' LUMCON IOOS Partners + -68.855 43.783 'mism1' NDBC C-MAN + -119.435 34.167 '46217' SCRIPPS IOOS Partners + -90.648 27.795 '42362' Enven Energy Corporation Oil and Gas Industry + -119.076 33.746 '46025' NDBC NDBC Meteorological/Ocean + -94.788 29.285 'gpst2' NOS NOS/CO-OPS + -122.843 48.318 'sisw1' NDBC C-MAN + -125.766 45.881 '46089' NDBC NDBC Meteorological/Ocean + -93.67 28.118 'fgbl1' Mariner Energy Inc. IOOS Partners + -153.87 -0.02 '51028' NDBC NDBC Meteorological/Ocean + -80.165 28.501 '41009' NDBC NDBC Meteorological/Ocean + -75.745 36.184 'ducn7' NDBC C-MAN + -90.665 29.19 'taml1' LUMCON IOOS Partners + -90.342 47.748 'gdmm5' NOS NOS/CO-OPS + -152.137 60.553 'drfa2' NDBC C-MAN + -83.594 29.819 'ktnf1' NDBC C-MAN + -124.747 47.336 '46041' NDBC NDBC Meteorological/Ocean + -123.74 38.955 'ptac1' NDBC C-MAN + -77.406 43.621 '45012' NDBC NDBC Meteorological/Ocean + -86.339 43.228 'mkgm4' GLERL IOOS Partners + -94.413 29.232 '42035' NDBC NDBC Meteorological/Ocean + -84.858 29.408 'sgof1' NDBC C-MAN + -81.096 25.084 'nfbf1' COMPS (University of South Florida) IOOS Partners + -151.995 59.332 'fila2' NDBC C-MAN + -82.415 44.275 '45008' NDBC NDBC Meteorological/Ocean + -75.983 44.3 'thin6' NDBC C-MAN + -78.489 33.848 '41027' CaroCOOPS IOOS Partners + -93.87 29.73 'sbpt2' NOS NOS/CO-OPS + -94.919 28.982 '42043' TABS IOOS Partners + -74.03 40.12 'sgrn4' Stevens IOOS Partners + -73.765 40.81 'kptn6' NOS NOS/CO-OPS + -88.366 48.223 'pilm4' NDBC C-MAN + -82.398 41.677 '45005' NDBC NDBC Meteorological/Ocean + -69.294 41.259 '44018' NDBC NDBC Meteorological/Ocean + -84.982 29.727 'apcf1' NOS NOS/CO-OPS + -81.902 32.033 'fpkg1' NOS NOS/CO-OPS + -117.393 32.93 '46225' SCRIPPS IOOS Partners + -73.728 40.883 '44022' MYSOUND IOOS Partners + -82.832 27.977 'cwbf1' NOS NOS/CO-OPS + -70.691 42.354 '44013' NDBC NDBC Meteorological/Ocean + -89.367 30.282 'wavm6' NOS NOS/CO-OPS + -73.159 41.125 'nosc3' Long Island Ferry IOOS Partners + -77.36 33.991 '41037' CORMP IOOS Partners + 0.0 0.0 'STOPSTRING' +$ +$ Output along track +$ + 20051001 000000 0 20051101 000000 +$ +$ Restart files +$ + 20051001 000000 2678400 20051101 000000 +$ +$ Boundary data +$ + 20051001 000000 0 20051101 000000 +$ +$ Separated wave field data +$ + 20051001 000000 0 20051101 000000 +$ +$ Homogenous field data ----------------------------------------------$ +$ +$ 'WND' 20051001 000000 20. 145. 2.0 +$ 'WND' 20051002 000000 20. 245. 2.0 + 'STP' +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.21/input/ww3_strt.inp b/regtests/ww3_tp2.21/input/ww3_strt.inp new file mode 100644 index 000000000..adde20102 --- /dev/null +++ b/regtests/ww3_tp2.21/input/ww3_strt.inp @@ -0,0 +1,72 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Initial conditions input file $ +$--------------------------------------------------------------------- $ +$ type of initial field ITYPE . +$ + 3 +$ +$ ITYPE = 1 ---------------------------------------------------------- $ +$ Gaussian in frequency and space, cos type in direction. +$ - fp and spread (Hz), mean direction (degr., oceanographic +$ convention) and cosine power, Xm and spread (degr. or m) Ym and +$ spread (degr. or m), Hmax (m) (Example for lon-lat grid in degr.). +$ +$ 0.10 0.01 270. 2 1. 0.5 1. 0.5 2.5 +$ 0.10 0.01 270. 2 0. 1000. 1. 1000. 2.5 +$ 0.10 0.01 270. 2 0. 1000. 1. 1000. 0.01 +$ 0.10 0.01 270. 2 0. 1000. 1. 1000. 0. +$ +$ ITYPE = 2 ---------------------------------------------------------- $ +$ JONSWAP spectrum with Hasselmann et al. (1980) direct. distribution. +$ - alfa, peak freq. (Hz), mean direction (degr., oceanographical +$ convention), gamma, sigA, sigB, Xm and spread (degr. or m) Ym and +$ spread (degr. or m) (Example for lon-lat grid in degr.). +$ alfa, sigA, sigB give default values if less than or equal to 0. +$ +$ 0.0081 0.1 270. 1.0 0. 0. 1. 100. 1. 100. +$ +$ ITYPE = 3 ---------------------------------------------------------- $ +$ Fetch-limited JONSWAP +$ - No additional data, the local spectrum is calculated using the +$ local wind speed and direction, using the spatial grid size as +$ fetch, and assuring that the spectrum is within the discrete +$ frequency range. +$ +$ ITYPE = 4 ---------------------------------------------------------- $ +$ User-defined spectrum +$ - Scale factor., defaults to 1 if less than or equal 0. +$ - Spectrum F(f,theta) (single read statement) +$ +$ -0.1 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 1 4 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 1 2 3 2 1 1 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 1 3 9 7 5 3 2 1 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 1 3 4 3 2 1 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +$ +$ ITYPE = 5 ---------------------------------------------------------- $ +$ Starting from calm conditions. +$ - No additional data. +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ From 78b01488d81db30559b1b91ea503f7e9152f2d99 Mon Sep 17 00:00:00 2001 From: "Ali.Abdolali" <37336972+aliabdolali@users.noreply.github.com> Date: Wed, 24 Mar 2021 10:11:37 -0400 Subject: [PATCH 71/84] Fb matrix divider (#328) * Added boundary checks to the SMC grid input files for ww3_grid, to ensure they comply with the limits of the nameslist. * Fb 360 calendar (#8) Changes to add support to 360-day and 365-day (no leap year) calendar - see ticket #209 * Additional CALTYPE namelist parameter in MISC section * New ww3_tc1 regtest. * RTD support for ww3_boun[dc] (#10) * Updated ww3_bound and ww3_bounc to handle model grids formulated on a rotated pole. * Manual and nml/inp files to updated clarify that ww3_bound/ww3_bounc only accept input spectra formulated on a standard pole grid. * Fb coupling time (#9) Updates to allow a coupling time step that is different from the model time step. * Includes new regtest (in ww3_tp2.14) for non-default oasis time step. * ww3_tp2.14 regtest added to matrix.base. * bug fix for ukmet development * add the matrix subsetter * clean-up * clean up * add another script which separate serial and parallel jobs and divide them * modify the script to remove ../model? after test completion. * bug fixes and adding ww3_tp2.17 to list_heavy * add if statement to remove matrix? and model? * Update matrix_divider_p.sh * Merge remote-tracking branch 'upstream/develop' into fb_matrix_divider * Merge remote-tracking branch 'upstream/develop' into fb_matrix_divider * put if check for ../model? inside matrix? loop * fix the bug for sed for model? * final fix for extra model? removal * add 2.21 to the list_heavy Co-authored-by: lewis.sampson Co-authored-by: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Co-authored-by: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Co-authored-by: Ali Abdolali --- .gitignore | 4 + regtests/bin/matrix_divider_p.sh | 128 +++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100755 regtests/bin/matrix_divider_p.sh diff --git a/.gitignore b/.gitignore index 0c3df2c13..9effb5e4b 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,10 @@ manual/*.toc manual/*.out manual/*.dvi manual/*.pdf +model? +model?? +regtests/list* +regtests/before regtests/matrix* regtests/*/work* regtests/*/input*/*.nc diff --git a/regtests/bin/matrix_divider_p.sh b/regtests/bin/matrix_divider_p.sh new file mode 100755 index 000000000..67c4f0e24 --- /dev/null +++ b/regtests/bin/matrix_divider_p.sh @@ -0,0 +1,128 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# matrix_divider simply divides the main matrix into subsets with a given # +# number of test (i.e. maxlist1 for mpi tests and maxlist2 for serial tests) # +# # +# Remarks: # +# - Once the matrix is generated, this script can be execute. The user should # +# define the maxlist and this script divide the matrix into matrix? and # +# submit the job using sbatch. # +# # +# Ali Abdolali # +# August 2018 # +# March 2021 # +# # +# Copyright 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. # +# # +# --------------------------------------------------------------------------- # +# --------------------------------------------------------------------------- # +# 1. clean up and definitions # +# --------------------------------------------------------------------------- # +cp matrix matrix.tmp +HOME=${PWD%/*} + +maxlist1=48 +maxlist2=92 + +#Put the job requirement/spec in "before" +sed -e "/run_test/,\$d" matrix.tmp > before +#Put the list of tests in "list" +command egrep 'ww3_tp2.14|ww3_tp2.17|ww3_tp2.21' matrix.tmp | cat >> list_heavy +awk '!/ww3_tp2.14/' matrix.tmp > tmpfile && mv tmpfile matrix.tmp +awk '!/ww3_tp2.17/' matrix.tmp > tmpfile && mv tmpfile matrix.tmp +awk '!/ww3_tp2.21/' matrix.tmp > tmpfile && mv tmpfile matrix.tmp +command egrep 'mpirun|mpiexec|MPI_LAUNCH' matrix.tmp | cat >> list_mpi +awk '!/mpirun|mpiexec|MPI_LAUNCH/' matrix.tmp > tmpfile && mv tmpfile matrix.tmp +split -dl $maxlist1 list_mpi list_mpi_ +rm list_mpi +matrixno1=$(ls list_mpi_* | wc -l) +echo "Total nummber of matrix with parallel tests = $(($matrixno1 + 1)); each includes $maxlist1 tests" +command egrep 'run_test' matrix.tmp | cat >> list_serial +split -dl $maxlist2 list_serial list_serial_ +rm list_serial +matrixno2=$(ls list_serial_* | wc -l) +echo "Total nummber of matrix with serial test = $matrixno2; each includes $maxlist2 tests" +rm matrix.tmp + +# -------------------------------|ww3_tp2.21|ww3_tp2.21-------------------------------------------- # +# 2. Divide and dump in subsets # +# --------------------------------------------------------------------------- # +# parallel jobs +count=0 + for i in `seq -f '%02g' 0 "$((matrixno1 - 1))"`; do +#echo $i +#Replace matrix.out > matrix?.out, model > model? + (( count = count + 1 )) + if [ -f "matrix${count}" ]; then rm -f matrix${count}; fi + cat before >> matrix$count + cat list_mpi_$i >> matrix$count + sed -i 's/'matrix.out'/'matrix${count}.out'/gI' matrix$count + sed -i 's/'model'/'model${count}'/gI' matrix$count + echo " echo ' '" >> matrix$count + echo " echo ' **************************************************************'" >> matrix$count + echo " echo ' * end of WAVEWATCH III matrix$count of regression tests *'" >> matrix$count + echo " echo ' **************************************************************'" >> matrix$count + echo " echo ' '" >> matrix$count + echo "rm -rf ${HOME}/model${count}" >> matrix$count +#make sure ../model$count does not exist and copy a fresh copy + awk '1;/cd/ && !x {print " cp -r ../model ../model'$count'"; x=1;}' matrix$count > tmpfile && mv tmpfile matrix$count + awk '1;/cd/ && !x {print " if [ -d ../model'${count}' ]; then rm -rf ../model'${count}'; fi"; x=1;}' matrix$count > tmpfile && mv tmpfile matrix$count + + echo " matrix$count prepared" + done + +#serial jobs + for i in `seq -f '%02g' 0 "$((matrixno2 - 1))"`; do +#echo $i +#Replace matrix.out > matrix?.out, model > model? + (( count = count + 1 )) + if [ -f "matrix${count}" ]; then rm -f matrix${count}; fi + cat before >> matrix$count + cat list_serial_$i >> matrix$count + sed -i 's/'matrix.out'/'matrix${count}.out'/gI' matrix$count + sed -i 's/'model'/'model${count}'/gI' matrix$count + echo " echo ' '" >> matrix$count + echo " echo ' **************************************************************'" >> matrix$count + echo " echo ' * end of WAVEWATCH III matrix$count of regression tests *'" >> matrix$count + echo " echo ' **************************************************************'" >> matrix$count + echo " echo ' '" >> matrix$count + echo "rm -rf ${HOME}/model${count}" >> matrix$count +#make sure ../model$count does not exist and copy a fresh copy + awk '1;/cd/ && !x {print " cp -r ../model ../model'$count'"; x=1;}' matrix$count > tmpfile && mv tmpfile matrix$count + awk '1;/cd/ && !x {print " if [ -d ../model'${count}' ]; then rm -rf ../model'${count}'; fi"; x=1;}' matrix$count > tmpfile && mv tmpfile matrix$count + echo " matrix$count prepared" + done + +#ww3_tp2.14 is separated, as it has dependency. +#ww3_tp2.17 and ww3_tp2.21 is separated, as it takes a long time to finish + (( count = count + 1 )) + if [ -f "matrix${count}" ]; then rm -f matrix${count}; fi + cat before >> matrix$count + cat list_heavy >> matrix$count + sed -i 's/'matrix.out'/'matrix${count}.out'/gI' matrix$count + sed -i 's/'model'/'model${count}'/gI' matrix$count + echo " echo ' '" >> matrix$count + echo " echo ' **************************************************************'" >> matrix$count + echo " echo ' * end of WAVEWATCH III matrix$count of regression tests *'" >> matrix$count + echo " echo ' **************************************************************'" >> matrix$count + echo " echo ' '" >> matrix$count + echo "rm -rf ${HOME}/model${count}" >> matrix$count +#make sure ../model$count does not exist and copy a fresh copy + awk '1;/cd/ && !x {print " cp -r ../model ../model'$count'"; x=1;}' matrix$count > tmpfile && mv tmpfile matrix$count + awk '1;/cd/ && !x {print " if [ -d ../model'${count}' ]; then rm -rf ../model'${count}'; fi"; x=1;}' matrix$count > tmpfile && mv tmpfile matrix$count + echo " matrix$count prepared" + + + +rm before +rm list* + + echo "file matrix is divided into $count subsets ...." + +# --------------------------------------------------------------------------- # +# End to matrix_divider # +# --------------------------------------------------------------------------- # + From 64a27d6e7daf5415414e7c51c9cb14ccd730cdff Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Thu, 25 Mar 2021 11:55:47 -0400 Subject: [PATCH 72/84] Update NetCDF comp/link (#336) * updates for NetCDF comp/linking Issue #332 fixes from @aerorahul * Updating matrix_ncep to use hpc-stack modules * update path for orion hpc-stack and change np, nr, nth * add module purge and revert 8->24 * update NetCDF in ww3_tp2.14 oasis test makefile --- model/bin/comp.tmpl | 3 +- model/bin/link.tmpl | 2 +- regtests/bin/matrix_ncep | 128 ++++++++++-------- .../input/oasis3-mct/util/make_dir/cmplr.tmpl | 4 +- 4 files changed, 75 insertions(+), 62 deletions(-) diff --git a/model/bin/comp.tmpl b/model/bin/comp.tmpl index a9c620557..578dadd2c 100755 --- a/model/bin/comp.tmpl +++ b/model/bin/comp.tmpl @@ -82,7 +82,8 @@ case $WWATCH3_NETCDF in NC3) opt="$opt -I$NETCDF_INCDIR" ;; NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; + #opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; + opt="$opt `$NETCDF_CONFIG --cflags`" ;; esac fi diff --git a/model/bin/link.tmpl b/model/bin/link.tmpl index e1ef8e31f..7dd856c1d 100755 --- a/model/bin/link.tmpl +++ b/model/bin/link.tmpl @@ -116,7 +116,7 @@ case $WWATCH3_NETCDF in NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; + libs="$libs `$NETCDF_CONFIG --flibs` `$NETCDF_CONFIG --libs`" ;; esac fi diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index 6e3b99335..9d5a845db 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -4,13 +4,14 @@ # # # Remarks: # # - This version is set up for automatic w3_setenv script and for the # -# NOAA RDHPC 'zeus' system. When using this for your own setup and # +# NOAA RDHPC systems. When using this for your own setup and # # computer, please copy rather than modify. # # # # Hendrik L. Tolman # # August 2013 # # December 2013 # # April 2018 # +# March 2020 # # # # Copyright 2013 National Weather Service (NWS), # # National Oceanic and Atmospheric Administration. All rights # @@ -39,70 +40,83 @@ # Set batchq queue, choose modules and other custom variables to fit system and # to define headers etc (default to original version if empty) -ishera=`hostname | grep hfe` -isorion=`hostname | grep Orion` -if [ $ishera ] -then -# If no other h, assuming Hera - cmplr='hera.intel' - batchq="slurm" - modcomp='intel/18.0.5.274' - modmpi='impi/2018.0.4' - modnetcdf='netcdf/4.6.1' - metispath='/scratch2/COASTAL/coastal/save/Ali.Abdolali/parmetis-4.0.3' -elif [ $isorion ] -then - cmplr='orion.intel' - batchq="slurm" - modcomp='intel/2018.4' - modmpi='impi/2018.4' - modnetcdf='netcdf/4.7.2' - metispath='/work/noaa/marine/ali.abdolali/Source/parmetis-4.0.3' -else - batchq= -fi + ishera=`hostname | grep hfe` + isorion=`hostname | grep Orion` + if [ $ishera ] + then + # If no other h, assuming Hera + cmplr='hera.intel' + batchq='slurm' + hpcstackpath='/scratch2/NCEPDEV/nwprod/hpc-stack/libs/hpc-stack/modulefiles/stack' + hpcstackversion='hpc/1.1.0' + modcomp='hpc-intel/18.0.5.274' + modmpi='hpc-impi/2018.0.4' + modnetcdf='netcdf/4.7.4' + metispath='/scratch2/COASTAL/coastal/save/Ali.Abdolali/hpc-stack/parmetis-4.0.3' + elif [ $isorion ] + then + cmplr='orion.intel' + batchq='slurm' + hpcstackpath='/apps/contrib/NCEP/libs/hpc-stack/modulefiles/stack' + hpcstackversion='hpc/1.1.0' + modcomp='hpc-intel/2019.5' + modmpi='hpc-impi/2019.6' + modnetcdf='netcdf/4.7.4' + metispath='/work/noaa/marine/ali.abdolali/Source/hpc-stack/parmetis-4.0.3' + else + batchq= + fi # 1. Set up + + export np='24' #number of mpi tasks + export nr='4' #number of mpi tasks for hybrid + export nth='6' #number of threads + # 1.a Computer/ user dependent set up echo '#!/bin/sh --login' > matrix.head echo ' ' >> matrix.head -if [ $batchq = "slurm" ] && [ $isorion ] -then - echo '#SBATCH -n 24' >> matrix.head - echo '#SBATCH -q batch' >> matrix.head - echo '#SBATCH -t 08:00:00' >> matrix.head - echo '#SBATCH -A marine-cpu' >> matrix.head - echo '#SBATCH -J ww3_regtest' >> matrix.head - echo '#SBATCH -o matrix.out' >> matrix.head - echo '#SBATCH -p orion' >> matrix.head -elif [ $batchq = "slurm" ] -then - echo '#SBATCH -n 24' >> matrix.head - echo '#SBATCH -q batch' >> matrix.head - echo '#SBATCH -t 08:00:00' >> matrix.head - echo '#SBATCH -A marine-cpu' >> matrix.head - echo '#SBATCH -J ww3_regtest' >> matrix.head - echo '#SBATCH -o matrix.out' >> matrix.head -else - echo '#PBS -l procs=24' >> matrix.head - echo '#PBS -q batch' >> matrix.head - echo '#PBS -l walltime=08:00:00' >> matrix.head - echo '#PBS -A marine-cpu' >> matrix.head - echo '#PBS -N ww3_regtest' >> matrix.head - echo '#PBS -j oe' >> matrix.head - echo '#PBS -o matrix.out' >> matrix.head - echo ' ' >> matrix.head -fi + if [ $batchq = "slurm" ] && [ $isorion ] + then + echo "#SBATCH -n ${np}" >> matrix.head + echo '#SBATCH -q batch' >> matrix.head + echo '#SBATCH -t 08:00:00' >> matrix.head + echo '#SBATCH -A marine-cpu' >> matrix.head + echo '#SBATCH -J ww3_regtest' >> matrix.head + echo '#SBATCH -o matrix.out' >> matrix.head + echo '#SBATCH -p orion' >> matrix.head + elif [ $batchq = "slurm" ] + then + echo "#SBATCH -n ${np}" >> matrix.head + echo '#SBATCH -q batch' >> matrix.head + echo '#SBATCH -t 08:00:00' >> matrix.head + echo '#SBATCH -A marine-cpu' >> matrix.head + echo '#SBATCH -J ww3_regtest' >> matrix.head + echo '#SBATCH -o matrix.out' >> matrix.head + else + echo '#PBS -l procs=24' >> matrix.head + echo '#PBS -q batch' >> matrix.head + echo '#PBS -l walltime=08:00:00' >> matrix.head + echo '#PBS -A marine-cpu' >> matrix.head + echo '#PBS -N ww3_regtest' >> matrix.head + echo '#PBS -j oe' >> matrix.head + echo '#PBS -o matrix.out' >> matrix.head + echo ' ' >> matrix.head + fi echo " cd $(dirname $main_dir)/regtests" >> matrix.head echo ' ' >> matrix.head # Netcdf and Parmetis modules & variables - - echo " module load $modcomp $modmpi $modnetcdf" >> matrix.head + echo " module purge" >> matrix.head + echo " module use $hpcstackpath" >> matrix.head + echo " module load $hpcstackversion" >> matrix.head + echo " module load $modcomp" >> matrix.head + echo " module load $modmpi" >> matrix.head + echo " module load $modnetcdf" >> matrix.head echo " export WWATCH3_NETCDF=NC4" >> matrix.head - echo " export NETCDF_CONFIG=`which nc-config`" >> matrix.head - echo " export METIS_PATH=${metispath}" >> matrix.head + echo ' export NETCDF_CONFIG=$NETCDF_ROOT/bin/nc-config' >> matrix.head + echo " export METIS_PATH=${metispath}" >> matrix.head echo " export WW3_PARCOMPN=4" >> matrix.head echo ' ' @@ -112,9 +126,7 @@ fi else export mpi='mpirun' fi - export np='24' - export nr='4' - export nth='6' + # Compile option if [ "$cmplOption" = 'y' ] then @@ -169,7 +181,7 @@ fi export multi08='y' # mww3_test_08 (wind and ice tests) # export filter='PR3 ST2 UQ' - # The filter does a set of consecutinve greps on the + # The filter does a set of consecutive greps on the # command lines generated by filter.base with the above # selected options. diff --git a/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl b/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl index e4f3ea561..b40fc4ad7 100644 --- a/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl +++ b/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl @@ -30,8 +30,8 @@ COUPLE = $(WWATCH3_DIR)/../regtests/ww3_tp2.14/input/oasis3-mct ARCHDIR = $(WWATCH3_DIR)/../regtests/ww3_tp2.14/work_oasis3-mct # # NetCDF library -NETCDF_INCLUDE = $(shell $(NETCDF_CONFIG) --includedir) -NETCDF_LIBRARY = $(shell $(NETCDF_CONFIG) --flibs) +NETCDF_INCLUDE = $(shell $(NETCDF_CONFIG) --cflags) +NETCDF_LIBRARY = $(shell $(NETCDF_CONFIG) --flibs) $(shell $(NETCDF_CONFIG) --libs) # # Compilers and options MAKE = gmake From c4926b5c4e51dba93dbde31cad5bda84fb7e4902 Mon Sep 17 00:00:00 2001 From: Ty Hesser Date: Thu, 25 Mar 2021 20:43:35 -0400 Subject: [PATCH 73/84] fixing issue #339 and adding usace regtest matrix (#340) --- model/ftn/w3triamd.ftn | 6 +- regtests/bin/matrix_milhydro | 131 +++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 3 deletions(-) create mode 100755 regtests/bin/matrix_milhydro diff --git a/model/ftn/w3triamd.ftn b/model/ftn/w3triamd.ftn index 962b8bf3a..603dba11d 100644 --- a/model/ftn/w3triamd.ftn +++ b/model/ftn/w3triamd.ftn @@ -2821,11 +2821,11 @@ END SUBROUTINE IF ( R1GT180 + R2GT180 == 2 ) THEN - PT(3,1)=PT(3,1)-SIGN(360.0,(PT(3,1)-PT(2,1))) + PT(3,1)=PT(3,1)-SIGN(360.0d0,(PT(3,1)-PT(2,1))) ELSE IF ( R2GT180 + R3GT180 == 2 ) THEN - PT(1,1)=PT(1,1)-SIGN(360.0,(PT(1,1)-PT(2,1))) + PT(1,1)=PT(1,1)-SIGN(360.0d0,(PT(1,1)-PT(2,1))) ELSE IF ( R1GT180 + R3GT180 == 2 ) THEN - PT(2,1)=PT(2,1)-SIGN(360.0,(PT(2,1)-PT(3,1))) + PT(2,1)=PT(2,1)-SIGN(360.0d0,(PT(2,1)-PT(3,1))) ENDIF RETURN diff --git a/regtests/bin/matrix_milhydro b/regtests/bin/matrix_milhydro new file mode 100755 index 000000000..190d388b3 --- /dev/null +++ b/regtests/bin/matrix_milhydro @@ -0,0 +1,131 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# matrix.go: Run matrix of regression tests on target machine. # +# # +# Remarks: # +# - This version is set up for automatic w3_setenv script and for the # +# NOAA RDHPC 'zeus' system. When using this for your own setup and # +# computer, please copy rather than modify. # +# # +# Hendrik L. Tolman # +# August 2013 # +# December 2013 # +# April 2018 # +# # +# Copyright 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. # +# # +# --------------------------------------------------------------------------- # +# 0. Environment file + + source $(dirname $0)/../../model/bin/w3_setenv + main_dir=$WWATCH3_DIR + temp_dir=$WWATCH3_TMP + source=$WWATCH3_SOURCE + list=$WWATCH3_LIST + + echo "Main directory : $main_dir" + echo "Scratch directory : $temp_dir" + echo "Save source codes : $source" + echo "Save listings : $list" + +# Compiler option. Choose appropriate compiler and set cmplOption to +# y if using for the first time or using a different compiler + +# cmplr=Gnu_matrix + cmplr=gnu + export cmplOption='y' + +# Set batchq queue, choose modules and other custom variables to fit system and +# to define headers etc (default to original version if empty) +# 1. Set up +# 1.a Computer/ user dependent set up + + echo '#!/bin/sh ' > matrix.head + echo ' ' >> matrix.head + echo " cd $(dirname $main_dir)/regtests" >> matrix.head + echo ' ' >> matrix.head + +# Netcdf and Parmetis modules & variables + + echo " source $main_dir/bin/setpaths_milhydro3 " >> matrix.head + echo ' ' + + if [ "$batchq" = 'slurm' ] + then + export mpi='mpirun' + else + export mpi='mpirun' + fi + export np='24' + export nr='0' + export nth='0' +# Compile option + if [ "$cmplOption" = 'y' ] + then + opt="-c $cmplr -S -T" + else + opt="-S" + fi +# Batch queue option + if [ "$batchq" = 'slurm' ] + then + opt="-b $batchq $opt" + fi + +# Base run_test command line + export rtst="./bin/run_test $opt" + + export ww3='../model' + +# 1.b Flags to do course selection - - - - - - - - - - - - - - - - - - - - - - +# Addition selection by commenting out lines as below + + export shrd='y' # Do shared architecture tests + export dist='y' # Do distributed architecture (MPI) tests + export omp='y' # Threaded (OpenMP) tests + export hybd='y' # Hybrid options + + export prop1D='y' # 1-D propagation tests (ww3_tp1.X) + export prop2D='y' # 2-D propagation tests (ww3_tp2.X) + export time='y' # time linmited growth + export fetch='y' # fetch linmited growth + export hur1mg='y' # Hurricane with one moving grid + export shwtr='y' # shallow water tests + export unstr='y' # unstructured grid tests + export pdlib='y' # unstr with pdlib for domain decomposition and implicit solver + export smcgr='y' # SMC/Rotated grid test + export mudice='y' # Mud/Ice and wave interaction tests + export infgrv='y' # Second harmonic generation tests + export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) + export assim='y' # Restart spectra update + export calendar='y' + export oasis='n' + export rtd='y' + export confignc='y' + + export multi01='y' # mww3_test_01 (wetting and drying) + export multi02='y' # mww3_test_02 (basic two-way nesting test)) + export multi03='y' # mww3_test_03 (three high and three low res grids). + export multi04='y' # mww3_test_04 (swell on sea mount and/or current) + export multi05='y' # mww3_test_05 (three-grid moving hurricane) + export multi06='y' # mww3_test_06 (curvilinear grid tests) + export multi07='y' # mww3_test_07 (unstructured grid tests) + export multi08='y' # mww3_test_08 (wind and ice tests) + +# export filter='PR3 ST2 UQ' + # The filter does a set of consecutinve greps on the + # command lines generated by filter.base with the above + # selected options. + +# --------------------------------------------------------------------------- # +# 2. Execute matrix.base ... # +# --------------------------------------------------------------------------- # + + $main_dir/../regtests/bin/matrix.base + +# --------------------------------------------------------------------------- # +# End to the matrix # +# --------------------------------------------------------------------------- # From fc3576f413acfe44f4c81e95eefd8ff7b5b21cdd Mon Sep 17 00:00:00 2001 From: SanderHulst <37443533+SanderHulst@users.noreply.github.com> Date: Fri, 26 Mar 2021 15:38:03 +0100 Subject: [PATCH 74/84] Nan tide on equator (#222) * :bug: inconsistent check and deallocation * :star: improved tidal output around equator * :bug: TIDECON_NAME and TIDE_FREQC are not deallocated/allocated as pairs * :recycle: restored TIDECON_NAME allocation/deallocation Co-authored-by: sanderh --- model/ftn/w3tidemd.ftn | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/model/ftn/w3tidemd.ftn b/model/ftn/w3tidemd.ftn index da4e527a5..8e500759a 100644 --- a/model/ftn/w3tidemd.ftn +++ b/model/ftn/w3tidemd.ftn @@ -531,10 +531,20 @@ REAL(KIND=4), PARAMETER :: PI=3.1415926536 REAL(KIND=4), PARAMETER :: TWOPI=2.*3.1415926536 - REAL :: SLAT, VDBL, RR, SUMC, SUMS, UUDBL, UU + REAL :: SLAT, VDBL, RR, SUMC, SUMS, UUDBL, UU, CXLAT INTEGER :: IUU, IV - - SLAT=SIN(PI*XLAT/180.) + ! This comment was taken from t_tide, a matlab tidal prediction suite + ! + ! Apparently the second-order terms in the tidal potential go to zero + ! at the equator, but the third-order terms do not. Hence when trying + ! to infer the third-order terms from the second-order terms, the + ! nodal correction factors blow up. In order to prevent this, it is + ! assumed that the equatorial forcing is due to second-order forcing + ! OFF the equator, from about the 5 degree location. Latitudes are + ! hence (somewhat arbitrarily) forced to be no closer than 5 deg to + ! the equator, as per note in Foreman. + CXLAT = MAX(ABS(XLAT), 5.) + SLAT=SIN(PI*CXLAT/180.) JBASE=0 ! All @@ -1869,12 +1879,13 @@ REAL(KIND=4), PARAMETER :: TWOPI=2.*3.1415926536 ! REAL :: SLAT, VDBL, VV, SUMC, SUMS, RR, & - UUDBL, UU + UUDBL, UU, CXLAT REAL(KIND=8) :: d1,h,pp,s,p,enp,dh,dpp,ds,dp,dnp,hh,tau INTEGER :: indx(170) - SLAT=SIN(PI*XLAT/180.) + CXLAT = MAX(ABS(XLAT), 5.) + SLAT=SIN(PI*CXLAT/180.) ! !*********************************************************************** !* THE ASTRONOMICAL ARGUMENTS ARE CALCULATED BY LINEAR APPROXIMATION From a436cb4dc346b84149f70f9bef711ef8cbedda5b Mon Sep 17 00:00:00 2001 From: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Date: Thu, 1 Apr 2021 15:07:07 +0100 Subject: [PATCH 75/84] Changes to fix issue #341 (#342) * Changes to fix issue #341 * Fix the bug in a different way, as with the previous solution the information read from the restart file is wrongly overwritten --- model/ftn/ww3_shel.ftn | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index cb1113b17..8d9aaf243 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -332,7 +332,7 @@ CHARACTER(LEN=80) :: LINE CHARACTER(LEN=256) :: TMPLINE, TEST CHARACTER(LEN=1024) :: FLDIN - CHARACTER(LEN=1024) :: FLDRST + CHARACTER(LEN=1024) :: FLDRST='' CHARACTER(LEN=80) :: LINEIN CHARACTER(LEN=8) :: WORDS(7)='' @@ -1258,10 +1258,10 @@ IF (WORDS(7) .EQ. 'T') THEN CALL NEXTLN ( COMSTR , NDSI , NDSEN ) READ (NDSI,*,END=2001,ERR=2002) FLDRST - CALL W3FLGRDFLAG ( NDSO, NDSO, NDSE, FLDRST, FLOGR, & - FLOGRR, IAPROC, NAPOUT, IERR ) - IF ( IERR .NE. 0 ) GOTO 2222 END IF + CALL W3FLGRDFLAG ( NDSO, NDSO, NDSE, FLDRST, FLOGR, & + FLOGRR, IAPROC, NAPOUT, IERR ) + IF ( IERR .NE. 0 ) GOTO 2222 ELSE ! !INLINE NEW VARIABLE TO READ IF PRESENT OFILES(J), IF NOT ==0 From 2646f8c1752f3a2ad695ef296296ff58b7381783 Mon Sep 17 00:00:00 2001 From: SanderHulst <37443533+SanderHulst@users.noreply.github.com> Date: Tue, 20 Apr 2021 18:35:31 +0200 Subject: [PATCH 76/84] :bug: ECMWF total weight <0.7 on zero meridian (#243) Co-authored-by: Ali --- model/ftn/wmupdtmd.ftn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/model/ftn/wmupdtmd.ftn b/model/ftn/wmupdtmd.ftn index 6406b7049..e5c808682 100644 --- a/model/ftn/wmupdtmd.ftn +++ b/model/ftn/wmupdtmd.ftn @@ -1409,7 +1409,7 @@ DO J=IXS0, IXSN JJ=J IF ( FLAGLL ) THEN - IF ( ICLOSE.NE.ICLOSE_NONE ) JJ = 1 + MOD(J-1,NXI) + IF ( ICLOSE.NE.ICLOSE_NONE ) JJ = 1 + MOD(J-1+NXI,NXI) IF ( JJ.LT.1 .OR. JJ.GT. NXI ) CYCLE IXC = NINT((0.5*(XFL+XFR)-X0I-REAL(JJ-1)*SXI)/360.) IF ( IXC .NE. 0 ) THEN @@ -2020,7 +2020,7 @@ END IF DO J=IXS0, IXSN IF ( FLAGLL ) THEN - IF ( ICLOSE.NE.ICLOSE_NONE ) JJ = 1 + MOD(J-1,NXI) + IF ( ICLOSE.NE.ICLOSE_NONE ) JJ = 1 + MOD(J-1+NXI,NXI) IF ( JJ.LT.1 .OR. JJ.GT. NXI ) CYCLE IXC = NINT((0.5*(XFL+XFR)-X0I-REAL(JJ-1)*SXI)/360.) IF ( IXC .NE. 0 ) THEN From 0a6f4d28f816aee292d3a7ec0e344f2db54d63a3 Mon Sep 17 00:00:00 2001 From: Ty Hesser Date: Fri, 23 Apr 2021 22:46:32 -0400 Subject: [PATCH 77/84] Fb pdlib changes (#347) * Insertion of the PDLIB stuff. Mathieu * bug in SIGN call when SCRIP is activated * update SIGN issue Co-authored-by: Mathieu Dutour Sikiric Co-authored-by: erdc-tyler.hesser --- model/ftn/wmscrpmd.ftn | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/model/ftn/wmscrpmd.ftn b/model/ftn/wmscrpmd.ftn index 217188b6f..d96b08195 100644 --- a/model/ftn/wmscrpmd.ftn +++ b/model/ftn/wmscrpmd.ftn @@ -667,10 +667,10 @@ ! Periodicity fix for corner node IF ( ABS(ELONIP - ELONNEXT) .GT. 180.0 ) THEN - ELONNEXT = ELONNEXT -SIGN(360.0,(ELONIP - ELONNEXT)) + ELONNEXT = ELONNEXT -SIGN(360.0d0,(ELONIP - ELONNEXT)) ENDIF IF ( ABS(ELONIP - ELONPREV) .GT. 180.0 ) THEN - ELONPREV = ELONPREV -SIGN(360.0,(ELONIP - ELONPREV)) + ELONPREV = ELONPREV -SIGN(360.0d0,(ELONIP - ELONPREV)) ENDIF ELONN=(ELONIP+ELONNEXT)/2.0 @@ -1564,11 +1564,11 @@ ! if R1GT180+R2GT180+R3GT180 .eq. 2 the element crosses the dateline IF ( R1GT180 + R2GT180 == 2 ) THEN - PT(3,1)=PT(3,1)-SIGN(360.0,(PT(3,1)-PT(2,1))) + PT(3,1)=PT(3,1)-SIGN(360.0d0,(PT(3,1)-PT(2,1))) ELSE IF ( R2GT180 + R3GT180 == 2 ) THEN - PT(1,1)=PT(1,1)-SIGN(360.0,(PT(1,1)-PT(2,1))) + PT(1,1)=PT(1,1)-SIGN(360.0d0,(PT(1,1)-PT(2,1))) ELSE IF ( R1GT180 + R3GT180 == 2 ) THEN - PT(2,1)=PT(2,1)-SIGN(360.0,(PT(2,1)-PT(3,1))) + PT(2,1)=PT(2,1)-SIGN(360.0d0,(PT(2,1)-PT(3,1))) ENDIF RETURN From 1d13cd5848d2bb8ffede9c5a1c5e2e9c9918d810 Mon Sep 17 00:00:00 2001 From: SanderHulst <37443533+SanderHulst@users.noreply.github.com> Date: Thu, 13 May 2021 00:03:07 +0200 Subject: [PATCH 78/84] Linear interpolation in ww3_gint adds energy (#228) * :star: add nearest interpolation to ww3_gint * :pencil: updated log messages * :bug: select the point with the most weight, not least * :star: add nearest interpolation to ww3_gint * :pencil: updated log messages * :bug: select the point with the most weight, not least * :pencil: fixed format 917 * :pencil: ww3_gint: explain linear and nearest options * :pencil: ww3_gint.inp: describe interpolation options * :pencil: ww3_grid.inp: added grid types Co-authored-by: Ali Co-authored-by: sanderh --- manual/run/ww3_gint.tex | 6 ++++++ model/ftn/ww3_gint.ftn | 37 ++++++++++++++++++++++++++----------- model/inp/ww3_gint.inp | 5 ++++- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/manual/run/ww3_gint.tex b/manual/run/ww3_gint.tex index fb7a14647..20ac508de 100644 --- a/manual/run/ww3_gint.tex +++ b/manual/run/ww3_gint.tex @@ -19,6 +19,12 @@ \subsubsection{Grid Integration} \label{sub:ww3gint} saving substantial time in cases using large number of input grids and/or high-resolution target grids. +\vspace{\baselineskip} +\noindent +The grid integration program can use linear or nearest interpolation. The latter +is recommended when partitioned output is used for spectral reconstruction. Linear +interpolation will result in lines of spurious energy as partitions will bleed and +artificially increase the total energy. \vspace{\baselineskip} \vspace{\baselineskip} \noindent diff --git a/model/ftn/ww3_gint.ftn b/model/ftn/ww3_gint.ftn index 807aee9a1..57c5862ac 100644 --- a/model/ftn/ww3_gint.ftn +++ b/model/ftn/ww3_gint.ftn @@ -127,7 +127,7 @@ INTEGER :: I, J, IERR, NG, IG, JG, ISEA, IX, IY, IXT INTEGER :: IYT, NS, COUNTF, COUNTG, NOSWLL_MIN, ITOUT INTEGER :: NDSM, NDSI, NDSE, NDSO, NDSTRC, NTRACE, IOTST - INTEGER :: EXTRA, NSEA_FILE + INTEGER :: INTMETHOD, NSEA_FILE INTEGER, ALLOCATABLE :: FIDOUT(:), MAP(:,:), TMP_INDX(:) REAL :: SXT, SYT, XT, YT, XTT DOUBLE PRECISION :: DAREA, SAREA @@ -232,7 +232,8 @@ END IF CALL NEXTLN ( COMSTR, NDSI, NDSE ) - READ (NDSI,'(I1)',END=2001,ERR=2002) EXTRA + READ (NDSI,'(I1)',END=2001,ERR=2002) INTMETHOD + WRITE (NDSO,917) INTMETHOD ! ! 3.e Allocate memory for integration map and initialize with grid status map @@ -269,7 +270,7 @@ FNAMEWHT='WHTGRIDINT.bin' OPEN (994,FILE=FNMPRE(:J)//TRIM(FNAMEWHT),FORM='UNFORMATTED',IOSTAT=IERR,STATUS='OLD') NSEA_FILE = 0 - IF (IERR.EQ.0) READ(994) NSEA_FILE ! basic security check ... + IF (IERR.EQ.0) READ(994) NSEA_FILE ! basic consistency check ... IF (NSEA_FILE.EQ.NSEA) THEN DO ISEA = 1, NSEA READ(994) COUNTG @@ -322,11 +323,11 @@ IF (ITOUT.GT.0) INGRID=.TRUE. ! ! If extrapolation activated, force to find if a triangles is inside ! ! the coarse grid cell even if there is no triangle in the cell center - IF (EXTRA.GT.0) THEN + IF (INTMETHOD.EQ.1) THEN WRITE(991,'(2I6,2F9.4,I8,3I8,3F5.3)') IX,IY,XGRD(IY,IX), YGRD(IY,IX), ITOUT, IS(1:3), RW(1:3) IF (ITOUT.EQ.0) WRITE(992,*) IX,IY,ISEA,XGRD(IY,IX), YGRD(IY,IX) IF (ITOUT.EQ.0) THEN - CALL IS_IN_UNGRID2(IG, XGRD(IY,IX), YGRD(IY,IX), EXTRA, & + CALL IS_IN_UNGRID2(IG, XGRD(IY,IX), YGRD(IY,IX), INTMETHOD, & ITOUT, IS, JS, RW) WRITE(993,'(2I6,2F9.4,I8,3I8,3F6.3)') IX,IY,XGRD(IY,IX), YGRD(IY,IX), ITOUT, IS(1:3), RW(1:3) ENDIF @@ -385,6 +386,8 @@ DO I = 1,4 ! The following two IF tests are separated because for triangles, JS(4)=IS(4)=0 IF ( RW(I) .GT. 0.0 ) THEN + ! MAPSTA == 0 indicated excluded point (either land + ! or truly excluded) IF ( GRIDS(IG)%MAPSTA(JS(I),IS(I)) .NE. 0) THEN COUNTF = COUNTF+1 TMP_INDX(COUNTF) = I @@ -815,7 +818,7 @@ CALL W3SETA(NG, 6, 6) CALL W3SETW(NG, 6, 6) ! - CALL W3EXGI ( NG-1, NSEA, NOSWLL_MIN ) + CALL W3EXGI ( NG-1, NSEA, NOSWLL_MIN, INTMETHOD ) ! CALL TICK21 ( TOUT , DTREQ ) IF ( IOUT .GE. NOUT ) EXIT @@ -859,7 +862,7 @@ 905 FORMAT ( ' Grid Particulars are : '/ & ' Dimensions = ',2(I9,2X)/ & ' Grid Type = ',I3,' ==> 1 Rect, 2 Curv, 3 Unstr'/ & - ' Grid Closure = ',I3,' ==> 0 None, 1 Simple, 2 Tripolar') + ' Grid Closure = ',I3,' ==> -1 None, 2 Simple, 8 Tripolar') 907 FORMAT ( /' NOTE : The no. of swell partitions from input and', & ' target grids do not match',/ & ' The Min. no. of partitions from input grids =',I5/ & @@ -868,7 +871,7 @@ ' number of the partitions,',/ & ' rest will be marked undefined.' ) 908 FORMAT (/' Preparing interpolation weights for output grid ' / & - ' Total number of wet points for interpolation ',I6/) + ' Total number of wet points for interpolation ',I7/) 909 FORMAT (/' *** WARNING !! No interpolation points at ',2(I5)/) 910 FORMAT (/' Interpolating fields .... '/) 911 FORMAT (' Output group ', I5) @@ -877,6 +880,8 @@ 914 FORMAT ( ' OUTPUT TIME : ',A) 915 FORMAT ( ' ------------------------------------------------') 916 FORMAT ( I5,A,2X,A) + 917 FORMAT (/' Interpolation scheme = ',I1,' ==> 0 linear, ', & + '1 extrapolate unstructured, 2 nearest'/) 950 FORMAT (/' End of file reached'/) 999 FORMAT (/15X,' *** End of Grid interpolation Routine *** '/ & 15X,'==============================================='/) @@ -897,7 +902,7 @@ !/ CONTAINS !/ -----------------------------------------------------------------------/ - SUBROUTINE W3EXGI ( NGRD, NSEA, NOSWLL_MIN ) + SUBROUTINE W3EXGI ( NGRD, NSEA, NOSWLL_MIN, INTMETHOD ) !/ +-----------------------------------+ !/ | WAVEWATCH-III NOAA/NCEP | !/ | A. Chawla | @@ -950,12 +955,12 @@ !/ -------------------------------------------------------------------------/ !/ Parameter List !/ - INTEGER, INTENT(IN) :: NGRD, NSEA, NOSWLL_MIN + INTEGER, INTENT(IN) :: NGRD, NSEA, NOSWLL_MIN, INTMETHOD !/ !/ Local Parameters !/ INTEGER :: ISEA, GSEA, IG, IGRID, IPTS, IGX, IGY, IX, & - IY, ISWLL, ICAP, IBED, IFREQ, IK + IY, ISWLL, ICAP, IBED, IFREQ, IK, INRST INTEGER :: MAPINT, MAPICE, MAPDRY, MAPMSK, MAPLND, & NMAPICE, NMAPDRY, NMAPMSK, NMAPLND, & LMAPICE, LMAPDRY, LMAPMSK, LMAPLND, & @@ -1188,6 +1193,12 @@ MAPDRYT = 0 MAPLNDT = 0 MAPMSKT = 0 + IF ( INTMETHOD == 2 ) THEN + ! Nearest neighbour is the one with the most weight + INRST = MAXLOC(GR_INTS(ISEA)%IND_WTS(IG)%WT, DIM=1) + GR_INTS(ISEA)%IND_WTS(IG)%WT(:) = -1. + GR_INTS(ISEA)%IND_WTS(IG)%WT(INRST) = 1. + END IF DO IPTS = 1,GR_INTS(ISEA)%IND_WTS(IG)%NP IGX = GR_INTS(ISEA)%IND_WTS(IG)%IP(IPTS) IGY = GR_INTS(ISEA)%IND_WTS(IG)%JP(IPTS) @@ -1395,6 +1406,10 @@ IGX = GR_INTS(ISEA)%IND_WTS(IG)%IP(IPTS) IGY = GR_INTS(ISEA)%IND_WTS(IG)%JP(IPTS) WT = GR_INTS(ISEA)%IND_WTS(IG)%WT(IPTS) + IF ( WT < 0. ) THEN + ! Point is not nearest + CYCLE + END IF GSEA = GRIDS(IGRID)%MAPFS(IGY,IGX) ! ! Group 1 variables diff --git a/model/inp/ww3_gint.inp b/model/inp/ww3_gint.inp index 42ae2405d..b141c1c89 100644 --- a/model/inp/ww3_gint.inp +++ b/model/inp/ww3_gint.inp @@ -28,7 +28,10 @@ $ Upon execution of the code an out_grd.grd4 is generated via $ interpolation of output fields from the various out_grd.grdN $ (N varying from 1 to 3) files. $ -$ Choice of no extrapolation [0] or to extrapolate [1] with wet points [2] +$ Interpolation scheme +$ 0: Linear (all grid types) +$ 1: Linear with extrapolation of wetnodes (unstructured) +$ 2: Nearest (curvilinear and rectangular) 0 $ $ -------------------------------------------------------------------- $ From 9708edcb3641a34019f03274ebe1d4b8758ad8b8 Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Thu, 13 May 2021 22:45:40 -0400 Subject: [PATCH 79/84] Bug fixes for thread in w3_new and initializing variables (#373) * update w3_new for thread switches * adding files to .gitignore * fix formatting * initialize GA0, GAN, GD0, GDN for moving grids This appears to have been causing an issue in ww3_ts3 test cases when using OMP or MPI_OMPH that have not appeared before. --- .gitignore | 3 +++ model/bin/w3_new | 15 ++++++++++++++- model/ftn/w3idatmd.ftn | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9effb5e4b..f91f47988 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,9 @@ regtests/ww3_tp2.14/input/oasis3-mct/doc regtests/ww3_tp2.14/input*/*.nc.OAS*CM* regtests/ww3_tp2.14/input*/*/*.nc.OAS*CM* regtests/ww3_tp2.17/input/inlet.msh +regtests/ww3_tp2.21/input/mesh.msh +regtests/ww3_tp2.21/input/obstructions_local.glo_unst.in +regtests/ww3_tp2.21/input/obstructions_shadow.glo_unst.in *.nc */*.nc */*/*.nc diff --git a/model/bin/w3_new b/model/bin/w3_new index e868c5b7a..d538e71f5 100755 --- a/model/bin/w3_new +++ b/model/bin/w3_new @@ -120,14 +120,27 @@ 'mpp' );; 'mpiexp' ) cd $main_dir/ftn ; touch wmgridmd.ftn ;; 'thread' ) cd $main_dir/ftn ; touch w3wavemd.ftn + touch w3canomd.ftn + touch w3fld1md.ftn + touch w3fld2md.ftn + touch w3flxxmd.ftn touch w3iogomd.ftn touch w3pro1md.ftn touch w3pro2md.ftn touch w3pro3md.ftn + touch w3psmcmd.ftn + touch w3srcemd.ftn + touch w3pro1md.ftn + touch w3pro2md.ftn + touch w3pro3md.ftn + touch w3updtmd.ftn + touch wmgridmd.ftn touch w3uno2md.ftn touch w3updtmd.ftn touch w3uqckmd.ftn - touch w3iogomd.ftn ;; + touch w3iogomd.ftn + touch ww3_multi.ftn + touch ww3_shel.ftn ;; 'GSE' ) cd $main_dir/ftn ; touch w3gdatmd.ftn touch w3adatmd.ftn touch w3idatmd.ftn diff --git a/model/ftn/w3idatmd.ftn b/model/ftn/w3idatmd.ftn index cfb8b89f7..c670c1805 100644 --- a/model/ftn/w3idatmd.ftn +++ b/model/ftn/w3idatmd.ftn @@ -300,6 +300,10 @@ INPUTS(I)%TDN(2) = 0 INPUTS(I)%TG0(1) = -1 INPUTS(I)%TG0(2) = 0 + INPUTS(I)%GA0 = 0. + INPUTS(I)%GD0 = 0. + INPUTS(I)%GAN = 0. + INPUTS(I)%GDN = 0. INPUTS(I)%IINIT = .FALSE. INPUTS(I)%INFLAGS1 = .FALSE. INPUTS(I)%INFLAGS2 = .FALSE. From 482c500da51c2caf41ce3f8f011855bb4ab38d76 Mon Sep 17 00:00:00 2001 From: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Date: Tue, 18 May 2021 18:27:49 +0100 Subject: [PATCH 80/84] Fb coupling fields (#285) This PR adds new fields that can be sent (mean wave number, mean wave period, total ocean wind stress) and received (air density, wind stress) to/from other models via OASIS coupling, which will also be available in the model output. The fields that can be received via coupling can also be read from an external file, and using a homogeneous ice fraction is now activated when using '.inp' input files, as it was already possible to do it using '.nml' input files. In order to add this functionality it was necessary to modify the format of the ww3_shel.inp and ww3_multi.inp files, so that new flags controlling if these fields are used can be read. Furthermore, the format of the ww3_outf.inp file must be modified to accommodate the new output fields available. If no air density is read from file or via coupling, the default constant value is used. The infrastructure to read and use the wind stress is already in place, but the actual use of wind stress to drive the model is not implemented yet and it will be the aim of issue #337 * Fb oasis t+0 (#13) In the original code a coupling lag had to be used, coupling took place at the last time step but not at the first, and the coupling fields had to be written in an oasis restart file. With this ticket, the program can run in a different way by not using a coupling lag, coupling taking place at the first time step but not the last, and the coupling fields are written in the wave restart file - no extra oasis restart file needed. * Fb uprstr inp (#15) Enhancement to improve the way in which input data is read in and logged by the ww3_uprstr program: * read in variables specific to the update process selected * output the values provided in the ww3_uprstr.out log file * update the .inp template file and regtests to improve clarity and work with the changes * add capability to read inputs from a namelist (ww3_uprstr.nml) file * First set of changes, still testing * Some fixes * Further changes mainly fixing vector boundaries * Main changes * Most changes already present, only need to write in output and restart * Further changes - activate coupling * Bug fixes to make the code compile * Further changes to run regtests * Minor fixes for output, manual, and switches * Small fix to comments in model input * Remove some lines that had to be removed but were overlooked * Substitute ATTX and ATXX switches by WNTX and WNXX; add comments regarding last modification date * Change in file missed in latest commit * Minor changes fixing version change * Small fixes after reviewer's comments and to fix regtest * Changes to pass regtests * Addition of a new regtest and small fixes to ww3_prnc * Time-interpolate air density when read from file * Ensure that units are consistent * Restore long name in metadata for new fieds, and update code version for input files needed in regtest * Update last modification date; corrections for new output field: WNMEAN has now index (2,19) instead of (2,18) * Fixes from Jessica Meixner; update date of last change in restart file * Small fix to the format of the example input file ww3_multi.inp * Some fixes after merging with latest version of develop * Correct one version number * Fix the header of the table printed in log.ww3, should not cause changes in the output * Minor fix in the ww3_shel.inp file of one of the regtests * Update ww3_shel.inp * Some fixes and improvements that were proposed during the review process * Added comment to the new regtests implemented in ww3_tp2.15 Co-authored-by: Andy Saulter <48921142+ukmo-ansaulter@users.noreply.github.com> Co-authored-by: ukmo-chris.bunney Co-authored-by: Ali.Abdolali <37336972+aliabdolali@users.noreply.github.com> Co-authored-by: aliabdolali Co-authored-by: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> --- manual/impl/switch.tex | 4 +- model/bin/ww3_from_ftp.sh | 3 +- model/ftn/gx_outf.ftn | 30 +- model/ftn/pdlib_field_vec.ftn | 35 +- model/ftn/w3adatmd.ftn | 127 +++++-- model/ftn/w3agcmmd.ftn | 89 ++++- model/ftn/w3fld1md.ftn | 14 +- model/ftn/w3fld2md.ftn | 13 +- model/ftn/w3fldsmd.ftn | 82 +++-- model/ftn/w3idatmd.ftn | 125 +++++-- model/ftn/w3initmd.ftn | 225 +++++++++--- model/ftn/w3iogomd.ftn | 95 ++++- model/ftn/w3iorsmd.ftn | 79 ++-- model/ftn/w3nmlmultimd.ftn | 26 +- model/ftn/w3nmlprncmd.ftn | 12 +- model/ftn/w3nmlshelmd.ftn | 24 +- model/ftn/w3oacpmd.ftn | 39 +- model/ftn/w3odatmd.ftn | 30 +- model/ftn/w3ogcmmd.ftn | 49 ++- model/ftn/w3ounfmetamd.ftn | 86 ++++- model/ftn/w3sic2md.ftn | 3 +- model/ftn/w3srcemd.ftn | 30 +- model/ftn/w3updtmd.ftn | 285 +++++++++++++- model/ftn/w3wavemd.ftn | 121 ++++-- model/ftn/w3wdatmd.ftn | 35 +- model/ftn/wminitmd.ftn | 273 +++++++------- model/ftn/wmmdatmd.ftn | 25 +- model/ftn/wmupdtmd.ftn | 172 ++++++--- model/ftn/wmwavemd.ftn | 12 +- model/ftn/ww3_gint.ftn | 129 ++++++- model/ftn/ww3_grib.ftn | 59 ++- model/ftn/ww3_ounf.ftn | 73 +++- model/ftn/ww3_outf.ftn | 65 +++- model/ftn/ww3_prep.ftn | 42 ++- model/ftn/ww3_prnc.ftn | 69 +++- model/ftn/ww3_shel.ftn | 338 ++++++++++------- model/inp/ww3_multi.inp | 31 +- model/inp/ww3_ounf.inp | 6 +- model/inp/ww3_prep.inp | 2 + model/inp/ww3_prnc.inp | 2 + model/inp/ww3_shel.inp | 4 +- model/nml/ww3_multi.nml | 2 + model/nml/ww3_ounf.nml | 6 +- model/nml/ww3_prnc.nml | 2 + model/nml/ww3_shel.nml | 2 + regtests/bin/matrix.base | 80 ++-- regtests/bin/matrix_divider_p.sh | 3 +- regtests/mww3_test_01/input/ww3_shel.inp | 4 +- .../mww3_test_02/input/ww3_multi_grdset_a.inp | 4 +- .../mww3_test_02/input/ww3_multi_grdset_b.inp | 4 +- .../mww3_test_02/input/ww3_multi_grdset_c.inp | 4 +- .../mww3_test_02/input/ww3_multi_grdset_d.inp | 4 +- .../mww3_test_03/input/ww3_multi_grdset_a.inp | 6 +- .../mww3_test_03/input/ww3_multi_grdset_b.inp | 8 +- .../mww3_test_03/input/ww3_multi_grdset_c.inp | 8 +- .../mww3_test_03/input/ww3_multi_grdset_d.inp | 12 +- .../input/ww3_multi_grdset_d2.inp | 12 +- .../mww3_test_03/input/ww3_multi_grdset_e.inp | 4 +- .../mww3_test_04/input/ww3_multi_grdset_a.inp | 6 +- .../mww3_test_04/input/ww3_multi_grdset_b.inp | 6 +- .../mww3_test_04/input/ww3_multi_grdset_c.inp | 6 +- .../mww3_test_04/input/ww3_multi_grdset_d.inp | 6 +- .../mww3_test_04/input/ww3_multi_grdset_e.inp | 6 +- .../mww3_test_04/input/ww3_multi_grdset_f.inp | 6 +- .../mww3_test_04/input/ww3_multi_grdset_g.inp | 6 +- .../mww3_test_05/input/ww3_multi_grdset_a.inp | 8 +- .../mww3_test_05/input/ww3_multi_grdset_b.inp | 4 +- .../mww3_test_05/input/ww3_multi_grdset_c.inp | 2 +- .../mww3_test_05/input/ww3_multi_grdset_d.inp | 2 +- .../mww3_test_05/input/ww3_multi_grdset_e.inp | 2 +- .../mww3_test_06/input/ww3_multi_grdset_d.inp | 26 +- .../input/ww3_multi_grdset_d_h.inp | 28 +- .../input/ww3_multi_grdset_d_r.inp | 28 +- .../mww3_test_06/input/ww3_outf_depth.inp | 4 +- .../mww3_test_07/input/ww3_multi_grdset.inp | 4 +- .../i_highres_multi/ww3_multi_grdset_a.inp | 16 +- .../mww3_test_08/i_highres_shel/ww3_shel.inp | 4 +- .../i_highres_shel_IC1/ww3_shel.inp | 4 +- .../i_lowres_multi/ww3_multi_grdset_a.inp | 16 +- .../mww3_test_08/i_lowres_shel/ww3_shel.inp | 4 +- .../i_lowres_shel_IC1/ww3_shel.inp | 4 +- .../mww3_test_08/input/ww3_multi_grdset_a.inp | 18 +- regtests/ww3_ta1/input_UPD0F_O/ww3_shel.inp | 4 +- regtests/ww3_ta1/input_UPD0F_U/ww3_shel.inp | 4 +- regtests/ww3_ta1/input_UPD2_O/ww3_shel.inp | 4 +- regtests/ww3_ta1/input_UPD2_U/ww3_shel.inp | 4 +- .../ww3_ta1/input_UPD2_U_cap/ww3_shel.inp | 4 +- regtests/ww3_ta1/input_UPD3_O/ww3_shel.inp | 4 +- regtests/ww3_ta1/input_UPD3_U/ww3_shel.inp | 4 +- .../ww3_ta1/input_UPD3_U_cap/ww3_shel.inp | 4 +- regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp | 4 +- regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp | 4 +- .../ww3_ta1/input_UPD5_U_cap/ww3_shel.inp | 4 +- regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp | 4 +- regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp | 4 +- .../ww3_ta1/input_UPD6_U_cap/ww3_shel.inp | 4 +- regtests/ww3_tbt1.1/input/ww3_shel.inp | 4 +- regtests/ww3_tbt2.1/input/ww3_shel.inp | 4 +- regtests/ww3_tc1/input/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC1/ww3_shel.inp | 4 +- .../ww3_tic1.1/input_IC1_156x3/ww3_shel.inp | 4 +- .../ww3_tic1.1/input_IC2_ifr/ww3_shel.inp | 4 +- .../ww3_tic1.1/input_IC2_nondisp/ww3_shel.inp | 4 +- .../ww3_tic1.1/input_IC2_nrl/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC3/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC3NL/ww3_shel.inp | 4 +- .../ww3_tic1.1/input_IC3_nondisp/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IC5/ww3_shel.inp | 4 +- regtests/ww3_tic1.1/input_IS2/ww3_shel.inp | 4 +- .../ww3_tic1.2/input_IC3_A0.5k/ww3_shel.inp | 4 +- .../ww3_tic1.2/input_IC3_A1.0k/ww3_shel.inp | 4 +- .../ww3_tic1.2/input_IC3_A2.5k/ww3_shel.inp | 4 +- .../ww3_tic1.2/input_IC3_B0.5k/ww3_shel.inp | 4 +- .../ww3_tic1.2/input_IC3_B1.0k/ww3_shel.inp | 4 +- .../ww3_tic1.2/input_IC3_B2.5k/ww3_shel.inp | 4 +- .../ww3_tic1.2/input_IC3_CHENG/ww3_shel.inp | 4 +- .../ww3_tic1.2/input_IC3_V1_G/ww3_shel.inp | 4 +- .../ww3_tic1.2/input_IC3_V1_h/ww3_shel.inp | 4 +- .../ww3_tic1.3/input_IC3_0.5k/ww3_shel.inp | 4 +- .../ww3_tic1.3/input_IC3_2.5k/ww3_shel.inp | 4 +- .../ww3_tic1.3/input_IC3_CHENG/ww3_shel.inp | 4 +- .../ww3_tic1.3/input_IC3_V1_G/ww3_shel.inp | 4 +- .../ww3_tic1.3/input_IC3_V1_h/ww3_shel.inp | 4 +- regtests/ww3_tic1.4/input/ww3_shel.inp | 4 +- regtests/ww3_tic2.1/input_IC1/ww3_shel.inp | 4 +- regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.inp | 4 +- regtests/ww3_tic2.1/input_IC4/ww3_shel.inp | 4 +- regtests/ww3_tic2.2/input/ww3_shel.inp | 4 +- regtests/ww3_tic2.2/input_IC2/ww3_shel.inp | 4 +- regtests/ww3_tic2.3/input/ww3_shel.inp | 4 +- regtests/ww3_tig1.1/input/ww3_shel.inp | 4 +- regtests/ww3_tnc1/input/ww3_shel.inp | 4 +- regtests/ww3_tp1.1/input/ww3_shel.inp | 4 +- regtests/ww3_tp1.1/input2/ww3_shel.inp | 4 +- regtests/ww3_tp1.10/input/ww3_shel.inp | 4 +- regtests/ww3_tp1.2/input/ww3_shel.inp | 4 +- .../ww3_tp1.3/input/ww3_outf_whgt_end.inp | 4 +- regtests/ww3_tp1.3/input/ww3_shel.inp | 4 +- regtests/ww3_tp1.4/input/ww3_shel.inp | 4 +- regtests/ww3_tp1.5/input/ww3_shel.inp | 4 +- regtests/ww3_tp1.6/input/ww3_shel.inp | 4 +- .../input_moderate_current/ww3_shel.inp | 4 +- regtests/ww3_tp1.7/input/ww3_shel.inp | 4 +- regtests/ww3_tp1.7/input_OBST/ww3_shel.inp | 4 +- regtests/ww3_tp1.8/input/ww3_shel.inp | 4 +- regtests/ww3_tp1.8/input_BJ/ww3_shel.inp | 4 +- regtests/ww3_tp1.9/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.1/input/ww3_multi.inp | 2 +- regtests/ww3_tp2.1/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.10/input/ww3_outf.inp | 4 +- regtests/ww3_tp2.10/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.11/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.13/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp | 4 +- .../ww3_tp2.14/input/ww3_shel_OASACM2.inp | 4 +- .../ww3_tp2.14/input/ww3_shel_OASACM3.inp | 4 +- .../ww3_tp2.14/input/ww3_shel_OASACM4.inp | 4 +- .../ww3_tp2.14/input/ww3_shel_OASACM5.inp | 4 +- .../ww3_tp2.14/input/ww3_shel_OASACM6.inp | 4 +- regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp | 4 +- regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp | 4 +- regtests/ww3_tp2.15/info | 11 +- regtests/ww3_tp2.15/input/ww3_shel.inp | 4 +- .../ww3_tp2.15/input_rho/extract_AA_STE.m | 117 ++++++ regtests/ww3_tp2.15/input_rho/switch | 1 + regtests/ww3_tp2.15/input_rho/switch_MPI | 1 + regtests/ww3_tp2.15/input_rho/ww3_grid.inp | 33 ++ regtests/ww3_tp2.15/input_rho/ww3_grid.nml | 347 ++++++++++++++++++ regtests/ww3_tp2.15/input_rho/ww3_ounf.inp | 21 ++ regtests/ww3_tp2.15/input_rho/ww3_ounf.nml | 58 +++ .../ww3_tp2.15/input_rho/ww3_ounp_par.inp | 117 ++++++ .../ww3_tp2.15/input_rho/ww3_ounp_par.nml | 188 ++++++++++ .../ww3_tp2.15/input_rho/ww3_ounp_spec.inp | 117 ++++++ .../ww3_tp2.15/input_rho/ww3_ounp_spec.nml | 186 ++++++++++ regtests/ww3_tp2.15/input_rho/ww3_outf.inp | 10 + .../ww3_tp2.15/input_rho/ww3_prnc_RHO.inp | 50 +++ .../ww3_tp2.15/input_rho/ww3_prnc_RHO.nml | 76 ++++ .../ww3_tp2.15/input_rho/ww3_prnc_TAU.inp | 50 +++ .../ww3_tp2.15/input_rho/ww3_prnc_TAU.nml | 77 ++++ .../ww3_tp2.15/input_rho/ww3_prnc_WND.inp | 50 +++ .../ww3_tp2.15/input_rho/ww3_prnc_WND.nml | 77 ++++ regtests/ww3_tp2.15/input_rho/ww3_shel.inp | 48 +++ regtests/ww3_tp2.15/input_rho/ww3_shel.nml | 339 +++++++++++++++++ regtests/ww3_tp2.15/input_rho/ww3_strt.inp | 7 + regtests/ww3_tp2.16/input/ww3_shel.inp | 4 +- .../ww3_tp2.17/input/ww3_multi_grdset_a.inp | 2 +- .../ww3_tp2.17/input/ww3_multi_grdset_b.inp | 2 +- .../ww3_tp2.17/input/ww3_multi_grdset_c.inp | 2 +- regtests/ww3_tp2.17/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.18/input/ww3_shel.inp | 2 + regtests/ww3_tp2.2/input/ww3_multi.inp | 2 +- regtests/ww3_tp2.2/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.21/input/ww3_shel.inp | 19 +- regtests/ww3_tp2.3/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.4/input/ww3_outf_depth.inp | 4 +- regtests/ww3_tp2.4/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.5/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.5/input_REF/ww3_shel.inp | 4 +- regtests/ww3_tp2.6/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.7/input/ww3_shel.inp | 4 +- regtests/ww3_tp2.8/input/ww3_shel.inp | 8 +- regtests/ww3_tp2.9/input/ww3_shel.inp | 4 +- regtests/ww3_tr1/input/ww3_shel.inp | 4 +- regtests/ww3_tr1/input_bndin/ww3_shel.inp | 4 +- regtests/ww3_tr1/input_std/ww3_shel.inp | 4 +- regtests/ww3_ts1/input/ww3_shel.inp | 4 +- regtests/ww3_ts1/input_fld/ww3_shel.inp | 4 +- .../ww3_ts1/input_icesct_IC0/ww3_shel.inp | 4 +- .../ww3_ts1/input_icesct_IC1/ww3_shel.inp | 4 +- .../ww3_ts1/input_icesct_IC2/ww3_shel.inp | 4 +- .../ww3_ts1/input_icesct_IC3/ww3_shel.inp | 4 +- .../ww3_ts1/input_icesct_IC4/ww3_shel.inp | 4 +- regtests/ww3_ts2/input/ww3_shel.inp | 4 +- regtests/ww3_ts3/input/ww3_shel.inp | 8 +- .../input_rg_multi/ww3_multi_grdset.inp | 6 +- regtests/ww3_ts4/input_rg_shel/ww3_shel.inp | 4 +- regtests/ww3_ts4/input_ug/ww3_shel.inp | 4 +- 224 files changed, 4818 insertions(+), 1000 deletions(-) create mode 100644 regtests/ww3_tp2.15/input_rho/extract_AA_STE.m create mode 100644 regtests/ww3_tp2.15/input_rho/switch create mode 100644 regtests/ww3_tp2.15/input_rho/switch_MPI create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_grid.inp create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_grid.nml create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_ounf.inp create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_ounf.nml create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_ounp_par.inp create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_ounp_par.nml create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_ounp_spec.inp create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_ounp_spec.nml create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_outf.inp create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_prnc_RHO.inp create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_prnc_RHO.nml create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_prnc_TAU.inp create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_prnc_TAU.nml create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_prnc_WND.inp create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_prnc_WND.nml create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_shel.inp create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_shel.nml create mode 100644 regtests/ww3_tp2.15/input_rho/ww3_strt.inp diff --git a/manual/impl/switch.tex b/manual/impl/switch.tex index 50f62e119..964190f26 100644 --- a/manual/impl/switch.tex +++ b/manual/impl/switch.tex @@ -186,7 +186,7 @@ \subsubsection{~Mandatory switches} \label{sub:man_switch} \end{slist} \noindent -Selection of method of wind interpolation (time): +Selection of method of wind/momentum interpolation (time): \begin{slist} \sit{wnt0}{No interpolation.} \sit{wnt1}{Linear interpolation.} @@ -194,7 +194,7 @@ \subsubsection{~Mandatory switches} \label{sub:man_switch} \end{slist} \noindent -Selection of method of wind interpolation (space): +Selection of method of wind/momentum interpolation (space): \begin{slist} \sit{wnx0}{Vector interpolation.} \sit{wnx1}{Approximately linear speed interpolation.} diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index 03d0f4fe4..87aefd97e 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -28,7 +28,8 @@ tar -xvzf ww3_from_ftp.${ww3ver}.tar.gz #Move regtest info from data_regtests to regtests: echo -e "Moving data from data_regtests to regtests" cp -r data_regtests/ww3_tp2.18/input/*.nc regtests/ww3_tp2.18/input/ -cp -r data_regtests/ww3_tp2.15/input/*.nc regtests/ww3_tp2.15/input/ +cp -r data_regtests/ww3_tp2.15/input/wind.nc regtests/ww3_tp2.15/input/ +cp -r data_regtests/ww3_tp2.15/input/*.nc regtests/ww3_tp2.15/input_rho/ cp -r data_regtests/ww3_tp2.13/*.png regtests/ww3_tp2.13/ cp -r data_regtests/ww3_tic1.4/input/*.nc regtests/ww3_tic1.4/input/ cp -r data_regtests/ww3_tp2.8/input/*.nc regtests/ww3_tp2.8/input/ diff --git a/model/ftn/gx_outf.ftn b/model/ftn/gx_outf.ftn index 92aa665ec..2a97acb32 100644 --- a/model/ftn/gx_outf.ftn +++ b/model/ftn/gx_outf.ftn @@ -8,7 +8,7 @@ !/ | A. Chawla | !/ | J.H.G.M. Alves | !/ | FORTRAN 90 | -!/ | Last update : 27-Aug-2015 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 30-Jun-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -37,6 +37,7 @@ !/ 25-Feb-2013 : Adding double-index output fields ( version 4.11 ) !/ 27-Aug-2015 : ICEH and ICEF added as output ( version 5.10 ) !/ 25-Aug-2018 : Add WBT parameter ( version 6.06 ) +!/ 22-Mar-2021 : RHOA and TAUA added as output ( version 7.xx ) !/ !/ !/ Copyright 2009 National Weather Service (NWS), @@ -124,12 +125,13 @@ USE W3TIMEMD, ONLY: STME21, TICK21, DSEC21 !/ USE W3GDATMD - USE W3WDATMD, ONLY: TIME, WLV, ICE, ICEH, ICEF, BERG, UST, USTDIR + USE W3WDATMD, ONLY: TIME, WLV, ICE, ICEH, ICEF, BERG, & + UST, USTDIR, RHOAIR USE W3ADATMD, ONLY: CFLXYMAX, CFLTHMAX, AS, CX, CY, UA, UD, WN, & DW, HS, WLM, T01, T0M1, T02, THM, THS, FP0, & THP0, FP1, THP1, ABA, ABD, UBA, UBD, FCUT, & SXX, SYY, SXY, PHS, PTP, PLP, PDIR, PSI, PWS,& - PTM1, PT1, PT2, PEP, & + PTM1, PT1, PT2, PEP, TAUA, TAUADIR, & PTHP0, PQP, PSW, PPE, PGW, QP, & PWST, PNR, USERO, TAUOX, TAUOY, TAUWIX, & TAUWIY, PHIAW, PHIOC, TUSX, TUSY, PRMS, TPMS,& @@ -734,7 +736,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 28-Mar-2007 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 30-Jun-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -748,6 +750,7 @@ !/ 18-Jan-2007 : Update MSOUT/MBOUT treatment. ( version 3.10 ) !/ 28-Mar-2007 : Adding partitioned output. ( version 3.11 ) !/ Adding user slots for outputs. +!/ 22-Mar-2021 : Add output fields RHOA and TAUA ( version 7.xx ) !/ ! 1. Purpose : ! @@ -971,15 +974,30 @@ FLONE = .TRUE. CALL W3S2XY ( NSEA, NSEA, NX, NY, ICE , MAPSF, X1 ) ! +! Atmospheric momentum +! + ELSE IF ( J.EQ.1 .AND. K.EQ.8 ) THEN + FLTWO = .TRUE. + CALL W3S2XY ( NSEA, NSEA, NX, NY, TAUA(1:NSEA) & + , MAPSF, XX ) + CALL W3S2XY ( NSEA, NSEA, NX, NY, TAUADIR(1:NSEA) & + , MAPSF, XY ) +! +! Air density +! + ELSE IF ( J.EQ.1 .AND. K.EQ.9 ) THEN + FLONE = .TRUE. + CALL W3S2XY ( NSEA, NSEA, NX, NY, RHOAIR, MAPSF, X1 ) +! ! Ice thickness ! -!/IS2 ELSE IF ( J.EQ.1 .AND. K.EQ.9 ) THEN +!/IS2 ELSE IF ( J.EQ.1 .AND. K.EQ.11 ) THEN !/IS2 FLONE = .TRUE. !/IS2 CALL W3S2XY (NSEA, NSEA, NX, NY, ICEH , MAPSF, X1 ) ! ! Average sea ice floe diameter ! -!/IS2 ELSE IF ( J.EQ.1 .AND. K.EQ.10) THEN +!/IS2 ELSE IF ( J.EQ.1 .AND. K.EQ.12) THEN !/IS2 FLONE = .TRUE. !/IS2 CALL W3S2XY (NSEA, NSEA, NX, NY, ICEF , MAPSF, X1 ) ! diff --git a/model/ftn/pdlib_field_vec.ftn b/model/ftn/pdlib_field_vec.ftn index 5da116d5e..31a78eb1d 100644 --- a/model/ftn/pdlib_field_vec.ftn +++ b/model/ftn/pdlib_field_vec.ftn @@ -6,10 +6,11 @@ MODULE PDLIB_FIELD_VEC !/ | Mathieu Dutour-Sikiric (IRB) | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 01-Jan-2010 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 01-Jan-2010 : Origination. ( version 6.04 ) +!/ 22-Mar-2021 : Add WNMEAN, TAUOC output ( version 7.xx ) !/ !/ Copyright 2010 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -163,6 +164,9 @@ MODULE PDLIB_FIELD_VEC IF ( FLGRDALL( 2, 17) ) THEN IH = IH + 1 END IF + IF ( FLGRDALL( 2, 19) ) THEN + IH = IH + 1 + END IF IF ( FLGRDALL( 3, 1) ) THEN DO IK=E3DF(2,1),E3DF(3,1) IH = IH + 1 @@ -317,6 +321,10 @@ MODULE PDLIB_FIELD_VEC IF ( FLGRDALL( 6, 11) ) THEN IH = IH + 1 END IF + IF ( FLGRDALL( 6, 13) ) THEN + IH = IH + 1 + IH = IH + 1 + END IF IF ( FLGRDALL( 7, 1) ) THEN IH = IH + 1 IH = IH + 1 @@ -837,10 +845,11 @@ MODULE PDLIB_FIELD_VEC !/ | Mathieu Dutour-Sikiric (IRB) | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 01-Mai-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 01-Mai-2018 : Origination. ( version 6.04 ) +!/ 22-Mar-2021 : Add WNMEAN, TAUOC output ( version 7.xx ) !/ ! 1. Purpose : Do communication for PDLIB output ! 2. Method : @@ -863,7 +872,7 @@ MODULE PDLIB_FIELD_VEC DTDYN, FCUT, SPPNT, ABA, ABD, UBA, UBD,& SXX, SYY, SXY, USERO, PHS, PTP, PLP, & PDIR, PSI, PWS, PWST, PNR, PHIAW, & - PHIOC, & + PHIOC, TAUOCX, TAUOCY, WNMEAN, & TUSX, TUSY, TAUWIX, TAUWIY, TAUOX, & TAUOY, USSX, USSY, MSSX, MSSY, & MSCX, MSCY, PRMS, TPMS, CHARN, & @@ -1013,6 +1022,10 @@ MODULE PDLIB_FIELD_VEC IH = IH + 1 Arrexch(IH,JSEA)=WBT(JSEA) END IF + IF ( FLGRDALL( 2, 19) ) THEN + IH = IH + 1 + Arrexch(IH,JSEA)=WNMEAN(JSEA) + END IF IF ( FLGRDALL( 3, 1) ) THEN DO IK=E3DF(2,1),E3DF(3,1) IH = IH + 1 @@ -1251,6 +1264,12 @@ MODULE PDLIB_FIELD_VEC IH = IH + 1 Arrexch(IH,JSEA)=PHICE(JSEA) END IF + IF ( FLGRDALL( 6, 13) ) THEN + IH = IH + 1 + Arrexch(IH,JSEA)=TAUOCX(JSEA) + IH = IH + 1 + Arrexch(IH,JSEA)=TAUOCY(JSEA) + END IF IF ( FLGRDALL( 7, 1) ) THEN IH = IH + 1 Arrexch(IH,JSEA)=ABA(JSEA) @@ -1474,6 +1493,10 @@ MODULE PDLIB_FIELD_VEC IH = IH + 1 WBT(1:NSEA) = ARRtotal(IH,:) END IF + IF ( FLGRDALL( 2, 19) ) THEN + IH = IH + 1 + WNMEAN(1:NSEA) = ARRtotal(IH,:) + END IF IF ( FLGRDALL( 3, 1) ) THEN DO IK=E3DF(2,1),E3DF(3,1) IH = IH + 1 @@ -1712,6 +1735,12 @@ MODULE PDLIB_FIELD_VEC IH = IH + 1 PHICE(1:NSEA) = ARRtotal(IH,:) END IF + IF ( FLGRDALL( 6, 13) ) THEN + IH = IH + 1 + TAUOCX(1:NSEA) = ARRtotal(IH,:) + IH = IH + 1 + TAUOCY(1:NSEA) = ARRtotal(IH,:) + END IF IF ( FLGRDALL( 7, 1) ) THEN IH = IH + 1 ABA(1:NSEA) = ARRtotal(IH,:) diff --git a/model/ftn/w3adatmd.ftn b/model/ftn/w3adatmd.ftn index ada79edc5..d64cc3127 100644 --- a/model/ftn/w3adatmd.ftn +++ b/model/ftn/w3adatmd.ftn @@ -7,7 +7,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 05-Jun-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 28-Dec-2004 : Origination. ( version 3.06 ) @@ -38,6 +38,7 @@ !/ 30-Jul-2017 : Adds TWS parameter ( version 6.02 ) !/ 05-Jun-2018 : Adds PDLIB and MEMCHECK ( version 6.04 ) !/ 21-Aug-2018 : Add WBT parameter ( version 6.06 ) +!/ 22-Mar-2021 : Adds TAUA, WNMEAN, TAUOC parameters ( version 7.xx ) ! !/ !/ Copyright 2009-2013 National Weather Service (NWS), @@ -86,6 +87,10 @@ ! in W3UWND (rad) ! AS0-I R.A. Public Stability par. (initial and incr.) ! in W3UWND (degr) +! MA0-I R.A. Public Absolute atmospheric momentum (initial +! and inc.) in W3UTAU. +! MD0-I R.A. Public Atmospheric momentum direction (initial and +! increment) in W3UTAU. ! ATRNX/Y R.A. Public Actual transparency info. ! ! Fields of mean wave parameters: @@ -97,6 +102,8 @@ ! U10D R.A. Public Wind direction used. ! AS R.A. Public Stability parameter. ! CX/Y R.A. Public Current components. +! TAUA R.A. Public Absolute atmospheric momentum. +! TAUADIR R.A. Public Absolute atmospheric momentum direction. ! ! HS R.A. Public Wave Height. ! WLM R.A. Public Mean wave length. @@ -116,6 +123,7 @@ ! HCMAXD R.A. Public STD of HCMAXE ! WBT R.A. Public Dominant wave breaking probability ! (b_T in Babanin et al. (2001, JGR)) +! WNMEAN R.A. Public Mean wave number ! ! CHARN R.A. Public Charnock parameter for air-sea friction. ! TWS R.A. Public Wind sea period (used for flux parameterizations) @@ -134,6 +142,7 @@ ! PHIOC R.A. Public Waves to ocean energy flux. ! TUSX/Y R.A. Public Volume transport associated to Stokes drift. ! USSX/Y R.A. Public Surface Stokes drift. +! TAUOCX/Y R.A. Public Total ocean momentum flux ! TAUICE R.A. Public Wave-ice momentum flux. ! PHICE R.A. Public Waves to ice energy flux. ! @@ -350,12 +359,13 @@ ! REAL, POINTER :: CA0(:), CAI(:), CD0(:), CDI(:), & UA0(:), UAI(:), UD0(:), UDI(:), & + MA0(:), MAI(:), MD0(:), MDI(:), & AS0(:), ASI(:), ATRNX(:,:), ATRNY(:,:) ! ! Output fields group 1) ! REAL, POINTER :: DW(:), UA(:), UD(:), U10(:), U10D(:),& - AS(:), CX(:), CY(:) + AS(:), CX(:), CY(:), TAUA(:), TAUADIR(:) ! ! Output fields group 2) ! @@ -364,13 +374,14 @@ THS(:), THP0(:), FP1(:), THP1(:), & HSIG(:), STMAXE(:), STMAXD(:), & HMAXE(:), HCMAXE(:), HMAXD(:), & - HCMAXD(:), QP(:), WBT(:) + HCMAXD(:), QP(:), WBT(:), WNMEAN(:) REAL, POINTER :: XHS(:), XWLM(:), XT02(:), XT0M1(:), & XT01 (:), XFP0(:), XTHM(:), & XTHS(:), XTHP0(:), XFP1(:), XTHP1(:),& XHSIG(:), XSTMAXE(:), XSTMAXD(:), & XHMAXE(:), XHCMAXE(:), XHMAXD(:), & - XHCMAXD(:), XQP(:), XWBT(:) + XHCMAXD(:), XQP(:), XWBT(:), & + XWNMEAN(:) ! ! Output fields group 3) ! @@ -408,14 +419,16 @@ REAL, POINTER :: SXX(:), SYY(:), SXY(:), TAUOX(:),& TAUOY(:), BHD(:), PHIOC(:), & TUSX(:), TUSY(:), USSX(:), & - USSY(:), PRMS(:), TPMS(:), & - PHICE(:), TAUICE(:,:) + USSY(:), TAUOCX(:), TAUOCY(:), & + PRMS(:), TPMS(:), PHICE(:), & + TAUICE(:,:) REAL, POINTER :: P2SMS(:,:), US3D(:,:), USSP(:,:) REAL, POINTER :: XSXX(:), XSYY(:), XSXY(:), XTAUOX(:),& XTAUOY(:), XBHD(:), XPHIOC(:), & XTUSX(:), XTUSY(:), XUSSX(:), & - XUSSY(:), XPRMS(:), XTPMS(:), & - XPHICE(:), XTAUICE(:,:) + XUSSY(:), XTAUOCX(:), XTAUOCY(:), & + XPRMS(:), XTPMS(:), XPHICE(:), & + XTAUICE(:,:) REAL, POINTER :: XP2SMS(:,:), XUS3D(:,:), XUSSP(:,:) ! ! Output fields group 7) @@ -519,17 +532,18 @@ ! REAL, POINTER :: CA0(:), CAI(:), CD0(:), CDI(:), & UA0(:), UAI(:), UD0(:), UDI(:), & + MA0(:), MAI(:), MD0(:), MDI(:), & AS0(:), ASI(:), ATRNX(:,:), ATRNY(:,:) ! REAL, POINTER :: DW(:), UA(:), UD(:), U10(:), U10D(:),& - AS(:), CX(:), CY(:) + AS(:), CX(:), CY(:), TAUA(:), TAUADIR(:) ! REAL, POINTER :: HS(:), WLM(:), T02(:), T0M1(:), & T01 (:), FP0(:), THM(:), THS(:), & THP0(:), FP1(:), THP1(:), HSIG(:), & STMAXE(:), STMAXD(:), HMAXE(:), & - HCMAXE(:), HMAXD(:), HCMAXD(:), QP(:),& - WBT(:) + HCMAXE(:), HMAXD(:), HCMAXD(:), & + QP(:), WBT(:), WNMEAN(:) ! REAL, POINTER :: EF(:,:), TH1M(:,:), STH1M(:,:), & TH2M(:,:), STH2M(:,:) @@ -547,8 +561,8 @@ REAL, POINTER :: SXX(:), SYY(:), SXY(:), TAUOX(:), & TAUOY(:), BHD(:), PHIOC(:), & TUSX(:), TUSY(:), USSX(:), USSY(:), & - PRMS(:), TPMS(:), PHICE(:), & - TAUICE(:,:) + TAUOCX(:), TAUOCY(:), PRMS(:), & + TPMS(:), PHICE(:), TAUICE(:,:) REAL, POINTER :: P2SMS(:,:), US3D(:,:), USSP(:,:) ! REAL, POINTER :: ABA(:), ABD(:), UBA(:), UBD(:), & @@ -751,7 +765,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 10-Dec-2014 ! +!/ | Last update : 22-Mar-2021 ! !/ +-----------------------------------+ !/ !/ 28-Dec-2004 : Origination. ( version 3.06 ) @@ -765,6 +779,7 @@ !/ 28-Jul-2013 : Bug fix initialization P2SMS. ( version 4.11 ) !/ 30-Apr-2014 : Memory reduction for group3. ( version 5.00 ) !/ 10-Dec-2014 : Add checks for allocate status ( version 5.04 ) +!/ 22-Mar-2021 : Adds TAUA, WNMEAN, TAUOC parameters ( version 7.xx ) !/ ! 1. Purpose : ! @@ -830,7 +845,7 @@ USSPF, GTYPE, UNGTYPE USE W3ODATMD, ONLY: IAPROC, NAPROC, NTPROC, NAPFLD, & NOSWLL, NOEXTR, UNDEF, FLOGRD, FLOGR2 - USE W3IDATMD, ONLY: FLCUR, FLWIND + USE W3IDATMD, ONLY: FLCUR, FLWIND, FLTAUA USE W3SERVMD, ONLY: EXTCDE !/S USE W3SERVMD, ONLY: STRACE ! @@ -889,7 +904,7 @@ ! ! -------------------------------------------------------------------- / ! 2. Allocate arrays -! Call W3SETA to assure of pointes FLCUR an FLWND +! Call W3SETA to assure of pointes FLCUR, FLWND, and FLTAUA ! CALL W3SETA ( IMOD, NDSE, NDST ) @@ -915,6 +930,12 @@ WADATS(IMOD)%U10(NSEA) , WADATS(IMOD)%U10D(NSEA) , & WADATS(IMOD)%AS(0:NSEA) , STAT=ISTAT ) CHECK_ALLOC_STATUS ( ISTAT ) +! + ALLOCATE ( WADATS(IMOD)%TAUA(0:NSEA) , & + WADATS(IMOD)%TAUADIR(0:NSEA), STAT=ISTAT ) + CHECK_ALLOC_STATUS ( ISTAT ) + WADATS(IMOD)%TAUA(:) =0. + WADATS(IMOD)%TAUADIR(:)=0. !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'W3DIMA 2' !/MEMCHECK call getMallocInfo(mallinfos) @@ -946,6 +967,7 @@ WADATS(IMOD)%HCMAXE(NSEALM), & WADATS(IMOD)%HCMAXD(NSEALM), WADATS(IMOD)%QP(NSEALM), & WADATS(IMOD)%WBT(NSEALM), & + WADATS(IMOD)%WNMEAN(NSEALM), & STAT=ISTAT ) CHECK_ALLOC_STATUS ( ISTAT ) ! @@ -962,13 +984,14 @@ WADATS(IMOD)%THP1 = UNDEF WADATS(IMOD)%HSIG = UNDEF WADATS(IMOD)%STMAXE = UNDEF - WADATS(IMOD)%STMAXD= UNDEF - WADATS(IMOD)%HMAXE = UNDEF - WADATS(IMOD)%HMAXD = UNDEF - WADATS(IMOD)%HCMAXE= UNDEF - WADATS(IMOD)%HCMAXD= UNDEF + WADATS(IMOD)%STMAXD = UNDEF + WADATS(IMOD)%HMAXE = UNDEF + WADATS(IMOD)%HMAXD = UNDEF + WADATS(IMOD)%HCMAXE = UNDEF + WADATS(IMOD)%HCMAXD = UNDEF WADATS(IMOD)%QP = UNDEF WADATS(IMOD)%WBT = UNDEF + WADATS(IMOD)%WNMEAN = UNDEF !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'W3DIMA 3' !/MEMCHECK call getMallocInfo(mallinfos) @@ -1104,6 +1127,8 @@ WADATS(IMOD)%TUSY (NSEALM) , & WADATS(IMOD)%USSX (NSEALM) , & WADATS(IMOD)%USSY (NSEALM) , & + WADATS(IMOD)%TAUOCX(NSEALM) , & + WADATS(IMOD)%TAUOCY(NSEALM) , & WADATS(IMOD)%PRMS (NSEALM) , & WADATS(IMOD)%TPMS (NSEALM) , & WADATS(IMOD)%PHICE (NSEALM) , & @@ -1141,6 +1166,8 @@ WADATS(IMOD)%TUSY = UNDEF WADATS(IMOD)%USSX = UNDEF WADATS(IMOD)%USSY = UNDEF + WADATS(IMOD)%TAUOCX = UNDEF + WADATS(IMOD)%TAUOCY = UNDEF WADATS(IMOD)%PRMS = UNDEF WADATS(IMOD)%TPMS = UNDEF WADATS(IMOD)%PHICE = UNDEF @@ -1259,6 +1286,15 @@ STAT=ISTAT ) CHECK_ALLOC_STATUS ( ISTAT ) END IF +! + IF ( FLTAUA ) THEN + ALLOCATE ( WADATS(IMOD)%MA0(NSEA) , & + WADATS(IMOD)%MAI(NSEA) , & + WADATS(IMOD)%MD0(NSEA) , & + WADATS(IMOD)%MDI(NSEA) , & + STAT=ISTAT ) + CHECK_ALLOC_STATUS ( ISTAT ) + END IF ! ALLOCATE ( WADATS(IMOD)%ATRNX(NY*NX,-1:1) , & WADATS(IMOD)%ATRNY(NY*NX,-1:1) , STAT=ISTAT ) @@ -1407,11 +1443,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 10-Dec-2014 ! +!/ | Last update : 22-Mar-2021 ! !/ +-----------------------------------+ !/ !/ 26-Dec-2012 : Origination. ( version 3.06 ) !/ 10-Dec-2014 : Add checks for allocate status ( version 5.04 ) +!/ 22-Mar-2021 : Adds WNMEAN, TAUOC parameters ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1427,7 +1464,6 @@ USE W3ODATMD, ONLY: IAPROC, NAPROC, NTPROC, NAPFLD, & NOSWLL, NOEXTR, UNDEF, FLOGRD, FLOGR2, & NOGRP, NGRPP - USE W3IDATMD, ONLY: FLCUR, FLWIND USE W3SERVMD, ONLY: EXTCDE !/S USE W3SERVMD, ONLY: STRACE ! @@ -1600,6 +1636,14 @@ ALLOCATE ( WADATS(IMOD)%XWBT (1), STAT=ISTAT ) CHECK_ALLOC_STATUS ( ISTAT ) END IF +! + IF ( OUTFLAGS( 2, 19) ) THEN + ALLOCATE ( WADATS(IMOD)%XWNMEAN(NXXX), STAT=ISTAT ) + CHECK_ALLOC_STATUS ( ISTAT ) + ELSE + ALLOCATE ( WADATS(IMOD)%XWNMEAN(1), STAT=ISTAT ) + CHECK_ALLOC_STATUS ( ISTAT ) + END IF ! ! IF ( OUTFLAGS( 2,xx) ) THEN ! ALLOCATE ( WADATS(IMOD)%XFP1(NXXX), STAT=ISTAT ) @@ -1634,6 +1678,7 @@ WADATS(IMOD)%XHCMAXE= UNDEF WADATS(IMOD)%XHCMAXD= UNDEF WADATS(IMOD)%XWBT = UNDEF + WADATS(IMOD)%XWNMEAN= UNDEF ! WADATS(IMOD)%XFP1 = UNDEF ! WADATS(IMOD)%XTHP1 = UNDEF ! @@ -2031,6 +2076,18 @@ ALLOCATE ( WADATS(IMOD)%XUSSP(1,1), STAT=ISTAT ) CHECK_ALLOC_STATUS ( ISTAT ) END IF +! + IF ( OUTFLAGS( 6, 13) ) THEN + ALLOCATE ( WADATS(IMOD)%XTAUOCX(NXXX), STAT=ISTAT ) + CHECK_ALLOC_STATUS ( ISTAT ) + ALLOCATE ( WADATS(IMOD)%XTAUOCY(NXXX), STAT=ISTAT ) + CHECK_ALLOC_STATUS ( ISTAT ) + ELSE + ALLOCATE ( WADATS(IMOD)%XTAUOCX(1), STAT=ISTAT ) + CHECK_ALLOC_STATUS ( ISTAT ) + ALLOCATE ( WADATS(IMOD)%XTAUOCY(1), STAT=ISTAT ) + CHECK_ALLOC_STATUS ( ISTAT ) + END IF ! WADATS(IMOD)%XSXX = UNDEF @@ -2051,6 +2108,8 @@ WADATS(IMOD)%XPHICE = UNDEF WADATS(IMOD)%XTAUICE = UNDEF WADATS(IMOD)%XUSSP = UNDEF + WADATS(IMOD)%XTAUOCX = UNDEF + WADATS(IMOD)%XTAUOCY = UNDEF ! IF ( OUTFLAGS( 7, 1) ) THEN ALLOCATE ( WADATS(IMOD)%XABA(NXXX), STAT=ISTAT ) @@ -2322,7 +2381,6 @@ USE W3GDATMD, ONLY: NGRIDS, IGRID, NK, NX, NY, NSEA, NSEAL, & NSPEC, NTH, GTYPE, UNGTYPE USE W3ODATMD, ONLY: NAPROC - USE W3IDATMD, ONLY: FLCUR, FLWIND USE W3SERVMD, ONLY: EXTCDE !/S USE W3SERVMD, ONLY: STRACE ! @@ -2443,7 +2501,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 28_Mar-2007 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 28-Dec-2004 : Origination. ( version 3.06 ) @@ -2454,6 +2512,7 @@ !/ 04-Oct-2006 : Add filter to array pointers. ( version 3.10 ) !/ 28_Mar-2007 : Add partitioned data arrays. ( version 3.11 ) !/ Add aditional undefined arrays. +!/ 22-Mar-2021 : Adds TAUA, WNMEAN, TAUOC parameters ( version 7.xx ) !/ ! 1. Purpose : ! @@ -2630,6 +2689,8 @@ AS => WADATS(IMOD)%AS CX => WADATS(IMOD)%CX CY => WADATS(IMOD)%CY + TAUA => WADATS(IMOD)%TAUA + TAUADIR=> WADATS(IMOD)%TAUADIR ! HS => WADATS(IMOD)%HS WLM => WADATS(IMOD)%WLM @@ -2651,6 +2712,7 @@ HCMAXD => WADATS(IMOD)%HCMAXD QP => WADATS(IMOD)%QP WBT => WADATS(IMOD)%WBT + WNMEAN => WADATS(IMOD)%WNMEAN ! EF => WADATS(IMOD)%EF TH1M => WADATS(IMOD)%TH1M @@ -2704,6 +2766,8 @@ PHICE => WADATS(IMOD)%PHICE TAUICE => WADATS(IMOD)%TAUICE USSP => WADATS(IMOD)%USSP + TAUOCX => WADATS(IMOD)%TAUOCX + TAUOCY => WADATS(IMOD)%TAUOCY ! ABA => WADATS(IMOD)%ABA ABD => WADATS(IMOD)%ABD @@ -2770,6 +2834,13 @@ AS0 => WADATS(IMOD)%AS0 ASI => WADATS(IMOD)%ASI END IF +! + IF ( INPUTS(IMOD)%INFLAGS1(5) ) THEN + MA0 => WADATS(IMOD)%MA0 + MAI => WADATS(IMOD)%MAI + MD0 => WADATS(IMOD)%MD0 + MDI => WADATS(IMOD)%MDI + END IF ! !/PR1 IS0 => WADATS(IMOD)%IS0 !/PR1 IS2 => WADATS(IMOD)%IS2 @@ -2873,11 +2944,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 30-Apr-2014 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 25-Dec-2012 : Origination. ( version 4.11 ) !/ 30-Apr-2014 : Add s/th1-2m ( version 5.01 ) +!/ 22-Mar-2021 : Adds WNMEAN, TAUOC parameters ( version 7.xx ) !/ ! 1. Purpose : ! @@ -2950,6 +3022,7 @@ HCMAXD => WADATS(IMOD)%XHCMAXD QP => WADATS(IMOD)%XQP WBT => WADATS(IMOD)%XWBT + WNMEAN => WADATS(IMOD)%XWNMEAN ! FP1 => WADATS(IMOD)%XFP1 ! THP1 => WADATS(IMOD)%XTHP1 ! @@ -3005,6 +3078,8 @@ PHICE => WADATS(IMOD)%XPHICE TAUICE => WADATS(IMOD)%XTAUICE USSP => WADATS(IMOD)%XUSSP + TAUOCX => WADATS(IMOD)%XTAUOCX + TAUOCY => WADATS(IMOD)%XTAUOCY ABA => WADATS(IMOD)%XABA ABD => WADATS(IMOD)%XABD UBA => WADATS(IMOD)%XUBA diff --git a/model/ftn/w3agcmmd.ftn b/model/ftn/w3agcmmd.ftn index d7ab969d6..7a746782f 100644 --- a/model/ftn/w3agcmmd.ftn +++ b/model/ftn/w3agcmmd.ftn @@ -6,12 +6,13 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | J. Pianezze | !/ | FORTRAN 90 | -!/ | Last update : April-2016 | +!/ | Last update : Mar-2021 | !/ +-----------------------------------+ !/ !/ Mar-2014 : Origination. ( version 4.18 ) !/ For upgrades see subroutines. !/ Apr-2016 : Add comments (J. Pianezze) ( version 5.07 ) +!/ Mar-2021 : Add TAUA and RHOA coupling ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -198,12 +199,13 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | J. Pianezze | !/ | FORTRAN 90 | -!/ | Last update : April-2016 | +!/ | Last update : Mar-2021 | !/ +-----------------------------------+ !/ !/ Mar-2014 : Origination. ( version 4.18 ) !/ Apr-2015 : Modification (M. Accensi) ( version 5.07 ) !/ Apr-2016 : Add comments (J. Pianezze) ( version 5.07 ) +!/ Mar-2021 : Add TAUA and RHOA coupling ( version 7.xx ) !/ ! 1. Purpose : ! @@ -327,6 +329,89 @@ ENDIF ! ENDIF + IF (IDFLD == 'TAU') THEN + ! + ! Atmospheric momentum (Pa) (u-component) + ! ---------------------------------------------------------------------- + IF (RCV_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_UTAU') THEN + CALL CPL_OASIS_RCV(IB_DO, ID_OASIS_TIME, RLA_OASIS_RCV, LL_ACTION) + IF (LL_ACTION) THEN + TMP(1:NSEAL) = RLA_OASIS_RCV(1:NSEAL,1) + SND_BUFF(1:NSEA) = 0.0 + DO IB_I = 1, NSEAL + IB_J = IAPROC + (IB_I-1)*NAPROC + SND_BUFF(IB_J) = TMP(IB_I) + ENDDO + ! + CALL MPI_ALLREDUCE(SND_BUFF(1:NSEA), & + RCV_BUFF(1:NSEA), & + NSEA, & + MPI_REAL, & + MPI_SUM, & + ID_LCOMM, & + IL_ERR) + ! + ! Convert from storage (NSEA) to spatial grid (NX, NY) + CALL W3S2XY(NSEA,NSEA,NX,NY,RCV_BUFF(1:NSEA),MAPSF,FXN) + ! + ENDIF + ENDIF + ! + ! Atmospheric momentum (Pa) (v-component) + ! ---------------------------------------------------------------------- + IF (RCV_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_VTAU') THEN + CALL CPL_OASIS_RCV(IB_DO, ID_OASIS_TIME, RLA_OASIS_RCV, LL_ACTION) + IF (LL_ACTION) THEN + TMP(1:NSEAL) = RLA_OASIS_RCV(1:NSEAL,1) + SND_BUFF(1:NSEA) = 0.0 + DO IB_I = 1, NSEAL + IB_J = IAPROC + (IB_I-1)*NAPROC + SND_BUFF(IB_J) = TMP(IB_I) + END DO + ! + CALL MPI_ALLREDUCE(SND_BUFF(1:NSEA), & + RCV_BUFF(1:NSEA), & + NSEA, & + MPI_REAL, & + MPI_SUM, & + ID_LCOMM, & + IL_ERR) + ! + ! Convert from storage (NSEA) to spatial grid (NX, NY) + CALL W3S2XY(NSEA,NSEA,NX,NY,RCV_BUFF(1:NSEA),MAPSF,FYN) + ! + ENDIF + ENDIF + ! + ENDIF + IF (IDFLD == 'RHO') THEN + ! + ! Air density (kg.m-3) + ! ---------------------------------------------------------------------- + IF (RCV_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_RHOA') THEN + CALL CPL_OASIS_RCV(IB_DO, ID_OASIS_TIME, RLA_OASIS_RCV, LL_ACTION) + IF (LL_ACTION) THEN + TMP(1:NSEAL) = RLA_OASIS_RCV(1:NSEAL,1) + SND_BUFF(1:NSEA) = 0.0 + DO IB_I = 1, NSEAL + IB_J = IAPROC + (IB_I-1)*NAPROC + SND_BUFF(IB_J) = TMP(IB_I) + ENDDO + ! + CALL MPI_ALLREDUCE(SND_BUFF(1:NSEA), & + RCV_BUFF(1:NSEA), & + NSEA, & + MPI_REAL, & + MPI_SUM, & + ID_LCOMM, & + IL_ERR) + ! + ! Convert from storage (NSEA) to spatial grid (NX, NY) + CALL W3S2XY(NSEA,NSEA,NX,NY,RCV_BUFF(1:NSEA),MAPSF,FAN) + ! + ENDIF + ENDIF + ENDIF ENDDO !/ ------------------------------------------------------------------- / END SUBROUTINE RCV_FIELDS_FROM_ATMOS diff --git a/model/ftn/w3fld1md.ftn b/model/ftn/w3fld1md.ftn index 436f0a827..c279c3302 100644 --- a/model/ftn/w3fld1md.ftn +++ b/model/ftn/w3fld1md.ftn @@ -5,7 +5,7 @@ !/ | WAVEWATCH III NOAA/NCEP/NOPP | !/ | B. G. Reichl | !/ | FORTRAN 90 | -!/ | Last update : 18-Mar-2015 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 01-Jul-2013 : Origination. ( version 4.xx ) @@ -16,6 +16,7 @@ !/ 22-Jun-2018 : updated SIG2WN subroutine (X.Chen) ( version 6.06 ) !/ modified the range of wind profile computation; !/ corrected direction of the shortest waves +!/ 22-Mar-2021 : Consider DAIR a variable ( version 7.xx ) !/ !/ !/ Copyright 2009 National Weather Service (NWS), @@ -86,17 +87,19 @@ CONTAINS !/ ------------------------------------------------------------------- / SUBROUTINE W3FLD1( ASPC, FPI, WNDX,WNDY, ZWND, & - DEPTH, RIB, UST, USTD, Z0, TAUNUX,TAUNUY, CHARN) + DEPTH, RIB, DAIR, UST, USTD, Z0, & + TAUNUX, TAUNUY, CHARN) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP/NOPP | !/ | B. G. Reichl | !/ | FORTRAN 90 | -!/ | Last update : 18-Mar-2015 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 01-Jul-2013 : Origination. ( version 4.xx ) !/ 18-Mar-2015 : Prepare for submission ( version 5.12 ) +!/ 22-Mar-2021 : Consider DAIR a variable ( version 7.xx ) !/ ! 1. Purpose : ! @@ -123,6 +126,7 @@ ! RIB REAL I Bulk Richardson in lower atmosphere ! (for determining stability in ABL to get ! 10 m neutral wind) +! DAIR REAL I Air density ! TAUNUX Real 0 X-dir viscous stress (guessed from prev.) ! TAUNUY Real 0 Y-dir viscous stress (guessed from prev.) ! UST Real O Friction velocity. @@ -164,7 +168,7 @@ ! 10. Source code : ! !/ ------------------------------------------------------------------- / - USE CONSTANTS, ONLY: GRAV, DWAT, DAIR, TPI, PI, KAPPA + USE CONSTANTS, ONLY: GRAV, DWAT, TPI, PI, KAPPA USE W3GDATMD, ONLY: NK, NTH, NSPEC, SIG, DTH, XFR, TH USE W3ODATMD, ONLY: NDSE USE W3SERVMD, ONLY: EXTCDE @@ -176,7 +180,7 @@ !/ Parameter list !/ REAL, INTENT(IN) :: ASPC(NSPEC), WNDX, WNDY, & - ZWND, DEPTH, RIB, FPI + ZWND, DEPTH, RIB, DAIR, FPI REAL, INTENT(OUT) :: UST, USTD, Z0 REAL, INTENT(OUT), OPTIONAL :: CHARN REAL, INTENT(INOUT) :: TAUNUX, TAUNUY diff --git a/model/ftn/w3fld2md.ftn b/model/ftn/w3fld2md.ftn index bae17012e..86004bcac 100644 --- a/model/ftn/w3fld2md.ftn +++ b/model/ftn/w3fld2md.ftn @@ -5,7 +5,7 @@ !/ | WAVEWATCH III NOAA/NCEP/NOPP | !/ | B. G. Reichl | !/ | FORTRAN 90 | -!/ | Last update : 19-Mar-2015 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 01-Jul-2013 : Origination (version 3.14) @@ -14,6 +14,7 @@ !/ 27-Jul-2016 : Added Charnock output (J.Meixner) (version 5.12) !/ 22-Jun-2018 : Minor modification for application in shallow water. !/ (X.Chen) (version 6.06) +!/ 22-Mar-2021 : Consider DAIR a variable ( version 7.xx ) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -62,17 +63,18 @@ CONTAINS !/ ------------------------------------------------------------------- / SUBROUTINE W3FLD2( ASPC,FPI, WNDX,WNDY, ZWND, & - DEPTH, RIB, UST, USTD, Z0, TAUNUX,TAUNUY,CHARN) + DEPTH, RIB, DAIR, UST, USTD, Z0, TAUNUX,TAUNUY,CHARN) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP/NOPP | !/ | B. G. Reichl | !/ | FORTRAN 90 | -!/ | Last update : 19-Mar-2015 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 01-Jul-2013 : Origination (version 3.14) !/ 19-Mar-2015 : Clean-up for submission (version 5.12) +!/ 22-Mar-2021 : Consider DAIR a variable ( version 7.xx ) !/ ! 1. Purpose : ! @@ -93,6 +95,7 @@ ! ZWND Real I Wind height. ! DEPTH Real I Water depth. ! RIB Real I Bulk Richardson number in lower atm +! DAIR Real I Air density ! TAUNUX Real 0 X-dir viscous stress (guessed from prev.) ! TAUNUY Real 0 Y-dir viscous stress (guessed from prev.) ! UST Real O Friction velocity. @@ -139,7 +142,7 @@ ! 10. Source code : ! !/ ------------------------------------------------------------------- / - USE CONSTANTS, ONLY: DWAT, DAIR, GRAV, TPI, PI, KAPPA + USE CONSTANTS, ONLY: DWAT, GRAV, TPI, PI, KAPPA USE W3GDATMD, ONLY: NK, NTH, NSPEC, SIG, DTH, XFR, TH USE W3ODATMD, ONLY: NDSE USE W3SERVMD, ONLY: EXTCDE @@ -154,7 +157,7 @@ !/ Parameter list !/ REAL, INTENT(IN) :: ASPC(NSPEC), WNDX, WNDY, & - ZWND, DEPTH, RIB, FPI + ZWND, DEPTH, RIB, DAIR, FPI REAL, INTENT(OUT) :: UST, USTD, Z0 REAL, INTENT(OUT),OPTIONAL :: CHARN REAL, INTENT(INOUT) :: TAUNUX, TAUNUY diff --git a/model/ftn/w3fldsmd.ftn b/model/ftn/w3fldsmd.ftn index d936847d9..e59777a2a 100644 --- a/model/ftn/w3fldsmd.ftn +++ b/model/ftn/w3fldsmd.ftn @@ -7,7 +7,7 @@ !/ | H. L. Tolman | !/ | A. Chawla | !/ | FORTRAN 90 | -!/ | Last update : 05-Jun-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 30-Nov-1999 : Upgrade to FORTRAN 90 ( version 2.00 ) @@ -33,6 +33,7 @@ !/ (M. Accensi & F. Ardhuin, IFREMER) !/ 20-Jan-2017 : Update to new W3GSRUMD APIs ( version 6.02 ) !/ 05-Jun-2018 : adds DEBUGFLS ( version 6.04 ) +!/ 22-Mar-2021 : adds momentum and density input ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -42,7 +43,8 @@ ! 1. Purpose : ! ! Gathers a set of routines to manage input fields of depth, -! current, wind and ice concentration. +! current, wind, ice concentration, atmospheric momentum, and +! air density ! ! 2. Variables and types : ! @@ -91,7 +93,7 @@ !/ | H. L. Tolman | !/ | A. Chawla | !/ | FORTRAN 90 | -!/ | Last update : 26-Dec-2012 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 15-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -106,6 +108,7 @@ !/ 04-Apr-2010 : Adding iceberg field. ( version 3.14 ) !/ 09-Sep-2012 : Implement tidal cons. (F. Ardhuin ) ( version 4.09 ) !/ 26-Dec-2012 : Modified obsolete declarations. ( version 4.11 ) +!/ 22-Mar-2021 : adds momentum and density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -127,7 +130,7 @@ ! IDFLD C*3 I/O ID string for field type, valid are: 'IC1', ! 'IC2', 'IC3', 'IC4', 'IC5', 'MDN', 'MTH', ! 'MVS', 'LEV', 'CUR', 'WND', 'WNS', 'ICE', -! 'ISI', and 'DTn'. +! 'TAU', 'RHO', 'ISI', and 'DTn'. ! NDS Int. I Dataset number for fields file. ! NDST Int. I Dataset number for test output. ! NDSE Int. I Dataset number for error output. @@ -253,7 +256,8 @@ IDFLD.NE.'MTH' .AND. IDFLD.NE.'MVS' .AND. & IDFLD.NE.'LEV' .AND. IDFLD.NE.'CUR' .AND. & IDFLD.NE.'WND' .AND. IDFLD.NE.'WNS' .AND. & - IDFLD.NE.'ICE' .AND. IDFLD.NE.'DT0' .AND. & + IDFLD.NE.'ICE' .AND. IDFLD.NE.'TAU' .AND. & + IDFLD.NE.'RHO' .AND. IDFLD.NE.'DT0' .AND. & IDFLD.NE.'DT1' .AND. IDFLD.NE.'DT2' .AND. & IDFLD.NE.'ISI' ) GOTO 802 ! @@ -283,6 +287,12 @@ ELSE IF ( IDFLD.EQ.'ICE' .OR. IDFLD.EQ.'ISI' ) THEN FNAME = 'ice.' // TEMPXT(:I) I = I + 4 + ELSE IF ( IDFLD.EQ.'TAU' ) THEN + FNAME = 'momentum.' // TEMPXT(:I) + I = I + 9 + ELSE IF ( IDFLD.EQ.'RHO' ) THEN + FNAME = 'density.' // TEMPXT(:I) + I = I + 8 ELSE IF ( IDFLD.EQ.'DT0' ) THEN FNAME = 'data0.' // TEMPXT(:I) I = I + 6 @@ -524,11 +534,12 @@ !/ | F. Ardhuin | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 30-Jun-2013 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 24-Sep-2012 : Creation ( version 4.09 ) !/ 30-Jun-2013 : Split in 2 subroutines ( version 4.11 ) +!/ 22-Mar-2021 : adds momentum and density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -544,7 +555,8 @@ ! INXOUT C*(*) I Test string for read/write, valid are: ! 'READ' and 'WRITE'. ! IDFLD C*3 I/O ID string for field type, valid are: -! 'LEV', 'CUR', 'WND', 'WNS', 'ICE', 'ISI', and 'DTn'. +! 'LEV', 'CUR', 'WND', 'WNS', 'ICE', 'ISI', +! 'TAU', 'RHO', and 'DTn'. ! NDS Int. I Dataset number for fields file. ! NDST Int. I Dataset number for test output. ! NDSE Int. I Dataset number for error output. @@ -628,7 +640,8 @@ IF (INXOUT.NE.'READ' .AND. INXOUT.NE.'WRITE') GOTO 801 IF ( IDFLD.NE.'LEV' .AND. IDFLD.NE.'CUR' .AND. & IDFLD.NE.'WND' .AND. IDFLD.NE.'WNS' .AND. & - IDFLD.NE.'ICE' .AND. IDFLD.NE.'DT0' .AND. & + IDFLD.NE.'ICE' .AND. IDFLD.NE.'TAU' .AND. & + IDFLD.NE.'RHO' .AND. IDFLD.NE.'DT0' .AND. & IDFLD.NE.'DT1' .AND. IDFLD.NE.'DT2' .AND. & IDFLD.NE.'ISI' ) GOTO 802 WRITE = INXOUT .EQ. 'WRITE' @@ -702,11 +715,12 @@ !/ | F. Ardhuin | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 30-Jun-2013 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 24-Sep-2012 : Creation ( version 4.09 ) !/ 30-Jun-2013 : Split in 2 subroutines ( version 4.11 ) +!/ 22-Mar-2021 : adds momentum and density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -722,7 +736,8 @@ ! INXOUT C*(*) I Test string for read/write, valid are: ! 'READ' and 'WRITE'. ! IDFLD C*3 I/O ID string for field type, valid are: -! 'LEV', 'CUR', 'WND', 'WNS', 'ICE', 'ISI', and 'DTn'. +! 'LEV', 'CUR', 'WND', 'WNS', 'ICE', 'ISI', +! 'TAU', 'RHO', and 'DTn'. ! NDS Int. I Dataset number for fields file. ! NDST Int. I Dataset number for test output. ! NDSE Int. I Dataset number for error output. @@ -807,7 +822,8 @@ IF (INXOUT.NE.'READ' .AND. INXOUT.NE.'WRITE') GOTO 801 IF ( IDFLD.NE.'LEV' .AND. IDFLD.NE.'CUR' .AND. & IDFLD.NE.'WND' .AND. IDFLD.NE.'WNS' .AND. & - IDFLD.NE.'ICE' .AND. IDFLD.NE.'DT0' .AND. & + IDFLD.NE.'ICE' .AND. IDFLD.NE.'TAU' .AND. & + IDFLD.NE.'RHO' .AND. IDFLD.NE.'DT0' .AND. & IDFLD.NE.'DT1' .AND. IDFLD.NE.'DT2' .AND. & IDFLD.NE.'ISI' ) GOTO 802 WRITE = INXOUT .EQ. 'WRITE' @@ -919,7 +935,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 25-Sep-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 15-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -930,6 +946,7 @@ !/ 24-Apr-2015 : Adding OASIS coupling calls ( version 5.07 ) !/ (M. Accensi & F. Ardhuin, IFREMER) !/ 25-Sep-2020 : Receive coupled fields at T+0 ( version 7.10 ) +!/ 22-Mar-2021 : adds momentum and density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -948,7 +965,8 @@ ! 'READ' and 'WRITE'. ! IDFLD C*3 I ID string for field type, valid are: 'IC1', ! 'IC2', 'IC3', 'IC4', 'IC5', 'MDN', 'MTH', 'MVS', -! 'LEV', 'CUR', 'WND', 'WNS', 'ICE' and 'ISI'. +! 'LEV', 'CUR', 'WND', 'WNS', 'ICE', 'ISI', +! 'TAU', and 'RHO'. ! NDS Int. I Dataset number for fields file. ! NDST Int. I Dataset number for test output. ! NDSE Int. I Dataset number for error output. @@ -1072,13 +1090,14 @@ IDFLD.NE.'MTH' .AND. IDFLD.NE.'MVS' .AND. & IDFLD.NE.'LEV' .AND. IDFLD.NE.'CUR' .AND. & IDFLD.NE.'WND' .AND. IDFLD.NE.'WNS' .AND. & - IDFLD.NE.'ICE' .AND. IDFLD.NE.'ISI' ) GOTO 802 + IDFLD.NE.'ICE' .AND. IDFLD.NE.'ISI' .AND. & + IDFLD.NE.'TAU' .AND. IDFLD.NE.'RHO' ) GOTO 802 ! ! Set internal variables --------------------------------------------- * ! WRITE = INXOUT .EQ. 'WRITE' FL2D = IDFLD.EQ.'CUR' .OR. IDFLD.EQ.'WND' .OR. IDFLD.EQ.'WNS' & - .OR. IDFLD.EQ.'ISI' + .OR. IDFLD.EQ.'ISI' .OR. IDFLD.EQ.'TAU' FLBE = IDFLD.EQ.'ISI' FLST = IDFLD.EQ.'WNS' @@ -1092,8 +1111,8 @@ ! of integration for the first time step which is integrated on 0 ! to be able to output integrated variables like cha, ust, taw - FLINTERP = IDFLD.EQ.'CUR' .OR. IDFLD.EQ.'WND' .OR. IDFLD.EQ.'WNS' - + FLINTERP = IDFLD.EQ.'CUR' .OR. IDFLD.EQ.'WND' .OR. IDFLD.EQ.'WNS' & + .OR. IDFLD.EQ.'TAU' .OR. IDFLD.EQ.'RHO' ! if the model is coupled, no interpolation in time must be done IF (FLCOUPL) FLINTERP = .FALSE. @@ -1119,7 +1138,7 @@ DO IX=1, NX DO IY=1, NY FX0(IX,IY) = FXN(IX,IY) - FY0(IX,IY) = FYN(IX,IY) + IF (FL2D) FY0(IX,IY) = FYN(IX,IY) END DO IF( FLST ) THEN DO IY=1, NY @@ -1244,7 +1263,7 @@ DO IX=1, NX DO IY=1, NY FX0(IX,IY) = FXN(IX,IY) - FY0(IX,IY) = FYN(IX,IY) + IF (FL2D) FY0(IX,IY) = FYN(IX,IY) END DO IF( FLST ) THEN DO IY=1, NY @@ -2004,7 +2023,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 05-Jul-2005 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 15-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -2012,6 +2031,7 @@ !/ 04-Sep-2003 : Bug fix par. list declaration. ( version 3.04 ) !/ 05-Jul-2005 : Correct first level/ice. ( version 3.07 ) !/ 15-May-2018 : Allow homog ice. ( version 6.05 ) +!/ 22-Mar-2021 : adds momentum and density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -2040,7 +2060,9 @@ ! 2 : currents ! 3 : winds ! 4 : ice -! 8 : moving grid +! 5 : atmospheric momentum +! 6 : air density +! 10 : moving grid ! NDST Int. I Unit number test output. ! NDSE Int. I Unit number error messages. ! (No output if NDSE < 0). @@ -2110,9 +2132,9 @@ !/ INTEGER, INTENT(IN) :: J, NDST, NDSE, MX, MY, NX, NY, & T0(2), TN(2), NHM - INTEGER, INTENT(INOUT) :: NH, THO(2,-7:8,NHM), TF0(2), TFN(2) + INTEGER, INTENT(INOUT) :: NH, THO(2,-7:10,NHM), TF0(2), TFN(2) INTEGER, INTENT(OUT) :: IERR - REAL, INTENT(INOUT) :: HA(NHM,-7:8), HD(NHM,-7:8), HS(NHM,-7:8), & + REAL, INTENT(INOUT) :: HA(NHM,-7:10), HD(NHM,-7:10), HS(NHM,-7:10), & FX0(MX,MY), FY0(MX,MY), FS0(MX,MY), & FXN(MX,MY), FYN(MX,MY), FSN(MX,MY) !/ @@ -2138,7 +2160,7 @@ ! ! Test field ID number for validity ! - IF ( J.LT.-7 .OR. J .GT.8 ) GOTO 801 + IF ( J.LT.-7 .OR. J .GT.10 ) GOTO 801 FLFRST = TFN(1) .EQ. -1 ! !/T WRITE (NDST,9001) FLFRST @@ -2152,7 +2174,7 @@ TF0(1) = TFN(1) TF0(2) = TFN(2) IF ( TFN(1) .NE. -1 ) THEN - IF ( J .EQ. 2 ) THEN + IF ( (J .EQ. 2) .OR. (J .EQ. 5) ) THEN DO IX=1, NX DO IY=1, NY FX0(IX,IY) = FXN(IX,IY) @@ -2180,7 +2202,7 @@ TFN(1) = THO(1,J,1) TFN(2) = THO(2,J,1) ! ic* md* lev ice - IF ( ( J.LE.1 ) .OR. ( J.EQ.4) ) THEN + IF ( (J.LE.1) .OR. (J.EQ.4) .OR. (J.EQ.6) ) THEN DO IX=1, NX DO IY=1, NY FSN(IX,IY) = HA(1,J) @@ -2189,7 +2211,7 @@ !/T WRITE (NDST,9050) HA(1,J) END IF ! cur - IF ( J .EQ. 2 ) THEN + IF ( (J .EQ. 2) .OR. (J .EQ. 5) ) THEN DIR = ( 270. - HD(1,J) ) * DERA X = HA(1,J) * COS(DIR) Y = HA(1,J) * SIN(DIR) @@ -2248,7 +2270,7 @@ ! exit if field is ic* or md* or lev or ice ! and first forcing field has been stored ! at start run time - IF ( J.LE.(1).OR.(J.EQ.4) ) THEN + IF ( J.LE.(1).OR.(J.EQ.4).OR.(J.EQ.6) ) THEN IF (FLFRST .AND. DTTST.EQ.0. ) EXIT END IF END DO @@ -2403,9 +2425,9 @@ !/ Parameter list !/ INTEGER, INTENT(IN) :: J, NDST, NDSE, T0(2), TN(2), NHM - INTEGER, INTENT(INOUT) :: NH, THO(2,-7:8,NHM), TF0(2), TFN(2) + INTEGER, INTENT(INOUT) :: NH, THO(2,-7:10,NHM), TF0(2), TFN(2) INTEGER, INTENT(OUT) :: IERR - REAL, INTENT(INOUT) :: HA(NHM,-7:8), HD(NHM,-7:8), A0, AN, D0, DN + REAL, INTENT(INOUT) :: HA(NHM,-7:10), HD(NHM,-7:10), A0, AN, D0, DN !/ !/ ------------------------------------------------------------------- / !/ Local parameters diff --git a/model/ftn/w3idatmd.ftn b/model/ftn/w3idatmd.ftn index c670c1805..0cd07e58b 100644 --- a/model/ftn/w3idatmd.ftn +++ b/model/ftn/w3idatmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 24-Apr-2015 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 02-Apr-2004 : Origination. ( version 3.06 ) @@ -17,6 +17,7 @@ !/ 24-Apr-2015 : Adding OASIS coupling calls ( version 5.07 ) !/ (M. Accensi & F. Ardhuin, IFREMER) !/ 21-Jun-2018 : Add FSWND input for SMC grid. JGLi ( version 6.04 ) +!/ 22-Mar-2021 : Momentum and air density support ( version 7.xx ) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -51,6 +52,8 @@ ! TTN I.A. Public Time for mud thickness field. ! TVN I.A. Public Time for mud viscosity field. ! TIN I.A. Public Time for ice field. (concentration) +! TU0/N I.A. Public Times for momentum fields. +! TRN I.A. Public Time for air density field. ! TI1N I.A. Public Time for ice field. (parameter 1) ! TI2N I.A. Public Time for ice field. (parameter 2) ! TI3N I.A. Public Time for ice field. (parameter 3) @@ -69,13 +72,18 @@ ! CY0/N R.A. Public for both times. ! WLEV R.A. Public Next water level field. ! ICEI R.A. Public Ice concentrations. +! UX0/N R.A. Public Cartesian X and Y momentum components +! UY0/N R.A. Public for both times. +! RAIR R.A. Public Air density ! BERGI R.A. Public Iceberg damping coefficient ! IINIT Log. Public Flag for array initialization. ! FLLEV Log. Public Flag for water level input. ! FLCUR Log. Public Flag for current input. ! FLWIND Log. Public Flag for wind input. ! FLICE Log. Public Flag for ice input. -! INFLAGS1 L.A. Public Array consolidating the above four +! FLTAUA Log. Public Flag for atmospheric momentum input +! FLRHOA Log. Public Flag for air density input +! INFLAGS1 L.A. Public Array consolidating the above six ! flags, as well as four additional ! data flags. ! INFLAGS2 L.A. Public Like INFLAGS1 but does *not* get changed @@ -85,7 +93,7 @@ ! input fields. At present this is ! hardwired below. Field-related arrays ! (e.g., INFLAGS1) will be allocated from -! JFIRST:7 (e.g., ALLOCATE(INFLAGS1(JFIRST:7))). +! JFIRST:9 (e.g., ALLOCATE(INFLAGS1(JFIRST:9))). ! CXTIDE R.A. Public Tidal constituents of X current component ! CYTIDE R.A. Public Tidal constituents of Y current component ! WLTIDE R.A. Public Tidal constituents of water level @@ -116,7 +124,7 @@ ! - The number of grids is taken from W3GDATMD, and needs to be ! set first with W3DIMG. ! -! - INFLAGS1 dimensioning is hardwired as INFLAGS1(-7:12) where lowest possible +! - INFLAGS1 dimensioning is hardwired as INFLAGS1(-7:14) where lowest possible ! value of JFIRST is JFIRST=-7 ! ! 6. Switches : @@ -146,25 +154,27 @@ !/ Data structure INPUT !/ TYPE INPUT - INTEGER :: TFN(2,-7:8), TC0(2), TW0(2), & - TDN(2), TG0(2) + INTEGER :: TFN(2,-7:10), TC0(2), TW0(2), & + TU0(2), TDN(2), TG0(2) REAL :: GA0, GD0, GAN, GDN !/WRST REAL, POINTER :: WXNwrst(:,:),WYNwrst(:,:) REAL, POINTER :: WX0(:,:), WY0(:,:), DT0(:,:), & WXN(:,:), WYN(:,:), DTN(:,:), & CX0(:,:), CY0(:,:), CXN(:,:), & CYN(:,:), WLEV(:,:), ICEI(:,:), & - BERGI(:,:), MUDT(:,:), MUDV(:,:), & - MUDD(:,:), ICEP1(:,:), ICEP2(:,:), & - ICEP3(:,:), ICEP4(:,:), ICEP5(:,:) + UX0(:,:), UY0(:,:), UXN(:,:), & + UYN(:,:), RAIR(:,:), BERGI(:,:), & + MUDT(:,:), MUDV(:,:), MUDD(:,:), & + ICEP1(:,:), ICEP2(:,:), ICEP3(:,:), & + ICEP4(:,:), ICEP5(:,:) !/TIDE REAL, POINTER :: CXTIDE(:,:,:,:), CYTIDE(:,:,:,:), & !/TIDE WLTIDE(:,:,:,:) LOGICAL :: IINIT !/WRST LOGICAL :: WRSTIINIT=.FALSE. ! note that if size of INFLAGS1 is changed, then TFLAGS in wminitmd.ftn ! also must be resized. - LOGICAL :: INFLAGS1(-7:12), FLAGSC(-7:12), & - INFLAGS2(-7:12) + LOGICAL :: INFLAGS1(-7:14), FLAGSC(-7:14), & + INFLAGS2(-7:14) END TYPE INPUT !/ !/ Data storage @@ -174,24 +184,28 @@ !/ Data aliasses for structure INPUT(S) !/ INTEGER, POINTER :: TFN(:,:), TLN(:), TC0(:), TCN(:), & - TW0(:), TWN(:), TIN(:), T0N(:), & - T1N(:), T2N(:), TDN(:), TG0(:), & - TGN(:), TTN(:), TVN(:), TZN(:), & - TI1(:), TI2(:), TI3(:), TI4(:), TI5(:) + TW0(:), TWN(:), TU0(:), TUN(:), & + TIN(:), TRN(:), T0N(:), T1N(:), & + T2N(:), TDN(:), TG0(:), TGN(:), & + TTN(:), TVN(:), TZN(:), TI1(:), & + TI2(:), TI3(:), TI4(:), TI5(:) REAL, POINTER :: GA0, GD0, GAN, GDN REAL, POINTER :: WX0(:,:), WY0(:,:), DT0(:,:), & WXN(:,:), WYN(:,:), DTN(:,:), & !/WRST WXNwrst(:,:),WYNwrst(:,:), & CX0(:,:), CY0(:,:), CXN(:,:), & CYN(:,:), WLEV(:,:), ICEI(:,:), & - BERGI(:,:), MUDT(:,:), MUDV(:,:), & - MUDD(:,:), ICEP1(:,:), ICEP2(:,:), & - ICEP3(:,:), ICEP4(:,:), ICEP5(:,:) + UX0(:,:), UY0(:,:), UXN(:,:), & + UYN(:,:), RAIR(:,:), BERGI(:,:), & + MUDT(:,:), MUDV(:,:), MUDD(:,:), & + ICEP1(:,:), ICEP2(:,:), ICEP3(:,:), & + ICEP4(:,:), ICEP5(:,:) !/TIDE REAL, POINTER :: CXTIDE(:,:,:,:), & !/TIDE CYTIDE(:,:,:,:), WLTIDE(:,:,:,:) LOGICAL, POINTER :: IINIT LOGICAL, POINTER :: INFLAGS1(:), INFLAGS2(:), FLAGSC(:) - LOGICAL, POINTER :: FLLEV, FLCUR, FLWIND, FLICE + LOGICAL, POINTER :: FLLEV, FLCUR, FLWIND, FLICE, FLTAUA, & + FLRHOA LOGICAL, POINTER :: FLMTH, FLMVS, FLMDN LOGICAL, POINTER :: FLIC1, FLIC2, FLIC3, FLIC4, FLIC5 !/TIDE LOGICAL, POINTER :: FLLEVTIDE, FLCURTIDE, & @@ -205,12 +219,13 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 10-Dec-2014 ! +!/ | Last update : 22-Mar-2021 ! !/ +-----------------------------------+ !/ !/ 02-Apr-2004 : Origination. ( version 3.06 ) !/ 19-Jul-2006 : Adding auxiliary grids. ( version 3.10 ) !/ 10-Dec-2014 : Add checks for allocate status ( version 5.04 ) +!/ 22-Mar-2021 : Momentum and air density support ( version 7.xx ) !/ ! 1. Purpose : ! @@ -296,6 +311,8 @@ INPUTS(I)%TC0(2) = 0 INPUTS(I)%TW0(1) = -1 INPUTS(I)%TW0(2) = 0 + INPUTS(I)%TU0(1) = -1 + INPUTS(I)%TU0(2) = 0 INPUTS(I)%TDN(1) = -1 INPUTS(I)%TDN(2) = 0 INPUTS(I)%TG0(1) = -1 @@ -332,7 +349,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 10-Dec-2014 ! +!/ | Last update : 22-Mar-2021 ! !/ +-----------------------------------+ !/ !/ 02-Apr-2004 : Origination. ( version 3.06 ) @@ -340,6 +357,7 @@ !/ 04-Oct-2006 : Add filter to array pointers. ( version 3.10 ) !/ 10-Dec-2014 : Add checks for allocate status ( version 5.04 ) !/ 21-Jun-2018 : Add FSWND input for SMC grid. JGLi ( version 6.04 ) +!/ 22-Mar-2021 : Momentum and air density support ( version 7.xx ) !/ ! 1. Purpose : ! @@ -453,10 +471,10 @@ ! FLLEV => INPUTS(IMOD)%INFLAGS1(1) FLCUR => INPUTS(IMOD)%INFLAGS1(2) -!/TIDE FLLEVTIDE => INPUTS(IMOD)%INFLAGS1(9) -!/TIDE FLCURTIDE => INPUTS(IMOD)%INFLAGS1(10) -!/TIDE FLLEVRESI => INPUTS(IMOD)%INFLAGS1(11) -!/TIDE FLCURRESI => INPUTS(IMOD)%INFLAGS1(12) +!/TIDE FLLEVTIDE => INPUTS(IMOD)%INFLAGS1(11) +!/TIDE FLCURTIDE => INPUTS(IMOD)%INFLAGS1(12) +!/TIDE FLLEVRESI => INPUTS(IMOD)%INFLAGS1(13) +!/TIDE FLCURRESI => INPUTS(IMOD)%INFLAGS1(14) !/TIDE! !/TIDE FLLEVTIDE = FLAGSTIDE(1) !/TIDE FLCURTIDE = FLAGSTIDE(2) @@ -465,6 +483,8 @@ FLWIND => INPUTS(IMOD)%INFLAGS1(3) FLICE => INPUTS(IMOD)%INFLAGS1(4) + FLTAUA => INPUTS(IMOD)%INFLAGS1(5) + FLRHOA => INPUTS(IMOD)%INFLAGS1(6) ! ! notes: future improvement: flags for ICEPx should be ! "all or nothing" rather than 5 individual flags @@ -568,6 +588,26 @@ CHECK_ALLOC_STATUS ( ISTAT ) INPUTS(IMOD)%BERGI = 0. END IF +! + IF ( FLTAUA ) THEN +!/SMC IF( FSWND ) THEN +!/SMC ALLOCATE ( INPUTS(IMOD)%UX0(NSEA,1) , & +!/SMC INPUTS(IMOD)%UY0(NSEA,1) , & +!/SMC INPUTS(IMOD)%UXN(NSEA,1) , & +!/SMC INPUTS(IMOD)%UYN(NSEA,1) , STAT=ISTAT ) +!/SMC ELSE + ALLOCATE ( INPUTS(IMOD)%UX0(NX,NY) , & + INPUTS(IMOD)%UY0(NX,NY) , & + INPUTS(IMOD)%UXN(NX,NY) , & + INPUTS(IMOD)%UYN(NX,NY) , STAT=ISTAT ) +!/SMC ENDIF + CHECK_ALLOC_STATUS ( ISTAT ) + END IF +! + IF ( FLRHOA ) THEN + ALLOCATE ( INPUTS(IMOD)%RAIR(NX,NY), STAT=ISTAT ) + CHECK_ALLOC_STATUS ( ISTAT ) + END IF ! INPUTS(IMOD)%IINIT = .TRUE. ! @@ -617,12 +657,13 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 04-Oct-2006 ! +!/ | Last update : 22-Mar-2021 ! !/ +-----------------------------------+ !/ !/ 02-Apr-2004 : Origination. ( version 3.06 ) !/ 19-Jul-2006 : Adding auxiliary grids. ( version 3.10 ) !/ 04-Oct-2006 : Add filter to array pointers. ( version 3.10 ) +!/ 22-Mar-2021 : Momentum and air density support ( version 7.xx ) !/ ! 1. Purpose : ! @@ -711,6 +752,7 @@ TFN => INPUTS(IMOD)%TFN TC0 => INPUTS(IMOD)%TC0 TW0 => INPUTS(IMOD)%TW0 + TU0 => INPUTS(IMOD)%TU0 TG0 => INPUTS(IMOD)%TG0 TDN => INPUTS(IMOD)%TDN ! @@ -728,10 +770,12 @@ TCN => INPUTS(IMOD)%TFN(:,2) TWN => INPUTS(IMOD)%TFN(:,3) TIN => INPUTS(IMOD)%TFN(:,4) - T0N => INPUTS(IMOD)%TFN(:,5) - T1N => INPUTS(IMOD)%TFN(:,6) - T2N => INPUTS(IMOD)%TFN(:,7) - TGN => INPUTS(IMOD)%TFN(:,8) + TUN => INPUTS(IMOD)%TFN(:,5) + TRN => INPUTS(IMOD)%TFN(:,6) + T0N => INPUTS(IMOD)%TFN(:,7) + T1N => INPUTS(IMOD)%TFN(:,8) + T2N => INPUTS(IMOD)%TFN(:,9) + TGN => INPUTS(IMOD)%TFN(:,10) ! GA0 => INPUTS(IMOD)%GA0 GD0 => INPUTS(IMOD)%GD0 @@ -755,13 +799,15 @@ ! FLLEV => INPUTS(IMOD)%INFLAGS1(1) FLCUR => INPUTS(IMOD)%INFLAGS1(2) -!/TIDE FLLEVTIDE => INPUTS(IMOD)%INFLAGS1(9) -!/TIDE FLCURTIDE => INPUTS(IMOD)%INFLAGS1(10) -!/TIDE FLLEVRESI => INPUTS(IMOD)%INFLAGS1(11) -!/TIDE FLCURRESI => INPUTS(IMOD)%INFLAGS1(12) +!/TIDE FLLEVTIDE => INPUTS(IMOD)%INFLAGS1(11) +!/TIDE FLCURTIDE => INPUTS(IMOD)%INFLAGS1(12) +!/TIDE FLLEVRESI => INPUTS(IMOD)%INFLAGS1(13) +!/TIDE FLCURRESI => INPUTS(IMOD)%INFLAGS1(14) FLWIND => INPUTS(IMOD)%INFLAGS1(3) FLICE => INPUTS(IMOD)%INFLAGS1(4) + FLTAUA => INPUTS(IMOD)%INFLAGS1(5) + FLRHOA => INPUTS(IMOD)%INFLAGS1(6) ! IF ( IINIT ) THEN ! @@ -825,6 +871,17 @@ ICEI => INPUTS(IMOD)%ICEI BERGI => INPUTS(IMOD)%BERGI END IF +! + IF ( FLTAUA ) THEN + UX0 => INPUTS(IMOD)%UX0 + UY0 => INPUTS(IMOD)%UY0 + UXN => INPUTS(IMOD)%UXN + UYN => INPUTS(IMOD)%UYN + END IF +! + IF ( FLRHOA ) THEN + RAIR => INPUTS(IMOD)%RAIR + END IF ! END IF ! diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index d8baa5b71..7f154ecc3 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 25-Sep-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 28-Dec-2004 : Origination (out of W3WAVEMD). ( version 3.06 ) @@ -58,6 +58,7 @@ !/ 21-Aug-2018 : Add WBT parameter ( version 6.06 ) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) !/ 25-Sep-2020 : Extra fields for coupling restart ( version 7.10 ) +!/ 22-Mar-2021 : Extra coupling fields ( version 7.xx ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -348,7 +349,7 @@ 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 W3WDATMD, ONLY: TIME, TLEV, TICE, TRHO, WLV, UST, USTDIR, VA USE W3ODATMD, ONLY: NDSO, NDSE, NDST, SCREEN, NDS, NTPROC, & NAPROC, IAPROC, NAPLOG, NAPOUT, NAPERR, & NAPFLD, NAPPNT, NAPTRK, NAPRST, NAPBPT, & @@ -361,8 +362,9 @@ 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 W3IDATMD, ONLY: FLLEV, FLCUR, FLWIND, FLICE, FLTAUA, FLRHOA,& + 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 @@ -1313,6 +1315,10 @@ IF (.NOT. FLWIND) WRITE (NDSO,973) 'No' IF ( FLICE ) WRITE (NDSO,974) 'Prescribed' IF (.NOT. FLICE ) WRITE (NDSO,974) 'No' + IF ( FLTAUA ) WRITE (NDSO,988) 'Prescribed' + IF (.NOT. FLTAUA) WRITE (NDSO,988) 'No' + IF ( FLRHOA ) WRITE (NDSO,989) 'Prescribed' + IF (.NOT. FLRHOA) WRITE (NDSO,989) 'No' ! IF ( FLMDN ) WRITE (NDSO,9972) 'Prescribed' IF (.NOT. FLMDN ) WRITE (NDSO,9972) 'No' @@ -1382,6 +1388,10 @@ CALL STME21 ( TICE , DTME21 ) WRITE (NDSO,983) DTME21 END IF + IF (FLRHOA) THEN + CALL STME21 ( TRHO , DTME21 ) + WRITE (NDSO,990) DTME21 + END IF ! WRITE (NDSO,984) ! @@ -1460,6 +1470,8 @@ 972 FORMAT ( ' ',A,' curents.') 973 FORMAT ( ' ',A,' winds.') 974 FORMAT ( ' ',A,' ice fields.') + 988 FORMAT ( ' ',A,' momentum') + 989 FORMAT ( ' ',A,' air density') 9972 FORMAT( ' ',A,' mud density.') 9971 FORMAT( ' ',A,' mud thickness.') 9970 FORMAT( ' ',A,' mud viscosity.') @@ -1489,12 +1501,13 @@ 981 FORMAT (/' Initial time : ',A) 982 FORMAT ( ' Water level time : ',A) 983 FORMAT ( ' Ice field time : ',A) + 990 FORMAT ( ' Air density time : ',A) ! 984 FORMAT (// & - 37X,' | input | output |'/ & - 37X,' |-------------------|---------------|'/ & + 37X,' | input | output |'/ & + 37X,' |-----------------------|---------------|'/ & 2X,' step | pass | date time |', & - ' b w l c i i1 i5 d | g p t r b f c |'/ & + ' b w l c t r i i1 i5 d | g p t r b f c |'/ & 2X,'--------|------|---------------------|', & '-------------------|---------------|'/ & 2X,'--------+------+---------------------+', & @@ -1976,7 +1989,8 @@ !/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, CX, CY +!/MPI PTM1, PT1, PT2, PEP, WBT, CX, CY, & +!/MPI TAUOCX, TAUOCY, WNMEAN !/MPI USE W3GDATMD, ONLY: NK !/MPI USE W3ODATMD, ONLY: NDST, IAPROC, NAPROC, NTPROC, FLOUT, & @@ -2042,8 +2056,9 @@ ! 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 NRQMAX = 1+0+0 + 19+0+0 + 0+0+0 + & +!/MPI 2+(NOGE(4)-2)*(NOSWLL+1) + 11+3+1 + & +!/MPI 10+7+1 + 5+4+1 + 5+2+0 + 5+NOEXTR !/MPI DO IFJ=1,5 !/MPI IF ( FLGRDALL( 3,IFJ)) NRQMAX = NRQMAX + & !/MPI E3DF(3,IFJ) - E3DF(2,IFJ) + 1 @@ -2213,6 +2228,14 @@ !/MPIT WRITE (NDST,9011) IH, ' 2/17', IROOT, IT, IRQGO(IH), IERR !/MPI END IF ! +!/MPI IF ( FLGRDALL( 2, 19) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT + 1 +!/MPI CALL MPI_SEND_INIT (WNMEAN(1),NSEALM , MPI_REAL, IROOT, & +!/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) +!/MPIT WRITE (NDST,9011) IH, ' 2/19', 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 @@ -2675,6 +2698,19 @@ !/MPI END DO !/MPI END IF ! +!/MPI IF ( FLGRDALL( 6, 13) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT + 1 +!/MPI CALL MPI_SEND_INIT (TAUOCX(1),NSEALM , MPI_REAL, IROOT, & +!/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) +!/MPIT WRITE (NDST,9011) IH, ' 6/13', IROOT, IT, IRQGO(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT + 1 +!/MPI CALL MPI_SEND_INIT (TAUOCY(1),NSEALM , MPI_REAL, IROOT, & +!/MPI IT, MPI_COMM_WAVE, IRQGO(IH), IERR) +!/MPIT WRITE (NDST,9011) IH, ' 6/13', IROOT, IT, IRQGO(IH), IERR +!/MPI END IF +! !/MPI IF ( FLGRDALL( 7, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 @@ -3018,6 +3054,14 @@ !/MPIT WRITE (NDST,9011) IH, ' 2/17', IFROM, IT, IRQGO2(IH), IERR !/MPI END IF ! +!/MPI IF ( FLGRDALL( 2, 19) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT + 1 +!/MPI CALL MPI_RECV_INIT (WNMEAN(I0),1,WW3_FIELD_VEC, IFROM, IT, & +!/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) +!/MPIT WRITE (NDST,9011) IH, ' 2/19', 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 @@ -3479,6 +3523,19 @@ !/MPI END DO !/MPI END IF ! +!/MPI IF ( FLGRDALL( 6, 13) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT + 1 +!/MPI CALL MPI_RECV_INIT (TAUOCX(I0),1,WW3_FIELD_VEC, IFROM, IT, & +!/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) +!/MPIT WRITE (NDST,9011) IH, ' 6/13', IFROM, IT, IRQGO2(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT + 1 +!/MPI CALL MPI_RECV_INIT (TAUOCY(I0),1,WW3_FIELD_VEC, IFROM, IT, & +!/MPI MPI_COMM_WAVE, IRQGO2(IH), IERR ) +!/MPIT WRITE (NDST,9011) IH, ' 6/13', IFROM, IT, IRQGO2(IH), IERR +!/MPI END IF +! !/MPI IF ( FLGRDALL( 7, 1) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT + 1 @@ -3672,7 +3729,7 @@ ! !/MPI IF ( FLOUT(4) .OR. FLOUT(8) ) THEN !/MPI IF (OARST) THEN -!/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRS(30*NAPROC) ) +!/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRS(34*NAPROC) ) !/MPI ELSE !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRS(3*NAPROC) ) !/MPI ENDIF @@ -3747,12 +3804,20 @@ !/MPI IT = IT0 + 9 !/MPI CALL MPI_SEND_INIT (T0M1(1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) -!/MPIT WRITE (NDST,9011) IH, 'S T0', IROOT, IT, IRQRS(IH), IERR +!/MPIT WRITE (NDST,9021) IH, 'S T0', IROOT, IT, IRQRS(IH), IERR !/MPI ENDIF ! -!/MPI IF ( FLOGRR( 2, 6) ) THEN +!/MPI IF ( FLOGRR( 2, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT0 + 10 +!/MPI CALL MPI_SEND_INIT (T01 (1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S T1', IROOT, IT, IRQRS(IH), IERR +!/MPI ENDIF +! +!/MPI IF ( FLOGRR( 2, 6) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 11 !/MPI CALL MPI_SEND_INIT (FP0 (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S FP', IROOT, IT, IRQRS(IH), IERR @@ -3760,15 +3825,23 @@ ! !/MPI IF ( FLOGRR( 2, 7) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 11 +!/MPI IT = IT0 + 12 !/MPI CALL MPI_SEND_INIT (THM (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S TH', IROOT, IT, IRQRS(IH), IERR !/MPI END IF ! +!/MPI IF ( FLOGRR( 2, 19) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 13 +!/MPI CALL MPI_SEND_INIT (WNMEAN(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S WM', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! !/MPI IF ( FLOGRR( 5, 2) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 12 +!/MPI IT = IT0 + 14 !/MPI CALL MPI_SEND_INIT (CHARN(1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S CH', IROOT, IT, IRQRS(IH), IERR @@ -3776,12 +3849,12 @@ ! !/MPI IF ( FLOGRR( 5, 5) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 13 +!/MPI IT = IT0 + 15 !/MPI CALL MPI_SEND_INIT (TAUWIX(1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S WX', IROOT, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 14 +!/MPI IT = IT0 + 16 !/MPI CALL MPI_SEND_INIT (TAUWIY(1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S WY', IROOT, IT, IRQRS(IH), IERR @@ -3789,7 +3862,7 @@ ! !/MPI IF ( FLOGRR( 5, 11) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 15 +!/MPI IT = IT0 + 17 !/MPI CALL MPI_SEND_INIT (TWS (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S TS', IROOT, IT, IRQRS(IH), IERR @@ -3797,12 +3870,12 @@ ! !/MPI IF ( FLOGRR( 6, 2) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 16 +!/MPI IT = IT0 + 18 !/MPI CALL MPI_SEND_INIT (TAUOX(1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S OX', IROOT, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 17 +!/MPI IT = IT0 + 19 !/MPI CALL MPI_SEND_INIT (TAUOY(1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S OY', IROOT, IT, IRQRS(IH), IERR @@ -3810,7 +3883,7 @@ ! !/MPI IF ( FLOGRR( 6, 3) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 18 +!/MPI IT = IT0 + 20 !/MPI CALL MPI_SEND_INIT (BHD (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S BH', IROOT, IT, IRQRS(IH), IERR @@ -3818,7 +3891,7 @@ ! !/MPI IF ( FLOGRR( 6, 4) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 19 +!/MPI IT = IT0 + 21 !/MPI CALL MPI_SEND_INIT (PHIOC(1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S PH', IROOT, IT, IRQRS(IH), IERR @@ -3826,12 +3899,12 @@ ! !/MPI IF ( FLOGRR( 6, 5) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 20 +!/MPI IT = IT0 + 22 !/MPI CALL MPI_SEND_INIT (TUSX (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S UX', IROOT, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 21 +!/MPI IT = IT0 + 23 !/MPI CALL MPI_SEND_INIT (TUSY (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S UY', IROOT, IT, IRQRS(IH), IERR @@ -3839,12 +3912,12 @@ ! !/MPI IF ( FLOGRR( 6, 6) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 22 +!/MPI IT = IT0 + 24 !/MPI CALL MPI_SEND_INIT (USSX (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S SX', IROOT, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 23 +!/MPI IT = IT0 + 25 !/MPI CALL MPI_SEND_INIT (USSY (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S SY', IROOT, IT, IRQRS(IH), IERR @@ -3852,25 +3925,38 @@ ! !/MPI IF ( FLOGRR( 6,10) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 24 +!/MPI IT = IT0 + 26 !/MPI CALL MPI_SEND_INIT (TAUICE(1,1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S I1', IROOT, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 25 +!/MPI IT = IT0 + 27 !/MPI CALL MPI_SEND_INIT (TAUICE(1,2), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S I2', IROOT, IT, IRQRS(IH), IERR !/MPI END IF ! +!/MPI IF ( FLOGRR( 6,13) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 28 +!/MPI CALL MPI_SEND_INIT (TAUOCX(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S TX', IROOT, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 29 +!/MPI CALL MPI_SEND_INIT (TAUOCY(1), NSEALM, MPI_REAL, & +!/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) +!/MPIT WRITE (NDST,9021) IH, 'S TY', IROOT, IT, IRQRS(IH), IERR +!/MPI END IF +! !/MPI IF ( FLOGRR( 7, 2) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 26 +!/MPI IT = IT0 + 30 !/MPI CALL MPI_SEND_INIT (UBA (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S BA', IROOT, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 27 +!/MPI IT = IT0 + 31 !/MPI CALL MPI_SEND_INIT (UBD (1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S BD', IROOT, IT, IRQRS(IH), IERR @@ -3878,7 +3964,7 @@ ! !/MPI IF ( FLOGRR( 7, 4) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 28 +!/MPI IT = IT0 + 32 !/MPI CALL MPI_SEND_INIT (PHIBBL(1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S PB', IROOT, IT, IRQRS(IH), IERR @@ -3886,12 +3972,12 @@ ! !/MPI IF ( FLOGRR( 7, 5) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 29 +!/MPI IT = IT0 + 33 !/MPI CALL MPI_SEND_INIT (TAUBBL(1,1), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S T1', IROOT, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 30 +!/MPI IT = IT0 + 34 !/MPI CALL MPI_SEND_INIT (TAUBBL(1,2), NSEALM, MPI_REAL, & !/MPI IROOT, IT, MPI_COMM_WAVE, IRQRS(IH), IERR) !/MPIT WRITE (NDST,9021) IH, 'S T2', IROOT, IT, IRQRS(IH), IERR @@ -3973,9 +4059,17 @@ !/MPIT WRITE (NDST,9021) IH, 'R T0', IFROM, IT, IRQRS(IH), IERR !/MPI ENDIF ! -!/MPI IF ( FLOGRR( 2, 6) ) THEN +!/MPI IF ( FLOGRR( 2, 5) ) THEN !/MPI IH = IH + 1 !/MPI IT = IT0 + 10 +!/MPI CALL MPI_RECV_INIT (T01 (I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R T1', IFROM, IT, IRQRS(IH), IERR +!/MPI ENDIF +! +!/MPI IF ( FLOGRR( 2, 6) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 11 !/MPI CALL MPI_RECV_INIT (FP0 (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 @@ -3983,15 +4077,23 @@ ! !/MPI IF ( FLOGRR( 2, 7) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 11 +!/MPI IT = IT0 + 12 !/MPI CALL MPI_RECV_INIT (THM (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R TH', IFROM, IT, IRQRS(IH), IERR !/MPI END IF ! +!/MPI IF ( FLOGRR( 2, 19) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 13 +!/MPI CALL MPI_RECV_INIT (WNMEAN(I0),1,WW3_FIELD_VEC, & +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R WM', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! !/MPI IF ( FLOGRR( 5, 2) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 12 +!/MPI IT = IT0 + 14 !/MPI CALL MPI_RECV_INIT (CHARN(I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R CH', IFROM, IT, IRQRS(IH), IERR @@ -3999,12 +4101,12 @@ ! !/MPI IF ( FLOGRR( 5, 5) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 13 +!/MPI IT = IT0 + 15 !/MPI CALL MPI_RECV_INIT (TAUWIX(I0),1,WW3_FIELD_VEC,& !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R WX', IFROM, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 14 +!/MPI IT = IT0 + 16 !/MPI CALL MPI_RECV_INIT (TAUWIY(I0),1,WW3_FIELD_VEC,& !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R WY', IFROM, IT, IRQRS(IH), IERR @@ -4012,7 +4114,7 @@ ! !/MPI IF ( FLOGRR( 5,11) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 15 +!/MPI IT = IT0 + 17 !/MPI CALL MPI_RECV_INIT (TWS (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R TS', IFROM, IT, IRQRS(IH), IERR @@ -4020,12 +4122,12 @@ ! !/MPI IF ( FLOGRR( 6, 2) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 16 +!/MPI IT = IT0 + 18 !/MPI CALL MPI_RECV_INIT (TAUOX(I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R OX', IFROM, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 17 +!/MPI IT = IT0 + 19 !/MPI CALL MPI_RECV_INIT (TAUOY(I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R OY', IFROM, IT, IRQRS(IH), IERR @@ -4033,7 +4135,7 @@ ! !/MPI IF ( FLOGRR( 6, 3) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 18 +!/MPI IT = IT0 + 20 !/MPI CALL MPI_RECV_INIT (BHD (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R BH', IFROM, IT, IRQRS(IH), IERR @@ -4041,7 +4143,7 @@ ! !/MPI IF ( FLOGRR( 6, 4) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 19 +!/MPI IT = IT0 + 21 !/MPI CALL MPI_RECV_INIT (PHIOC(I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R PH', IFROM, IT, IRQRS(IH), IERR @@ -4049,12 +4151,12 @@ ! !/MPI IF ( FLOGRR( 6, 5) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 20 +!/MPI IT = IT0 + 22 !/MPI CALL MPI_RECV_INIT (TUSX (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R UX', IFROM, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 21 +!/MPI IT = IT0 + 23 !/MPI CALL MPI_RECV_INIT (TUSY (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R UY', IFROM, IT, IRQRS(IH), IERR @@ -4062,12 +4164,12 @@ ! !/MPI IF ( FLOGRR( 6, 6) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 22 +!/MPI IT = IT0 + 24 !/MPI CALL MPI_RECV_INIT (USSX (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R SX', IFROM, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 23 +!/MPI IT = IT0 + 25 !/MPI CALL MPI_RECV_INIT (USSY (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R SY', IFROM, IT, IRQRS(IH), IERR @@ -4075,25 +4177,38 @@ ! !/MPI IF ( FLOGRR( 6,10) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 24 +!/MPI IT = IT0 + 26 !/MPI CALL MPI_RECV_INIT (TAUICE(I0,1),1,WW3_FIELD_VEC,& !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R I1', IFROM, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 25 +!/MPI IT = IT0 + 27 !/MPI CALL MPI_RECV_INIT (TAUICE(I0,2),1,WW3_FIELD_VEC,& !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R I2', IFROM, IT, IRQRS(IH), IERR !/MPI END IF ! +!/MPI IF ( FLOGRR( 6,13) ) THEN +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 28 +!/MPI CALL MPI_RECV_INIT (TAUOCX(I0),1,WW3_FIELD_VEC,& +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R SX', IFROM, IT, IRQRS(IH), IERR +!/MPI IH = IH + 1 +!/MPI IT = IT0 + 29 +!/MPI CALL MPI_RECV_INIT (TAUOCY(I0),1,WW3_FIELD_VEC,& +!/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) +!/MPIT WRITE (NDST,9021) IH, 'R SY', IFROM, IT, IRQRS(IH), IERR +!/MPI END IF +! !/MPI IF ( FLOGRR( 7, 2) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 26 +!/MPI IT = IT0 + 30 !/MPI CALL MPI_RECV_INIT (UBA (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R BA', IFROM, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 27 +!/MPI IT = IT0 + 31 !/MPI CALL MPI_RECV_INIT (UBD (I0),1,WW3_FIELD_VEC, & !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R BD', IFROM, IT, IRQRS(IH), IERR @@ -4101,7 +4216,7 @@ ! !/MPI IF ( FLOGRR( 7, 4) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 28 +!/MPI IT = IT0 + 32 !/MPI CALL MPI_RECV_INIT (PHIBBL(I0),1,WW3_FIELD_VEC,& !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R PB', IFROM, IT, IRQRS(IH), IERR @@ -4109,12 +4224,12 @@ ! !/MPI IF ( FLOGRR( 7, 5) ) THEN !/MPI IH = IH + 1 -!/MPI IT = IT0 + 29 +!/MPI IT = IT0 + 33 !/MPI CALL MPI_RECV_INIT (TAUBBL(I0,1),1,WW3_FIELD_VEC,& !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R T1', IFROM, IT, IRQRS(IH), IERR !/MPI IH = IH + 1 -!/MPI IT = IT0 + 30 +!/MPI IT = IT0 + 34 !/MPI CALL MPI_RECV_INIT (TAUBBL(I0,2),1,WW3_FIELD_VEC,& !/MPI IFROM, IT, MPI_COMM_WAVE, IRQRS(IH), IERR ) !/MPIT WRITE (NDST,9021) IH, 'R T2', IFROM, IT, IRQRS(IH), IERR @@ -4129,7 +4244,7 @@ ! !/MPI NRQRS = IH !/MPI IF (OARST) THEN -!/MPI IT0 = IT0 + 30 +!/MPI IT0 = IT0 + 34 !/MPI ELSE !/MPI IT0 = IT0 + 3 !/MPI ENDIF diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 6cdd77e5e..6a8689ccf 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 03-Nov-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 04-Jan-2001 : Origination. ( version 2.00 ) @@ -59,6 +59,7 @@ !/ seperate subroutine. (C. Bunney) !/ 15-Jan-2020 : Added TP output based on exsiting ( version 7.12 ) !/ FP internal field. (C. Bunney) +!/ 22-Mar-2021 : Add extra coupling fields as output ( version 7.xx ) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -674,10 +675,11 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | C. Bunney | !/ | FORTRAN 90 | -!/ | Last update : 03-Nov-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 03-Nov-2020 : Origination. ( version 7.12 ) +!/ 22-Mar-2021 : Add extra coupling fields as output ( version 7.xx ) ! ! 1. Purpose : ! @@ -734,15 +736,21 @@ CASE('IBG') I = 1 J = 7 + CASE('TAU') + I = 1 + J = 8 + CASE('RHO') + I = 1 + J = 9 !/BT4 CASE('D50') !/BT4 I = 1 -!/BT4 J = 8 +!/BT4 J = 10 !/IS2 CASE('IC1') !/IS2 I = 1 -!/IS2 J = 9 +!/IS2 J = 11 !/IS2 CASE('IC5') !/IS2 I = 1 -!/IS2 J = 10 +!/IS2 J = 12 ! Group 2 ! !/OASACM CASE('AHS') @@ -805,6 +813,9 @@ CASE('TP') ! Uses FP0 internally, as per FP I = 2 J = 18 + CASE('WNM') + I = 2 + J = 19 ! ! Group 3 ! @@ -969,7 +980,9 @@ ELSE IF ( IAPROC .EQ. NAPOUT ) WRITE(NDSEN,1008) 'USP','USSP' END IF - + CASE('TOC') + I = 6 + J = 13 ! ! Group 7 ! @@ -2293,7 +2306,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 27-Nov-2013 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 17-Mar-1999 : Distributed FORTRAN 77 version. ( version 1.18 ) @@ -2323,6 +2336,7 @@ !/ 01-Mar-2018 : Removed RTD code (now used in post ( version 6.02 ) !/ processing code) !/ 25-Aug-2018 : Add WBT parameter ( version 6.06 ) +!/ 22-Mar-2021 : Add extra coupling fields as output ( version 7.xx ) !/ ! 1. Purpose : ! @@ -2403,10 +2417,11 @@ USE W3ODATMD, ONLY: W3SETO !/ USE W3WDATMD, ONLY: TIME, DINIT, WLV, ICE, ICEF, ICEH, BERG, & - UST, USTDIR, ASF - USE W3ADATMD, ONLY: AINIT, DW, UA, UD, AS, CX, CY, WN + UST, USTDIR, ASF, RHOAIR + USE W3ADATMD, ONLY: AINIT, DW, UA, UD, AS, CX, CY, WN, & + TAUA, TAUADIR USE W3ADATMD, ONLY: HS, WLM, T02, T0M1, T01, FP0, THM, THS, THP0,& - WBT + WBT, WNMEAN USE W3ADATMD, ONLY: FP1, THP1, DTDYN, & FCUT, ABA, ABD, UBA, UBD, SXX, SYY, SXY, & PHS, PTP, PLP, PDIR, PSI, PWS, PWST, PNR, & @@ -2419,7 +2434,7 @@ CFLXYMAX, CFLTHMAX, CFLKMAX, P2SMS, US3D, & TH1M, STH1M, TH2M, STH2M, HSIG, PHICE, TAUICE,& STMAXE, STMAXD, HMAXE, HCMAXE, HMAXD, HCMAXD,& - USSP + USSP, TAUOCX, TAUOCY !/ USE W3ODATMD, ONLY: NOGRP, NGRPP, IDOUT, UNDEF, NDST, NDSE, & FLOGRD, IPASS => IPASS1, WRITE => WRITE1, & @@ -2673,6 +2688,7 @@ IF ( FLOGRD( 2,15) ) HMAXD (ISEA) = UNDEF IF ( FLOGRD( 2,16) ) HCMAXD(ISEA) = UNDEF IF ( FLOGRD( 2,17) ) WBT (ISEA) = UNDEF + IF ( FLOGRD( 2,19) ) WNMEAN(ISEA) = UNDEF ! IF ( FLOGRD( 3, 1) ) EF (ISEA,:) = UNDEF IF ( FLOGRD( 3, 2) ) TH1M (ISEA,:) = UNDEF @@ -2742,6 +2758,10 @@ IF ( FLOGRD( 6, 10) ) TAUICE(ISEA,:) = UNDEF IF ( FLOGRD( 6, 11) ) PHICE(ISEA) = UNDEF IF ( FLOGRD( 6, 12) ) USSP(ISEA,:) = UNDEF + IF ( FLOGRD( 6, 13) ) THEN + TAUOCX(ISEA) = UNDEF + TAUOCY(ISEA) = UNDEF + END IF ! IF ( FLOGRD( 7, 1) ) THEN ABA (ISEA) = UNDEF @@ -2852,13 +2872,32 @@ WRITE ( NDSOG ) ICE(1:NSEA) ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 7 ) THEN WRITE ( NDSOG ) BERG(1:NSEA) -!/BT4 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 8 ) THEN + ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 8 ) THEN + DO ISEA=1, NSEA +!/ARC !!Li Rotate map-east momentum in Arctic part back to local east. JGLi02Feb2016 +!/ARC IF(ISEA .GT. NGLO) THEN +!/ARC UDARC = TAUADIR(ISEA) - ANGARC(ISEA - NGLO)*DERA +!/ARC TAUADIR(ISEA) = MOD(TPI + UDARC, TPI) +!/ARC ENDIF + IF (TAUA(ISEA) .NE.UNDEF) THEN + AUX1(ISEA) = TAUA(ISEA)*COS(TAUADIR(ISEA)) + AUX2(ISEA) = TAUA(ISEA)*SIN(TAUADIR(ISEA)) + ELSE + AUX1(ISEA) = UNDEF + AUX2(ISEA) = UNDEF + END IF + END DO + WRITE ( NDSOG ) AUX1 + WRITE ( NDSOG ) AUX2 + ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 9 ) THEN + WRITE ( NDSOG ) RHOAIR(1:NSEA) +!/BT4 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN !/BT4 WRITE ( NDSOG ) SED_D50(1:NSEA) -!/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 9 ) THEN +!/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 11 ) THEN !/IS2 WRITE (NDSOG ) ICEH(1:NSEA) -!/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN +!/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 12 ) THEN !/IS2 WRITE (NDSOG ) ICEF(1:NSEA) -!/SETUP ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 11 ) THEN +!/SETUP ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 13 ) THEN !/SETUP WRITE ( NDSOG ) ZETA_SETUP(1:NSEA) ! @@ -2900,6 +2939,8 @@ WRITE ( NDSOG ) HCMAXD(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 17 ) THEN WRITE ( NDSOG ) WBT(1:NSEA) + ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 19 ) THEN + WRITE ( NDSOG ) WNMEAN(1:NSEA) ! ! Section 3) ! @@ -3029,6 +3070,9 @@ ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 12 ) THEN WRITE ( NDSOG ) USSP(1:NSEA, 1:USSPF(2)) WRITE ( NDSOG ) USSP(1:NSEA,NK+1:NK+USSPF(2)) + ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 13 ) THEN + WRITE ( NDSOG ) TAUOCX(1:NSEA) + WRITE ( NDSOG ) TAUOCY(1:NSEA) ! ! Section 7) ! @@ -3127,13 +3171,18 @@ READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) ICE(1:NSEA) ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 7 ) THEN READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) BERG(1:NSEA) -!/BT4 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 8 ) THEN + ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 8 ) THEN + READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) TAUA(1:NSEA) + READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) TAUADIR(1:NSEA) + ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 9 ) THEN + READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) RHOAIR(1:NSEA) +!/BT4 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN !/BT4 READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) SED_D50(1:NSEA) -!/IS2 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 9) THEN +!/IS2 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 11 ) THEN !/IS2 READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) ICEH(1:NSEA) -!/IS2 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 10) THEN +!/IS2 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 12 ) THEN !/IS2 READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) ICEF(1:NSEA) -!/SETUP ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 11 ) THEN +!/SETUP ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 13 ) THEN !/SETUP READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) ZETA_SETUP(1:NSEA) ! ! Section 2) @@ -3182,6 +3231,9 @@ HCMAXD(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 17 ) THEN READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) WBT(1:NSEA) + ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 19 ) THEN + READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) & + WNMEAN(1:NSEA) ! ! Section 3) ! @@ -3351,6 +3403,11 @@ USSP(1:NSEA,1:USSPF(2)) READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) & USSP(1:NSEA,NK+1:NK+USSPF(2)) + ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 13 ) THEN + READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) & + TAUOCX(1:NSEA) + READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) & + TAUOCY(1:NSEA) ! ! Section 7) diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index 2a4003770..9f8c85924 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 2003 | -!/ | Last update : 09-Aug-2017 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ See subroutine for update log. @@ -58,7 +58,7 @@ !/ !/ Private parameter statements (ID strings) !/ - CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERINI = '2020-09-25' + CHARACTER(LEN=10), PARAMETER, PRIVATE :: VERINI = '2021-03-22' CHARACTER(LEN=26), PARAMETER, PRIVATE :: & IDSTR = 'WAVEWATCH III RESTART FILE' !/ @@ -70,7 +70,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 25-Sep-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 12-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -104,7 +104,7 @@ !/ restart files !/ (Roberto Padilla-Hernandez & J.H. Alves) !/ 25-Sep-2020 : Extra fields for coupled restart ( version 7.10 ) - +!/ 22-Mar-2021 : Add new coupling fields in restart ( version 7.xx ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -247,10 +247,11 @@ USE W3GDATMD, ONLY: W3SETG, W3SETREF, RSTYPE USE W3ODATMD, ONLY: W3SETO USE W3ADATMD, ONLY: W3SETA, W3XETA, NSEALM - USE W3ADATMD, ONLY: CX, CY, HS, WLM, T0M1, FP0, THM, CHARN, & + USE W3ADATMD, ONLY: CX, CY, HS, WLM, T0M1, T01, FP0, THM, CHARN,& TAUWIX, TAUWIY, TWS, TAUOX, TAUOY, BHD, & PHIOC, TUSX, TUSY, USSX, USSY, TAUICE, & - UBA, UBD, PHIBBL, TAUBBL + UBA, UBD, PHIBBL, TAUBBL, TAUOCX, TAUOCY, & + WNMEAN !/ USE W3GDATMD, ONLY: NX, NY, NSEA, NSEAL, NSPEC, MAPSTA, MAPST2, & GNAME, FILEXT, GTYPE, UNGTYPE @@ -746,7 +747,7 @@ WRITEBUFF(:) = 0. WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) WRITEBUFF WRITE (NDSR,POS=RPOS,ERR=803,IOSTAT=IERR) & - TLEV, TICE + TLEV, TICE, TRHO DO IPART=1,NPART NREC = NREC + 1 RPOS = 1_8 + LRECL*(NREC-1_8) @@ -851,10 +852,14 @@ WRITE(NDSR,ERR=803,IOSTAT=IERR) WLM(1:NSEA) IF ( FLOGRR(2,4) ) & WRITE(NDSR,ERR=803,IOSTAT=IERR) T0M1(1:NSEA) + IF ( FLOGRR(2,5) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) T01(1:NSEA) IF ( FLOGRR(2,6) ) & WRITE(NDSR,ERR=803,IOSTAT=IERR) FP0(1:NSEA) IF ( FLOGRR(2,7) ) & WRITE(NDSR,ERR=803,IOSTAT=IERR) THM(1:NSEA) + IF ( FLOGRR(2,19) ) & + WRITE(NDSR,ERR=803,IOSTAT=IERR) WNMEAN(1:NSEA) IF ( FLOGRR(5,2) ) & WRITE(NDSR,ERR=803,IOSTAT=IERR) CHARN(1:NSEA) IF ( FLOGRR(5,5) ) THEN @@ -883,6 +888,10 @@ WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUICE(1:NSEA,1) WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUICE(1:NSEA,2) ENDIF + IF ( FLOGRR(6,13) ) THEN + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUOCX(1:NSEA) + WRITE(NDSR,ERR=803,IOSTAT=IERR) TAUOCY(1:NSEA) + ENDIF IF ( FLOGRR(7,2) ) THEN WRITE(NDSR,ERR=803,IOSTAT=IERR) UBA(1:NSEA) WRITE(NDSR,ERR=803,IOSTAT=IERR) UBD(1:NSEA) @@ -909,7 +918,7 @@ IF (TYPE.EQ.'FULL') THEN RPOS = 1_8 + LRECL*(NREC-1_8) READ (NDSR,POS=RPOS,ERR=802,IOSTAT=IERR) & - TLEV, TICE + TLEV, TICE, TRHO !/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading WLV' DO IPART=1,NPART NREC = NREC + 1 @@ -1002,23 +1011,12 @@ IF (OARST) THEN !/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading CUR' IF ( FLOGRR(1,2) ) THEN - READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) - READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) - DO I=1, NSEALM - J = IAPROC + (I-1)*NAPROC - IF (J .LE. NSEA) THEN - CX(I) = TMP(J) - CY(I) = TMP2(J) - ENDIF - ENDDO + READ (NDSR,ERR=802,IOSTAT=IERR) CX(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) CY(1:NSEA) ENDIF !/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading ICEF' IF ( FLOGRR(1,9) ) THEN - READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) - DO I=1, NSEALM - J = IAPROC + (I-1)*NAPROC - IF (J .LE. NSEA) ICEF(I) = TMP(J) - ENDDO + READ (NDSR,ERR=802,IOSTAT=IERR) ICEF(1:NSEA) ENDIF !/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading HS' IF ( FLOGRR(2,1) ) THEN @@ -1041,9 +1039,15 @@ READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) DO I=1, NSEALM J = IAPROC + (I-1)*NAPROC - IF (J .LE. NSEA) THEN - T0M1(I) = TMP(J) - ENDIF + IF (J .LE. NSEA) T0M1(I) = TMP(J) + ENDDO + ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading T01' + IF ( FLOGRR(2,5) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) T01(I) = TMP(J) ENDDO ENDIF !/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading FP0' @@ -1062,6 +1066,14 @@ IF (J .LE. NSEA) THM(I) = TMP(J) ENDDO ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading WNMEAN' + IF ( FLOGRR(2,19) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) WNMEAN(I) = TMP(J) + ENDDO + ENDIF !/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading CHARN' IF ( FLOGRR(5,2) ) THEN READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) @@ -1154,6 +1166,18 @@ ENDIF ENDDO ENDIF +!/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading TAUOC' + IF ( FLOGRR(6,13) ) THEN + READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) + READ (NDSR,ERR=802,IOSTAT=IERR) TMP2(1:NSEA) + DO I=1, NSEALM + J = IAPROC + (I-1)*NAPROC + IF (J .LE. NSEA) THEN + TAUOCX(I) = TMP(J) + TAUOCY(I) = TMP2(J) + ENDIF + ENDDO + ENDIF !/DEBUGINIT WRITE(740+IAPROC,*) 'Before reading UB' IF ( FLOGRR(7,2) ) THEN READ (NDSR,ERR=802,IOSTAT=IERR) TMP(1:NSEA) @@ -1193,6 +1217,7 @@ TLEV(2) = 0 TICE(1) = -1 TICE(2) = 0 + TRHO(1) = -1 TIC1(1) = -1 TIC1(2) = 0 TIC5(1) = -1 @@ -1212,8 +1237,10 @@ HS = 0. WLM = 0. T0M1 = 0. + T01 = 0. FP0 = 1. THM = 0. + WNMEAN = 0. CHARN = 0.0185 TAUWIX = 0. TAUWIY = 0. @@ -1226,6 +1253,8 @@ TUSY = 0. USSX = 0. USSY = 0. + TAUOCX = 0. + TAUOCY = 0. TAUICE = 0. UBA = 0. UBD = 0. diff --git a/model/ftn/w3nmlmultimd.ftn b/model/ftn/w3nmlmultimd.ftn index 82f5a04a8..6d80dafc2 100644 --- a/model/ftn/w3nmlmultimd.ftn +++ b/model/ftn/w3nmlmultimd.ftn @@ -7,7 +7,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 25-Sep-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ For updates see subroutines. @@ -44,6 +44,8 @@ CHARACTER(13) :: WATER_LEVELS CHARACTER(13) :: CURRENTS CHARACTER(13) :: WINDS + CHARACTER(13) :: ATM_MOMENTUM + CHARACTER(13) :: AIR_DENSITY CHARACTER(13) :: ICE_CONC CHARACTER(13) :: ICE_PARAM1 CHARACTER(13) :: ICE_PARAM2 @@ -82,6 +84,8 @@ LOGICAL :: WATER_LEVELS LOGICAL :: CURRENTS LOGICAL :: WINDS + LOGICAL :: ATM_MOMENTUM + LOGICAL :: AIR_DENSITY LOGICAL :: ICE_CONC LOGICAL :: ICE_PARAM1 LOGICAL :: ICE_PARAM2 @@ -618,11 +622,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 09-Aug-2016 : Adding comments ( version 5.12 ) !/ 15-May-2018 : Update namelist ( version 6.05 ) +!/ 22-Mar-2021 : Update namelist, new input fields ( version 7.xx ) !/ ! 1. Purpose : ! @@ -709,6 +714,8 @@ INPUT(I)%FORCING%WATER_LEVELS = .FALSE. INPUT(I)%FORCING%CURRENTS = .FALSE. INPUT(I)%FORCING%WINDS = .FALSE. + INPUT(I)%FORCING%ATM_MOMENTUM = .FALSE. + INPUT(I)%FORCING%AIR_DENSITY = .FALSE. INPUT(I)%FORCING%ICE_CONC = .FALSE. INPUT(I)%FORCING%ICE_PARAM1 = .FALSE. INPUT(I)%FORCING%ICE_PARAM2 = .FALSE. @@ -763,11 +770,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 09-Aug-2016 : Adding comments ( version 5.12 ) !/ 15-May-2018 : Update namelist ( version 6.05 ) +!/ 22-Mar-2021 : Update namelist, new input fields ( version 7.xx ) !/ ! 1. Purpose : ! @@ -854,6 +862,8 @@ MODEL(I)%FORCING%WATER_LEVELS = 'no' MODEL(I)%FORCING%CURRENTS = 'no' MODEL(I)%FORCING%WINDS = 'no' + MODEL(I)%FORCING%ATM_MOMENTUM = 'no' + MODEL(I)%FORCING%AIR_DENSITY = 'no' MODEL(I)%FORCING%ICE_CONC = 'no' MODEL(I)%FORCING%ICE_PARAM1 = 'no' MODEL(I)%FORCING%ICE_PARAM2 = 'no' @@ -1488,11 +1498,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 09-Aug-2016 : Adding comments ( version 5.12 ) !/ 15-May-2018 : Update namelist ( version 6.05 ) +!/ 22-Mar-2021 : Update namelist, new input fields ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1561,6 +1572,8 @@ WRITE (NDSN,13) TRIM(MSG),'FORCING % WATER_LEVELS = ', NML_INPUT_GRID(I)%FORCING%WATER_LEVELS WRITE (NDSN,13) TRIM(MSG),'FORCING % CURRENTS = ', NML_INPUT_GRID(I)%FORCING%CURRENTS WRITE (NDSN,13) TRIM(MSG),'FORCING % WINDS = ', NML_INPUT_GRID(I)%FORCING%WINDS + WRITE (NDSN,13) TRIM(MSG),'FORCING % ATM_MOMENTUM = ', NML_INPUT_GRID(I)%FORCING%ATM_MOMENTUM + WRITE (NDSN,13) TRIM(MSG),'FORCING % AIR_DENSITY = ', NML_INPUT_GRID(I)%FORCING%AIR_DENSITY WRITE (NDSN,13) TRIM(MSG),'FORCING % ICE_CONC = ', NML_INPUT_GRID(I)%FORCING%ICE_CONC WRITE (NDSN,13) TRIM(MSG),'FORCING % ICE_PARAM1 = ', NML_INPUT_GRID(I)%FORCING%ICE_PARAM1 WRITE (NDSN,13) TRIM(MSG),'FORCING % ICE_PARAM2 = ', NML_INPUT_GRID(I)%FORCING%ICE_PARAM2 @@ -1596,11 +1609,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 09-Aug-2016 : Adding comments ( version 5.12 ) !/ 15-May-2018 : Update namelist ( version 6.05 ) +!/ 22-Mar-2021 : Update namelist, new input fields ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1669,6 +1683,8 @@ WRITE (NDSN,10) TRIM(MSG),'FORCING % WATER_LEVELS = ', TRIM(NML_MODEL_GRID(I)%FORCING%WATER_LEVELS) WRITE (NDSN,10) TRIM(MSG),'FORCING % CURRENTS = ', TRIM(NML_MODEL_GRID(I)%FORCING%CURRENTS) WRITE (NDSN,10) TRIM(MSG),'FORCING % WINDS = ', TRIM(NML_MODEL_GRID(I)%FORCING%WINDS) + WRITE (NDSN,10) TRIM(MSG),'FORCING % ATM_MOMENTUM = ', TRIM(NML_MODEL_GRID(I)%FORCING%ATM_MOMENTUM) + WRITE (NDSN,10) TRIM(MSG),'FORCING % AIR_DENSITY = ', TRIM(NML_MODEL_GRID(I)%FORCING%AIR_DENSITY) WRITE (NDSN,10) TRIM(MSG),'FORCING % ICE_CONC = ', TRIM(NML_MODEL_GRID(I)%FORCING%ICE_CONC) WRITE (NDSN,10) TRIM(MSG),'FORCING % ICE_PARAM1 = ', TRIM(NML_MODEL_GRID(I)%FORCING%ICE_PARAM1) WRITE (NDSN,10) TRIM(MSG),'FORCING % ICE_PARAM2 = ', TRIM(NML_MODEL_GRID(I)%FORCING%ICE_PARAM2) diff --git a/model/ftn/w3nmlprncmd.ftn b/model/ftn/w3nmlprncmd.ftn index 9a6ce89a0..18952d8ff 100644 --- a/model/ftn/w3nmlprncmd.ftn +++ b/model/ftn/w3nmlprncmd.ftn @@ -7,7 +7,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 04-Jan-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ For updates see subroutines. @@ -37,6 +37,8 @@ LOGICAL :: CURRENTS LOGICAL :: WINDS LOGICAL :: WINDS_AST + LOGICAL :: ATM_MOMENTUM + LOGICAL :: AIR_DENSITY LOGICAL :: ICE_CONC LOGICAL :: ICE_BERG LOGICAL :: DATA_ASSIM @@ -198,7 +200,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 04-Jan-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ ! 1. Purpose : @@ -280,6 +282,8 @@ FORCING%FIELD%CURRENTS = .FALSE. FORCING%FIELD%WINDS = .FALSE. FORCING%FIELD%WINDS_AST = .FALSE. + FORCING%FIELD%ATM_MOMENTUM = .FALSE. + FORCING%FIELD%AIR_DENSITY = .FALSE. FORCING%FIELD%ICE_CONC = .FALSE. FORCING%FIELD%ICE_BERG = .FALSE. FORCING%FIELD%DATA_ASSIM = .FALSE. @@ -435,7 +439,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 04-Jan-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ @@ -509,6 +513,8 @@ WRITE (NDSN,13) TRIM(MSG),'FIELD % CURRENTS = ', NML_FORCING%FIELD%CURRENTS WRITE (NDSN,13) TRIM(MSG),'FIELD % WINDS = ', NML_FORCING%FIELD%WINDS WRITE (NDSN,13) TRIM(MSG),'FIELD % WINDS_AST = ', NML_FORCING%FIELD%WINDS_AST + WRITE (NDSN,13) TRIM(MSG),'FIELD % ATM_MOMENTUM = ', NML_FORCING%FIELD%ATM_MOMENTUM + WRITE (NDSN,13) TRIM(MSG),'FIELD % AIR_DENSITY = ', NML_FORCING%FIELD%AIR_DENSITY WRITE (NDSN,13) TRIM(MSG),'FIELD % ICE_CONC = ', NML_FORCING%FIELD%ICE_CONC WRITE (NDSN,13) TRIM(MSG),'FIELD % ICE_BERG = ', NML_FORCING%FIELD%ICE_BERG WRITE (NDSN,13) TRIM(MSG),'FIELD % DATA_ASSIM = ', NML_FORCING%FIELD%DATA_ASSIM diff --git a/model/ftn/w3nmlshelmd.ftn b/model/ftn/w3nmlshelmd.ftn index 471e8cdcd..44d7cf6bb 100644 --- a/model/ftn/w3nmlshelmd.ftn +++ b/model/ftn/w3nmlshelmd.ftn @@ -7,7 +7,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 25-Sep-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ For updates see subroutines. @@ -38,6 +38,8 @@ CHARACTER(13) :: WATER_LEVELS CHARACTER(13) :: CURRENTS CHARACTER(13) :: WINDS + CHARACTER(13) :: ATM_MOMENTUM + CHARACTER(13) :: AIR_DENSITY CHARACTER(13) :: ICE_CONC CHARACTER(13) :: ICE_PARAM1 CHARACTER(13) :: ICE_PARAM2 @@ -138,6 +140,8 @@ INTEGER :: N_CUR INTEGER :: N_WND INTEGER :: N_ICE + INTEGER :: N_TAU + INTEGER :: N_RHO INTEGER :: N_MOV INTEGER :: N_TOT END TYPE NML_HOMOG_COUNT_T @@ -435,7 +439,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 18-Apr-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ @@ -509,6 +513,8 @@ INPUT%FORCING%WATER_LEVELS = 'F' INPUT%FORCING%CURRENTS = 'F' INPUT%FORCING%WINDS = 'F' + INPUT%FORCING%ATM_MOMENTUM = 'F' + INPUT%FORCING%AIR_DENSITY = 'F' INPUT%FORCING%ICE_CONC = 'F' INPUT%FORCING%ICE_PARAM1 = 'F' INPUT%FORCING%ICE_PARAM2 = 'F' @@ -799,7 +805,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 18-Apr-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ @@ -885,6 +891,8 @@ HOMOG_COUNT%N_CUR = 0 HOMOG_COUNT%N_WND = 0 HOMOG_COUNT%N_ICE = 0 + HOMOG_COUNT%N_TAU = 0 + HOMOG_COUNT%N_RHO = 0 HOMOG_COUNT%N_MOV = 0 HOMOG_COUNT%N_TOT = 0 @@ -902,7 +910,7 @@ ! allocate the total count of homogeneous input HOMOG_COUNT%N_TOT = HOMOG_COUNT%N_IC1 + HOMOG_COUNT%N_IC2 + HOMOG_COUNT%N_IC3 + HOMOG_COUNT%N_IC4 + HOMOG_COUNT%N_IC5 + & HOMOG_COUNT%N_MDN + HOMOG_COUNT%N_MTH + HOMOG_COUNT%N_MVS + HOMOG_COUNT%N_LEV + HOMOG_COUNT%N_CUR + & - HOMOG_COUNT%N_WND + HOMOG_COUNT%N_ICE + HOMOG_COUNT%N_MOV + HOMOG_COUNT%N_WND + HOMOG_COUNT%N_ICE + HOMOG_COUNT%N_TAU + HOMOG_COUNT%N_RHO + HOMOG_COUNT%N_MOV ALLOCATE(HOMOG_INPUT(HOMOG_COUNT%N_TOT)) ALLOCATE(NML_HOMOG_INPUT(HOMOG_COUNT%N_TOT)) @@ -1039,7 +1047,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 18-Apr-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ @@ -1105,6 +1113,8 @@ WRITE (NDSN,10) TRIM(MSG),'FORCING % WATER_LEVELS = ', NML_INPUT%FORCING%WATER_LEVELS WRITE (NDSN,10) TRIM(MSG),'FORCING % CURRENTS = ', NML_INPUT%FORCING%CURRENTS WRITE (NDSN,10) TRIM(MSG),'FORCING % WINDS = ', NML_INPUT%FORCING%WINDS + WRITE (NDSN,10) TRIM(MSG),'FORCING % ATM_MOMENTUM = ', NML_INPUT%FORCING%ATM_MOMENTUM + WRITE (NDSN,10) TRIM(MSG),'FORCING % AIR_DENSITY = ', NML_INPUT%FORCING%AIR_DENSITY WRITE (NDSN,10) TRIM(MSG),'FORCING % ICE_CONC = ', NML_INPUT%FORCING%ICE_CONC WRITE (NDSN,10) TRIM(MSG),'FORCING % ICE_PARAM1 = ', NML_INPUT%FORCING%ICE_PARAM1 WRITE (NDSN,10) TRIM(MSG),'FORCING % ICE_PARAM2 = ', NML_INPUT%FORCING%ICE_PARAM2 @@ -1349,7 +1359,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 18-Apr-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ @@ -1427,6 +1437,8 @@ WRITE (NDSN,11) TRIM(MSG),'N_CUR = ', NML_HOMOG_COUNT%N_CUR WRITE (NDSN,11) TRIM(MSG),'N_WND = ', NML_HOMOG_COUNT%N_WND WRITE (NDSN,11) TRIM(MSG),'N_ICE = ', NML_HOMOG_COUNT%N_ICE + WRITE (NDSN,11) TRIM(MSG),'N_TAU = ', NML_HOMOG_COUNT%N_TAU + WRITE (NDSN,11) TRIM(MSG),'N_RHO = ', NML_HOMOG_COUNT%N_RHO WRITE (NDSN,11) TRIM(MSG),'N_MOV = ', NML_HOMOG_COUNT%N_MOV IF (NML_HOMOG_COUNT%N_TOT .NE. 0) THEN diff --git a/model/ftn/w3oacpmd.ftn b/model/ftn/w3oacpmd.ftn index 8f9fd8c2e..426b23fd8 100644 --- a/model/ftn/w3oacpmd.ftn +++ b/model/ftn/w3oacpmd.ftn @@ -6,13 +6,14 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | A. Thevenin | !/ | FORTRAN 90 | -!/ | Last update : 25-Sep-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ July-2013 : Origination. ( version 4.18 ) !/ For upgrades see subroutines. !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 ) !/ 25-Sep-2020 : Coupling at T+0 support ( version 7.10 ) +!/ 22-Mar-2021 : Adds extra coupling fields ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -747,13 +748,14 @@ !/ | V. Garnier | !/ | A.C. Bennis | !/ | FORTRAN 90 | -!/ | Last update : April-2016 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ Jul-2013 : Origination. ( version 4.18 ) !/ Mar-2014 : J. Pianezze (LPO) : Add atmospheric fields ( version 5.07 ) !/ Apr-2015 : M. Accensi (LPO) : Add fields selection ( version 5.07 ) !/ Apr-2016 : Add comments (J. Pianezze) ( version 5.07 ) +!/ 22-Mar-2021 : Adds extra coupling fields ( version 7.xx ) !/ ! 1. Purpose : ! @@ -869,6 +871,20 @@ !/OASACM ID_NB_RCV=ID_NB_RCV+1 !/OASACM RCV(ID_NB_RCV)%CL_FIELD_NAME='WW3__V10' ! +!/OASACM CASE('TAU') +!/OASACM ! UTAUA : u-momentum (m2.s-2) +!/OASACM ID_NB_RCV=ID_NB_RCV+1 +!/OASACM RCV(ID_NB_RCV)%CL_FIELD_NAME='WW3_UTAU' +! +!/OASACM ! V10 : v-momentum speed (m2.s-2) +!/OASACM ID_NB_RCV=ID_NB_RCV+1 +!/OASACM RCV(ID_NB_RCV)%CL_FIELD_NAME='WW3_VTAU' +! +!/OASACM CASE('RHO') +!/OASACM ! rhoa : air density (kg.m-3) +!/OASACM ID_NB_RCV=ID_NB_RCV+1 +!/OASACM RCV(ID_NB_RCV)%CL_FIELD_NAME='WW3_RHOA' +! ! ! ICE MODEL VARIABLES @@ -924,6 +940,11 @@ !/OASOCM ID_NB_SND = ID_NB_SND +1 !/OASOCM SND(ID_NB_SND)%CL_FIELD_NAME='WW3_T0M1' ! +!/OASOCM CASE('T01') +!/OASOCM ! T01 / wave_t01 : mean period (s) +!/OASOCM ID_NB_SND = ID_NB_SND +1 +!/OASOCM SND(ID_NB_SND)%CL_FIELD_NAME='WW3__T01' +! !/OASOCM CASE('DIR') !/OASOCM ! THM / wave_thm : cosinus of mean direction (n/a) !/OASOCM ID_NB_SND = ID_NB_SND +1 @@ -947,6 +968,15 @@ !/OASOCM ID_NB_SND = ID_NB_SND +1 !/OASOCM SND(ID_NB_SND)%CL_FIELD_NAME='WW3_TWOY' ! +!/OASOCM CASE('TOC') +!/OASOCM ! tauocx / wave_tauocx : x-component of the total wave-ocean momentum flux (tauocx in m2.s-2) +!/OASOCM ID_NB_SND = ID_NB_SND +1 +!/OASOCM SND(ID_NB_SND)%CL_FIELD_NAME='WW3_TOCX' +! +!/OASOCM ! tauocy / wave_tauocy : y-component of the total wave-ocean momentum flux (tauocx in m2.s-2) +!/OASOCM ID_NB_SND = ID_NB_SND +1 +!/OASOCM SND(ID_NB_SND)%CL_FIELD_NAME='WW3_TOCY' +! !/OASOCM CASE('FOC') !/OASOCM ! phioc / wave_phioc : Wave-to-ocean TKE flux (phioc in W.m-2) !/OASOCM ID_NB_SND = ID_NB_SND +1 @@ -989,6 +1019,11 @@ !/OASOCM ID_NB_SND = ID_NB_SND +1 !/OASOCM SND(ID_NB_SND)%CL_FIELD_NAME='WW3___LM' ! +!/OASOCM CASE('WNM') +!/OASOCM ! wnmean / wave_wnmean : mean wave number (m-1) +!/OASOCM ID_NB_SND = ID_NB_SND +1 +!/OASOCM SND(ID_NB_SND)%CL_FIELD_NAME='WW3__WNM' +! !/OASOCM CASE('TUS') !/OASOCM ! Volume transport associated to Stokes drift, u component (m2.s-1) !/OASOCM ID_NB_SND = ID_NB_SND +1 diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index fc5c3ee01..5821ef22b 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 25-Sep-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 13-Dec-2004 : Origination. ( version 3.06 ) @@ -46,6 +46,7 @@ !/ 25-Sep-2020 : Flags for coupling restart ( version 7.10 ) !/ 15-Jan-2020 : Added TP based on existing FP ( version 7.12 ) !/ internal fields. (C. Bunney, UKMO) +!/ 22-Mar-2021 : Add extra coupling variables ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -512,7 +513,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 10-Dec-2014 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 13-Dec-2004 : Origination. ( version 3.06 ) @@ -525,6 +526,7 @@ !/ 18-Dec-2012 : Moving IDOUT initialization here. ( version 4.11 ) !/ 19-Dec-2012 : Move NOSWLL to data structure. ( version 4.11 ) !/ 10-Dec-2014 : Add checks for allocate status ( version 5.04 ) +!/ 22-Mar-2021 : Add extra coupling variables ( version 7.xx ) !/ ! 1. Purpose : ! @@ -671,10 +673,10 @@ ! ! 1) Forcing fields ! - NOGE(1) = 7 -!/BT4 NOGE(1) = 8 -!/IS2 NOGE(1) = 10 ! CB -!/SETUP NOGE(1) = 11 ! CB + NOGE(1) = 9 +!/BT4 NOGE(1) = 10 +!/IS2 NOGE(1) = 12 ! CB +!/SETUP NOGE(1) = 13 ! CB ! IDOUT( 1, 1) = 'Water depth ' IDOUT( 1, 2) = 'Current vel. ' @@ -683,14 +685,16 @@ IDOUT( 1, 5) = 'Water level ' IDOUT( 1, 6) = 'Ice concentration ' IDOUT( 1, 7) = 'Iceberg damp coeffic' -!/BT4 IDOUT( 1, 8) = 'Sediment diam D50 ' -!/IS2 IDOUT( 1, 9) = 'ice thickness ' -!/IS2 IDOUT( 1, 10) = 'Avg. ice floe diam. ' -!/SETUP IDOUT( 1, 11) = 'wave induced setup' + IDOUT( 1, 8) = 'Atmospheric momentum' + IDOUT( 1, 9) = 'Air density ' +!/BT4 IDOUT( 1, 10) = 'Sediment diam D50 ' +!/IS2 IDOUT( 1, 11) = 'ice thickness ' +!/IS2 IDOUT( 1, 12) = 'Avg. ice floe diam. ' +!/SETUP IDOUT( 1, 13) = 'wave induced setup' ! ! 2) Standard mean wave parameters ! - NOGE(2) = 18 + NOGE(2) = 19 ! IDOUT( 2, 1) = 'Wave height ' IDOUT( 2, 2) = 'Mean wave length ' @@ -710,6 +714,7 @@ IDOUT( 2, 16) = 'STD ST Hmax^crest ' IDOUT( 2, 17) = 'Dominant wave bT ' IDOUT( 2, 18) = 'Peak prd. (from fp)' + IDOUT( 2, 19) = 'Mean wave number ' ! IDOUT( 2,10) = 'Mean wave dir. a2b2' ! IDOUT( 2,11) = 'Mean dir. spr. a2b2' ! IDOUT( 2,12) = 'Windsea height(Sin)' @@ -768,7 +773,7 @@ ! ! 6) Wave-ocean layer ! - NOGE(6) = 12 + NOGE(6) = 13 ! IDOUT( 6, 1) = 'Radiation stresses ' IDOUT( 6, 2) = 'Wave-ocean mom. flux' @@ -782,6 +787,7 @@ IDOUT( 6,10) = 'Wave-ice mom. flux ' IDOUT( 6,11) = 'Wave-ice energy flux' IDOUT( 6,12) = 'Split Surface Stokes' + IDOUT( 6,13) = 'Tot wav-ocn mom flux' ! ! 7) Wave-bottom layer ! diff --git a/model/ftn/w3ogcmmd.ftn b/model/ftn/w3ogcmmd.ftn index ac62e9393..a53cbf22b 100644 --- a/model/ftn/w3ogcmmd.ftn +++ b/model/ftn/w3ogcmmd.ftn @@ -6,12 +6,13 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | A. Thevenin | !/ | FORTRAN 90 | -!/ | Last update : April-2016 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ Jul-2013 : Origination. ( version 4.18 ) !/ For upgrades see subroutines. !/ Apr-2016 : Add comments (J. Pianezze) ( version 5.07 ) +!/ 22-Mar-2021 : Add extra coupling variables ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -64,11 +65,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | A. Thevenin | !/ | FORTRAN 90 | -!/ | Last update : April-2016 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ Jul-2013 : Origination. ( version 4.18 ) !/ Apr-2016 : Add comments (J. Pianezze) ( version 5.07 ) +!/ 22-Mar-2021 : Add extra coupling variables ( version 7.xx ) !/ ! 1. Purpose : ! @@ -108,9 +110,10 @@ ! USE W3OACPMD, ONLY: ID_OASIS_TIME, IL_NB_SND, SND_FLD, CPL_OASIS_SND USE W3GDATMD, ONLY: NSEAL, MAPSTA, MAPSF - USE W3ADATMD, ONLY: HS, T0M1, THM, BHD, TAUOX, TAUOY, PHIOC, & - UBA, UBD, TAUWIX, TAUWIY, TUSX, TUSY, & - USSX, USSY, WLM, PHIBBL,TAUBBL, CHARN + USE W3ADATMD, ONLY: HS, T0M1, T01, THM, BHD, TAUOX, TAUOY, PHIOC,& + UBA, UBD, TAUWIX, TAUWIY, TUSX, TUSY, USSX, & + USSY, WLM, PHIBBL,TAUBBL, CHARN, TAUOCX, & + TAUOCY, WNMEAN USE W3ODATMD, ONLY: NAPROC, IAPROC, UNDEF USE CONSTANTS, ONLY: PI, DERA ! @@ -157,6 +160,24 @@ CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF ! + ! Mean wave period (tmn in s) (m0,1) + ! --------------------------------------------------------------------- + IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3__T01') THEN + TMP(1:NSEAL) = 0.0 + WHERE(T01(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=T01(1:NSEAL) + RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) + CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) + ENDIF + ! + ! Mean wave number (wnm in m-1) + ! --------------------------------------------------------------------- + IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3__WNM') THEN + TMP(1:NSEAL) = 0.0 + WHERE(WNMEAN(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=WNMEAN(1:NSEAL) + RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) + CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) + ENDIF + ! ! Charnock coefficient (-) ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_OCHA') THEN @@ -218,6 +239,24 @@ CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) ENDIF ! + ! Wave-ocean total momentum flux (tauocx in Pa) + ! --------------------------------------------------------------------- + IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TOCX') THEN + TMP(1:NSEAL) = 0.0 + WHERE(TAUOCX(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=TAUOCX(1:NSEAL) + RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) + CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) + ENDIF + ! + ! Wave-ocean total momentum flux (tauocy in Pa) + ! --------------------------------------------------------------------- + IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3_TOCY') THEN + TMP(1:NSEAL) = 0.0 + WHERE(TAUOCY(1:NSEAL) /= UNDEF) TMP(1:NSEAL)=TAUOCY(1:NSEAL) + RLA_OASIS_SND(:,1) = DBLE(TMP(1:NSEAL)) + CALL CPL_OASIS_SND(IB_DO, ID_OASIS_TIME, RLA_OASIS_SND, LL_ACTION) + ENDIF + ! ! Wave-to-ocean TKE flux (phioc in W.m-2) ! --------------------------------------------------------------------- IF (SND_FLD(IB_DO)%CL_FIELD_NAME == 'WW3__FOC') THEN diff --git a/model/ftn/w3ounfmetamd.ftn b/model/ftn/w3ounfmetamd.ftn index ad8f7f7d1..cca538569 100644 --- a/model/ftn/w3ounfmetamd.ftn +++ b/model/ftn/w3ounfmetamd.ftn @@ -6,12 +6,13 @@ !/ | C. Bunney | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 26-Jan-2021 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 02-Nov-2020 : Creation ( version 7.12 ) !/ 26-Jan-2021 : Added TP and alternative dir/mag ( version 7.12 ) !/ metadata for directional fields. +!/ 22-Mar-2021 : Adds extra coupling fields ( version 7.xx ) !/ ! 1. Purpose : ! @@ -181,11 +182,11 @@ !/ | C. Bunney | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 25-Jan-2021 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 09-Nov-2020 : Creation ( version 7.12 ) -!/ 26-Jan-2021 : Added vector flag ( version 7.12 ) +!/ 22-Mar-2021 : Added vector flag ( version 7.12 ) !/ ! ! 1. Purpose : @@ -1530,10 +1531,11 @@ !/ | C. Bunney | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 02-Nov-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 02-Nov-2020 : Creation ( version 7.12 ) +!/ 22-Mar-2021 : Adds extra coupling fields ( version 7.xx ) !/ ! ! 1. Purpose : @@ -1700,7 +1702,39 @@ META(1)%VMIN = 0 META(1)%VMAX = 3.2 ! IFI=1, IFJ=8 -!/BT4 META => GROUP(1)%FIELD(8)%META + META => GROUP(1)%FIELD(8)%META + META(1)%FSC = 0.01 + META(1)%UNITS = 'Pa' + META(1)%ENAME = '.taua' + META(1)%VARNM='utaua' + META(1)%VARNL='surface_downward_eastward_stress' + META(1)%VARNS='surface_downward_eastward_stress' + META(1)%VARNG='surface_downward_eastward_stress' + META(2)%VARNC='taua=sqrt(utaua**2+vtaua**2)' + META(1)%VMIN = -320 + META(1)%VMAX = 320 + META(1)%VARND = DIRCOM + + ! Second component + META(2) = META(1) + META(2)%VARNM='vtaua' + META(2)%VARNL='surface_downward_northward_stress' + META(2)%VARNS='surface_downward_northward_stress' + META(2)%VARNG='surface_downward_northward_stress' + META(2)%VARNC='taua=sqrt(utaua**2+vtaua**2)' +! IFI=1, IFJ=9 + META => GROUP(1)%FIELD(9)%META + META(1)%FSC = 0.0001 + META(1)%UNITS = 'kg m-3' + META(1)%ENAME = '.rhoa' + META(1)%VARNM='rhoa' + META(1)%VARNL='air_density' + META(1)%VARNS='air_density' + META(1)%VARNG='air_density' + META(1)%VMIN = 0 + META(1)%VMAX = 2 +! IFI=1, IFJ=10 +!/BT4 META => GROUP(1)%FIELD(10)%META !/BT4 META(1)%FSC = 0.001 !/BT4 META(1)%UNITS = 'Krumbein phi scale' !/BT4 META(1)%ENAME = '.d50' @@ -1710,8 +1744,8 @@ !/BT4 META(1)%VARNG='sediment_grain_size' !/BT4 META(1)%VMIN = -10.0 !/BT4 META(1)%VMAX = 32.0 -! IFI=1, IFJ=9 -!/IS2 META => GROUP(1)%FIELD(9)%META +! IFI=1, IFJ=11 +!/IS2 META => GROUP(1)%FIELD(11)%META !/IS2 META(1)%FSC = 0.001 !/IS2 META(1)%UNITS = 'm' !/IS2 META(1)%ENAME = '.ic1' @@ -1721,8 +1755,8 @@ !/IS2 META(1)%VARNG='ice_thickness' !/IS2 META(1)%VMIN = 0 !/IS2 META(1)%VMAX = 30 -! IFI=1, IFJ=10 -!/IS2 META => GROUP(1)%FIELD(10)%META +! IFI=1, IFJ=12 +!/IS2 META => GROUP(1)%FIELD(12)%META !/IS2 META(1)%FSC = 0.05 !/IS2 META(1)%UNITS = 'm' !/IS2 META(1)%ENAME = '.ic5' @@ -1938,6 +1972,17 @@ META(1)%VARNG='dominant_wave_period' META(1)%VMIN = 0 META(1)%VMAX = 50 +! IFI=2, IFJ=19 + META => GROUP(2)%FIELD(19)%META + META(1)%FSC = 0.001 + META(1)%UNITS = 'm-1' + META(1)%ENAME = '.wnm' + META(1)%VARNM='wnm' + META(1)%VARNL='mean wave number' + META(1)%VARNS='' + META(1)%VARNG='' + META(1)%VMIN = 0 + META(1)%VMAX = 32 ! !---------- GROUP 3 ---------------- ! @@ -2631,6 +2676,29 @@ META(2)%VARNS='northward_partitioned_surface_stokes_drift' META(2)%VARNG='northward_partitioned_surface_stokes_drift' META(2)%VARNC='usp=sqrt(ussp**2+vssp**2)' +! IFI=6, IFJ=13 + META => GROUP(6)%FIELD(13)%META + META(1)%UNITS = 'Pa' + META(1)%FSC = 0.01 + META(1)%ENAME = '.toc' + META(1)%VMIN = -320 + META(1)%VMAX = 320 + META(1)%VARND = DIRCOM + + ! First component + META(1)%VARNM='utoc' + META(1)%VARNL='eastward total wave to ocean stres' + META(1)%VARNS='' + META(1)%VARNG='' + META(1)%VARNC='toc=sqrt(utoc**2+vtoc**2)' + + ! Second component + META(2) = META(1) + META(2)%VARNM='vtoc' + META(2)%VARNL='northward total wave to ocean stres' + META(2)%VARNS='' + META(2)%VARNG='' + META(2)%VARNC='toc=sqrt(utoc**2+vtoc**2)' ! !---------- GROUP 7 ---------------- ! diff --git a/model/ftn/w3sic2md.ftn b/model/ftn/w3sic2md.ftn index d216ebc55..7de98b751 100644 --- a/model/ftn/w3sic2md.ftn +++ b/model/ftn/w3sic2md.ftn @@ -235,8 +235,7 @@ USE W3DISPMD USE W3GDATMD, ONLY: NK, NTH, NSPEC, SIG, MAPWN, IC2PARS, DDEN, & FLAGLL, YGRD, GTYPE, RLGTYPE - USE W3IDATMD, ONLY: INFLAGS2,ICEP1,ICEP2,ICEP3,ICEP4,ICEP5,WLEV,& - ICEI + USE W3IDATMD, ONLY: INFLAGS2,ICEP1,ICEP2,ICEP3,ICEP4,ICEP5,ICEI !/T USE W3ODATMD, ONLY: NDST !/S USE W3SERVMD, ONLY: STRACE !/T0 USE W3ARRYMD, ONLY: PRT2DS diff --git a/model/ftn/w3srcemd.ftn b/model/ftn/w3srcemd.ftn index 63e6be201..5beb3101e 100644 --- a/model/ftn/w3srcemd.ftn +++ b/model/ftn/w3srcemd.ftn @@ -7,7 +7,7 @@ !/ | H. L. Tolman | !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 07-Jan-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ For updates see subroutine. @@ -59,7 +59,7 @@ TAUWY, TAUOX, TAUOY, TAUWIX, TAUWIY, TAUWNX,& TAUWNY, PHIAW, CHARN, TWS, PHIOC, WHITECAP, & D50, PSIC, BEDFORM , PHIBBL, TAUBBL, TAUICE,& - PHICE, COEF) + PHICE, TAUOCX, TAUOCY, WNMEAN, DAIR, COEF) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -68,7 +68,7 @@ !/ | A. Roland | !/ | M. Dutour Sikiric | !/ | FORTRAN 90 | -!/ | Last update : 07-Jan-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 06-Dec-1996 : Final FORTRAN 77 ( version 1.18 ) @@ -120,6 +120,7 @@ !/ 01-Jan-2018 : within PDLIB (A. Roland, M. Dutour !/ 18-Aug-2018 : S_{ice} IC5 (Q. Liu) ( version 6.06) !/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) +!/ 22-Mar-2021 : Add extra fields used in coupling ( version 7.xx ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -212,6 +213,9 @@ ! TAUBBL R.A. O Momentum flux to BBL ( !/BTx ) ! TAUICE R.A. O Momentum flux to sea ice ( !/ICx ) ! PHICE Real O Energy flux to sea ice ( !/ICx ) +! TAUOCX-YReal O Total ocean momentum components +! WNMEAN Real O Mean wave number +! DAIR Real I Air density ! ---------------------------------------------------------------- ! Note: several pars are set to I/O to avoid compiler warnings. ! @@ -352,7 +356,8 @@ ! 10. Source code : ! !/ ------------------------------------------------------------------- / - USE CONSTANTS + USE CONSTANTS, ONLY: DWAT, srce_imp_post, srce_imp_pre, & + srce_direct, GRAV, TPI, TPIINV USE W3GDATMD, ONLY: NK, NTH, NSPEC, SIG, TH, DMIN, DTMAX, & DTMIN, FACTI1, FACTI2, FACSD, FACHFA, FACP, & XFC, XFLT, XREL, XFT, FXFM, FXPM, DDEN, & @@ -363,7 +368,7 @@ !/REF1 USE W3GDATMD, ONLY: IOBP, IOBPD, IOBDP, GTYPE, UNGTYPE, REFPARS USE W3WDATMD, ONLY: TIME USE W3ODATMD, ONLY: NDSE, NDST, IAPROC - USE W3IDATMD, ONLY: INFLAGS1, INFLAGS2, ICEP2 + USE W3IDATMD, ONLY: INFLAGS2, ICEP2 USE W3DISPMD !/NNT USE W3ODATMD, ONLY: IAPROC, SCREEN, FNMPRE !/FLD1 USE W3FLD1MD, ONLY: W3FLD1 @@ -439,7 +444,7 @@ ICE, ICEH INTEGER, INTENT(IN) :: REFLED(6) REAL, INTENT(IN) :: REFLEC(4), DELX, DELY, DELA, & - TRNX, TRNY, BERG, ICEDMAX + TRNX, TRNY, BERG, ICEDMAX, DAIR REAL, INTENT(INOUT) :: WN1(NK), CG1(NK), & SPEC(NSPEC), ALPHA(NK), USTAR, & USTDIR, FPI, TAUOX, TAUOY, & @@ -447,7 +452,7 @@ CHARN, TWS, BEDFORM(3), PHIBBL, & TAUBBL(2), TAUICE(2), WHITECAP(4), & TAUWIX, TAUWIY, TAUWNX, TAUWNY, & - ICEF + ICEF, TAUOCX, TAUOCY, WNMEAN REAL, INTENT(OUT) :: DTDYN, FCUT REAL, INTENT(IN) :: COEF !/ @@ -462,7 +467,7 @@ HDT, ZWND, FP, DEPTH, TAUSCX, TAUSCY, FHIGI ! Scaling factor for SIN, SDS, SNL REAL :: ICESCALELN, ICESCALEIN, ICESCALENL, ICESCALEDS - REAL :: EMEAN, FMEAN, WNMEAN, AMAX, CD, Z0, SCAT, & + REAL :: EMEAN, FMEAN, AMAX, CD, Z0, SCAT, & SMOOTH_ICEDISP REAL :: WN_R(NK), CG_ICE(NK),ALPHA_LIU(NK), ICECOEF2,& R(NK) @@ -635,6 +640,9 @@ TAUBBL = 0. TAUICE = 0. PHICE = 0. + TAUOCX = 0. + TAUOCY = 0. + WNMEAN = 0. !/DEBUGSRC IF (IX .eq. DEBUG_NODE) THEN !/DEBUGSRC WRITE(740+IAPROC,*) 'W3SRCE start sum(SPEC)=', sum(SPEC) @@ -1333,6 +1341,8 @@ TAUWNX=TAUWNX/DTG TAUWNY=TAUWNY/DTG TAUBBL(:)=TAUBBL(:)/DTG + TAUOCX=DAIR*COEF*COEF*USTAR*USTAR*COS(USTDIR) + DWAT*(TAUOX-TAUWIX) + TAUOCY=DAIR*COEF*COEF*USTAR*USTAR*SIN(USTDIR) + DWAT*(TAUOY-TAUWIY) ! ! Transformation in wave energy flux in W/m^2=kg / s^3 ! @@ -1471,14 +1481,14 @@ !/FLD1 IF (U10ABS.GT.10. .and. HSTOT.gt.0.5) then !/FLD1 CALL W3FLD1 ( SPEC,min(FPI/TPI,2.0),COEF*U10ABS*COS(U10DIR), & !/FLD1 COEF*U10ABS*Sin(U10DIR), ZWND, DEPTH, 0.0, & -!/FLD1 USTAR, USTDIR, Z0,TAUNUX,TAUNUY,CHARN) +!/FLD1 DAIR, USTAR, USTDIR, Z0,TAUNUX,TAUNUY,CHARN) !/FLD1 ELSE !/FLD1 CHARN = AALPHA !/FLD1 ENDIF !/FLD2 IF (U10ABS.GT.10. .and. HSTOT.gt.0.5) then !/FLD2 CALL W3FLD2 ( SPEC,min(FPI/TPI,2.0),COEF*U10ABS*COS(U10DIR), & !/FLD2 COEF*U10ABS*Sin(U10DIR), ZWND, DEPTH, 0.0, & -!/FLD2 USTAR, USTDIR, Z0,TAUNUX,TAUNUY,CHARN) +!/FLD2 DAIR, USTAR, USTDIR, Z0,TAUNUX,TAUNUY,CHARN) !/FLD2 ELSE !/FLD2 CHARN = AALPHA !/FLD2 ENDIF diff --git a/model/ftn/w3updtmd.ftn b/model/ftn/w3updtmd.ftn index 5b5aebda8..bc2f2aaa9 100644 --- a/model/ftn/w3updtmd.ftn +++ b/model/ftn/w3updtmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 13-Jan-2016 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 21-Jan-2000 : Origination. ( version 2.00 ) @@ -56,6 +56,7 @@ !/ 26-Mar-2018 : Sea-point only Wnd/Cur input. JGLi ( version 6.04 ) !/ 07-Oct-2019 : RTD option with standard lat-lon !/ grid when nesting to rotated grid ( version 7.11 ) +!/ 22-Mar-2021 : Add W3UTAU, W3URHO routines ( version 7.xx ) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -74,10 +75,12 @@ ! ---------------------------------------------------------------- ! W3UCUR Subr. Public Update current fields. ! W3UWND Subr. Public Update wind fields. +! W3UTAU Subr. Public Update atmospheric momentum fields. ! W3UINI Subr. Public Update initial conditions. ! W3UBPT Subr. Public Update boundary conditions. ! W3UICE Subr. Public Update ice concentrations. ! W3ULEV Subr. Public Update water levels. +! W3URHO Subr. Public Update air density. ! W3UTRN Subr. Public Update cell boundary transparancies. ! W3DZXY Subr. Public Calculate derivatives of a field. ! ---------------------------------------------------------------- @@ -106,9 +109,9 @@ ! !/CRT1 Linear current interpolation. ! !/CRT2 Quasi-quadratic current interpolation. ! -! !/WNT0 No wind interpolation. -! !/WNT1 Linear wind interpolation. -! !/WNT2 Energy conservation in wind interpolation. +! !/WNT0 No wind/momentum interpolation. +! !/WNT1 Linear wind/momentum interpolation. +! !/WNT2 Energy conservation in wind/momentum interpolation. ! ! !/RWND Use wind speeds relative to currents. ! @@ -656,6 +659,182 @@ !/ End of W3UWND ----------------------------------------------------- / !/ END SUBROUTINE W3UWND +!/ ------------------------------------------------------------------- / + SUBROUTINE W3UTAU ( FLFRST ) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | J. M. Castillo | +!/ | FORTRAN 90 | +!/ | Last update : 22-Mar-2021 | +!/ +-----------------------------------+ +!/ +!/ 22-Mar-2021 : First implementation ( version 7.xx ) +!/ +! 1. Purpose : +! +! Interpolate atmosphere momentum fields to the given time. +! +! 2. Method : +! +! Linear interpolation of momentum module and direction, with a simple +! correction to obtain quasi-conservation of energy. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! FLFRST Log. I Flag for first pass through routine. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! See module documentation. +! +! 5. Called by : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! W3WAVE Subr. W3WAVEMD Actual wave model routine. +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! - Only momentum over sea points is considered. +! - Time ranges checked in W3WAVE. +! +! 8. Structure : +! +! -------------------------------------- +! 1. Prepare auxiliary arrays. +! 2. Calculate interpolation factors +! 3. Get actual momentum +! -------------------------------------- +! +! 9. Switches : +! +! !/OMPG OpenMP compiler directives. +! +! !/WNT0 No momentum interpolation. +! !/WNT1 Linear momentum interpolation. +! !/WNT2 Energy conservation in momentum interpolation. +! +! !/S Enable subroutine tracing. +! !/T Test output. +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / + USE W3GDATMD, ONLY: NSEA, MAPSF +!/ARC USE W3GDATMD, ONLY: NARC, NGLO, ANGARC +!/SMC USE W3GDATMD, ONLY: FSWND + USE W3WDATMD, ONLY: TIME + USE W3ADATMD, ONLY: TAUA, TAUADIR, MA0, MAI, MD0, MDI + USE W3IDATMD, ONLY: TU0, UX0, UY0, TUN, UXN, UYN +!/ + IMPLICIT NONE +!/ +!/ ------------------------------------------------------------------- / +!/ Parameter list +!/ + LOGICAL, INTENT(IN) :: FLFRST +!/ +!/ ------------------------------------------------------------------- / +!/ + INTEGER :: ISEA, IX, IY +!/S INTEGER, SAVE :: IENT = 0 + REAL :: D0, DN, DD, DT0N, DT0T, RD, MI2, & + MXR, MYR +!/WNT2 REAL :: RD2 + REAL :: MDARC +!/ +!/ ------------------------------------------------------------------- / +!/ +!/S CALL STRACE (IENT, 'W3UTAU') +! +! 1. Prepare auxiliary arrays +! + IF ( FLFRST ) THEN + DO ISEA=1, NSEA +!/SMC !!Li For sea-point only SMC grid momentum 1-D momentum is stored on +!/SMC !!Li 2-D UX0(NSEA, 1) variable. +!/SMC IF( FSWND ) THEN +!/SMC IX = ISEA +!/SMC IY = 1 +!/SMC ELSE + IX = MAPSF(ISEA,1) + IY = MAPSF(ISEA,2) +!/SMC ENDIF + + MA0(ISEA) = SQRT ( UX0(IX,IY)**2 + UY0(IX,IY)**2 ) + MAI(ISEA) = SQRT ( UXN(IX,IY)**2 + UYN(IX,IY)**2 ) + IF ( MA0(ISEA) .GT. 1.E-7) THEN + D0 = MOD ( TPI+ATAN2(UY0(IX,IY),UX0(IX,IY)) , TPI ) + ELSE + D0 = 0 + END IF + IF ( MAI(ISEA) .GT. 1.E-7) THEN + DN = MOD ( TPI+ATAN2(UYN(IX,IY),UXN(IX,IY)) , TPI ) + ELSE + DN = D0 + END IF + IF ( MA0(ISEA) .GT. 1.E-7) THEN + MD0(ISEA) = D0 + ELSE + MD0(ISEA) = DN + END IF + DD = DN - MD0(ISEA) + IF (ABS(DD).GT.PI) DD = DD - TPI*SIGN(1.,DD) + MDI(ISEA) = DD + MAI(ISEA) = MAI(ISEA) - MA0(ISEA) + END DO + END IF +! +! 2. Calculate interpolation factor +! + DT0N = DSEC21 ( TU0, TUN ) + DT0T = DSEC21 ( TU0, TIME ) +! +!/WNT0 RD = 0. +!/WNT1 RD = DT0T / MAX ( 1.E-7 , DT0N ) +!/WNT2 RD = DT0T / MAX ( 1.E-7 , DT0N ) +!/WNT2 RD2 = 1. - RD +!/OASACM RD = 1. +! +!/T WRITE (NDST,9000) DT0N, DT0T, RD +! +! 3. Actual momentum for all grid points +! +!/OMPG/!$OMP PARALLEL DO PRIVATE (ISEA,MI2,MXR,MYR,MDARC) +! + DO ISEA=1, NSEA +! + TAUA(ISEA) = MA0(ISEA) + RD * MAI(ISEA) +!/WNT2 MI2 = SQRT ( RD2 * MA0(ISEA)**2 + & +!/WNT2 RD *(MA0(ISEA)+MAI(ISEA))**2 ) +!/WNT2 TAUA(ISEA) = TAUA(ISEA) * MIN(1.25,MI2/MAX(1.E-7,TAUA(ISEA))) + TAUADIR(ISEA) = MD0(ISEA) + RD * MDI(ISEA) +!/ARC !Li Rotate momentum direction by ANGARC for Arctic part cells. +!/ARC IF( ISEA .GT. NGLO ) THEN +!/ARC MDARC = TAUADIR(ISEA) + ANGARC( ISEA - NGLO )*DERA +!/ARC TAUADIR(ISEA) = MOD ( TPI + MDARC, TPI ) +!/ARC ENDIF +! + END DO +! + RETURN +! +! Formats +! +!/T 9000 FORMAT (' TEST W3UTAU : DT0N, DT0T, RD :',2F8.1,F6.3) +!/ +!/ End of W3UTAU ----------------------------------------------------- / +!/ + END SUBROUTINE W3UTAU !/ ------------------------------------------------------------------- / SUBROUTINE W3UINI ( A ) !/ @@ -1972,6 +2151,104 @@ !/ End of W3ULEV ----------------------------------------------------- / !/ END SUBROUTINE W3ULEV +!/ ------------------------------------------------------------------- / + SUBROUTINE W3URHO ( ) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | J. M. Castillo | +!/ | FORTRAN 90 | +!/ | Last update : 22-Mar-2021 | +!/ +-----------------------------------+ +!/ +!/ 22-Mar-2021 : First implementation ( version 7.xx ) +!/ +! 1. Purpose : +! +! Update air density +! +! 2. Method : +! +! Conservative linear interpolation to new grid. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! None +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! See module documentation. +! +! 5. Called by : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! W3WAVE Subr. W3WAVEMD Actual wave model routine. +! ---------------------------------------------------------------- +! +! 6. Error messages : +! +! None. +! +! 7. Remarks : +! +! 8. Structure : +! +! See source code. +! +! 9. Switches : +! +! !/SHRD Switch for shared / distributed memory architecture. +! !/DIST Id. +! +! !/S Enable subroutine tracing. +! !/T Enable test output. +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / + USE W3GDATMD, ONLY: NSEA, MAPSF + USE W3WDATMD, ONLY: TIME, TRHO, RHOAIR + USE W3IDATMD, ONLY: TRN, RAIR +!/ + IMPLICIT NONE +!/ +!/ ------------------------------------------------------------------- / +!/ Parameter list +!/ +!/ ------------------------------------------------------------------- / +!/ + INTEGER :: ISEA, IX, IY +!/S INTEGER, SAVE :: IENT = 0 +!/ +!/ ------------------------------------------------------------------- / +!/ +!/S CALL STRACE (IENT, 'W3URHO') +! +! 1. Update times --------------------------------------------------- * +! + TRHO(1) = TRN(1) + TRHO(2) = TRN(2) +! +! 2. Main loop over sea points -------------------------------------- * +! + DO ISEA=1, NSEA + IX = MAPSF(ISEA,1) + IY = MAPSF(ISEA,2) + RHOAIR(ISEA) = RAIR(IX,IY) + END DO +! + RETURN +! +! Formats +! +!/ +!/ End of W3URHO ----------------------------------------------------- / +!/ + END SUBROUTINE W3URHO !/ ------------------------------------------------------------------- / SUBROUTINE W3UTRN ( TRNX, TRNY ) !/ diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 45e5e320d..f62692976 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 27-Aug-2015 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 04-Feb-2000 : Origination. ( version 2.00 ) @@ -82,6 +82,7 @@ !/ 14-Sep-2018 : Remove PALM implementation ( version 6.06 ) !/ 15-Sep-2020 : Bugfix FIELD allocation. Remove ( version 7.11 ) !/ defunct OMPX switches. +!/ 22-Mar-2021 : Update TAUA, RHOA ( version 7.xx ) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -184,7 +185,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 25-Sep-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 17-Mar-1999 : Distributed FORTRAN 77 version. ( version 1.18 ) @@ -251,6 +252,7 @@ !/ DEBUGIOBP/DEBUGIOBC ( version 6.04 ) !/ 14-Sep-2018 : Remove PALM implementation ( version 6.06 ) !/ 25-Sep-2020 : Oasis coupling at T+0 ( version 7.10 ) +!/ 22-Mar-2021 : Update TAUA, RHOA ( version 7.xx ) !/ ! 1. Purpose : ! @@ -438,7 +440,7 @@ !/MPI INTEGER, ALLOCATABLE :: STATCO(:,:), STATIO(:,:) INTEGER :: IXrel REAL :: DTTST, DTTST1, DTTST2, DTTST3, & - DTL0, DTI0, DTI10, DTI50, & + DTL0, DTI0, DTR0, DTI10, DTI50, & DTGA, DTG, DTGpre, DTRES, & FAC, VGX, VGY, FACK, FACTH, & FACX, XXX, REFLEC(4), & @@ -470,7 +472,7 @@ !/IC3 REAL :: USE_CHENG, USE_CGICE, HICE LOGICAL :: UGDTUPDATE ! true if time step should be updated for UG schemes CHARACTER(LEN=8) :: STTIME - CHARACTER(LEN=17) :: IDACT + CHARACTER(LEN=21) :: IDACT CHARACTER(LEN=13) :: OUTID CHARACTER(LEN=23) :: IDTIME INTEGER eIOBP @@ -690,6 +692,40 @@ !/DEBUGINIT FLUSH(740+IAPROC) !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "W3WAVEMD, step 6") ! +! 1.f Momentum interval +! + IF ( FLTAUA ) THEN + DTTST1 = DSEC21 ( TU0 , TUN ) + DTTST2 = DSEC21 ( TU0 , TIME ) + DTTST3 = DSEC21 ( TEND , TUN ) +!/T WRITE (NDST,9012) DTTST1, DTTST2, DTTST3 + IF ( DTTST1.LT.0. .OR. DTTST2.LT.0. .OR. DTTST3.LT.0. ) THEN + IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1007) + CALL EXTCDE ( 3 ) + END IF + IF ( DTTST2.EQ.0..AND. ITIME.EQ.0 ) THEN + IDACT(9:9) = 'F' + TOFRST = TIME + END IF + END IF +! +! 1.g Air density time +! + IF ( FLRHOA ) THEN + IF ( TRHO(1) .GE. 0. ) THEN + DTR0 = DSEC21 ( TRHO , TRN ) + ELSE + DTR0 = 1. + END IF +!/T WRITE (NDST,9011) DTR0 + IF ( DTR0 .LT. 0. ) THEN + IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1008) + CALL EXTCDE ( 2 ) + END IF + ELSE + DTR0 = 0. + END IF +! ! 1.e Ice thickness interval ! IF ( FLIC1 ) THEN @@ -945,7 +981,7 @@ ! VGX = 0. VGY = 0. - IF(INFLAGS1(8)) THEN + IF(INFLAGS1(10)) THEN DTTST1 = DSEC21 ( TIME, TGN ) DTTST2 = DSEC21 ( TG0, TGN ) FAC = DTTST1 / MAX ( 1. , DTTST2 ) @@ -962,7 +998,7 @@ !/DEBUGSRC WRITE(740+IAPROC,*) 'max(UST)=', maxval(UST) !/DEBUGSRC FLUSH(740+IAPROC) ! -! 3.1 Interpolate winds and currents. +! 3.1 Interpolate winds, currents, and momentum. ! (Initialize wave fields with winds) ! !/DEBUGRUN WRITE(740+IAPROC,*) 'FLCUR=', FLCUR @@ -1058,6 +1094,13 @@ IF ( FLIWND .AND. LOCAL ) CALL W3UINI ( VA ) !/DEBUGRUN WRITE(740+IAPROC,*) 'W3WAVE, step 6.5.1 DTG=', DTG !/DEBUGRUN FLUSH(740+IAPROC) +! + IF ( FLTAUA ) THEN + CALL W3UTAU ( FLFRST ) + ELSE IF ( FLFRST ) THEN + TAUA = 0.01 + TAUADIR = 0. + END IF ! ! 3.2 Update boundary conditions if boundary flag is true (FLBPI) ! @@ -1115,7 +1158,28 @@ !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE TIME LOOP 8' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) - +! +! 3.3.0 Update air density +! + IF ( FLRHOA .AND. DTR0.NE.0. ) THEN +! + IF ( TRHO(1).GE.0 ) THEN + IF ( DTR0 .LT. 0. ) THEN + IDACT(11:11) = 'B' + ELSE + DTTST = DSEC21 ( TIME, TRN ) + IF ( DTTST .LE. 0.5*DTR0 ) IDACT(11:11) = 'U' + END IF + ELSE + IDACT(11:11) = 'I' + END IF + +! + IF ( IDACT(11:11).NE.' ' ) THEN + CALL W3URHO ( ) + END IF +! + END IF ! ! 3.3.1 Update ice coverage (if new ice map). ! Need to be run on output nodes too, to update MAPSTx @@ -1127,16 +1191,16 @@ ! IF ( TICE(1).GE.0 ) THEN IF ( DTI0 .LT. 0. ) THEN - IDACT(9:9) = 'B' + IDACT(13:13) = 'B' ELSE DTTST = DSEC21 ( TIME, TIN ) - IF ( DTTST .LE. 0.5*DTI0 ) IDACT(9:9) = 'U' + IF ( DTTST .LE. 0.5*DTI0 ) IDACT(13:13) = 'U' END IF ELSE - IDACT(9:9) = 'I' + IDACT(13:13) = 'I' END IF ! - IF ( IDACT(9:9).NE.' ' ) THEN + IF ( IDACT(13:13).NE.' ' ) THEN CALL W3UICE ( VA, VA ) DTI0 = 0. FLACT = .TRUE. @@ -1159,17 +1223,17 @@ ! IF ( TIC1(1).GE.0 ) THEN IF ( DTI10 .LT. 0. ) THEN - IDACT(11:11) = 'B' + IDACT(15:15) = 'B' ELSE DTTST = DSEC21 ( TIME, TI1 ) - IF ( DTTST .LE. 0.5*DTI10 ) IDACT(11:11) = 'U' + IF ( DTTST .LE. 0.5*DTI10 ) IDACT(15:15) = 'U' END IF ELSE - IDACT(11:11) = 'I' + IDACT(15:15) = 'I' END IF ! - IF ( IDACT(11:11).NE.' ' ) THEN + IF ( IDACT(15:15).NE.' ' ) THEN CALL W3UIC1 ( FLFRST ) DTI10 = 0. FLACT = .TRUE. @@ -1189,16 +1253,16 @@ ! !/IS2 IF ( TIC5(1).GE.0 ) THEN !/IS2 IF ( DTI50 .LT. 0. ) THEN -!/IS2 IDACT(14:14) = 'B' +!/IS2 IDACT(18:18) = 'B' !/IS2 ELSE !/IS2 DTTST = DSEC21 ( TIME, TI5 ) -!/IS2 IF ( DTTST .LE. 0.5*DTI50 ) IDACT(14:14) = 'U' +!/IS2 IF ( DTTST .LE. 0.5*DTI50 ) IDACT(18:18) = 'U' !/IS2 END IF !/IS2 ELSE -!/IS2 IDACT(14:14) = 'I' +!/IS2 IDACT(18:18) = 'I' !/IS2 END IF ! -!/IS2 IF ( IDACT(14:14).NE.' ' ) THEN +!/IS2 IF ( IDACT(18:18).NE.' ' ) THEN !/IS2 CALL W3UIC5( FLFRST ) !/IS2 DTI50 = 0. !/IS2 FLACT = .TRUE. @@ -1428,7 +1492,8 @@ !/PDLIB TAUWNY(JSEA), PHIAW(JSEA), CHARN(JSEA), & !/PDLIB TWS(JSEA), PHIOC(JSEA), TMP1, D50, PSIC, TMP2, & !/PDLIB PHIBBL(JSEA), TMP3, TMP4, PHICE(JSEA), & -!/PDLIB ASF(ISEA)) +!/PDLIB TAUOCX(JSEA), TAUOCY(JSEA), WNMEAN(JSEA), & +!/PDLIB RHOAIR(ISEA), ASF(ISEA)) !/PDLIB!/DEBUGSRC WRITE(740+IAPROC,*) 'After sum(VA)=', sum(VA(:,JSEA)) !/PDLIB!/DEBUGSRC WRITE(740+IAPROC,*) ' sum(VSTOT)=', sum(VSTOT(:,JSEA)) !/PDLIB!/DEBUGSRC WRITE(740+IAPROC,*) ' sum(VDTOT)=', sum(VDTOT(:,JSEA)) @@ -2012,7 +2077,8 @@ !/PDLIB TAUWNY(JSEA), PHIAW(JSEA), CHARN(JSEA), & !/PDLIB TWS(JSEA),PHIOC(JSEA), TMP1, D50, PSIC, TMP2,& !/PDLIB PHIBBL(JSEA), TMP3, TMP4, PHICE(JSEA), & -!/PDLIB ASF(ISEA)) +!/PDLIB TAUOCX(JSEA), TAUOCY(JSEA), WNMEAN(JSEA), & +!/PDLIB RHOAIR(ISEA), ASF(ISEA)) !/PDLIB ELSE CALL W3SRCE(srce_direct, IT, JSEA, IX, IY, IMOD, & VAoldDummy, VA(:,JSEA), & @@ -2032,7 +2098,8 @@ TAUWNY(JSEA), PHIAW(JSEA), CHARN(JSEA), & TWS(JSEA), PHIOC(JSEA), TMP1, D50, PSIC,TMP2,& PHIBBL(JSEA), TMP3, TMP4 , PHICE(JSEA), & - ASF(ISEA)) + TAUOCX(JSEA), TAUOCY(JSEA), WNMEAN(JSEA), & + RHOAIR(ISEA), ASF(ISEA)) !/PDLIB END IF WHITECAP(JSEA,1:4) = TMP1 BEDFORMS(JSEA,1:3) = TMP2 @@ -2563,9 +2630,13 @@ DTTST = DSEC21 ( TIME , TWN ) IF ( DTTST .EQ. 0. ) IDACT(3:3) = 'X' END IF + IF ( FLTAUA ) THEN + DTTST = DSEC21 ( TIME , TUN ) + IF ( DTTST .EQ. 0. ) IDACT(9:9) = 'X' + END IF IF ( TDN(1) .GT. 0 ) THEN DTTST = DSEC21 ( TIME , TDN ) - IF ( DTTST .EQ. 0. ) IDACT(17:17) = 'X' + IF ( DTTST .EQ. 0. ) IDACT(21:21) = 'X' END IF ! IF ( IDLAST.NE.TIME(1) ) THEN @@ -2634,6 +2705,10 @@ ' NEW ICE FIELD BEFORE OLD ICE FIELD '/) 1005 FORMAT (/' *** WAVEWATCH III ERROR IN W3WAVE :'/ & ' NEW IC1 FIELD BEFORE OLD IC1 FIELD '/) + 1007 FORMAT (/' *** WAVEWATCH III ERROR IN W3WAVE :'/ & + ' NEW ATM MOMENTUM BEFORE OLD ATM MOMENTUM '/) + 1008 FORMAT (/' *** WAVEWATCH III ERROR IN W3WAVE :'/ & + ' NEW AIR DENSITY BEFORE OLD AIR DENSITY '/) !/IS2 1006 FORMAT (/' *** WAVEWATCH III ERROR IN W3WAVE :'/ & !/IS2 ' NEW IC5 FIELD BEFORE OLD IC5 FIELD '/) 1030 FORMAT (/' *** WAVEWATCH III WARING IN W3WAVE :'/ & diff --git a/model/ftn/w3wdatmd.ftn b/model/ftn/w3wdatmd.ftn index 1d63269a6..8db99901c 100644 --- a/model/ftn/w3wdatmd.ftn +++ b/model/ftn/w3wdatmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 06-Jun-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 22-Oct-2004 : Origination. ( version 3.06 ) @@ -19,6 +19,7 @@ !/ 14-Nov-2013 : Initialize UST and USTDIR. ( version 4.13 ) !/ 10-Dec-2014 : Add checks for allocate status ( version 5.04 ) !/ 06-Jun-2018 : Add PDLIB/SETUP/DEBUGINIT ( version 6.04 ) +!/ 22-Mar-2021 : Support for variable air density ( version 7.xx ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -50,11 +51,13 @@ ! TIMEEND I.A. Public Final time ! TLEV I.A. Public Valid time for water levels. ! TICE I.A. Public Valid time for ice concentration +! TRHO I.A. Public Valid time for air density ! TIC1 I.A. Public Valid time for ice thickness ! TIC5 I.A. Public Valid time for ice floe ! VA R.A. Public Storage array for spectra. ! WLV R.A. Public Water levels. ! ICE R.A. Public Ice coverage. +! RHOAIR R.A. Public Air density ! ICEH R.A. Public Ice thickness. ! ICEF R.A. Public Ice flow maximum diameter. ! ICEDMAX R.A. Public Ice flow maximum diameter for updates. @@ -112,12 +115,13 @@ !/ Data structures !/ TYPE WDATA - INTEGER :: TIME(2), TLEV(2), TICE(2), TIC1(2), TIC5(2) + INTEGER :: TIME(2), TLEV(2), TICE(2), TRHO(2), & + TIC1(2), TIC5(2) !/OASIS INTEGER :: TIME00(2) !/OASIS INTEGER :: TIMEEND(2) - REAL, POINTER :: VA(:,:), WLV(:), ICE(:), UST(:), & - USTDIR(:), ASF(:), FPIS(:), BERG(:), & - ICEH(:), ICEF(:), ICEDMAX(:) + REAL, POINTER :: VA(:,:), WLV(:), ICE(:), RHOAIR(:), & + UST(:), USTDIR(:), ASF(:), FPIS(:), & + BERG(:), ICEH(:), ICEF(:), ICEDMAX(:) !/SETUP REAL, POINTER :: ZETA_SETUP(:), FX_zs(:), FY_zs(:) !/SETUP REAL, POINTER :: SXX_zs(:), SXY_zs(:), SYY_zs(:) !/PDLIB REAL, POINTER :: VSTOT(:,:), VDTOT(:,:) @@ -134,12 +138,13 @@ !/ !/ Data aliasses for structure WDATA(S) !/ - INTEGER, POINTER :: TIME(:), TLEV(:), TICE(:), TIC1(:), TIC5(:) + INTEGER, POINTER :: TIME(:), TLEV(:), TICE(:), TRHO(:), & + TIC1(:), TIC5(:) !/OASIS INTEGER, POINTER :: TIME00(:) !/OASIS INTEGER, POINTER :: TIMEEND(:) - REAL, POINTER :: VA(:,:), WLV(:), ICE(:), UST(:), & - USTDIR(:), ASF(:), FPIS(:), BERG(:), & - ICEH(:), ICEF(:), ICEDMAX(:) + REAL, POINTER :: VA(:,:), WLV(:), ICE(:), RHOAIR(:), & + UST(:), USTDIR(:), ASF(:), FPIS(:), & + BERG(:), ICEH(:), ICEF(:), ICEDMAX(:) !/SETUP REAL, POINTER :: ZETA_SETUP(:), FX_zs(:), FY_zs(:) !/SETUP REAL, POINTER :: SXX_zs(:), SXY_zs(:), SYY_zs(:) !/PDLIB REAL, POINTER :: VSTOT(:,:), VDTOT(:,:) @@ -266,7 +271,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 10-Dec-2014 ! +!/ | Last update : 22-Mar-2021 ! !/ +-----------------------------------+ !/ !/ 22-Oct-2004 : Origination. ( version 3.06 ) @@ -276,6 +281,7 @@ !/ 04-Oct-2006 : Add filter to array pointers. ( version 3.10 ) !/ 14-Nov-2013 : Initialize UST and USTDIR. ( version 4.13 ) !/ 10-Dec-2014 : Add checks for allocate status ( version 5.04 ) +!/ 22-Mar-2021 : Support for variable air density ( version 7.xx ) !/ ! 1. Purpose : ! @@ -335,7 +341,7 @@ USE W3GDATMD, ONLY: NGRIDS, IGRID, W3SETG, NSPEC, NSEA, NSEAL, GRIDS USE W3ODATMD, ONLY: NAPROC, IAPROC USE W3SERVMD, ONLY: EXTCDE - USE CONSTANTS, ONLY : LPDLIB + USE CONSTANTS, ONLY : LPDLIB, DAIR USE W3PARALL, ONLY: SET_UP_NSEAL_NSEALM !/PDLIB use yowNodepool, only: npa, np !/PDLIB use yowRankModule, only : rank @@ -470,6 +476,7 @@ ! ICE, ICEH, ICEF must be defined from 0:NSEA ALLOCATE ( WDATAS(IMOD)%WLV(NSEA), & WDATAS(IMOD)%ICE(0:NSEA), & + WDATAS(IMOD)%RHOAIR(NSEA), & !/SETUP WDATAS(IMOD)%ZETA_SETUP(NSEA), & WDATAS(IMOD)%BERG(NSEA), & WDATAS(IMOD)%ICEH(0:NSEA), & @@ -485,6 +492,7 @@ WDATAS(IMOD)%WLV (:) = 0. WDATAS(IMOD)%ICE (0:NSEA) = 0. + WDATAS(IMOD)%RHOAIR(:) = DAIR !/SETUP WDATAS(IMOD)%ZETA_SETUP(:) = 0. WDATAS(IMOD)%BERG (:) = 0. WDATAS(IMOD)%ICEH (0:NSEA) = GRIDS(IMOD)%IICEHINIT @@ -546,12 +554,13 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 04-Oct-2006 ! +!/ | Last update : 22-Mar-2021 ! !/ +-----------------------------------+ !/ !/ 31-Mar-2004 : Origination. ( version 3.06 ) !/ 05-Jul-2006 : Consolidate stress vector. ( version 3.09 ) !/ 04-Oct-2006 : Add filter to array pointers. ( version 3.10 ) +!/ 22-Mar-2021 : Support for variable air density ( version 7.xx ) !/ ! 1. Purpose : ! @@ -640,6 +649,7 @@ !/OASIS TIMEEND => WDATAS(IMOD)%TIMEEND TLEV => WDATAS(IMOD)%TLEV TICE => WDATAS(IMOD)%TICE + TRHO => WDATAS(IMOD)%TRHO TIC1 => WDATAS(IMOD)%TIC1 TIC5 => WDATAS(IMOD)%TIC5 DINIT => WDATAS(IMOD)%DINIT @@ -656,6 +666,7 @@ END IF WLV => WDATAS(IMOD)%WLV ICE => WDATAS(IMOD)%ICE + RHOAIR => WDATAS(IMOD)%RHOAIR !/SETUP ZETA_SETUP => WDATAS(IMOD)%ZETA_SETUP !/SETUP FX_zs => WDATAS(IMOD)%FX_zs !/SETUP FY_zs => WDATAS(IMOD)%FY_zs diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 39c946bcb..b29dedd84 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 13-Jun-2005 : Origination. ( version 3.07 ) @@ -43,6 +43,7 @@ !/ Add ESMF override for STIME & ETIME ( version 6.02 ) !/ (T. J. Campbell, NRL) !/ 15-May-2018 : Update namelist ( version 6.05 ) +!/ 22-Mar-2021 : Add momentum and air density input ( version 7.xx ) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -96,7 +97,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 20-Jan-2017 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 13-Jun-2005 : Origination. ( version 3.07 ) @@ -138,6 +139,7 @@ !/ 20-Jan-2017 : Modify input forcing flags to support coupler input. !/ Add ESMF override for STIME & ETIME ( version 6.02 ) !/ (T. J. Campbell, NRL) +!/ 22-Mar-2021 : Add momentum and air density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -234,7 +236,7 @@ ! time by using /var/tmp/ for log files. ! See commented line at "OPEN (MDSO,FILE=..." ! -! - IDFLDS dimensioning is hardwired as IDFLDS(-7:7) where lowest possible +! - IDFLDS dimensioning is hardwired as IDFLDS(-7:9) where lowest possible ! value of JFIRST is JFIRST=-7 ! ! 8. Structure : @@ -416,18 +418,18 @@ !/MPRF REAL(KIND=8) :: get_memory REAL, ALLOCATABLE :: X(:), Y(:), AMOVE(:), DMOVE(:), & RP1(:), RPN(:) - LOGICAL :: FLT, TFLAGI, TFLAGS(-7:12), PSHARE + LOGICAL :: FLT, TFLAGI, TFLAGS(-7:14), PSHARE LOGICAL, ALLOCATABLE :: FLGRD(:,:,:), FLRBPI(:), BCDTMP(:), & USEINP(:), LPRT(:), FLGR2(:,:,:), & FLGD(:,:), FLG2(:,:), FLG2D(:,:), & FLG1D(:), CPLINP(:) CHARACTER(LEN=1) :: COMSTR - CHARACTER(LEN=3) :: IDSTR(7), IDTST + CHARACTER(LEN=3) :: IDSTR(9), IDTST CHARACTER(LEN=5) :: STOUT, OUTSTR(6) - CHARACTER(LEN=6) :: ACTION(9), YESXX, XXXNO + CHARACTER(LEN=6) :: ACTION(11), YESXX, XXXNO CHARACTER(LEN=8) :: LFILE, STTIME !/SHRD CHARACTER(LEN=9) :: TFILE - CHARACTER(LEN=13) :: STDATE, MN, TNAMES(7) + CHARACTER(LEN=13) :: STDATE, MN, TNAMES(9) CHARACTER(LEN=40) :: PN CHARACTER(LEN=13), & ALLOCATABLE :: INAMES(:,:), MNAMES(:) @@ -437,7 +439,7 @@ !/DIST CHARACTER(LEN=18) :: TFILE !/MPRF CHARACTER(LEN=18) :: PFILE - CHARACTER(LEN=13) :: IDFLDS(-7:7) + CHARACTER(LEN=13) :: IDFLDS(-7:9) CHARACTER(LEN=23) :: DTME21 CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: TNAME @@ -463,6 +465,7 @@ 'mud viscos. ' , & 'water levels ' , 'currents ' , & 'winds ' , 'ice fields ' , & + 'momentum ' , 'air density ' , & 'mean param. ' , '1D spectra ' , & '2D spectra ' / ! @@ -475,7 +478,8 @@ 'Fields for coupling ' , & 'Restart files second request '/ ! - DATA IDSTR / 'LEV', 'CUR', 'WND', 'ICE', 'DT0', 'DT1', 'DT2' / + DATA IDSTR / 'LEV', 'CUR', 'WND', 'ICE', 'TAU', 'RHO', & + 'DT0', 'DT1', 'DT2' / ! DATA YESXX / 'YES/--' / DATA XXXNO / '---/NO' / @@ -655,7 +659,7 @@ ! ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(40,0:NRGRD), & FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & - MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & + MDSF(-NRINP:NRGRD,JFIRST:9), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & FLG2(NOGRP,NRGRD),OUTFF(7,0:NRGRD)) ! @@ -705,7 +709,7 @@ ! sources, and from communication rather than ! files. ! - ALLOCATE ( INAMES(2*NRGRD,JFIRST:7), MNAMES(-NRINP:2*NRGRD), & + ALLOCATE ( INAMES(2*NRGRD,JFIRST:9), MNAMES(-NRINP:2*NRGRD), & TMPRNK(2*NRGRD), TMPGRP(2*NRGRD), NINGRP(2*NRGRD), & RP1(2*NRGRD), RPN(2*NRGRD), BCDTMP(NRGRD+1:2*NRGRD) ) ALLOCATE ( GRANK(NRGRD), GRGRP(NRGRD), USEINP(NRINP) ) @@ -726,7 +730,7 @@ CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) CALL W3SETI ( -I, MDSE, MDST ) INFLAGS1 = .FALSE. - READ (MDSI,*,END=2001,ERR=2002) MNAMES(-I), INFLAGS1(JFIRST:7) + READ (MDSI,*,END=2001,ERR=2002) MNAMES(-I), INFLAGS1(JFIRST:9) ! END DO ! @@ -773,8 +777,8 @@ I = I + 1 CALL W3SETI ( I, MDSE, MDST ) INFLAGS1 = .FALSE. -!/MGW INFLAGS1(8) = .TRUE. -!/MGP INFLAGS1(8) = .TRUE. +!/MGW INFLAGS1(10) = .TRUE. +!/MGP INFLAGS1(10) = .TRUE. INAMES(I,:)= INAMES(J,:) MNAMES(I) = MNAMES(J) TMPRNK(I) = TMPRNK(J) @@ -792,13 +796,13 @@ ! ! 3.a.5 Set input flags ! - ALLOCATE ( INPMAP(NRGRD,JFIRST:8), IDINP(-NRINP:NRGRD,JFIRST:8) ) + ALLOCATE ( INPMAP(NRGRD,JFIRST:10), IDINP(-NRINP:NRGRD,JFIRST:10) ) INPMAP = 0 IDINP = '---' ! DO I=1, NRGRD CALL W3SETI ( I, MDSE, MDST ) - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( INAMES(I,J) .EQ. 'native' ) THEN ! *** forcing input from file & defined on the native grid *** INFLAGS1(J) = .TRUE. @@ -839,7 +843,7 @@ ! INFLAGS2 is initial value of INFLAGS1. Unlike INFLAGS1, ! it does not change during the simulation IF(.NOT. INFLAGS2(J)) INFLAGS2(J)=INFLAGS1(J) - END DO ! DO J=JFIRST, 7 + END DO ! DO J=JFIRST, 9 END DO ! DO I=1, NRGRD ! DO I=1, NRINP @@ -855,7 +859,7 @@ DO I=-NRINP, NRGRD IF ( I .EQ. 0 ) CYCLE CALL W3SETI ( I, MDSE, MDST ) - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( I .GE. 1 ) THEN IF ( INPMAP(I,J) .LT. 0 ) CYCLE END IF @@ -871,7 +875,7 @@ !/T WRITE (MDST,9022) !/T DO I=-NRINP, NRGRD !/T IF ( I .EQ. 0 ) CYCLE -!/T WRITE (MDST,9021) I, MDSF(I,JFIRST:7) +!/T WRITE (MDST,9021) I, MDSF(I,JFIRST:9) !/T END DO ! ! 3.c Set rank and group data @@ -968,18 +972,18 @@ DO I=1, NRINP IF ( .NOT. USEINP(I) ) CYCLE CALL W3SETI ( -I, MDSE, MDST ) - ACTION(1:4) = '--- ' - DO J=JFIRST, 4 + ACTION(1:6) = '--- ' + DO J=JFIRST, 6 IF ( INFLAGS1(J) ) ACTION(J) = ' X ' END DO - ACTION(5:7) = '- ' - IF ( INFLAGS1(5) ) ACTION(5) = '1 ' - IF ( INFLAGS1(6) ) ACTION(6) = '2 ' - IF ( INFLAGS1(7) ) ACTION(7) = '3 ' + ACTION(7:9) = '- ' + IF ( INFLAGS1(7) ) ACTION(7) = '1 ' + IF ( INFLAGS1(8) ) ACTION(8) = '2 ' + IF ( INFLAGS1(9) ) ACTION(9) = '3 ' IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & - WRITE (MDSS,925) I, MNAMES(-I), ACTION(JFIRST:7) + WRITE (MDSS,925) I, MNAMES(-I), ACTION(JFIRST:9) IF ( NMPLOG .EQ. IMPROC ) & - WRITE (MDSO,925) I, MNAMES(-I), ACTION(JFIRST:7) + WRITE (MDSO,925) I, MNAMES(-I), ACTION(JFIRST:9) END DO IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) WRITE (MDSS,926) IF ( NMPLOG .EQ. IMPROC ) WRITE (MDSO,926) @@ -1000,8 +1004,8 @@ IF ( NMPLOG .EQ. IMPROC ) WRITE (MDSO,930) DO I=1, NRGRD CALL W3SETI ( I, MDSE, MDST ) - ACTION(1:4) = '--- ' - DO J=JFIRST, 4 + ACTION(1:6) = '--- ' + DO J=JFIRST, 6 IF ( INFLAGS1(J) .AND. INPMAP(I,J) .EQ. 0 ) THEN ACTION(J) = 'native' ELSE IF ( INFLAGS1(J) .AND. INPMAP(I,J) .EQ. -999 ) THEN @@ -1012,22 +1016,22 @@ ACTION(J) = MNAMES( INPMAP(I,J)) END IF END DO - ACTION(5:9) = '- ' - IF ( INFLAGS1(5) ) ACTION(5) = '1 ' - IF ( INFLAGS1(6) ) ACTION(6) = '2 ' - IF ( INFLAGS1(7) ) ACTION(7) = '3 ' - IF ( INFLAGS1(8) ) THEN - ACTION(8) = 'yes ' + ACTION(7:11) = '- ' + IF ( INFLAGS1(7) ) ACTION(7) = '1 ' + IF ( INFLAGS1(8) ) ACTION(8) = '2 ' + IF ( INFLAGS1(9) ) ACTION(9) = '3 ' + IF ( INFLAGS1(10) ) THEN + ACTION(10) = 'yes ' ELSE - ACTION(8) = 'no ' + ACTION(10) = 'no ' END IF - IF ( BCDUMP(I) ) ACTION(9) = 'y ' + IF ( BCDUMP(I) ) ACTION(11) = 'y ' IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & - WRITE (MDSS,931) I, MNAMES(I), ACTION(1:8), GRANK(I), & - GRGRP(I), ACTION(9) + WRITE (MDSS,931) I, MNAMES(I), ACTION(1:10), GRANK(I), & + GRGRP(I), ACTION(11) IF ( NMPLOG .EQ. IMPROC ) & - WRITE (MDSO,931) I, MNAMES(I), ACTION(1:8), GRANK(I), & - GRGRP(I), ACTION(9) + WRITE (MDSO,931) I, MNAMES(I), ACTION(1:10), GRANK(I), & + GRGRP(I), ACTION(11) END DO IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) WRITE (MDSS,932) IF ( NMPLOG .EQ. IMPROC ) WRITE (MDSO,932) @@ -1653,7 +1657,7 @@ ! the grids, because this is only intended for test cases. ! For true implementations, the jumping grid will be used. ! - IF ( INFLAGS1(8) ) THEN + IF ( INFLAGS1(10) ) THEN ! IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN WRITE (MDSS,965) @@ -2273,7 +2277,7 @@ ! ! ..... regular input files ! - DO J=JFIRST, 4 + DO J=JFIRST, 6 IF ( INFLAGS1(J) ) THEN IDINP(I,J) = IDSTR(J) IF ( INPMAP(I,J) .LT. 0 ) CYCLE @@ -2295,7 +2299,7 @@ ! ! ..... finalize file info data base ! - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( MDSF(I,J) .NE. -1 ) CALL WMUINQ ( MDSE, MDST, MDSF(I,J) ) END DO ! @@ -2315,7 +2319,7 @@ TFLAGS = INFLAGS1 ! - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( INPMAP(I,J) .NE. 0 ) THEN ! TFLAGS(J) = .TRUE. @@ -2335,9 +2339,14 @@ WADATS(I)%UDI(NSEA) , & WADATS(I)%AS0(NSEA) , & WADATS(I)%ASI(NSEA) ) +! + IF ( J.EQ.5 ) ALLOCATE ( WADATS(I)%MA0(NSEA) , & + WADATS(I)%MAI(NSEA) , & + WADATS(I)%MD0(NSEA) , & + WADATS(I)%MDI(NSEA) ) ! END IF ! IF ( INPMAP(I,J) .NE. 0 ) THEN - END DO ! DO J=JFIRST, 7 + END DO ! DO J=JFIRST, 9 ! INFLAGS1 = TFLAGS CALL W3SETI ( I, MDSE, MDST ) @@ -2520,7 +2529,7 @@ ! IF ( CPLINP(I) ) CYCLE ! - DO J=JFIRST, 4 + DO J=JFIRST, 6 IF ( INFLAGS1(J) ) THEN IDINP(-I,J) = IDSTR(J) CALL W3FLDO ('READ', IDINP(-I,J), MDSF(-I,J), MDST, & @@ -2537,7 +2546,7 @@ ! ! Skipping assimilation input files for now. ! - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( MDSF(-I,J) .NE. -1 ) CALL WMUINQ & ( MDSE, MDST, MDSF(-I,J) ) END DO @@ -2545,7 +2554,7 @@ END DO ! DO I=1, NRGRD - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( INPMAP(I,J).LT.0 .AND. INPMAP(I,J).NE.-999) IDINP(I,J) = IDINP( INPMAP(I,J),J) !IF ( INPMAP(I,J) .LT. 0 ) IDINP(I,J) = IDINP( INPMAP(I,J),J) IF ( INPMAP(I,J) .GT. 0 ) IDINP(I,J) = IDINP(-INPMAP(I,J),J) @@ -2946,10 +2955,13 @@ 3923 FORMAT ( ' Grids share output procs : ',A) ! 924 FORMAT (/' Input grid information : '/ & - ' nr extension lev. cur. wind ice data'/ & - ' -------------------------------------------------') - 925 FORMAT (1X,I3,1X,A10,4(1X,A6),3(1X,A1)) - 926 FORMAT ( ' -------------------------------------------------') + ' nr extension lev. cur. wind ice tau', & + ' rho data'/ & + ' ----------------------------------------------', & + '--------------') + 925 FORMAT (1X,I3,1X,A10,6(1X,A6),3(1X,A1)) + 926 FORMAT ( ' ----------------------------------------------', & + '--------------') ! 927 FORMAT (/' Grid for point output : '/ & ' nr extension '/ ' ---------------') @@ -2957,13 +2969,13 @@ 929 FORMAT ( ' ---------------') ! 930 FORMAT (/' Wave grid information : '/ & - ' nr extension lev. cur. wind ice data', & - ' move1 rnk grp dmp'/ & - ' -----------------------------------------------', & - '---------------------') - 931 FORMAT (1X,I3,1X,A10,4(1X,A6),3(1X,A1),2X,A4,2I4,3X,A1) + ' nr extension lev. cur. wind ice tau', & + ' rho data move1 rnk grp dmp'/ & + ' ----------------------------------------------', & + '-----------------------------------') + 931 FORMAT (1X,I3,1X,A10,6(1X,A6),3(1X,A1),2X,A4,2I4,3X,A1) 932 FORMAT ( ' -----------------------------------------------', & - '---------------------'/) + '-----------------------------------'/) 933 FORMAT ( ' ',A,' : '/ & ' nr grids (part of comm.)'/ & ' -----------------------------------------------', & @@ -3115,7 +3127,7 @@ !/T 15X,'GRID MDS(1-13)',43X,'NTRACE') !/T 9021 FORMAT (14X,16I4) !/T 9022 FORMAT ( ' TEST WMINIT : UNIT NUMBERS FOR INTPUT FILES'/ & -!/T 15X,'GRID MDSF(JFIRST-7)') +!/T 15X,'GRID MDSF(JFIRST-9)') !/T 9030 FORMAT ( ' TEST WMINIT : FILE EXTENSIONS, INPUT FLAGS,', & !/T ' RANK AND GROUP, PROC RANGE') !/T 9031 FORMAT ( ' ',I3,1X,A,20L2,2I4,2F6.2) @@ -3146,7 +3158,7 @@ !/T 9081 FORMAT ( ' MODEL AND TIME :',I4,I10.8,I8.6) !/T 9082 FORMAT ( ' STATUS AND TIMES :',I4,3(I10.8,I8.6)) !/T 9083 FORMAT ( ' TEST WMINIT : IDINP AFTER INITIALIZATION :') -!/T 9084 FORMAT ( ' ',I4,15(2X,A3)) +!/T 9084 FORMAT ( ' ',I4,17(2X,A3)) !/ !/ End of WMINIT ----------------------------------------------------- / !/ @@ -3165,7 +3177,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 13-Jun-2005 : Origination. ( version 3.07 ) @@ -3209,6 +3221,7 @@ !/ Add ESMF override for STIME & ETIME ( version 6.02 ) !/ (T. J. Campbell, NRL) !/ 15-May-2018 : Update namelist ( version 6.05 ) +!/ 22-Mar-2021 : Add momentum and air density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -3304,7 +3317,7 @@ ! time by using /var/tmp/ for log files. ! See commented line at "OPEN (MDSO,FILE=..." ! -! - IDFLDS dimensioning is hardwired as IDFLDS(-7:7) where lowest possible +! - IDFLDS dimensioning is hardwired as IDFLDS(-7:9) where lowest possible ! value of JFIRST is JFIRST=-7 ! ! 8. Structure : @@ -3507,7 +3520,7 @@ REAL, ALLOCATABLE :: X(:), Y(:), AMOVE(:), DMOVE(:), & RP1(:), RPN(:) ! - LOGICAL :: FLT, TFLAGI, TFLAGS(-7:12), PSHARE + LOGICAL :: FLT, TFLAGI, TFLAGS(-7:14), PSHARE LOGICAL, ALLOCATABLE :: FLGRD(:,:,:), FLRBPI(:), BCDTMP(:), & USEINP(:), LPRT(:), FLGR2(:,:,:), & FLGD(:,:), FLG2(:,:), FLG2D(:,:), & @@ -3515,14 +3528,14 @@ ! CHARACTER(LEN=1) :: COMSTR CHARACTER(LEN=256) :: TMPLINE, TEST - CHARACTER(LEN=3) :: IDSTR(-7:7), IDTST + CHARACTER(LEN=3) :: IDSTR(-7:9), IDTST CHARACTER(LEN=5) :: STOUT, OUTSTR(6) CHARACTER(LEN=6) :: YESXX, XXXNO CHARACTER(LEN=6), & ALLOCATABLE :: ACTION(:) CHARACTER(LEN=8) :: LFILE, STTIME !/SHRD CHARACTER(LEN=9) :: TFILE - CHARACTER(LEN=13) :: STDATE, MN, TNAMES(7) + CHARACTER(LEN=13) :: STDATE, MN, TNAMES(9) CHARACTER(LEN=40) :: PN CHARACTER(LEN=13), & ALLOCATABLE :: INAMES(:,:), MNAMES(:) @@ -3531,7 +3544,7 @@ CHARACTER(LEN=12) :: FORMAT !/DIST CHARACTER(LEN=18) :: TFILE !/MPRF CHARACTER(LEN=18) :: PFILE - CHARACTER(LEN=13) :: IDFLDS(-7:7) + CHARACTER(LEN=13) :: IDFLDS(-7:9) CHARACTER(LEN=23) :: DTME21 CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: TNAME, LINE @@ -3549,6 +3562,7 @@ 'mud viscos. ' , & 'water levels ' , 'currents ' , & 'winds ' , 'ice fields ' , & + 'momentum ' , 'air density ' , & 'mean param. ' , '1D spectra ' , & '2D spectra ' / ! @@ -3563,7 +3577,8 @@ ! DATA IDSTR / 'IC1', 'IC2', 'IC3', 'IC4', 'IC5', & 'MDN', 'MTH', 'MVS', 'LEV', 'CUR', & - 'WND', 'ICE', 'DT0', 'DT1', 'DT2' / + 'WND', 'ICE', 'TAU', 'RHO', 'DT0', & + 'DT1', 'DT2' / ! DATA YESXX / 'YES/--' / DATA XXXNO / '---/NO' / @@ -3758,7 +3773,7 @@ ! ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(40,0:NRGRD), & FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & - MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & + MDSF(-NRINP:NRGRD,JFIRST:9), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & FLG2(NOGRP,NRGRD) & ,OUTFF(7,0:NRGRD)) @@ -3807,7 +3822,7 @@ ! sources, and from communication rather than ! files. ! - ALLOCATE ( INAMES(2*NRGRD,-7:7), MNAMES(-NRINP:2*NRGRD), & + ALLOCATE ( INAMES(2*NRGRD,-7:9), MNAMES(-NRINP:2*NRGRD), & TMPRNK(2*NRGRD), TMPGRP(2*NRGRD), NINGRP(2*NRGRD), & RP1(2*NRGRD), RPN(2*NRGRD), BCDTMP(NRGRD+1:2*NRGRD)) ALLOCATE ( GRANK(NRGRD), GRGRP(NRGRD), USEINP(NRINP) ) @@ -3840,9 +3855,11 @@ INFLAGS1(2) = NML_INPUT_GRID(I)%FORCING%CURRENTS INFLAGS1(3) = NML_INPUT_GRID(I)%FORCING%WINDS INFLAGS1(4) = NML_INPUT_GRID(I)%FORCING%ICE_CONC - INFLAGS1(5) = NML_INPUT_GRID(I)%ASSIM%MEAN - INFLAGS1(6) = NML_INPUT_GRID(I)%ASSIM%SPEC1D - INFLAGS1(7) = NML_INPUT_GRID(I)%ASSIM%SPEC2D + INFLAGS1(5) = NML_INPUT_GRID(I)%FORCING%ATM_MOMENTUM + INFLAGS1(6) = NML_INPUT_GRID(I)%FORCING%AIR_DENSITY + INFLAGS1(7) = NML_INPUT_GRID(I)%ASSIM%MEAN + INFLAGS1(8) = NML_INPUT_GRID(I)%ASSIM%SPEC1D + INFLAGS1(9) = NML_INPUT_GRID(I)%ASSIM%SPEC2D END DO ! ! 3.a.2 Unified point output grid. @@ -3881,9 +3898,11 @@ INAMES(NRGRD+I,2) = NML_MODEL_GRID(I)%FORCING%CURRENTS INAMES(NRGRD+I,3) = NML_MODEL_GRID(I)%FORCING%WINDS INAMES(NRGRD+I,4) = NML_MODEL_GRID(I)%FORCING%ICE_CONC - INAMES(NRGRD+I,5) = NML_MODEL_GRID(I)%ASSIM%MEAN - INAMES(NRGRD+I,6) = NML_MODEL_GRID(I)%ASSIM%SPEC1D - INAMES(NRGRD+I,7) = NML_MODEL_GRID(I)%ASSIM%SPEC2D + INAMES(NRGRD+I,5) = NML_MODEL_GRID(I)%FORCING%ATM_MOMENTUM + INAMES(NRGRD+I,6) = NML_MODEL_GRID(I)%FORCING%AIR_DENSITY + INAMES(NRGRD+I,7) = NML_MODEL_GRID(I)%ASSIM%MEAN + INAMES(NRGRD+I,8) = NML_MODEL_GRID(I)%ASSIM%SPEC1D + INAMES(NRGRD+I,9) = NML_MODEL_GRID(I)%ASSIM%SPEC2D TMPRNK(NRGRD+I) = NML_MODEL_GRID(I)%RESOURCE%RANK_ID TMPGRP(NRGRD+I) = NML_MODEL_GRID(I)%RESOURCE%GROUP_ID RP1(NRGRD+I) = NML_MODEL_GRID(I)%RESOURCE%COMM_FRAC(1) @@ -3905,8 +3924,8 @@ I = I + 1 CALL W3SETI ( I, MDSE, MDST ) INFLAGS1 = .FALSE. -!/MGW INFLAGS1(8) = .TRUE. -!/MGP INFLAGS1(8) = .TRUE. +!/MGW INFLAGS1(10) = .TRUE. +!/MGP INFLAGS1(10) = .TRUE. INAMES(I,:)= INAMES(J,:) MNAMES(I) = MNAMES(J) TMPRNK(I) = TMPRNK(J) @@ -3924,13 +3943,13 @@ ! ! 3.a.5 Set input flags ! - ALLOCATE ( INPMAP(NRGRD,JFIRST:8), IDINP(-NRINP:NRGRD,JFIRST:8) ) + ALLOCATE ( INPMAP(NRGRD,JFIRST:10), IDINP(-NRINP:NRGRD,JFIRST:10) ) INPMAP = 0 IDINP = '---' ! DO I=1, NRGRD CALL W3SETI ( I, MDSE, MDST ) - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( INAMES(I,J) .EQ. 'native' ) THEN ! *** forcing input from file & defined on the native grid *** INFLAGS1(J) = .TRUE. @@ -3971,7 +3990,7 @@ ! INFLAGS2 is initial value of INFLAGS1. Unlike INFLAGS1, ! it does not change during the simulation IF(.NOT. INFLAGS2(J)) INFLAGS2(J)=INFLAGS1(J) - END DO ! DO J=JFIRST, 7 + END DO ! DO J=JFIRST, 9 END DO ! DO I=1, NRGRD ! DO I=1, NRINP @@ -3987,7 +4006,7 @@ DO I=-NRINP, NRGRD IF ( I .EQ. 0 ) CYCLE CALL W3SETI ( I, MDSE, MDST ) - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( I .GE. 1 ) THEN IF ( INPMAP(I,J) .LT. 0 ) CYCLE END IF @@ -4003,7 +4022,7 @@ !/T WRITE (MDST,9022) !/T DO I=-NRINP, NRGRD !/T IF ( I .EQ. 0 ) CYCLE -!/T WRITE (MDST,9021) I, MDSF(I,JFIRST:7) +!/T WRITE (MDST,9021) I, MDSF(I,JFIRST:9) !/T END DO ! ! 3.c Set rank and group data @@ -4101,18 +4120,18 @@ DO I=1, NRINP IF ( .NOT. USEINP(I) ) CYCLE CALL W3SETI ( -I, MDSE, MDST ) - ACTION(1:4) = '--- ' - DO J=JFIRST, 4 + ACTION(1:6) = '--- ' + DO J=JFIRST, 6 IF ( INFLAGS1(J) ) ACTION(J) = ' X ' END DO - ACTION(5:7) = '- ' - IF ( INFLAGS1(5) ) ACTION(5) = '1 ' - IF ( INFLAGS1(6) ) ACTION(6) = '2 ' - IF ( INFLAGS1(7) ) ACTION(7) = '3 ' + ACTION(7:9) = '- ' + IF ( INFLAGS1(7) ) ACTION(7) = '1 ' + IF ( INFLAGS1(8) ) ACTION(8) = '2 ' + IF ( INFLAGS1(9) ) ACTION(9) = '3 ' IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & - WRITE (MDSS,925) I, MNAMES(-I), ACTION(JFIRST:7) + WRITE (MDSS,925) I, MNAMES(-I), ACTION(JFIRST:9) IF ( NMPLOG .EQ. IMPROC ) & - WRITE (MDSO,925) I, MNAMES(-I), ACTION(JFIRST:7) + WRITE (MDSO,925) I, MNAMES(-I), ACTION(JFIRST:9) END DO IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) WRITE (MDSS,926) IF ( NMPLOG .EQ. IMPROC ) WRITE (MDSO,926) @@ -4133,8 +4152,8 @@ IF ( NMPLOG .EQ. IMPROC ) WRITE (MDSO,930) DO I=1, NRGRD CALL W3SETI ( I, MDSE, MDST ) - ACTION(1:4) = '--- ' - DO J=JFIRST, 4 + ACTION(1:6) = '--- ' + DO J=JFIRST, 6 IF ( INFLAGS1(J) .AND. INPMAP(I,J) .EQ. 0 ) THEN ACTION(J) = 'native' ELSE IF ( INFLAGS1(J) .AND. INPMAP(I,J) .EQ. -999 ) THEN @@ -4145,22 +4164,22 @@ ACTION(J) = MNAMES( INPMAP(I,J)) END IF END DO - ACTION(5:9) = '- ' - IF ( INFLAGS1(5) ) ACTION(5) = '1 ' - IF ( INFLAGS1(6) ) ACTION(6) = '2 ' - IF ( INFLAGS1(7) ) ACTION(7) = '3 ' - IF ( INFLAGS1(8) ) THEN - ACTION(8) = 'yes ' + ACTION(7:11) = '- ' + IF ( INFLAGS1(7) ) ACTION(7) = '1 ' + IF ( INFLAGS1(8) ) ACTION(8) = '2 ' + IF ( INFLAGS1(9) ) ACTION(9) = '3 ' + IF ( INFLAGS1(10) ) THEN + ACTION(10) = 'yes ' ELSE - ACTION(8) = 'no ' + ACTION(10) = 'no ' END IF - IF ( BCDUMP(I) ) ACTION(9) = 'y ' + IF ( BCDUMP(I) ) ACTION(11) = 'y ' IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & - WRITE (MDSS,931) I, MNAMES(I), ACTION(1:8), GRANK(I), & - GRGRP(I), ACTION(9) + WRITE (MDSS,931) I, MNAMES(I), ACTION(1:10), GRANK(I), & + GRGRP(I), ACTION(11) IF ( NMPLOG .EQ. IMPROC ) & - WRITE (MDSO,931) I, MNAMES(I), ACTION(1:8), GRANK(I), & - GRGRP(I), ACTION(9) + WRITE (MDSO,931) I, MNAMES(I), ACTION(1:10), GRANK(I), & + GRGRP(I), ACTION(11) END DO IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) WRITE (MDSS,932) IF ( NMPLOG .EQ. IMPROC ) WRITE (MDSO,932) @@ -4570,7 +4589,7 @@ ! the grids, because this is only intended for test cases. ! For true implementations, the jumping grid will be used. ! - IF ( INFLAGS1(8) ) THEN + IF ( INFLAGS1(10) ) THEN ! IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN WRITE (MDSS,965) @@ -5156,7 +5175,7 @@ ! ! ..... regular input files ! - DO J=JFIRST, 4 + DO J=JFIRST, 6 IF ( INFLAGS1(J) ) THEN IDINP(I,J) = IDSTR(J) IF ( INPMAP(I,J) .LT. 0 ) CYCLE @@ -5178,7 +5197,7 @@ ! ! ..... finalize file info data base ! - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( MDSF(I,J) .NE. -1 ) CALL WMUINQ ( MDSE, MDST, MDSF(I,J) ) END DO ! @@ -5198,7 +5217,7 @@ TFLAGS = INFLAGS1 ! - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( INPMAP(I,J) .NE. 0 ) THEN ! TFLAGS(J) = .TRUE. @@ -5218,6 +5237,11 @@ WADATS(I)%UDI(NSEA) , & WADATS(I)%AS0(NSEA) , & WADATS(I)%ASI(NSEA) ) +! + IF ( J.EQ.5 ) ALLOCATE ( WADATS(I)%MA0(NSEA) , & + WADATS(I)%MAI(NSEA) , & + WADATS(I)%MD0(NSEA) , & + WADATS(I)%MDI(NSEA) ) ! END IF END DO @@ -5410,7 +5434,7 @@ ! IF ( CPLINP(I) ) CYCLE ! - DO J=JFIRST, 4 + DO J=JFIRST, 6 IF ( INFLAGS1(J) ) THEN IDINP(-I,J) = IDSTR(J) CALL W3FLDO ('READ', IDINP(-I,J), MDSF(-I,J), MDST, & @@ -5427,7 +5451,7 @@ ! ! Skipping assimilation input files for now. ! - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( MDSF(-I,J) .NE. -1 ) CALL WMUINQ & ( MDSE, MDST, MDSF(-I,J) ) END DO @@ -5435,7 +5459,7 @@ END DO ! DO I=1, NRGRD - DO J=JFIRST, 7 + DO J=JFIRST, 9 IF ( INPMAP(I,J) .LT. 0 ) IDINP(I,J) = IDINP( INPMAP(I,J),J) IF ( INPMAP(I,J) .GT. 0 ) IDINP(I,J) = IDINP(-INPMAP(I,J),J) END DO @@ -5847,10 +5871,13 @@ 3923 FORMAT ( ' Grids share output procs : ',A) ! 924 FORMAT (/' Input grid information : '/ & - ' nr extension lev. cur. wind ice data'/ & - ' -------------------------------------------------') - 925 FORMAT (1X,I3,1X,A10,4(1X,A6),3(1X,A1)) - 926 FORMAT ( ' -------------------------------------------------') + ' nr extension lev. cur. wind ice tau', & + ' rho data'/ & + ' ----------------------------------------------', & + '---------------') + 925 FORMAT (1X,I3,1X,A10,6(1X,A6),3(1X,A1)) + 926 FORMAT ( ' ----------------------------------------------', & + '---------------') ! 927 FORMAT (/' Grid for point output : '/ & ' nr extension '/ ' ---------------') @@ -5858,13 +5885,13 @@ 929 FORMAT ( ' ---------------') ! 930 FORMAT (/' Wave grid information : '/ & - ' nr extension lev. cur. wind ice data', & - ' move1 rnk grp dmp'/ & + ' nr extension lev. cur. wind ice tau', & + ' rho data move1 rnk grp dmp'/ & ' -----------------------------------------------', & - '---------------------') - 931 FORMAT (1X,I3,1X,A10,4(1X,A6),3(1X,A1),2X,A4,2I4,3X,A1) + '-----------------------------------') + 931 FORMAT (1X,I3,1X,A10,6(1X,A6),3(1X,A1),2X,A4,2I4,3X,A1) 932 FORMAT ( ' -----------------------------------------------', & - '---------------------'/) + '-----------------------------------'/) 933 FORMAT ( ' ',A,' : '/ & ' nr grids (part of comm.)'/ & ' -----------------------------------------------', & @@ -6022,7 +6049,7 @@ !/T 15X,'GRID MDS(1-13)',43X,'NTRACE') !/T 9021 FORMAT (14X,16I4) !/T 9022 FORMAT ( ' TEST WMINITNML : UNIT NUMBERS FOR INTPUT FILES'/ & -!/T 15X,'GRID MDSF(JFIRST-7)') +!/T 15X,'GRID MDSF(JFIRST-9)') !/T 9030 FORMAT ( ' TEST WMINITNML : FILE EXTENSIONS, INPUT FLAGS,', & !/T ' RANK AND GROUP, PROC RANGE') !/T 9031 FORMAT ( ' ',I3,1X,A,20L2,2I4,2F6.2) @@ -6051,7 +6078,7 @@ !/T 9081 FORMAT ( ' MODEL AND TIME :',I4,I10.8,I8.6) !/T 9082 FORMAT ( ' STATUS AND TIMES :',I4,3(I10.8,I8.6)) !/T 9083 FORMAT ( ' TEST WMINITNML : IDINP AFTER INITIALIZATION :') -!/T 9084 FORMAT ( ' ',I4,15(2X,A3)) +!/T 9084 FORMAT ( ' ',I4,17(2X,A3)) !/ !/ End of WMINITNML ----------------------------------------------------- / !/ diff --git a/model/ftn/wmmdatmd.ftn b/model/ftn/wmmdatmd.ftn index 0c9d9fc43..0d65e142a 100644 --- a/model/ftn/wmmdatmd.ftn +++ b/model/ftn/wmmdatmd.ftn @@ -7,7 +7,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 06-Jun-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 13-Jun-2005 : Origination. ( version 3.07 ) @@ -31,6 +31,7 @@ !/ within allowed bounds. ( version 5.15 ) !/ 06-Jun-2018 : add subroutine INIT_GET_JSEA_ISPROC_GLOB/add PDLIB !/ ( version 6.04 ) +!/ 22-Mar-2021 : Support for air density input ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -121,6 +122,7 @@ ! and output for areas of grid overlap. ! IFLSTI L.A. Public FLags for last ice per grid. ! IFLSTL L.A. Public FLags for last level per grid. +! IFLSTR L.A. Public FLags for last air density per grid. ! ! MDATA TYPE Public Data structure for grid dependent data. ! MDATAS MDATA Public Array of data structures. @@ -154,6 +156,7 @@ ! Log. Public Flags for array initializations. ! FLLSTI Log. Public FLag for last ice per grid. ! FLLSTL Log. Public FLag for last level per grid. +! FLLSTR Log. Public FLag for last air density per grid. ! ! NMV Int. Public Number of moving grid data. ! TMV I.A. Public Moving grid times. @@ -316,7 +319,7 @@ REAL, ALLOCATABLE :: DTRES(:) LOGICAL :: FLGBDI=.FALSE., FLGHG1, FLGHG2 LOGICAL, ALLOCATABLE :: RESPEC(:,:), BCDUMP(:), & - IFLSTI(:), IFLSTL(:) + IFLSTI(:), IFLSTL(:), IFLSTR(:) CHARACTER(LEN=3), ALLOCATABLE :: IDINP(:,:) !/ !/ Data structures @@ -332,8 +335,8 @@ AMV(:,:), DMV(:,:) REAL, POINTER :: MAPBDI(:,:), MAPODI(:,:) !/PDLIB INTEGER, POINTER :: SEA_IPGL(:), SEA_IPGL_TO_PROC(:) - LOGICAL :: MINIT, MSKINI, FLLSTL, FLLSTI, & - FLDAT0, FLDAT1, FLDAT2 + LOGICAL :: MINIT, MSKINI, FLLSTL, FLLSTR, & + FLLSTI, FLDAT0, FLDAT1, FLDAT2 !/MPI LOGICAL :: FBCAST END TYPE MDATA ! @@ -386,7 +389,7 @@ AMV(:,:), DMV(:,:) REAL, POINTER :: MAPBDI(:,:), MAPODI(:,:) !/PDLIB INTEGER, POINTER :: SEA_IPGL(:), SEA_IPGL_TO_PROC(:) - LOGICAL, POINTER :: MINIT, FLLSTL, FLLSTI, & + LOGICAL, POINTER :: MINIT, FLLSTL, FLLSTR, FLLSTI, & FLDAT0, FLDAT1, FLDAT2 !/MPI LOGICAL, POINTER :: FBCAST !/ @@ -398,7 +401,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 10-Dec-2014 ! +!/ | Last update : 22-Mar-2021 ! !/ +-----------------------------------+ !/ !/ 22-Feb-2005 : Origination. ( version 3.07 ) @@ -409,6 +412,7 @@ !/ 12-Jan-2007 : Add FLSTI and FLLSTL. ( version 3.10 ) !/ 22-Jan-2007 : Add NAVMAX. ( version 3.10 ) !/ 10-Dec-2014 : Add checks for allocate status ( version 5.04 ) +!/ 22-Mar-2021 : Support for air density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -483,7 +487,7 @@ ALLOCATE ( MDATAS(NGRIDS), BPSTGE(NGRIDS,NGRIDS), & HGSTGE(NGRIDS,NGRIDS), EQSTGE(NGRIDS,NGRIDS), & BCDUMP(NRGRD), IFLSTI(NRINP), IFLSTL(NRINP), & - STAT=ISTAT ) + IFLSTR(NRINP), STAT=ISTAT ) CHECK_ALLOC_STATUS ( ISTAT ) !/MPI ALLOCATE ( NBISTA(NGRIDS), HGHSTA(NGRIDS), EQLSTA(NGRIDS), & !/MPI STAT=ISTAT ) @@ -499,6 +503,7 @@ ! IFLSTI = .FALSE. IFLSTL = .FALSE. + IFLSTR = .FALSE. ! DO I=1, NGRIDS MDATAS(I)%MINIT = .FALSE. @@ -890,10 +895,11 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 13-Jun-2005 ! +!/ | Last update : 22-Mar-2021 ! !/ +-----------------------------------+ !/ -!/ 13-Jun-2005 : Origination. ( version 3.07 ) +!/ 13-Jun-2005 : Origination. ( version 3.07 ) +!/ 22-Mar-2021 : Support for air density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -996,6 +1002,7 @@ MINIT => MDATAS(IMOD)%MINIT FLLSTL => MDATAS(IMOD)%FLLSTL FLLSTI => MDATAS(IMOD)%FLLSTI + FLLSTR => MDATAS(IMOD)%FLLSTR MAPBDI => MDATAS(IMOD)%MAPBDI MAPODI => MDATAS(IMOD)%MAPODI !/PDLIB SEA_IPGL => MDATAS(IMOD)%SEA_IPGL diff --git a/model/ftn/wmupdtmd.ftn b/model/ftn/wmupdtmd.ftn index e5c808682..fd09721e2 100644 --- a/model/ftn/wmupdtmd.ftn +++ b/model/ftn/wmupdtmd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 20-Jan-2017 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 22-Feb-2005 : Origination. ( version 3.07 ) @@ -23,6 +23,7 @@ !/ (T. J. Campbell, NRL) !/ 01-Jul-2019 : Generalize output to curv grids ( version 7.XX ) !/ (R. Padilla-Hernandez, J.H. Alves, EMC/NOAA) +!/ 22-Mar-2021 : Add momentum and air density input ( version 7.xx ) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -82,7 +83,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 20-Jan-2017 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 22-Feb-2005 : Origination. ( version 3.07 ) @@ -90,6 +91,7 @@ !/ 12-Jan-2007 : General clean-up and bug fixes. ( version 3.10 ) !/ 20-Jan-2017 : Enable using input from coupler ( version 6.02 ) !/ (T. J. Campbell, NRL) +!/ 22-Mar-2021 : Add momentum and air density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -134,7 +136,7 @@ ! ! 7. Remarks : ! -! - IDFLDS dimensioning is hardwired as IDFLDS(-7:7) where +! - IDFLDS dimensioning is hardwired as IDFLDS(-7:9) where ! lowest possible value of JFIRST is JFIRST=-7 ! ! 8. Structure : @@ -161,13 +163,14 @@ USE W3GDATMD, ONLY: NX, NY, FILEXT USE W3WDATMD, ONLY: TIME - USE W3IDATMD, ONLY: INFLAGS1, TLN, TC0, TCN, TW0, TWN, TIN, T0N, & - T1N, T2N, TG0, TGN, TFN, TDN, TTN, TVN, & - TZN, TI1, TI2, TI3, TI4, TI5, JFIRST + USE W3IDATMD, ONLY: INFLAGS1, TLN, TC0, TCN, TW0, TWN, TU0, & + TUN, TIN, T0N, T1N, T2N, TG0, TGN, TFN, & + TDN, TTN, TVN, TZN, TI1, TI2, TI3, TI4, & + TI5, JFIRST USE WMMDATMD, ONLY: IMPROC, MDSO, MDSS, MDST, MDSE, NMPSCR, & - NMPERR, ETIME, FLLSTL, FLLSTI, INPMAP, & - IDINP, IFLSTI, IFLSTL + NMPERR, ETIME, FLLSTL, FLLSTR, FLLSTI, & + INPMAP, IDINP, IFLSTI, IFLSTL, IFLSTR !/ IMPLICIT NONE !/ @@ -184,7 +187,7 @@ !/S INTEGER, SAVE :: IENT = 0 REAL :: DTTST LOGICAL :: FIRST - CHARACTER(LEN=13) :: IDFLDS(-7:8) + CHARACTER(LEN=13) :: IDFLDS(-7:10) CHARACTER(LEN=23) :: DTME21 ! DATA IDFLDS / 'ice param. 1 ' , 'ice param. 2 ' , & @@ -194,6 +197,7 @@ 'mud viscos. ' , & 'water levels ' , 'currents ' , & 'winds ' , 'ice fields ' , & + 'momentum ' , 'air density ' , & 'mean param. ' , '1D spectra ' , & '2D spectra ' , 'grid speed ' / !/ @@ -219,6 +223,7 @@ ! FLLSTL = .FALSE. FLLSTI = .FALSE. + FLLSTR = .FALSE. IERR = 0 ! ! 0.c Output @@ -241,15 +246,17 @@ !/T WRITE (MDST,9003) 2, IDINP(IMOD,2), INFLAGS1(2), TC0, TCN !/T WRITE (MDST,9003) 3, IDINP(IMOD,3), INFLAGS1(3), TW0, TWN !/T WRITE (MDST,9002) 4, IDINP(IMOD,4), INFLAGS1(4), TIN -!/T WRITE (MDST,9002) 5, IDINP(IMOD,5), INFLAGS1(5), T0N -!/T WRITE (MDST,9002) 6, IDINP(IMOD,6), INFLAGS1(6), T1N -!/T WRITE (MDST,9002) 7, IDINP(IMOD,7), INFLAGS1(7), T2N -!/T WRITE (MDST,9003) 8, 'MOV' , INFLAGS1(8), TG0, TGN +!/T WRITE (MDST,9003) 5, IDINP(IMOD,5), INFLAGS1(5), TU0, TUN +!/T WRITE (MDST,9002) 6, IDINP(IMOD,6), INFLAGS1(6), TRN +!/T WRITE (MDST,9002) 7, IDINP(IMOD,7), INFLAGS1(7), T0N +!/T WRITE (MDST,9002) 8, IDINP(IMOD,8), INFLAGS1(8), T1N +!/T WRITE (MDST,9002) 9, IDINP(IMOD,9), INFLAGS1(9), T2N +!/T WRITE (MDST,9003) 10, 'MOV' , INFLAGS1(10), TG0, TGN !/T WRITE (MDST,9004) 'GRD', NX, NY ! ! 1. Loop over input types ------------------------------------------ / ! - DO J=JFIRST, 8 + DO J=JFIRST, 10 ! ! 1.a Check if update needed ! @@ -297,7 +304,8 @@ DTTST = 0. ELSE IF ( FIRST .OR. ( J.EQ.1 .AND. IFLSTL(-JJ) ) & - .OR. ( J.EQ.4 .AND. IFLSTI(-JJ) ) ) THEN + .OR. ( J.EQ.4 .AND. IFLSTI(-JJ) ) & + .OR. ( J.EQ.6 .AND. IFLSTR(-JJ) ) ) THEN DTTST = 1. ELSE DTTST = DSEC21 ( TIME , TFN(:,J) ) @@ -306,6 +314,7 @@ ! IF ( J .EQ. 1 ) FLLSTL = IFLSTL(-JJ) IF ( J .EQ. 4 ) FLLSTI = IFLSTI(-JJ) + IF ( J .EQ. 6 ) FLLSTR = IFLSTR(-JJ) ! !/T WRITE (MDST,9031) J, IDINP(JJ,J), DTTST, TFN(:,J) ! @@ -321,6 +330,7 @@ ! IF ( J .EQ. 1 ) IFLSTL(-JJ) = FLLSTL IF ( J .EQ. 4 ) IFLSTI(-JJ) = FLLSTI + IF ( J .EQ. 6 ) IFLSTR(-JJ) = FLLSTR ! END IF ! @@ -362,11 +372,12 @@ ! TDATA = ETIME ! - DO J=JFIRST, 8 + DO J=JFIRST, 10 IF ( .NOT. INFLAGS1(J) ) CYCLE DTTST = DSEC21 ( TFN(:,J) , TDATA ) IF ( DTTST.GT.0. .AND. .NOT. ( (FLLSTL .AND. J.EQ.1) .OR. & - (FLLSTI .AND. J.EQ.4) ) ) THEN + (FLLSTI .AND. J.EQ.4) .OR. & + (FLLSTR .AND. J.EQ.6) ) ) THEN TDATA = TFN(:,J) END IF END DO @@ -375,7 +386,7 @@ ! TDN = TDATA CALL TICK21 ( TDN, 1. ) - DO J=5, 7 + DO J=7, 9 IF ( INFLAGS1(J) ) THEN DTTST = DSEC21 ( TFN(:,J) , TDN ) IF ( DTTST.GT.0. ) TDN = TFN(:,J) @@ -397,10 +408,12 @@ !/T WRITE (MDST,9072) 2, IDINP(IMOD,2), INFLAGS1(2), TC0, TCN !/T WRITE (MDST,9072) 3, IDINP(IMOD,3), INFLAGS1(3), TW0, TWN !/T WRITE (MDST,9071) 4, IDINP(IMOD,4), INFLAGS1(4), TIN -!/T WRITE (MDST,9071) 5, IDINP(IMOD,5), INFLAGS1(5), T0N -!/T WRITE (MDST,9071) 6, IDINP(IMOD,6), INFLAGS1(6), T1N -!/T WRITE (MDST,9073) 7, IDINP(IMOD,7), INFLAGS1(7), T2N, TDN -!/T WRITE (MDST,9072) 8, 'MOV' , INFLAGS1(8), TG0, TGN +!/T WRITE (MDST,9072) 5, IDINP(IMOD,5), INFLAGS1(5), TU0, TUN +!/T WRITE (MDST,9071) 6, IDINP(IMOD,6), INFLAGS1(6), TRN +!/T WRITE (MDST,9071) 7, IDINP(IMOD,7), INFLAGS1(7), T0N +!/T WRITE (MDST,9071) 8, IDINP(IMOD,8), INFLAGS1(8), T1N +!/T WRITE (MDST,9073) 9, IDINP(IMOD,9), INFLAGS1(9), T2N, TDN +!/T WRITE (MDST,9072) 10, 'MOV' , INFLAGS1(10), TG0, TGN ! RETURN ! @@ -446,10 +459,11 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 07-Oct-2006 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 07-Oct-2006 : Origination. ( version 3.10 ) +!/ 22-Mar-2021 : Add momentum and air density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -513,15 +527,15 @@ USE W3GDATMD, ONLY: NX, NY USE W3WDATMD, ONLY: TIME USE W3IDATMD, ONLY: TLN, WLEV, TC0, TCN, CX0, CXN, CY0, CYN, & - TW0, TWN, WX0, WXN, WY0, WYN, DT0, DTN, & - TIN, ICEI, T0N, T1N, T2N, TDN, INFLAGS1, & - TG0, TGN, GA0, GD0, GAN, GDN, BERGI, & - TTN, MUDT, TVN, MUDV, TZN, MUDD, & - TI1, TI2, TI3, TI4, TI5, & - ICEP1, ICEP2,ICEP3, ICEP4, ICEP5 + TW0, TWN, TU0, TUN, WX0, WXN, WY0, WYN, & + DT0, DTN, TIN, TRN, ICEI, UX0, UXN, UY0, & + UYN, RAIR, T0N, T1N, T2N, TDN, INFLAGS1, & + TG0, TGN, GA0, GD0, GAN, GDN, BERGI, TTN, & + MUDT, TVN, MUDV, TZN, MUDD, TI1, TI2, TI3, & + TI4, TI5, ICEP1, ICEP2,ICEP3, ICEP4, ICEP5 USE WMMDATMD, ONLY: IMPROC, NMPERR, MDST, MDSE, MDSF, ETIME, & - FLLSTL, FLLSTI, RCLD, NDT, DATA0, DATA1, & - DATA2, NMV, NMVMAX, TMV, AMV, DMV + FLLSTL, FLLSTI, FLLSTR, RCLD, NDT, DATA0, & + DATA1, DATA2, NMV, NMVMAX, TMV, AMV, DMV !/ IMPLICIT NONE !/ @@ -642,9 +656,24 @@ XXX, XXX, XXX, TIN, XXX , BERGI, ICEI, IERR) IF ( IERR .LT. 0 ) FLLSTI = .TRUE. ! -! 5. Data type 0 ---------------------------------------------------- / +! 5. Momentum ------------------------------------------------------- / ! CASE (5) + CALL W3FLDG ('READ', IDSTR, MDSF(IMOD,J), MDST, MDSEN, & + NX, NY, NX, NY, TIME, ETIME, TU0, & + UX0, UY0, XXX, TUN, UXN, UYN, XXX, IERR) +! +! 6. Air density ---------------------------------------------------- / +! + CASE (6) + CALL W3FLDG ('READ', IDSTR, MDSF(IMOD,J), MDST, MDSEN, & + NX, NY, NX, NY, TIME, ETIME, DTIME, & + XXX, XXX, XXX, TRN, XXX, XXX, RAIR, IERR) + IF ( IERR .LT. 0 ) FLLSTR = .TRUE. +! +! 7. Data type 0 ---------------------------------------------------- / +! + CASE (7) CALL W3FLDD ('SIZE', IDSTR, MDSF(IMOD,J), MDST, MDSEN, & TIME, T0N, RCLD(1), NDT(1), NDTNEW, & DATA0, IERR ) @@ -661,9 +690,9 @@ NDTNEW, DATA0, IERR ) END IF ! -! 6. Data type 1 ---------------------------------------------------- / +! 8. Data type 1 ---------------------------------------------------- / ! - CASE ( 6 ) + CASE ( 8 ) CALL W3FLDD ('SIZE', IDSTR, MDSF(IMOD,J), MDST, MDSEN, & TIME, T1N, RCLD(2), NDT(2), NDTNEW, & DATA1, IERR ) @@ -680,9 +709,9 @@ NDTNEW, DATA1, IERR ) END IF ! -! 7. Data type 2 ---------------------------------------------------- / +! 9. Data type 2 ---------------------------------------------------- / ! - CASE ( 7 ) + CASE ( 9 ) CALL W3FLDD ('SIZE', IDSTR, MDSF(IMOD,J), MDST, MDSEN, & TIME, T2N, RCLD(3), NDT(3), NDTNEW, & DATA2, IERR ) @@ -699,15 +728,15 @@ NDTNEW, DATA2, IERR ) END IF ! -! 8. Moving grid data ----------------------------------------------- / +! 10. Moving grid data ---------------------------------------------- / ! - CASE ( 8 ) + CASE ( 10 ) ! notes: ! SUBROUTINE W3FLDM in w3fldsmd.ftn : -!< INTEGER, INTENT(INOUT) :: NH, THO(2,4,NHM), TF0(2), TFN(2) -!> INTEGER, INTENT(INOUT) :: NH, THO(2,-7:4,NHM), TF0(2), TFN(2) -!< REAL, INTENT(INOUT) :: HA(NHM,4), HD(NHM,4), A0, AN, D0, DN -!> REAL, INTENT(INOUT) :: HA(NHM,-7:4), HD(NHM,-7:4), A0, AN, D0, DN +!< INTEGER, INTENT(INOUT) :: NH, THO(2,6,NHM), TF0(2), TFN(2) +!> INTEGER, INTENT(INOUT) :: NH, THO(2,-7:6,NHM), TF0(2), TFN(2) +!< REAL, INTENT(INOUT) :: HA(NHM,6), HD(NHM,6), A0, AN, D0, DN +!> REAL, INTENT(INOUT) :: HA(NHM,-7:6), HD(NHM,-7:6), A0, AN, D0, DN ! Arguments # ! THO 8 ! HA 9 @@ -736,11 +765,12 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 10-Dec-2006 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 14-Oct-2006 : Origination. ( version 3.10 ) !/ 10-Dec-2006 : Bug fix WMUPD2 initial fields. ( version 3.10 ) +!/ 22-Mar-2021 : Add momentum and air density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -792,6 +822,8 @@ ! !/CRX2 Current exenrgy conservation. ! ! !/WNX0 Wind vector component conservation. +! !/WNX1 Wind speed conservation. +! !/WNX2 Wind exenrgy conservation. ! ! !/S Enable subroutine tracing. ! !/T Enable test output @@ -819,7 +851,7 @@ !/ ------------------------------------------------------------------- / !/ Local parameters !/ - INTEGER :: ICONSC, ICONSW + INTEGER :: ICONSC, ICONSW, ICONSU !/S INTEGER, SAVE :: IENT = 0 !/ !/ ------------------------------------------------------------------- / @@ -839,6 +871,9 @@ !/WNX0 ICONSW = 0 !/WNX1 ICONSW = 1 !/WNX2 ICONSW = 2 +!/WNX0 ICONSU = 0 +!/WNX1 ICONSU = 1 +!/WNX2 ICONSU = 2 ! ! 1. Shift fields ( currents and winds only ) ------------------------ / ! @@ -866,6 +901,18 @@ INPUTS(IMOD)%DT0 = INPUTS(IMOD)%DTN !/T WRITE (MDST,9010) J, INPUTS(IMOD)%TFN(:,J) !/T ELSE +!/T WRITE (MDST,9011) J + END IF +! +! 1.c Momentum +! + CASE (5) + IF ( INPUTS(IMOD)%TFN(1,J) .GT. 0 ) THEN + INPUTS(IMOD)%TU0(:) = INPUTS(IMOD)%TFN(:,J) + INPUTS(IMOD)%UX0 = INPUTS(IMOD)%UXN + INPUTS(IMOD)%UY0 = INPUTS(IMOD)%UYN +!/T WRITE (MDST,9010) J, INPUTS(IMOD)%TFN(:,J) +!/T ELSE !/T WRITE (MDST,9011) J END IF ! @@ -960,20 +1007,33 @@ ( IMOD, INPUTS(IMOD)%BERGI, & JMOD, INPUTS(JMOD)%BERGI, 0. ) ! -! 2.e Assimilation data 0 +! 2.e Momentum ! CASE (5) - GOTO 2999 + CALL WMUPDV ( IMOD, INPUTS(IMOD)%UXN, INPUTS(IMOD)%UYN, & + JMOD, INPUTS(JMOD)%UXN, INPUTS(JMOD)%UYN, & + 0., ICONSU ) ! -! 2.f Assimilation data 1 +! 2.f Air density ! CASE (6) - GOTO 2999 + CALL WMUPDS ( IMOD, INPUTS(IMOD)%RAIR, & + JMOD, INPUTS(JMOD)%RAIR, 0. ) ! -! 2.g Assimilation data 2 +! 2.g Assimilation data 0 ! CASE (7) GOTO 2999 +! +! 2.h Assimilation data 1 +! + CASE (8) + GOTO 2999 +! +! 2.i Assimilation data 2 +! + CASE (9) + GOTO 2999 ! END SELECT ! @@ -1011,6 +1071,20 @@ ( IMOD, INPUTS(IMOD)%DT0, & JMOD, INPUTS(JMOD)%DT0, 0. ) END IF +! +! 3.c Momentum +! + CASE (5) + IF ( INPUTS(IMOD)%TU0(1) .LT. 0 ) THEN + INPUTS(IMOD)%TU0(:) = INPUTS(JMOD)%TU0(:) +!/T WRITE (MDST,9030) J, INPUTS(IMOD)%TU0(:) +!/WNX0 ICONSU = 0 +!/WNX1 ICONSU = 1 +!/WNX2 ICONSU = 2 + CALL WMUPDV ( IMOD, INPUTS(IMOD)%UX0, INPUTS(IMOD)%UY0, & + JMOD, INPUTS(JMOD)%UX0, INPUTS(JMOD)%UY0, & + 0., ICONSU ) + END IF ! END SELECT ! diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index 3a5d5d8e4..87c68ea51 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 28-Jan-2014 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 13-Jun-2005 : Origination. ( version 3.07 ) @@ -24,6 +24,7 @@ !/ 20-Aug-2010 : Fix MAPSTA/MAPST2 bug. ( version 3.14.6 ) !/ 12-Mar-2012 : Use MPI_COMM_NULL for checks. ( version 3.14 ) !/ 28-Jan-2014 : Add memory hwm to profiling. ( version 5.00 ) +!/ 22-Mar-2021 : Support for air density input ( version 7.xx ) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -74,7 +75,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 28-Jan-2014 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 13-Jun-2005 : Origination. ( version 3.07 ) @@ -91,6 +92,7 @@ !/ 20-Aug-2010 : Fix MAPSTA/MAPST2 bug sec. 9.a. ( version 3.14.6 ) !/ 12-Mar-2012 : Use MPI_COMM_NULL for checks. ( version 3.14 ) !/ 28-Jan-2014 : Add memory hwm to profiling. ( version 5.00 ) +!/ 22-Mar-2021 : Support for air density input ( version 7.xx ) !/ ! 1. Purpose : ! @@ -215,8 +217,8 @@ STIME, ETIME, NMV, TMV, AMV, DMV, & NRGRD, NRGRP, GRANK, INGRP, GRDHGH, GRDEQL, & GRDLOW, TSYNC, TMAX, TOUTP, TDATA, GRSTAT, & - FLLSTL, FLLSTI, DTRES, FLGHG1, FLGHG2, & - MAPMSK + FLLSTL, FLLSTI, FLLSTR, DTRES, FLGHG1, & + FLGHG2, MAPMSK !/MPI USE WMMDATMD, ONLY: MPI_COMM_MWAVE, MPI_COMM_GRD, & !/MPI MPI_COMM_BCT, CROOT, FBCAST !/MPRF USE WMMDATMD, ONLY: MDSP @@ -757,6 +759,7 @@ CALL W3WAVE ( I, DUMMY2, TSYNC(:,I), .FALSE., .TRUE. ) IF ( FLLSTL ) INFLAGS1(1) = .FALSE. IF ( FLLSTI ) INFLAGS1(4) = .FALSE. + IF ( FLLSTR ) INFLAGS1(6) = .FALSE. ! ! 5.b Stage data for grids with equal rank ! @@ -1032,6 +1035,7 @@ ! IF ( FLLSTL ) INFLAGS1(1) = .FALSE. IF ( FLLSTI ) INFLAGS1(4) = .FALSE. + IF ( FLLSTR ) INFLAGS1(6) = .FALSE. ! ! 9.c Update TOUPT ! diff --git a/model/ftn/ww3_gint.ftn b/model/ftn/ww3_gint.ftn index 57c5862ac..ba5dc41bb 100644 --- a/model/ftn/ww3_gint.ftn +++ b/model/ftn/ww3_gint.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH-III NOAA/NCEP | !/ | A. Chawla |SX !/ | FORTRAN 90 | -!/ | Last update : 31-Aug-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 15-Mar-2007 : Origination. ( version 3.13 ) @@ -20,6 +20,7 @@ !/ (F.Ardhuin, M.Accensi, J.H.Alves) ( version 6.05 ) !/ 31-Aug-2018 : Update groups 2,4,6,8 (S. Zieger) ( version 6.05 ) !/ 26-Jan-2021 : Added TP field (derived from FP) ( version 7.12 ) +!/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ ! 1. Purpose : ! @@ -95,7 +96,8 @@ USE W3ODATMD, ONLY : W3NOUT, W3SETO USE W3IDATMD USE W3WDATMD, ONLY : W3NDAT, W3DIMW, W3SETW - USE W3WDATMD, ONLY : WDATAS, TIME, WLV, ICE, ICEH, ICEF, UST, USTDIR, ASF + USE W3WDATMD, ONLY : WDATAS, TIME, WLV, ICE, ICEH, ICEF, & + UST, USTDIR, ASF, RHOAIR USE W3SERVMD, ONLY : ITRACE, NEXTLN, EXTCDE !/S USE W3SERVMD, ONLY : STRACE USE W3ARRYMD, ONLY : PRTBLK @@ -907,13 +909,14 @@ !/ | WAVEWATCH-III NOAA/NCEP | !/ | A. Chawla | !/ | FORTRAN 90 | -!/ | Last update : 27-Aug-2015 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 09-Jul-2009 : Original code ( version 3.14 ) !/ 21-Feb-2013 : Modified to new output structure ( version 4.11 ) !/ 30-Apr-2014 : Add group 3 ( version 5.00 ) !/ 27-Aug-2015 : ice thick. and floe added as output ( version 5.10 ) +!/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ ! 1. Purpose : ! @@ -970,13 +973,14 @@ ! Local group 1 variables REAL :: DWAUX, CXAUX, CYAUX, UAAUX, UDAUX, ASAUX, & WLVAUX, ICEAUX, ICEHAUX, ICEFAUX, BERGAUX, & - SED_D50AUX, SUMWT1(NOGE(1)) + SED_D50AUX, RHOAIRAUX, TAUAAUX, TAUADIRAUX, & + SUMWT1(NOGE(1)) ! Local group 2 variables REAL :: HSAUX, WLMAUX, T02AUX, T0M1AUX, T01AUX, & FP0AUX, THMAUX1, THMAUX2, THSAUX, THP0AUX1, & THP0AUX2, HSIGAUX, STMAXEAUX,STMAXDAUX, & HMAXEAUX, HCMAXEAUX, HMAXDAUX, HCMAXDAUX, & - WBTAUX, SUMWT2(NOGE(2)) + WBTAUX, WNMEANAUX, SUMWT2(NOGE(2)) ! Local group 3 variables REAL :: EFAUX(E3DF(2,1):E3DF(3,1)), & TH1MAUX(E3DF(2,2):E3DF(3,2)), & @@ -1011,6 +1015,7 @@ BHDAUX, PHIOCAUX, TUSXAUX, TUSYAUX, USSXAUX, & USSYAUX, PRMSAUX, TPMSAUX, SUMWT6(NOGE(6)), & TAUICEAUX(2), PHICEAUX, & + TAUOCXAUX, TAUOCYAUX, & US3DAUX(2*NK), SUMWT68(2*NK), & P2SMSAUX(P2MSF(2):P2MSF(3)), & SUMWT69(P2MSF(2):P2MSF(3)), & @@ -1042,6 +1047,9 @@ WLV = UNDEF ICE = UNDEF BERG = UNDEF + RHOAIR = UNDEF + TAUA = UNDEF + TAUADIR = UNDEF !/BT4 SED_D50 = UNDEF !/IS2 ICEH = UNDEF !/IS2 ICEF = UNDEF @@ -1065,6 +1073,7 @@ HMAXD = UNDEF HCMAXD = UNDEF WBT = UNDEF + WNMEAN = UNDEF ! ! Group 3 variables ! @@ -1121,6 +1130,8 @@ TUSY = UNDEF USSX = UNDEF USSY = UNDEF + TAUOCX = UNDEF + TAUOCY = UNDEF PRMS = UNDEF TPMS = UNDEF IF ( US3DF(1).GT.0 ) THEN @@ -1273,6 +1284,9 @@ SED_D50AUX = UNDEF ICEHAUX = UNDEF ICEFAUX = UNDEF + RHOAIRAUX = UNDEF + TAUAAUX = UNDEF + TAUADIRAUX = UNDEF SUMWT1 = 0 ! ! Group 2 variables @@ -1296,6 +1310,7 @@ HMAXDAUX = UNDEF HCMAXDAUX = UNDEF WBTAUX = UNDEF + WNMEANAUX = UNDEF SUMWT2 = 0 ! ! Group 3 variables @@ -1363,6 +1378,8 @@ TUSYAUX = UNDEF USSXAUX = UNDEF USSYAUX = UNDEF + TAUOCXAUX = UNDEF + TAUOCYAUX = UNDEF PRMSAUX = UNDEF TPMSAUX = UNDEF P2SMSAUX = UNDEF @@ -1495,9 +1512,33 @@ END IF END IF ! -!/BT4 IF ( FLOGRD(1,8) ) THEN + IF ( FLOGRD(1,8) ) THEN + IF ( WADATS(IGRID)%TAUA(GSEA) .NE. UNDEF ) THEN + SUMWT1(8) = SUMWT1(8) + WT + IF ( TAUAAUX .EQ. UNDEF ) THEN + TAUAAUX = WADATS(IGRID)%TAUA(GSEA)*WT + TAUADIRAUX = WADATS(IGRID)%TAUADIR(GSEA)*WT + ELSE + TAUAAUX = TAUAAUX + WADATS(IGRID)%TAUA(GSEA)*WT + TAUADIRAUX = TAUADIRAUX + WADATS(IGRID)%TAUADIR(GSEA)*WT + END IF + END IF + END IF +! + IF ( FLOGRD(1,9) .AND. ACTIVE ) THEN + IF ( WDATAS(IGRID)%RHOAIR(GSEA) .NE. UNDEF ) THEN + SUMWT1(9) = SUMWT1(9) + WT + IF ( RHOAIRAUX .EQ. UNDEF ) THEN + RHOAIRAUX = WDATAS(IGRID)%RHOAIR(GSEA)*WT + ELSE + RHOAIRAUX = RHOAIRAUX + WDATAS(IGRID)%RHOAIR(GSEA)*WT + END IF + END IF + END IF +! +!/BT4 IF ( FLOGRD(1,10) ) THEN !/BT4 IF ( GRIDS(IGRID)%SED_D50(GSEA) .NE. UNDEF ) THEN -!/BT4 SUMWT1(8) = SUMWT1(8) + WT +!/BT4 SUMWT1(10) = SUMWT1(10) + WT !/BT4 IF ( SED_D50AUX .EQ. UNDEF ) THEN !/BT4 SED_D50AUX = GRIDS(IGRID)%SED_D50(GSEA)*WT !/BT4 ELSE @@ -1506,9 +1547,9 @@ !/BT4 END IF !/BT4 END IF ! -!/IS2 IF ( FLOGRD(1,9) ) THEN +!/IS2 IF ( FLOGRD(1,11) ) THEN !/IS2 IF ( WDATAS(IGRID)%ICEH(GSEA) .NE. UNDEF ) THEN -!/IS2 SUMWT1(9) = SUMWT1(9) + WT +!/IS2 SUMWT1(11) = SUMWT1(11) + WT !/IS2 IF (ICEHAUX .EQ. UNDEF) THEN !/IS2 ICEHAUX = WDATAS(IGRID)%ICEH(GSEA)*WT !/IS2 ELSE @@ -1517,9 +1558,9 @@ !/IS2 END IF !/IS2 END IF ! -!/IS2 IF ( FLOGRD(1,10) ) THEN +!/IS2 IF ( FLOGRD(1,12) ) THEN !/IS2 IF ( WDATAS(IGRID)%ICEF(GSEA) .NE. UNDEF ) THEN -!/IS2 SUMWT1(10) = SUMWT1(10) + WT +!/IS2 SUMWT1(12) = SUMWT1(12) + WT !/IS2 IF (ICEFAUX .EQ. UNDEF) THEN !/IS2 ICEFAUX = WDATAS(IGRID)%ICEF(GSEA)*WT !/IS2 ELSE @@ -1699,6 +1740,14 @@ WBTAUX = WBTAUX + WADATS(IGRID)%WBT(GSEA)*WT END IF END IF +! + IF ( FLOGRD(2,19) .AND. ACTIVE ) THEN + IF ( WADATS(IGRID)%WNMEAN(GSEA) .NE. UNDEF ) THEN + SUMWT2(19) = SUMWT2(19) + WT + IF ( WNMEANAUX .EQ. UNDEF ) WNMEANAUX = 0. + WNMEANAUX = WNMEANAUX + WADATS(IGRID)%WNMEAN(GSEA)*WT + END IF + END IF ! ! Group 3 variables ! @@ -2210,6 +2259,19 @@ END IF END DO END IF +! + IF ( FLOGRD(6,13) .AND. ACTIVE ) THEN + IF ( WADATS(IGRID)%TAUOCX(GSEA) .NE. UNDEF ) THEN + SUMWT6(13) = SUMWT6(13) + WT + IF ( TAUOCXAUX .EQ. UNDEF ) THEN + TAUOCXAUX = WADATS(IGRID)%TAUOCX(GSEA)*WT + TAUOCYAUX = WADATS(IGRID)%TAUOCY(GSEA)*WT + ELSE + TAUOCXAUX = TAUOCXAUX + WADATS(IGRID)%TAUOCX(GSEA)*WT + TAUOCYAUX = TAUOCYAUX + WADATS(IGRID)%TAUOCY(GSEA)*WT + END IF + END IF + END IF ! ! Group 7 variables ! @@ -2411,9 +2473,30 @@ BERG(ISEA) = BERG(ISEA) + BERGAUX / REAL( SUMGRD ) END IF END IF +! + IF ( TAUAAUX .NE. UNDEF ) THEN + TAUAAUX = TAUAAUX / SUMWT1(8) + TAUADIRAUX = TAUADIRAUX / SUMWT1(8) + IF ( TAUA(ISEA) .EQ. UNDEF ) THEN + TAUA(ISEA) = TAUAAUX / REAL( SUMGRD ) + TAUADIR(ISEA) = TAUADIRAUX / REAL( SUMGRD ) + ELSE + TAUA(ISEA) = TAUA(ISEA) + TAUAAUX / REAL( SUMGRD ) + TAUADIR(ISEA) = TAUADIR(ISEA) + TAUADIRAUX / REAL( SUMGRD ) + END IF + END IF +! + IF ( RHOAIRAUX .NE. UNDEF ) THEN + RHOAIRAUX = RHOAIRAUX / SUMWT1(9) + IF ( RHOAIR(ISEA) .EQ. UNDEF ) THEN + RHOAIR(ISEA) = RHOAIRAUX / REAL( SUMGRD ) + ELSE + RHOAIR(ISEA) = RHOAIR(ISEA) + RHOAIRAUX / REAL( SUMGRD ) + END IF + END IF ! !/BT4 IF ( SED_D50AUX .NE. UNDEF ) THEN -!/BT4 SED_D50AUX = SED_D50AUX / SUMWT1(8) +!/BT4 SED_D50AUX = SED_D50AUX / SUMWT1(10) !/BT4 IF ( SED_D50(ISEA) .EQ. UNDEF ) THEN !/BT4 SED_D50(ISEA) = SED_D50AUX / REAL( SUMGRD ) !/BT4 ELSE @@ -2422,7 +2505,7 @@ !/BT4 END IF ! !/IS2 IF ( ICEHAUX .NE. UNDEF ) THEN -!/IS2 ICEHAUX = ICEHAUX / SUMWT1(9) +!/IS2 ICEHAUX = ICEHAUX / SUMWT1(11) !/IS2 IF ( ICEH(ISEA) .EQ. UNDEF ) THEN !/IS2 ICEH(ISEA) = ICEHAUX / REAL( SUMGRD ) !/IS2 ELSE @@ -2431,7 +2514,7 @@ !/IS2 END IF ! !/IS2 IF ( ICEFAUX .NE. UNDEF ) THEN -!/IS2 ICEFAUX = ICEFAUX / SUMWT1(10) +!/IS2 ICEFAUX = ICEFAUX / SUMWT1(12) !/IS2 IF ( ICEF(ISEA) .EQ. UNDEF ) THEN !/IS2 ICEF(ISEA) = ICEFAUX / REAL( SUMGRD ) !/IS2 ELSE @@ -2579,6 +2662,12 @@ WBT(ISEA) = WBT(ISEA) + & WBTAUX / REAL( SUMWT2(17)+SUMGRD ) END IF +! + IF ( WNMEANAUX .NE. UNDEF ) THEN + IF ( WNMEAN(ISEA) .EQ. UNDEF ) WNMEAN(ISEA) = 0. + WNMEAN(ISEA) = WNMEAN(ISEA) + & + WNMEANAUX / REAL( SUMWT2(19)+SUMGRD ) + END IF ! ! Group 3 variables ! @@ -3033,6 +3122,18 @@ END IF END DO END IF +! + IF ( TAUOCXAUX .NE. UNDEF ) THEN + TAUOCXAUX = TAUOCXAUX / SUMWT6(13) + TAUOCYAUX = TAUOCYAUX / SUMWT6(13) + IF ( TAUOCX(ISEA) .EQ. UNDEF ) THEN + TAUOCX(ISEA) = TAUOCXAUX / REAL( SUMGRD ) + TAUOCY(ISEA) = TAUOCYAUX / REAL( SUMGRD ) + ELSE + TAUOCX(ISEA) = TAUOCX(ISEA) + TAUOCXAUX / REAL( SUMGRD ) + TAUOCY(ISEA) = TAUOCY(ISEA) + TAUOCYAUX / REAL( SUMGRD ) + END IF + END IF ! ! Group 7 variables ! diff --git a/model/ftn/ww3_grib.ftn b/model/ftn/ww3_grib.ftn index a4e88cceb..9d705e5b9 100644 --- a/model/ftn/ww3_grib.ftn +++ b/model/ftn/ww3_grib.ftn @@ -8,7 +8,7 @@ !/ | A. Chawla | !/ | J.-H. Alves | !/ | FORTRAN 90 | -!/ | Last update : 26-Jul-2018 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 01-Nov-1999 : Final FORTRAN 77 ( version 1.18 + error fix ) @@ -35,6 +35,7 @@ !/ (J.H. Alves) !/ 26-Jul-2018 : Adding polar stereographic grid ( version 6.05 ) !/ (J.H. Alves) +!/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -123,7 +124,7 @@ USE W3TIMEMD, ONLY: STME21, TICK21, DSEC21 ! USE W3GDATMD - USE W3WDATMD, ONLY: TIME, WLV, ICE, UST, USTDIR + USE W3WDATMD, ONLY: TIME, WLV, ICE, UST, USTDIR, RHOAIR USE W3ADATMD USE W3ODATMD, ONLY: NDSE, NDST, NDSO, NOGRP, NGRPP, IDOUT, UNDEF,& FLOGRD, FNMPRE, NOSWLL, NOGE, FLOGD @@ -891,7 +892,7 @@ !/ | H. L. Tolman | !/ | A. Chawla | !/ | FORTRAN 90 | -!/ | Last update : 16-Jul-2007 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 10-Jun-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -902,6 +903,7 @@ !/ 18-May-2007 : Update GRIB1 for partitioning. ( version 3.11 ) !/ 16-Jul-2007 : Adding GRIB2 capability ( version 3.11 ) !/ (A. Chawla) +!/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1129,6 +1131,49 @@ !/NCEP2 KPDS(1) = 2 CALL W3S2XY ( NSEA, NSEA, NX, NY, ICE , MAPSF, X1 ) ! +! Atmospheric momentum +! + ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 8 ) THEN + FLTWO = .TRUE. +!/NCEP1 KPDS(5) = 032 +!/NCEP2 KPDS(2) = 1 +!/NCEP2 KPDS(1) = 2 +!/NCEP2 LISTSEC0(1) = 0 +!/RTD ! Rotate x,y vector back to standard pole +!/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUA, TAUADIR, AnglD) + CALL W3S2XY ( NSEA, NSEA, NX, NY, TAUA(1:NSEA) & + , MAPSF, XX ) + CALL W3S2XY ( NSEA, NSEA, NX, NY, TAUADIR(1:NSEA) & + , MAPSF, XY ) + DO ISEA=1, NSEA + IF (TAUA(ISEA) .NE. UNDEF) THEN + UABS = SQRT(TAUA(ISEA)**2+TAUADIR(ISEA)**2) + IF ( UABS .GT. 0.001 ) THEN + TAUADIR(ISEA) = MOD ( 630. - & + RADE*ATAN2(TAUADIR(ISEA),TAUA(ISEA)) , 360. ) + ELSE + TAUADIR(ISEA) = 0. + END IF + ELSE + UABS = UNDEF + TAUADIR(ISEA) = UNDEF + END IF + TAUA(ISEA) = UABS + END DO + CALL W3S2XY ( NSEA, NSEA, NX, NY, TAUA(1:NSEA) & + , MAPSF, X1 ) + CALL W3S2XY ( NSEA, NSEA, NX, NY, TAUADIR(1:NSEA) & + , MAPSF, X2 ) +! +! Air density +! + ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 9 ) THEN + FLONE = .TRUE. +!/NCEP1 KPDS(5) = 091 +!/NCEP2 KPDS(2) = 0 +!/NCEP2 KPDS(1) = 2 + CALL W3S2XY ( NSEA, NSEA, NX, NY, RHOAIR, MAPSF, X1 ) +! ! Significant wave height ! ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 1 ) THEN @@ -1233,6 +1278,14 @@ END DO CALL W3S2XY ( NSEA, NSEA, NX, NY, THP0 , MAPSF, X1 ) ! +! Mean wave number +! + ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 19 ) THEN + FLONE = .TRUE. +!/NCEP1 KPDS(5) = -1 +!/NCEP2 KPDS(2) = 255 + CALL W3S2XY ( NSEA, NSEA, NX, NY, WNMEAN, MAPSF, X1 ) +! ! Partitioned wave height ! ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 1 ) THEN diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 89ff19351..e4669e2da 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -8,7 +8,7 @@ !/ | F. Ardhuin | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 26-Jan-2021 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 17-Mar-2010 : Creation ( version 3.14_SHOM ) @@ -41,6 +41,7 @@ !/ 09-Dec-2020 : Set fixed values for VARID indices ( version 7.12 ) !/ 26-Jan-2021 : Added TP output (derived from fp) ( version 7.12 ) !/ and alternative dir/mag output. +!/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -146,24 +147,25 @@ !/DEBUG USE W3ODATMD, only : IAPROC !/ USE W3GDATMD - USE W3WDATMD, ONLY: TIME, WLV, ICE, ICEH, ICEF, BERG, UST, USTDIR + USE W3WDATMD, ONLY: TIME, WLV, ICE, ICEH, ICEF, BERG, & + UST, USTDIR, RHOAIR !/SETUP USE W3WDATMD, ONLY: ZETA_SETUP USE W3ADATMD, ONLY: DW, UA, UD, AS, CX, CY, HS, WLM, T0M1, THM, & THS, FP0, THP0, DTDYN, FCUT, & ABA, ABD, UBA, UBD, SXX, SYY, SXY, USERO, & PHS, PTP, PLP, PDIR, PSI, PWS, PWST, PNR, & - PTM1, PT1, PT2, PEP, & + PTM1, PT1, PT2, PEP, TAUOCX, TAUOCY, & PTHP0, PQP, PSW, PPE, PGW, QP, & TAUOX, TAUOY, TAUWIX, & TAUWIY, PHIAW, PHIOC, TUSX, TUSY, PRMS, TPMS,& USSX, USSY, MSSX, MSSY, MSSD, MSCX, MSCY, & - MSCD, CHARN, TWS, & + MSCD, CHARN, TWS, TAUA, TAUADIR, & TAUWNX, TAUWNY, BHD, T02, HSIG, CGE, & T01, BEDFORMS, WHITECAP, TAUBBL, PHIBBL, & CFLTHMAX, CFLXYMAX, CFLKMAX, TAUICE, PHICE, & STMAXE, STMAXD, HMAXE, HCMAXE, HMAXD, HCMAXD,& P2SMS, EF, US3D, TH1M, STH1M, TH2M, STH2M, & - WN, USSP, WBT + WN, USSP, WBT, WNMEAN USE W3ODATMD, ONLY: NDSO, NDSE, SCREEN, NOGRP, NGRPP, IDOUT, & UNDEF, FLOGRD, FNMPRE, NOSWLL, NOGE ! @@ -715,7 +717,7 @@ !/ | F. Ardhuin | !/ | M. Accensi | !/ | FORTRAN 90 | -!/ | Last update : 26-Jan-2021 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 17-Mar-2010 : Creation ( version 3.14_SHOM ) @@ -730,6 +732,7 @@ !/ 09-Dec-2020 : Set fixed values for VARID indices ( version 7.12 ) !/ 26-Jan-2021 : Added TP output (derived from fp) ( version 7.12 ) !/ and alternative dir/mag output. +!/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1024,7 +1027,7 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, DW(1:NSEA) & , MAPSF, X1 ) ENDIF - +! ! Surface current ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 2 ) THEN !! Note - CX and CY read in from .ww3 file are X-Y vectors @@ -1093,7 +1096,7 @@ ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, ICE(1:NSEA), MAPSF, X1 ) ENDIF - +! ! Icebergs_damping ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 7 ) THEN IF( SMCGRD ) THEN @@ -1102,20 +1105,45 @@ CALL W3S2XY ( NSEA, NSEA, NX+1, NY, BERG , MAPSF, X1 ) ENDIF WHERE ( X1.NE.UNDEF) X1 = X1*0.1 +! + ! Atmospheric momentum + ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 8 ) THEN + !! Note - TAUA and TAUADIR read in from .ww3 file are TAUAX,TAUAY +!/RTD ! Rotate x,y vector back to standard pole +!/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUA(1:NSEA), TAUADIR(1:NSEA), AnglD) + + IF( SMCGRD ) THEN +!/SMC CALL W3S2XY_SMC( TAUA (1:NSEA), XX ) +!/SMC CALL W3S2XY_SMC( TAUADIR(1:NSEA), XY ) + ELSE ! IF(SMCGRD) + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUA(1:NSEA) & + , MAPSF, XX ) + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUADIR(1:NSEA) & + , MAPSF, XY ) + ENDIF + NFIELD=2 +! + ! Air density + ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 9 ) THEN + IF( SMCGRD ) THEN +!/SMC CALL W3S2XY_SMC(RHOAIR, X1) + ELSE + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, RHOAIR, MAPSF, X1 ) + ENDIF ! !/BT4 ! Krumbein phi scale -!/BT4 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 8 ) THEN +!/BT4 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN !/BT4 CALL W3S2XY ( NSEA, NSEA, NX+1, NY, SED_D50 , MAPSF, X1 ) !/BT4 WHERE ( X1.NE.UNDEF) X1 = -LOG(X1/0.001)/LOG2 !/BT4 NFIELD=1 ! !/IS2 ! Ice thickness -!/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 9 ) THEN +!/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 11 ) THEN !/IS2 CALL W3S2XY (NSEA, NSEA, NX+1, NY, ICEH(1:NSEA), MAPSF, X1 ) !/IS2 NFIELD=1 ! !/IS2 ! Maximum ice floe diameter -!/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN +!/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 12 ) THEN !/IS2 CALL W3S2XY (NSEA, NSEA, NX+1, NY, ICEF(1:NSEA), MAPSF, X1 ) !/IS2 NFIELD=1 @@ -1284,6 +1312,14 @@ ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, AUX1, MAPSF, X1 ) ENDIF +! + ! Mean wave number + ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 19 ) THEN + IF( SMCGRD ) THEN +!/SMC CALL W3S2XY_SMC( WNMEAN, X1 ) + ELSE + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WNMEAN, MAPSF, X1 ) + END IF ! ! Wave elevation spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 1 ) THEN @@ -1917,6 +1953,21 @@ XXK(:,:,IK)=XX XYK(:,:,IK)=XY END DO +! + ! Total momentum to the ocean + ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 13 ) THEN +!/RTD ! Rotate x,y vector back to standard pole +!/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUOCX(1:NSEA), TAUOCY(1:NSEA), AnglD) + IF( SMCGRD ) THEN +!/SMC CALL W3S2XY_SMC( TAUOCX(1:NSEA), XX ) +!/SMC CALL W3S2XY_SMC( TAUOCY(1:NSEA), XY ) + ELSE + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUOCX(1:NSEA) & + , MAPSF, XX ) + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUOCY(1:NSEA) & + , MAPSF, XY ) + ENDIF ! SMCGRD + NFIELD=2 ! ! RMS of bottom displacement amplitude ELSE IF ( IFI .EQ. 7 .AND. IFJ .EQ. 1 ) THEN diff --git a/model/ftn/ww3_outf.ftn b/model/ftn/ww3_outf.ftn index 6348987f6..a463cff19 100644 --- a/model/ftn/ww3_outf.ftn +++ b/model/ftn/ww3_outf.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 26-Jan-2021 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 19-Oct-1998 : Final FORTRAN 77 ( version 1.18 ) @@ -35,6 +35,7 @@ !/ 27-Aug-2015 : ICEH and ICEF added as output ( version 5.10 ) !/ 12-Sep-2018 : Added new partitioned output fields ( version 6.06 ) !/ 26-Jan-2021 : Added TP field (derived from FP0) ( version 7.12 ) +!/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -122,7 +123,7 @@ THS, FP0, THP0, FP1, THP1, DTDYN, FCUT, & ABA, ABD, UBA, UBD, SXX, SYY, SXY, USERO, & PHS, PTP, PLP, PDIR, PSI, PWS, PWST, PNR, & - PTM1, PT1, PT2, PEP, & + PTM1, PT1, PT2, PEP, TAUOCX, TAUOCY, & PTHP0, PQP, PSW, PPE, PGW, QP, & TAUOX, TAUOY, TAUWIX,BHD, & TAUWIY, PHIAW, PHIOC, TUSX, TUSY, PRMS, TPMS,& @@ -130,7 +131,8 @@ TAUWNX, TAUWNY, TAUBBL, PHIBBL, CFLXYMAX, & CFLTHMAX, CFLKMAX, BEDFORMS, WHITECAP, T02, & CGE, T01, HSIG, STMAXE, STMAXD, HMAXE, & - HCMAXE, HMAXD, HCMAXD, MSSD, MSCD, WBT + HCMAXE, HMAXD, HCMAXD, MSSD, MSCD, WBT, & + WNMEAN USE W3ODATMD, ONLY: NDSO, NDSE, NDST, NOGRP, NGRPP, IDOUT, & UNDEF, FLOGRD, FNMPRE, NOSWLL, NOGE ! @@ -494,7 +496,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 26-Jan-2021 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 26-Sep-1997 : Final FORTRAN 77 ( version 1.18 ) @@ -516,6 +518,7 @@ !/ 25-Dec-2012 : New structure of output fields. ( version 4.11 ) !/ 25-Jun-2013 : Add type 4 sea point text output. ( version 4.11 ) !/ 26-Jan-2021 : Added TP field (derived from FP0) ( version 7.12 ) +!/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ ! 1. Purpose : ! @@ -1100,6 +1103,17 @@ ELSE CALL W3S2XY ( NSEA, NSEA, NX+1, NY, AUX, MAPSF, X1) ENDIF +! + ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 19 ) THEN + FLONE = .TRUE. + FSC = 0.001 + UNITS = 'm-1' + ENAME = '.wnm' + IF ( ITYPE .EQ. 4 ) THEN + XS1 = WNMEAN + ELSE + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WNMEAN, MAPSF, X1) + ENDIF ! ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 1 ) THEN FLONE = .TRUE. @@ -1725,6 +1739,49 @@ CALL W3S2XY ( NSEA, NSEA, NX+1,NY,PRMS,MAPSF, X1 ) CALL W3S2XY ( NSEA, NSEA, NX+1,NY,TPMS,MAPSF, X2 ) ENDIF +! + ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 13 ) THEN + IF ( VECTOR ) THEN + FLTWO = .TRUE. + ELSE + FLDIR = .TRUE. + END IF + FSC = 1.E-6 + UNITS = 'm2 s-2' + ENAME = '.toc' +!/RTD ! Rotate x,y vector back to standard pole +!/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUOCX, TAUOCY, AnglD) + IF ( ITYPE .EQ. 4 ) THEN + XS1 = TAUOCX(1:NSEA) + XS2 = TAUOCY(1:NSEA) + ELSE + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUOCX(1:NSEA) & + , MAPSF, XX ) + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUOCY(1:NSEA) & + , MAPSF, XY ) + ENDIF + DO ISEA=1, NSEA + UABS = SQRT(TAUOCX(ISEA)**2+TAUOCY(ISEA)**2) + IF ( TAUOCX(ISEA) .EQ. UNDEF ) THEN + TAUOCY(ISEA) = UNDEF + UABS = UNDEF + ELSE IF ( UABS .GT. 1.E-8 ) THEN + TAUOCY(ISEA) = MOD ( 630. - & + RADE*ATAN2(TAUOCY(ISEA),TAUOCX(ISEA)) , 360. ) + ELSE + TAUOCY(ISEA) = UNDEF + END IF + TAUOCX(ISEA) = UABS + END DO + IF ( ITYPE .EQ. 4 ) THEN + XS3 = TAUOCX(1:NSEA) + XS4 = TAUOCY(1:NSEA) + ELSE + CALL W3S2XY (NSEA,NSEA,NX+1,NY, TAUOCX(1:NSEA) & + , MAPSF, X1 ) + CALL W3S2XY (NSEA,NSEA,NX+1,NY, TAUOCY(1:NSEA) & + , MAPSF, X2 ) + ENDIF ! ELSE IF ( IFI .EQ. 7 .AND. IFJ .EQ. 1 ) THEN IF ( VECTOR ) THEN diff --git a/model/ftn/ww3_prep.ftn b/model/ftn/ww3_prep.ftn index 11e5221df..613b0ee4f 100644 --- a/model/ftn/ww3_prep.ftn +++ b/model/ftn/ww3_prep.ftn @@ -7,7 +7,7 @@ !/ | H. L. Tolman | !/ | A. Chawla | !/ | FORTRAN 90 | -!/ | Last update : 11-Nov-2013 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 14-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -39,6 +39,7 @@ !/ 11-Nov-2013 : Allows for input binary files to be of WAVEWATCH !/ type (i.e. accounts for the header) ( version 4.13 ) !/ 20-Jan-2017 : Update to new W3GSRUMD APIs ( version 6.02 ) +!/ 22-Mar-2021 : Add momentum and air density ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -47,9 +48,9 @@ !/ ! 1. Purpose : ! -! Pre-processing of the input water level, current, wind and ice -! fields as well as assimilation data for the generic shell W3SHEL -! (ww3_shel.ftn). +! Pre-processing of the input water level, current, wind, ice +! fields, momentum and air density, as well as assimilation data +! for the generic shell W3SHEL (ww3_shel.ftn). ! ! 2. Method : ! @@ -247,7 +248,7 @@ CHARACTER :: COMSTR*1, IDFLD*3, IDTYPE*2, & IDTIME*23, FROMLL*4, FORMLL*16, & NAMELL*65, FROMF*4, NAMEF*65 - CHARACTER(LEN=12) :: IDSTR1(-7:5) + CHARACTER(LEN=12) :: IDSTR1(-7:7) CHARACTER(LEN=15) :: IDSTR3(3) CHARACTER(LEN=32) :: FORMT(2), FORMF(2) CHARACTER(LEN=20) :: IDSTR2(5) @@ -267,7 +268,8 @@ 'mud thkness ' , 'mud viscos. ' , & 'ice ' , 'water levels' , & 'winds ' , 'currents ' , & - 'data ' / + 'data ' , 'momentum ' , & + 'air density ' / DATA IDSTR2 / 'pre-processed file ' , 'long.-lat. grid ' , & 'grid from file (1) ' , 'grid from file (2) ' , & 'data (assimilation) ' / @@ -375,6 +377,10 @@ IFLD = 4 ELSE IF ( IDFLD.EQ.'DAT' ) THEN IFLD = 5 + ELSE IF ( IDFLD.EQ.'TAU' ) THEN + IFLD = 6 + ELSE IF ( IDFLD.EQ.'RHO' ) THEN + IFLD = 7 ELSE WRITE (NDSE,1030) IDFLD CALL EXTCDE ( 1 ) @@ -406,6 +412,9 @@ !/WNT2 IF (IFLD.EQ.3) WRITE (NDSO,2930) !/CRT1 IF (IFLD.EQ.4) WRITE (NDSO,1930) !/CRT2 IF (IFLD.EQ.4) WRITE (NDSO,2930) +!/WNT0 IF (IFLD.EQ.6) WRITE (NDSO,1930) +!/WNT1 IF (IFLD.EQ.6) WRITE (NDSO,1930) +!/WNT2 IF (IFLD.EQ.6) WRITE (NDSO,2930) END IF IF ( FLBERG ) WRITE (NDSO,938) IF ( FLSTAB ) WRITE (NDSO,939) @@ -1252,6 +1261,27 @@ !/CRT2 END DO !/CRT2 END IF ! +! ... Momentum, correct for velocity or energy conservation +! +!/WNT1 IF (IFLD.EQ.6) THEN +!/WNT1 DO IY=1,NY +!/WNT1 DO IX=1,NX +!/WNT1 FACTOR = MIN ( 1.5 , A2(IX,IY)/A1(IX,IY) ) +!/WNT1 FX(IX,IY) = FACTOR * FX(IX,IY) +!/WNT1 FY(IX,IY) = FACTOR * FY(IX,IY) +!/WNT1 END DO +!/WNT1 END DO +!/WNT1 END IF +! +!/WNT2 IF (IFLD.EQ.6) THEN +!/WNT2 DO IY=1,NY +!/WNT2 DO IX=1,NX +!/WNT2 FACTOR = MIN ( 1.5 , A3(IX,IY)/A1(IX,IY) ) +!/WNT2 FX(IX,IY) = FACTOR * FX(IX,IY) +!/WNT2 FY(IX,IY) = FACTOR * FY(IX,IY) +!/WNT2 END DO +!/WNT2 END DO +!/WNT2 END IF END IF ! END IF diff --git a/model/ftn/ww3_prnc.ftn b/model/ftn/ww3_prnc.ftn index 53aa81379..ea3ca3620 100644 --- a/model/ftn/ww3_prnc.ftn +++ b/model/ftn/ww3_prnc.ftn @@ -7,7 +7,7 @@ !/ | M. Accensi | !/ | F. Ardhuin | !/ | FORTRAN 90 | -!/ | Last update : 21-Apr-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 01-Jan-2011 : Creation ( version 4.01 ) @@ -26,6 +26,7 @@ !/ 04-Jan-2018 : Add namelist feature ( version 6.04 ) !/ 21-Apr-2020 : Correction in MPI for tide ( version 7.XX ) !/ 21-Apr-2020 : Correction in scale factor ( version 7.XX ) +!/ 22-Mar-2021 : Add momentum and air density ( version 7.xx ) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -34,8 +35,9 @@ !/ ! 1. Purpose : ! -! Pre-processing of the input water level, current, wind and ice -! fields as well as assimilation data ... from NetCDF input +! Pre-processing of the input water level, current, wind, ice +! fields, momentum and air density, as well as assimilation data +! ... from NetCDF input ! ! 2. Method : ! @@ -265,7 +267,7 @@ CHARACTER :: COMSTR*1, IDFLD*3, IDTYPE*2, & IDTIME*23, FROMLL*4, FORMLL*16, & NAMELL*80, NAMEF*80, IDTIME2*23 - CHARACTER*14 :: IDSTR1(-7:5) + CHARACTER*14 :: IDSTR1(-7:7) CHARACTER*15 :: IDSTR3(3) CHARACTER*32 :: FORMT(2), FORMF(2) CHARACTER*20 :: IDSTR2(6) @@ -312,10 +314,11 @@ DATA IDSTR1 / 'ice thickness ' , 'ice viscosity' , & 'ice density ' , 'ice modulus ' , & 'ice flow diam.' , 'mud density ' , & - 'mud thickness ', 'mud viscosity ' , & + 'mud thickness ' , 'mud viscosity ', & 'ice conc. ' , 'water levels ' , & 'winds ' , 'currents ' , & - 'data ' / + 'data ' , 'momentum ' , & + 'air density ' / DATA IDSTR2 / 'pre-processed file ' , 'long.-lat. grid ' , & 'grid from file (1) ' , 'grid from file (2) ' , & 'data (assimilation) ' , 'pre-pro. file + tide' / @@ -472,6 +475,14 @@ IFLD = 5 ITYPE = 5 NFIELDS = 1 + ELSE IF (NML_FORCING%FIELD%ATM_MOMENTUM) THEN + IDFLD = 'TAU' + IFLD = 6 + NFIELDS = 2 + ELSE IF (NML_FORCING%FIELD%AIR_DENSITY) THEN + IDFLD = 'RHO' + IFLD = 7 + NFIELDS = 1 ELSE GOTO 810 END IF ! NML_FORCING @@ -568,6 +579,10 @@ IFLD = 4 ELSE IF ( IDFLD.EQ.'DAT' ) THEN IFLD = 5 + ELSE IF ( IDFLD.EQ.'TAU' ) THEN + IFLD = 6 + ELSE IF ( IDFLD.EQ.'RHO' ) THEN + IFLD = 7 ELSE WRITE (NDSE,1030) IDFLD CALL EXTCDE ( 30 ) @@ -652,6 +667,9 @@ !/WNT2 IF ( IAPROC .EQ. NAPOUT .AND.IFLD.EQ.3) WRITE (NDSO,2930) !/CRT1 IF ( IAPROC .EQ. NAPOUT .AND.IFLD.EQ.4) WRITE (NDSO,1930) !/CRT2 IF ( IAPROC .EQ. NAPOUT .AND.IFLD.EQ.4) WRITE (NDSO,2930) +!/WNT0 IF ( IAPROC .EQ. NAPOUT .AND.IFLD.EQ.6) WRITE (NDSO,1930) +!/WNT1 IF ( IAPROC .EQ. NAPOUT .AND.IFLD.EQ.6) WRITE (NDSO,1930) +!/WNT2 IF ( IAPROC .EQ. NAPOUT .AND.IFLD.EQ.6) WRITE (NDSO,2930) END IF IF (FLGNML) THEN IF(TIMESTART(1).NE.19000101 .OR. TIMESTART(2).NE.0) THEN @@ -1354,7 +1372,7 @@ IF (IRET .NE. 0) SCFAC(1) = 1.0 IRET = NF90_GET_ATT(NCID,VARIDF(1),'add_offset',ADDOFF(1)) IF (IRET .NE. 0) ADDOFF(1) = 0.0 - IF ( NFCOMP.EQ.2 .OR. IFLD.GE.3 .OR. FLBERG ) THEN + IF ( NFCOMP.EQ.2 .OR. (IFLD.GE.3 .AND. IFLD.NE.7) .OR. FLBERG ) THEN IRET = NF90_GET_ATT(NCID,VARIDF(2),'scale_factor',SCFAC(2)) IF (IRET .NE. 0) SCFAC(2) = 1.0 IRET = NF90_GET_ATT(NCID,VARIDF(2),'add_offset',ADDOFF(1)) @@ -1578,7 +1596,7 @@ IF (IRET.NE.0 ) XCFAC = 1.0 IRET = NF90_GET_ATT(NCID,VARIDF(1),'add_offset',XCOFF) IF (IRET.NE.0 ) XCOFF = 0.0 - IF ( NFCOMP.EQ.2 .OR. IFLD.GE.3 .OR. FLBERG ) THEN + IF ( NFCOMP.EQ.2 .OR. (IFLD.GE.3 .AND. IFLD.NE.7) .OR. FLBERG ) THEN IRET = NF90_GET_ATT(NCID,VARIDF(2),'scale_factor',YCFAC) IF (IRET.NE.0 ) YCFAC = 1.0 IRET = NF90_GET_ATT(NCID,VARIDF(2),'add_offset',YCOFF) @@ -1635,7 +1653,7 @@ ! ! ... Input ! - IF ( ITYPE .LE. 4 .OR. ITYPE.EQ.6) THEN + IF ( ITYPE .LE. 4 .OR. ITYPE.EQ.6 ) THEN IF (NDIMSGRID.EQ.1) THEN IRET=NF90_GET_VAR(NCID,VARIDF(1),XC(:,1),start=(/1,ITIME/),count=(/MXM,1/)) ELSE @@ -1665,7 +1683,7 @@ !/T2 END IF !/T2 END DO ! - IF (NFCOMP.EQ.2 .OR. IFLD.GE.3 .OR. FLBERG) THEN + IF (NFCOMP.EQ.2 .OR. (IFLD.GE.3 .AND. IFLD.NE.7) .OR. FLBERG) THEN ! This is a quick fix that works if the lon,lat,level,time dimensions are in that order ! otherwise, one should check the length of each dimension ... @@ -1777,7 +1795,7 @@ END DO END DO - IF (( IFLD.LE.2 ).AND.( .NOT. FLBERG )) THEN + IF (( IFLD.LE.2 .OR. IFLD.EQ.7 ).AND.( .NOT. FLBERG )) THEN DO IY=1, NY DO IX=1, NX FA(IX,IY) = XC(IX,IY) @@ -1798,7 +1816,7 @@ ! ... One-component fields ! !/O3 IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,976) ' ' - IF (( IFLD.LE.2 ).AND.( .NOT. FLBERG )) THEN + IF (( IFLD.LE.2 .OR. IFLD.EQ.7 ).AND.( .NOT. FLBERG )) THEN ! CALL INTERP(MXM, MYM, XC, IX21, IX22, IY21, IY22, & RD11, RD12, RD21, RD22, FILLVALUE, FA) @@ -1882,6 +1900,28 @@ !/CRT2 END DO !/CRT2 END DO !/CRT2 END IF +! +! ... Momentum, correct for velocity or energy conservation +! +!/WNT1 IF (IFLD.EQ.6) THEN +!/WNT1 DO IY=1,NY +!/WNT1 DO IX=1,NX +!/WNT1 FACTOR = MIN ( 1.5 , A2(IX,IY)/A1(IX,IY) ) +!/WNT1 FX(IX,IY) = FACTOR * FX(IX,IY) +!/WNT1 FY(IX,IY) = FACTOR * FY(IX,IY) +!/WNT1 END DO +!/WNT1 END DO +!/WNT1 END IF +! +!/WNT2 IF (IFLD.EQ.6) THEN +!/WNT2 DO IY=1,NY +!/WNT2 DO IX=1,NX +!/WNT2 FACTOR = MIN ( 1.5 , A3(IX,IY)/A1(IX,IY) ) +!/WNT2 FX(IX,IY) = FACTOR * FX(IX,IY) +!/WNT2 FY(IX,IY) = FACTOR * FY(IX,IY) +!/WNT2 END DO +!/WNT2 END DO +!/WNT2 END IF ! END IF ! @@ -1908,6 +1948,9 @@ !/T3 ELSE IF (IFLD.EQ.2) THEN !/T3 CALL PRTBLK (NDSO, NX, NY, NX, FA, MAPOUT, 0, 0., & !/T3 IX0, IXN, 1, 1, NY, 1, 'Water level', 'm') +!/T3 ELSE IF (IFLD.EQ.7) THEN +!/T3 CALL PRTBLK (NDSO, NX, NY, NX, FA, MAPOUT, 0, 0., & +!/T3 IX0, IXN, 1, 1, NY, 1, 'Air density', 'kg/m3') !/T3 ELSE !/T3 CALL PRTBLK (NDSO, NX, NY, NX, FX, MAPOUT, 0, 0., & !/T3 IX0, IXN, 1, 1, NY, 1, 'Cart. X-comp', 'm/s') @@ -2220,7 +2263,7 @@ !/ | Last update : 23-Feb-2021 | !/ +-----------------------------------+ !/ -!/ 23-Feb-2021 : First version ( version 7.xx ) +!/ 23-Feb-2021 : First version ( version 7.12 ) !/ ! 1. Purpose : ! diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 8d9aaf243..8dd6048ec 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 25-Sep-2020 | +!/ | Last update : 22-Mar-2021 | !/ +-----------------------------------+ !/ !/ 19-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) @@ -55,6 +55,7 @@ !/ (Roberto Padilla-Hernandez) !/ 16-Jul-2020 : Variable coupling time step ( version 7.08 ) !/ 25-Sep-2020 : Oasis coupling at T+0 ( version 7.10 ) +!/ 22-Mar-2021 : Add new coupling fields ( version 7.xx ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -299,11 +300,11 @@ NDSEN, IERR, J, I, ILOOP, IPTS, NPTS, & NDTNEW, MPI_COMM = -99, & FLAGTIDE, COUPL_COMM, IH, N_TOT - INTEGER :: NDSF(-7:7), NDS(13), NTRACE(2), NDT(5:7), & + INTEGER :: NDSF(-7:9), NDS(13), NTRACE(2), NDT(7:9), & TIME0(2), TIMEN(2), TTIME(2), TTT(2), & - NH(-7:8), THO(2,-7:8,NHMAX), RCLD(5:7), & - NODATA(5:7), ODAT(40), IPRT(6) = 0, & - STARTDATE(8), STOPDATE(8), IHH(-7:8) + NH(-7:10), THO(2,-7:10,NHMAX), RCLD(7:9), & + NODATA(7:9), ODAT(40), IPRT(6) = 0, & + STARTDATE(8), STOPDATE(8), IHH(-7:10) ! !/OASIS INTEGER :: OASISED !/COU INTEGER :: OFL @@ -311,21 +312,21 @@ !/MPI INTEGER :: IERR_MPI ! REAL :: FACTOR, DTTST, XX, YY, & - HA(NHMAX,-7:8), HD(NHMAX,-7:8), & - HS(NHMAX,-7:8) + HA(NHMAX,-7:10), HD(NHMAX,-7:10), & + HS(NHMAX,-7:10) !/F90 REAL :: CLKFIN, CLKFEL REAL, ALLOCATABLE :: X(:), Y(:), XXX(:,:), DATA0(:,:), & DATA1(:,:), DATA2(:,:) ! DOUBLE PRECISION :: STARTJULDAY, STOPJULDAY ! - CHARACTER(LEN=1) :: COMSTR, FLAGTFC(-7:8) - CHARACTER(LEN=3) :: IDSTR(-7:8), IDTST + CHARACTER(LEN=1) :: COMSTR, FLAGTFC(-7:10) + CHARACTER(LEN=3) :: IDSTR(-7:10), IDTST CHARACTER(LEN=6) :: YESXNO CHARACTER(LEN=40) :: PN CHARACTER(LEN=40), & ALLOCATABLE :: PNAMES(:) - CHARACTER(LEN=13) :: IDFLDS(-7:8) + CHARACTER(LEN=13) :: IDFLDS(-7:10) CHARACTER(LEN=20) :: STRNG CHARACTER(LEN=23) :: DTME21 CHARACTER(LEN=30) :: IDOTYP(8) @@ -338,12 +339,12 @@ !/COU CHARACTER(LEN=30) :: OFILE ! - LOGICAL :: FLLSTL, FLLSTI, FLFLG, FLHOM, TFLAGI, & - PRTFRM, FLAGSCI, FLGNML + LOGICAL :: FLLSTL, FLLSTI, FLLSTR, FLFLG, FLHOM, & + TFLAGI, PRTFRM, FLAGSCI, FLGNML LOGICAL :: FLGRD(NOGRP,NGRPP), FLGD(NOGRP), & FLGR2(NOGRP,NGRPP), FLG2(NOGRP), & - FLAGSTIDE(4), FLH(-7:8), FLGDAS(3), & - FLLST_ALL(-7:8) + FLAGSTIDE(4), FLH(-7:10), FLGDAS(3), & + FLLST_ALL(-7:10) LOGICAL :: DEBUG_NCC = .FALSE. !/NCC LOGICAL :: CFLAG(10) !/MPI LOGICAL :: FLHYBR = .FALSE. @@ -360,6 +361,7 @@ 'mud viscos. ' , & 'water levels ' , 'currents ' , & 'winds ' , 'ice fields ' , & + 'momentum ' , 'air density ' , & 'mean param. ' , '1D spectra ' , & '2D spectra ' , 'moving grid ' / DATA IDOTYP / 'Fields of mean wave parameters' , & @@ -371,8 +373,8 @@ 'Fields for coupling ' , & 'Restart files second request '/ DATA IDSTR / 'IC1', 'IC2', 'IC3', 'IC4', 'IC5', 'MDN', 'MTH', & - 'MVS', 'LEV', 'CUR', 'WND', 'ICE', 'DT0', 'DT1', & - 'DT2', 'MOV' / + 'MVS', 'LEV', 'CUR', 'WND', 'ICE', 'TAU', 'RHO', & + 'DT0', 'DT1', 'DT2', 'MOV' / ! FLGR2 = .FALSE. FLAGSTIDE(:) = .FALSE. @@ -472,6 +474,8 @@ NDSF(5) = 15 NDSF(6) = 16 NDSF(7) = 17 + NDSF(8) = 18 + NDSF(9) = 19 !/DEBUGINIT WRITE(740+IAPROC,*) 'ww3_shel, step 2' !/DEBUGINIT FLUSH(740+IAPROC) ! @@ -490,6 +494,8 @@ !/NCO NDSF(5) = 16 !/NCO NDSF(6) = 17 !/NCO NDSF(7) = 18 +!/NCO NDSF(8) = 19 +!/NCO NDSF(9) = 20 ! NAPOUT = 1 NAPERR = 1 @@ -561,6 +567,7 @@ ! field has been read from a file. FLLSTL = .FALSE. ! This is associated with J.EQ.1 (wlev) FLLSTI = .FALSE. ! This is associated with J.EQ.4 (ice) + FLLSTR = .FALSE. ! This is associated with J.EQ.6 (rhoa) FLLST_ALL = .FALSE. ! For all !/DEBUGINIT WRITE(740+IAPROC,*) 'ww3_shel, step 3' !/DEBUGINIT FLUSH(740+IAPROC) @@ -603,7 +610,7 @@ ! 2.1 forcing flags - FLH(-7:8)=.FALSE. + FLH(-7:10)=.FALSE. FLAGTFC(-7)=TRIM(NML_INPUT%FORCING%ICE_PARAM1) FLAGTFC(-6)=TRIM(NML_INPUT%FORCING%ICE_PARAM2) FLAGTFC(-5)=TRIM(NML_INPUT%FORCING%ICE_PARAM3) @@ -616,9 +623,11 @@ FLAGTFC(2)=TRIM(NML_INPUT%FORCING%CURRENTS) FLAGTFC(3)=TRIM(NML_INPUT%FORCING%WINDS) FLAGTFC(4)=TRIM(NML_INPUT%FORCING%ICE_CONC) - FLAGTFC(5)=TRIM(NML_INPUT%ASSIM%MEAN) - FLAGTFC(6)=TRIM(NML_INPUT%ASSIM%SPEC1D) - FLAGTFC(7)=TRIM(NML_INPUT%ASSIM%SPEC2D) + FLAGTFC(5)=TRIM(NML_INPUT%FORCING%ATM_MOMENTUM) + FLAGTFC(6)=TRIM(NML_INPUT%FORCING%AIR_DENSITY) + FLAGTFC(7)=TRIM(NML_INPUT%ASSIM%MEAN) + FLAGTFC(8)=TRIM(NML_INPUT%ASSIM%SPEC1D) + FLAGTFC(9)=TRIM(NML_INPUT%ASSIM%SPEC2D) IF (TRIM(NML_INPUT%FORCING%ICE_PARAM1) .EQ. 'H') THEN FLAGTFC(-7)='T' @@ -668,37 +677,31 @@ FLAGTFC(4)='T' FLH(4)=.TRUE. END IF + IF (TRIM(NML_INPUT%FORCING%ATM_MOMENTUM) .EQ. 'H') THEN + FLAGTFC(5)='T' + FLH(5)=.TRUE. + END IF + IF (TRIM(NML_INPUT%FORCING%AIR_DENSITY) .EQ. 'H') THEN + FLAGTFC(6)='T' + FLH(6)=.TRUE. + END IF IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,920) - DO J=JFIRST, 7 - IF ( J .LE. 4 ) THEN - IF (FLAGTFC(J).EQ.'T') THEN - INFLAGS1(J)=.TRUE. - FLAGSC(J)=.FALSE. - END IF - IF (FLAGTFC(J).EQ.'F') THEN - INFLAGS1(J)=.FALSE. - FLAGSC(J)=.FALSE. - END IF - IF (FLAGTFC(J).EQ.'C') THEN - INFLAGS1(J)=.TRUE. - FLAGSC(J)=.TRUE. - END IF + DO J=JFIRST, 9 + IF (FLAGTFC(J).EQ.'T') THEN + INFLAGS1(J)=.TRUE. + FLAGSC(J)=.FALSE. + END IF + IF (FLAGTFC(J).EQ.'F') THEN + INFLAGS1(J)=.FALSE. + FLAGSC(J)=.FALSE. + END IF + IF (FLAGTFC(J).EQ.'C') THEN + INFLAGS1(J)=.TRUE. + FLAGSC(J)=.TRUE. + END IF + IF ( J .LE. 6 ) THEN FLH(J) = FLH(J) .AND. INFLAGS1(J) - ELSE - FLH(J) = .FALSE. - IF (FLAGTFC(J).EQ.'T') THEN - INFLAGS1(J)=.TRUE. - FLAGSC(J)=.FALSE. - END IF - IF (FLAGTFC(J).EQ.'F') THEN - INFLAGS1(J)=.FALSE. - FLAGSC(J)=.FALSE. - END IF - IF (FLAGTFC(J).EQ.'C') THEN - INFLAGS1(J)=.TRUE. - FLAGSC(J)=.TRUE. - END IF END IF IF ( INFLAGS1(J) ) THEN YESXNO = 'YES/--' @@ -717,23 +720,24 @@ !/COU IF (FLAGSC(1) .AND. INFLAGS1(2) .AND. .NOT. FLAGSC(2)) GOTO 2102 !/COU IF (FLAGSC(2) .AND. INFLAGS1(1) .AND. .NOT. FLAGSC(1)) GOTO 2102 - INFLAGS1(8) = .FALSE. - FLH(8) = .FALSE. -!/MGW INFLAGS1(8) = .TRUE. -!/MGP INFLAGS1(8) = .TRUE. -!/MGW FLH(8) = .TRUE. -!/MGP FLH(8) = .TRUE. - IF ( INFLAGS1(8) .AND. IAPROC.EQ.NAPOUT ) & - WRITE (NDSO,921) IDFLDS(8), 'YES/--', ' ' + INFLAGS1(10) = .FALSE. +!/MGW INFLAGS1(10) = .TRUE. +!/MGP INFLAGS1(10) = .TRUE. +!/MGW FLH(10) = .TRUE. +!/MGP FLH(10) = .TRUE. + IF ( INFLAGS1(10) .AND. IAPROC.EQ.NAPOUT ) & + WRITE (NDSO,921) IDFLDS(10), 'YES/--', ' ' ! FLFLG = INFLAGS1(-7) .OR. INFLAGS1(-6) .OR. INFLAGS1(-5) .OR. INFLAGS1(-4) & .OR. INFLAGS1(-3) .OR. INFLAGS1(-2) .OR. INFLAGS1(-1) & .OR. INFLAGS1(0) .OR. INFLAGS1(1) .OR. INFLAGS1(2) & .OR. INFLAGS1(3) .OR. INFLAGS1(4) .OR. INFLAGS1(5) & - .OR. INFLAGS1(6) .OR. INFLAGS1(7) + .OR. INFLAGS1(6) .OR. INFLAGS1(7) .OR. INFLAGS1(8) & + .OR. INFLAGS1(9) FLHOM = FLH(-7) .OR. FLH(-6) .OR. FLH(-5) .OR. FLH(-4) & .OR. FLH(-3) .OR. FLH(-2) .OR. FLH(-1) .OR. FLH(0) & - .OR. FLH(1) .OR. FLH(2) .OR. FLH(3) .OR. FLH(4) .OR. FLH(8) + .OR. FLH(1) .OR. FLH(2) .OR. FLH(3) .OR. FLH(4) & + .OR. FLH(5) .OR. FLH(6) .OR. FLH(10) ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,922) ! @@ -757,7 +761,7 @@ ! 2.3 Domain setup IOSTYP = NML_DOMAIN%IOSTYP - CALL W3IOGR ( 'GRID', NDSF(5) ) + CALL W3IOGR ( 'GRID', NDSF(7) ) IF ( FLAGLL ) THEN FACTOR = 1. ELSE @@ -973,11 +977,13 @@ NH(2) = NML_HOMOG_COUNT%N_CUR NH(3) = NML_HOMOG_COUNT%N_WND NH(4) = NML_HOMOG_COUNT%N_ICE - NH(8) = NML_HOMOG_COUNT%N_MOV + NH(5) = NML_HOMOG_COUNT%N_TAU + NH(6) = NML_HOMOG_COUNT%N_RHO + NH(10) = NML_HOMOG_COUNT%N_MOV ! N_TOT = NML_HOMOG_COUNT%N_TOT ! - DO J=JFIRST,8 + DO J=JFIRST,10 IF ( NH(J) .GT. NHMAX ) GOTO 2006 END DO @@ -1012,8 +1018,12 @@ J=3 CASE ('ICE') J=4 + CASE ('TAU') + J=5 + CASE ('RHO') + J=6 CASE ('MOV') - J=8 + J=10 CASE DEFAULT GOTO 2062 END SELECT @@ -1025,14 +1035,16 @@ END DO END IF -!/O7 DO J=JFIRST, 8 +!/O7 DO J=JFIRST, 10 !/O7 IF ( FLH(J) .AND. IAPROC.EQ.NAPOUT ) THEN !/O7 WRITE (NDSO,952) NH(J), IDFLDS(J) !/O7 DO I=1, NH(J) -!/O7 IF ( ( J .LE. 1 ) .OR. ( J .EQ. 4 ) ) THEN +!/O7 IF ( ( J .LE. 1 ) .OR. ( J .EQ. 4 ) .OR. & +!/O7 ( J .EQ. 6 ) ) THEN !/O7 WRITE (NDSO,953) I, THO(1,J,I), THO(2,J,I), & !/O7 HA(I,J) -!/O7 ELSE IF ( ( J .EQ. 2 ) .OR. (J .EQ. 8) ) THEN +!/O7 ELSE IF ( ( J .EQ. 2 ) .OR. ( J .EQ. 5 ) .OR. & +!/O7 ( J .EQ. 10 ) ) THEN !/O7 WRITE (NDSO,953) I, THO(1,J,I), THO(2,J,I), & !/O7 HA(I,J), HD(I,J) !/O7 ELSE IF ( J .EQ. 3 ) THEN @@ -1055,7 +1067,9 @@ ( FLH(2) .AND. (NH(2).EQ.0) ) .OR. & ( FLH(3) .AND. (NH(3).EQ.0) ) .OR. & ( FLH(4) .AND. (NH(4).EQ.0) ) .OR. & - ( FLH(8) .AND. (NH(8).EQ.0) ) ) GOTO 2007 + ( FLH(5) .AND. (NH(5).EQ.0) ) .OR. & + ( FLH(6) .AND. (NH(6).EQ.0) ) .OR. & + ( FLH(10) .AND. (NH(10).EQ.0) ) ) GOTO 2007 ! END IF ! FLHOM @@ -1085,9 +1099,10 @@ ! 2.1 forcing flags - DO J=JFIRST, 7 + FLH(-7:10) = .FALSE. + DO J=JFIRST, 9 CALL NEXTLN ( COMSTR , NDSI , NDSEN ) - IF ( J .LT. 4 ) THEN + IF ( J .LE. 6 ) THEN !/DEBUGINIT WRITE(740+IAPROC,*) 'Before read 2002, case 2' !/DEBUGINIT FLUSH(740+IAPROC) READ (NDSI,*) FLAGTFC(J), FLH(J) @@ -1101,40 +1116,25 @@ !/DEBUGINIT WRITE(740+IAPROC,*) ' J=', J, ' FLAGTFC=', FLAGTFC(J) !/DEBUGINIT WRITE(740+IAPROC,*) ' After read 2002, case 3' !/DEBUGINIT FLUSH(740+IAPROC) - FLH(J) = .FALSE. END IF END DO IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,920) - DO J=JFIRST, 7 - IF ( J .LT. 4 ) THEN - IF (FLAGTFC(J).EQ.'T') THEN - INFLAGS1(J)=.TRUE. - FLAGSC(J)=.FALSE. - END IF - IF (FLAGTFC(J).EQ.'F') THEN - INFLAGS1(J)=.FALSE. - FLAGSC(J)=.FALSE. - END IF - IF (FLAGTFC(J).EQ.'C') THEN - INFLAGS1(J)=.TRUE. - FLAGSC(J)=.TRUE. - END IF + DO J=JFIRST, 9 + IF (FLAGTFC(J).EQ.'T') THEN + INFLAGS1(J)=.TRUE. + FLAGSC(J)=.FALSE. + END IF + IF (FLAGTFC(J).EQ.'F') THEN + INFLAGS1(J)=.FALSE. + FLAGSC(J)=.FALSE. + END IF + IF (FLAGTFC(J).EQ.'C') THEN + INFLAGS1(J)=.TRUE. + FLAGSC(J)=.TRUE. + END IF + IF ( J .LE. 6 ) THEN FLH(J) = FLH(J) .AND. INFLAGS1(J) - ELSE - FLH(J) = .FALSE. - IF (FLAGTFC(J).EQ.'T') THEN - INFLAGS1(J)=.TRUE. - FLAGSC(J)=.FALSE. - END IF - IF (FLAGTFC(J).EQ.'F') THEN - INFLAGS1(J)=.FALSE. - FLAGSC(J)=.FALSE. - END IF - IF (FLAGTFC(J).EQ.'C') THEN - INFLAGS1(J)=.TRUE. - FLAGSC(J)=.TRUE. - END IF END IF IF ( INFLAGS1(J) ) THEN YESXNO = 'YES/--' @@ -1160,23 +1160,24 @@ !/DEBUGINIT WRITE(740+IAPROC,*) 'ww3_shel, step 5' !/DEBUGINIT FLUSH(740+IAPROC) ! - INFLAGS1(8) = .FALSE. - FLH(8) = .FALSE. -!/MGW INFLAGS1(8) = .TRUE. -!/MGP INFLAGS1(8) = .TRUE. -!/MGW FLH(8) = .TRUE. -!/MGP FLH(8) = .TRUE. - IF ( INFLAGS1(8) .AND. IAPROC.EQ.NAPOUT ) & - WRITE (NDSO,921) IDFLDS(8), 'YES/--', ' ' + INFLAGS1(10) = .FALSE. +!/MGW INFLAGS1(10) = .TRUE. +!/MGP INFLAGS1(10) = .TRUE. +!/MGW FLH(10) = .TRUE. +!/MGP FLH(10) = .TRUE. + IF ( INFLAGS1(10) .AND. IAPROC.EQ.NAPOUT ) & + WRITE (NDSO,921) IDFLDS(10), 'YES/--', ' ' ! FLFLG = INFLAGS1(-7) .OR. INFLAGS1(-6) .OR. INFLAGS1(-5) .OR. INFLAGS1(-4) & .OR. INFLAGS1(-3) .OR. INFLAGS1(-2) .OR. INFLAGS1(-1) & .OR. INFLAGS1(0) .OR. INFLAGS1(1) .OR. INFLAGS1(2) & .OR. INFLAGS1(3) .OR. INFLAGS1(4) .OR. INFLAGS1(5) & - .OR. INFLAGS1(6) .OR. INFLAGS1(7) + .OR. INFLAGS1(6) .OR. INFLAGS1(7) .OR. INFLAGS1(8) & + .OR. INFLAGS1(9) FLHOM = FLH(-7) .OR. FLH(-6) .OR. FLH(-5) .OR. FLH(-4) & .OR. FLH(-3) .OR. FLH(-2) .OR. FLH(-1) .OR. FLH(0) & - .OR. FLH(1) .OR. FLH(2) .OR. FLH(3) .OR. FLH(4) .OR. FLH(8) + .OR. FLH(1) .OR. FLH(2) .OR. FLH(3) .OR. FLH(4) & + .OR. FLH(5) .OR. FLH(6) .OR. FLH(10) ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,922) ! @@ -1219,7 +1220,7 @@ !/DEBUGINIT write(740+IAPROC,*), 'Before read 2002, case 6' READ (NDSI,*) IOSTYP !/DEBUGINIT write(740+IAPROC,*), ' After read 2002, case 6' - CALL W3IOGR ( 'GRID', NDSF(5) ) + CALL W3IOGR ( 'GRID', NDSF(7) ) IF ( FLAGLL ) THEN FACTOR = 1. ELSE @@ -1487,7 +1488,8 @@ IDTST.NE.IDSTR(-1) .AND. IDTST.NE.IDSTR(0) .AND. & IDTST.NE.IDSTR(1) .AND. IDTST.NE.IDSTR(2) .AND. & IDTST.NE.IDSTR(3) .AND. IDTST.NE.IDSTR(4) .AND. & - IDTST.NE.IDSTR(8) .AND. IDTST.NE.'STP' ) GOTO 2005 + IDTST.NE.IDSTR(5) .AND. IDTST.NE.IDSTR(6) .AND. & + IDTST.NE.IDSTR(10) .AND. IDTST.NE.'STP' ) GOTO 2005 ! Stop conditions IF ( IDTST .EQ. 'STP' ) THEN @@ -1497,7 +1499,7 @@ END IF ! Store data - DO J=LBOUND(IDSTR,1), 8 + DO J=LBOUND(IDSTR,1), 10 IF ( IDTST .EQ. IDSTR(J) ) THEN NH(J) = NH(J) + 1 IF ( NH(J) .GT. NHMAX ) GOTO 2006 @@ -1525,12 +1527,24 @@ THO(1,J,NH(J)), THO(2,J,NH(J)), & HA(NH(J),J) !/DEBUGINIT write(740+IAPROC,*), ' After read 2002, case 15' - ELSE IF ( J .EQ. 8 ) THEN ! mov: HA and HD + ELSE IF ( J .EQ. 5 ) THEN ! atmospheric momentum !/DEBUGINIT write(740+IAPROC,*), 'Before read 2002, case 16' READ (NDSI,*) IDTST, & THO(1,J,NH(J)), THO(2,J,NH(J)), & - HA(NH(J),J), HD(NH(J),J) + HA(NH(J),J), HD(NH(J),j) !/DEBUGINIT write(740+IAPROC,*), ' After read 2002, case 16' + ELSE IF ( J .EQ. 6 ) THEN ! air density +!/DEBUGINIT write(740+IAPROC,*), 'Before read 2002, case 17' + READ (NDSI,*) IDTST, & + THO(1,J,NH(J)), THO(2,J,NH(J)), & + HA(NH(J),J) +!/DEBUGINIT write(740+IAPROC,*), ' After read 2002, case 16' + ELSE IF ( J .EQ. 10 ) THEN ! mov: HA and HD +!/DEBUGINIT write(740+IAPROC,*), 'Before read 2002, case 18' + READ (NDSI,*) IDTST, & + THO(1,J,NH(J)), THO(2,J,NH(J)), & + HA(NH(J),J), HD(NH(J),J) +!/DEBUGINIT write(740+IAPROC,*), ' After read 2002, case 18' END IF END IF END DO @@ -1541,14 +1555,16 @@ !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! -!/O7 DO J=JFIRST, 8 +!/O7 DO J=JFIRST, 10 !/O7 IF ( FLH(J) .AND. IAPROC.EQ.NAPOUT ) THEN !/O7 WRITE (NDSO,952) NH(J), IDFLDS(J) !/O7 DO I=1, NH(J) -!/O7 IF ( ( J .LE. 1 ) .OR. ( J .EQ. 4 ) ) THEN +!/O7 IF ( ( J .LE. 1 ) .OR. ( J .EQ. 4 ) .OR. & +!/O7 ( J .EQ. 6 ) ) THEN !/O7 WRITE (NDSO,953) I, THO(1,J,I), THO(2,J,I), & !/O7 HA(I,J) -!/O7 ELSE IF ( ( J .EQ. 2 ) .OR. (J .EQ. 8) ) THEN +!/O7 ELSE IF ( ( J .EQ. 2 ) .OR. ( J .EQ. 5 ) .OR. & +!/O7 ( J .EQ. 10 ) ) THEN !/O7 WRITE (NDSO,953) I, THO(1,J,I), THO(2,J,I), & !/O7 HA(I,J), HD(I,J) !/O7 ELSE IF ( J .EQ. 3 ) THEN @@ -1572,7 +1588,9 @@ ( FLH(2) .AND. (NH(2).EQ.0) ) .OR. & ( FLH(3) .AND. (NH(3).EQ.0) ) .OR. & ( FLH(4) .AND. (NH(4).EQ.0) ) .OR. & - ( FLH(8) .AND. (NH(8).EQ.0) ) ) GOTO 2007 + ( FLH(5) .AND. (NH(5).EQ.0) ) .OR. & + ( FLH(6) .AND. (NH(6).EQ.0) ) .OR. & + ( FLH(10) .AND. (NH(10).EQ.0) ) ) GOTO 2007 ! END IF ! FLHOM @@ -1596,7 +1614,7 @@ 'Preparing input files ...' ! - DO J=JFIRST, 4 + DO J=JFIRST, 6 !/DEBUGINIT write(740+IAPROC,*), 'J=',J,'INFLAGS1(J)=',INFLAGS1(J), 'FLAGSC(J)=', FLAGSC(J) IF ( INFLAGS1(J) .AND. .NOT. FLAGSC(J)) THEN IF ( FLH(J) ) THEN @@ -1616,7 +1634,7 @@ END IF END DO ! - DO J=5, 7 + DO J=7, 9 IF ( INFLAGS1(J) .AND. .NOT. FLAGSC(J)) THEN CALL W3FLDO ('READ', IDSTR(J), NDSF(J), NDST, NDSEN, & RCLD(J), NY, NODATA(J), & @@ -1940,17 +1958,19 @@ !/T IDSTR(2), INFLAGS1(2), TC0, TCN, & !/T IDSTR(3), INFLAGS1(3), TW0, TWN, & !/T IDSTR(4), INFLAGS1(4), TIN, & -!/T IDSTR(5), INFLAGS1(5), T0N, & -!/T IDSTR(6), INFLAGS1(6), T1N, & -!/T IDSTR(7), INFLAGS1(7), T2N, & -!/T IDSTR(8), INFLAGS1(8), TG0, TGN +!/T IDSTR(5), INFLAGS1(5), TU0, TUN, & +!/T IDSTR(6), INFLAGS1(6), TRN, & +!/T IDSTR(7), INFLAGS1(7), T0N, & +!/T IDSTR(8), INFLAGS1(8), T1N, & +!/T IDSTR(9), INFLAGS1(9), T2N, & +!/T IDSTR(10), INFLAGS1(10), TG0, TGN ! !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL SECTION 7' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) - DO J=JFIRST,8 + DO J=JFIRST,10 ! !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL UPDATE', J !/MEMCHECK call getMallocInfo(mallinfos) @@ -2209,7 +2229,7 @@ IF ( FLH(J) ) THEN CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& - TW0, WX0, WY0, DT0, TWN, WXN, WYN, DTN, IERR) + TTT, XXX, XXX, XXX, TIN, XXX, BERGI, ICEI, IERR) ELSE !/OASIS COUPL_COMM = MPI_COMM !/OASICM IF (FLAGSC(J)) FLAGSCI = .TRUE. @@ -2232,8 +2252,51 @@ !/NCC WRITE(9752) TIN, ICEI END IF -! Assim data +! TAU : atmospheric momentum ELSE IF ( J .EQ. 5 ) THEN + IF ( FLH(J) ) THEN + CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & + TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& + TU0, UX0, UY0, XXX, TUN, UXN, UYN, XXX, IERR) +! +!/SMC !!Li Reshape the UX0/N UY0/N space for sea-point only current. +!/SMC !!Li JGLi26Jun2018. +!/SMC ELSE IF( FSWND ) THEN +!/SMC CALL W3FLDG ('READ', IDSTR(J), NDSF(J), NDST, & +!/SMC NDSEN, NSEA, 1, NSEA, 1, TIME0, TIMEN, TU0, & +!/SMC UX0, UY0, XXX, TUN, UXN, UYN, XXX, IERR) +!/SMC !!Li + ELSE +!/OASIS COUPL_COMM = MPI_COMM +!/OASACM IF (.NOT.FLAGSC(J)) ID_OASIS_TIME = -1 + CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & + NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & + TU0, UX0, UY0, XXX, TUN, UXN, UYN, XXX, & + IERR, FLAGSC(J) & +!/OASACM , COUPL_COMM & + ) + END IF + +! RHO : air density + ELSE IF ( J .EQ. 6 ) THEN + IF ( FLH(J) ) THEN + CALL W3FLDH (J, NDST, NDSEN, NX, NY, NX, NY, & + TIME0, TIMEN, NH(J), NHMAX, THO, HA, HD, HS,& + TTT, XXX, XXX, XXX, TRN, XXX, XXX, RAIR, IERR) + ELSE +!/OASIS COUPL_COMM = MPI_COMM +!/OASACM IF (.NOT.FLAGSC(J)) ID_OASIS_TIME = -1 + CALL W3FLDG ('READ', IDSTR(J), NDSF(J), & + NDST, NDSEN, NX, NY, NX, NY, TIME0, TIMEN, & + TTT, XXX, XXX, XXX, TRN, XXX, XXX, RAIR, & + IERR, FLAGSC(J) & +!/OASASCM , COUPL_COMM & + ) + IF ( IERR .LT. 0 ) FLLSTR = .TRUE. + END IF + +! Assim data + ELSE IF ( J .EQ. 7 ) THEN CALL W3FLDD ('SIZE', IDSTR(J), NDSF(J), NDST, & NDSEN, TIME0, T0N, RCLD(J), NDT(J), & NDTNEW, DATA0, IERR ) @@ -2250,7 +2313,7 @@ END IF ! Assim data - ELSE IF ( J .EQ. 6 ) THEN + ELSE IF ( J .EQ. 8 ) THEN CALL W3FLDD ('SIZE', IDSTR(J), NDSF(J), NDST, & NDSEN, TIME0, T1N, RCLD(J), NDT(J), & NDTNEW, DATA1, IERR ) @@ -2267,7 +2330,7 @@ END IF ! Assim data - ELSE IF ( J .EQ. 7 ) THEN + ELSE IF ( J .EQ. 9 ) THEN CALL W3FLDD ('SIZE', IDSTR(J), NDSF(J), NDST, & NDSEN, TIME0, T2N, RCLD(J), NDT(J), & NDTNEW, DATA2, IERR ) @@ -2284,7 +2347,7 @@ END IF ! Track - ELSE IF ( J .EQ. 8 ) THEN + ELSE IF ( J .EQ. 10 ) THEN CALL W3FLDM (4, NDST, NDSEN, TIME0, TIMEN, NH(4), & NHMAX, THO, HA, HD, TG0, GA0, GD0, & TGN, GAN, GDN, IERR) @@ -2311,7 +2374,8 @@ (FLLST_ALL(J) .AND. J.EQ.-2) .OR. & (FLLST_ALL(J) .AND. J.EQ.-1) .OR. & (FLLST_ALL(J) .AND. J.EQ.0 ) .OR. & - (FLLSTI .AND. J.EQ.4) ) ) THEN + (FLLSTI .AND. J.EQ.4) .OR. & + (FLLSTR .AND. J.EQ.6) ) ) THEN TTIME = TTT ! notes: if model has run out beyond field input, then this line should not ! be reached. @@ -2320,7 +2384,7 @@ ! END IF ! INFLAGSC1(J) ! - END DO ! J=JFIRST,8 + END DO ! J=JFIRST,10 ! ! update the next assimilation data time ! @@ -2331,7 +2395,7 @@ TDN = TTIME CALL TICK21 ( TDN, 1. ) - DO J=5, 7 + DO J=7, 9 IF ( INFLAGS1(J) ) THEN TTT = TFN(:,J) DTTST = DSEC21 ( TTT , TDN ) @@ -2352,10 +2416,12 @@ !/T IDSTR(2), INFLAGS1(2), TC0, TCN, & !/T IDSTR(3), INFLAGS1(3), TW0, TWN, & !/T IDSTR(4), INFLAGS1(4), TIN, & -!/T IDSTR(5), INFLAGS1(5), T0N, & -!/T IDSTR(6), INFLAGS1(6), T1N, & -!/T IDSTR(7), INFLAGS1(7), T2N, TDN, & -!/T IDSTR(8), INFLAGS1(8), TG0, TGN +!/T IDSTR(5), INFLAGS1(5), TU0, TUN, & +!/T IDSTR(6), INFLAGS1(6), TRN, & +!/T IDSTR(7), INFLAGS1(7), T0N, & +!/T IDSTR(8), INFLAGS1(8), T1N, & +!/T IDSTR(9), INFLAGS1(9), T2N, TDN, & +!/T IDSTR(10), INFLAGS1(10), TG0, TGN ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,*) ' ' ! @@ -2375,8 +2441,10 @@ ! of the files. This feature existed in v3.14. ! "1" is for water levels ! "4" is for ice concentration: + ! "6" is for air density: IF ( FLLSTL ) INFLAGS1(1) = .FALSE. IF ( FLLSTI ) INFLAGS1(4) = .FALSE. + IF ( FLLSTR ) INFLAGS1(6) = .FALSE. ! We include something like this for mud and ice parameters also: DO J=-7,0 diff --git a/model/inp/ww3_multi.inp b/model/inp/ww3_multi.inp index 59a5fd454..fad6efc4d 100644 --- a/model/inp/ww3_multi.inp +++ b/model/inp/ww3_multi.inp @@ -25,10 +25,11 @@ $ If there are input data grids defined ( NRINP > 0 ), then these $ grids are defined first. These grids are defined as if they are wave $ model grids using the file mod_def.MODID. Each grid is defined on $ a separate input line with MODID, and eight input flags identifying -$ the presence of 1) water levels 2) currents 3) winds 4) ice and -$ 5-7) assimilation data as in the file ww3_shel.inp. +$ the presence of 1) water levels 2) currents 3) winds 4) ice +$ 5) momentum 6) air density and 7-9) assimilation data as in the +$ file ww3_shel.inp. $ - 'input' F F T F F F F + 'input' F F T F F F F F F $ $ In this example, we need the file mod_def.input to define the grid $ and the file wind.input to provide the corresponding wind data. @@ -51,8 +52,8 @@ $ Now each actual wave model grid is defined using 13 parameters to be $ read from a single line in the file. Each line contains the following $ parameters $ 1) Define the grid with the extension of the mod_def file. -$ 2-8) Define the inputs used by the grids with 8 keywords -$ corresponding to the 8 flags defining the input in the +$ 2-10) Define the inputs used by the grids with 10 keywords +$ corresponding to the 10 flags defining the input in the $ input files. Valid keywords are: $ 'no' : This input is not used. $ 'native' : This grid has its own input files, e.g. grid @@ -60,24 +61,24 @@ $ grdX (mod_def.grdX) uses ice.grdX. $ 'MODID' : Take input from the grid identified by $ MODID. In the example below, all grids get $ their wind from wind.input (mod_def.input). -$ 9) Rank number of grid (internally sorted and reassigned). -$ 10) Group number (internally reassigned so that different +$ 11) Rank number of grid (internally sorted and reassigned). +$ 12) Group number (internally reassigned so that different $ ranks result in different group numbers. -$ 11-12) Define fraction of communicator (processes) used for this +$ 13-14) Define fraction of communicator (processes) used for this $ grid. '0.00 1.00' is appropriate in many cases. Partial $ fractions, i.e. settings other than '0.00 1.00', are $ intended for equal rank grids, to improve scaling. The $ commented example provided here (partial fractions with $ non-equal rank) is not generally recommended. -$ 13) Flag identifying dumping of boundary data used by this +$ 15) Flag identifying dumping of boundary data used by this $ grid. If true, the file nest.MODID is generated. $ - 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F -$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 0.50 F -$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.25 0.75 F -$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.50 1.00 F + 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F +$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 0.50 F +$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.25 0.75 F +$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.50 1.00 F $ $ In this example three grids are used requiring the files $ mod_def.grdN. All files get their winds from the grid 'input' diff --git a/model/inp/ww3_ounf.inp b/model/inp/ww3_ounf.inp index 162a7d0ba..5c645d123 100644 --- a/model/inp/ww3_ounf.inp +++ b/model/inp/ww3_ounf.inp @@ -12,11 +12,11 @@ $ Output request flags identifying fields as in ww3_shel.inp. See that $ file for a full documentation of field output options. Namelist type $ selection is used here (for alternative F/T flags, see ww3_shel.inp). $ -$ DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 HS LM T02 T0M1 T01 FP DIR SPR -$ DP HIG EF TH1M STH1M TH2M STH2M WN PHS PTP PLP PDIR PSPR PWS PDP +$ DPT CUR WND AST WLV ICE IBG TAU RHO D50 IC1 IC5 HS LM T02 T0M1 T01 FP +$ DIR SPR DP HIG EF TH1M STH1M TH2M STH2M WN PHS PTP PLP PDIR PSPR PWS PDP $ PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR UST CHA CGE FAW TAW TWA WCC $ WCF WCH WCM SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC ABR UBR BED -$ FBB TBB MSS MSC DTD FC CFX CFD CFK U1 U2 +$ FBB TBB MSS MSC DTD FC CFX CFD CFK U1 U2 WNM TOC $ N DPT HS FP T01 diff --git a/model/inp/ww3_prep.inp b/model/inp/ww3_prep.inp index 40f134edf..f21394f53 100644 --- a/model/inp/ww3_prep.inp +++ b/model/inp/ww3_prep.inp @@ -11,6 +11,8 @@ $ WND Winds. $ WNS Winds (including air-sea temp. dif.) $ CUR Currents. $ DAT Data for assimilation. +$ TAU Atmospheric momentum +$ RHO Air density $ $ Format types : AI Transfer field 'as is'. $ LL Field defined on rectilinear grid (in same diff --git a/model/inp/ww3_prnc.inp b/model/inp/ww3_prnc.inp index 0523f68af..1cb95ac05 100644 --- a/model/inp/ww3_prnc.inp +++ b/model/inp/ww3_prnc.inp @@ -11,6 +11,8 @@ $ WND Winds. $ WNS Winds (including air-sea temp. dif.) $ CUR Currents. $ DAT Data for assimilation. +$ TAU Atmospheric momentum +$ RHO Air density $ $ Format types : AI Transfer field 'as is'. (ITYPE 1) $ LL Field defined on regular longitude-latitude diff --git a/model/inp/ww3_shel.inp b/model/inp/ww3_shel.inp index 38413c577..4d3d14893 100644 --- a/model/inp/ww3_shel.inp +++ b/model/inp/ww3_shel.inp @@ -16,7 +16,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents T T Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/model/nml/ww3_multi.nml b/model/nml/ww3_multi.nml index ee1862e59..06b971332 100644 --- a/model/nml/ww3_multi.nml +++ b/model/nml/ww3_multi.nml @@ -50,6 +50,8 @@ ! INPUT(I)%FORCING%WATER_LEVELS = F ! INPUT(I)%FORCING%CURRENTS = F ! INPUT(I)%FORCING%WINDS = F +! INPUT(I)%FORCING%ATM_MOMENTUM = F +! INPUT(I)%FORCING%AIR_DENSITY = F ! INPUT(I)%FORCING%ICE_CONC = F ! INPUT(I)%FORCING%ICE_PARAM1 = F ! INPUT(I)%FORCING%ICE_PARAM2 = F diff --git a/model/nml/ww3_ounf.nml b/model/nml/ww3_ounf.nml index d1c3ff494..5340ffbbd 100644 --- a/model/nml/ww3_ounf.nml +++ b/model/nml/ww3_ounf.nml @@ -7,12 +7,12 @@ ! Define the output fields to postprocess via FIELD_NML namelist ! ! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml -! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 -! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! DPT CUR WND AST WLV ICE TAU RHO IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG WNM ! EF TH1M STH1M TH2M STH2M WN ! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR ! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS -! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC TOC ! ABR UBR BED FBB TBB ! MSS MSC WL02 AXT AYT AXY ! DTD FC CFX CFD CFK diff --git a/model/nml/ww3_prnc.nml b/model/nml/ww3_prnc.nml index 3928ee95f..38d69c32d 100644 --- a/model/nml/ww3_prnc.nml +++ b/model/nml/ww3_prnc.nml @@ -27,6 +27,8 @@ ! FORCING%FIELD%CURRENTS = f ! Current (2-components) ! FORCING%FIELD%WINDS = f ! Wind (2-components) ! FORCING%FIELD%WIND_AST = f ! Wind and air-sea temp. dif. (3-components) +! INPUT%FORCING%ATM_MOMENTUM = f ! Atmospheric momentum (2-components) +! INPUT%FORCING%AIR_DENSITY = f ! Air density (1-component) ! FORCING%FIELD%ICE_CONC = f ! Ice concentration (1-component) ! FORCING%FIELD%ICE_BERG = f ! Icebergs and sea ice concentration (2-components) ! FORCING%FIELD%DATA_ASSIM = f ! Data for assimilation (1-component) diff --git a/model/nml/ww3_shel.nml b/model/nml/ww3_shel.nml index 9d96cd633..8339caa86 100644 --- a/model/nml/ww3_shel.nml +++ b/model/nml/ww3_shel.nml @@ -46,6 +46,8 @@ ! INPUT%FORCING%WATER_LEVELS = 'F' ! INPUT%FORCING%CURRENTS = 'F' ! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ATM_MOMENTUM = 'F' +! INPUT%FORCING%AIR_DENSITY = 'F' ! INPUT%FORCING%ICE_CONC = 'F' ! INPUT%FORCING%ICE_PARAM1 = 'F' ! INPUT%FORCING%ICE_PARAM2 = 'F' diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index ea67a7b51..6c9db2621 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -695,19 +695,33 @@ if [ "$prop2D" = 'y' ] then echo ' ' >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_curv -g curv $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_a -g a $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ_b -g b $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -w work_PR3_UQ -o netcdf $ww3 ww3_tp2.8" >> matrix.body - echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.13" >> matrix.body - echo "$rtst -o netcdf -w work_PR3_UQ $ww3 ww3_tp2.15" >> matrix.body - echo "$rtst -o netcdf -w work_5km -g 5km $ww3 ww3_tp2.15" >> matrix.body - echo "$rtst -s TIDE -w work_TIDE -o netcdf $ww3 ww3_tp2.18" >> matrix.body + echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.1" >> matrix.body + echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.2" >> matrix.body + echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.3" >> matrix.body + echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.4" >> matrix.body + echo "$rtst -s PR3_UQ -w work_PR3_UQ_curv -g curv $ww3 ww3_tp2.4" >> matrix.body + echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.5" >> matrix.body + echo "$rtst -s PR3_UQ -w work_PR3_UQ_a -g a $ww3 ww3_tp2.9" >> matrix.body + echo "$rtst -s PR3_UQ -w work_PR3_UQ_b -g b $ww3 ww3_tp2.9" >> matrix.body + echo "$rtst -o netcdf -w work_PR3_UQ $ww3 ww3_tp2.8" >> matrix.body + echo "$rtst -s PR3_UQ -w work_PR3_UQ $ww3 ww3_tp2.13" >> matrix.body + echo "$rtst -o netcdf -w work_PR3_UQ $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -o netcdf -w work_5km -g 5km $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -o netcdf -i input_rho -w work_PR3_UQ_RHO -r ww3_grid $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -o netcdf -i input_rho -w work_PR3_UQ_RHO -r ww3_strt $ww3 ww3_tp2.15" >> matrix.body + echo "cp ww3_tp2.15/input_rho/ww3_prnc_RHO.inp ww3_tp2.15/input_rho/ww3_prnc.inp" >> matrix.body + echo "$rtst -o netcdf -i input_rho -w work_PR3_UQ_RHO -r ww3_prnc $ww3 ww3_tp2.15" >> matrix.body + echo "mv ww3_tp2.15/work_PR3_UQ_RHO/ww3_prnc.out ww3_tp2.15/work_PR3_UQ_RHO/ww3_prnc_RHO.inp" >> matrix.body + echo "cp ww3_tp2.15/input_rho/ww3_prnc_TAU.inp ww3_tp2.15/input_rho/ww3_prnc.inp" >> matrix.body + echo "$rtst -o netcdf -i input_rho -w work_PR3_UQ_RHO -r ww3_prnc $ww3 ww3_tp2.15" >> matrix.body + echo "mv ww3_tp2.15/work_PR3_UQ_RHO/ww3_prnc.out ww3_tp2.15/work_PR3_UQ_RHO/ww3_prnc_TAU.inp" >> matrix.body + echo "cp ww3_tp2.15/input_rho/ww3_prnc_WND.inp ww3_tp2.15/input_rho/ww3_prnc.inp" >> matrix.body + echo "$rtst -o netcdf -i input_rho -w work_PR3_UQ_RHO -r ww3_prnc $ww3 ww3_tp2.15" >> matrix.body + echo "mv ww3_tp2.15/work_PR3_UQ_RHO/ww3_prnc.out ww3_tp2.15/work_PR3_UQ_RHO/ww3_prnc_WND.inp" >> matrix.body + echo "$rtst -o netcdf -i input_rho -w work_PR3_UQ_RHO -r ww3_shel $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -o netcdf -i input_rho -w work_PR3_UQ_RHO -r ww3_ounf $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -o netcdf -i input_rho -w work_PR3_UQ_RHO -r ww3_ounp $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -o netcdf -s TIDE -w work_TIDE $ww3 ww3_tp2.18" >> matrix.body fi if [ "$multi01" = 'y' ] @@ -785,19 +799,33 @@ if [ "$prop2D" = 'y' ] then echo ' ' >> matrix.body - echo "$rtst -s MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp1.9" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.1" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.2" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.3" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_curv_MPI -g curv -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_a_MPI -g a -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_b_MPI -g b -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body - echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.13" >> matrix.body - echo "$rtst -s MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body - echo "$rtst -s MPI -w work_MPI_5km -g 5km -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body - echo "$rtst -s TIDE_MPI -w work_TIDE_MPI -o netcdf -f -p $mpi -n $np $ww3 ww3_tp2.18" >> matrix.body + echo "$rtst -s MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp1.9" >> matrix.body + echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.1" >> matrix.body + echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.2" >> matrix.body + echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.3" >> matrix.body + echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body + echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_curv_MPI -g curv -f -p $mpi -n $np $ww3 ww3_tp2.4" >> matrix.body + echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.5" >> matrix.body + echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_a_MPI -g a -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body + echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_b_MPI -g b -f -p $mpi -n $np $ww3 ww3_tp2.9" >> matrix.body + echo "$rtst -s PR3_UQ_MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.13" >> matrix.body + echo "$rtst -s MPI -w work_PR3_UQ_MPI -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -s MPI -w work_MPI_5km -g 5km -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -s MPI -i input_rho -w work_PR3_UQ_RHO_MPI -r ww3_grid -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -s MPI -i input_rho -w work_PR3_UQ_RHO_MPI -r ww3_strt -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "cp ww3_tp2.15/input_rho/ww3_prnc_RHO.inp ww3_tp2.15/input_rho/ww3_prnc.inp" >> matrix.body + echo "$rtst -s MPI -i input_rho -w work_PR3_UQ_RHO_MPI -r ww3_prnc -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "mv ww3_tp2.15/work_PR3_UQ_RHO_MPI/ww3_prnc.out ww3_tp2.15/work_PR3_UQ_RHO_MPI/ww3_prnc_RHO.out" >> matrix.body + echo "cp ww3_tp2.15/input_rho/ww3_prnc_TAU.inp ww3_tp2.15/input_rho/ww3_prnc.inp" >> matrix.body + echo "$rtst -s MPI -i input_rho -w work_PR3_UQ_RHO_MPI -r ww3_prnc -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "mv ww3_tp2.15/work_PR3_UQ_RHO_MPI/ww3_prnc.out ww3_tp2.15/work_PR3_UQ_RHO_MPI/ww3_prnc_TAU.out" >> matrix.body + echo "cp ww3_tp2.15/input_rho/ww3_prnc_WND.inp ww3_tp2.15/input_rho/ww3_prnc.inp" >> matrix.body + echo "$rtst -s MPI -i input_rho -w work_PR3_UQ_RHO_MPI -r ww3_prnc -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "mv ww3_tp2.15/work_PR3_UQ_RHO_MPI/ww3_prnc.out ww3_tp2.15/work_PR3_UQ_RHO_MPI/ww3_prnc_WND.out" >> matrix.body + echo "$rtst -s MPI -i input_rho -w work_PR3_UQ_RHO_MPI -r ww3_shel -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -s MPI -i input_rho -w work_PR3_UQ_RHO_MPI -r ww3_ounf -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -s MPI -i input_rho -w work_PR3_UQ_RHO_MPI -r ww3_ounp -f -p $mpi -n $np $ww3 ww3_tp2.15" >> matrix.body + echo "$rtst -s TIDE_MPI -w work_TIDE_MPI -o netcdf -f -p $mpi -n $np $ww3 ww3_tp2.18" >> matrix.body fi if [ "$multi01" = 'y' ] diff --git a/regtests/bin/matrix_divider_p.sh b/regtests/bin/matrix_divider_p.sh index 67c4f0e24..8445d7808 100755 --- a/regtests/bin/matrix_divider_p.sh +++ b/regtests/bin/matrix_divider_p.sh @@ -30,8 +30,9 @@ maxlist2=92 #Put the job requirement/spec in "before" sed -e "/run_test/,\$d" matrix.tmp > before #Put the list of tests in "list" -command egrep 'ww3_tp2.14|ww3_tp2.17|ww3_tp2.21' matrix.tmp | cat >> list_heavy +command egrep 'ww3_tp2.14|ww3_tp2.15|ww3_tp2.17|ww3_tp2.21' matrix.tmp | cat >> list_heavy awk '!/ww3_tp2.14/' matrix.tmp > tmpfile && mv tmpfile matrix.tmp +awk '!/ww3_tp2.15/' matrix.tmp > tmpfile && mv tmpfile matrix.tmp awk '!/ww3_tp2.17/' matrix.tmp > tmpfile && mv tmpfile matrix.tmp awk '!/ww3_tp2.21/' matrix.tmp > tmpfile && mv tmpfile matrix.tmp command egrep 'mpirun|mpiexec|MPI_LAUNCH' matrix.tmp | cat >> list_mpi diff --git a/regtests/mww3_test_01/input/ww3_shel.inp b/regtests/mww3_test_01/input/ww3_shel.inp index 42c86e622..1585f747e 100644 --- a/regtests/mww3_test_01/input/ww3_shel.inp +++ b/regtests/mww3_test_01/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ T T F T F T - T + T F + F F + F F F F F diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_a.inp b/regtests/mww3_test_02/input/ww3_multi_grdset_a.inp index 8ba5030c5..aa881aab8 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_a.inp +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_a.inp @@ -2,8 +2,8 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 2 0 F 1 F F $ - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'coarse' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'coarse' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ 19680606 000000 19680608 000000 $ diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_b.inp b/regtests/mww3_test_02/input/ww3_multi_grdset_b.inp index 5792de20c..893a3b058 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_b.inp +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_b.inp @@ -2,8 +2,8 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 2 0 F 1 F F $ - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'fine' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'fine' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ 19680606 000000 19680608 000000 $ diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_c.inp b/regtests/mww3_test_02/input/ww3_multi_grdset_c.inp index 34185bb4c..627465a85 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_c.inp +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_c.inp @@ -2,8 +2,8 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 2 0 F 1 F F $ - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'tiny' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'tiny' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ 19680606 000000 19680608 000000 $ diff --git a/regtests/mww3_test_02/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_02/input/ww3_multi_grdset_d.inp index 3e4aceb26..76c6f7bdd 100644 --- a/regtests/mww3_test_02/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_02/input/ww3_multi_grdset_d.inp @@ -2,8 +2,8 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 2 0 F 1 F F $ - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'respec' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'respec' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ 19680606 000000 19680608 000000 $ diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_a.inp b/regtests/mww3_test_03/input/ww3_multi_grdset_a.inp index 5084449a7..204b72936 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_a.inp +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_a.inp @@ -1,9 +1,9 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 3 0 F 1 F F - 'low1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'low2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'low3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'low1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'low2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'low3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 19680606 000000 19680606 120000 $ diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_b.inp b/regtests/mww3_test_03/input/ww3_multi_grdset_b.inp index 02cbe619f..fc44e7422 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_b.inp +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_b.inp @@ -1,10 +1,10 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 4 0 F 1 F F - 'low0' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'hgh1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'hgh2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'hgh3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'low0' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'hgh1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'hgh2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'hgh3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ 19680606 000000 19680606 120000 $ diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_c.inp b/regtests/mww3_test_03/input/ww3_multi_grdset_c.inp index 3db8ce6b6..a367f1558 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_c.inp +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_c.inp @@ -1,10 +1,10 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 4 0 F 1 F F - 'low1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'low2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'low3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'hgh0' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'low1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'low2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'low3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'hgh0' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ 19680606 000000 19680606 120000 $ diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_03/input/ww3_multi_grdset_d.inp index cc578cee3..007c3553d 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_d.inp @@ -1,12 +1,12 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 6 0 F 1 F F - 'low1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'low2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'low3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'hgh1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'hgh2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'hgh3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'low1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'low2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'low3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'hgh1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'hgh2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'hgh3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ 19680606 000000 19680606 120000 $ diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_d2.inp b/regtests/mww3_test_03/input/ww3_multi_grdset_d2.inp index e83eff3c4..4b5a657fb 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_d2.inp +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_d2.inp @@ -1,12 +1,12 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 6 0 F 1 F F - 'low1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 0.33 F - 'low2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.33 0.67 F - 'low3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.67 1.00 F - 'hgh1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 0.33 F - 'hgh2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.33 0.67 F - 'hgh3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.67 1.00 F + 'low1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 0.33 F + 'low2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.33 0.67 F + 'low3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.67 1.00 F + 'hgh1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 0.33 F + 'hgh2' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.33 0.67 F + 'hgh3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.67 1.00 F $ 19680606 000000 19680606 120000 $ diff --git a/regtests/mww3_test_03/input/ww3_multi_grdset_e.inp b/regtests/mww3_test_03/input/ww3_multi_grdset_e.inp index daa54d535..b3cca1196 100644 --- a/regtests/mww3_test_03/input/ww3_multi_grdset_e.inp +++ b/regtests/mww3_test_03/input/ww3_multi_grdset_e.inp @@ -4,8 +4,8 @@ $ ------------------------------------ $ 'points' $ - 'low0' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'hgh0' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'low0' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'hgh0' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ 19680606 000000 19680606 120000 $ diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_a.inp b/regtests/mww3_test_04/input/ww3_multi_grdset_a.inp index ce1c5b111..d4acddeac 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_a.inp +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_a.inp @@ -2,9 +2,9 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 3 0 F 1 T T $ - 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F + 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F $ 19680606 000000 19680607 120000 $ diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_b.inp b/regtests/mww3_test_04/input/ww3_multi_grdset_b.inp index 33c559f8c..6b652befc 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_b.inp +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_b.inp @@ -4,9 +4,9 @@ $ ------------------------------------ $ 'points' $ - 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F + 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F $ 19680606 000000 19680607 120000 $ diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_c.inp b/regtests/mww3_test_04/input/ww3_multi_grdset_c.inp index b196d307c..e466f700b 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_c.inp +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_c.inp @@ -4,9 +4,9 @@ $ ------------------------------------ $ 'points' $ - 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F + 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F $ 19680606 000000 19680607 120000 $ diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_04/input/ww3_multi_grdset_d.inp index 4be1543c8..1a0d33175 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_d.inp @@ -4,9 +4,9 @@ $ ------------------------------------ $ 'points' $ - 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F + 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F $ 19680606 000000 19680607 120000 $ diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_e.inp b/regtests/mww3_test_04/input/ww3_multi_grdset_e.inp index 8e0aac107..9f47ff026 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_e.inp +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_e.inp @@ -4,9 +4,9 @@ $ ------------------------------------ $ 'points' $ - 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F + 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'inner' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F $ 19680606 000000 19680607 120000 $ diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_f.inp b/regtests/mww3_test_04/input/ww3_multi_grdset_f.inp index 9351cdb48..40e6ee40e 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_f.inp +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_f.inp @@ -4,9 +4,9 @@ $ ------------------------------------ $ 'points' $ - 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'mount' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F + 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'mount' 'no' 'native' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F $ 19680606 000000 19680607 120000 $ diff --git a/regtests/mww3_test_04/input/ww3_multi_grdset_g.inp b/regtests/mww3_test_04/input/ww3_multi_grdset_g.inp index 387ef1289..633cc2d81 100644 --- a/regtests/mww3_test_04/input/ww3_multi_grdset_g.inp +++ b/regtests/mww3_test_04/input/ww3_multi_grdset_g.inp @@ -4,9 +4,9 @@ $ ------------------------------------ $ 'points' $ - 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'mount' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F + 'bound' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'outer' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'mount' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F $ 19680606 000000 19680607 120000 $ diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_a.inp b/regtests/mww3_test_05/input/ww3_multi_grdset_a.inp index 63101f6c2..6c40b4c60 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_a.inp +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_a.inp @@ -2,13 +2,13 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 3 1 T 1 T T $ - 'input' F F T F F F F + 'input' F F T F F F F F F $ 'points' $ - 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F + 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F $ 19680606 000000 19680606 060000 $ diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_b.inp b/regtests/mww3_test_05/input/ww3_multi_grdset_b.inp index 52eef62aa..e021cc85e 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_b.inp +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_b.inp @@ -2,11 +2,11 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 1 1 T 1 T T $ - 'input' F F T F F F F + 'input' F F T F F F F F F $ 'points' $ - 'grd0' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'grd0' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 19680606 000000 19680606 003000 $ diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_c.inp b/regtests/mww3_test_05/input/ww3_multi_grdset_c.inp index 7d377829c..a8b013c94 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_c.inp +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_c.inp @@ -6,7 +6,7 @@ $ $ 'points' $ - 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 19680606 000000 19680606 060000 $ diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_05/input/ww3_multi_grdset_d.inp index 88916b050..d1f497093 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_d.inp @@ -6,7 +6,7 @@ $ $ 'points' $ - 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 19680606 000000 19680606 060000 $ diff --git a/regtests/mww3_test_05/input/ww3_multi_grdset_e.inp b/regtests/mww3_test_05/input/ww3_multi_grdset_e.inp index 19f6025b3..6c7b5fe69 100644 --- a/regtests/mww3_test_05/input/ww3_multi_grdset_e.inp +++ b/regtests/mww3_test_05/input/ww3_multi_grdset_e.inp @@ -6,7 +6,7 @@ $ $ 'points' $ - 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 19680606 000000 19680606 060000 $ diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp index 3e9639df7..b515d5110 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp @@ -42,12 +42,12 @@ $ spectral output grid, and the point output will be written to the $ file out_pnt.points $ $ -------------------------------------------------------------------- $ -$ Now each actual wave model grid is defined using 13 parameters to be +$ Now each actual wave model grid is defined using 15 parameters to be $ read fom a single line in the file. Each line contains the following $ parameters $ 1) Define the grid with the extension of the mod_def file. -$ 2-8) Define the inputs used by the grids with 8 keywords -$ corresponding to the 8 flags defining the input in the +$ 2-10) Define the inputs used by the grids with 10 keywords +$ corresponding to the 10 flags defining the input in the $ input files. Valid keywords are: $ 'no' : This input is not used. $ 'native' : This grid has its own input files, e.g. grid @@ -55,21 +55,21 @@ $ grdX (mod_def.grdX) uses ice.grdX. $ 'MODID' : Take input from the grid identified by $ MODID. In the example below, all grids get $ their wind from wind.input (mod_def.input). -$ 9) Rank number of grid (internally sorted and reassigned). -$ 10) Group number (internally reassigned so that different +$ 11) Rank number of grid (internally sorted and reassigned). +$ 12) Group number (internally reassigned so that different $ ranks result in different group numbers. -$ 11-12) Define fraction of communicator (processes) used for this +$ 13-14) Define fraction of communicator (processes) used for this $ grid. -$ 13) Flag identifying dumping of boundary data used by this +$ 15) Flag identifying dumping of boundary data used by this $ grid. If true, the file nest.MODID is generated. $ -$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} -$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} -$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} +$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} +$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} +$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} $ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F -$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F +$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ $ $ In this example three grids are used requiring the files diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp index a73f4874a..25f4cadac 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp @@ -42,12 +42,12 @@ $ spectral output grid, and the point output will be written to the $ file out_pnt.points $ $ -------------------------------------------------------------------- $ -$ Now each actual wave model grid is defined using 13 parameters to be +$ Now each actual wave model grid is defined using 15 parameters to be $ read fom a single line in the file. Each line contains the following $ parameters $ 1) Define the grid with the extension of the mod_def file. -$ 2-8) Define the inputs used by the grids with 8 keywords -$ corresponding to the 8 flags defining the input in the +$ 2-10) Define the inputs used by the grids with 10 keywords +$ corresponding to the 10 flags defining the input in the $ input files. Valid keywords are: $ 'no' : This input is not used. $ 'native' : This grid has its own input files, e.g. grid @@ -55,21 +55,21 @@ $ grdX (mod_def.grdX) uses ice.grdX. $ 'MODID' : Take input from the grid identified by $ MODID. In the example below, all grids get $ their wind from wind.input (mod_def.input). -$ 9) Rank number of grid (internally sorted and reassigned). -$ 10) Group number (internally reassigned so that different +$ 11) Rank number of grid (internally sorted and reassigned). +$ 12) Group number (internally reassigned so that different $ ranks result in different group numbers. -$ 11-12) Define fraction of communicator (processes) used for this +$ 13-14) Define fraction of communicator (processes) used for this $ grid. -$ 13) Flag identifying dumping of boundary data used by this +$ 15) Flag identifying dumping of boundary data used by this $ grid. If true, the file nest.MODID is generated. $ -$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} -$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} -$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} -$ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F -$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F +$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} +$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} +$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} +$ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F +$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ $ $ In this example three grids are used requiring the files diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp index 5a7094f3a..cbbd52c91 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp @@ -42,12 +42,12 @@ $ spectral output grid, and the point output will be written to the $ file out_pnt.points $ $ -------------------------------------------------------------------- $ -$ Now each actual wave model grid is defined using 13 parameters to be +$ Now each actual wave model grid is defined using 15 parameters to be $ read fom a single line in the file. Each line contains the following $ parameters $ 1) Define the grid with the extension of the mod_def file. -$ 2-8) Define the inputs used by the grids with 8 keywords -$ corresponding to the 8 flags defining the input in the +$ 2-10) Define the inputs used by the grids with 10 keywords +$ corresponding to the 10 flags defining the input in the $ input files. Valid keywords are: $ 'no' : This input is not used. $ 'native' : This grid has its own input files, e.g. grid @@ -55,21 +55,21 @@ $ grdX (mod_def.grdX) uses ice.grdX. $ 'MODID' : Take input from the grid identified by $ MODID. In the example below, all grids get $ their wind from wind.input (mod_def.input). -$ 9) Rank number of grid (internally sorted and reassigned). -$ 10) Group number (internally reassigned so that different +$ 10) Rank number of grid (internally sorted and reassigned). +$ 12) Group number (internally reassigned so that different $ ranks result in different group numbers. -$ 11-12) Define fraction of communicator (processes) used for this +$ 13-14) Define fraction of communicator (processes) used for this $ grid. -$ 13) Flag identifying dumping of boundary data used by this +$ 15) Flag identifying dumping of boundary data used by this $ grid. If true, the file nest.MODID is generated. $ -$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} -$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} -$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} -$ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F -$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F - 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F +$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} +$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} +$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} +$ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F +$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ $ $ In this example three grids are used requiring the files diff --git a/regtests/mww3_test_06/input/ww3_outf_depth.inp b/regtests/mww3_test_06/input/ww3_outf_depth.inp index 986dce65d..008fa1903 100644 --- a/regtests/mww3_test_06/input/ww3_outf_depth.inp +++ b/regtests/mww3_test_06/input/ww3_outf_depth.inp @@ -10,8 +10,8 @@ $ Request flags identifying fields as in ww3_shel input and section 2.4 of the m $------------------------------------------------------------------------------------------------------------------- $ (1) Forcing Fields T -$ DPT CUR WND DT WLV ICE IBG D50 - T F F F F F F F +$ DPT CUR WND DT WLV ICE TAU RHO IBG D50 + T F F F F F F F F F $ (2) Standard mean wave Parameters F $ (3) Frequency-dependent parameters diff --git a/regtests/mww3_test_07/input/ww3_multi_grdset.inp b/regtests/mww3_test_07/input/ww3_multi_grdset.inp index 1aad96c86..9bb315518 100644 --- a/regtests/mww3_test_07/input/ww3_multi_grdset.inp +++ b/regtests/mww3_test_07/input/ww3_multi_grdset.inp @@ -5,8 +5,8 @@ $ $ 'wind_ncep' F F T F F F F $ 'ice_cep2b' F F F T F F F 'points' - 'rect1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 T - 'refug' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 T + 'rect1' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 T + 'refug' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 T $ 20030101 000000 20030102 120000 $ diff --git a/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.inp b/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.inp index 4d19a9ba4..49b359d71 100644 --- a/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.inp +++ b/regtests/mww3_test_08/i_highres_multi/ww3_multi_grdset_a.inp @@ -11,12 +11,12 @@ $ $ input data grids : NONE $ unified point output file : NONE $ -$ Now each actual wave model grid is defined using 13 parameters to be +$ Now each actual wave model grid is defined using 15 parameters to be $ read fom a single line in the file. Each line contains the following $ parameters $ 1) Define the grid with the extension of the mod_def file. -$ 2-8) Define the inputs used by the grids with 8 keywords -$ corresponding to the 8 flags defining the input in the +$ 2-10) Define the inputs used by the grids with 10 keywords +$ corresponding to the 10 flags defining the input in the $ input files. Valid keywords are: $ 'no' : This input is not used. $ 'native' : This grid has its own input files, e.g. grid @@ -24,15 +24,15 @@ $ grdX (mod_def.grdX) uses ice.grdX. $ 'MODID' : Take input from the grid identified by $ MODID. In the example below, all grids get $ their wind from wind.input (mod_def.input). -$ 9) Rank number of grid (internally sorted and reassigned). -$ 10) Group number (internally reassigned so that different +$ 11) Rank number of grid (internally sorted and reassigned). +$ 12) Group number (internally reassigned so that different $ ranks result in different group numbers. -$ 11-12) Define fraction of communicator (processes) used for this +$ 13-14) Define fraction of communicator (processes) used for this $ grid. -$ 13) Flag identifying dumping of boundary data used by this +$ 15) Flag identifying dumping of boundary data used by this $ grid. If true, the file nest.MODID is generated. $ - 'highres' 'no' 'no' 'native' 'native' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'highres' 'no' 'no' 'native' 'native' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ $ Starting and ending times for the entire model run 20151025 000000 20151026 000000 diff --git a/regtests/mww3_test_08/i_highres_shel/ww3_shel.inp b/regtests/mww3_test_08/i_highres_shel/ww3_shel.inp index ff6d69378..0a3343dff 100644 --- a/regtests/mww3_test_08/i_highres_shel/ww3_shel.inp +++ b/regtests/mww3_test_08/i_highres_shel/ww3_shel.inp @@ -7,7 +7,9 @@ $ F F Water levels F F Currents T F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.inp b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.inp index 869a5a695..a240e3869 100644 --- a/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.inp +++ b/regtests/mww3_test_08/i_highres_shel_IC1/ww3_shel.inp @@ -15,7 +15,9 @@ $ F F Water levels F F Currents T F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.inp b/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.inp index 0292658cd..855ae2ad3 100644 --- a/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.inp +++ b/regtests/mww3_test_08/i_lowres_multi/ww3_multi_grdset_a.inp @@ -11,12 +11,12 @@ $ $ input data grids : NONE $ unified point output file : NONE $ -$ Now each actual wave model grid is defined using 13 parameters to be +$ Now each actual wave model grid is defined using 15 parameters to be $ read fom a single line in the file. Each line contains the following $ parameters $ 1) Define the grid with the extension of the mod_def file. -$ 2-8) Define the inputs used by the grids with 8 keywords -$ corresponding to the 8 flags defining the input in the +$ 2-10) Define the inputs used by the grids with 10 keywords +$ corresponding to the 10 flags defining the input in the $ input files. Valid keywords are: $ 'no' : This input is not used. $ 'native' : This grid has its own input files, e.g. grid @@ -24,15 +24,15 @@ $ grdX (mod_def.grdX) uses ice.grdX. $ 'MODID' : Take input from the grid identified by $ MODID. In the example below, all grids get $ their wind from wind.input (mod_def.input). -$ 9) Rank number of grid (internally sorted and reassigned). -$ 10) Group number (internally reassigned so that different +$ 11) Rank number of grid (internally sorted and reassigned). +$ 12) Group number (internally reassigned so that different $ ranks result in different group numbers. -$ 11-12) Define fraction of communicator (processes) used for this +$ 13-14) Define fraction of communicator (processes) used for this $ grid. -$ 13) Flag identifying dumping of boundary data used by this +$ 15) Flag identifying dumping of boundary data used by this $ grid. If true, the file nest.MODID is generated. $ - 'lowres' 'no' 'no' 'native' 'native' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'lowres' 'no' 'no' 'native' 'native' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ $ Starting and ending times for the entire model run 20151025 000000 20151026 000000 diff --git a/regtests/mww3_test_08/i_lowres_shel/ww3_shel.inp b/regtests/mww3_test_08/i_lowres_shel/ww3_shel.inp index ff6d69378..0a3343dff 100644 --- a/regtests/mww3_test_08/i_lowres_shel/ww3_shel.inp +++ b/regtests/mww3_test_08/i_lowres_shel/ww3_shel.inp @@ -7,7 +7,9 @@ $ F F Water levels F F Currents T F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.inp b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.inp index 869a5a695..a240e3869 100644 --- a/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.inp +++ b/regtests/mww3_test_08/i_lowres_shel_IC1/ww3_shel.inp @@ -15,7 +15,9 @@ $ F F Water levels F F Currents T F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/mww3_test_08/input/ww3_multi_grdset_a.inp b/regtests/mww3_test_08/input/ww3_multi_grdset_a.inp index b767f66cd..1b16b4b34 100644 --- a/regtests/mww3_test_08/input/ww3_multi_grdset_a.inp +++ b/regtests/mww3_test_08/input/ww3_multi_grdset_a.inp @@ -11,12 +11,12 @@ $ $ input data grids : NONE $ unified point output file : NONE $ -$ Now each actual wave model grid is defined using 13 parameters to be +$ Now each actual wave model grid is defined using 15 parameters to be $ read fom a single line in the file. Each line contains the following $ parameters $ 1) Define the grid with the extension of the mod_def file. -$ 2-8) Define the inputs used by the grids with 8 keywords -$ corresponding to the 8 flags defining the input in the +$ 2-10) Define the inputs used by the grids with 10 keywords +$ corresponding to the 10 flags defining the input in the $ input files. Valid keywords are: $ 'no' : This input is not used. $ 'native' : This grid has its own input files, e.g. grid @@ -24,16 +24,16 @@ $ grdX (mod_def.grdX) uses ice.grdX. $ 'MODID' : Take input from the grid identified by $ MODID. In the example below, all grids get $ their wind from wind.input (mod_def.input). -$ 9) Rank number of grid (internally sorted and reassigned). -$ 10) Group number (internally reassigned so that different +$ 11) Rank number of grid (internally sorted and reassigned). +$ 12) Group number (internally reassigned so that different $ ranks result in different group numbers. -$ 11-12) Define fraction of communicator (processes) used for this +$ 13-14) Define fraction of communicator (processes) used for this $ grid. -$ 13) Flag identifying dumping of boundary data used by this +$ 15) Flag identifying dumping of boundary data used by this $ grid. If true, the file nest.MODID is generated. $ - 'outer' 'no' 'no' 'native' 'native' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'inner' 'no' 'no' 'native' 'native' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'outer' 'no' 'no' 'native' 'native' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'inner' 'no' 'no' 'native' 'native' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ $ Starting and ending times for the entire model run 20151025 000000 20151026 000000 diff --git a/regtests/ww3_ta1/input_UPD0F_O/ww3_shel.inp b/regtests/ww3_ta1/input_UPD0F_O/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD0F_O/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD0F_O/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD0F_U/ww3_shel.inp b/regtests/ww3_ta1/input_UPD0F_U/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD0F_U/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD0F_U/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD2_O/ww3_shel.inp b/regtests/ww3_ta1/input_UPD2_O/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD2_O/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD2_O/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD2_U/ww3_shel.inp b/regtests/ww3_ta1/input_UPD2_U/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD2_U/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD2_U/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_shel.inp b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD2_U_cap/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD2_U_cap/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD3_O/ww3_shel.inp b/regtests/ww3_ta1/input_UPD3_O/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD3_O/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD3_O/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD3_U/ww3_shel.inp b/regtests/ww3_ta1/input_UPD3_U/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD3_U/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD3_U/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_shel.inp b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD3_U_cap/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD3_U_cap/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp b/regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD5_O/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp b/regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD5_U/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.inp b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD5_U_cap/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp b/regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD6_O/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp b/regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD6_U/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.inp b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.inp index cb19025f8..d26fb87e5 100644 --- a/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.inp +++ b/regtests/ww3_ta1/input_UPD6_U_cap/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tbt1.1/input/ww3_shel.inp b/regtests/ww3_tbt1.1/input/ww3_shel.inp index 392806a9e..2e8370901 100644 --- a/regtests/ww3_tbt1.1/input/ww3_shel.inp +++ b/regtests/ww3_tbt1.1/input/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tbt2.1/input/ww3_shel.inp b/regtests/ww3_tbt2.1/input/ww3_shel.inp index 8aede4da7..611d2805d 100644 --- a/regtests/ww3_tbt2.1/input/ww3_shel.inp +++ b/regtests/ww3_tbt2.1/input/ww3_shel.inp @@ -14,7 +14,9 @@ $ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tc1/input/ww3_shel.inp b/regtests/ww3_tc1/input/ww3_shel.inp index e361d8b89..cd9ff0b1a 100644 --- a/regtests/ww3_tc1/input/ww3_shel.inp +++ b/regtests/ww3_tc1/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tic1.1/input_IC1/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC1/ww3_shel.inp index 274b67dee..84c2eaecc 100644 --- a/regtests/ww3_tic1.1/input_IC1/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC1/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC1_156x3/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC1_156x3/ww3_shel.inp index 274b67dee..84c2eaecc 100644 --- a/regtests/ww3_tic1.1/input_IC1_156x3/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC1_156x3/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC2_ifr/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC2_ifr/ww3_shel.inp index 092872ad0..9d8c22654 100644 --- a/regtests/ww3_tic1.1/input_IC2_ifr/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC2_ifr/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_shel.inp index 9591f0e79..579728b6f 100644 --- a/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC2_nondisp/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC2_nrl/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC2_nrl/ww3_shel.inp index f7d83b836..f99ec1b18 100644 --- a/regtests/ww3_tic1.1/input_IC2_nrl/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC2_nrl/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC3/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC3/ww3_shel.inp index 29c67d960..683804c24 100644 --- a/regtests/ww3_tic1.1/input_IC3/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC3/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC3NL/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC3NL/ww3_shel.inp index a0ddb3924..a046dbeb5 100644 --- a/regtests/ww3_tic1.1/input_IC3NL/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC3NL/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_shel.inp index 91d11d7af..e89830ee5 100644 --- a/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC3_nondisp/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.inp index d14b4de0c..85d6a4dd0 100644 --- a/regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC4_M1/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.inp index 1d53bb071..1b9f6b3a5 100644 --- a/regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC4_M2/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.inp index 5d2717ff5..835f66c48 100644 --- a/regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC4_M3/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.inp index 60b032531..a134096b5 100644 --- a/regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC4_M4/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.inp index 29fdbba08..21b5247ce 100644 --- a/regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC4_M5/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.inp index 42e486dc3..8fef2cf82 100644 --- a/regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC4_M6/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.inp index fb09a0f6c..c496220ff 100644 --- a/regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC4_M7/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IC5/ww3_shel.inp b/regtests/ww3_tic1.1/input_IC5/ww3_shel.inp index 7552c8991..590150df7 100644 --- a/regtests/ww3_tic1.1/input_IC5/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IC5/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.1/input_IS2/ww3_shel.inp b/regtests/ww3_tic1.1/input_IS2/ww3_shel.inp index 550b6525a..ae07f8af6 100644 --- a/regtests/ww3_tic1.1/input_IS2/ww3_shel.inp +++ b/regtests/ww3_tic1.1/input_IS2/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_shel.inp b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_shel.inp index 6c74786b6..5581dc712 100644 --- a/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_shel.inp +++ b/regtests/ww3_tic1.2/input_IC3_A0.5k/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_shel.inp b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_shel.inp index 6c74786b6..5581dc712 100644 --- a/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_shel.inp +++ b/regtests/ww3_tic1.2/input_IC3_A1.0k/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_shel.inp b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_shel.inp index 6c74786b6..5581dc712 100644 --- a/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_shel.inp +++ b/regtests/ww3_tic1.2/input_IC3_A2.5k/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_shel.inp b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_shel.inp index 6c74786b6..5581dc712 100644 --- a/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_shel.inp +++ b/regtests/ww3_tic1.2/input_IC3_B0.5k/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_shel.inp b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_shel.inp index 6c74786b6..5581dc712 100644 --- a/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_shel.inp +++ b/regtests/ww3_tic1.2/input_IC3_B1.0k/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_shel.inp b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_shel.inp index 6c74786b6..5581dc712 100644 --- a/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_shel.inp +++ b/regtests/ww3_tic1.2/input_IC3_B2.5k/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_shel.inp b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_shel.inp index 27c2325da..42e25ee60 100644 --- a/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_shel.inp +++ b/regtests/ww3_tic1.2/input_IC3_CHENG/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_shel.inp b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_shel.inp index 0c5733fd0..a2ed017bd 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_shel.inp +++ b/regtests/ww3_tic1.2/input_IC3_V1_G/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_shel.inp b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_shel.inp index 0c5733fd0..a2ed017bd 100644 --- a/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_shel.inp +++ b/regtests/ww3_tic1.2/input_IC3_V1_h/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_shel.inp b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_shel.inp index 6c74786b6..5581dc712 100644 --- a/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_shel.inp +++ b/regtests/ww3_tic1.3/input_IC3_0.5k/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_shel.inp b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_shel.inp index 6c74786b6..5581dc712 100644 --- a/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_shel.inp +++ b/regtests/ww3_tic1.3/input_IC3_2.5k/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_shel.inp b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_shel.inp index 030bc70a1..87c1268d0 100644 --- a/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_shel.inp +++ b/regtests/ww3_tic1.3/input_IC3_CHENG/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_shel.inp b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_shel.inp index 0c5733fd0..a2ed017bd 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_shel.inp +++ b/regtests/ww3_tic1.3/input_IC3_V1_G/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_shel.inp b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_shel.inp index 0c5733fd0..a2ed017bd 100644 --- a/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_shel.inp +++ b/regtests/ww3_tic1.3/input_IC3_V1_h/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic1.4/input/ww3_shel.inp b/regtests/ww3_tic1.4/input/ww3_shel.inp index 902d5432a..4e62a5da7 100755 --- a/regtests/ww3_tic1.4/input/ww3_shel.inp +++ b/regtests/ww3_tic1.4/input/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ T T Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic2.1/input_IC1/ww3_shel.inp b/regtests/ww3_tic2.1/input_IC1/ww3_shel.inp index 74efaa658..647625c54 100644 --- a/regtests/ww3_tic2.1/input_IC1/ww3_shel.inp +++ b/regtests/ww3_tic2.1/input_IC1/ww3_shel.inp @@ -14,7 +14,9 @@ $ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.inp b/regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.inp index 74efaa658..647625c54 100644 --- a/regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.inp +++ b/regtests/ww3_tic2.1/input_IC2IS2/ww3_shel.inp @@ -14,7 +14,9 @@ $ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic2.1/input_IC4/ww3_shel.inp b/regtests/ww3_tic2.1/input_IC4/ww3_shel.inp index 4c18ce73b..df9b5fe75 100644 --- a/regtests/ww3_tic2.1/input_IC4/ww3_shel.inp +++ b/regtests/ww3_tic2.1/input_IC4/ww3_shel.inp @@ -14,7 +14,9 @@ $ F F Water levels F F Currents F F Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tic2.2/input/ww3_shel.inp b/regtests/ww3_tic2.2/input/ww3_shel.inp index a68ef1eac..c8ee18f40 100644 --- a/regtests/ww3_tic2.2/input/ww3_shel.inp +++ b/regtests/ww3_tic2.2/input/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F F F F F - T + T F + F F + F F F F F diff --git a/regtests/ww3_tic2.2/input_IC2/ww3_shel.inp b/regtests/ww3_tic2.2/input_IC2/ww3_shel.inp index d1dc3531f..3ee395f0e 100644 --- a/regtests/ww3_tic2.2/input_IC2/ww3_shel.inp +++ b/regtests/ww3_tic2.2/input_IC2/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F F F F F - T + T F + F F + F F F F F diff --git a/regtests/ww3_tic2.3/input/ww3_shel.inp b/regtests/ww3_tic2.3/input/ww3_shel.inp index 98550ce8a..b11cee4a0 100755 --- a/regtests/ww3_tic2.3/input/ww3_shel.inp +++ b/regtests/ww3_tic2.3/input/ww3_shel.inp @@ -11,7 +11,9 @@ $ ------------------------------ F F F F F F - T + T F + F F + F F F F F diff --git a/regtests/ww3_tig1.1/input/ww3_shel.inp b/regtests/ww3_tig1.1/input/ww3_shel.inp index 9cb4d5a1a..57396fc89 100644 --- a/regtests/ww3_tig1.1/input/ww3_shel.inp +++ b/regtests/ww3_tig1.1/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tnc1/input/ww3_shel.inp b/regtests/ww3_tnc1/input/ww3_shel.inp index 56261ed17..c3ba320f9 100644 --- a/regtests/ww3_tnc1/input/ww3_shel.inp +++ b/regtests/ww3_tnc1/input/ww3_shel.inp @@ -5,7 +5,9 @@ $ T/F flag for definition as a homogeneous field. F F Water levels F F Currents T T Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp1.1/input/ww3_shel.inp b/regtests/ww3_tp1.1/input/ww3_shel.inp index 0f7f488b0..7ad98f8b8 100644 --- a/regtests/ww3_tp1.1/input/ww3_shel.inp +++ b/regtests/ww3_tp1.1/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp1.1/input2/ww3_shel.inp b/regtests/ww3_tp1.1/input2/ww3_shel.inp index 0f7f488b0..7ad98f8b8 100644 --- a/regtests/ww3_tp1.1/input2/ww3_shel.inp +++ b/regtests/ww3_tp1.1/input2/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp1.10/input/ww3_shel.inp b/regtests/ww3_tp1.10/input/ww3_shel.inp index 800f876af..1e792e90f 100644 --- a/regtests/ww3_tp1.10/input/ww3_shel.inp +++ b/regtests/ww3_tp1.10/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp1.2/input/ww3_shel.inp b/regtests/ww3_tp1.2/input/ww3_shel.inp index 8c956d5b8..c639ae4a7 100644 --- a/regtests/ww3_tp1.2/input/ww3_shel.inp +++ b/regtests/ww3_tp1.2/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp1.3/input/ww3_outf_whgt_end.inp b/regtests/ww3_tp1.3/input/ww3_outf_whgt_end.inp index 31c79769e..cdbdee4b5 100644 --- a/regtests/ww3_tp1.3/input/ww3_outf_whgt_end.inp +++ b/regtests/ww3_tp1.3/input/ww3_outf_whgt_end.inp @@ -4,8 +4,8 @@ $ ----------------------------------------- $ $ (1) Forcing Fields T -$ DPT CUR WND DT WLV ICE IBG D50 - T F F F F F F F +$ DPT CUR WND DT WLV ICE TAU RHO IBG D50 + T F F F F F F F F F $ (2) Standard mean wave Parameters T $ HS LM TZ TE T01 FP DIR SPR DP diff --git a/regtests/ww3_tp1.3/input/ww3_shel.inp b/regtests/ww3_tp1.3/input/ww3_shel.inp index b110f4942..d615b8a21 100644 --- a/regtests/ww3_tp1.3/input/ww3_shel.inp +++ b/regtests/ww3_tp1.3/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp1.4/input/ww3_shel.inp b/regtests/ww3_tp1.4/input/ww3_shel.inp index 035b5e658..845a67a4e 100644 --- a/regtests/ww3_tp1.4/input/ww3_shel.inp +++ b/regtests/ww3_tp1.4/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp1.5/input/ww3_shel.inp b/regtests/ww3_tp1.5/input/ww3_shel.inp index 2b6b53f62..197be1e73 100644 --- a/regtests/ww3_tp1.5/input/ww3_shel.inp +++ b/regtests/ww3_tp1.5/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp1.6/input/ww3_shel.inp b/regtests/ww3_tp1.6/input/ww3_shel.inp index 686bfa6e3..e1c7d503b 100644 --- a/regtests/ww3_tp1.6/input/ww3_shel.inp +++ b/regtests/ww3_tp1.6/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F F T F F F - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp1.6/input_moderate_current/ww3_shel.inp b/regtests/ww3_tp1.6/input_moderate_current/ww3_shel.inp index 686bfa6e3..e1c7d503b 100644 --- a/regtests/ww3_tp1.6/input_moderate_current/ww3_shel.inp +++ b/regtests/ww3_tp1.6/input_moderate_current/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F F T F F F - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp1.7/input/ww3_shel.inp b/regtests/ww3_tp1.7/input/ww3_shel.inp index a3328f4e9..466d063e0 100755 --- a/regtests/ww3_tp1.7/input/ww3_shel.inp +++ b/regtests/ww3_tp1.7/input/ww3_shel.inp @@ -7,7 +7,9 @@ $ F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp1.7/input_OBST/ww3_shel.inp b/regtests/ww3_tp1.7/input_OBST/ww3_shel.inp index a3328f4e9..466d063e0 100755 --- a/regtests/ww3_tp1.7/input_OBST/ww3_shel.inp +++ b/regtests/ww3_tp1.7/input_OBST/ww3_shel.inp @@ -7,7 +7,9 @@ $ F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp1.8/input/ww3_shel.inp b/regtests/ww3_tp1.8/input/ww3_shel.inp index 2b53da5c5..e3aef3b48 100644 --- a/regtests/ww3_tp1.8/input/ww3_shel.inp +++ b/regtests/ww3_tp1.8/input/ww3_shel.inp @@ -7,7 +7,9 @@ $ as a homogeneous field (first three only); eight input lines. -------$ F T Water levels F T Currents F T Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp1.8/input_BJ/ww3_shel.inp b/regtests/ww3_tp1.8/input_BJ/ww3_shel.inp index 37d0a7a5f..95ac16a35 100644 --- a/regtests/ww3_tp1.8/input_BJ/ww3_shel.inp +++ b/regtests/ww3_tp1.8/input_BJ/ww3_shel.inp @@ -7,7 +7,9 @@ $ as a homogeneous field (first three only); eight input lines. -------$ F T Water levels F T Currents F T Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp1.9/input/ww3_shel.inp b/regtests/ww3_tp1.9/input/ww3_shel.inp index 6d9b68367..3968df803 100644 --- a/regtests/ww3_tp1.9/input/ww3_shel.inp +++ b/regtests/ww3_tp1.9/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp2.1/input/ww3_multi.inp b/regtests/ww3_tp2.1/input/ww3_multi.inp index 29e2f0f12..6728d778f 100644 --- a/regtests/ww3_tp2.1/input/ww3_multi.inp +++ b/regtests/ww3_tp2.1/input/ww3_multi.inp @@ -2,7 +2,7 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------ 1 0 F 1 F F $ - 'ww3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'ww3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 19680606 000000 19680606 044800 $ diff --git a/regtests/ww3_tp2.1/input/ww3_shel.inp b/regtests/ww3_tp2.1/input/ww3_shel.inp index 2df4dc1dc..fcdd46fc9 100644 --- a/regtests/ww3_tp2.1/input/ww3_shel.inp +++ b/regtests/ww3_tp2.1/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp2.10/input/ww3_outf.inp b/regtests/ww3_tp2.10/input/ww3_outf.inp index 01751647f..a8f3e2385 100644 --- a/regtests/ww3_tp2.10/input/ww3_outf.inp +++ b/regtests/ww3_tp2.10/input/ww3_outf.inp @@ -6,8 +6,8 @@ $ $ $ (1) Forcing Fields T -$ DPT CUR WND DT WLV ICE IBG D50 - F F T F F F F F +$ DPT CUR WND DT WLV ICE TAU RHO IBG D50 + F F T F F F F F F F $ (2) Standard mean wave Parameters T $ HS LM TZ TE T01 FP DIR SPR DP diff --git a/regtests/ww3_tp2.10/input/ww3_shel.inp b/regtests/ww3_tp2.10/input/ww3_shel.inp index 66fcb7c14..71a4632b2 100644 --- a/regtests/ww3_tp2.10/input/ww3_shel.inp +++ b/regtests/ww3_tp2.10/input/ww3_shel.inp @@ -5,7 +5,9 @@ $ F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.11/input/ww3_shel.inp b/regtests/ww3_tp2.11/input/ww3_shel.inp index bc595300f..740c1a089 100644 --- a/regtests/ww3_tp2.11/input/ww3_shel.inp +++ b/regtests/ww3_tp2.11/input/ww3_shel.inp @@ -5,7 +5,9 @@ $ F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.13/input/ww3_shel.inp b/regtests/ww3_tp2.13/input/ww3_shel.inp index f1a39d61b..82bf46056 100644 --- a/regtests/ww3_tp2.13/input/ww3_shel.inp +++ b/regtests/ww3_tp2.13/input/ww3_shel.inp @@ -11,7 +11,9 @@ $ F F F F F F - F + F F + F F + F F F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp index d3306bb7f..7e59dc0ab 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM.inp @@ -16,7 +16,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents C F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp index df92bbb06..e39068587 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp @@ -16,7 +16,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents C F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.inp index 83ff190ce..b17d49337 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM3.inp @@ -16,7 +16,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.inp index 9d6dcd989..11873e6d4 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM4.inp @@ -16,7 +16,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents C F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.inp index b58a52a87..03bc85e9e 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM5.inp @@ -16,7 +16,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents C F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.inp index 23a141cf1..d003e89e3 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM6.inp @@ -16,7 +16,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents C F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp index 472a32db5..74f4b0028 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASICM.inp @@ -16,7 +16,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents F F Winds - C Ice concentrations + C F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp index 7d1b1578d..c3ff6de77 100755 --- a/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASOCM.inp @@ -16,7 +16,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels C F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp2.15/info b/regtests/ww3_tp2.15/info index 6e75c6db0..56bb9d678 100644 --- a/regtests/ww3_tp2.15/info +++ b/regtests/ww3_tp2.15/info @@ -25,7 +25,14 @@ # Wind data for this test case was produced by the COSMO-ME model, and have # # been provided by CNMCA (National Meteorological Service, Rome, Italy). # # # -# Model results are presented here for the purpose of testingi # +# Additionally, a wind stress-driven test with variable air density field # +# is included. At the moment the test is still wind-driven as the stress- # +# driven case is not fully implemented, but it is included to check that # +# the stress is properly read, interpolated, and written to the output. # +# Wind stress and density data were provided by the Met Office by modifying # +# the wind data used to run the wind-driven test. # +# # +# Model results are presented here for the purpose of testing # # the formulations of space-time extreme parameters. This regression test # # oversimplifies real-case bathymetry and wind fields, thus comparison with # # measurements are merely qualitative. # @@ -50,7 +57,7 @@ # the script output. # # # # Francesco Barbariol, Jose-Henrique Alves, Sep 2016 # -# Last Mod : Jan 2018 # +# Last Mod : May 2021 # # # # Copyright 2009-2016 National Weather Service (NWS), # # National Oceanic and Atmospheric Administration. All rights # diff --git a/regtests/ww3_tp2.15/input/ww3_shel.inp b/regtests/ww3_tp2.15/input/ww3_shel.inp index 0e3d36d5f..7a4a5a3d1 100644 --- a/regtests/ww3_tp2.15/input/ww3_shel.inp +++ b/regtests/ww3_tp2.15/input/ww3_shel.inp @@ -5,7 +5,9 @@ $ F F Water levels F F Currents T F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.15/input_rho/extract_AA_STE.m b/regtests/ww3_tp2.15/input_rho/extract_AA_STE.m new file mode 100644 index 000000000..06bebe0cf --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/extract_AA_STE.m @@ -0,0 +1,117 @@ +function extract_AA_STE +clc +clear +close all + +%% ######################################################################## +% +% extract_AA_STE.m +% +% Matlab function to extract STE outputs of WW3 regtest ww3_tp2.15 at the +% Acqua Alta (AA) tower location. +% Results simulate stereo observations during experiment on +% March 10th 2014 09:40UTC-10:10UTC, as described in References below. +% +% DISCLAIMER: Model results are presented here for the purpose of testing +% the formulations of space-time extreme parameters. This regression test +% oversimplifies real-case bathymetry and wind fields, thus comparison with +% measurements are merely qualitative. +% +% ------------------------------------------------------------------------- +% References: +% Barbariol et al. (2016), Numerical Modeling of Space-Time Wave Extremes +% using WAVEWATCH III, Ocean Dynamics, under review +% Benetazzo et al. (2015), Observation of extreme sea waves in a space-time +% ensemble. Journal of Physical Oceanography 45(9), 2261-2275 +% +% ######################################################################### + +%% INPUTs + +% Insert WW3 nc file (name and directory) +dir = input(' Enter path of directory with gridded netcdf output: ','s'); +fnc = input(' Enter file name with gridded netcdf data: ','s'); + +%% AA data + +% AA event time +AA.t_event = datenum(2014,03,10,09,40,00); + +% AA coordinates +AA.lon = 12.5088; % E +AA.lat = 45.3138; % N + + +% AA reference results (Hs, STE) from 5km run and 15km run (second column) + +AA.Hs = [1.4108 1.5155]; % m +AA.STMAXE = [1.8430 1.9672]; % m +AA.STMAXD = [0.1461 0.1585]; % m +AA.HCMAXE = [2.6217 2.8083]; % m +AA.HCMAXD = [0.1850 0.2013]; % m +AA.HMAXE = [2.8966 3.0959]; % m +AA.HMAXD = [0.2044 0.2219]; % m + +%% extract results from WW3 nc + +cd(dir) + +WW3.time = double(ncread(fnc,'time') + datenum(1990,01,01,00,00,00)); +evt = find(WW3.time >= AA.t_event-1/24 & WW3.time <= AA.t_event+1/24); % Indices within +-1h of measurements + +WW3.lon = double(ncread(fnc,'longitude')); +WW3.lat = double(ncread(fnc,'latitude')); + +HS = double(read_interp(fnc,'hs',WW3.lon,WW3.lat,AA.lon,AA.lat,2,2)); +WW3.Hs = mean(HS(evt)); + +% STE (Compute mean parameters from event times) +STMAXE = double(read_interp(fnc,'stmaxe',WW3.lon,WW3.lat,AA.lon,AA.lat,2,2)); +WW3.STMAXE = mean(STMAXE(evt)); % m +STMAXD = double(read_interp(fnc,'stmaxd',WW3.lon,WW3.lat,AA.lon,AA.lat,2,2)); +WW3.STMAXD = mean(STMAXD(evt)); % m +HMAXE = double(read_interp(fnc,'hmaxe',WW3.lon,WW3.lat,AA.lon,AA.lat,2,2)); +WW3.HMAXE = mean(HMAXE(evt)); % m +HMAXD = double(read_interp(fnc,'hmaxd',WW3.lon,WW3.lat,AA.lon,AA.lat,2,2)); +WW3.HMAXD = mean(HMAXD(evt)); % m +HCMAXE = double(read_interp(fnc,'hcmaxe',WW3.lon,WW3.lat,AA.lon,AA.lat,2,2)); +WW3.HCMAXE = mean(HCMAXE(evt)); % m +HCMAXD = double(read_interp(fnc,'hcmaxd',WW3.lon,WW3.lat,AA.lon,AA.lat,2,2)); +WW3.HCMAXD = mean(HCMAXD(evt)); % m + +disp(' ') +disp(' This Run | 5km Reference | 15km Reference') +disp(['Hs ',num2str(WW3.Hs,'%6.2f'),' | ',num2str(AA.Hs(1),'%6.2f'),' | ',num2str(AA.Hs(2),'%6.2f')]) +disp(['C_max/Hs ',num2str(WW3.STMAXE./WW3.Hs,'%6.2f'),' | ',num2str(AA.STMAXE(1)./AA.Hs(1),'%6.2f'),' | ',num2str(AA.STMAXE(2)./AA.Hs(2),'%6.2f')]) +disp(['C_std/Hs ',num2str(WW3.STMAXD./WW3.Hs,'%6.2f'),' | ',num2str(AA.STMAXD(1)./AA.Hs(1),'%6.2f'),' | ',num2str(AA.STMAXD(2)./AA.Hs(2),'%6.2f')]) +disp(['HC_max/Hs ',num2str(WW3.HCMAXE./WW3.Hs,'%6.2f'),' | ',num2str(AA.HCMAXE(1)./AA.Hs(1),'%6.2f'),' | ',num2str(AA.HCMAXE(2)./AA.Hs(2),'%6.2f')]) +disp(['HC_std/Hs ',num2str(WW3.HCMAXD./WW3.Hs,'%6.2f'),' | ',num2str(AA.HCMAXD(1)./AA.Hs(1),'%6.2f'),' | ',num2str(AA.HCMAXD(2)./AA.Hs(2),'%6.2f')]) +disp(['H_max/Hs ',num2str(WW3.HMAXE./WW3.Hs,'%6.2f'),' | ',num2str(AA.HMAXE(1)./AA.Hs(1),'%6.2f'),' | ',num2str(AA.HMAXE(2)./AA.Hs(2),'%6.2f')]) +disp(['C_std/Hs ',num2str(WW3.HMAXD./WW3.Hs,'%6.2f'),' | ',num2str(AA.HMAXD(1)./AA.Hs(1),'%6.2f'),' | ',num2str(AA.HMAXD(2)./AA.Hs(2),'%6.2f')]) +disp(' ') +disp(' Model resolution, domain extent and wind model skill ') +disp(' affect wave model results.') +disp(' ') +disp(' Reference values obtained in a Cray Compute Cluster using ') +disp(' both high (5km) and low (15km) resolution options.') +disp(' ') +disp(' For actual observations and field experiment description ') +disp(' see references in comment section of this script.') + + +function int_var = read_interp(fnc,var_name,lonM,latM,lon_obs,lat_obs,dx,dy) + +dd = double(sqrt((lon_obs-lonM).^2+(lat_obs-latM).^2)); +[yy,xx] = find(dd == min(dd(:))); + +var = double(ncread(fnc,var_name,[yy-dy/2,xx-dx/2,1],[dy+1 dx+1 Inf])); + +lon_mod = lonM(yy-dy/2:yy+dy/2,xx-dx/2:xx+dx/2); +lat_mod = latM(yy-dy/2:yy+dy/2,xx-dx/2:xx+dx/2); + +% Interpolate over space +for i = 1 : size(var,3) + var_i = squeeze(var(:,:,i)); + I = TriScatteredInterp(lon_mod(:), lat_mod(:), var_i(:),'nearest' ); + int_var(i) = I(lon_obs,lat_obs); +end diff --git a/regtests/ww3_tp2.15/input_rho/switch b/regtests/ww3_tp2.15/input_rho/switch new file mode 100644 index 000000000..a0e0977b9 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/switch @@ -0,0 +1 @@ +F90 NOGRB NC4 SHRD PR3 UQ FLX0 LN1 ST4 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_tp2.15/input_rho/switch_MPI b/regtests/ww3_tp2.15/input_rho/switch_MPI new file mode 100644 index 000000000..9012f002f --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/switch_MPI @@ -0,0 +1 @@ +F90 NOGRB NC4 DIST MPI PR3 UQ FLX0 LN1 ST4 NL1 BT1 DB1 TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 O0 O1 O2 O3 O4 O5 O6 O7 O10 O11 diff --git a/regtests/ww3_tp2.15/input_rho/ww3_grid.inp b/regtests/ww3_tp2.15/input_rho/ww3_grid.inp new file mode 100644 index 000000000..81d275963 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_grid.inp @@ -0,0 +1,33 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'ADRIATIC SEA 15km LAMBERT CONFORMAL ' +$ + 1.1 0.05 40 36 .5 +$ + F T T T F T +$ + 900. 450. 450. 5. +$ + &SIN4 BETAMAX = 1.33, Z0MAX = 0.002 / + &SDS4 SDSBCHOICE = 1, FXFM3=2.5, SDSBR = 0.00085, SDSCUM = 0.0 / + &SNL1 NLPROP = 2.7E7 / + &MISC STDX = 11.2, STDY = 11.2, STDT = 1800., FLAGTR = 4 / +END OF NAMELISTS +$ + 'CURV' T 'NONE' + 43 42 +$ Longitudes for GLW CURV grid + 41 1. 0. 1 1 '(...)' 'NAME' '../input/lon_ste_adri_15km.dat' +$ Latitudes for GLW CURV grid + 42 1. 0. 1 1 '(...)' 'NAME' '../input/lat_ste_adri_15km.dat' +$ Bottom Bathymetry + -0.10 2.50 43 0.001000 1 1 '(....)' 'NAME' '../input/ste_adri_15km_etopo1.depth' +$ Sub-grid information + 44 0.010000 1 1 '(...)' 'NAME' '../input/ste_adri_15km_etopo1.obstr' +$ + 45 1 1 '(...)' 'NAME' '../input/ste_adri_15km_etopo1.mask' +$ + 0. 0. 0. 0. 0 +$ +$ End of input file + diff --git a/regtests/ww3_tp2.15/input_rho/ww3_grid.nml b/regtests/ww3_tp2.15/input_rho/ww3_grid.nml new file mode 100644 index 000000000..5c41d46ac --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_grid.nml @@ -0,0 +1,347 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.1 + SPECTRUM%FREQ1 = 0.05 + SPECTRUM%NK = 40 + SPECTRUM%NTH = 36 + SPECTRUM%THOFF = .5 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLCX = T + RUN%FLCY = T + RUN%FLCTH = T + RUN%FLSOU = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 900. + TIMESTEPS%DTXY = 450. + TIMESTEPS%DTKTH = 450. + TIMESTEPS%DTMIN = 5. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'ADRIATIC SEA 15km LAMBERT CONFORMAL' + GRID%NML = '../input/namelists_ADRIATIC.nml' + GRID%TYPE = 'CURV' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.10 + GRID%DMIN = 2.50 +/ + +! -------------------------------------------------------------------- ! +! Define the curvilinear grid type via CURV_NML namelist +! - only for CURV grids - +! +! * The minimum grid size is 3x3. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= scale_fac * value_read + add_offset +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF OFF IDLA IDFM FORMAT FILENAME +! 21 0.25 -0.5 3 1 '(....)' 'x.inp' +! 22 0.25 0.5 3 1 '(....)' 'y.inp' +! +! * namelist must be terminated with / +! * definitions & defaults: +! CURV%NX = 0 ! number of points along x-axis +! CURV%NY = 0 ! number of points along y-axis +! +! CURV%XCOORD%SF = 1. ! x-coord scale factor +! CURV%XCOORD%OFF = 0. ! x-coord add offset +! CURV%XCOORD%FILENAME = 'unset' ! x-coord filename +! CURV%XCOORD%IDF = 21 ! x-coord file unit number +! CURV%XCOORD%IDLA = 1 ! x-coord layout indicator +! CURV%XCOORD%IDFM = 1 ! x-coord format indicator +! CURV%XCOORD%FORMAT = '(....)' ! x-coord formatted read format +! +! CURV%YCOORD%SF = 1. ! y-coord scale factor +! CURV%YCOORD%OFF = 0. ! y-coord add offset +! CURV%YCOORD%FILENAME = 'unset' ! y-coord filename +! CURV%YCOORD%IDF = 22 ! y-coord file unit number +! CURV%YCOORD%IDLA = 1 ! y-coord layout indicator +! CURV%YCOORD%IDFM = 1 ! y-coord format indicator +! CURV%YCOORD%FORMAT = '(....)' ! y-coord formatted read format +! -------------------------------------------------------------------- ! +&CURV_NML + CURV%NX = 43 + CURV%NY = 42 + CURV%XCOORD%FILENAME = '../input/lon_ste_adri_15km.dat' + CURV%XCOORD%FORMAT = '(...)' + CURV%YCOORD%FILENAME = '../input/lat_ste_adri_15km.dat' + CURV%YCOORD%FORMAT = '(...)' +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = 0.001000 + DEPTH%FILENAME = '../input/ste_adri_15km_etopo1.depth' +/ + +! -------------------------------------------------------------------- ! +! Define the point status map via MASK_NML namelist +! - only for RECT and CURV grids - +! +! * If no mask defined, INBOUND can be used to set active boundaries +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF IDLA IDFM FORMAT FILENAME +! 60 1 1 '(....)' 'GLOB-30M.mask' +! +! * The legend for the input map is : +! -2 : Excluded boundary point (covered by ice) +! -1 : Excluded sea point (covered by ice) +! 0 : Excluded land point +! 1 : Sea point +! 2 : Active boundary point +! 3 : Excluded grid point +! 7 : Ice point +! +! * namelist must be terminated with / +! * definitions & defaults: +! MASK%FILENAME = 'unset' ! filename +! MASK%IDF = 60 ! file unit number +! MASK%IDLA = 1 ! layout indicator +! MASK%IDFM = 1 ! format indicator +! MASK%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&MASK_NML + MASK%FILENAME = '../input/ste_adri_15km_etopo1.mask' + MASK%FORMAT = '(...)' +/ + +! -------------------------------------------------------------------- ! +! Define the obstruction map via OBST_NML namelist +! - only for RECT and CURV grids - +! +! * only used if &MISC FLAGTR = 1 in param.nml +! (transparencies at cell boundaries) +! or if &MISC FLAGTR = 2 in param.nml +! (transparencies at cell centers) +! or if &MISC FLAGTR = 3 in param.nml +! (transparencies at cell boundaries with cont. ice) +! or if &MISC FLAGTR = 4 in param.nml +! (transparencies at cell centers with cont. ice) +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 70 0.0001 1 1 '(....)' 'GLOB-30M.obst' +! +! * If the file unit number equals 10, then the data is read from this +! file. The data must follow the above record. No comment lines are +! allowed within the data input. +! +! * In the case of unstructured grids, no obstruction file can be added +! +! * namelist must be terminated with / +! * definitions & defaults: +! OBST%SF = 1. ! scale factor +! OBST%FILENAME = 'unset' ! filename +! OBST%IDF = 70 ! file unit number +! OBST%IDLA = 1 ! layout indicator +! OBST%IDFM = 1 ! format indicator +! OBST%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&OBST_NML + OBST%SF = 0.010000 + OBST%FILENAME = '../input/ste_adri_15km_etopo1.obstr' + OBST%FORMAT = '(...)' +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.15/input_rho/ww3_ounf.inp b/regtests/ww3_tp2.15/input_rho/ww3_ounf.inp new file mode 100644 index 000000000..9e9b2c300 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_ounf.inp @@ -0,0 +1,21 @@ +$ WAVEWATCH III Grid output post-processing +$ ----------------------------------------- + 20140309 000000 900. 9999 +$ +N +HS WND RHO TAU T02 DP DIR FP MXE MXES MXH MXHC SDMH SDMHC +$ +$ + 3 4 + 0 1 2 + T +$ +$ -------------------------------------------------------------------- $ +$ File prefix +$ number of characters in date [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +$ IX and IY ranges [regular:IX NX IY NY, unstructured:IP NP 1 1] +$ + ww3. + 6 + 1 1000000 1 1000000 +$ diff --git a/regtests/ww3_tp2.15/input_rho/ww3_ounf.nml b/regtests/ww3_tp2.15/input_rho/ww3_ounf.nml new file mode 100644 index 000000000..a499bc3fd --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_ounf.nml @@ -0,0 +1,58 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounf.nml - Grid output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via FIELD_NML namelist +! +! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * namelist must be terminated with / +! * definitions & defaults: +! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field +! FIELD%TIMESTRIDE = '0' ! Time stride for the output field +! FIELD%TIMESTOP = '29001231 000000' ! Stop date for the output field +! FIELD%TIMECOUNT = '1000000000' ! Number of time steps +! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] +! FIELD%LIST = 'unset' ! List of output fields +! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] +! FIELD%SAMEFILE = T ! All the variables in the same file [T|F] +! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! -------------------------------------------------------------------- ! +&FIELD_NML + FIELD%TIMESTART = '20140309 000000' + FIELD%TIMESTRIDE = '900.' + FIELD%TIMECOUNT = '9999' + FIELD%LIST = 'HS WND RHO TAU T02 DP DIR FP MXE MXES MXH MXHC SDMH SDMHC' + FIELD%PARTITION = '0 1 2' + FIELD%TYPE = 4 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! FILE%IX0 = 1 ! First X-axis or node index +! FILE%IXN = 1000000000 ! Last X-axis or node index +! FILE%IY0 = 1 ! First Y-axis index +! FILE%IYN = 1000000000 ! Last Y-axis index +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.15/input_rho/ww3_ounp_par.inp b/regtests/ww3_tp2.15/input_rho/ww3_ounp_par.inp new file mode 100644 index 000000000..d0f34dba9 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_ounp_par.inp @@ -0,0 +1,117 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III NETCDF Point output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 20140309 000000 3600. 37 +$ +$ Points requested --------------------------------------------------- $ +$ +$ Define points index for which output is to be generated. +$ If no one defined, all points are selected +$ One index number per line, negative number identifies end of list. +$ 1 +$ 2 +$ mandatory end of list + -1 +$ +$--------------------------------------------------------------------- $ +$ file prefix +$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ netCDF version [3,4] +$ points in same file [T] or not [F] +$ and max number of points to be processed in one pass +$ output type ITYPE [0,1,2,3] +$ flag for global attributes WW3 [0] or variable version [1-2-3-4] +$ flag for dimensions order time,station [T] or station,time [F] +$ + ww3. + 6 + 3 + T 150 + 2 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, netCDF Spectra. +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D spectra +$ 3 : Transfer file. +$ 4 : Spectral partitioning. +$ - Scaling factors for 1-D and 2-D spectra Negative factor +$ disables, output, factor = 0. gives normalized spectrum. +$ +$ 3 1 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points. +$ grid name in quotes (for unformatted file C*21,3I,C*30). +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*40), lat, lon, d, U10 and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) | points | times +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, netCDF Tables of (mean) parameter +$ - Sub-type OTYPE : 1 : Depth, current, wind +$ 2 : Mean wave pars. +$ 3 : Nondimensional pars. (U*) +$ 4 : Nondimensional pars. (U10) +$ 5 : 'Validation table' +$ 6 : WMO standard output + 2 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, netCDF Source terms +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D S(f). +$ 3 : Table of 1-D inverse time scales +$ (1/T = S/F). +$ 4 : Transfer file +$ - Scaling factors for 1-D and 2-D source terms. Negative +$ factor disables print plots, factor = 0. gives normalized +$ print plots. +$ - Flags for spectrum, input, interactions, dissipation, +$ bottom and total source term. +$ - scale ISCALE for OTYPE=2,3 +$ 0 : Dimensional. +$ 1 : Nondimensional in terms of U10 +$ 2 : Nondimensional in terms of U* +$ 3-5: like 0-2 with f normalized with fp. +$ +$ 4 0 0 T T T T T T 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, nubmer of frequencies, directions and points, +$ flags for spectrum and source terms (C*21, 3I, 6L) +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*40), depth, wind speed and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) if requested | points | times +$ - Sin(f,theta) if requested | | +$ - Snl(f,theta) if requested | | +$ - Sds(f,theta) if requested | | +$ - Sbt(f,theta) if requested | | +$ - Stot(f,theta) if requested | | +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.15/input_rho/ww3_ounp_par.nml b/regtests/ww3_tp2.15/input_rho/ww3_ounp_par.nml new file mode 100644 index 000000000..854f12d31 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_ounp_par.nml @@ -0,0 +1,188 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounp.nml - Point output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via POINT_NML namelist +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! POINT%TIMESTART = '19000101 000000' ! Stop date for the output field +! POINT%TIMESTRIDE = '0' ! Time stride for the output field +! POINT%TIMECOUNT = '1000000000' ! Number of time steps +! POINT%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! POINT%LIST = 'all' ! List of points index ['all'|'1 2 3'] +! POINT%SAMEFILE = T ! All the points in the same file +! POINT%BUFFER = 150 ! Number of points to process per pass +! POINT%TYPE = 1 ! [0=inventory | 1=spectra | 2=mean param | 3=source terms] +! POINT%DIMORDER = T ! [time,station=T | station,time=F] +! -------------------------------------------------------------------- ! +&POINT_NML + POINT%TIMESTART = '20140309 000000' + POINT%TIMESTRIDE = '3600.' + POINT%TIMECOUNT = '37' + POINT%TYPE = 2 +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 0, inventory of file +! +! * namelist must be terminated with / +! * definitions & defaults: +! No additional input, the above time range is ignored. +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the type 1, spectra via SPECTRA_NML namelist +! +! Table of 1-D spectra content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - ffp, f, th1m, sth1m, alpha : 1D spectral parameters +! - dpt, ust, wnd, wnddir : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(time,station,frequency,direction) : 2D spectral density +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! Spectral partitioning content : +! - time, station id, station name, longitude, latitude +! - npart : number of partitions +! - hs, tp, lm, th1m, sth1m, ws, tm10, t01, t02 : partitioned parameters +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRA%OUTPUT = 3 ! 1: Print plots +! ! 2: Table of 1-D spectra +! ! 3: Transfer file +! ! 4: Spectral partitioning +! SPECTRA%SCALE_FAC = 1 ! Scale factor (-1=disabled) +! SPECTRA%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! -------------------------------------------------------------------- ! +&SPECTRA_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 2, mean parameter via PARAM_NML namelist +! +! Forcing parameters content : +! - dpt, wnd, wnddir, cur, curdir +! +! Mean wave parameters content : +! - hs, lm, tr, th1p, sth1p, fp, th1m, sth1m +! +! Nondimensional parameters (U*) content : +! - ust, efst, fpst, cd, alpha +! +! Nondimensional parameters (U10) content : +! - wnd, efst, fpst, cd, alpha +! +! Validation table content : +! - wnd, wnddir, hs, hsst, cpu, cmu, ast +! +! WMO stantdard output content : +! - wnd, wnddir, hs, tp +! +! * namelist must be terminated with / +! * definitions & defaults: +! PARAM%OUTPUT = 4 ! 1: Forcing parameters +! ! 2: Mean wave parameters +! ! 3: Nondimensional pars. (U*) +! ! 4: Nondimensional pars. (U10) +! ! 5: Validation table +! ! 6: WMO standard output +! -------------------------------------------------------------------- ! +&PARAM_NML + PARAM%OUTPUT = 2 +/ + +! -------------------------------------------------------------------- ! +! Define the type 3, source terms via SOURCE_NML namelist +! +! Table of 1-D S(f) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - Sin(frequency) : input source term +! - Snl(frequency) : non linear interactions source term +! - Sds(frequency) : dissipation source term +! - Sbt(frequency) : bottom source term +! - Sice(frequency) : ice source term +! - Stot(frequency) : total source term +! - dpt, ust, wnd : mean parameters +! +! Table of 1-D inverse time scales (1/T = S/F) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - tini(frequency) : input inverse time scales source term +! - tnli(frequency) : non linear interactions inverse time scales source term +! - tdsi(frequency) : dissipation inverse time scales source term +! - tbti(frequency) : bottom inverse time scales source term +! - ticei(frequency) : ice inverse time scales source term +! - ttoti(frequency) : total inverse time scales source term +! - dpt, ust, wnd : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(frequency,direction) : 2D spectral density +! - Sin(frequency,direction) : input source term +! - Snl(frequency,direction) : non linear interactions source term +! - Sds(frequency,direction) : dissipation source term +! - Sbt(frequency,direction) : bottom source term +! - Sice(frequency,direction) : ice source term +! - Stot(frequency,direction) : total source term +! - dpt, wnd, wnddir, cur, curdir, ust : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SOURCE%OUTPUT = 4 ! 1: Print plots +! ! 2: Table of 1-D S(f) +! ! 3: Table of 1-D inverse time scales (1/T = S/F) +! ! 4: Transfer file +! SOURCE%SCALE_FAC = 0 ! Scale factor (-1=disabled) +! SOURCE%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! SOURCE%TABLE_FAC = 0 ! Table factor +! 0 : Dimensional. +! 1 : Nondimensional in terms of U10 +! 2 : Nondimensional in terms of U* +! 3-5: like 0-2 with f normalized with fp. +! SOURCE%SPECTRUM = T ! [T|F] +! SOURCE%INPUT = T ! [T|F] +! SOURCE%INTERACTIONS = T ! [T|F] +! SOURCE%DISSIPATION = T ! [T|F] +! SOURCE%BOTTOM = T ! [T|F] +! SOURCE%ICE = T ! [T|F] +! SOURCE%TOTAL = T ! [T|F] +! -------------------------------------------------------------------- ! +&SOURCE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.15/input_rho/ww3_ounp_spec.inp b/regtests/ww3_tp2.15/input_rho/ww3_ounp_spec.inp new file mode 100644 index 000000000..5769526f8 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_ounp_spec.inp @@ -0,0 +1,117 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III NETCDF Point output post-processing $ +$--------------------------------------------------------------------- $ +$ First output time (yyyymmdd hhmmss), increment of output (s), +$ and number of output times. +$ + 20140309 000000 3600. 37 +$ +$ Points requested --------------------------------------------------- $ +$ +$ Define points index for which output is to be generated. +$ If no one defined, all points are selected +$ One index number per line, negative number identifies end of list. +$ 1 +$ 2 +$ mandatory end of list + -1 +$ +$--------------------------------------------------------------------- $ +$ file prefix +$ number of characters in date [4(yearly),6(monthly),8(daily),10(hourly)] +$ netCDF version [3,4] +$ points in same file [T] or not [F] +$ and max number of points to be processed in one pass +$ output type ITYPE [0,1,2,3] +$ flag for global attributes WW3 [0] or variable version [1-2-3-4] +$ flag for dimensions order time,station [T] or station,time [F] +$ + ww3. + 6 + 3 + T 150 + 1 + 0 + T +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 0, inventory of file. +$ No additional input, the above time range is ignored. +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 1, netCDF Spectra. +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D spectra +$ 3 : Transfer file. +$ 4 : Spectral partitioning. +$ - Scaling factors for 1-D and 2-D spectra Negative factor +$ disables, output, factor = 0. gives normalized spectrum. +$ + 3 1 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, number of frequencies, directions and points. +$ grid name in quotes (for unformatted file C*21,3I,C*30). +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*40), lat, lon, d, U10 and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) | points | times +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 2, netCDF Tables of (mean) parameter +$ - Sub-type OTYPE : 1 : Depth, current, wind +$ 2 : Mean wave pars. +$ 3 : Nondimensional pars. (U*) +$ 4 : Nondimensional pars. (U10) +$ 5 : 'Validation table' +$ 6 : WMO standard output +$ 2 +$ +$ -------------------------------------------------------------------- $ +$ ITYPE = 3, netCDF Source terms +$ - Sub-type OTYPE : 1 : Print plots. +$ 2 : Table of 1-D S(f). +$ 3 : Table of 1-D inverse time scales +$ (1/T = S/F). +$ 4 : Transfer file +$ - Scaling factors for 1-D and 2-D source terms. Negative +$ factor disables print plots, factor = 0. gives normalized +$ print plots. +$ - Flags for spectrum, input, interactions, dissipation, +$ bottom and total source term. +$ - scale ISCALE for OTYPE=2,3 +$ 0 : Dimensional. +$ 1 : Nondimensional in terms of U10 +$ 2 : Nondimensional in terms of U* +$ 3-5: like 0-2 with f normalized with fp. +$ +$ 4 0 0 T T T T T T 0 +$ +$ The transfer file contains records with the following contents. +$ +$ - File ID in quotes, nubmer of frequencies, directions and points, +$ flags for spectrum and source terms (C*21, 3I, 6L) +$ - Bin frequencies in Hz for all bins. +$ - Bin directions in radians for all bins (Oceanographic conv.). +$ -+ +$ - Time in yyyymmdd hhmmss format | loop +$ -+ | +$ - Point name (C*40), depth, wind speed and | loop | over +$ direction, current speed and direction | over | +$ - E(f,theta) if requested | points | times +$ - Sin(f,theta) if requested | | +$ - Snl(f,theta) if requested | | +$ - Sds(f,theta) if requested | | +$ - Sbt(f,theta) if requested | | +$ - Stot(f,theta) if requested | | +$ -+ -+ +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.15/input_rho/ww3_ounp_spec.nml b/regtests/ww3_tp2.15/input_rho/ww3_ounp_spec.nml new file mode 100644 index 000000000..c7715d1ed --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_ounp_spec.nml @@ -0,0 +1,186 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_ounp.nml - Point output post-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the output fields to postprocess via POINT_NML namelist +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! POINT%TIMESTART = '19000101 000000' ! Stop date for the output field +! POINT%TIMESTRIDE = '0' ! Time stride for the output field +! POINT%TIMECOUNT = '1000000000' ! Number of time steps +! POINT%TIMESPLIT = 6 ! [4(yearly),6(monthly),8(daily),10(hourly)] +! POINT%LIST = 'all' ! List of points index ['all'|'1 2 3'] +! POINT%SAMEFILE = T ! All the points in the same file +! POINT%BUFFER = 150 ! Number of points to process per pass +! POINT%TYPE = 1 ! [0=inventory | 1=spectra | 2=mean param | 3=source terms] +! POINT%DIMORDER = T ! [time,station=T | station,time=F] +! -------------------------------------------------------------------- ! +&POINT_NML + POINT%TIMESTART = '20140309 000000' + POINT%TIMESTRIDE = '3600.' + POINT%TIMECOUNT = '37' +/ + +! -------------------------------------------------------------------- ! +! Define the content of the output file via FILE_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%PREFIX = 'ww3.' ! Prefix for output file name +! FILE%NETCDF = 3 ! Netcdf version [3|4] +! -------------------------------------------------------------------- ! +&FILE_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 0, inventory of file +! +! * namelist must be terminated with / +! * definitions & defaults: +! No additional input, the above time range is ignored. +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the type 1, spectra via SPECTRA_NML namelist +! +! Table of 1-D spectra content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - ffp, f, th1m, sth1m, alpha : 1D spectral parameters +! - dpt, ust, wnd, wnddir : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(time,station,frequency,direction) : 2D spectral density +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! Spectral partitioning content : +! - time, station id, station name, longitude, latitude +! - npart : number of partitions +! - hs, tp, lm, th1m, sth1m, ws, tm10, t01, t02 : partitioned parameters +! - dpt, wnd, wnddir, cur, curdir : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRA%OUTPUT = 3 ! 1: Print plots +! ! 2: Table of 1-D spectra +! ! 3: Transfer file +! ! 4: Spectral partitioning +! SPECTRA%SCALE_FAC = 1 ! Scale factor (-1=disabled) +! SPECTRA%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! -------------------------------------------------------------------- ! +&SPECTRA_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 2, mean parameter via PARAM_NML namelist +! +! Forcing parameters content : +! - dpt, wnd, wnddir, cur, curdir +! +! Mean wave parameters content : +! - hs, lm, tr, th1p, sth1p, fp, th1m, sth1m +! +! Nondimensional parameters (U*) content : +! - ust, efst, fpst, cd, alpha +! +! Nondimensional parameters (U10) content : +! - wnd, efst, fpst, cd, alpha +! +! Validation table content : +! - wnd, wnddir, hs, hsst, cpu, cmu, ast +! +! WMO stantdard output content : +! - wnd, wnddir, hs, tp +! +! * namelist must be terminated with / +! * definitions & defaults: +! PARAM%OUTPUT = 4 ! 1: Forcing parameters +! ! 2: Mean wave parameters +! ! 3: Nondimensional pars. (U*) +! ! 4: Nondimensional pars. (U10) +! ! 5: Validation table +! ! 6: WMO standard output +! -------------------------------------------------------------------- ! +&PARAM_NML +/ + +! -------------------------------------------------------------------- ! +! Define the type 3, source terms via SOURCE_NML namelist +! +! Table of 1-D S(f) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - Sin(frequency) : input source term +! - Snl(frequency) : non linear interactions source term +! - Sds(frequency) : dissipation source term +! - Sbt(frequency) : bottom source term +! - Sice(frequency) : ice source term +! - Stot(frequency) : total source term +! - dpt, ust, wnd : mean parameters +! +! Table of 1-D inverse time scales (1/T = S/F) content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency +! - ef(frequency) : 1D spectral density +! - tini(frequency) : input inverse time scales source term +! - tnli(frequency) : non linear interactions inverse time scales source term +! - tdsi(frequency) : dissipation inverse time scales source term +! - tbti(frequency) : bottom inverse time scales source term +! - ticei(frequency) : ice inverse time scales source term +! - ttoti(frequency) : total inverse time scales source term +! - dpt, ust, wnd : mean parameters +! +! Transfert file content : +! - time, station id, station name, longitude, latitude +! - frequency : unit Hz, center band frequency - linear log scale (XFR factor) +! - frequency1 : unit Hz, lower band frequency +! - frequency2 : unit Hz, upper band frequency +! - direction : unit degree, convention to, origin East, trigonometric order +! - efth(frequency,direction) : 2D spectral density +! - Sin(frequency,direction) : input source term +! - Snl(frequency,direction) : non linear interactions source term +! - Sds(frequency,direction) : dissipation source term +! - Sbt(frequency,direction) : bottom source term +! - Sice(frequency,direction) : ice source term +! - Stot(frequency,direction) : total source term +! - dpt, wnd, wnddir, cur, curdir, ust : mean parameters +! +! +! * namelist must be terminated with / +! * definitions & defaults: +! SOURCE%OUTPUT = 4 ! 1: Print plots +! ! 2: Table of 1-D S(f) +! ! 3: Table of 1-D inverse time scales (1/T = S/F) +! ! 4: Transfer file +! SOURCE%SCALE_FAC = 0 ! Scale factor (-1=disabled) +! SOURCE%OUTPUT_FAC = 0 ! Output factor (0=normalized) +! SOURCE%TABLE_FAC = 0 ! Table factor +! 0 : Dimensional. +! 1 : Nondimensional in terms of U10 +! 2 : Nondimensional in terms of U* +! 3-5: like 0-2 with f normalized with fp. +! SOURCE%SPECTRUM = T ! [T|F] +! SOURCE%INPUT = T ! [T|F] +! SOURCE%INTERACTIONS = T ! [T|F] +! SOURCE%DISSIPATION = T ! [T|F] +! SOURCE%BOTTOM = T ! [T|F] +! SOURCE%ICE = T ! [T|F] +! SOURCE%TOTAL = T ! [T|F] +! -------------------------------------------------------------------- ! +&SOURCE_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.15/input_rho/ww3_outf.inp b/regtests/ww3_tp2.15/input_rho/ww3_outf.inp new file mode 100644 index 000000000..666f36966 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_outf.inp @@ -0,0 +1,10 @@ +$ WAVEWATCH III Grid output post-processing +$ ----------------------------------------- + 20140309 000000 3600. 37 +$ +N +HS DIR DP T02 FP STMAXE STMAXD HMAXE HCMAXE HMAXD HCMAXD +$ + 3 0 + 1 43 1 42 1 1 +$ diff --git a/regtests/ww3_tp2.15/input_rho/ww3_prnc_RHO.inp b/regtests/ww3_tp2.15/input_rho/ww3_prnc_RHO.inp new file mode 100644 index 000000000..edabea5be --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_prnc_RHO.inp @@ -0,0 +1,50 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Field preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ Mayor types of field and time flag +$ Field types : ICE Ice concentrations. +$ LEV Water levels. +$ WND Winds. +$ WNS Winds (including air-sea temp. dif.) +$ CUR Currents. +$ DAT Data for assimilation. +$ +$ Format types : AI Transfer field 'as is'. (ITYPE 1) +$ LL Field defined on regular longitude-latitude +$ or Cartesian grid. (ITYPE 2) +$ Format types : AT Transfer field 'as is', performs tidal +$ analysis on the time series (ITYPE 6) +$ When using AT, another line should be added +$ with the choice ot tidal constituents: +$ ALL or FAST or VFAST or a list: e.g. 'M2 S2' +$ +$ - Format type not used for field type 'DAT'. +$ +$ Time flag : If true, time is included in file. +$ Header flag : If true, header is added to file. +$ (necessary for reading, FALSE is used only for +$ incremental generation of a data file.) +$ + 'RHO' 'LL' T T +$ +$ Name of dimensions ------------------------------------------------- $ +$ + longitude latitude time +$ +$ Variables to use --------------------------------------------------- $ +$ + rho +$ +$ Additional time input ---------------------------------------------- $ +$ If time flag is .FALSE., give time of field in yyyymmdd hhmmss format. +$ +$ 19680606 053000 +$ +$ Define data files -------------------------------------------------- $ +$ The input line identifies the filename using for the forcing field. +$ + '../input_rho/density.nc' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.15/input_rho/ww3_prnc_RHO.nml b/regtests/ww3_tp2.15/input_rho/ww3_prnc_RHO.nml new file mode 100644 index 000000000..e5b8e0811 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_prnc_RHO.nml @@ -0,0 +1,76 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_prnc.nml - Field preprocessor ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the forcing fields to preprocess via FORCING_NML namelist +! +! * only one FORCING%FIELD can be set at true +! * only one FORCING%grid can be set at true +! * tidal constituents FORCING%tidal is only available on grid%asis with FIELD%level or FIELD%current +! +! * namelist must be terminated with / +! * definitions & defaults: +! FORCING%TIMESTART = '19000101 000000' ! Start date for the forcing field +! FORCING%TIMESTOP = '29001231 000000' ! Stop date for the forcing field +! +! FORCING%FIELD%ICE_PARAM1 = F ! Ice thickness (1-component) +! FORCING%FIELD%ICE_PARAM2 = F ! Ice viscosity (1-component) +! FORCING%FIELD%ICE_PARAM3 = F ! Ice density (1-component) +! FORCING%FIELD%ICE_PARAM4 = F ! Ice modulus (1-component) +! FORCING%FIELD%ICE_PARAM5 = F ! Ice floe mean diameter (1-component) +! FORCING%FIELD%MUD_DENSITY = F ! Mud density (1-component) +! FORCING%FIELD%MUD_THICKNESS = F ! Mud thickness (1-component) +! FORCING%FIELD%MUD_VISCOSITY = F ! Mud viscosity (1-component) +! FORCING%FIELD%WATER_LEVELS = F ! Level (1-component) +! FORCING%FIELD%CURRENTS = F ! Current (2-components) +! FORCING%FIELD%WINDS = F ! Wind (2-components) +! FORCING%FIELD%WIND_AST = F ! Wind and air-sea temp. dif. (3-components) +! FORCING%FIELD%ICE_CONC = F ! Ice concentration (1-component) +! FORCING%FIELD%ICE_BERG = F ! Icebergs and sea ice concentration (2-components) +! FORCING%FIELD%DATA_ASSIM = F ! Data for assimilation (1-component) +! +! FORCING%GRID%ASIS = F ! Transfert field 'as is' on the model grid +! FORCING%GRID%LATLON = F ! Define field on regular lat/lon or cartesian grid +! +! FORCING%TIDAL = 'unset' ! Set the tidal constituents [FAST | VFAST | 'M2 S2 N2'] +! -------------------------------------------------------------------- ! +&FORCING_NML + FORCING%FIELD%AIR_DENSITY = T + FORCING%GRID%LATLON = T +/ + +! -------------------------------------------------------------------- ! +! Define the content of the input file via FILE_NML namelist +! +! * input file must respect netCDF format and CF conventions +! * input file must contain : +! -dimension : time, name expected to be called time +! -dimension : longitude/latitude, names can defined in the namelist +! -variable : time defined along time dimension +! -attribute : time with attributes units written as ISO8601 convention +! -attribute : time with attributes calendar set to standard as CF convention +! -variable : longitude defined along longitude dimension +! -variable : latitude defined along latitude dimension +! -variable : field defined along time,latitude,longitude dimensions +! * FILE%VAR(I) must be set for each field component +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%FILENAME = 'unset' ! relative path input file name +! FILE%LONGITUDE = 'unset' ! longitude/x dimension name +! FILE%LATITUDE = 'unset' ! latitude/y dimension name +! FILE%VAR(I) = 'unset' ! field component +! FILE%TIMESHIFT = '00000000 000000' ! shift the time value to 'YYYYMMDD HHMMSS' +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%FILENAME = '../input_rho/density.nc' + FILE%LONGITUDE = 'longitude' + FILE%LATITUDE = 'latitude' + FILE%VAR(1) = 'rho' +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.15/input_rho/ww3_prnc_TAU.inp b/regtests/ww3_tp2.15/input_rho/ww3_prnc_TAU.inp new file mode 100644 index 000000000..938f4aeb6 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_prnc_TAU.inp @@ -0,0 +1,50 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Field preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ Mayor types of field and time flag +$ Field types : ICE Ice concentrations. +$ LEV Water levels. +$ WND Winds. +$ WNS Winds (including air-sea temp. dif.) +$ CUR Currents. +$ DAT Data for assimilation. +$ +$ Format types : AI Transfer field 'as is'. (ITYPE 1) +$ LL Field defined on regular longitude-latitude +$ or Cartesian grid. (ITYPE 2) +$ Format types : AT Transfer field 'as is', performs tidal +$ analysis on the time series (ITYPE 6) +$ When using AT, another line should be added +$ with the choice ot tidal constituents: +$ ALL or FAST or VFAST or a list: e.g. 'M2 S2' +$ +$ - Format type not used for field type 'DAT'. +$ +$ Time flag : If true, time is included in file. +$ Header flag : If true, header is added to file. +$ (necessary for reading, FALSE is used only for +$ incremental generation of a data file.) +$ + 'TAU' 'LL' T T +$ +$ Name of dimensions ------------------------------------------------- $ +$ + longitude latitude time +$ +$ Variables to use --------------------------------------------------- $ +$ + tauu tauv +$ +$ Additional time input ---------------------------------------------- $ +$ If time flag is .FALSE., give time of field in yyyymmdd hhmmss format. +$ +$ 19680606 053000 +$ +$ Define data files -------------------------------------------------- $ +$ The input line identifies the filename using for the forcing field. +$ + '../input_rho/momentum.nc' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.15/input_rho/ww3_prnc_TAU.nml b/regtests/ww3_tp2.15/input_rho/ww3_prnc_TAU.nml new file mode 100644 index 000000000..c515334f3 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_prnc_TAU.nml @@ -0,0 +1,77 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_prnc.nml - Field preprocessor ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the forcing fields to preprocess via FORCING_NML namelist +! +! * only one FORCING%FIELD can be set at true +! * only one FORCING%grid can be set at true +! * tidal constituents FORCING%tidal is only available on grid%asis with FIELD%level or FIELD%current +! +! * namelist must be terminated with / +! * definitions & defaults: +! FORCING%TIMESTART = '19000101 000000' ! Start date for the forcing field +! FORCING%TIMESTOP = '29001231 000000' ! Stop date for the forcing field +! +! FORCING%FIELD%ICE_PARAM1 = F ! Ice thickness (1-component) +! FORCING%FIELD%ICE_PARAM2 = F ! Ice viscosity (1-component) +! FORCING%FIELD%ICE_PARAM3 = F ! Ice density (1-component) +! FORCING%FIELD%ICE_PARAM4 = F ! Ice modulus (1-component) +! FORCING%FIELD%ICE_PARAM5 = F ! Ice floe mean diameter (1-component) +! FORCING%FIELD%MUD_DENSITY = F ! Mud density (1-component) +! FORCING%FIELD%MUD_THICKNESS = F ! Mud thickness (1-component) +! FORCING%FIELD%MUD_VISCOSITY = F ! Mud viscosity (1-component) +! FORCING%FIELD%WATER_LEVELS = F ! Level (1-component) +! FORCING%FIELD%CURRENTS = F ! Current (2-components) +! FORCING%FIELD%WINDS = F ! Wind (2-components) +! FORCING%FIELD%WIND_AST = F ! Wind and air-sea temp. dif. (3-components) +! FORCING%FIELD%ICE_CONC = F ! Ice concentration (1-component) +! FORCING%FIELD%ICE_BERG = F ! Icebergs and sea ice concentration (2-components) +! FORCING%FIELD%DATA_ASSIM = F ! Data for assimilation (1-component) +! +! FORCING%GRID%ASIS = F ! Transfert field 'as is' on the model grid +! FORCING%GRID%LATLON = F ! Define field on regular lat/lon or cartesian grid +! +! FORCING%TIDAL = 'unset' ! Set the tidal constituents [FAST | VFAST | 'M2 S2 N2'] +! -------------------------------------------------------------------- ! +&FORCING_NML + FORCING%FIELD%ATM_MOMENTUM = T + FORCING%GRID%LATLON = T +/ + +! -------------------------------------------------------------------- ! +! Define the content of the input file via FILE_NML namelist +! +! * input file must respect netCDF format and CF conventions +! * input file must contain : +! -dimension : time, name expected to be called time +! -dimension : longitude/latitude, names can defined in the namelist +! -variable : time defined along time dimension +! -attribute : time with attributes units written as ISO8601 convention +! -attribute : time with attributes calendar set to standard as CF convention +! -variable : longitude defined along longitude dimension +! -variable : latitude defined along latitude dimension +! -variable : field defined along time,latitude,longitude dimensions +! * FILE%VAR(I) must be set for each field component +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%FILENAME = 'unset' ! relative path input file name +! FILE%LONGITUDE = 'unset' ! longitude/x dimension name +! FILE%LATITUDE = 'unset' ! latitude/y dimension name +! FILE%VAR(I) = 'unset' ! field component +! FILE%TIMESHIFT = '00000000 000000' ! shift the time value to 'YYYYMMDD HHMMSS' +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%FILENAME = '../input_rho/momentum.nc' + FILE%LONGITUDE = 'longitude' + FILE%LATITUDE = 'latitude' + FILE%VAR(1) = 'U' + FILE%VAR(2) = 'V' +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.15/input_rho/ww3_prnc_WND.inp b/regtests/ww3_tp2.15/input_rho/ww3_prnc_WND.inp new file mode 100644 index 000000000..d78d35a83 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_prnc_WND.inp @@ -0,0 +1,50 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Field preprocessor input file $ +$ -------------------------------------------------------------------- $ +$ Mayor types of field and time flag +$ Field types : ICE Ice concentrations. +$ LEV Water levels. +$ WND Winds. +$ WNS Winds (including air-sea temp. dif.) +$ CUR Currents. +$ DAT Data for assimilation. +$ +$ Format types : AI Transfer field 'as is'. (ITYPE 1) +$ LL Field defined on regular longitude-latitude +$ or Cartesian grid. (ITYPE 2) +$ Format types : AT Transfer field 'as is', performs tidal +$ analysis on the time series (ITYPE 6) +$ When using AT, another line should be added +$ with the choice ot tidal constituents: +$ ALL or FAST or VFAST or a list: e.g. 'M2 S2' +$ +$ - Format type not used for field type 'DAT'. +$ +$ Time flag : If true, time is included in file. +$ Header flag : If true, header is added to file. +$ (necessary for reading, FALSE is used only for +$ incremental generation of a data file.) +$ + 'WND' 'LL' T T +$ +$ Name of dimensions ------------------------------------------------- $ +$ + longitude latitude time +$ +$ Variables to use --------------------------------------------------- $ +$ + U V +$ +$ Additional time input ---------------------------------------------- $ +$ If time flag is .FALSE., give time of field in yyyymmdd hhmmss format. +$ +$ 19680606 053000 +$ +$ Define data files -------------------------------------------------- $ +$ The input line identifies the filename using for the forcing field. +$ + '../input_rho/wind.nc' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.15/input_rho/ww3_prnc_WND.nml b/regtests/ww3_tp2.15/input_rho/ww3_prnc_WND.nml new file mode 100644 index 000000000..d22fad9be --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_prnc_WND.nml @@ -0,0 +1,77 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_prnc.nml - Field preprocessor ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define the forcing fields to preprocess via FORCING_NML namelist +! +! * only one FORCING%FIELD can be set at true +! * only one FORCING%grid can be set at true +! * tidal constituents FORCING%tidal is only available on grid%asis with FIELD%level or FIELD%current +! +! * namelist must be terminated with / +! * definitions & defaults: +! FORCING%TIMESTART = '19000101 000000' ! Start date for the forcing field +! FORCING%TIMESTOP = '29001231 000000' ! Stop date for the forcing field +! +! FORCING%FIELD%ICE_PARAM1 = F ! Ice thickness (1-component) +! FORCING%FIELD%ICE_PARAM2 = F ! Ice viscosity (1-component) +! FORCING%FIELD%ICE_PARAM3 = F ! Ice density (1-component) +! FORCING%FIELD%ICE_PARAM4 = F ! Ice modulus (1-component) +! FORCING%FIELD%ICE_PARAM5 = F ! Ice floe mean diameter (1-component) +! FORCING%FIELD%MUD_DENSITY = F ! Mud density (1-component) +! FORCING%FIELD%MUD_THICKNESS = F ! Mud thickness (1-component) +! FORCING%FIELD%MUD_VISCOSITY = F ! Mud viscosity (1-component) +! FORCING%FIELD%WATER_LEVELS = F ! Level (1-component) +! FORCING%FIELD%CURRENTS = F ! Current (2-components) +! FORCING%FIELD%WINDS = F ! Wind (2-components) +! FORCING%FIELD%WIND_AST = F ! Wind and air-sea temp. dif. (3-components) +! FORCING%FIELD%ICE_CONC = F ! Ice concentration (1-component) +! FORCING%FIELD%ICE_BERG = F ! Icebergs and sea ice concentration (2-components) +! FORCING%FIELD%DATA_ASSIM = F ! Data for assimilation (1-component) +! +! FORCING%GRID%ASIS = F ! Transfert field 'as is' on the model grid +! FORCING%GRID%LATLON = F ! Define field on regular lat/lon or cartesian grid +! +! FORCING%TIDAL = 'unset' ! Set the tidal constituents [FAST | VFAST | 'M2 S2 N2'] +! -------------------------------------------------------------------- ! +&FORCING_NML + FORCING%FIELD%WINDS = T + FORCING%GRID%LATLON = T +/ + +! -------------------------------------------------------------------- ! +! Define the content of the input file via FILE_NML namelist +! +! * input file must respect netCDF format and CF conventions +! * input file must contain : +! -dimension : time, name expected to be called time +! -dimension : longitude/latitude, names can defined in the namelist +! -variable : time defined along time dimension +! -attribute : time with attributes units written as ISO8601 convention +! -attribute : time with attributes calendar set to standard as CF convention +! -variable : longitude defined along longitude dimension +! -variable : latitude defined along latitude dimension +! -variable : field defined along time,latitude,longitude dimensions +! * FILE%VAR(I) must be set for each field component +! +! * namelist must be terminated with / +! * definitions & defaults: +! FILE%FILENAME = 'unset' ! relative path input file name +! FILE%LONGITUDE = 'unset' ! longitude/x dimension name +! FILE%LATITUDE = 'unset' ! latitude/y dimension name +! FILE%VAR(I) = 'unset' ! field component +! FILE%TIMESHIFT = '00000000 000000' ! shift the time value to 'YYYYMMDD HHMMSS' +! -------------------------------------------------------------------- ! +&FILE_NML + FILE%FILENAME = '../input_rho/wind.nc' + FILE%LONGITUDE = 'longitude' + FILE%LATITUDE = 'latitude' + FILE%VAR(1) = 'U' + FILE%VAR(2) = 'V' +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.15/input_rho/ww3_shel.inp b/regtests/ww3_tp2.15/input_rho/ww3_shel.inp new file mode 100644 index 000000000..c436305e8 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_shel.inp @@ -0,0 +1,48 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shell input file $ +$ -------------------------------------------------------------------- $ +$ + F F Water levels + F F Currents + T F Winds + F F Ice concentrations + T F Atmospheric momentum + T F Air density + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra. +$ + 20140310 000000 + 20140310 060000 +$ + 1 +$ + 20140310 000000 900 20140310 060000 +$ --------------------------------------------------------------- +$ D C W D W I H L T T T C F D S D P P P P P P W P D F C C U C +$ P U N T L C S 0 M G P I P P H T L T S W S N T C F F S H +$ T R D V E 2 1 E R R S P P H I S F R D X D T A +$ --------------------------------------------------------------- +$ T F T F T F T T T T T T T T T T T T T T T T T T T F F F F F +$ F F F F F F F F F F F F F F F F F F F F F F F +$ --------------------------------------------------------------- +$ F T T W W W W A U B F T S T J F T U M M P U U +$ A A W C C C C B B E B B X W O U S S S 2 S S +$ W W A C F H M R R D B B Y O C S S S C S 1 2 +$ --------------------------------------------------------------- + N + HS WND RHO TAU T02 DP DIR FP MXE MXES MXH MXHC SDMH SDMHC + 20140310 000000 3600 20140310 060000 + 12.5088 45.3138 'AA ' + 0.0 0.0 'STOPSTRING' + 20140310 000000 0 20140310 120000 + 20140310 000000 0 20140310 120000 + 20140310 000000 0 20140310 120000 + 20140310 000000 0 20140310 120000 + +$ + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.15/input_rho/ww3_shel.nml b/regtests/ww3_tp2.15/input_rho/ww3_shel.nml new file mode 100644 index 000000000..9d4649afa --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_shel.nml @@ -0,0 +1,339 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '20140310 000000' + DOMAIN%STOP = '20140310 060000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'T' + INPUT%FORCING%ATM_MOMENTUM = 'T' + INPUT%FORCING%AIR_DENSITY = 'T' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : +! longitude latitude 'name' (C*40) +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS WND RHO TAU T02 DP DIR FP MXE MXES MXH MXHC SDMH SDMHC' + TYPE%POINT%FILE = '../input/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '20140310 000000' '900' '20140310 060000' + DATE%POINT = '20140310 000000' '3600' '20140310 060000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! diff --git a/regtests/ww3_tp2.15/input_rho/ww3_strt.inp b/regtests/ww3_tp2.15/input_rho/ww3_strt.inp new file mode 100644 index 000000000..a20af3062 --- /dev/null +++ b/regtests/ww3_tp2.15/input_rho/ww3_strt.inp @@ -0,0 +1,7 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Initial conditions input file $ +$--------------------------------------------------------------------- $ + 3 +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.16/input/ww3_shel.inp b/regtests/ww3_tp2.16/input/ww3_shel.inp index 356242f2a..bb9be284e 100644 --- a/regtests/ww3_tp2.16/input/ww3_shel.inp +++ b/regtests/ww3_tp2.16/input/ww3_shel.inp @@ -16,7 +16,9 @@ $ F F Mud parameter 3 F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.inp b/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.inp index 6151cc181..8ce752618 100755 --- a/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.inp +++ b/regtests/ww3_tp2.17/input/ww3_multi_grdset_a.inp @@ -6,7 +6,7 @@ $ $'points' $ $ - 'inla' 'native' 'native' 'native' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'inla' 'native' 'native' 'native' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 20151214 000000 20151214 040000 $ diff --git a/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.inp b/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.inp index c08749f4b..11305463a 100755 --- a/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.inp +++ b/regtests/ww3_tp2.17/input/ww3_multi_grdset_b.inp @@ -6,7 +6,7 @@ $ $'points' $ $ - 'inlb' 'native' 'native' 'native' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'inlb' 'native' 'native' 'native' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 20151214 000000 20151214 040000 $ diff --git a/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.inp b/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.inp index e62a4025f..7aaa675d8 100755 --- a/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.inp +++ b/regtests/ww3_tp2.17/input/ww3_multi_grdset_c.inp @@ -6,7 +6,7 @@ $ $'points' $ $ - 'inlc' 'native' 'native' 'native' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'inlc' 'native' 'native' 'native' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 20151214 000000 20151214 040000 $ diff --git a/regtests/ww3_tp2.17/input/ww3_shel.inp b/regtests/ww3_tp2.17/input/ww3_shel.inp index ee35b90e7..2aacc2fb1 100755 --- a/regtests/ww3_tp2.17/input/ww3_shel.inp +++ b/regtests/ww3_tp2.17/input/ww3_shel.inp @@ -7,7 +7,9 @@ $ T F Water levels T F Currents T F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.18/input/ww3_shel.inp b/regtests/ww3_tp2.18/input/ww3_shel.inp index 9c3154545..55da540df 100644 --- a/regtests/ww3_tp2.18/input/ww3_shel.inp +++ b/regtests/ww3_tp2.18/input/ww3_shel.inp @@ -8,6 +8,8 @@ $ T F Currents F F Winds F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tp2.2/input/ww3_multi.inp b/regtests/ww3_tp2.2/input/ww3_multi.inp index dd381d3fc..4d5d699e6 100644 --- a/regtests/ww3_tp2.2/input/ww3_multi.inp +++ b/regtests/ww3_tp2.2/input/ww3_multi.inp @@ -2,7 +2,7 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------ 1 0 F 1 F F $ - 'ww3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'ww3' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F $ 19680606 000000 19680618 000000 $ diff --git a/regtests/ww3_tp2.2/input/ww3_shel.inp b/regtests/ww3_tp2.2/input/ww3_shel.inp index b9a089139..aba7af3e4 100644 --- a/regtests/ww3_tp2.2/input/ww3_shel.inp +++ b/regtests/ww3_tp2.2/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T T T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp2.21/input/ww3_shel.inp b/regtests/ww3_tp2.21/input/ww3_shel.inp index b6f101309..caa4c845f 100644 --- a/regtests/ww3_tp2.21/input/ww3_shel.inp +++ b/regtests/ww3_tp2.21/input/ww3_shel.inp @@ -4,13 +4,15 @@ $ -------------------------------------------------------------------- $ $ $ Define input to be used ---------------------------------------------$ $ - F F - F F - T F - F - F - F - F + F F Water levels + F F Currents + T F Winds + F F Ice concentrations + F F Atmospheric momentum + F F Air density + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra. $ $ Time frame of calculations ------------------------------------------$ $ @@ -437,7 +439,8 @@ $ Homogenous field data ----------------------------------------------$ $ $ 'WND' 20051001 000000 20. 145. 2.0 $ 'WND' 20051002 000000 20. 245. 2.0 - 'STP' + 'the_end' 0 + 'STP' $ -------------------------------------------------------------------- $ $ End of input file $ $ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.3/input/ww3_shel.inp b/regtests/ww3_tp2.3/input/ww3_shel.inp index 92a2dcf93..2d69bd5e4 100644 --- a/regtests/ww3_tp2.3/input/ww3_shel.inp +++ b/regtests/ww3_tp2.3/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T F T - F + F F + F F + F F F F F diff --git a/regtests/ww3_tp2.4/input/ww3_outf_depth.inp b/regtests/ww3_tp2.4/input/ww3_outf_depth.inp index 40f40b32b..5166e05fb 100644 --- a/regtests/ww3_tp2.4/input/ww3_outf_depth.inp +++ b/regtests/ww3_tp2.4/input/ww3_outf_depth.inp @@ -13,8 +13,8 @@ $ $ Request flags identifying fields as in ww3_shel input and section 2.4 of the manual. $ (1) Forcing Fields T -$ DPT CUR WND DT WLV ICE IBG D50 - T F F F F F F F +$ DPT CUR WND DT WLV ICE TAU RHO IBG D50 + T F F F F F F F F F $ (2) Standard mean wave Parameters F $ (3) Frequency-dependent parameters diff --git a/regtests/ww3_tp2.4/input/ww3_shel.inp b/regtests/ww3_tp2.4/input/ww3_shel.inp index bb1183690..debb221b3 100644 --- a/regtests/ww3_tp2.4/input/ww3_shel.inp +++ b/regtests/ww3_tp2.4/input/ww3_shel.inp @@ -11,7 +11,9 @@ $ F F F F F F - F + F F + F F + F F F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.5/input/ww3_shel.inp b/regtests/ww3_tp2.5/input/ww3_shel.inp index edf156ea4..bf6f91368 100644 --- a/regtests/ww3_tp2.5/input/ww3_shel.inp +++ b/regtests/ww3_tp2.5/input/ww3_shel.inp @@ -11,7 +11,9 @@ $ F F F F F F - F + F F + F F + F F F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.5/input_REF/ww3_shel.inp b/regtests/ww3_tp2.5/input_REF/ww3_shel.inp index f37fe7b48..00affe10b 100644 --- a/regtests/ww3_tp2.5/input_REF/ww3_shel.inp +++ b/regtests/ww3_tp2.5/input_REF/ww3_shel.inp @@ -11,7 +11,9 @@ $ F F F F F F - F + F F + F F + F F F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.6/input/ww3_shel.inp b/regtests/ww3_tp2.6/input/ww3_shel.inp index dedc5a40a..684b14fe0 100644 --- a/regtests/ww3_tp2.6/input/ww3_shel.inp +++ b/regtests/ww3_tp2.6/input/ww3_shel.inp @@ -7,7 +7,9 @@ $ F F Water levels F F Currents T T Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.7/input/ww3_shel.inp b/regtests/ww3_tp2.7/input/ww3_shel.inp index cef53d6e0..b841a569f 100644 --- a/regtests/ww3_tp2.7/input/ww3_shel.inp +++ b/regtests/ww3_tp2.7/input/ww3_shel.inp @@ -7,7 +7,9 @@ $ F F Water levels F F Currents T T Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.8/input/ww3_shel.inp b/regtests/ww3_tp2.8/input/ww3_shel.inp index 67b304731..712bc0f0c 100755 --- a/regtests/ww3_tp2.8/input/ww3_shel.inp +++ b/regtests/ww3_tp2.8/input/ww3_shel.inp @@ -6,12 +6,16 @@ $ as a homogeneous field; four input lines. $ 1) Water levels $ 2) Currents $ 3) Winds -$ 4) Ice concentrations (cannot be homogeneous). +$ 4) Ice concentrations +$ 5) Atmospheric momentum +$ 6) Air density $ F F T F T T - F + F F + F F + F F F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_tp2.9/input/ww3_shel.inp b/regtests/ww3_tp2.9/input/ww3_shel.inp index c0294b0bb..627d31900 100644 --- a/regtests/ww3_tp2.9/input/ww3_shel.inp +++ b/regtests/ww3_tp2.9/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F F F F F F - F + F F + F F + F F F F F diff --git a/regtests/ww3_tr1/input/ww3_shel.inp b/regtests/ww3_tr1/input/ww3_shel.inp index a98f2b49c..df2e2d7ae 100644 --- a/regtests/ww3_tr1/input/ww3_shel.inp +++ b/regtests/ww3_tr1/input/ww3_shel.inp @@ -2,7 +2,9 @@ $ F F Water levels F F Currents T T Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tr1/input_bndin/ww3_shel.inp b/regtests/ww3_tr1/input_bndin/ww3_shel.inp index 422ea7f88..0eb78e60b 100644 --- a/regtests/ww3_tr1/input_bndin/ww3_shel.inp +++ b/regtests/ww3_tr1/input_bndin/ww3_shel.inp @@ -2,7 +2,9 @@ $ F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_tr1/input_std/ww3_shel.inp b/regtests/ww3_tr1/input_std/ww3_shel.inp index d44be3011..841b886f3 100644 --- a/regtests/ww3_tr1/input_std/ww3_shel.inp +++ b/regtests/ww3_tr1/input_std/ww3_shel.inp @@ -2,7 +2,9 @@ $ F F Water levels F F Currents T T Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra diff --git a/regtests/ww3_ts1/input/ww3_shel.inp b/regtests/ww3_ts1/input/ww3_shel.inp index ca6ed61e6..fca96fb7e 100644 --- a/regtests/ww3_ts1/input/ww3_shel.inp +++ b/regtests/ww3_ts1/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ts1/input_fld/ww3_shel.inp b/regtests/ww3_ts1/input_fld/ww3_shel.inp index 74ff86d0c..5c520c139 100644 --- a/regtests/ww3_ts1/input_fld/ww3_shel.inp +++ b/regtests/ww3_ts1/input_fld/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ts1/input_icesct_IC0/ww3_shel.inp b/regtests/ww3_ts1/input_icesct_IC0/ww3_shel.inp index f8eb4c255..7a0f76160 100644 --- a/regtests/ww3_ts1/input_icesct_IC0/ww3_shel.inp +++ b/regtests/ww3_ts1/input_icesct_IC0/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - T + T F + F F + F F F F F diff --git a/regtests/ww3_ts1/input_icesct_IC1/ww3_shel.inp b/regtests/ww3_ts1/input_icesct_IC1/ww3_shel.inp index 45cf9d8c4..a0b747379 100644 --- a/regtests/ww3_ts1/input_icesct_IC1/ww3_shel.inp +++ b/regtests/ww3_ts1/input_icesct_IC1/ww3_shel.inp @@ -15,7 +15,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents T T Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_ts1/input_icesct_IC2/ww3_shel.inp b/regtests/ww3_ts1/input_icesct_IC2/ww3_shel.inp index 8b07fd5c4..a378813d0 100644 --- a/regtests/ww3_ts1/input_icesct_IC2/ww3_shel.inp +++ b/regtests/ww3_ts1/input_icesct_IC2/ww3_shel.inp @@ -15,7 +15,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents T T Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_ts1/input_icesct_IC3/ww3_shel.inp b/regtests/ww3_ts1/input_icesct_IC3/ww3_shel.inp index 36c009f7b..9dd5cd4b7 100644 --- a/regtests/ww3_ts1/input_icesct_IC3/ww3_shel.inp +++ b/regtests/ww3_ts1/input_icesct_IC3/ww3_shel.inp @@ -15,7 +15,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents T T Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_ts1/input_icesct_IC4/ww3_shel.inp b/regtests/ww3_ts1/input_icesct_IC4/ww3_shel.inp index 859a75fde..a0606150e 100644 --- a/regtests/ww3_ts1/input_icesct_IC4/ww3_shel.inp +++ b/regtests/ww3_ts1/input_icesct_IC4/ww3_shel.inp @@ -15,7 +15,9 @@ $ Include ice and mud parameters only if IC1/2/3/4 used : F F Water levels F F Currents T T Winds - T Ice concentrations + T F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_ts2/input/ww3_shel.inp b/regtests/ww3_ts2/input/ww3_shel.inp index 8d93c5e0d..802ba99cb 100644 --- a/regtests/ww3_ts2/input/ww3_shel.inp +++ b/regtests/ww3_ts2/input/ww3_shel.inp @@ -3,7 +3,9 @@ $ ------------------------------ F T F T T T - F + F F + F F + F F F F F diff --git a/regtests/ww3_ts3/input/ww3_shel.inp b/regtests/ww3_ts3/input/ww3_shel.inp index 34c3e4b85..53091e79e 100644 --- a/regtests/ww3_ts3/input/ww3_shel.inp +++ b/regtests/ww3_ts3/input/ww3_shel.inp @@ -1,9 +1,11 @@ $ WAVEWATCH III shell input file $ ------------------------------ - F T - F T + F F + T T T F - F + F F + F F + F F F F F diff --git a/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.inp b/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.inp index 7ba825d07..838307f41 100644 --- a/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.inp +++ b/regtests/ww3_ts4/input_rg_multi/ww3_multi_grdset.inp @@ -2,10 +2,10 @@ $ WAVEWATCH III multi-scale input file $ ------------------------------------ 2 1 F 1 F T $ - 'wind' F F T F F F F + 'wind' F F T F F F F F F $ - 'large' 'no' 'no' 'wind' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F - 'nest' 'no' 'no' 'wind' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'large' 'no' 'no' 'wind' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'nest' 'no' 'no' 'wind' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F $ 20000101 000000 20000103 000000 $ diff --git a/regtests/ww3_ts4/input_rg_shel/ww3_shel.inp b/regtests/ww3_ts4/input_rg_shel/ww3_shel.inp index 8a4a5f5fb..f1db6e300 100644 --- a/regtests/ww3_ts4/input_rg_shel/ww3_shel.inp +++ b/regtests/ww3_ts4/input_rg_shel/ww3_shel.inp @@ -15,7 +15,9 @@ $ F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. diff --git a/regtests/ww3_ts4/input_ug/ww3_shel.inp b/regtests/ww3_ts4/input_ug/ww3_shel.inp index 8a4a5f5fb..f1db6e300 100644 --- a/regtests/ww3_ts4/input_ug/ww3_shel.inp +++ b/regtests/ww3_ts4/input_ug/ww3_shel.inp @@ -15,7 +15,9 @@ $ F F Water levels F F Currents F F Winds - F Ice concentrations + F F Ice concentrations + F F Atmospheric momentum + F F Air density F Assimilation data : Mean parameters F Assimilation data : 1-D spectra F Assimilation data : 2-D spectra. From a8bce94707bc4b43747d04b7f8b2fe7decf07ffd Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Tue, 25 May 2021 12:24:56 +0100 Subject: [PATCH 81/84] Configurable meta-data updates to ww3_ounf (#305) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds extra netCDF meta-data configuration to `ww3_ounf`, in particular: - new “coordinate reference system” (default and user definable) - new optional forecast variables: `forecast_reference_time` and `forecast_period` - template values for partitioned parameters - alternative time variable encoding and variable type; encoding can be “seconds since” or “days since”, variable type can be `int64` or `double`. - new `w3ounfmeta` module with linked list implementation of attribute pairs; number of extra user attributes per variable is now unlimited. - new `vector` flag for controlling u/v or dir/magnitude for directional fields [currently this is only implemented for “CUR” and “WND” outputs. - Handling of SMC grids in output IFI,IFJ loop has been factored out into a single subroutine call. Note: some new features are only available when using the namelist input file. --- manual/run/ww3_ounf.tex | 269 +++- model/bin/make_makefile.sh | 3 +- model/ftn/w3metamd.ftn | 308 +++++ model/ftn/w3nmlounfmd.ftn | 21 +- model/ftn/w3ounfmetamd.ftn | 1858 ++++++++++++++++++-------- model/ftn/w3timemd.ftn | 171 ++- model/ftn/ww3_ounf.ftn | 1437 ++++++++++---------- model/inp/ounfmeta_legacy.inp | 236 ++++ model/nml/ww3_ounf.nml | 17 + regtests/bin/matrix.base | 3 +- regtests/ww3_tnc1/input/ounfmeta.inp | 64 +- regtests/ww3_tnc1/input/ww3_ounf.nml | 64 +- 12 files changed, 2993 insertions(+), 1458 deletions(-) create mode 100644 model/ftn/w3metamd.ftn create mode 100644 model/inp/ounfmeta_legacy.inp diff --git a/manual/run/ww3_ounf.tex b/manual/run/ww3_ounf.tex index c1eb1f38d..dcac9c09a 100644 --- a/manual/run/ww3_ounf.tex +++ b/manual/run/ww3_ounf.tex @@ -13,7 +13,7 @@ \subsubsection{Gridded output NetCDF post-processor} \label{sec:ww3ounf} \proddefa{\opt .nc}{NetCDF file}{} -\vspace{\baselineskip} +\vspace{\baselineskip} \noindent When a single field is put in the file, the abbreviated field name (file @@ -21,104 +21,227 @@ \subsubsection{Gridded output NetCDF post-processor} \label{sec:ww3ounf} Table~\ref{tab:fields} on page~\pageref{tab:fields}. \noindent -If desired, it is possible to override the default metadata (attributes) -for each variable by providing values in the ounfmeta.inp file. +\paragraph{User configuration of meta-data:} \noindent -Entries in the ounfmeta.inp file are formatted as follows: -\begin{verbatim} - META ( [ IFI IFJ ] | FLDID ) [ IFC ] - attr_name = attr_value - attr_name = attr_value - extra_attr = extra_value [type] - ... repeated as many times as required. -\end{verbatim} +Default meta data (attributes) are generated in the output netCDF file +for each WW3 output variable. If desired, the user can override existing or +configure extra metadata via an input text file with the filename `ounfmeta.inp'. + + +\noindent +The `ounfmeta.inp' file can be used to override/configure the following: +\begin{itemize} + \item Modify/extend netCDF attributes for gridded output variables + \item Modify/extend "global" netCDF attributes + \item Define/redefine a coordinate reference system + \item Define template strings for generating attributes for + partitioned parameter output variables. +\end{itemize} \noindent -An output field is selected using the \texttt{META} keyword followed by -the `field name` or an [IFI, IFJ] integer pair that relates to the -group (IFI) and field (IFJ) flags. See ww3\_shel for details of -field names and flags. +Entries are made in the ounfmeta.inp file via \emph{sections} marked with a keyword. +Blank lines and comments lines (starting with \texttt{\$}) are ignored. +Note: All keywords and `Field Name ID' strings (e.g. \texttt{HS}) are +case insensitive. All netCDF attribute names are case sensitive. \noindent -Either form may be followed by an integer value (IFC) to select the -component in multi-component fields (such as wind). +\paragraph{Modify/add attributes for a WW3 gridded output field:} \noindent -Blank lines and comments lines (starting with \$) are ignored. +An output field is selected using the META keyword followed by +either an integer pair \texttt{GroupNum} and \texttt{ParamNum} +or via a \texttt{FldTag} string; these values which relate to the +`Output field parameter definitions table' in ww3\_shel.nml +or ww3\_shel.inp. +Either form may be followed by an optional integer value \texttt{IFC} +to select the component in multi-component fields (such as the U and +V components in the WND and CUR output fields). + +\begin{verbatim} + META | [IFC] + attr_name = attr_value + attr_name = attr_value + extra_attr = extra_value [type] + extra_attr = extra_value [type] + ... repeated as many times as required. +\end{verbatim} + \noindent -Each \texttt{`attr\_name`} relates to an existing variable attribute and -can be one of the following (altnerative internal name shown in parenthesis): +Each \texttt{attr\_name} relates to an existing variable attribute and +can be one of the following (alternative internal name shown in parenthesis): \begin{itemize} - \item standard\_name (varns) [string] : CF Standard name - \item long\_name (varnl) [string] : Descriptive long name - \item globwave\_name (varng) [string] : Optional GlobaWAVE name - \item direction\_reference or dir\_ref (varnd) [string] : Optional reference + \item \texttt{standard\_name (varns)} [string] : CF Standard name + \item \texttt{long\_name (varnl)} [string] : Descriptive long name + \item \texttt{globwave\_name (varng)} [string] : Optional GlobWAVE name + \item \texttt{direction\_reference} or \texttt{dir\_ref (varnd)} [string] : Optional reference frame for directional fields. - \item comment (varnc) [string] : Optional comment. - \item units [string] : Units of field - \item valid\_min (vmin) [float] : Minimum valid value of data - \item valid\_max (vmax) [float] : Maximum valud value of data - \item scale\_factor (fsc) [float] : Scaling factor for data - used only when + \item \texttt{comment (varnc)} [string] : Optional comment. + \item \texttt{units} [string] : Units of field + \item \texttt{valid\_min (vmin)} [float] : Minimum valid value of data + \item \texttt{valid\_max (vmax)} [float] : Maximum valid value of data + \item \texttt{scale\_factor (fsc)} [float] : Scaling factor for data - used only when variable type is SHORT. \end{itemize} \noindent -Additionaly, the following fields are also configurable: -\begin{itemize} - \item varnm : the netCDF variable name - \item ename : the identifier for single field per file output -\end{itemize} +Any other attribute name is assumed to be an optional `extra' +attribute. This extra attribute can take an optional `type' +keyword to specify the variable type of the metadata. If +no type is supplied, it defaults to a character type. Valid +types are one of \texttt{[c, r, i]} for character/string, +real/float or integer values respectively. Note: space +separated string an extra field should be quoted. + +\noindent +\paragraph{Modifying `global' meta data:} + +\noindent +Global metadata (i.e. associated with the file, not any particular variable) +can be specified with a special \texttt{META global} keyword combination: + +\begin{verbatim} + META global [nodefault] + extra_attr = extra_value [type] + extra_attr = extra_value [type] +\end{verbatim} + +\noindent +The optional \texttt{nodefault} keyword will surpress the output of the +default WW3 global metadata. + +\noindent +\paragraph{Modifying/defining a coordinate reference system:} + + +\noindent +A `coordinate reference system' (CRS) can be specified for all gridded +output fields using the \texttt{CRS} keyword. As a minimum, the +\texttt{grid\_mapping\_name} attribute must be specified. If the CRS +section is defined, all output fields will have a \texttt{grid\_mapping} +attribute added referencing the CRS variable. \texttt{crs\_vaname} will +be created as a scalar NF90\_CHAR variable in the output file. + +\begin{verbatim} + CRS + grid_mapping_name = + attr = value + attr = value +\end{verbatim} \noindent -Any other attribute name is assumed to be an optional "extra" -attribute. This extra attribute can take an optional "type" -keyword to specify the variable tpye of the metadata. If -no type is supplied, it defaults to a characer type. Valid -types are one of ["c", "r", "i"] for character/string, -real/float or integer values respectively. +For normal latitude/longitude grids and rotated pole grids, ww3\_ounf will +generate an appropriate coordinate reference system, but this may be +overridden using the CRS keyword. + -\noindent Some default attibutes can be disabled by setting -the attribute value to a blank string (""). This will prevent -the attribute from being written in the netCDF file. This -applies only to the \texttt{globawave\_name}, \texttt{comment} -and \texttt{direction\_reference} attributes. +\noindent +\paragraph{Partitioned parameter template strings} \noindent -Global meta data can be specified with a special \texttt{META global} line. +Specifying metadata for partitioned outputs is handled slightly differently; +one meta data entry is used for all partitions of a field. The metadata +is made specific to a particular partition number via \emph{template strings}. +There are two built-in template strings: \texttt{SPART} and \texttt{IPART}. +These provide a `string' description (e.g. `wind sea', `primary swell', etc) or +an integer partition number (1, 2, 3, etc.) These can be referenced in the meta data +attribute values using the template name surrounded by \texttt{< ... >}, +e.g. \texttt{}. \noindent -Example ounfmeta.inp file: +It is also possible to supply user defined partitioned parameter +template strings in the ounfmeta.inp file using the \texttt{TEMPLATE} +keyword, as below: \begin{verbatim} -$ Lines starting with dollars are comments. -$ The folowing line starts a meta-data section for the depth field -META DPT - standard_name = depth - long_name = "can be quoted string" - comment = or an unquoted string - vmax = 999.9 - -$ Next one is HSig (group 2, field 1) -META 2 1 - $ varns is same as standard_name - varns = "sig. wave height" - $ varnl is same as long_name - varnl = "this is long name" - -$ Next one is second component of wind. It also sets an -$ "extra" meta data value (height - a float) -META WND 2 - standard_name = "v-wind" - height = 10.0 "r" - -$ Global metadata: -META global - institution = UKMO - comment "space seperated strings should be quoted" c - version = 1.0 r + TEMPLATE + String for partition 0 + String for partition 1 + String for partition 2 + String for partition 3 + ... etc +\end{verbatim} + +\noindent +Specifying the \texttt{} with a trailing underscore will +provide an underscore separated (\texttt{\_}) string, rather than space +separated (this is useful for netCDF `standard name' values). + + +\noindent +\paragraph{Example ounfmeta.inp file:} +\begin{verbatim} + $ Lines starting with dollars are comments. + $ The line starts a meta-data section for the depth field + META DPT + standard_name = depth + long_name = "can be quoted string" + comment = or an unquoted string + vmax = 999.9 + + $ Next one is HSig (group 2, field 1) + META 2 1 + varns = "sig. wave height" + varnl = "this is long name" + + $ Next one is second component of wind. It also sets an + $ "extra" meta data value (height - a float) + META WND 2 + standard_name = "v-wind" + height = 10.0 "r" + + $ User defined partitioned parameters template strings: + TEMPLATE PARTSTR + wind wave + primary swell + secondary swell + + $ Use partition templates in partitioned Hs field: + $ (SPART and IPART are built-in) + META PHS + standard_name = "_sigificant_wave_height" + long_name = "" + partition_number = "" + + $ Coordinate reference system: + CRS crs + grid_mapping_name = "latitude_longitude" + semi_major_axis = 6371000.0 f + inverse_flattening = 0 f + + $ Global metadata: + META global + institution = UKMO + comment "space seperated strings should be quoted" c + version = 1.0 r \end{verbatim} + +\noindent +\paragraph{Addition of `forecast variables':} +When using the ww3\_ounf.nml input file, it is possible to add optional +auxiliary `forecast variables' to the output netCDF file (see ww3\_ounf.nml). +When \texttt{FCVARS = T}, the following variables will be generated: +\begin{itemize} + \item \texttt{forecast\_reference\_time}: The time associated with the + "analysis" of the current forecast. Useful for files that are split over + several days as it allows the forecast at a particular time to be referenced + back to it's analysis or start time. + + \item \texttt{forecast\_period}: the time period elapsed (in seconds) + since the associated "forecast\_reference\_time". +\end{itemize} + +\noindent +The \texttt{forecast\_reference\_time} defaults to \texttt{TIMESTART} specified in +ww3\_ounf.nml. However, it might be the case that the model run includes some +sort of hindcast period in which case the \texttt{forecast\_reference\_time} +should be set to the appropriate analysis time. Also, if ww3\_ounf is invoked +with a \texttt{TIMESTART} that is not the same as the model start time, it will +be required in this case to explicitly specify the correct +\texttt{forecast\_reference\_time} to ensure the \texttt{forecast\_period} is +correctly calculated. + \pb diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 3bd83cc3a..6b4cd290b 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -1013,7 +1013,7 @@ source="$pdlibcode $pdlibyow $db $bt $setupcode w3parall w3triamd $stx $nlx $btx $is $uostmd" IO='w3iogrmd w3iogomd w3iorsmd w3iopomd' aux="constants w3servmd w3timemd w3arrymd w3dispmd w3gsrumd" - aux="$aux w3nmlounfmd $smco w3ounfmetamd" ;; + aux="$aux w3nmlounfmd $smco w3ounfmetamd w3metamd" ;; ww3_outp) IDstring='Point output' core= data="wmmdatmd w3parall w3triamd $memcode w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd" @@ -1400,6 +1400,7 @@ 'W3PARALL' ) modtest=w3parall.o ;; 'W3SMCOMD' ) modtest=w3smcomd.o ;; 'W3OUNFMETAMD' ) modtest=w3ounfmetamd.o ;; + 'W3METAMD' ) modtest=w3metamd.o ;; * ) modfound=no ;; esac diff --git a/model/ftn/w3metamd.ftn b/model/ftn/w3metamd.ftn new file mode 100644 index 000000000..bb46626a8 --- /dev/null +++ b/model/ftn/w3metamd.ftn @@ -0,0 +1,308 @@ +!/ ------------------------------------------------------------------- / + MODULE W3METAMD +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 16-Dec-2020 | +!/ +-----------------------------------+ +!/ +!/ 16-Dec-2020 : Creation ( version 7.12 ) +!/ +! 1. Purpose : +! +! Provides types for handling "meta data" (attribute/value pairs) +! and a linked list construct for dynamic storage. +!/ ------------------------------------------------------------------- / + + ! Values to represent "unset" data: + CHARACTER(LEN=*), PARAMETER :: UNSETC = "unset" + REAL, PARAMETER :: UNSETR = HUGE(1.0) + + ! Type for storing a user defined metadata pair: + TYPE META_PAIR_T + CHARACTER(LEN=64) :: ATTNAME = UNSETC + CHARACTER(LEN=120) :: ATTVAL = UNSETC + CHARACTER :: TYPE = 'c' ! c,i,f/r + TYPE(META_PAIR_T), POINTER :: NEXT + END TYPE META_PAIR_T + + TYPE META_LIST_T + TYPE (META_PAIR_T), POINTER :: HEAD => NULL(), TAIL => NULL() + INTEGER :: N = 0 + END TYPE META_LIST_T + + ! Interface to facilitate adding real/int/character values to list + INTERFACE META_LIST_APPEND + MODULE PROCEDURE META_LIST_APPEND_M + MODULE PROCEDURE META_LIST_APPEND_R + MODULE PROCEDURE META_LIST_APPEND_I + MODULE PROCEDURE META_LIST_APPEND_C + END INTERFACE META_LIST_APPEND + + + CONTAINS + + +!/ ------------------------------------------------------------------- / + SUBROUTINE DEL_META_LIST(LIST) +! Deletes all entries in list +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + TYPE(META_LIST_T), INTENT(INOUT) :: LIST +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(META_PAIR_T), POINTER :: P + + IF(.NOT. ASSOCIATED(LIST%HEAD)) RETURN + + DO + NULLIFY(P) + IF(ASSOCIATED(LIST%HEAD%NEXT)) P => LIST%HEAD%NEXT + DEALLOCATE(LIST%HEAD) + IF(.NOT. ASSOCIATED(P)) EXIT + LIST%HEAD => P + ENDDO + + NULLIFY(LIST%HEAD) + NULLIFY(LIST%TAIL) + LIST%N = 0 + + END SUBROUTINE DEL_META_LIST + + +!/ ------------------------------------------------------------------- / + FUNCTION COPY_META_LIST(LIST) RESULT(COPY) +! Create a deep copy of a meta data list +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + TYPE(META_LIST_T), INTENT(IN) :: LIST + TYPE(META_LIST_T) :: COPY +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(META_PAIR_T), POINTER :: P + + NULLIFY(COPY%HEAD) + NULLIFY(COPY%TAIL) + COPY%N = 0 + IF(LIST%N .EQ. 0) RETURN + + ! Deep copy list + P => LIST%HEAD + DO + CALL META_LIST_APPEND_M(COPY, P) + IF(.NOT. ASSOCIATED(P%NEXT)) EXIT + P => P%NEXT + ENDDO + + END FUNCTION COPY_META_LIST + + +!/ ------------------------------------------------------------------- / + SUBROUTINE PRINT_META_LIST(LIST) +! Prints meta pairs in list to screen +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + TYPE(META_LIST_T), INTENT(IN) :: LIST +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(META_PAIR_T), POINTER :: P + + IF(.NOT. ASSOCIATED(LIST%HEAD)) THEN + WRITE(*,*) 'List empty.' + RETURN + ENDIF + + P => LIST%HEAD + DO + WRITE(*, '(A," [",A1,"] : ", A)') TRIM(P%ATTNAME), P%TYPE, & + TRIM(P%ATTVAL) + IF(.NOT. ASSOCIATED(P%NEXT)) EXIT + P => P%NEXT + ENDDO + + END SUBROUTINE PRINT_META_LIST + + +!/ ------------------------------------------------------------------- / + SUBROUTINE META_LIST_APPEND_M(LIST, META) +! Append META_PAIR_T object to list +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + TYPE(META_LIST_T), INTENT(INOUT) :: LIST + TYPE(META_PAIR_T), INTENT(IN) :: META +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(META_PAIR_T), POINTER :: P + + ALLOCATE(P) + + ! Empty list? + IF(LIST%N .EQ. 0) THEN + !IF(.NOT. ASSOCIATED(LIST%HEAD)) THEN + LIST%HEAD => P + ELSE + LIST%TAIL%NEXT => P + ENDIF + LIST%TAIL => P + + P%ATTNAME = META%ATTNAME + P%ATTVAL = META%ATTVAL + P%TYPE = META%TYPE + + NULLIFY(P%NEXT) + + LIST%N = LIST%N + 1 + + END SUBROUTINE META_LIST_APPEND_M + + +!/ ------------------------------------------------------------------- / + SUBROUTINE META_LIST_APPEND_R(LIST, ATTNAME, RVAL) +! Append real value meta pair to list +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + TYPE(META_LIST_T), INTENT(INOUT) :: LIST + CHARACTER(*), INTENT(IN) :: ATTNAME + REAL, INTENT(IN) :: RVAL +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(META_PAIR_T) :: META + + META%ATTNAME = ATTNAME + WRITE(META%ATTVAL,*) RVAL + META%TYPE = 'r' + CALL META_LIST_APPEND(LIST, META) + + END SUBROUTINE META_LIST_APPEND_R + + +!/ ------------------------------------------------------------------- / + SUBROUTINE META_LIST_APPEND_I(LIST, ATTNAME, IVAL) +! Append integer value meta pair to list +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + TYPE(META_LIST_T), INTENT(INOUT) :: LIST + CHARACTER(*), INTENT(IN) :: ATTNAME + INTEGER, INTENT(IN) :: IVAL +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(META_PAIR_T) :: META + + META%ATTNAME = ATTNAME + WRITE(META%ATTVAL,*) IVAL + META%TYPE = 'i' + CALL META_LIST_APPEND(LIST, META) + + END SUBROUTINE META_LIST_APPEND_I + + +!/ ------------------------------------------------------------------- / + SUBROUTINE META_LIST_APPEND_C(LIST, ATTNAME, SVAL) +! Append character value meta pair to list +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + TYPE(META_LIST_T), INTENT(INOUT) :: LIST + CHARACTER(*), INTENT(IN) :: ATTNAME, SVAL +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(META_PAIR_T) :: META + + META%ATTNAME = ATTNAME + META%ATTVAL = SVAL + META%TYPE = 'c' + CALL META_LIST_APPEND(LIST, META) + + END SUBROUTINE META_LIST_APPEND_C + +! Append pair to list + + +!/ ------------------------------------------------------------------- / + SUBROUTINE META_LIST_FIND_ATTR(LIST, ATTN, META, ERR) +! Find (first) entry in list with matching attname +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + TYPE(META_LIST_T), INTENT(IN) :: LIST + CHARACTER(*), INTENT(IN) :: ATTN + TYPE(META_PAIR_T), POINTER, INTENT(OUT) :: META + INTEGER, INTENT(OUT) :: ERR + + ERR = 0 + + ! Empty list? + IF(.NOT. ASSOCIATED(LIST%HEAD)) THEN + ERR = 1 + RETURN + ENDIF + + META => LIST%HEAD + + DO + IF(TRIM(META%ATTNAME) == TRIM(ATTN)) RETURN + IF(.NOT. ASSOCIATED(META%NEXT)) EXIT + META => META%NEXT + ENDDO + + ! Not found + NULLIFY(META) + ERR = 2 + + END SUBROUTINE META_LIST_FIND_ATTR + + +!/ ------------------------------------------------------------------- / + FUNCTION META_LIST_HAS_ATTR(LIST, ATTN) RESULT(FOUND) +! Tests whether list contains an entry with specified attname +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + TYPE(META_LIST_T), INTENT(IN) :: LIST + CHARACTER(*), INTENT(IN) :: ATTN + LOGICAL :: FOUND +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(META_PAIR_T), POINTER :: P + + FOUND = .FALSE. + + ! Empty list? + IF(.NOT. ASSOCIATED(LIST%HEAD)) THEN + RETURN + ENDIF + + P => LIST%HEAD + + DO + IF(TRIM(P%ATTNAME) == TRIM(ATTN)) THEN + FOUND = .TRUE. + RETURN + ENDIF + + IF(.NOT. ASSOCIATED(P%NEXT)) EXIT + P => P%NEXT + ENDDO + + END FUNCTION META_LIST_HAS_ATTR + +!/ ------------------------------------------------------------------- / + END MODULE W3METAMD +!/ ------------------------------------------------------------------- / diff --git a/model/ftn/w3nmlounfmd.ftn b/model/ftn/w3nmlounfmd.ftn index c3736f3c6..3afb02e53 100644 --- a/model/ftn/w3nmlounfmd.ftn +++ b/model/ftn/w3nmlounfmd.ftn @@ -7,7 +7,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 12-Jan-2021 | !/ +-----------------------------------+ !/ !/ For updates see subroutines. @@ -34,6 +34,11 @@ LOGICAL :: SAMEFILE LOGICAL :: VECTOR INTEGER :: TYPE + CHARACTER(15) :: TIMEREF + LOGICAL :: FCVARS + CHARACTER :: TIMEVAR + CHARACTER :: TIMEUNIT + CHARACTER(15) :: TIMEEPOCH END TYPE NML_FIELD_T ! file structure @@ -73,7 +78,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 12-Jan-2021 | !/ +-----------------------------------+ !/ ! @@ -194,7 +199,7 @@ !/ | M. Accensi | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 12-Jan-2021 | !/ +-----------------------------------+ !/ ! 1. Purpose : @@ -270,6 +275,11 @@ FIELD%SAMEFILE = .TRUE. FIELD%VECTOR = .TRUE. FIELD%TYPE = 3 + FIELD%TIMEREF = 'unset' + FIELD%FCVARS = .FALSE. + FIELD%TIMEVAR = 'D' + FIELD%TIMEUNIT = 'D' + FIELD%TIMEEPOCH = '19900101 000000' ! read field namelist REWIND (NDSI) @@ -281,6 +291,9 @@ CALL EXTCDE (1) END IF + ! Default forecast reference time to start time + IF(FIELD%TIMEREF == 'unset') FIELD%TIMEREF = FIELD%TIMESTART + ! save namelist NML_FIELD = FIELD @@ -574,6 +587,8 @@ WRITE (NDSN,10) TRIM(MSG),'PARTITION = ', TRIM(NML_FIELD%PARTITION) WRITE (NDSN,13) TRIM(MSG),'SAMEFILE = ', NML_FIELD%SAMEFILE WRITE (NDSN,11) TRIM(MSG),'TYPE = ', NML_FIELD%TYPE + WRITE (NDSN,10) TRIM(MSG),'FCVARS = ', NML_FIELD%FCVARS + WRITE (NDSN,10) TRIM(MSG),'TIMEREF = ', NML_FIELD%TIMEREF 10 FORMAT (A,2X,A,A) diff --git a/model/ftn/w3ounfmetamd.ftn b/model/ftn/w3ounfmetamd.ftn index cca538569..7405be102 100644 --- a/model/ftn/w3ounfmetamd.ftn +++ b/model/ftn/w3ounfmetamd.ftn @@ -12,6 +12,11 @@ !/ 02-Nov-2020 : Creation ( version 7.12 ) !/ 26-Jan-2021 : Added TP and alternative dir/mag ( version 7.12 ) !/ metadata for directional fields. +!/ 16-Dec-2020 : Added user partition templates ( version 7.12 ) +!/ and coordinate reference system. +!/ Freeform meta data uses linked list. +!/ 02-Feb-2021 : Improved partitioned parameter ( version 7.12 ) +!/ template string implementation. !/ 22-Mar-2021 : Adds extra coupling fields ( version 7.xx ) !/ ! 1. Purpose : @@ -23,7 +28,7 @@ ! Default netCDF meta data is provided for each WW3 output variable ! and is stored intentally via the META_T type. The meta values are ! grouped by component (max 3), field (IFI) and group (IFJ). -! +! ! The user can override this meta data via an input text file ! with the filename `ounfmeta.inp`. ! @@ -37,7 +42,7 @@ ! ! An output field is selected using the META keyword followed by ! either an [IFI, IFJ] integer pair or a FieldID string. Optionally, -! either form may be followed by an integer value to select the +! either form may be followed by an integer value to select the ! component in multi-component fields (such as wind). ! ! Blank lines and comments lines (starting with $) are ignored. @@ -56,11 +61,11 @@ ! - "valid_max" or "vmax" ! - "scale_factor" or "fsc" ! -! Any other attribute name is assumed to be an optional "extra" +! Any other attribute name is assumed to be an optional "extra" ! attribute. This extra attribute can take an optional "type" -! keyworkd to specify the variable tpye of the metadata. If -! no type is supplied, it defaults to a characer type. Valud -! types are one of ["c", "r", "i"] for character/string, +! keyworkd to specify the variable tpye of the metadata. If +! no type is supplied, it defaults to a characer type. Valid +! types are one of ["c", "r", "i"] for character/string, ! real/float or integer values respectively. ! ! Global meta data can be specified with a special "META global" line: @@ -69,11 +74,47 @@ ! extra_attr = extra_value [type] ! extra_attr = extra_value [type] ! -! Note: The "META" keyword and the Field Name ID strings (e.g. HS) -! are case insensitive. All netCDF attribute names are case sensitive. +! A "coordinate reference system" (CRS) can be specified for all output +! fields using the "CRS" keyword. As a minimum, the "grid_mapping_name" +! attribute must be specified. If the CRS section is defined, all output +! fields will have a "grid_mapping" attribute added referencing the +! CRS variable. "crs_vaname" will be created as a scalar NF90_CHAR +! variable in the output file. +! +! CRS +! grid_mapping_name = +! attr = value +! attr = value +! +! Note: ALL keywords and "Field Name ID" strings (e.g. HS) are +! case insensitive. All netCDF attribute names are case sensitive. +! +! Partitioned outputs are handles slightly differently; one meta data +! entry is used for all partitions of a field. The metadata is made +! specific to a particular partition via template strings. There are +! two built-in template strings: SPART and IPART. These provide a +! "string" description (e.g. "wind sea", "primary swell", etc) or an +! integer partition number. These can be references in the meta data +! using the template name surrounded by < .. >, e.g. +! +! It is also possible to supply user defined partitioned parameter +! template strings in the ounfmeta.inp file using the TEMPLATE +! keyword, as below: +! +! TEMPLATE +! String for partition 0 +! String for partition 1 +! String for partition 2 +! String for partition 3 +! ... etc +! +! Specifying the with a trailing underscore will +! provide an underscore seperated (_) string, rather than space +! seperated. ! ! -! Example file: +! Example ounfmeta.inp file: +! ========================== ! ! $ Lines starting with dollars are comments. ! $ The line starts a meta-data section for the depth field @@ -94,6 +135,25 @@ ! standard_name = "v-wind" ! height = 10.0 "r" ! +! $ User defined partitioned parameters template strings: +! TEMPLATE PARTSTR +! wind wave +! primary swell +! secondary swell +! +! $ Use partition templates in partitioned Hs field: +! $ (SPART and IPART are built-in) +! META PHS +! standard_name = "_sigificant_wave_height" +! long_name = "" +! partition_number = "" +! +! $ Coordinate reference system: +! CRS crs +! grid_mapping_name = "latitude_longitude" +! semi_major_axis = 6371000.0 f +! inverse_flattening = 0 f +! ! $ Global metadata: ! META global ! institution = UKMO @@ -104,12 +164,15 @@ !/ USE NETCDF USE CONSTANTS, ONLY: TPIINV - USE W3GDATMD, ONLY: SIG, NK -!/RTD USE W3GDATMD, ONLY : FLAGUNR + USE W3GDATMD, ONLY: SIG, NK, GTYPE, UNGTYPE +!/RTD USE W3GDATMD, ONLY : FLAGUNR, POLAT, POLON +!/SMC USE W3SMCOMD, ONLY : SMCTYPE USE W3ODATMD, ONLY: PTMETH, PTFCUT, NOGRP, NOGE, NGRPP, & - NDSE, FNMPRE + NDSE, FNMPRE, NOSWLL USE W3SERVMD, ONLY: EXTCDE, STR_TO_UPPER + USE W3METAMD + IMPLICIT NONE PUBLIC @@ -119,28 +182,19 @@ CHARACTER(LEN=*), PARAMETER :: FN_META = "ounfmeta.inp" ! String token used to merge in partition number: - CHARACTER(LEN=*), PARAMETER :: PART_TOKEN = "" - - ! Values to represent "unset" data: - CHARACTER(LEN=*), PARAMETER :: UNSETC = "unset" - REAL, PARAMETER :: UNSETR = HUGE(1.0) - - ! Type for storing a user defined metadata pair: - TYPE META_PAIR_T - CHARACTER(LEN=64) :: ATTNAME = UNSETC - CHARACTER(LEN=120) :: ATTVAL = UNSETC - CHARACTER :: TYPE = 'c' ! c,i,f/r - END TYPE META_PAIR_T + CHARACTER(LEN=*), PARAMETER :: IPART_TOKEN = "" + CHARACTER(LEN=*), PARAMETER :: SPART_TOKEN = "" + CHARACTER(LEN=*), PARAMETER :: SPART_TOKEN_ = "" ! Type for storing WW3 netCDF metadata for a variable TYPE META_T REAL :: FSC, VMIN, VMAX = UNSETR CHARACTER(LEN=24) :: UNITS = UNSETC - CHARACTER(LEN=20) :: ENAME = UNSETC + CHARACTER(LEN=50) :: ENAME = UNSETC CHARACTER(LEN=80) :: VARNM = UNSETC, VARNL = UNSETC CHARACTER(LEN=120) :: VARNS = UNSETC ,VARNG = UNSETC, VARND = UNSETC CHARACTER(LEN=512) :: VARNC = UNSETC - TYPE(META_PAIR_T) :: EXTRA + TYPE(META_LIST_T) :: EXTRA ! For updating meta only: INTEGER :: IFI = 0, IFJ = 0, IFC = 1 @@ -151,7 +205,7 @@ TYPE FIELD_T TYPE(META_T), POINTER :: META(:) END TYPE FIELD_T - + ! ... field (IFJ) ... TYPE GROUP_T TYPE(FIELD_T), ALLOCATABLE :: FIELD(:) @@ -161,18 +215,34 @@ TYPE(GROUP_T), ALLOCATABLE :: GROUP(:) ! Storage for the Global meta data (free form): - ! TODO - maybe implement as a linked list? - TYPE(META_PAIR_T), ALLOCATABLE :: GLOBAL_META(:) - INTEGER, PARAMETER :: MAX_GBLMETA = 30 - INTEGER :: N_GBLMETA + TYPE(META_LIST_T) :: GLOBAL_META + LOGICAL :: FL_DEFAULT_GBL_META = .TRUE. + + ! Storage for coordinate reference system (CRS) metadata: + CHARACTER(LEN=128) :: CRS_NAME = '' + TYPE(META_LIST_T) :: CRS_META + LOGICAL :: CRS_IS_DEFAULT = .FALSE. ! True if CRS set by this module + + ! Type for storing partitioned parameter template strings. + ! Defined as a linked-list + TYPE PART_TMPL_T + CHARACTER(LEN=128) :: TMPL ! Placeholder + CHARACTER(LEN=128), ALLOCATABLE :: PART_TEXT(:) ! Partition description + INTEGER(KIND=2) :: NP ! Num parts (max NOSWLL) + TYPE(PART_TMPL_T), POINTER :: NEXT ! LinkedList pointer + END TYPE PART_TMPL_T + + TYPE(PART_TMPL_T), POINTER :: PART_TMPL INTEGER :: NCVARTYPE ! netCDF variable type CHARACTER(LEN=30) :: DIRCOM ! Direction convention comment CHARACTER(LEN=128) :: PARTCOM ! Partitioning method comment + CHARACTER(LEN=15) :: SNAMEP(5) ! Part. standard name templates LOGICAL, PRIVATE :: VECTOR ! Vector or dir/mag for dir fields? + LOGICAL :: FLRTD = .FALSE. - CONTAINS + CONTAINS !/ ------------------------------------------------------------------- / SUBROUTINE INIT_META(VEC) @@ -206,6 +276,11 @@ VECTOR = .TRUE. IF(PRESENT(VEC)) VECTOR = VEC +!/RTD ! Is the grid really rotated? +!/RTD IF ( POLAT < 90. ) FLRTD = .True. +!/SMC!/RTD ! SMC type 3/4 outputs are currently on standard pole grid only +!/SMC!/RTD IF(SMCTYPE .EQ. 3 .OR. SMCTYPE .EQ. 4) FLRTD = .FALSE. +!/RTD ! ! 1. Allocate nested GROUP, FIELD structure: ALLOCATE(GROUP(NOGRP)) @@ -214,11 +289,10 @@ DO J = 1,NOGE(I) ALLOCATE(GROUP(I)%FIELD(J)%META(3)) ! Hardcode to 3 components for the moment ENDDO - ENDDO + ENDDO - ! Allocate storage for Global meta-data - ALLOCATE(GLOBAL_META(MAX_GBLMETA)) - N_GBLMETA = 0 + ! 1.1 Make sure partitioned template pointer is null (i.e. empty list) + NULLIFY(PART_TMPL) ! 2. Set direction convention: DIRCOM = "" @@ -227,33 +301,49 @@ !/RTD ELSE IF ( .NOT. FLAGUNR ) THEN !/RTD DIRCOM = 'Rotated Pole Grid North' !/RTD ENDIF - ! Set partitioning method comment: + + ! Set partitioning method comment and standard name templates: + IF( PTMETH .LE. 3 ) THEN + SNAMEP(1) = 'wind' + SNAMEP(2) = 'primary swell' + SNAMEP(3) = 'secondary swell' + SNAMEP(4) = 'tertiary swell' + SNAMEP(5) = 'swell' + ELSE + SNAMEP(1) = 'wind' + SNAMEP(2) = 'swell' + SNAMEP(3:5) = '' + ENDIF + IF ( PTMETH .EQ. 1 ) THEN - PARTCOM = "Wind sea and swells defined using topographic " // & - "partitions and partition wave-age cut-off " // & - "(WWIII default scheme)" + PARTCOM = "Wind sea and swells defined using topographic " // & + "partitions and partition wave-age cut-off " // & + "(WWIII default scheme)" ELSE IF ( PTMETH .EQ. 2 ) THEN - PARTCOM = "Wind sea and swells defined using topographic " // & - "partitions and spectral wave-age cut-off" + PARTCOM = "Wind sea and swells defined using topographic " // & + "partitions and spectral wave-age cut-off" ELSE IF ( PTMETH .EQ. 3 ) THEN - PARTCOM = "Wave components defined using topographic " // & - "partitions only" + PARTCOM = "Wave components defined using topographic " // & + "partitions only" ELSE IF ( PTMETH .EQ. 4 ) THEN - PARTCOM = "Wind sea and swell defined using spectral " // & - "wave-age cut-off" + PARTCOM = "Wind sea and swell defined using spectral " // & + "wave-age cut-off" ELSE IF ( PTMETH .EQ. 5 ) THEN - WRITE(PARTCOM, '("Wave components defined using ",F5.3,' // & - '"Hz spectral frequency cutoff")') PTFCUT + WRITE(PARTCOM, '("Wave components defined using ",F5.3,' // & + '"Hz spectral frequency cutoff")') PTFCUT ELSE - WRITE(PARTCOM, '("PTM_",I1,"_Unknown")') PTMETH + WRITE(PARTCOM, '("PTM_",I1,"_Unknown")') PTMETH ENDIF ! 3. Set the default values for the OUNF netCDF meta data. CALL DEFAULT_META() + ! Set the default coordiante reference system (if applicable) + CALL DEFAULT_CRS_META() + ! If the ounfmeta.inp exists, read this in to override defaults: INQUIRE(FILE=TRIM(FNMPRE)//"ounfmeta.inp", EXIST=FLGNML) - IF(FLGNML) THEN + IF(FLGNML) THEN CALL READ_META() ENDIF @@ -290,15 +380,16 @@ DEALLOCATE(GROUP(I)%FIELD(J)%META) ENDDO DEALLOCATE(GROUP(I)%FIELD) - ENDDO + ENDDO DEALLOCATE(GROUP) - DEALLOCATE(GLOBAL_META) + CALL DEL_META_LIST(GLOBAL_META) + CALL DEL_META_LIST(CRS_META) END SUBROUTINE TEARDOWN_META !/ ------------------------------------------------------------------- / - SUBROUTINE NEXT_LINE(NDMI, BUF, ILINE, EOF) + SUBROUTINE NEXT_LINE(NDMI, BUF, ILINE, EOF, NEW_SECTION) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -323,6 +414,9 @@ ! If the end of file is reached before any valid line is read ! then EOF is set to true. ! +! If the next valid line is a new section marker (META or TEMPLATE) +! then the NEW_SECTION flag is set to true. +! ! 3. Parameters : ! ! Parameter list @@ -331,6 +425,8 @@ ! BUF Char. O Next input line read from file ! ILINE Int. I/O Line number of file ! EOF Bool. O True if end-of-file is reached. +! NEW_SECTION +! Bool. O True if new section marker found ! ---------------------------------------------------------------- ! !/ ------------------------------------------------------------------- / @@ -340,12 +436,13 @@ CHARACTER(*), INTENT(OUT) :: BUF INTEGER, INTENT(INOUT) :: ILINE LOGICAL, INTENT(OUT) :: EOF + LOGICAL, INTENT(OUT), OPTIONAL :: NEW_SECTION !/ ------------------------------------------------------------------- / !/ Local parameters !/ INTEGER :: IERR CHARACTER(LEN=10) :: TEST - + EOF = .FALSE. ! Keep reading from file until we read a line that is not: @@ -366,6 +463,18 @@ CYCLE ENDIF + IF(TRIM(BUF) == "$ DEBUG ON") THEN + WRITE(*,'(I5,1X,A20)') ILINE, '[DEBUG ON]' + DEBUG = .TRUE. + CYCLE + ENDIF + + IF(TRIM(BUF) == "$ DEBUG OFF") THEN + WRITE(*,'(I5,1X,A20)') ILINE, '[DEBUG OFF]' + DEBUG = .FALSE. + CYCLE + ENDIF + ! Read first token on line: READ(BUF, *) TEST @@ -375,6 +484,17 @@ CYCLE ENDIF + ! Check if is section header + IF(PRESENT(NEW_SECTION)) THEN + CALL STR_TO_UPPER(TEST) + SELECT CASE(TEST) + CASE ("META", "TEMPLATE", "CRS") + NEW_SECTION = .TRUE. + CASE DEFAULT + NEW_SECTION = .FALSE. + END SELECT + ENDIF + ! Anything else can be considered the "next line" RETURN ENDDO @@ -416,7 +536,7 @@ ! ! 1. Purpose : ! -! Replaces tab characters in a string with spaces. +! Replaces tab characters in a string with a space. ! ! 2. Parameters : ! @@ -425,7 +545,7 @@ ! STR Char. I/O Character string to process ! ---------------------------------------------------------------- ! -! 3. Remarks : +! 3. Remarks : ! ! Assumes ASCII encoding! Tab character is ASCII value 9. ! @@ -438,7 +558,7 @@ INTEGER, PARAMETER :: ASCII_TAB = 9 INTEGER :: SLEN INTEGER :: I -! +! SLEN = LEN_TRIM(STR) DO I=1,SLEN @@ -449,6 +569,52 @@ END SUBROUTINE NOTABS +!/ ------------------------------------------------------------------- / + FUNCTION REPLACE_CHAR(STR, C, REP) RESULT(OSTR) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 02-Fev-2021 | +!/ +-----------------------------------+ +!/ +!/ 02-Feb-2021 : Creation ( version 7.12 ) +!/ +! +! 1. Purpose : +! +! Replaces single characters in a string. Returns a new string, +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! STR CharArr I Character string to process +! C Char I Character to search for +! REP Char I Character to substitute +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + CHARACTER(*) :: STR + CHARACTER :: C, REP + CHARACTER(LEN(STR)) :: OSTR +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: I + + OSTR = TRIM(STR) + DO + I = INDEX(TRIM(OSTR), C) + IF(I .LE. 0) EXIT + OSTR(I:I) = REP + ENDDO + + END FUNCTION REPLACE_CHAR + !/ ------------------------------------------------------------------- / SUBROUTINE READ_META() !/ @@ -482,7 +648,6 @@ INTEGER :: IFI, IFJ, IFC INTEGER :: ILINE, MCNT - !INTEGER :: MCNT LOGICAL :: EOF NDMI = 60 @@ -496,12 +661,12 @@ WRITE(NDSE, 5010) TRIM(FNMPRE)//TRIM(FN_META), IERR CALL EXTCDE(10) ENDIF - + ! Loop over file, skipping comments or blank lines, until we find ! a META line. DO CALL NEXT_LINE(NDMI, BUF, ILINE, EOF) - IF(EOF) EXIT !GOTO 500 + IF(EOF) EXIT ! Read first token on line: READ(BUF, *) TEST @@ -511,11 +676,10 @@ CALL STR_TO_UPPER(TESTU) IF(TESTU == "META") THEN MCNT = MCNT + 1 - + IF(DEBUG) WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[META header]', TRIM(BUF) ! Get the IFI, IFJ, IFC values from the header: - !I = INDEX(BUF,'META') + 4 I = INDEX(BUF, TRIM(TEST)) + 4 ! Handles lower/mixed-case META keyword CALL DECODE_HEADER(BUF(I:), ILINE, IFI, IFJ, IFC) IF(IFI .EQ. -1) THEN @@ -523,9 +687,9 @@ CALL EXTCDE(10) ENDIF - ! IFI = 999 is a section for the "global" meta data + ! IFI = 999 is a section for the "global" meta data IF(IFI .EQ. 999) THEN - CALL READ_GLOBAL_META(NDMI, ILINE) + CALL READ_FREEFORM_META_LIST(NDMI, ILINE, GLOBAL_META) CYCLE ENDIF @@ -542,26 +706,37 @@ WRITE(NDSE,5015) TRIM(FN_META), ILINE CALL EXTCDE(1) ENDIF - + ! Select correct variable metadata entry: PMETA => GROUP(IFI)%FIELD(IFJ)%META(IFC) - + ! Update the metadata with values from file: CALL READ_META_PAIRS(NDMI, PMETA, ILINE) + + ELSE IF(TESTU == "TEMPLATE") THEN + BACKSPACE(NDMI) ! We will reprocess this line + CALL READ_PART_TMPL(NDMI, ILINE) + CYCLE + + ELSE IF(TESTU == "CRS") THEN + BACKSPACE(NDMI) ! We will reprocess this line + CALL READ_CRS_META(NDMI, ILINE) + CYCLE + ELSE ! Anything else is a syntax error WRITE(NDSE, 5012) TRIM(FN_META), ILINE, TRIM(BUF) CALL EXTCDE(10) ENDIF ENDDO - - !500 CONTINUE + CLOSE(NDMI) - WRITE(*, 5000) MCNT, N_GBLMETA + !WRITE(*, 5000) MCNT, N_GBLMETA, N_CRSMETA RETURN ! 5000 FORMAT(/' Read in: ',I3,' variable metadata entries' / & - ' and: ',I3,' global meta data entries' /) + ' and: ',I3,' global meta data entries' / & + ' and: ',I3,' CRS meta data entries' /) ! 5010 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & ' ERROR OPENING METADATA FILE'/ & @@ -607,10 +782,11 @@ !/ | C. Bunney | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 09-Nov-2020 | +!/ | Last update : 02-Feb-2021 | !/ +-----------------------------------+ !/ !/ 09-Nov-2020 : Creation ( version 7.12 ) +!/ 02-Feb-2021 : NODEFAULT option for Global meta ( version 7.12 ) !/ ! ! 1. Purpose : @@ -632,7 +808,7 @@ ! Parameter list ! ---------------------------------------------------------------- ! BUF Char. I Input header string (without leading META tag) -! ILINE Int. I Line number (for error reporting) +! ILINE Int. I Line number (for error reporting) ! IFI Int. O Output group number ! IFJ Int. O Output field number ! IFC Int. O Component number (defaults to 1) @@ -640,18 +816,18 @@ ! !/ ------------------------------------------------------------------- / USE W3IOGOMD, ONLY: W3FLDTOIJ - + IMPLICIT NONE - + CHARACTER(*), INTENT(IN) :: BUF INTEGER, INTENT(IN) :: ILINE INTEGER, INTENT(OUT) :: IFI, IFJ, IFC !/ ------------------------------------------------------------------- / !/ Local parameters !/ - INTEGER :: IERR - CHARACTER(LEN=10) :: FLD - + INTEGER :: IERR, I + CHARACTER(LEN=10) :: FLD, OFLD, OPT + IFI = 0 IFJ = 1 IFC = 1 @@ -669,18 +845,19 @@ ELSE ! Try reading field ID plus component READ(BUF, *, IOSTAT=IERR) FLD, IFC - + IF(ierr .NE. 0) THEN ! Try just fldid READ(BUF, *, IOSTAT=IERR) FLD ENDIF ENDIF - + IF(IERR .NE. 0) THEN WRITE(NDSE, 6000) TRIM(FN_META), ILINE, TRIM(BUF) CALL EXTCDE(10) ENDIf + OFLD = FLD CALL STR_TO_UPPER(FLD) ! field names are case insensitive ! If string value (FLDID), then decode into IFI,IFJ value: @@ -689,14 +866,28 @@ IF(TRIM(FLD) == "GLOBAL") THEN IF(DEBUG) WRITE(*,'(6X,A20,1X,A)') '[GLOBAL meta sec.]', TRIM(BUF) IFI = 999 ! Marker for global section + + ! check for any options: + I = INDEX(BUF, TRIM(OFLD)) + LEN_TRIM(OFLD) + OPT = ADJUSTL(BUF(I:)) + CALL STR_TO_UPPER(OPT) + SELECT CASE(TRIM(OPT)) + CASE("") + CONTINUE ! no option + CASE("NODEFAULT") + FL_DEFAULT_GBL_META = .FALSE. + IF(DEBUG) WRITE(*,'(6X,A20,1X,A)') '[GLOBAL meta]', 'Defaults disabled' + CASE DEFAULT + WRITE(NDSE, *) "Unknown GLOBAL extra option: [", TRIM(OPT), "]" + END SELECT ELSE IF(DEBUG) WRITE(*,'(6X,A20,1X,A)') '[Decoding field ID]', TRIM(BUF) CALL W3FLDTOIJ(FLD, IFI, IFJ, 1, 1, 1) ENDIF ENDIF - IF(DEBUG) WRITE(*,'(6X,A20,1X,3I2)') '[IFI, IFJ, IFC]', IFI,IFJ,IFC -! + IF(DEBUG) WRITE(*,'(6X,A20,1X,I4,2I2)') '[IFI, IFJ, IFC]', IFI,IFJ,IFC +! 6000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & ' SYNTAX ERROR IN SECTION HEADER. ' / & ' FILENAME = ', A / & @@ -704,7 +895,7 @@ ' => ', A /) ! END SUBROUTINE DECODE_HEADER - + !/ ------------------------------------------------------------------- / SUBROUTINE READ_META_PAIRS(NDMI, META, ILINE) !/ @@ -726,7 +917,7 @@ ! ! 2. Method: ! -! Keeps looping over input lines in file until next META section +! Keeps looping over input lines in file until next META section ! or EOF is found. Splits meta pairs on the = character. ! ! Note - the "extra" metadata pair can also provide a variable @@ -750,28 +941,22 @@ !/ Local parameters ! CHARACTER(LEN=256) :: BUF - CHARACTER(LEN=128) :: ATTN, ATTV, TMP, EXTRA - CHARACTER(LEN=16) :: ATT_TYPE, TEST + CHARACTER(LEN=128) :: ATTN, ATTV, TMP + CHARACTER(LEN=16) :: ATT_TYPE!, TEST INTEGER :: I, IERR REAL :: R - LOGICAL :: EOF -! - EXTRA = '' + LOGICAL :: EOF, NEW + TYPE(META_PAIR_T) :: EXTRA ! Keep reading lines until we hit EOF or anoter META keyword DO - CALL NEXT_LINE(NDMI, BUF, ILINE, EOF) + CALL NEXT_LINE(NDMI, BUF, ILINE, EOF, NEW_SECTION=NEW) IF(EOF) THEN BACKSPACE(NDMI) RETURN ENDIF - ! Read first token on line: - READ(BUF, *) TEST - - CALL STR_TO_UPPER(TEST) - IF(TEST == "META") THEN - ! Start of new meta data entry + IF(NEW) THEN IF(DEBUG) WRITE(*,'(I5,1X,A20)') ILINE, '[--end of section--]' ILINE = ILINE - 1 BACKSPACE(NDMI) @@ -779,14 +964,14 @@ ENDIF IF(DEBUG) WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[META pair]', TRIM(BUF) - + ! Meta data should be formatted as "attr_name = attr_value" I = INDEX(BUF, "=") IF( I .LT. 1 ) THEN WRITE(NDSE, 7000) FN_META, ILINE, TRIM(BUF) CALL EXTCDE(10) ENDIF - + ATTN = ADJUSTL(BUF(1:I-1)) ATTV = ADJUSTL(BUF(I+1:)) @@ -795,52 +980,46 @@ ATTV='""' ENDIF - IERR = 0 + IERR = 0 SELECT CASE(TRIM(attn)) ! Character variables ! Note: Using internal reads will allow the use of quote marks in strings CASE("varnm") READ(attv, *, IOSTAT=IERR) META%VARNM - + CASE("ename") READ(attv, *, IOSTAT=IERR) META%ENAME - + CASE("standard_name", "varns") READ(attv, *, IOSTAT=IERR) META%VARNS - + CASE("long_name", "varnl") READ(attv, *, IOSTAT=IERR) META%VARNL - + CASE("globwave_name", "varng") READ(attv, *, IOSTAT=IERR) META%VARNG - + CASE("direction_reference", "dir_ref", "varnd") READ(attv, *, IOSTAT=IERR) META%VARND - + CASE("comment", "varnc") READ(attv, *, IOSTAT=IERR) META%VARNC - + CASE("units") READ(attv, *, IOSTAT=IERR) META%UNITS - + ! Real variables CASE("valid_min", "vmin") READ(attv, *, IOSTAT=IERR) META%VMIN - + CASE("valid_max", "vmax") READ(attv, *, IOSTAT=IERR) META%VMAX - + CASE("scale_factor", "fsc") READ(attv, *, IOSTAT=IERR) META%FSC - + ! Default case will be the "extra" meta data variable CASE DEFAULT - ! Check EXTRA attribute not already set - IF(EXTRA /= '') THEN - WRITE(NDSE, 7001) FN_META, ILINE, TRIM(BUF) - CALL EXTCDE(10) - ENDIF - TMP = ATTV CALL GET_ATTVAL_TYPE(TMP, ILINE, ATTV, ATT_TYPE) @@ -848,13 +1027,11 @@ WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[META extra]', & TRIM(attn)//' = '//TRIM(attv)//' (type: '//TRIM(att_type)//")" ENDIF - - ! Set "extra" data - META%EXTRA%ATTNAME = TRIM(attn) - META%EXTRA%ATTVAL = TRIM(attv) - META%EXTRA%TYPE = TRIM(att_type) - EXTRA = ATTN + EXTRA%ATTNAME = TRIM(attn) + EXTRA%ATTVAL = TRIM(attv) + EXTRA%TYPE = TRIM(att_type) + CALL META_LIST_APPEND(META%EXTRA, EXTRA) END SELECT @@ -864,21 +1041,15 @@ ENDIF ENDDO - + RETURN -! +! 7000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & ' SYNTAX ERROR IN METADATA FILE ' / & ' SHOULD BE "attr_name = attr_value" ' / & ' FILENAME = ', A / & ' LINE NO =', I5 / & ' => ', A /) -! - 7001 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & - ' "EXTRA" ATTRIBUTE ALREADY SET FOR VARIABLE' / & - ' FILENAME = ', A / & - ' LINE NO =', I5 / & - ' => ', A /) ! 7002 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & ' IO ERROR READING ATTRIBUTE' / & @@ -916,7 +1087,7 @@ ! It is important to quote strings if they contain spaces. ! ! Valid types are "c" "r/f", and "i" for character, real/float and -! integer values. +! integer values. ! 3. Parameters : ! @@ -945,31 +1116,31 @@ ATTV = '' READ(BUF, *, IOSTAT=IERR) ATTV, ATT_TYPE IF(IERR /= 0) READ(BUF, *, IOSTAT=IERR) ATTV - + ! Check attr values are valid w.r.t. attr type SELECT CASE(TRIM(att_type)) - + CASE("i") READ(attv, *, iostat=ierr) i IF(ierr .ne. 0) then WRITE(NDSE, 8001) "INTEGER", TRIM(FN_META), ILINE, TRIM(ATTV) CALL EXTCDE(10) ENDIF - + CASE("r", "f") READ(attv, *, iostat=ierr) r IF(ierr .ne. 0) THEN WRITE(NDSE, 8001) "REAL/FLOAT", TRIM(FN_META), ILINE, TRIM(ATTV) CALL EXTCDE(10) ENDIF - + CASE("c") ! Always ok. - + CASE DEFAULT WRITE(NDSE, 8002) TRIM(FN_META), ILINE, TRIM(BUF) CALL EXTCDE(10) - + END SELECT ! 8001 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & @@ -979,38 +1150,38 @@ ' => ', A /) ! 8002 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & - ' ATTRIBUTE TYPE SHOULD BE ONE OF [c,i,r] '/ & + ' ATTRIBUTE TYPE SHOULD BE ONE OF [c,i,r] '/ & ' FILENAME = ', A / & ' LINE NO =', I5 / & ' => ', A /) ! END SUBROUTINE GET_ATTVAL_TYPE - + !/ ------------------------------------------------------------------- / - SUBROUTINE READ_GLOBAL_META(NDMI, ILINE) + SUBROUTINE READ_FREEFORM_META_LIST(NDMI, ILINE, METALIST) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | C. Bunney | !/ | | !/ | FORTRAN 90 | -!/ | Last update : 09-Nov-2020 | +!/ | Last update : 16-Dec-2020 | !/ +-----------------------------------+ !/ -!/ 09-Nov-2020 : Creation ( version 7.12 ) +!/ 16-Dec-2020 : Creation ( version 7.12 ) !/ ! ! 1. Purpose : ! -! Reads in attribute name/value pairs for the "global" section. +! Reads in freeform attribute name/value pairs. ! ! 2. Method: ! -! Keeps looping over input lines in file until next META section +! Keeps looping over input lines in file until next section ! or EOF is found. Splits meta pairs on the = character. ! -! Global metadata pair can also provide a variable type +! Freeform metadata pairs can also provide a variable type ! ("c", "i", or "r"; for character, int or real respectively). ! String values with spaces should be quoted. ! @@ -1020,36 +1191,35 @@ ! ---------------------------------------------------------------- ! NDMI Char. I Unit number of metadata input file ! ILINE Int. I/O Current line number in file +! METALIST Type. I/O A META_LIST_T object to append to ! ---------------------------------------------------------------- ! !/ ------------------------------------------------------------------- / IMPLICIT NONE INTEGER, INTENT(IN) :: NDMI INTEGER, INTENT(INOUT) :: ILINE + TYPE(META_LIST_T), INTENT(INOUT) :: METALIST + !/ ------------------------------------------------------------------- / !/ Local parameters !/ CHARACTER(LEN=256) :: BUF - CHARACTER(LEN=128) :: ATTN, ATTV, TMP, EXTRA - CHARACTER(LEN=16) :: ATT_TYPE, TEST + CHARACTER(LEN=128) :: ATTN, ATTV, TMP + CHARACTER(LEN=16) :: ATT_TYPE INTEGER :: I, IERR REAL :: R - LOGICAL :: EOF + LOGICAL :: EOF, NEW + TYPE(META_PAIR_T) :: META ! ! Keep reading lines until we hit EOF or anoter META keyword DO - CALL NEXT_LINE(NDMI, BUF, ILINE, EOF) + CALL NEXT_LINE(NDMI, BUF, ILINE, EOF, NEW_SECTION=NEW) IF(EOF) THEN BACKSPACE(NDMI) RETURN ENDIF - ! Read first token on line: - READ(BUF, *) TEST - - CALL STR_TO_UPPER(TEST) - IF(TEST == "META") THEN - ! Start of new meta data entry + IF(NEW) THEN IF(DEBUG) WRITE(*,'(I5,1X,A20)') ILINE, '[--end of section--]' ILINE = ILINE - 1 BACKSPACE(NDMI) @@ -1062,7 +1232,7 @@ WRITE(NDSE, 9000) TRIM(FN_META), ILINE, TRIM(BUF) CALL EXTCDE(10) ENDIF - + ATTN = ADJUSTL(BUF(1:I-1)) TMP = ADJUSTL(BUF(I+1:)) @@ -1070,14 +1240,16 @@ CALL GET_ATTVAL_TYPE(TMP, ILINE, ATTV, ATT_TYPE) IF(DEBUG) THEN - WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[GLOBAL meta]', & + WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[FREEFORM meta]', & TRIM(attn)//' = '//TRIM(attv)//' (type: '//TRIM(att_type)//")" ENDIF - N_GBLMETA = N_GBLMETA + 1 - GLOBAL_META(N_GBLMETA)%ATTNAME = TRIM(ATTN) - GLOBAL_META(N_GBLMETA)%ATTVAL = TRIM(ATTV) - GLOBAL_META(N_GBLMETA)%TYPE = TRIM(ATT_TYPE) + + META%ATTNAME = TRIM(ATTN) + META%ATTVAL = TRIM(ATTV) + META%TYPE = TRIM(ATT_TYPE) + + CALL META_LIST_APPEND(METALIST, META) ENDDO ! @@ -1088,7 +1260,137 @@ ' LINE NO =', I5 / & ' => ', A /) ! - END SUBROUTINE READ_GLOBAL_META + END SUBROUTINE READ_FREEFORM_META_LIST + +!/ ------------------------------------------------------------------- / + SUBROUTINE READ_CRS_META(NDMI, ILINE) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 07-Dec-2020 | +!/ +-----------------------------------+ +!/ +!/ 07-Dec-2020 : Creation ( version 7.12 ) +!/ +! +! 1. Purpose : +! +! Reads in metadata for the coordinate reference system (CRS) +! scalar variable. The "grid_mapping_name" must be supplied as +! an attribute. +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NDMI Char. I Unit number of metadata input file +! ILINE Int. I/O Current line number in file +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + INTEGER, INTENT(IN) :: NDMI + INTEGER, INTENT(INOUT) :: ILINE +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + CHARACTER(LEN=128) :: BUF, PREV_NAME + INTEGER :: I, IERR + + PREV_NAME = CRS_NAME + + ! Re-read header line (we only want the second field) + READ(NDMI, '(A)') BUF + READ(BUF, *, IOSTAT=IERR) CRS_NAME, CRS_NAME + IF(IERR /= 0 ) THEN + WRITE(NDSE,1000) + WRITE(NDSE,2000) TRIM(FN_META), ILINE, TRIM(BUF) + CALL EXTCDE(10) + ENDIF + IF(DEBUG) WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[CRS id]', TRIM(CRS_NAME) + + IF(CRS_META%N .NE. 0) THEN + IF(CRS_IS_DEFAULT) THEN + WRITE(NDSE,1001) TRIM(PREV_NAME) + CRS_IS_DEFAULT = .FALSE. + ELSE + WRITE(NDSE,1002) TRIM(PREV_NAME) + ENDIF + WRITE(NDSE,2000) TRIM(FN_META), ILINE, TRIM(BUF) + CALL DEL_META_LIST(CRS_META) + ENDIF + + CALL READ_FREEFORM_META_LIST(NDMI, ILINE, CRS_META) + + ! Check that "grid_mapping_name" is defined + IF(.NOT. META_LIST_HAS_ATTR(CRS_META, "grid_mapping_name")) THEN + WRITE(NDSE, 1003) + WRITE(NDSE, 2000) TRIM(FN_META), ILINE, "" + CALL EXTCDE(10) + ENDIF + + RETURN + + 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' ERROR READING CRS HEADER - MISSING CRS NAME?' ) +! + 1001 FORMAT (/' *** WARNING : USER DEFINED CRS SECTION WILL ' / & + ' OVERIDE DEFAULT CRS DEFINITION FOR GRID' / & + ' PREV CRS = ', A ) +! + 1002 FORMAT (/' *** WARNING : DUPLICATE CRS SECTION WILL ' / & + ' OVERRIDE PREVIOUS CRS DEFINITION' / & + ' PREV CRS = ', A ) +! + 1003 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' CRS SECTION DOES NOT CONTAIN MANDATORY '/ & + ' ATTRIBUTE "grid_mapping_name"' ) + + 2000 FORMAT ( ' FILENAME = ', A / & + ' LINE NO = ', I5 / & + ' => ', A /) +! + + END SUBROUTINE READ_CRS_META + + SUBROUTINE DEFAULT_CRS_META() + ! Set up a default coordinate reference system for the grid + ! See "Grid Mappings" section of CF conventions: + ! https://cfconventions.org/Data/cf-conventions/cf-conventions-1.7/build/ch05s06.html + ! https://cfconventions.org/Data/cf-conventions/cf-conventions-1.7/build/apf.html + IMPLICIT NONE + + TYPE(META_PAIR_T) :: META + + IF(FLRTD) THEN +!/RTD ! Rotated pole location +!/RTD CRS_NAME = 'rotated_pole' +!/RTD CALL META_LIST_APPEND(CRS_META, & +!/RTD 'grid_mapping_name', 'rotated_latitude_longitude') +!/RTD CALL META_LIST_APPEND(CRS_META, & +!/RTD 'grid_north_pole_latitude', POLAT) +!/RTD CALL META_LIST_APPEND(CRS_META, & +!/RTD 'grid_north_pole_longitude', POLON) +!/RTD CRS_IS_DEFAULT = .TRUE. + ELSE IF(GTYPE .EQ. UNGTYPE) THEN +! ! What do we want for unstructure grids? + ELSE + ! Lat/lon grid + CRS_NAME = 'crs' + CALL META_LIST_APPEND(CRS_META, & + 'grid_mapping_name', 'latitude_longitude') + ! TODO: Default to a spherical Earth? + CALL META_LIST_APPEND(CRS_META, & + 'semi_major_axis', 6371000.0) + CALL META_LIST_APPEND(CRS_META, & + 'inverse_flattening', 0.0) + ENDIF + + END SUBROUTINE DEFAULT_CRS_META !/ ------------------------------------------------------------------- / FUNCTION GETMETA(IFI, IFJ, ICOMP, IPART) RESULT(META) @@ -1106,7 +1408,7 @@ ! ! 1. Purpose : ! -! Returns a META_T type containig the netCDF matadata for the +! Returns a META_T type containig the netCDF matadata for the ! requested field ! ! 2. Method : @@ -1135,7 +1437,7 @@ !/ INTEGER :: IFP, IFC TYPE(META_T) :: META ! Not pointer as we might need to modify it - + IFC = 1 IFP = 1 IF(PRESENT(ICOMP)) IFC = ICOMP @@ -1155,7 +1457,7 @@ CALL EXTCDE(1) ENDIF - META = GROUP(IFI)%FIELD(IFJ)%META(IFC) + META = META_DEEP_COPY(GROUP(IFI)%FIELD(IFJ)%META(IFC)) ! For partitioned data, expand in the partition number: IF(IFI .EQ. 4) THEN @@ -1169,12 +1471,181 @@ ! 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & ' GETMETA: IFJ value should be in range 1,',I2 / ) -! +! 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & ' GETMETA: IFC value should be in range 1,3' / ) -! +! END FUNCTION GETMETA +!/ ------------------------------------------------------------------- / + SUBROUTINE READ_PART_TMPL(NDMI, ILINE) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 04-Dec-2020 | +!/ +-----------------------------------+ +!/ +!/ 04-Dec-2020 : Creation ( version 7.12 ) +!/ +! +! 1. Purpose : +! +! Reads in a TEMPLATE section from file. +! This section defines a list of text strings that will be used +! to replace a "placeholder string" when generating metadata for +! partitioned parameters. +! +! Format of section is: +! +! TEMPLATE +! Value for partition IPART=0 +! Value for partition IPART=1 +! Value for partition IPART=2 +! ... +! Value for partition IPART=N +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NDMI Int. I/O Unit number +! ILINE Int. I/O Line number +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + INTEGER, INTENT(IN) :: NDMI + INTEGER, INTENT(INOUT) :: ILINE +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + CHARACTER(LEN=256) :: BUF, ID + INTEGER :: IERR + LOGICAL :: EOF, NEW + TYPE(PART_TMPL_T), POINTER :: P + + ! Re-read META line to get template string ID (the 2nd field) + READ(NDMI, '(A)') BUF + READ(BUF, *, IOSTAT=IERR) ID, ID + IF(IERR /= 0) THEN + WRITE(NDSE, 1000) FN_META, ILINE, BUF + CALL EXTCDE(10) + ENDIF + ID = "<" // TRIM(ID) // ">" + + IF(DEBUG) WRITE(*,'(I5,1X,A20,1X,A)') ILINE, '[template id]', TRIM(ID) + + ! Extend list of partition template types: + IF(ASSOCIATED(PART_TMPL)) THEN + ! Got to end of list + P => PART_TMPL + DO WHILE(ASSOCIATED(P%NEXT)) + P => P%NEXT + ENDDO + ALLOCATE(P%NEXT) + P => P%NEXT + ELSE + ALLOCATE(PART_TMPL) + P => PART_TMPL + ENDIF + + ! Set template id and read template strings from file: + P%TMPL = TRIM(ID) + ALLOCATE(P%PART_TEXT(0:NOSWLL)) + NULLIFY(P%NEXT) + P%NP = 0 + + DO + CALL NEXT_LINE(NDMI, BUF, ILINE, EOF, NEW_SECTION=NEW) + IF(EOF) THEN + BACKSPACE(NDMI) + RETURN + ENDIF + + IF(NEW) THEN + ! Start of new meta data entry + IF(DEBUG) WRITE(*,'(I5,1X,A20)') ILINE, '[--end of section--]' + ILINE = ILINE - 1 + BACKSPACE(NDMI) + EXIT + ENDIF + + ! Check we have not exceeded NOSWLL + IF(P%NP .GT. NOSWLL) THEN + WRITE(*,*) "Too many partition entries (NOSWLL=",NOSWLL,"). Ignoring" + CYCLE + ENDIF + + ! Add string to array of partition text + IF(DEBUG) THEN + WRITE(*,'(I5,1X,A20,1X,I1,1X,A)') ILINE, '[part template]', & + P%NP, TRIM(BUF) + ENDIF + + P%PART_TEXT(P%NP) = TRIM(ADJUSTL(BUF)) ! Zero indexed + P%NP = P%NP + 1 + ENDDO + + RETURN +! + 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : '/ & + ' ERROR READING PART HEADER - MISSING TEMPLATE ID?'/ & + ' FILENAME = ', A / & + ' LINE NO =', I5 / & + ' => ', A /) +! + END SUBROUTINE READ_PART_TMPL + + +!/ ------------------------------------------------------------------- / + SUBROUTINE PRINT_PART_TMPL() +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 04-Dec-2020 | +!/ +-----------------------------------+ +!/ +!/ 04-Dec-2020 : Creation ( version 7.12 ) +!/ +! +! 1. Purpose : +! +! Prints the patition templates to screen (for debug use). +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(PART_TMPL_T), POINTER :: P + INTEGER :: I + + PRINT*,'==============' + IF(.NOT. ASSOCIATED(PART_TMPL)) THEN + PRINT*,'Empty partition list' + RETURN + ENDIF + + P => PART_TMPL + DO + PRINT*,P%TMPL + DO I=0,P%NP - 1 + PRINT*,' - ',I,TRIM(P%PART_TEXT(I)) + ENDDO + IF(.NOT. ASSOCIATED(P%NEXT)) EXIT + P => P%NEXT + ENDDO + PRINT*,'==============' + END SUBROUTINE PRINT_PART_TMPL + + !/ ------------------------------------------------------------------- / SUBROUTINE ADD_PARTNO(META, IPART) !/ @@ -1208,6 +1679,7 @@ ! !/ ------------------------------------------------------------------- / IMPLICIT NONE + TYPE(META_T), INTENT(INOUT) :: META INTEGER, INTENT(IN) :: IPART !/ @@ -1216,6 +1688,7 @@ !/ CHARACTER(LEN=80) :: TMP INTEGER :: I, J + TYPE(META_PAIR_T), POINTER :: P CALL PARTNO_STRING_SUB(META%ENAME, IPART) CALL PARTNO_STRING_SUB(META%VARNM, IPART) @@ -1224,8 +1697,17 @@ CALL PARTNO_STRING_SUB(META%VARNG, IPART) CALL PARTNO_STRING_SUB(META%VARNC, IPART) CALL PARTNO_STRING_SUB(META%VARND, IPART) - CALL PARTNO_STRING_SUB(META%EXTRA%ATTNAME, IPART) - CALL PARTNO_STRING_SUB(META%EXTRA%ATTVAL, IPART) + IF(META%EXTRA%N .GT. 0) THEN + P => META%EXTRA%HEAD + DO + CALL PARTNO_STRING_SUB(P%ATTNAME, IPART) + IF(P%TYPE .EQ. "c") THEN + CALL PARTNO_STRING_SUB(P%ATTVAL, IPART) + ENDIF + IF(.NOT. ASSOCIATED(P%NEXT)) EXIT + P => P%NEXT + ENDDO + ENDIF END SUBROUTINE ADD_PARTNO @@ -1245,8 +1727,14 @@ ! ! 1. Purpose : ! -! Replaces occurancs of "" in a string with the value provided -! in IPART. +! Performs string substition of placeholder strings with partition +! number specfic values. +! +! The placeholder is automatically replaced with the +! partition number (0, 1, 2, etc). +! +! Other template placeholders can be defined in the ounfmeta.inp +! file by the user. ! ! 2. Parameters : ! @@ -1265,14 +1753,81 @@ !/ ------------------------------------------------------------------- / !/ Local parameters !/ - INTEGER :: I, J + INTEGER :: I, J, ISN + TYPE(PART_TMPL_T), POINTER :: P + CHARACTER(LEN=64) :: TMPL - I = INDEX(INSTR, "") - J = I + LEN_TRIM("") + ISN = IPART + 1 + IF(PTMETH .LE. 3) THEN + IF (ISN .GT. 5) ISN = 5 + ELSE + IF (ISN .GT. 2) ISN = 2 + ENDIF + + ! Set partition number (built-in IPART template) + I = INDEX(INSTR, IPART_TOKEN) + J = I + LEN_TRIM(IPART_TOKEN) IF(I .GT. 0) THEN WRITE(INSTR,'(A,I1,A)') INSTR(1:I-1), IPART, INSTR(J:LEN(INSTR)) ENDIF + ! Set standard name string (built-in SPART template) + I = INDEX(INSTR, SPART_TOKEN) + J = I + LEN_TRIM(SPART_TOKEN) + + IF(I .GT. 0) THEN + INSTR = INSTR(1:I-1) // TRIM(SNAMEP(ISN)) // INSTR(J:LEN(INSTR)) + ENDIF + + ! Also try underscore separated version: + I = INDEX(INSTR, SPART_TOKEN_) + J = I + LEN_TRIM(SPART_TOKEN_) + + IF(I .GT. 0) THEN + INSTR = INSTR(1:I-1) // TRIM(REPLACE_CHAR(SNAMEP(ISN), " ", "_")) & + // INSTR(J:LEN(INSTR)) + ENDIF + + ! Merge in user defined partition templates (if any): + IF(.NOT. ASSOCIATED(PART_TMPL)) RETURN + + P => PART_TMPL + DO + I = INDEX(INSTR, TRIM(P%TMPL)) + J = I + LEN_TRIM(P%TMPL) + + IF(I .GT. 0) THEN + IF(IPART .GE. P%NP) THEN + WRITE(NDSE, 1000) TRIM(P%TMPL), P%NP, IPART + CALL EXTCDE(10) + ENDIF + INSTR = INSTR(1:I-1) // TRIM(P%PART_TEXT(IPART)) // INSTR(J:LEN(INSTR)) + ENDIF + + ! Try "underscore" version : + I = LEN_TRIM(P%TMPL) + TMPL = P%TMPL(1:I-1) // "_>" + I = INDEX(INSTR, TRIM(TMPL)) + J = I + LEN_TRIM(TMPL) + IF(I .GT. 0) THEN + INSTR = INSTR(1:I-1) // TRIM(REPLACE_CHAR(P%PART_TEXT(IPART), " ", "_")) & + // INSTR(J:LEN(INSTR)) + ENDIF + + IF(.NOT. ASSOCIATED(P%NEXT)) EXIT + P => P%NEXT + ENDDO + + RETURN + + 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & + ' NOT ENOUGH USER DEFINED ENTRIES FOR TEMPLATE' / & + ' TEMPLATE ID : ',A / & + ' NUM ENTRIES : ',I2 / & + ' REQESTED IPART* : ',I2 / & + ' (*Note: IPART is zero-refernced)' / & + ' Please update your ounfmeta.inp file.' /) + END SUBROUTINE PARTNO_STRING_SUB !/ ------------------------------------------------------------------- / @@ -1318,32 +1873,34 @@ !/ ERR = NF90_PUT_ATT(NCID, VARID, 'long_name', META%VARNL) IF(ERR /= NF90_NOERR) RETURN - - ERR = NF90_PUT_ATT(NCID, VARID, 'standard_name', META%VARNS) - IF(ERR /= NF90_NOERR) RETURN - + + IF(META%VARNS .NE. '' .AND. META%VARNS .NE. UNSETC) THEN + ERR = NF90_PUT_ATT(NCID, VARID, 'standard_name', META%VARNS) + IF(ERR /= NF90_NOERR) RETURN + ENDIF + IF(META%VARNG .NE. '' .AND. META%VARNG .NE. UNSETC) THEN ERR = NF90_PUT_ATT(NCID, VARID, 'globwave_name', META%VARNG) IF(ERR /= NF90_NOERR) RETURN ENDIF - + ERR = NF90_PUT_ATT(NCID, VARID, 'units', META%UNITS) IF(ERR /= NF90_NOERR) RETURN ! Fill value dependent on variable type - IF(NCVARTYPE .EQ. 2) THEN + IF(NCVARTYPE .EQ. 2) THEN ERR = NF90_PUT_ATT(NCID, VARID, '_FillValue', NF90_FILL_SHORT) - ELSE + ELSE ERR = NF90_PUT_ATT(NCID, VARID, '_FillValue', NF90_FILL_FLOAT) END IF IF(ERR /= NF90_NOERR) RETURN ERR = NF90_PUT_ATT(NCID, VARID, 'scale_factor', META%FSC) IF(ERR /= NF90_NOERR) RETURN - + ERR = NF90_PUT_ATT(NCID, VARID, 'add_offset', 0.) IF(ERR /= NF90_NOERR) RETURN - + ! For variables with vartype SHORT, the valid min/max ! are scaled by scale_factor and converted to integers. ! If vartype is FLOAT, then no scaling is performed and @@ -1359,45 +1916,29 @@ ELSE ERR = NF90_PUT_ATT(NCID, VARID,'valid_min', META%VMIN) IF(ERR /= NF90_NOERR) RETURN - + ERR = NF90_PUT_ATT(NCID, VARID,'valid_max', META%VMAX) IF(ERR /= NF90_NOERR) RETURN ENDIF - + IF(META%VARNC .NE. '' .AND. META%VARNC .NE. UNSETC) THEN ERR = NF90_PUT_ATT(NCID, VARID, 'comment', META%VARNC) IF(ERR /= NF90_NOERR) RETURN ENDIF - - IF (META%VARND .NE. '' .AND. META%VARND .NE. UNSETC) THEN + + IF(META%VARND .NE. '' .AND. META%VARND .NE. UNSETC) THEN ERR = NF90_PUT_ATT(NCID, VARID, 'direction_reference', META%VARND) IF(ERR /= NF90_NOERR) RETURN END IF - - IF (META%EXTRA%ATTNAME .NE. '' .AND. & - META%EXTRA%ATTNAME .NE. UNSETC) THEN - SELECT CASE(META%EXTRA%TYPE) - - CASE('i') - READ(META%EXTRA%ATTVAL, *) IVAL - ERR = NF90_PUT_ATT(NCID, VARID, META%EXTRA%ATTNAME, IVAL) - IF(ERR /= NF90_NOERR) RETURN - - CASE('r', 'f') - READ(META%EXTRA%ATTVAL, *) RVAL - ERR = NF90_PUT_ATT(NCID, VARID, META%EXTRA%ATTNAME, RVAL) - IF(ERR /= NF90_NOERR) RETURN - - CASE('c') - ERR = NF90_PUT_ATT(NCID, VARID, META%EXTRA%ATTNAME, & - META%EXTRA%ATTVAL) - IF(ERR /= NF90_NOERR) RETURN - - CASE DEFAULT - WRITE(1000,*) META%EXTRA%TYPE - CALL EXTCDE(10) - END SELECT + IF(CRS_NAME .NE. '' .AND. CRS_NAME .NE. UNSETC) THEN + ERR = NF90_PUT_ATT(NCID, VARID, 'grid_mapping', CRS_NAME) + IF(ERR /= NF90_NOERR) RETURN + ENDIF + + IF (META%EXTRA%N .GT. 0) THEN + CALL WRITE_FREEFORM_META_LIST(NCID, VARID, META%EXTRA, ERR) + IF(ERR /= NF90_NOERR) RETURN ENDIF RETURN @@ -1442,44 +1983,94 @@ !/ ------------------------------------------------------------------- / !/ Local parameters !/ - INTEGER :: VARID = NF90_GLOBAL + CALL WRITE_FREEFORM_META_LIST(NCID, NF90_GLOBAL, GLOBAL_META, ERR) + END SUBROUTINE WRITE_GLOBAL_META + + +!/ ------------------------------------------------------------------- / + SUBROUTINE WRITE_FREEFORM_META_LIST(NCID, VARID, METALIST, ERR) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 16-Dec-2020 | +!/ +-----------------------------------+ +!/ +!/ 16-Dec-2020 : Creation ( version 7.12 ) +!/ +! +! 1. Purpose : +! +! Writes the freeform user meta-data entries for a NetCDF variable +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NCID Int. I/O NetCDF file ID +! VARID Int. I/O NetCDF file ID +! METALIST Type. I META_LIST_T object to write +! ERR Int. O Error value +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NCID, VARID + TYPE(META_LIST_T), INTENT(IN) :: METALIST + INTEGER, INTENT(OUT) :: ERR +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ INTEGER :: I, IVAL REAL :: RVAL + TYPE(META_PAIR_T), POINTER :: P + + IF(METALIST%N .EQ. 0) RETURN + + P => METALIST%HEAD ! Loop over global metadata pairs: - DO I=1,N_GBLMETA + DO - IF (GLOBAL_META(I)%ATTNAME .EQ. '' .OR. & - GLOBAL_META(I)%ATTNAME .EQ. UNSETC) CYCLE + IF (P%ATTNAME .EQ. '' .OR. & + P%ATTNAME .EQ. UNSETC) CYCLE - SELECT CASE(GLOBAL_META(I)%TYPE) + SELECT CASE(P%TYPE) CASE('i') - READ(GLOBAL_META(I)%ATTVAL, *) IVAL - ERR = NF90_PUT_ATT(NCID, VARID, GLOBAL_META(I)%ATTNAME, IVAL) + READ(P%ATTVAL, *) IVAL + ERR = NF90_PUT_ATT(NCID, VARID, P%ATTNAME, IVAL) IF(ERR /= NF90_NOERR) RETURN CASE('r', 'f') - READ(GLOBAL_META(I)%ATTVAL, *) RVAL - ERR = NF90_PUT_ATT(NCID, VARID, GLOBAL_META(I)%ATTNAME, RVAL) + READ(P%ATTVAL, *) RVAL + ERR = NF90_PUT_ATT(NCID, VARID, P%ATTNAME, RVAL) IF(ERR /= NF90_NOERR) RETURN CASE('c') - ERR = NF90_PUT_ATT(NCID, VARID, GLOBAL_META(I)%ATTNAME, & - GLOBAL_META(I)%ATTVAL) + ERR = NF90_PUT_ATT(NCID, VARID, P%ATTNAME, & + P%ATTVAL) IF(ERR /= NF90_NOERR) RETURN CASE DEFAULT - WRITE(1000,*) GLOBAL_META(I)%TYPE + WRITE(1000,*) P%TYPE CALL EXTCDE(10) END SELECT + + IF(.NOT. ASSOCIATED(P%NEXT)) EXIT + P => P%NEXT ENDDO ! 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNFMETA : ' / & - ' WRITEMETA: Unknown meta data type: ', A1 / ) + ' WRITE_FREEFORM_META: Unknown attribute' / & + ' data type: ', A1 / ) ! - END SUBROUTINE WRITE_GLOBAL_META - + END SUBROUTINE WRITE_FREEFORM_META_LIST + !/ ------------------------------------------------------------------- / SUBROUTINE PRINT_META(META) !/ @@ -1508,6 +2099,10 @@ !/ ------------------------------------------------------------------- / IMPLICIT NONE TYPE(META_T), INTENT(IN) :: META +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(META_PAIR_T), POINTER :: P WRITE(*,*) META%VARNM WRITE(*,"(A20,':',1X,A)") "Standard name", TRIM(META%VARNS) @@ -1517,12 +2112,56 @@ WRITE(*,"(A20,':',1X,A)") "Direction conv", TRIM(META%VARND) WRITE(*,"(A20,':',1X,A)") "Comment", TRIM(META%VARNC) WRITE(*,"(A20,':',1X,2F12.3)") "Min/Max", META%VMIN, META%VMAX - WRITE(*,"(A20,':')") "Extra metadata" - WRITE(*,"(2X,A20,':',1X,'[',A1,']')") "Type", META%EXTRA%TYPE - WRITE(*,"(2X,A20,':',1X,A)") TRIM(META%EXTRA%ATTNAME), TRIM(META%EXTRA%ATTNAME) + IF(META%EXTRA%N .GT. 0) THEN + P => META%EXTRA%HEAD + DO + WRITE(*,"(A20,':',1X,A)") TRIM(P%ATTNAME), TRIM(P%ATTVAL) + IF(.NOT. ASSOCIATED(P%NEXT)) EXIT + P => P%NEXT + ENDDO + ENDIF END SUBROUTINE PRINT_META +!/ ------------------------------------------------------------------- / + FUNCTION META_DEEP_COPY(META) RESULT(COPY) +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | | +!/ | FORTRAN 90 | +!/ | Last update : 16-Dec-2020 | +!/ +-----------------------------------+ +!/ +!/ 16-Dec-2020 : Creation ( version 7.12 ) +!/ +! +! 1. Purpose : +! +! Performs "Deep" copy of a META_T type. This ensures that the +! linked list data in the EXTRA field is copied, rather than just +! copying the pointer. +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! META META_T. I META data structure to copy +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + IMPLICIT NONE + TYPE(META_T), INTENT(IN) :: META + TYPE(META_T) :: COPY + + ! Shallow copy first: + COPY = META + + ! Now deep copy the EXTRA field (is pionter) + COPY%EXTRA = COPY_META_LIST(META%EXTRA) + + END FUNCTION META_DEEP_COPY + !/ ------------------------------------------------------------------- / SUBROUTINE DEFAULT_META() !/ @@ -1558,7 +2197,7 @@ ! !----------GROUP 1 ---------------- ! -! IFI=1, IFJ=1 +! IFI=1, IFJ=1, DPT META => GROUP(1)%FIELD(1)%META META(1)%FSC = 0.5 META(1)%UNITS = 'm' @@ -1569,11 +2208,12 @@ META(1)%VARNG ='depth' META(1)%VARNC ='' META(1)%VARND ='' - META(1)%VMIN = -45000 + META(1)%VMIN = -45000 META(1)%VMAX = 70000 -! IFI=1, IFJ=2 +! IFI=1, IFJ=2, CUR META => GROUP(1)%FIELD(2)%META META(1)%ENAME = '.cur' + META(1)%VARND = DIRCOM IF(VECTOR) THEN META(1)%FSC = 0.01 META(1)%UNITS = 'm s-1' @@ -1584,8 +2224,7 @@ META(1)%VARNS='eastward_sea_water_velocity' META(1)%VARNG='eastward_sea_water_velocity' META(1)%VARNC='cur=sqrt(U**2+V**2)' - META(1)%VARND = DIRCOM - + ! Second component META(2) = META(1) META(2)%VARNM='vcur' @@ -1617,6 +2256,7 @@ ! IFI=1, IFJ=3 META => GROUP(1)%FIELD(3)%META META(1)%ENAME = '.wnd' + META(1)%VARND = DIRCOM IF(VECTOR) THEN META(1)%FSC = 0.1 META(1)%UNITS = 'm s-1' @@ -1627,8 +2267,7 @@ META(1)%VARNC='wind=sqrt(U10**2+V10**2)' META(1)%VMIN = -99.0 META(1)%VMAX = 99.0 - META(1)%VARND = DIRCOM - + ! Second component META(2) = META(1) META(2)%VARNM='vwnd' @@ -1657,29 +2296,30 @@ META(2)%VMIN = 0.0 META(2)%VMAX = 360.0 ENDIF ! VECTOR -! IFI=1, IFJ=4 +! IFI=1, IFJ=4, AST META => GROUP(1)%FIELD(4)%META META(1)%FSC = 0.1 META(1)%ENAME = '.ast' META(1)%UNITS = 'K' META(1)%VARNM='ast' META(1)%VARNL='air sea temperature difference' - META(1)%VARNS='air_sea_temperature_difference' + !META(1)%VARNS='air_sea_temperature_difference' + META(1)%VARNS='' META(1)%VARNG='air_sea_temperature_difference' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 400 -! IFI=1, IFJ=5 +! IFI=1, IFJ=5, WLV META => GROUP(1)%FIELD(5)%META META(1)%FSC = 0.01 META(1)%UNITS = 'm' META(1)%ENAME = '.wlv' META(1)%VARNM='wlv' META(1)%VARNL='sea surface height above sea level' - META(1)%VARNS='sea_surface_height_above_sea_level' + META(1)%VARNS='sea_surface_height_above_mean_sea_level' META(1)%VARNG='sea_surface_height_above_sea_level' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 100 -! IFI=1, IFJ=6 +! IFI=1, IFJ=6, ICE META => GROUP(1)%FIELD(6)%META META(1)%FSC = 0.001 META(1)%UNITS = '1' @@ -1690,18 +2330,19 @@ META(1)%VARNG='sea_ice_area_fraction' META(1)%VMIN = 0 META(1)%VMAX = 1 -! IFI=1, IFJ=7 +! IFI=1, IFJ=7, IBG META => GROUP(1)%FIELD(7)%META META(1)%FSC = 0.0001 META(1)%UNITS = 'km-1' META(1)%ENAME = '.ibg' META(1)%VARNM='ibg' META(1)%VARNL='icebergs_damping' - META(1)%VARNS='icebergs_induced_attenuation_scale_for_waves' + !META(1)%VARNS='icebergs_induced_attenuation_scale_for_waves' + META(1)%VARNS='' META(1)%VARNG='icebergs_damping' META(1)%VMIN = 0 META(1)%VMAX = 3.2 -! IFI=1, IFJ=8 +! IFI=1, IFJ=8, TAUA META => GROUP(1)%FIELD(8)%META META(1)%FSC = 0.01 META(1)%UNITS = 'Pa' @@ -1722,7 +2363,7 @@ META(2)%VARNS='surface_downward_northward_stress' META(2)%VARNG='surface_downward_northward_stress' META(2)%VARNC='taua=sqrt(utaua**2+vtaua**2)' -! IFI=1, IFJ=9 +! IFI=1, IFJ=9, RHO META => GROUP(1)%FIELD(9)%META META(1)%FSC = 0.0001 META(1)%UNITS = 'kg m-3' @@ -1733,65 +2374,68 @@ META(1)%VARNG='air_density' META(1)%VMIN = 0 META(1)%VMAX = 2 -! IFI=1, IFJ=10 +! IFI=1, IFJ=10, D50 !/BT4 META => GROUP(1)%FIELD(10)%META !/BT4 META(1)%FSC = 0.001 !/BT4 META(1)%UNITS = 'Krumbein phi scale' !/BT4 META(1)%ENAME = '.d50' !/BT4 META(1)%VARNM='d50' !/BT4 META(1)%VARNL='grain_size' -!/BT4 META(1)%VARNS='sediment_grain_size' +!/BT4 !META(1)%VARNS='sediment_grain_size' +!/BT4 META(1)%VARNS='' !/BT4 META(1)%VARNG='sediment_grain_size' !/BT4 META(1)%VMIN = -10.0 !/BT4 META(1)%VMAX = 32.0 -! IFI=1, IFJ=11 +! IFI=1, IFJ=11, IC1 !/IS2 META => GROUP(1)%FIELD(11)%META !/IS2 META(1)%FSC = 0.001 !/IS2 META(1)%UNITS = 'm' !/IS2 META(1)%ENAME = '.ic1' !/IS2 META(1)%VARNM='ic1' !/IS2 META(1)%VARNL='ice thickness' -!/IS2 META(1)%VARNS='ice_thickness' +!/IS2 META(1)%VARNS='sea_ice_thickness' !/IS2 META(1)%VARNG='ice_thickness' !/IS2 META(1)%VMIN = 0 !/IS2 META(1)%VMAX = 30 -! IFI=1, IFJ=12 +! IFI=1, IFJ=12, IC5 !/IS2 META => GROUP(1)%FIELD(12)%META !/IS2 META(1)%FSC = 0.05 !/IS2 META(1)%UNITS = 'm' !/IS2 META(1)%ENAME = '.ic5' !/IS2 META(1)%VARNM='ic5' !/IS2 META(1)%VARNL='maximum floe diameter' -!/IS2 META(1)%VARNS='maximum_ice_floe_diameter' +!/IS2 !META(1)%VARNS='maximum_ice_floe_diameter' +!/IS2 META(1)%VARNS='' !/IS2 META(1)%VARNG='maximum_ice_floe_diameter' !/IS2 META(1)%VMIN = 0 !/IS2 META(1)%VMAX = 1500 ! !----------GROUP 2 ---------------- ! -! IFI=2, IFJ=1 +! IFI=2, IFJ=1, HS META => GROUP(2)%FIELD(1)%META META(1)%FSC = 0.002 META(1)%UNITS = 'm' META(1)%ENAME = '.hs' META(1)%VARNM='hs' META(1)%VARNL='significant height of wind and swell waves' - META(1)%VARNS='sea_surface_wave_significant_height' + META(1)%VARNS='sea_surface_wave_significant_height' META(1)%VARNG='significant_wave_height' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 64 -! IFI=2, IFJ=2 +! IFI=2, IFJ=2, LM META => GROUP(2)%FIELD(2)%META META(1)%FSC = 1. META(1)%UNITS = 'm' META(1)%ENAME = '.lm' META(1)%VARNM='lm' META(1)%VARNL='mean wave length' - META(1)%VARNS='mean_wave_length' - META(1)%VARNG='mean_wave_length' - META(1)%VMIN = 0 + !META(1)%VARNS='mean_wave_length' + META(1)%VARNS='' + META(1)%VARNG='mean_wave_length' + META(1)%VMIN = 0 META(1)%VMAX = 3200 -! IFI=2, IFJ=3 +! IFI=2, IFJ=3, T02 META => GROUP(2)%FIELD(3)%META META(1)%FSC = 0.01 META(1)%UNITS = 's' @@ -1803,7 +2447,7 @@ META(1)%VARNG='mean_period_t02' META(1)%VMIN = 0 META(1)%VMAX = 50 -! IFI=2, IFJ=4 +! IFI=2, IFJ=4, T0M1 META => GROUP(2)%FIELD(4)%META META(1)%FSC = 0.01 META(1)%UNITS = 's' @@ -1813,9 +2457,9 @@ META(1)%VARNS='sea_surface_wind_wave_mean_period_from_variance' // & '_spectral_density_inverse_frequency_moment' META(1)%VARNG='mean_period_t0m1' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 50 -! IFI=2, IFJ=5 +! IFI=2, IFJ=5, T01 META => GROUP(2)%FIELD(5)%META META(1)%FSC = 0.01 META(1)%UNITS = 's' @@ -1823,22 +2467,23 @@ META(1)%VARNM='t01' META(1)%VARNL='mean period T01' META(1)%VARNS='sea_surface_wind_wave_mean_period_from_variance' // & - '_spectral_density_first_frequency_moment' + '_spectral_density_first_frequency_moment' META(1)%VARNG='mean_period_t01' META(1)%VMIN = 0 META(1)%VMAX = 50 -! IFI=2, IFJ=6 +! IFI=2, IFJ=6, FP META => GROUP(2)%FIELD(6)%META META(1)%FSC = 0.001 META(1)%UNITS = 's-1' META(1)%ENAME = '.fp' META(1)%VARNM='fp' META(1)%VARNL='wave peak frequency' - META(1)%VARNS='sea_surface_wave_peak_frequency' + !META(1)%VARNS='sea_surface_wave_peak_frequency' + META(1)%VARNS='' META(1)%VARNG='dominant_wave_frequency' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 10 -! IFI=2, IFJ=7 +! IFI=2, IFJ=7, DIR META => GROUP(2)%FIELD(7)%META META(1)%FSC = 0.1 META(1)%UNITS = 'degree' @@ -1850,7 +2495,7 @@ META(1)%VARND=DIRCOM META(1)%VMIN = 0 META(1)%VMAX = 360 -! IFI=2, IFJ=8 +! IFI=2, IFJ=8, SPR META => GROUP(2)%FIELD(8)%META META(1)%FSC = 0.1 META(1)%UNITS = 'degree' @@ -1861,7 +2506,7 @@ META(1)%VARNG='directional_spread' META(1)%VMIN = 0 META(1)%VMAX = 90 -! IFI=2, IFJ=9 +! IFI=2, IFJ=9, DP META => GROUP(2)%FIELD(9)%META META(1)%FSC = 1. META(1)%UNITS = 'degree' @@ -1871,93 +2516,101 @@ META(1)%VARNS='sea_surface_wave_peak_direction' META(1)%VARNG='dominant_wave_direction' META(1)%VARND=DIRCOM - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 360 -! IFI=2, IFJ=10 +! IFI=2, IFJ=10, HIG META => GROUP(2)%FIELD(10)%META META(1)%FSC = 0.0002 META(1)%UNITS = 'm' META(1)%ENAME = '.hig' META(1)%VARNM='hig' META(1)%VARNL='infragravity_wave_height' - META(1)%VARNS='sea_surface_wave_infragravity_significant_height' - META(1)%VARNG='infragravity_significant_wave_height' - META(1)%VMIN = 0 + !META(1)%VARNS='sea_surface_wave_infragravity_significant_height' + META(1)%VARNS='' + META(1)%VARNG='infragravity_significant_wave_height' + META(1)%VMIN = 0 META(1)%VMAX = 1.0 -! IFI=2, IFJ=11 +! IFI=2, IFJ=11, MXE META => GROUP(2)%FIELD(11)%META META(1)%FSC = 0.002 META(1)%UNITS = 'm' META(1)%ENAME = '.mxe' META(1)%VARNM='stmaxe' META(1)%VARNL='expected maximum sea surface elevation (nonlinear,2nd order)' - META(1)%VARNS='expected maximum sea surface elevation (nonlinear,2nd order)' + !META(1)%VARNS='expected maximum sea surface elevation (nonlinear,2nd order)' + META(1)%VARNS='' META(1)%VARNG='expected maximum sea surface elevation (nonlinear,2nd order)' META(1)%VMIN = 0 META(1)%VMAX = 64 -! IFI=2, IFJ=12 +! IFI=2, IFJ=12, MXES META => GROUP(2)%FIELD(12)%META META(1)%FSC = 0.002 META(1)%UNITS = 'm' META(1)%ENAME = '.mxes' META(1)%VARNM='stmaxd' META(1)%VARNL='standard deviation of maximum sea surface elevation (nonlinear,2nd order)' - META(1)%VARNS='std of expected maximum sea surface elevation (nonlinear,2nd order)' + !META(1)%VARNS='std of expected maximum sea surface elevation (nonlinear,2nd order)' + META(1)%VARNS='' META(1)%VARNG='standard deviation of maximum sea surface elevation (nonlinear,2nd order)' META(1)%VMIN = 0 META(1)%VMAX = 64 -! IFI=2, IFJ=13 +! IFI=2, IFJ=13, MXH META => GROUP(2)%FIELD(13)%META META(1)%FSC = 0.002 META(1)%UNITS = 'm' META(1)%ENAME = '.mxh' META(1)%VARNM='hmaxe' META(1)%VARNL='expected maximum wave height (linear, 1st order)' - META(1)%VARNS='expected maximum wave height (linear, 1st order)' + !META(1)%VARNS='expected maximum wave height (linear, 1st order)' + META(1)%VARNS='' META(1)%VARNG='expected maximum wave height (linear, 1st order)' META(1)%VMIN = 0 META(1)%VMAX = 64 -! IFI=2, IFJ=14 +! IFI=2, IFJ=14, MXHC META => GROUP(2)%FIELD(14)%META META(1)%FSC = 0.002 META(1)%UNITS = 'm' META(1)%ENAME = '.mxhc' META(1)%VARNM='hcmaxe' META(1)%VARNL='expected maximum wave height from crest (linear, 1st order)' - META(1)%VARNS='expected maximum wave height from crest (linear, 1st order)' + !META(1)%VARNS='expected maximum wave height from crest (linear, 1st order)' + META(1)%VARNS='' META(1)%VARNG='expected maximum wave height from crest (linear, 1st order)' META(1)%VMIN = 0 META(1)%VMAX = 64 -! IFI=2, IFJ=15 +! IFI=2, IFJ=15, SDMH META => GROUP(2)%FIELD(15)%META META(1)%FSC = 0.002 META(1)%UNITS = 'm' META(1)%ENAME = '.sdmh' META(1)%VARNM='hmaxd' META(1)%VARNL='STD of maximum wave height (linear, 1st order)' - META(1)%VARNS='STD of maximum wave height (linear, 1st order)' + !META(1)%VARNS='STD of maximum wave height (linear, 1st order)' + META(1)%VARNS='' META(1)%VARNG='STD of maximum wave height (linear, 1st order)' META(1)%VMIN = 0 META(1)%VMAX = 64 -! IFI=2, IFJ=16 +! IFI=2, IFJ=16, SDMHC META => GROUP(2)%FIELD(16)%META META(1)%FSC = 0.002 META(1)%UNITS = 'm' META(1)%ENAME = '.sdmhc' META(1)%VARNM='hcmaxd' META(1)%VARNL='STD of maximum wave height from crest (linear, 1st order)' - META(1)%VARNS='STD of maximum wave height from crest (linear, 1st order)' + !META(1)%VARNS='STD of maximum wave height from crest (linear, 1st order)' + META(1)%VARNS='' META(1)%VARNG='STD of maximum wave height from crest (linear, 1st order)' META(1)%VMIN = 0 META(1)%VMAX = 64 -! IFI=2, IFJ=17 +! IFI=2, IFJ=17, WBT META => GROUP(2)%FIELD(17)%META META(1)%FSC = 0.001 META(1)%UNITS = '1' META(1)%ENAME = '.wbt' META(1)%VARNM='wbt' META(1)%VARNL='dominant wave breaking probability' - META(1)%VARNS='dominant_wave_breaking_probability' + !META(1)%VARNS='dominant_wave_breaking_probability' + META(1)%VARNS='' META(1)%VARNG='dominant_wave_breaking_probability' META(1)%VMIN = 0 META(1)%VMAX = 1 @@ -1986,72 +2639,79 @@ ! !---------- GROUP 3 ---------------- ! -! IFI=3, IFJ=1 +! IFI=3, IFJ=1, EF META => GROUP(3)%FIELD(1)%META META(1)%VARNM='ef' META(1)%VARNL='wave_elevation_spectrum' - IF (NCVARTYPE.LE.3) THEN + META(1)%VARNS='sea_surface_wave_variance_spectral_density' + IF (NCVARTYPE.LE.3) THEN META(1)%UNITS = 'log10(m2 s+1E-12)' - META(1)%VARNS='base_ten_logarithm_of_power_spectral_density_of_surface_elevation' - META(1)%FSC = 0.0004 + !META(1)%VARNS='base_ten_logarithm_of_power_spectral_density_of_surface_elevation' + META(1)%VARNC='base_ten_logarithm' + META(1)%FSC = 0.0004 + META(1)%VMIN = -12. + META(1)%VMAX = 12. ELSE META(1)%UNITS = 'm2 s' - META(1)%VARNS='power_spectral_density_of_surface_elevation' - META(1)%FSC = 1. + META(1)%FSC = 1. + META(1)%VMIN = 0. + META(1)%VMAX = 1.e12 END IF META(1)%ENAME = '.ef' META(1)%VARNG = META(1)%VARNS - META(1)%VMIN = -12 - META(1)%VMAX = -12.8 -! IFI=3, IFJ=2 +! IFI=3, IFJ=2, TH1M META => GROUP(3)%FIELD(2)%META ! Information for spectral META(1)%FSC = 0.1 META(1)%VARNM='th1m' META(1)%VARNL='mean wave direction frequency spectrum' - META(1)%VARNS='sea_surface_wave_from_direction_frequency_spectrum' + !META(1)%VARNS='sea_surface_wave_from_direction_frequency_spectrum' + META(1)%VARNS='' META(1)%VARNG = META(1)%VARNS META(1)%VARND=DIRCOM META(1)%UNITS = 'degree' META(1)%ENAME = '.th1m' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 360 -! IFI=3, IFJ=3 +! IFI=3, IFJ=3, STH1M META => GROUP(3)%FIELD(3)%META ! Information for spectral META(1)%FSC = 0.01 META(1)%VARNM='sth1m' META(1)%VARNL='spreading frequency spectrum' - META(1)%VARNS='sea_surface_wave_spreading_spectrum' + !META(1)%VARNS='sea_surface_wave_spreading_spectrum' + META(1)%VARNS='' META(1)%VARNG = META(1)%VARNS META(1)%UNITS = 'degree' META(1)%ENAME = '.sth1m' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 90 -! IFI=3, IFJ=4 +! IFI=3, IFJ=4, TH2M META => GROUP(3)%FIELD(4)%META META(1)%FSC = 0.1 META(1)%VARNM='th2m' META(1)%VARNL='second mean wave direction frequency spectrum' - META(1)%VARNS='sea_surface_wave_from_direction_frequency_spectrum_from_second_moments' + !META(1)%VARNS='sea_surface_wave_from_direction_frequency_spectrum_from_second_moments' + META(1)%VARNS='' META(1)%VARNG = META(1)%VARNS META(1)%VARND=DIRCOM META(1)%UNITS = 'degree' META(1)%ENAME = '.th2m' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 360 -! IFI=3, IFJ=5 +! IFI=3, IFJ=5, STH2M META => GROUP(3)%FIELD(5)%META META(1)%FSC = 0.01 META(1)%VARNM='sth2m' META(1)%VARNL='second spreading frequency spectrum' - META(1)%VARNS='sea_surface_wave_spreading_spectrum_from_second_moments' + !META(1)%VARNS='sea_surface_wave_spreading_spectrum_from_second_moments' + META(1)%VARNS='' META(1)%VARNG = META(1)%VARNS META(1)%UNITS = 'degree' META(1)%ENAME = '.sth2m' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 90 -! IFI=3, IFJ=6 +! IFI=3, IFJ=6, WN META => GROUP(3)%FIELD(6)%META ! Information for spectral META(1)%FSC = 0.001 @@ -2059,226 +2719,240 @@ META(1)%ENAME = '.wn' META(1)%VARNM='wn' META(1)%VARNL='wave numbers' - META(1)%VARNS='wave_numbers' + !META(1)%VARNS='wave_numbers' + META(1)%VARNS='' META(1)%VARNG='wave_numbers' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 32 ! !---------- GROUP 4 ---------------- ! -! IFI=4, IFJ=1 +! IFI=4, IFJ=1, PHS META => GROUP(4)%FIELD(1)%META META(1)%FSC = 0.002 META(1)%UNITS = 'm' - META(1)%ENAME = '.phs' - META(1)%VARNM = 'phs' - META(1)%VARNL = 'wave significant height partition ' - META(1)%VARNS = 'sea_surface_wave_significant_height_partition_' - META(1)%VARNG = 'significant_wave_height_partition_' + META(1)%ENAME = '.phs'// IPART_TOKEN + META(1)%VARNM = 'phs'// IPART_TOKEN + META(1)%VARNL = 'wave significant height partition '// IPART_TOKEN + META(1)%VARNS = 'sea_surface_'// SPART_TOKEN_ //'_wave_significant_height' + META(1)%VARNG = 'significant_wave_height_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 64 -! IFI=4, IFJ=2 +! IFI=4, IFJ=2, PTP META => GROUP(4)%FIELD(2)%META META(1)%FSC = 0.01 META(1)%UNITS = 's' - META(1)%ENAME = '.ptp' - META(1)%VARNM = 'ptp' - META(1)%VARNL = 'peak period partition ' - META(1)%VARNS = 'sea_surface_wave_period_at_variance_spectral' // & - '_density_maximum_partition_' - META(1)%VARNG = 'dominant_wave_period_partition_' + META(1)%ENAME = '.ptp'// IPART_TOKEN + META(1)%VARNM = 'ptp'// IPART_TOKEN + META(1)%VARNL = 'peak period partition '// IPART_TOKEN + META(1)%VARNS = 'sea_surface_'// SPART_TOKEN_ //'_wave_period_at_variance' // & + '_spectral_density_maximum' + META(1)%VARNG = 'dominant_wave_period_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 100 -! IFI=4, IFJ=3 +! IFI=4, IFJ=3, PLP META => GROUP(4)%FIELD(3)%META META(1)%FSC = 1. META(1)%UNITS = 'm' - META(1)%ENAME = '.plp' - META(1)%VARNM = 'plp' - META(1)%VARNL = 'peak wave length partition ' - META(1)%VARNS = 'peak_wave_length_partition_' - META(1)%VARNG = 'peak_wave_length_partition_' + META(1)%ENAME = '.plp'// IPART_TOKEN + META(1)%VARNM = 'plp'// IPART_TOKEN + META(1)%VARNL = 'peak wave length partition '// IPART_TOKEN + !META(1)%VARNS = 'peak_wave_length_partition_'// SPART_TOKEN_ + META(1)%VARNS = '' + META(1)%VARNG = 'peak_wave_length_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 10000 -! IFI=4, IFJ=4 +! IFI=4, IFJ=4, PDIR META => GROUP(4)%FIELD(4)%META META(1)%FSC = 0.1 META(1)%UNITS = 'degree' - META(1)%ENAME = '.pdir' - META(1)%VARNM = 'pdir' - META(1)%VARNL = 'wave mean direction partition ' - META(1)%VARNS = 'sea_surface_wave_from_direction_partition_' - META(1)%VARNG = 'wave_from_direction_partition_' + META(1)%ENAME = '.pdir'// IPART_TOKEN + META(1)%VARNM = 'pdir'// IPART_TOKEN + META(1)%VARNL = 'wave mean direction partition '// IPART_TOKEN + META(1)%VARNS = 'sea_surface_'// SPART_TOKEN_ //'_wave_from_direction' + META(1)%VARNG = 'wave_from_direction_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM META(1)%VARND = DIRCOM META(1)%VMIN = 0 META(1)%VMAX = 360 -! IFI=4, IFJ=5 +! IFI=4, IFJ=5, PSPR META => GROUP(4)%FIELD(5)%META META(1)%FSC = 0.1 META(1)%UNITS = 'degree' - META(1)%ENAME = '.pspr' - META(1)%VARNM = 'pspr' - META(1)%VARNL = 'directional spread partition ' - META(1)%VARNS = 'sea_surface_wave_directional_spread_partition_' - META(1)%VARNG = 'directional_spread_partition_' + META(1)%ENAME = '.pspr'// IPART_TOKEN + META(1)%VARNM = 'pspr'// IPART_TOKEN + META(1)%VARNL = 'directional spread partition '// IPART_TOKEN + META(1)%VARNS = 'sea_surface_'// SPART_TOKEN_ //'_wave_diectional_spread' + META(1)%VARNG = 'directional_spread_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 90 -! IFI=4, IFJ=6 +! IFI=4, IFJ=6, PWS META => GROUP(4)%FIELD(6)%META META(1)%FSC = 0.001 META(1)%UNITS = '1' - META(1)%ENAME = '.pws' - META(1)%VARNM = 'pws' - META(1)%VARNL = 'wind sea fraction in partition ' - META(1)%VARNS = 'wind_sea_fraction_in_partition_' - META(1)%VARNG = 'wind_sea_fraction_in_partition_' + META(1)%ENAME = '.pws'// IPART_TOKEN + META(1)%VARNM = 'pws'// IPART_TOKEN + META(1)%VARNL = 'wind sea fraction in partition '// IPART_TOKEN + !META(1)%VARNS = 'wind_sea_fraction_in_partition_'// IPART_TOKEN + META(1)%VARNS = '' + META(1)%VARNG = 'wind_sea_fraction_in_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 1 -! IFI=4, IFJ=7 +! IFI=4, IFJ=7, PDP META => GROUP(4)%FIELD(7)%META META(1)%FSC = 0.1 META(1)%UNITS = 'degree' - META(1)%ENAME = '.pdp' - META(1)%VARNM = 'pdp' - META(1)%VARNL = 'peak direction partition ' - META(1)%VARNS = 'sea_surface_wave_peak_from_direction_partition_' - META(1)%VARNG = 'dominant_wave_from_direction_partition_' + META(1)%ENAME = '.pdp'// IPART_TOKEN + META(1)%VARNM = 'pdp'// IPART_TOKEN + META(1)%VARNL = 'peak direction partition '// IPART_TOKEN + META(1)%VARNS = 'sea_surface_'// SPART_TOKEN_ //'_wave_from_direction_at_variance' // & + '_spectral_density_maximum' + META(1)%VARNG = 'dominant_wave_from_direction_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM META(1)%VARND = DIRCOM META(1)%VMIN = 0 META(1)%VMAX = 360 -! IFI=4, IFJ=8 +! IFI=4, IFJ=8, PQP META => GROUP(4)%FIELD(8)%META META(1)%FSC = 0.01 META(1)%UNITS = '1' - META(1)%ENAME = '.pqp' - META(1)%VARNM = 'pqp' - META(1)%VARNL = 'peakedness partition ' - META(1)%VARNS = 'sea_surface_wave_peakedness_partition_' - META(1)%VARNG = 'wave_peakedness_partition_' + META(1)%ENAME = '.pqp'// IPART_TOKEN + META(1)%VARNM = 'pqp'// IPART_TOKEN + META(1)%VARNL = 'peakedness partition '// IPART_TOKEN + !META(1)%VARNS = 'sea_surface_wave_peakedness_partition_'// IPART_TOKEN + META(1)%VARNS = '' + META(1)%VARNG = 'wave_peakedness_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM META(1)%VMIN = 0 META(1)%VMAX = 320 -! IFI=4, IFJ=9 +! IFI=4, IFJ=9, PPE META => GROUP(4)%FIELD(9)%META META(1)%FSC = 0.01 META(1)%UNITS = '1' - META(1)%ENAME = '.ppe' - META(1)%VARNM = 'ppe' - META(1)%VARNL = 'peak enhancement factor partition ' - META(1)%VARNS = 'wave_peak_enhancement_factor_partition_' - META(1)%VARNG = 'wave_peak_enhancement_factor_partition_' + META(1)%ENAME = '.ppe'// IPART_TOKEN + META(1)%VARNM = 'ppe'// IPART_TOKEN + META(1)%VARNL = 'peak enhancement factor partition '// IPART_TOKEN + !META(1)%VARNS = 'wave_peak_enhancement_factor_partition_'// IPART_TOKEN + META(1)%VARNS = '' + META(1)%VARNG = 'wave_peak_enhancement_factor_partition_'// IPART_TOKEN META(1)%VARNC = 'JONSWAP peak enhancement factor; ' // PARTCOM META(1)%VARND = '' META(1)%VMIN = 0 META(1)%VMAX = 320 -! IFI=4, IFJ=10 +! IFI=4, IFJ=10, PGW META => GROUP(4)%FIELD(10)%META META(1)%FSC = 0.0001 META(1)%UNITS = 's-1' - META(1)%ENAME = '.pgw' - META(1)%VARNM = 'pgw' - META(1)%VARNL = 'frequency width partition ' - META(1)%VARNS = 'Gaussian_frequency_spread_partition_' - META(1)%VARNG = 'Gaussian_frequency_spread_partition_' + META(1)%ENAME = '.pgw'// IPART_TOKEN + META(1)%VARNM = 'pgw'// IPART_TOKEN + META(1)%VARNL = 'frequency width partition '// IPART_TOKEN + !META(1)%VARNS = 'Gaussian_frequency_spread_partition_'// IPART_TOKEN + META(1)%VARNS = '' + META(1)%VARNG = 'Gaussian_frequency_spread_partition_'// IPART_TOKEN META(1)%VARNC = 'Gaussian least-square fit to ' // & 'omni-directional spectral partition; ' // PARTCOM META(1)%VMIN = 0 META(1)%VMAX = 3.2 -! IFI=4, IFJ=11 +! IFI=4, IFJ=11, PSW META => GROUP(4)%FIELD(11)%META META(1)%FSC = 0.0001 META(1)%UNITS = '1' - META(1)%ENAME = '.psw' - META(1)%VARNM = 'psw' - META(1)%VARNL = 'spectral width partition ' - META(1)%VARNS = 'sea_surface_wave_spectral_width_partition_' - META(1)%VARNG = 'wave_spectral_width_partition_' + META(1)%ENAME = '.psw'// IPART_TOKEN + META(1)%VARNM = 'psw'// IPART_TOKEN + META(1)%VARNL = 'spectral width partition '// IPART_TOKEN + !META(1)%VARNS = 'sea_surface_wave_spectral_width_partition_'// IPART_TOKEN + META(1)%VARNS = '' + META(1)%VARNG = 'wave_spectral_width_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM META(1)%VMIN = 0 META(1)%VMAX = 3.2 -! IFI=4, IFJ=12 +! IFI=4, IFJ=12, PTM10 META => GROUP(4)%FIELD(12)%META META(1)%FSC = 0.01 META(1)%UNITS = 's' - META(1)%ENAME = '.ptm10c' - META(1)%VARNM = 'ptm10c' - META(1)%VARNL = 'mean period Tm10 partition ' - META(1)%VARNS = 'sea_surface_wave_mean_period_tm10_partition_' - META(1)%VARNG = 'mean_wave_period_Tm10_partition_' + META(1)%ENAME = '.ptm10c'// IPART_TOKEN + META(1)%VARNM = 'ptm10c'// IPART_TOKEN + META(1)%VARNL = 'mean period Tm10 partition '// IPART_TOKEN + META(1)%VARNS = 'sea_surface_'// SPART_TOKEN_ //'_wave_mean_period_from_variance' // & + '_spectral_density_inverse_frequency_moment' + META(1)%VARNG = 'mean_wave_period_Tm10_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM META(1)%VMIN = 0 META(1)%VMAX = 100 -! IFI=4, IFJ=13 +! IFI=4, IFJ=13, PT01 META => GROUP(4)%FIELD(13)%META META(1)%FSC = 0.01 META(1)%UNITS = 's' - META(1)%ENAME = '.pt01c' - META(1)%VARNM = 'pt01c' - META(1)%VARNL = 'mean period T01 partition ' - META(1)%VARNS = 'sea_surface_wave_mean_period_t01_partition_' - META(1)%VARNG = 'mean_wave_period_T01_partition_' + META(1)%ENAME = '.pt01c'// IPART_TOKEN + META(1)%VARNM = 'pt01c'// IPART_TOKEN + META(1)%VARNL = 'mean period T01 partition '// IPART_TOKEN + META(1)%VARNS = 'sea_surface_'// SPART_TOKEN_ //'_wave_mean_period_from_variance' // & + '_spectral_density_first_frequency_moment' + META(1)%VARNG = 'mean_wave_period_T01_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM META(1)%VMIN = 0 META(1)%VMAX = 100 -! IFI=4, IFJ=14 +! IFI=4, IFJ=14, PT02 META => GROUP(4)%FIELD(14)%META META(1)%FSC = 0.01 META(1)%UNITS = 's' - META(1)%ENAME = '.pt02c' - META(1)%VARNM = 'pt02c' - META(1)%VARNL = 'mean period T02 partition ' - META(1)%VARNS = 'sea_surface_wave_mean_period_t02_partition_' - META(1)%VARNG = 'mean_wave_period_T02_partition_' + META(1)%ENAME = '.pt02c'// IPART_TOKEN + META(1)%VARNM = 'pt02c'// IPART_TOKEN + META(1)%VARNL = 'mean period T02 partition '// IPART_TOKEN + META(1)%VARNS = 'sea_surface_'// SPART_TOKEN_ //'_wave_mean_period_from_variance' // & + '_spectral_density_second_frequency_moment' + META(1)%VARNG = 'mean_wave_period_T02_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM META(1)%VMIN = 0 META(1)%VMAX = 100 -! IFI=4, IFJ=15 +! IFI=4, IFJ=15, PEP META => GROUP(4)%FIELD(15)%META META(1)%FSC = 0.02 META(1)%UNITS = 'm2 s rad-1' - META(1)%ENAME = '.pep' - META(1)%VARNM = 'pep' - META(1)%VARNL = 'energy at peak frequency partition ' - META(1)%VARNS = 'sea_surface_wave_energy_at_variance_spectral_density_maximum_partition_' - META(1)%VARNG = 'wave_energy_at_variance_spectral_density_maximum_partition_' + META(1)%ENAME = '.pep'// IPART_TOKEN + META(1)%VARNM = 'pep'// IPART_TOKEN + META(1)%VARNL = 'energy at peak frequency partition '// IPART_TOKEN + !META(1)%VARNS = 'sea_surface_wave_energy_at_variance_spectral_density_maximum_partition_'// IPART_TOKEN + META(1)%VARNS = '' + META(1)%VARNG = 'wave_energy_at_variance_spectral_density_maximum_partition_'// IPART_TOKEN META(1)%VARNC = PARTCOM META(1)%VMIN = 0 META(1)%VMAX = 200 -! IFI=4, IFJ=16 +! IFI=4, IFJ=16, TWS META => GROUP(4)%FIELD(16)%META META(1)%FSC = 0.001 META(1)%UNITS = '1' META(1)%ENAME = '.tws' META(1)%VARNM = 'tws' META(1)%VARNL = 'wind sea fraction' - META(1)%VARNS = 'wind_sea_fraction' + !META(1)%VARNS = 'wind_sea_fraction' + META(1)%VARNS = '' META(1)%VARNG = 'wind_sea_fraction' META(1)%VARNC = PARTCOM - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 1 -! IFI=4, IFJ=17 +! IFI=4, IFJ=17, PNR META => GROUP(4)%FIELD(17)%META META(1)%FSC = 1. META(1)%UNITS = '1' META(1)%ENAME = '.pnr' META(1)%VARNM = 'pnr' META(1)%VARNL = 'number of wave partitions' - META(1)%VARNS = 'number_of_wave_partitions' + !META(1)%VARNS = 'number_of_wave_partitions' + META(1)%VARNS = '' META(1)%VARNG = 'number_of_wave_partitions' META(1)%VARNC = PARTCOM - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 100 ! !---------- GROUP 5 ---------------- ! -! IFI=5, IFJ=1 +! IFI=5, IFJ=1, UST META => GROUP(5)%FIELD(1)%META ! First component META(1)%FSC = 0.01 @@ -2286,20 +2960,22 @@ META(1)%UNITS = 'm s-1' META(1)%VARNM='uust' META(1)%VARNL='eastward friction velocity' - META(1)%VARNS='eastward_friction_velocity' + !META(1)%VARNS='eastward_friction_velocity' + META(1)%VARNS='' META(1)%VARNG='eastward_friction_velocity' META(1)%VARNC='ust=sqrt(uust**2+vust**2)' META(1)%VARND=DIRCOM META(1)%VMIN = -99.0 META(1)%VMAX = 99.0 - + ! Second component META(2) = META(1) META(2)%VARNM='vust' META(2)%VARNL='northward friction velocity' - META(2)%VARNS='northward_friction_velocity' + !META(2)%VARNS='northward_friction_velocity' + META(2)%VARNS='' META(2)%VARNG='northward_friction_velocity' -! IFI=5, IFJ=2 +! IFI=5, IFJ=2, CHA META => GROUP(5)%FIELD(2)%META META(1)%FSC = 1.E-5 META(1)%UNITS = '1' @@ -2310,18 +2986,19 @@ META(1)%VARNG='charnock_coefficient' META(1)%VMIN = 0 META(1)%VMAX = 0.327 -! IFI=5, IFJ=3 +! IFI=5, IFJ=3, CGE META => GROUP(5)%FIELD(3)%META META(1)%FSC = 0.1 !0.01 META(1)%UNITS = 'kW m-1' - META(1)%ENAME = '.cge' + META(1)%ENAME = '.cge' META(1)%VARNM='cge' META(1)%VARNL='wave energy flux' - META(1)%VARNS='sea_surface_wind_wave_energy_flux' + !META(1)%VARNS='sea_surface_wind_wave_energy_flux' + META(1)%VARNS='' META(1)%VARNG='wave_energy_flux' META(1)%VMIN = 0 META(1)%VMAX = 999 -! IFI=5, IFJ=4 +! IFI=5, IFJ=4, FAW META => GROUP(5)%FIELD(4)%META META(1)%FSC = 0.1 META(1)%UNITS = 'W m-2' @@ -2332,7 +3009,7 @@ META(1)%VARNG='wind_to_wave_energy_flux' META(1)%VMIN = 0 META(1)%VMAX = 999 -! IFI=5, IFJ=5 +! IFI=5, IFJ=5, TAW META => GROUP(5)%FIELD(5)%META ! First component META(1)%FSC = 0.000001 @@ -2340,21 +3017,23 @@ META(1)%ENAME = '.taw' META(1)%VARNM='utaw' META(1)%VARNL='eastward wave supported wind stress' - META(1)%VARNS='eastward_wave_supported_wind_stress' + !META(1)%VARNS='eastward_wave_supported_wind_stress' + META(1)%VARNS='' META(1)%VARNC='taw=sqrt(utaw**2+vtaw**2)' META(1)%VARNG='eastward_wave_supported_wind_stress' META(1)%VARND=DIRCOM META(1)%VMIN = -0.032 META(1)%VMAX = 0.032 - + ! Second component META(2) = META(1) META(2)%VARNM='vtaw' META(2)%VARNL='northward wave supported wind stress' - META(2)%VARNS='northward_wave_supported_wind_stress' + !META(2)%VARNS='northward_wave_supported_wind_stress' + META(2)%VARNS='' META(2)%VARNG='northward_wave_supported_wind_stress' META(2)%VARNC='taw=sqrt(utaw**2+vtaw**2)' -! IFI=5, IFJ=6 +! IFI=5, IFJ=6, TWA META => GROUP(5)%FIELD(6)%META ! First component META(1)%FSC = 0.0001 @@ -2362,7 +3041,8 @@ META(1)%UNITS = 'm2 s-2' META(1)%VARNM='utwa' META(1)%VARNL='eastward wave to wind stress' - META(1)%VARNS='eastward_wave_to_wind_stress' + !META(1)%VARNS='eastward_wave_to_wind_stress' + META(1)%VARNS='' META(1)%VARNG='eastward_wave_to_wind_stress' META(1)%VARNC='twa=sqrt(utwa**2+vtwa**2)' META(1)%VARND=DIRCOM @@ -2373,63 +3053,69 @@ META(2) = META(1) META(2)%VARNM='vtwa' META(2)%VARNL='northward wave to wind stress' - META(2)%VARNS='northward_wave_to_wind_stress' + !META(2)%VARNS='northward_wave_to_wind_stress' + META(2)%VARNS='' META(2)%VARNG='northward_wave_to_wind_stress' META(2)%VARNC='twa=sqrt(utwa**2+vtwa**2)' -! IFI=5, IFJ=7 +! IFI=5, IFJ=7, WCC META => GROUP(5)%FIELD(7)%META META(1)%FSC = 0.0001 META(1)%UNITS = '1' META(1)%ENAME = '.wcc' META(1)%VARNM='wcc' - META(1)%VARNL='whitecap coverage' - META(1)%VARNS='whitecap_coverage' - META(1)%VARNG='whitecap_coverage' + META(1)%VARNL='whitecap coverage' + !META(1)%VARNS='whitecap_coverage' + META(1)%VARNS='' + META(1)%VARNG='whitecap_coverage' META(1)%VARNC='' META(1)%VARND='' META(1)%VMIN = 0 META(1)%VMAX = 1 -! IFI=5, IFJ=8 +! IFI=5, IFJ=8, WCF META => GROUP(5)%FIELD(8)%META META(1)%FSC = 0.001 META(1)%UNITS = 'm' META(1)%ENAME = '.wcf' META(1)%VARNM='wcf' - META(1)%VARNL='whitecap foam thickness' - META(1)%VARNS='whitecap_foam_thickness' - META(1)%VARNG='whitecap_foam_thickness' + META(1)%VARNL='whitecap foam thickness' + !META(1)%VARNS='whitecap_foam_thickness' + META(1)%VARNS='' + META(1)%VARNG='whitecap_foam_thickness' META(1)%VMIN = 0 META(1)%VMAX = 10 -! IFI=5, IFJ=9 +! IFI=5, IFJ=9, WCH META => GROUP(5)%FIELD(9)%META - META(1)%FSC = 0.002 + META(1)%FSC = 0.002 META(1)%UNITS = 'm' META(1)%ENAME = '.wch' META(1)%VARNM='wch' META(1)%VARNL='significant breaking wave height' - META(1)%VARNS='significant_breaking_wave_height' + !META(1)%VARNS='significant_breaking_wave_height' + META(1)%VARNS='' META(1)%VARNG='significant_breaking_wave_height' META(1)%VMIN = 0 META(1)%VMAX = 64 -! IFI=5, IFJ=10 +! IFI=5, IFJ=10, WCM META => GROUP(5)%FIELD(10)%META META(1)%FSC = 0.0001 META(1)%UNITS = '1' META(1)%ENAME = '.wcm' META(1)%VARNM='wcm' META(1)%VARNL='whitecap moment' - META(1)%VARNS='whitecap_moment' + !META(1)%VARNS='whitecap_moment' + META(1)%VARNS='' META(1)%VARNG='whitecap_moment' META(1)%VMIN = 0 META(1)%VMAX = 1 -! IFI=5, IFJ=11 +! IFI=5, IFJ=11, FWS META => GROUP(5)%FIELD(11)%META META(1)%FSC = 0.002 META(1)%UNITS = 's' META(1)%ENAME = '.fws' META(1)%VARNM='fws' META(1)%VARNL='Wind_sea_mean_period_T0M1' - META(1)%VARNS='Wind_sea_mean_period_T0M1' + META(1)%VARNS='sea_surface_wind_wave_mean_period_from_variance' // & + '_spectral_density_inverse_frequency_moment' META(1)%VARNG='Wind_sea_mean_period_T0M1' META(1)%VARNC='' META(1)%VARND='' @@ -2437,8 +3123,8 @@ META(1)%VMAX = 64 ! !---------- GROUP 6 ---------------- -! -! IFI=6, IFJ=1 +! +! IFI=6, IFJ=1, SXY META => GROUP(6)%FIELD(1)%META META(1)%FSC = 10. META(1)%UNITS = 'N m-1' @@ -2446,85 +3132,90 @@ META(1)%VARND = DIRCOM META(1)%VMIN = -30000 META(1)%VMAX = 30000 - + ! First component META(1)%VARNM='sxx' META(1)%VARNL='Radiation stress component Sxx' - META(1)%VARNS='Radiation_stress_component_Sxx' - META(1)%VARNS='radiation_stress_component_sxx' - + !META(1)%VARNS='radiation_stress_component_sxx' + META(1)%VARNS='' + ! S6cond component META(2) = META(1) META(2)%VARNM='syy' META(2)%VARNL='Radiation stress component Syy' - META(2)%VARNS='Radiation_stress_component_Syy' - META(2)%VARNS='radiation_stress_component_syy' - + !META(2)%VARNS='radiation_stress_component_syy' + META(2)%VARNS='' + ! Third component META(3) = META(1) META(3)%FSC = 1. META(3)%VARNM='sxy' META(3)%VARNL='Radiation stress component Sxy' - META(3)%VARNS='Radiation_stress_component_Sxy' - META(3)%VARNS='radiation_stress_component_sxy' -! IFI=6, IFJ=2 + !META(3)%VARNS='radiation_stress_component_sxy' + META(3)%VARNS='' +! IFI=6, IFJ=2, TWO META => GROUP(6)%FIELD(2)%META META(1)%FSC = 0.000001 META(1)%UNITS = 'm2 s-2' META(1)%ENAME = '.two' - META(1)%VMIN = -0.032 + META(1)%VMIN = -0.032 META(1)%VMAX = 0.032 META(1)%VARND = DIRCOM ! First component META(1)%VARNM='utwo' META(1)%VARNL='eastward wave to ocean stress' - META(1)%VARNS='eastward_wave_to_ocean_stress' + !META(1)%VARNS='eastward_wave_to_ocean_stress' + META(1)%VARNS='' META(1)%VARNG='eastward_wave_to_ocean_stress' META(1)%VARNC='two=sqrt(utwo**2+vtwo**2)' - + ! Second component META(2) = META(1) META(2)%VARNM='vtwo' META(2)%VARNL='northward wave to ocean stress' - META(2)%VARNS='northward_wave_to_ocean_stress' + !META(2)%VARNS='northward_wave_to_ocean_stress' + META(2)%VARNS='' META(2)%VARNG='northward_wave_to_ocean_stress' META(2)%VARNC='two=sqrt(utwo**2+vtwo**2)' -! IFI=6, IFJ=3 +! IFI=6, IFJ=3, BHD META => GROUP(6)%FIELD(3)%META META(1)%FSC = 0.1 META(1)%UNITS = 'm2 s-2' META(1)%ENAME = '.bhd' META(1)%VARNM='bhd' META(1)%VARNL='radiation pressure (Bernouilli Head)' - META(1)%VARNS='radiation_pressure' + !META(1)%VARNS='radiation_pressure' + META(1)%VARNS='' META(1)%VARNG='radiation_pressure' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 100 -! IFI=6, IFJ=4 +! IFI=6, IFJ=4, FOC META => GROUP(6)%FIELD(4)%META META(1)%FSC = 0.1 META(1)%UNITS = 'W m-2' META(1)%ENAME = '.foc' META(1)%VARNM='foc' META(1)%VARNL='wave to ocean energy flux' - META(1)%VARNS='wave_to_ocean_energy_flux' + !META(1)%VARNS='wave_to_ocean_energy_flux' + META(1)%VARNS='' META(1)%VARNG='wave_to_ocean_energy_flux' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 999 -! IFI=6, IFJ=5 +! IFI=6, IFJ=5, TUS META => GROUP(6)%FIELD(5)%META META(1)%FSC = 0.001 META(1)%UNITS = 'm2 s-1' META(1)%ENAME = '.tus' META(1)%VARND = DIRCOM - META(1)%VMIN = -9.9 - !TODO WHERE IS VMAX? - + META(1)%VMIN = -32.0 ! C Hansen: The former values of +-9.9 might be + META(1)%VMAX = 32.0 ! exceeded more frequently in real storms + ! First component META(1)%VARNM='utus' META(1)%VARNL='eastward stokes transport' - META(1)%VARNS='eastward_stokes_transport' + !META(1)%VARNS='eastward_stokes_transport' + META(1)%VARNS='' META(1)%VARNG='eastward_stokes_transport' META(1)%VARNC='tus=sqrt(utus**2+vtus**2)' @@ -2532,44 +3223,46 @@ META(2) = META(1) META(2)%VARNM='vtus' META(2)%VARNL='northward stokes transport' - META(2)%VARNS='northward_stokes_transport' + !META(2)%VARNS='northward_stokes_transport' + META(2)%VARNS='' META(2)%VARNG='northward_stokes_transport' META(2)%VARNC='tus=sqrt(utus**2+vtus**2)' -! IFI=6, IFJ=6 +! IFI=6, IFJ=6, USS META => GROUP(6)%FIELD(6)%META META(1)%FSC = 0.0005 META(1)%UNITS = 'm s-1' META(1)%ENAME = '.uss' - + ! First component META(1)%VARNM='uuss' META(1)%VARNL='eastward surface stokes drift' - META(1)%VARNS='eastward_surface_stokes_drift' + META(1)%VARNS='sea_surface_wave_stokes_drift_eastward_velocity' META(1)%VARNG='eastward_surface_stokes_drift' META(1)%VARNC='uss=sqrt(uuss**2+vuss**2)' META(1)%VARND=DIRCOM - META(1)%VMIN = -4.95 + META(1)%VMIN = -4.95 META(1)%VMAX = 4.95 - + ! Second component META(2) = META(1) META(2)%VARNM='vuss' META(2)%VARNL='northward surface stokes drift' - META(2)%VARNS='northward_surface_stokes_drift' + META(2)%VARNS='sea_surface_wave_stokes_drift_northward_velocity' META(2)%VARNG='northward_surface_stokes_drift' WRITE(META(2)%VARNC,'(A,F8.4,A,F8.4,A)') 'Frequency range ',SIG(1)*TPIINV,' to ',SIG(NK)*TPIINV,' Hz' -! IFI=6, IFJ=7 +! IFI=6, IFJ=7, P2S META => GROUP(6)%FIELD(7)%META META(1)%FSC = 0.01 META(1)%ENAME = '.p2s' META(1)%UNITS = 'm4' META(1)%VMIN = -150 META(1)%VMAX = 320 - + ! First component META(1)%VARNL='power spectral density of equivalent surface pressure' - META(1)%VARNS='power_spectral_density_of_equivalent_surface_pressure' + !META(1)%VARNS='power_spectral_density_of_equivalent_surface_pressure' + META(1)%VARNS='' META(1)%VARNG='power_spectral_density_of_equivalent_surface_pressure' META(1)%VARNM='fp2s' @@ -2578,10 +3271,11 @@ META(2)%VARNM='pp2s' META(2)%UNITS= 's-1' META(2)%VARNL='peak period of power spectral density of equivalent surface pressure' - META(2)%VARNS='peak_period_of_power_spectral_density_of_equivalent_surface_pressure' + !META(2)%VARNS='peak_period_of_power_spectral_density_of_equivalent_surface_pressure' + META(2)%VARNS='' META(2)%VARNG='peak_period_of_power_spectral_density_of_equivalent_surface_pressure' - -! IFI=6, IFJ=8 + +! IFI=6, IFJ=8, USF META => GROUP(6)%FIELD(8)%META META(1)%UNITS = 'm s-1 Hz-1' META(1)%FSC = 0.0005 @@ -2589,11 +3283,12 @@ META(1)%VMIN = -4.95 META(1)%VMAX = 4.95 META(1)%VARND = DIRCOM - + ! First component META(1)%VARNM='uusf' META(1)%VARNL='eastward spectral variance of surface stokes drift' - META(1)%VARNS='eastward_spectral_variance_of_surface_stokes_drift' + !META(1)%VARNS='eastward_spectral_variance_of_surface_stokes_drift' + META(1)%VARNS='' META(1)%VARNC='usf=sqrt(uusf**2+vusf**2)' META(1)%VARNG='eastward_spectral_variance_of_surface_stokes_drift' @@ -2601,28 +3296,35 @@ META(2) = META(1) META(2)%VARNM='vusf' META(2)%VARNL='northward spectral variance of surface stokes drift' - META(2)%VARNS='northward_spectral_variance_of_surface_stokes_drift' + !META(2)%VARNS='northward_spectral_variance_of_surface_stokes_drift' + META(2)%VARNS='' META(2)%VARNG='northward_spectral_variance_of_surface_stokes_drift' META(2)%VARNC='usf=sqrt(uusf**2+vusf**2)' -! IFI=6, IFJ=9 +! IFI=6, IFJ=9, P2L META => GROUP(6)%FIELD(9)%META ! Information for spectral microseismic generation data (2nd file) META(1)%FSC = 0.0004 META(1)%VARNM='p2l' META(1)%VARNL='base ten logarithm of power spectral density of equivalent surface pressure' - META(1)%VARNS='base_ten_logarithm_of_power_spectral_density_of_equivalent_surface_pressure' + !META(1)%VARNS='base_ten_logarithm_of_power_spectral_density_of_equivalent_surface_pressure' + META(1)%VARNS='' META(1)%VARNG='base_ten_logarithm_of_power_spectral_density_of_equivalent_surface_pressure' - IF (NCVARTYPE.EQ.2) THEN + IF (NCVARTYPE.EQ.2) THEN META(1)%UNITS='log10(Pa2 m2 s+1E-12)' - ELSE + META(1)%VMIN = -12. + META(1)%VMAX = 12. + ELSE META(1)%UNITS='Pa2 m2 s' + META(1)%VARNL='power spectral density of equivalent surface pressure' + !META(1)%VARNS='power_spectral_density_of_equivalent_surface_pressure' + META(1)%VARNG='power_spectral_density_of_equivalent_surface_pressure' + META(1)%VMIN = 0. + META(1)%VMAX = 1.e12 ENDIF META(1)%VARNC='' META(1)%VARND='' META(1)%ENAME='.p2l' - META(1)%VMIN = -12 - META(1)%VMAX = 12 -! IFI=6, IFJ=10 +! IFI=6, IFJ=10, TWI META => GROUP(6)%FIELD(10)%META META(1)%FSC = 0.000001 META(1)%UNITS = 'm2 s-2' @@ -2630,50 +3332,57 @@ META(1)%VMIN = -0.032 META(1)%VMAX = 0.032 META(1)%VARND = DIRCOM - + ! First component META(1)%VARNL='eastward wave to sea ice stress' META(1)%VARNM='utic' - META(1)%VARNS='eastward_wave_to_sea_ice_stress' + !META(1)%VARNS='eastward_wave_to_sea_ice_stress' + META(1)%VARNS='' META(1)%VARNG='eastward_wave_to_sea_ice_stress' META(1)%VARNC='two=sqrt(utwo**2+vtwo**2)' ! Second component META(2) = META(1) META(2)%VARNM='vtic' META(2)%VARNL='northward wave to sea ice stress' - META(2)%VARNS='northward_wave_to_sea_ice_stress' + !META(2)%VARNS='northward_wave_to_sea_ice_stress' + META(2)%VARNS='' META(2)%VARNG='northward_wave_to_sea_ice_stress' META(2)%VARNC='two=sqrt(utwo**2+vtwo**2)' -! IFI=6, IFJ=11 +! IFI=6, IFJ=11, FIC META => GROUP(6)%FIELD(11)%META META(1)%FSC = 0.1 META(1)%UNITS = 'W m-2' META(1)%ENAME = '.fic' META(1)%VARNM='fic' META(1)%VARNL='wave to sea ice energy flux' - META(1)%VARNS='wave_to_sea_ice_energy_flux' + !META(1)%VARNS='wave_to_sea_ice_energy_flux' + META(1)%VARNS='' META(1)%VARNG='wave_to_sea_ice_energy_flux' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 999 -! IFI=6, IFJ=12 +! IFI=6, IFJ=12, USP META => GROUP(6)%FIELD(12)%META META(1)%UNITS = 'm s-1' META(1)%FSC = 0.0005 META(1)%ENAME = '.usp' META(1)%VARND = DIRCOM - + META(1)%VMIN = -9.99 + META(1)%VMAX = 9.98 + ! First component META(1)%VARNM='ussp' META(1)%VARNL='eastward partitioned surface stokes drift' - META(1)%VARNS='eastward_partitioned_surface_stokes_drift' + !META(1)%VARNS='eastward_partitioned_surface_stokes_drift' + META(1)%VARNS='' META(1)%VARNG='eastward_partitioned_surface_stokes_drift' META(1)%VARNC='usp=sqrt(ussp**2+vssp**2)' - + ! Second component META(2) = META(1) META(2)%VARNM='vssp' META(2)%VARNL='northward partitioned surface stokes drift' - META(2)%VARNS='northward_partitioned_surface_stokes_drift' + !META(2)%VARNS='northward_partitioned_surface_stokes_drift' + META(2)%VARNS='' META(2)%VARNG='northward_partitioned_surface_stokes_drift' META(2)%VARNC='usp=sqrt(ussp**2+vssp**2)' ! IFI=6, IFJ=13 @@ -2701,8 +3410,8 @@ META(2)%VARNC='toc=sqrt(utoc**2+vtoc**2)' ! !---------- GROUP 7 ---------------- -! -! IFI=7, IFJ=1 +! +! IFI=7, IFJ=1, ABR META => GROUP(7)%FIELD(1)%META META(1)%FSC = 0.01 META(1)%ENAME = '.abr' @@ -2710,22 +3419,24 @@ META(1)%VMIN = -180 META(1)%VMAX = 180 META(1)%VARND = DIRCOM - + ! First component META(1)%VARNM='uabr' META(1)%VARNL='rms of bottom displacement amplitude zonal' - META(1)%VARNS='rms_of_bottom_displacement_amplitude_zonal' + !META(1)%VARNS='rms_of_bottom_displacement_amplitude_zonal' + META(1)%VARNS='' META(1)%VARNG='rms_of_bottom_displacement_amplitude_zonal' META(1)%VARNC='abr=sqrt(uabr**2+vabr**2)' - + ! Second component META(2) = META(1) META(2)%VARNM='vabr' META(2)%VARNL='rms of bottom displacement amplitude meridional' - META(2)%VARNS='rms_of_bottom_displacement_amplitude_meridional' + !META(2)%VARNS='rms_of_bottom_displacement_amplitude_meridional' + META(2)%VARNS='' META(2)%VARNG='rms_of_bottom_displacement_amplitude_meridional' META(2)%VARNC='abr=sqrt(uabr**2+vabr**2)' -! IFI=7, IFJ=2 +! IFI=7, IFJ=2, UBR META => GROUP(7)%FIELD(2)%META META(1)%FSC = 0.01 META(1)%ENAME = '.ubr' @@ -2737,7 +3448,8 @@ ! First component META(1)%VARNM='uubr' META(1)%VARNL='rms of bottom velocity amplitude zonal' - META(1)%VARNS='rms_of_bottom_velocity_amplitude_zonal' + !META(1)%VARNS='rms_of_bottom_velocity_amplitude_zonal' + META(1)%VARNS='' META(1)%VARNG='rms_of_bottom_velocity_amplitude_zonal' META(1)%VARNC='ubr=sqrt(uubr**2+vubr**2)' @@ -2745,9 +3457,10 @@ META(2) = META(1) META(2)%VARNM='vubr' META(2)%VARNL='rms of bottom velocity amplitude meridional' - META(2)%VARNS='rms_of_bottom_velocity_amplitude_meridional' + !META(2)%VARNS='rms_of_bottom_velocity_amplitude_meridional' + META(2)%VARNS='' META(2)%VARNG='rms_of_bottom_velocity_amplitude_meridional' -! IFI=7, IFJ=3 +! IFI=7, IFJ=3, BED META => GROUP(7)%FIELD(3)%META META(1)%FSC = 0.001 META(1)%UNITS = 'm' @@ -2759,15 +3472,17 @@ ! First component META(1)%VARNM='bed' META(1)%VARNL='bottom roughness' - META(1)%VARNS='sea bottom roughness length' + !META(1)%VARNS='sea bottom roughness length' + META(1)%VARNS='' META(1)%VARNG='ripple_wavelength' META(1)%VARNC='ripple_length=sqrt(ripplex**2+rippley**2)' - + ! Second component META(2) = META(1) META(2)%VARNM='ripplex' META(2)%VARNL='eastward sea bottom ripple wavelength' - META(2)%VARNS='eastward_ripple_wavelength' + !META(2)%VARNS='eastward_ripple_wavelength' + META(2)%VARNS='' META(2)%VARNG='eastward_ripple_wavelength' META(2)%VARNC='ripple_length=sqrt(ripplex**2+rippley**2)' @@ -2775,21 +3490,23 @@ META(3) = META(1) META(3)%VARNM='rippley' META(3)%VARNL='northward sea bottom ripple wavelength' - META(3)%VARNS='northward_ripple_wavelength' + !META(3)%VARNS='northward_ripple_wavelength' + META(3)%VARNS='' META(3)%VARNG='northward_ripple_wavelength' META(3)%VARNC='ripple_length=sqrt(ripplex**2+rippley**2)' -! IFI=7, IFJ=4 +! IFI=7, IFJ=4, FBB META => GROUP(7)%FIELD(4)%META META(1)%FSC = 0.1 META(1)%UNITS = 'W m-2' META(1)%ENAME = '.fbb' META(1)%VARNM='fbb' META(1)%VARNL='wave dissipation in bbl' - META(1)%VARNS='wave_energy_dissipation_in_bottom_boundary_layer' + !META(1)%VARNS='wave_energy_dissipation_in_bottom_boundary_layer' + META(1)%VARNS='' META(1)%VARNG='wave_dissipation_in_bbl' META(1)%VMIN = 0 META(1)%VMAX = 999 -! IFI=7, IFJ=5 +! IFI=7, IFJ=5, TBB META => GROUP(7)%FIELD(5)%META META(1)%FSC = 0.000001 META(1)%UNITS = 'm2 s-2' @@ -2797,102 +3514,108 @@ META(1)%VMIN = -0.032 META(1)%VMAX = 0.032 META(1)%VARND = DIRCOM - + ! First component META(1)%VARNM='utbb' META(1)%VARNL='eastward wave to bbl stress' - META(1)%VARNS='eastward_wave_to_bottom_boundary_layer_stress' + !META(1)%VARNS='eastward_wave_to_bottom_boundary_layer_stress' + META(1)%VARNS='' META(1)%VARNG='eastward_wave_to_bbl_stress' META(1)%VARNC='tbb=sqrt(utbb**2+vtbb**2)' - + ! Second component META(2) = META(1) META(2)%VARNM='vtbb' META(2)%VARNL='northward wave to bbl stress' - META(2)%VARNS='northward_wave_to_bottom_boundary_layer_stress' + !META(2)%VARNS='northward_wave_to_bottom_boundary_layer_stress' + META(2)%VARNS='' META(2)%VARNG='northward_wave_to_bbl_stress' META(2)%VARNC='tbb=sqrt(utbb**2+vtbb**2)' ! !---------- GROUP 8 ---------------- -! IFI=8, IFJ=1 +! IFI=8, IFJ=1, MSS META => GROUP(8)%FIELD(1)%META META(1)%FSC = 0.00001 META(1)%ENAME = '.mss' META(1)%UNITS = '1' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 0.3 META(1)%VARND = DIRCOM WRITE(META(1)%VARNC,'(A,F8.4,A,F8.4,A)') 'Frequency range ',SIG(1)*TPIINV,' to ',SIG(NK)*TPIINV,' Hz' - + ! First component META(1)%VARNM='mssu' META(1)%VARNL='downwave mean square slope' - META(1)%VARNS='x_mean_square_slope' + META(1)%VARNS='sea_surface_wave_mean_square_upwave_slope' META(1)%VARNG='x_mean_square_slope' META(1)%VARNC='mss=mssu+mssc' - + ! Second component META(2) = META(1) META(2)%VARNM='mssc' META(2)%VARNL='crosswave mean square slope' - META(2)%VARNS='y_mean_square_slope' + META(2)%VARNS='sea_surface_wave_mean_square_crosswave_slope' META(2)%VARNG='y_mean_square_slope' -! IFI=8, IFJ=2 +! IFI=8, IFJ=2, MSC META => GROUP(8)%FIELD(2)%META - META(2)%FSC = 1E-7 - META(2)%ENAME = '.msc' - META(2)%UNITS = '1' - META(2)%VMIN = 0 - META(2)%VMAX = 0.003 - META(2)%VARND = DIRCOM - + META(1)%FSC = 1E-7 + META(1)%ENAME = '.msc' + META(1)%UNITS = '1' + META(1)%VMIN = 0 + META(1)%VMAX = 0.003 + META(1)%VARND = DIRCOM + ! First component META(1)%VARNM='mscx' META(1)%VARNL='eastward phillips constant' - META(1)%VARNS='eastward_phillips_constant' + !META(1)%VARNS='eastward_phillips_constant' + META(1)%VARNS='' META(1)%VARNG='eastward_phillips_constant' META(1)%VARNC='msc=mscx+mscy' - + ! Second component META(2) = META(1) META(2)%VARNM='mscy' META(2)%VARNL='northward phillips constant' - META(2)%VARNS='northward_phillips_constant' + !META(2)%VARNS='northward_phillips_constant' + META(2)%VARNS='' META(2)%VARNG='northward_phillips_constant' META(2)%VARNC='msc=mscx+mscy' -! IFI=8, IFJ=3 +! IFI=8, IFJ=3, MSD META => GROUP(8)%FIELD(3)%META META(1)%FSC = 0.1 META(1)%UNITS = 'degree' META(1)%ENAME = '.msd' META(1)%VARNM='mssd' META(1)%VARNL='u direction for mss' - META(1)%VARNS='sea_surface_wave_dominant_mean_square_slope_direction' + META(1)%VARNS='sea_surface_mean_square_upwave_slope_direction' META(1)%VARNG='sea_surface_wave_dominant_mean_square_slope_direction' WRITE(META(1)%VARNC,'(A,F8.4,A,F8.4,A)') 'Frequency range ',SIG(1)*TPIINV,' to ',SIG(NK)*TPIINV,' Hz' META(1)%VARND = DIRCOM META(1)%VMIN = 0 META(1)%VMAX = 360 -! IFI=8, IFJ=4 +! IFI=8, IFJ=4, MCD META => GROUP(8)%FIELD(4)%META META(1)%FSC = 0.1 META(1)%UNITS = 'degree' META(1)%ENAME = '.mcd' META(1)%VARNM='mscd' META(1)%VARNL='x direction for msc' - META(1)%VARNS='sea_surface_wave_dominant_mean_square_slope_direction_in_highest_frequency' + !META(1)%VARNS='sea_surface_wave_dominant_mean_square_slope_direction_in_highest_frequency' + META(1)%VARNS='' META(1)%VARNG='sea_surface_wave_dominant_mean_square_slope_direction_in_highest_frequency' META(1)%VARND = DIRCOM META(1)%VMIN = 0 META(1)%VMAX = 360 -! IFI=8, IFJ=5 +! IFI=8, IFJ=5, QP META => GROUP(8)%FIELD(5)%META META(1)%FSC = 0.001 META(1)%UNITS = '1' META(1)%ENAME = '.qp' META(1)%VARNM='qp' META(1)%VARNL='peakedness' - META(1)%VARNS='sea_surface_wave_peakedness' + !META(1)%VARNS='sea_surface_wave_peakedness' + META(1)%VARNS='' META(1)%VARNG='wave_peakedness' META(1)%VARNC='Goda wave peakedness parameter' META(1)%VMIN = 0 @@ -2900,60 +3623,65 @@ ! !---------- GROUP 9 ---------------- ! -! IFI=9, IFJ=1 +! IFI=9, IFJ=1, DTD META => GROUP(9)%FIELD(1)%META META(1)%FSC = 0.1 META(1)%UNITS = 'min.' META(1)%ENAME = '.dtd' META(1)%VARNM='dtd' META(1)%VARNL='dynamic time step' - META(1)%VARNS='dynamic_time_step' + !META(1)%VARNS='dynamic_time_step' + META(1)%VARNS='' META(1)%VARNG='dynamic_time_step' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 3200 -! IFI=9, IFJ=2 +! IFI=9, IFJ=2, FC META => GROUP(9)%FIELD(2)%META META(1)%FSC = 0.001 META(1)%UNITS = 's-1' META(1)%ENAME = '.fc' META(1)%VARNM='fc' META(1)%VARNL='cut off frequency' - META(1)%VARNS='cut_off_frequency' + !META(1)%VARNS='cut_off_frequency' + META(1)%VARNS='' META(1)%VARNG='cut_off_frequency' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 8 -! IFI=9, IFJ=3 +! IFI=9, IFJ=3, CFX META => GROUP(9)%FIELD(3)%META META(1)%FSC = 0.01 META(1)%UNITS = '1' META(1)%ENAME = '.cfx' META(1)%VARNM='cfx' META(1)%VARNL='maximum cfl for spatial advection' - META(1)%VARNS='maximum_cfl_for_spatial_advection' + !META(1)%VARNS='maximum_cfl_for_spatial_advection' + META(1)%VARNS='' META(1)%VARNG='maximum_cfl_for_spatial_advection' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 320 -! IFI=9, IFJ=4 +! IFI=9, IFJ=4, CFD META => GROUP(9)%FIELD(4)%META META(1)%FSC = 0.01 META(1)%UNITS = '1' META(1)%ENAME = '.cfd' META(1)%VARNM='cfd' META(1)%VARNL='maximum cfl for direction advection' - META(1)%VARNS='maximum_cfl_for_direction_advection' + !META(1)%VARNS='maximum_cfl_for_direction_advection' + META(1)%VARNS='' META(1)%VARNG='maximum_cfl_for_direction_advection' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 320 -! IFI=9, IFJ=5 +! IFI=9, IFJ=5, CFK META => GROUP(9)%FIELD(5)%META META(1)%FSC = 0.01 META(1)%UNITS = '1' META(1)%ENAME = '.cfk' META(1)%VARNM='cfk' META(1)%VARNL='maximum cfl for frequency advection' - META(1)%VARNS='maximum_cfl_for_frequency_advection' + !META(1)%VARNS='maximum_cfl_for_frequency_advection' + META(1)%VARNS='' META(1)%VARNG='maximum_cfl_for_frequency_advection' - META(1)%VMIN = 0 + META(1)%VMIN = 0 META(1)%VMAX = 320 ! ! ------ Group 10 (User defined) ------- diff --git a/model/ftn/w3timemd.ftn b/model/ftn/w3timemd.ftn index 75a5aef32..69ce1ed50 100644 --- a/model/ftn/w3timemd.ftn +++ b/model/ftn/w3timemd.ftn @@ -6,7 +6,7 @@ !/ | WAVEWATCH III NOAA/NCEP | !/ | H. L. Tolman | !/ | FORTRAN 90 | -!/ | Last update : 15-May-2018 | +!/ | Last update : 12-Jan-2021 | !/ +-----------------------------------+ !/ !/ Copyright 2009 National Weather Service (NWS), @@ -48,7 +48,9 @@ ! J2D Subr. Public Convert julian date to date array ! T2D Subr. Public Convert time array to date array ! TSUB I.D. Public Substract two time arrays in days +! TSUBSEC I.D. Public Substract two time arrays in seconds ! U2D Subr. Public Convert time units attribute to date array +! T2ISO Subr. Public Convert time array to ISO time string ! ---------------------------------------------------------------- ! ! 4. Subroutines and functions used : @@ -1547,6 +1549,102 @@ !/ END FUNCTION TSUB +!/ ------------------------------------------------------------------- / + DOUBLE PRECISION FUNCTION TSUBSEC ( T1, T2 ) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | M. Accensi | +!/ | C. Bunney | +!/ | FORTRAN 90 | +!/ | Last update : 18-Jun-2020 | +!/ +-----------------------------------+ +!/ +!/ 15-May-2018 : Origination (adapted from TSUB) ( version 7.12 ) +!/ +! 1. Purpose : +! +! Substract two time arrays to get the time difference in seconds. +! The milliseconds part of the array (index 8) is rounded to the +! nearest whole second. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! T1 I.A. I Time array +! T2 I.A. I Time array +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! STRACE Subr. W3SERVMD Subroutine tracing. +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! Any routine. +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / +!/ + IMPLICIT NONE +!/ +!/ ------------------------------------------------------------------- / +!/ Parameter list +!/ + INTEGER, INTENT(IN) :: T1(8), T2(8) +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER(KIND=8) :: A1, B1, C1, D1, A2, B2, C2, D2 + INTEGER(KIND=8) :: E1, E2 +!/S INTEGER, SAVE :: IENT = 0 +!/ +!/ ------------------------------------------------------------------- / +!/ +!/S CALL STRACE (IENT, 'TSUBSEC') +! + IF (TRIM(CALTYPE) .EQ. '360_day' ) THEN + A1 = (T2(1)-T1(1))*360 + (T2(2)-T1(2))*30 + (T2(3)-T1(3)) + + E1 = 3600.0*T1(5) + 60.0*(T1(6)-T1(4)) + T1(7) + NINT(T1(8) / 1000.0) + E2 = 3600.0*T2(5) + 60.0*(T2(6)-T2(4)) + T2(7) + NINT(T2(8) / 1000.0) +! + TSUBSEC = A1 * 86400 + (E2-E1) + ELSE + A1 = (14-T1(2))/12 + B1 = T1(1) + 4800 - A1 + C1 = T1(2) + 12*A1 - 3 + D1 = T1(3) + (153*C1 + 2)/5 + 365*B1 + IF (TRIM(CALTYPE) .EQ. 'standard' ) THEN + D1 = D1 + B1/4 -B1/100 + B1/400 + ENDIF + E1 = 3600.0*T1(5) + 60.0*(T1(6)-T1(4)) + T1(7) + NINT(T1(8) / 1000.0) +! + A2 = (14-T2(2))/12 + B2 = T2(1) + 4800 - A2 + C2 = T2(2) + 12*A2 - 3 + D2 = T2(3) + (153*C2 + 2)/5 + 365*B2 + IF (TRIM(CALTYPE) .EQ. 'standard' ) THEN + D2 = D2 + B2/4 -B2/100 + B2/400 + ENDIF + E2 = 3600.0*T2(5) + 60.0*(T2(6)-T2(4)) + T2(7) + NINT(T1(8) / 1000.0) +! + TSUBSEC = (D2-D1)*86400 + (E2-E1) + ENDIF +! + RETURN +!/ +!/ End of TSUBSEC ---------------------------------------------------- / +!/ + END FUNCTION TSUBSEC + + !/ ------------------------------------------------------------------- / SUBROUTINE U2D(UNITS,DAT,IERR) @@ -1793,8 +1891,79 @@ DAT(8) = 0 ! force milliseconds to 0 !/ ------------------------------------------------------------------- / +!/ ------------------------------------------------------------------- / + SUBROUTINE T2ISO(TIME,ISODT) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | C. Bunney | +!/ | FORTRAN 90 | +!/ | Last update : 19-Jan-2020 | +!/ +-----------------------------------+ +!/ +!/ 19-Jan-2020 : Origination ( version 7.12 ) +!/ +! 1. Purpose : +! +! Convert time array to ISO8601 format string +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! TIME I.A. I Time array like 'YYYYMMDD HHMMSS' +! ISODT Char. O ISO8601 datetime string +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! STRACE Subr. W3SERVMD Subroutine tracing. +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! Any subroutine/program. +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / +!/ + USE W3SERVMD, ONLY: EXTCDE + USE W3ODATMD, ONLY: NDSE +! + IMPLICIT NONE !/ +!/ ------------------------------------------------------------------- / +!/ Parameter list +!/ + INTEGER,INTENT(IN) :: TIME(2) ! array like 'YYYYMMDD HHMMSS' + CHARACTER(LEN=32),INTENT(OUT) :: ISODT ! ISO date time +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ +!/S INTEGER, SAVE :: IENT = 0 +!/ +!/ ------------------------------------------------------------------- / +!/ +!/S CALL STRACE (IENT, 'T2ISO') +! +!/ + WRITE(ISODT,'(I4,"-",I2.2,"-",I2.2,"T",I2.2,":",I2.2,":",I2.2)') & + TIME(1) / 10000, & + MOD(TIME(1) / 100, 100), & + MOD(TIME(1), 100), & + TIME(2) / 10000, & + MOD(TIME(2) / 100, 100), & + MOD(TIME(2), 100) +!/ +!/ End of T2ISO ------------------------------------------------------ / +!/ + END SUBROUTINE T2ISO + !/ End of module W3TIMEMD -------------------------------------------- / !/ END MODULE W3TIMEMD diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index e4669e2da..c63dec913 100644 --- a/model/ftn/ww3_ounf.ftn +++ b/model/ftn/ww3_ounf.ftn @@ -39,8 +39,13 @@ !/ 03-Nov-2020 : Moved NetCDF metadata to separate ( version 7.12 ) !/ module. !/ 09-Dec-2020 : Set fixed values for VARID indices ( version 7.12 ) +!/ 06-Jan-2021 : Added forecast_period and ( version 7.12 ) +!/ forecast_reference_time variables. +!/ 12-Jan-2021 : Alternative vartype and units for ( version 7.12 ) +!/ time variables. !/ 26-Jan-2021 : Added TP output (derived from fp) ( version 7.12 ) !/ and alternative dir/mag output. +!/ 02-Feb-2021 : Make default global meta optional ( version 7.12 ) !/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ !/ Copyright 2009-2013 National Weather Service (NWS), @@ -137,7 +142,7 @@ USE W3WDATMD, ONLY: W3NDAT, W3SETW USE W3ADATMD, ONLY: W3NAUX, W3SETA USE W3ODATMD, ONLY: W3NOUT, W3SETO - USE W3SERVMD, ONLY : ITRACE, NEXTLN, EXTCDE + USE W3SERVMD, ONLY : ITRACE, NEXTLN, EXTCDE, STR_TO_UPPER !/S USE W3SERVMD, ONLY : STRACE USE W3TIMEMD USE W3IOGRMD, ONLY: W3IOGR @@ -173,7 +178,9 @@ ! USE W3OUNFMETAMD, ONLY: INIT_META, TEARDOWN_META, GETMETA, & WRITE_META, WRITE_GLOBAL_META, & - META_T, NCVARTYPE + WRITE_FREEFORM_META_LIST, & + META_T, NCVARTYPE, CRS_META, CRS_NAME, & + FL_DEFAULT_GBL_META ! USE NETCDF @@ -196,7 +203,8 @@ IOUT, S3, IRET, HASNC4, & NBIPART, CNTIPART, NCVARTYPEI, IPART, & RTDNX, RTDNY - INTEGER :: TOUT(2), TDUM(2), STOPDATE(8) + INTEGER :: TOUT(2), TDUM(2), TREF(2), TEPOCH(2), & + STOPDATE(8), REFDATE(8) ! INTEGER, ALLOCATABLE :: TABIPART(:), NCIDS(:,:,:) ! @@ -206,12 +214,19 @@ ! CHARACTER*30 :: STRSTOPDATE, FILEPREFIX, STRINGIPART CHARACTER*1024 :: FLDOUT - CHARACTER :: COMSTR*1, IDTIME*23, IDDDAY*11 + CHARACTER :: COMSTR*1, IDTIME*23, IDDDAY*11, TTYPE*1 ! LOGICAL :: FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & - VECTOR, TOGETHER, FLGNML + VECTOR, TOGETHER, FLGNML, FLGFC LOGICAL :: SMCGRD = .FALSE. +!/RTD LOGICAL :: RTDL = .FALSE. + + INTEGER :: TVARTYPE = NF90_DOUBLE + CHARACTER(LEN=32) :: EPOCH_ISO + CHARACTER(LEN=64) :: EPOCH + CHARACTER :: TIMEUNIT*1 ! 'D' = days, or 'S' for seconds + !/ !/ ------------------------------------------------------------------- / !/ @@ -240,6 +255,14 @@ !/SMC SMCGRD = .TRUE. ! +!/RTD ! Is the grid really rotated +!/RTD IF ( Polat < 90. ) RTDL = .True. +!/RTD ! +! + ! Default epoch time: + TEPOCH(1) = 19900101 + TEPOCH(2) = 0 +! ! !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! 2. Read model definition file. @@ -280,6 +303,8 @@ READ(NML_FIELD%TIMESTRIDE, *) DTREQ READ(NML_FIELD%TIMECOUNT, *) NOUT READ(NML_FIELD%TIMESTART, *) TOUT(1), TOUT(2) + READ(NML_FIELD%TIMEREF, *) TREF(1), TREF(2) + READ(NML_FIELD%TIMEEPOCH, *) TEPOCH(1), TEPOCH(2) ! 4.2 Output fields FLDOUT = NML_FIELD%LIST @@ -294,7 +319,10 @@ TOGETHER = NML_FIELD%SAMEFILE VECTOR = NML_FIELD%VECTOR FILEPREFIX = NML_FILE%PREFIX + FLGFC = NML_FIELD%FCVARS S3 = NML_FIELD%TIMESPLIT + TTYPE = NML_FIELD%TIMEVAR + TIMEUNIT = NML_FIELD%TIMEUNIT IF(SMCGRD) THEN !/SMC SMCTYPE = NML_SMC%TYPE !/SMC SXO = NML_SMC%SXO @@ -325,6 +353,16 @@ ! 4.1 Time setup READ (NDSI,*,END=801,ERR=802) TOUT, DTREQ, NOUT +! 4.1.1 Forecast period and forecast reference time +! CALL NEXTLN ( COMSTR , NDSI , NDSE ) +! READ (NDSI,*,END=801,ERR=802) FLGFC +! IF( FLGFC ) READ(NDSI,*,END=801,ERR=802) TREF +! + ! ChrisB: Forecast variables flag and reference time + ! only configurable via namelist input. Set forecast + ! reference time to first time here: + TREF = TOUT + ! 4.2 Output fields CALL W3READFLGRD ( NDSI, NDSO, SCREEN, NDSE, COMSTR, FLG1D, & FLG2D, 1, 1, IERR ) @@ -337,8 +375,15 @@ READ (NDSI,'(A)',END=801,ERR=802) STRINGIPART CALL NEXTLN ( COMSTR , NDSI , NDSE ) READ (NDSI,*,END=801,ERR=802) TOGETHER +! ! ChrisB: Vector, Time variable type and time variable units only +! ! configurable via namelist input. Default to DOUBLE and "days since" here: ! CALL NEXTLN ( COMSTR , NDSI , NDSE ) ! READ (NDSI,*,END=801,ERR=802) VECTOR +! CALL NEXTLN ( COMSTR , NDSI , NDSE ) +! READ (NDSI,*,END=801, ERR=802) TTYPE, TIMEUNIT + TTYPE = "D" + TIMEUNIT = "D" + CALL NEXTLN ( COMSTR , NDSI , NDSE ) FILEPREFIX= 'ww3.' READ (NDSI,*,END=801,ERR=802) FILEPREFIX @@ -366,8 +411,41 @@ END IF ! .NOT. FLGNML + + CALL STR_TO_UPPER(TTYPE) + CALL STR_TO_UPPER(TIMEUNIT) + + IF(TIMEUNIT /= 'S' .AND. TIMEUNIT /= 'D') THEN + WRITE(NDSE, 1013) TIMEUNIT + CALL EXTCDE(14) + ENDIF + + SELECT CASE(TTYPE) + CASE('D') + TVARTYPE = NF90_DOUBLE + CASE('I') + TVARTYPE = NF90_INT64 + CASE DEFAULT + WRITE(NDSE, 1014) TTYPE + CALL EXTCDE(14) + END SELECT + + IF(TTYPE .EQ. 'I' .AND. TIMEUNIT .EQ. 'D') THEN + WRITE(NDSE, 1015) + CALL EXTCDE(14) + ENDIF + + ! If TVARTPE is INT64 check that we are using netCDF4: + IF(TVARTYPE .EQ. NF90_INT64 .AND. NCTYPE .LT. 4) THEN + WRITE(NDSE, 1016) + CALL EXTCDE(14) + ENDIF + ! Keep track of original NCVARTYPE, as it may change NCVARTYPEI = NCVARTYPE + + ! Get forecast reference time from TREF + CALL T2D(TREF, REFDATE, IERR) ! ! 4.1 Time setup @@ -388,6 +466,10 @@ IDTIME(21:23) = ' ' WRITE (NDSO,941) IDTIME, NOUT + IF(FLGFC) THEN + CALL STME21 ( TREF , IDTIME ) + WRITE(NDSO,942) IDTIME + ENDIF ! 4.2 Output fields DO IFI=1, NOGRP @@ -405,27 +487,6 @@ ! 4.3 Output type -!! NBIPART=0 -!! DO I=1,29 -!! IF ((STRINGIPART(I:I+1).EQ.'0').OR.(STRINGIPART(I:I+1).EQ.'1') & -!! .OR.(STRINGIPART(I:I+1).EQ.'2').OR.(STRINGIPART(I:I+1).EQ.'3') & -!! .OR.(STRINGIPART(I:I+1).EQ.'4').OR.(STRINGIPART(I:I+1).EQ.'5')) THEN -!! NBIPART=NBIPART+1 -!! END IF -!! END DO -!! ALLOCATE(TABIPART(NBIPART)) -!! CNTIPART=0 -!! DO I=1,29 -!! IF ((STRINGIPART(I:I+1).EQ.'0').OR.(STRINGIPART(I:I+1).EQ.'1') & -!! .OR.(STRINGIPART(I:I+1).EQ.'2').OR.(STRINGIPART(I:I+1).EQ.'3') & -!! .OR.(STRINGIPART(I:I+1).EQ.'4').OR.(STRINGIPART(I:I+1).EQ.'5')) THEN -!! CNTIPART=CNTIPART+1 -!! READ(STRINGIPART(I:I+1),'(I1)') TABIPART(CNTIPART) -!! END IF -!! END DO - - ! Alternative processing of TABIPART to capture requests - ! greater than NOSWLL (C.Bunney): ALLOCATE(TABIPART(NOSWLL + 1)) ALLOCATE(NCIDS(NOGRP,NGRPP,NOSWLL + 1)) NBIPART=0 @@ -474,6 +535,8 @@ !/SMC !/SMC ! Allocate space for coverage array and new MAPSTA array !/SMC ALLOCATE(COV(NXO,NYO), MAPSMC(NXO,NYO)) +!/SMC ELSE IF(SMCTYPE .EQ. 3 .OR. SMCTYPE .EQ. 4) THEN ! Nearest neighbour interpolation +!/SMC CALL READ_SMCINT() !/SMC ENDIF !/SMC !/SMC ! CB: IXN and IXY are calculated by SMC_INTERP for SMC GRID @@ -489,6 +552,8 @@ !/SMC RTDNX = NXO !/SMC RTDNY = NYO !/SMC +!/SMC!/RTD ! SMC type 3/4 outputs are currently on standard pole grid only +!/SMC!/RTD IF(SMCTYPE .EQ. 3 .OR. SMCTYPE .EQ. 4) RTDL = .FALSE. IF(.NOT. SMCGRD) THEN IX1 = MAX ( IX1 , 1 ) @@ -508,7 +573,6 @@ NCIDS(:,:,:) = 0 WRITE (NDSO,970) - ! 5.1 Loops on out_grd.ww3 to read the time and data DO DTEST = DSEC21 ( TIME , TOUT ) @@ -553,8 +617,10 @@ IF (TOGETHER .AND. NCIDS(1,1,1).NE.0) THEN IRET = NF90_REDEF(NCIDS(1,1,1)) CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCIDS(1,1,1),NF90_GLOBAL,'stop_date',STRSTOPDATE) - CALL CHECK_ERR(IRET) + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(NCIDS(1,1,1),NF90_GLOBAL,'stop_date',STRSTOPDATE) + CALL CHECK_ERR(IRET) + ENDIF IRET=NF90_CLOSE(NCIDS(1,1,1)) CALL CHECK_ERR(IRET) END IF @@ -567,8 +633,10 @@ IF (NCIDS(IFI,IFJ,1).NE.0) THEN IRET = NF90_REDEF(NCIDS(IFI,IFJ,1)) CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCIDS(IFI,IFJ,1),NF90_GLOBAL,'stop_date',STRSTOPDATE) - CALL CHECK_ERR(IRET) + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(NCIDS(IFI,IFJ,1),NF90_GLOBAL,'stop_date',STRSTOPDATE) + CALL CHECK_ERR(IRET) + ENDIF IRET=NF90_CLOSE(NCIDS(IFI,IFJ,1)) CALL CHECK_ERR(IRET) END IF ! NCIDS @@ -578,9 +646,10 @@ IF (NCIDS(IFI,IFJ,IPART+1).NE.0) THEN IRET = NF90_REDEF(NCIDS(IFI,IFJ,IPART+1)) CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCIDS(IFI,IFJ,IPART+1),NF90_GLOBAL,'stop_date',STRSTOPDATE) - CALL CHECK_ERR(IRET) - + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(NCIDS(IFI,IFJ,IPART+1),NF90_GLOBAL,'stop_date',STRSTOPDATE) + CALL CHECK_ERR(IRET) + ENDIF IRET=NF90_CLOSE(NCIDS(IFI,IFJ,IPART+1)) CALL CHECK_ERR(IRET) END IF ! NCIDS @@ -595,8 +664,10 @@ IF (NCIDS(IFI,IFJ,1).NE.0) THEN IRET = NF90_REDEF(NCIDS(IFI,IFJ,1)) CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCIDS(IFI,IFJ,1),NF90_GLOBAL,'stop_date',STRSTOPDATE) - CALL CHECK_ERR(IRET) + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(NCIDS(IFI,IFJ,1),NF90_GLOBAL,'stop_date',STRSTOPDATE) + CALL CHECK_ERR(IRET) + ENDIF IRET=NF90_CLOSE(NCIDS(IFI,IFJ,1)) CALL CHECK_ERR(IRET) END IF ! NCIDS @@ -648,6 +719,7 @@ ' First time : ',A) 941 FORMAT ( ' Interval : ',A/ & ' Number of requests : ',I10) + 942 FORMAT ( ' Reference time : ',A) 944 FORMAT (/' End of file reached '/) 946 FORMAT ( ' ',A,2X,A) ! @@ -679,6 +751,8 @@ 999 FORMAT (/' End of program '/ & ' ========================================='/ & ' WAVEWATCH III Field output '/) +! +! Error format strings ! 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNF : '/ & ' ERROR IN OPENING INPUT FILE'/ & @@ -691,16 +765,35 @@ ' ERROR IN READING FROM INPUT FILE'/ & ' IOSTAT =',I5/) ! - 1003 FORMAT (/' *** WAVEWATCH III WERROR IN W3EXNC : '/ & + 1003 FORMAT (/' *** WAVEWATCH III WERROR IN W3OUNF : '/ & ' OUT OF RANGE REQUEST FOR NBIPART =',I2, / & ' MAX SWELL PARTITIONS (NOSW) =',I2 /) ! 1010 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNF : '/ & ' ILLEGAL TYPE, NCTYPE =',I4/) +! 1012 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNF : '/ & ' NCTYPE = 4 BUT NOT COMPILED WITH NC4'/) ! - 1500 FORMAT (/' *** WAVEWATCH III WARNING IN W3EXNC : '/ & + 1013 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNF : '/ & + ' TIMEUNITS MUST BE ONE OF "S" OR "D"' / & + ' GOT: ',A /) +! + 1014 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNF : '/ & + ' TIMEVAR TYPE MUST BE ONE OF "I" OR "D"' / & + ' GOT: ',A /) +! + 1015 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNF : '/ & + ' CANNONT HAVE TIME UNITS OF DAYS WITH'/ & + ' TIME VARYTPE OF INT64' /) +! + 1016 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNF : '/ & + ' INT64 TIME ENCODING REQUIRES NETCDF4' / & + ' FILE FORMAT' /) +! +! Warning format strings +! + 1500 FORMAT (/' *** WAVEWATCH III WARNING IN W3OUNF : '/ & ' IGNORING REQUEST FOR IPART =',I2, / & ' MAX SWELL PARTITIONS (NOSW) =',I2 /) ! @@ -732,6 +825,7 @@ !/ 09-Dec-2020 : Set fixed values for VARID indices ( version 7.12 ) !/ 26-Jan-2021 : Added TP output (derived from fp) ( version 7.12 ) !/ and alternative dir/mag output. +!/ 02-Feb-2021 : Make default global meta optional ( version 7.12 ) !/ 22-Mar-2021 : New coupling fields output ( version 7.xx ) !/ ! 1. Purpose : @@ -830,7 +924,8 @@ INTEGER :: DIMID(6), VARID(300), START(4), & COUNT(4), DIMLN(6),START1D(2), & COUNT1D(2), DIMFIELD(3), & - STARTDATE(8), CURDATE(8), REFDATE(8), & + STARTDATE(8), CURDATE(8), & + EPOCHDATE(8), & MAP(NX+1,NY), MP2(NX+1,NY) ! !/NC4 INTEGER :: DEFLATE=1 @@ -854,6 +949,7 @@ MXYR(:,:), AUX1(:) ! DOUBLE PRECISION :: OUTJULDAY + INTEGER(KIND=8) :: OUTSECS DOUBLE PRECISION :: SXD, SYD, X0D, Y0D ! CHARACTER*120 :: STR2 @@ -861,7 +957,7 @@ !CHARACTER*30 :: UNITVAR(3),FORMAT1 CHARACTER*30 :: FORMAT1 CHARACTER*30 :: STRSTARTDATE - CHARACTER :: FNAMENC*50, & + CHARACTER :: FNAMENC*128, & FORMF*11 CHARACTER, SAVE :: OLDTIMEID*16 = '0000000000000000' CHARACTER, SAVE :: TIMEID*16 = '0000000000000000' @@ -869,9 +965,6 @@ LOGICAL :: FLFRQ, FLDIR, FEXIST, FREMOVE LOGICAL :: CUSTOMFRQ=.FALSE. !/T LOGICAL :: LTEMP(NGRPP) -!/RTD ! RTDL == False for a standard lat-lon grid. Will be set to True if the -!/RTD ! grid is rotated -!/RTD LOGICAL :: RTDL = .FALSE. TYPE(META_T) :: META(3) !TYPE(META_T) :: META @@ -881,9 +974,6 @@ ! !/S CALL STRACE (IENT, 'W3EXNC') ! -!/RTD ! Is the grid really rotated -!/RTD IF ( Polat < 90. ) RTDL = .True. -!/RTD ! !/T DO IFI=1, NOGRP !/T LTEMP = FLG2D(IFI,:) !/T WRITE (NDST,9000) IFI, LTEMP @@ -928,7 +1018,19 @@ NCID = 0 ! ! - CALL U2D('days since 1990-01-01 00:00:00',REFDATE,IERR) + !CHRISB: Allow alternative time units: + CALL T2ISO(TEPOCH, EPOCH_ISO) + SELECT CASE(TIMEUNIT) + CASE('D') + EPOCH = 'days since ' // EPOCH_ISO + CASE('S') + EPOCH = 'seconds since ' // EPOCH_ISO + CASE DEFAULT + PRINT*,'Unknown time units: ', TIMEUNIT + CALL EXTCDE(10) + END SELECT + + CALL U2D(EPOCH, EPOCHDATE, IERR) ! 1.1 Set-up transfer files MFILL = NF90_FILL_SHORT @@ -1021,13 +1123,8 @@ ! ! Depth IF ( IFI .EQ. 1 .AND. IFJ .EQ. 1 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( DW(1:NSEA), X1 ) - ELSE ! IF(SMCGRD) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, DW(1:NSEA) & - , MAPSF, X1 ) - ENDIF -! + CALL S2GRID(DW(1:NSEA), X1) + ! Surface current ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 2 ) THEN !! Note - CX and CY read in from .ww3 file are X-Y vectors @@ -1039,15 +1136,8 @@ TOLERANCE=0.05, CONV='O') ENDIF ! - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( CX(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( CY(1:NSEA), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CX(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CY(1:NSEA) & - , MAPSF, XY ) - ENDIF + CALL S2GRID(CX(1:NSEA), XX) + CALL S2GRID(CY(1:NSEA), XY) NFIELD=2 ! ! Wind @@ -1061,49 +1151,25 @@ TOLERANCE=1.0, CONV='N') ENDIF ! - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( UA(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( UD(1:NSEA), XY ) - ELSE ! IF(SMCGRD) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, UA(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, UD(1:NSEA) & - , MAPSF, XY ) - ENDIF + CALL S2GRID(UA(1:NSEA), XX) + CALL S2GRID(UD(1:NSEA), XY) NFIELD=2 ! ! Air-sea temperature difference ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 4 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC(AS(1:NSEA), X1) - ELSE ! IF(SMCGRD) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, AS(1:NSEA) & - , MAPSF, X1 ) - ENDIF + CALL S2GRID(AS(1:NSEA), X1) ! ! Sea surface height above sea level ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 5 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC(WLV, X1) - ELSE ! IF(SMCGRD) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WLV , MAPSF, X1 ) - ENDIF + CALL S2GRID(WLV, X1) ! ! Sea ice area fraction ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 6 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC(ICE, X1) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, ICE(1:NSEA), MAPSF, X1 ) - ENDIF -! + CALL S2GRID(ICE(1:NSEA), X1) + ! Icebergs_damping ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 7 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC(BERG, X1) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, BERG , MAPSF, X1 ) - ENDIF + CALL S2GRID(BERG, X1) WHERE ( X1.NE.UNDEF) X1 = X1*0.1 ! ! Atmospheric momentum @@ -1133,170 +1199,113 @@ ! !/BT4 ! Krumbein phi scale !/BT4 ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN -!/BT4 CALL W3S2XY ( NSEA, NSEA, NX+1, NY, SED_D50 , MAPSF, X1 ) +!/BT4 CALL S2GRID(SED_D50, X1) !/BT4 WHERE ( X1.NE.UNDEF) X1 = -LOG(X1/0.001)/LOG2 !/BT4 NFIELD=1 ! !/IS2 ! Ice thickness !/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 11 ) THEN -!/IS2 CALL W3S2XY (NSEA, NSEA, NX+1, NY, ICEH(1:NSEA), MAPSF, X1 ) +!/IS2 CALL S2GRID(ICEH(1:NSEA), X1) !/IS2 NFIELD=1 ! !/IS2 ! Maximum ice floe diameter !/IS2 ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 12 ) THEN -!/IS2 CALL W3S2XY (NSEA, NSEA, NX+1, NY, ICEF(1:NSEA), MAPSF, X1 ) +!/IS2 CALL S2GRID(ICEF(1:NSEA), X1) !/IS2 NFIELD=1 ! Significant wave height ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 1 ) THEN IF (NCVARTYPEI.EQ.3) NCVARTYPE=2 - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( HS, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HS , MAPSF, X1 ) - ENDIF + CALL S2GRID(HS, X1) ! Mean wave length ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 2 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC(WLM, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WLM, MAPSF, X1 ) - ENDIF + CALL S2GRID(WLM, X1) ! ! Mean period T02 ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 3 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( T02, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, T02, MAPSF, X1 ) - ENDIF + CALL S2GRID(T02, X1) ! ! Mean period T0m1 ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 4 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( T0M1, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, T0M1, MAPSF, X1 ) - ENDIF + CALL S2GRID(T0M1, X1) ! ! Mean period T01 ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 5 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( T01, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, T01 , MAPSF, X1 ) - ENDIF + CALL S2GRID(T01, X1) ! ! Wave peak frequency ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 6 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC(FP0, X1) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, FP0 , MAPSF, X1 ) - ENDIF + CALL S2GRID(FP0, X1) ! ! Wave mean direction ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 7 ) THEN !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, THM, AnglD, .FALSE.) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( THM, X1, .TRUE. ) - ELSE - DO ISEA=1, NSEA - IF ( THM(ISEA) .NE. UNDEF ) THEN - THM(ISEA) = MOD ( 630. - RADE*THM(ISEA) , 360. ) - END IF - END DO - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, THM, MAPSF, X1 ) - ENDIF + + CALL S2GRID(THM, X1, .TRUE.) +! IF( SMCGRD ) THEN +!!/SMC CALL W3S2XY_SMC( THM, X1, .TRUE. ) +! ELSE +! DO ISEA=1, NSEA +! IF ( THM(ISEA) .NE. UNDEF ) THEN +! THM(ISEA) = MOD ( 630. - RADE*THM(ISEA) , 360. ) +! END IF +! END DO +! CALL W3S2XY ( NSEA, NSEA, NX+1, NY, THM, MAPSF, X1 ) +! ENDIF ! ! Directional spread ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 8 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( THS, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, THS , MAPSF, X1 ) - ENDIF + CALL S2GRID(THS, X1) ! ! Peak direction ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 9 ) THEN !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, THP0, AnglD, .FALSE.) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( THP0, X1, .TRUE. ) - ELSE - DO ISEA=1, NSEA - IF ( THP0(ISEA) .NE. UNDEF ) THEN - THP0(ISEA) = MOD ( 630-RADE*THP0(ISEA) , 360. ) - END IF - END DO - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, THP0 , MAPSF, X1 ) - ENDIF + CALL S2GRID(THP0, X1, .TRUE.) +! IF( SMCGRD ) THEN +!!/SMC CALL W3S2XY_SMC( THP0, X1, .TRUE. ) +! ELSE +! DO ISEA=1, NSEA +! IF ( THP0(ISEA) .NE. UNDEF ) THEN +! THP0(ISEA) = MOD ( 630-RADE*THP0(ISEA) , 360. ) +! END IF +! END DO +! CALL W3S2XY ( NSEA, NSEA, NX+1, NY, THP0 , MAPSF, X1 ) +! ENDIF ! ! Infragravity wave height ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 10 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( HSIG, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HSIG, MAPSF, X1 ) - ENDIF + CALL S2GRID(HSIG, X1) ! ! Expected maximum sea surface elevation ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 11 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( STMAXE, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, STMAXE, MAPSF, X1 ) - ENDIF + CALL S2GRID(STMAXE, X1) ! ! Standard deviation of maximum sea surface elevation ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 12 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( STMAXD, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, STMAXD, MAPSF, X1 ) - ENDIF + CALL S2GRID(STMAXD, X1) ! ! Expected maximum wave height ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 13 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( HMAXE, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HMAXE, MAPSF, X1 ) - ENDIF + CALL S2GRID(HMAXE, X1) ! ! Expected maximum wave height from crest ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 14 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( HCMAXE, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HCMAXE, MAPSF, X1 ) - ENDIF + CALL S2GRID(HCMAXE, X1) ! ! STD of maximum wave height ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 15 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( HMAXD, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HMAXD, MAPSF, X1 ) - ENDIF + CALL S2GRID(HMAXD, X1) ! ! STD of maximum wave height from crest ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 16 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( HCMAXD, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, HCMAXD, MAPSF, X1 ) - ENDIF + CALL S2GRID(HCMAXD, X1) ! ! Dominant wave breaking probability ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 17 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( WBT, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WBT, MAPSF, X1 ) - END IF + CALL S2GRID(WBT, X1) ! ! Wave peak period (derived from peak freq field) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 18 ) THEN @@ -1307,11 +1316,8 @@ AUX1(I) = UNDEF ENDIF ENDDO - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC(AUX1, X1) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, AUX1, MAPSF, X1 ) - ENDIF +! + CALL S2GRID(AUX1, X1) ! ! Mean wave number ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 19 ) THEN @@ -1328,14 +1334,10 @@ I1F=E3DF(2,1) I2F=E3DF(3,1) DO IK=I1F,I2F - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( EF(:,IK), XX ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,EF(:,IK),MAPSF, XX ) - ENDIF + CALL S2GRID(EF(:,IK), XX) IF (NCVARTYPE.EQ.2) WHERE ( XX.GE.0.) XX = ALOG10(XX+1E-12) XK(:,:,IK)=XX - END DO + END DO ! ! Mean wave direction frequency spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 2 ) THEN @@ -1346,13 +1348,9 @@ DO IK=I1F,I2F !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, TH1M(:,IK), AnglD, .FALSE.) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( TH1M(:,IK), XX ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,TH1M(:,IK),MAPSF, XX ) - ENDIF + CALL S2GRID(TH1M(:,IK), XX) XK(:,:,IK)=XX - END DO + END DO ! ! Spreading frequency spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 3 ) THEN @@ -1361,13 +1359,9 @@ I1F=E3DF(2,3) I2F=E3DF(3,3) DO IK=I1F,I2F - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( STH1M(:,IK), XX ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,STH1M(:,IK),MAPSF, XX ) - ENDIF + CALL S2GRID(STH1M(:,IK), XX) XK(:,:,IK)=XX - END DO + END DO ! ! Second mean wave direction frequency spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 4 ) THEN @@ -1378,13 +1372,9 @@ DO IK=I1F,I2F !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, TH2M(:,IK), AnglD, .FALSE.) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( TH2M(:,IK), XX ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,TH2M(:,IK),MAPSF, XX ) - ENDIF + CALL S2GRID(TH2M(:,IK), XX) XK(:,:,IK)=XX - END DO + END DO ! ! Second spreading frequency spectrum ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 5 ) THEN @@ -1393,13 +1383,9 @@ I1F=E3DF(2,5) I2F=E3DF(3,5) DO IK=I1F,I2F - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( STH2M(:,IK), XX ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,STH2M(:,IK),MAPSF, XX ) - ENDIF + CALL S2GRID(STH2M(:,IK), XX) XK(:,:,IK)=XX - END DO + END DO ! ! Wave numbers ELSE IF ( IFI .EQ. 3 .AND. IFJ .EQ. 6 ) THEN @@ -1408,184 +1394,117 @@ I1F=1 I2F=NK DO IK=1,NK - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( WN(IK,:), XX ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WN(IK,:), MAPSF, XX ) - ENDIF + CALL S2GRID(WN(IK,:), XX) XK(:,:,IK)=XX END DO ! ! Partition wave significant height ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 1 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PHS(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHS(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PHS(:,IPART), X1) ! ! Partition peak period ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 2 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PTP(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PTP(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PTP(:,IPART), X1) ! Partition peak wave length ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 3 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PLP(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PLP(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PLP(:,IPART), X1) ! ! Partition wave mean direction ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 4 ) THEN !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, PDIR(:,IPART), AnglD, .FALSE.) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PDIR(:,IPART), X1, .TRUE. ) - ELSE - DO ISEA=1, NSEA - IF ( PDIR(ISEA,IPART) .NE. UNDEF ) THEN - PDIR(ISEA,IPART) = MOD ( 630-RADE*PDIR(ISEA,IPART) , 360. ) - END IF - END DO - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PDIR(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PDIR(:,IPART), X1, .TRUE.) +! IF( SMCGRD ) THEN +!!/SMC CALL W3S2XY_SMC( PDIR(:,IPART), X1, .TRUE. ) +! ELSE +! DO ISEA=1, NSEA +! IF ( PDIR(ISEA,IPART) .NE. UNDEF ) THEN +! PDIR(ISEA,IPART) = MOD ( 630-RADE*PDIR(ISEA,IPART) , 360. ) +! END IF +! END DO +! CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PDIR(:,IPART), MAPSF, X1 ) +! ENDIF ! ! Partition directional spread ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 5 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PSI(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PSI(:,IPART), MAPSF, X1 ) - ENDIF - + CALL S2GRID(PSI(:,IPART), X1) +! ! Partition wind sea fraction ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 6 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PWS(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PWS(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PWS(:,IPART), X1) ! ! Partition peak direction ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 7 ) THEN !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, PTHP0(:,IPART), AnglD, .FALSE.) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PTHP0(:,IPART), X1, .TRUE. ) - ELSE - DO ISEA=1, NSEA - IF ( PTHP0(ISEA,IPART) .NE. UNDEF ) THEN - PTHP0(ISEA,IPART) = MOD ( 630-RADE*PTHP0(ISEA,IPART) , 360. ) - END IF - END DO - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PTHP0(:,IPART), MAPSF, X1 ) - END IF + CALL S2GRID(PTHP0(:,IPART), X1, .TRUE.) +! IF( SMCGRD ) THEN +!!/SMC CALL W3S2XY_SMC( PTHP0(:,IPART), X1, .TRUE. ) +! ELSE +! DO ISEA=1, NSEA +! IF ( PTHP0(ISEA,IPART) .NE. UNDEF ) THEN +! PTHP0(ISEA,IPART) = MOD ( 630-RADE*PTHP0(ISEA,IPART) , 360. ) +! END IF +! END DO +! CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PTHP0(:,IPART), MAPSF, X1 ) +! END IF ! ! Partition peakedness ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 8 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PQP(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PQP(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PQP(:,IPART), X1) ! ! Partition peak enhancement factor ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 9 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PPE(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PPE(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PPE(:,IPART), X1) ! ! Partition frequency width ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 10 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PGW(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PGW(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PGW(:,IPART), X1) ! ! Partition spectral width ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 11 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PSW(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PSW(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PSW(:,IPART), X1) ! ! Partition mean period Tm10 ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 12 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PTM1(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PTM1(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PTM1(:,IPART), X1) ! ! Partition mean period T01 ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 13 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PT1(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PT1(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PT1(:,IPART), X1) ! ! Partition mean period T02 ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 14 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PT2(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PT2(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PT2(:,IPART), X1) ! ! Partition energy at peak frequency ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 15 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PEP(:,IPART), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PEP(:,IPART), MAPSF, X1 ) - ENDIF + CALL S2GRID(PEP(:,IPART), X1) NFIELD=1 ! ! Partition wind sea fraction ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 16 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PWST(:), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PWST(:), MAPSF, X1 ) - ENDIF + CALL S2GRID(PWST(:), X1) ! ! Number of wave partitions ELSE IF ( IFI .EQ. 4 .AND. IFJ .EQ. 17 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PNR(:), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PNR(:), MAPSF, X1 ) - ENDIF + CALL S2GRID(PNR(:), X1) ! ! Friction velocity ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 1 ) THEN !! Note - UST and USTDIR read in from .ww3 file are X-Y vectors DO ISEA=1, NSEA - UABS = SQRT(UST(ISEA)**2+USTDIR(ISEA)**2) - IF (UABS.GE.10.) THEN + UABS = SQRT(UST(ISEA)**2+USTDIR(ISEA)**2) + IF (UABS.GE.10.) THEN UST(ISEA)=UNDEF USTDIR(ISEA)=UNDEF - END IF - END DO + END IF + END DO !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, UST(1:NSEA), USTDIR(1:NSEA), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( UST(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( USTDIR(1:NSEA), XY ) - ELSE - CALL W3S2XY (NSEA,NSEA,NX+1,NY, UST (1:NSEA), MAPSF, XX ) - CALL W3S2XY (NSEA,NSEA,NX+1,NY, USTDIR(1:NSEA), MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(UST(1:NSEA), XX) + CALL S2GRID(USTDIR(1:NSEA), XY) !! Commented out unnecessary statements below for time being !! UST,USTDIR are in north-east convention and X1,X2 !! are not actually written out below @@ -1608,43 +1527,25 @@ ! ! Charnock coefficient ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 2 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( CHARN(1:NSEA), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CHARN(1:NSEA), MAPSF, X1 ) - ENDIF ! SMCGRD + CALL S2GRID(CHARN(1:NSEA), X1) ! ! Wave energy flux ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 3 ) THEN CGE=CGE*0.001 ! from W / m to kW / m - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( CGE(1:NSEA), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CGE(1:NSEA), MAPSF, X1 ) - ENDIF ! SMCGRD + CALL S2GRID(CGE(1:NSEA), X1) ! ! Wind to wave energy flux ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 4 ) THEN IF (NCVARTYPEI.EQ.3) NCVARTYPE=4 - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PHIAW(1:NSEA), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHIAW(1:NSEA) , MAPSF, X1 ) - ENDIF ! SMCGRD + CALL S2GRID(PHIAW(1:NSEA), X1) ! ! Wave supported wind stress ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 5 ) THEN !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUWIX(1:NSEA), TAUWIY(1:NSEA), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( TAUWIX(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( TAUWIY(1:NSEA), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUWIX(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUWIY(1:NSEA) & - , MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(TAUWIX(1:NSEA), XX) + CALL S2GRID(TAUWIY(1:NSEA), XY) + !! Commented out unnecessary statements below for time being !! TAUWIX, TAUWIY are in north-east convention and X1,X2 !! are not actually written out below @@ -1666,130 +1567,66 @@ ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 6 ) THEN !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUWNX(1:NSEA), TAUWNY(1:NSEA), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( TAUWNX(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( TAUWNY(1:NSEA), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUWNX(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUWNY(1:NSEA) & - , MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(TAUWNX(1:NSEA), XX) + CALL S2GRID(TAUWNY(1:NSEA), XY) NFIELD=2 ! ! Whitecap coverage ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 7 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( WHITECAP(1:NSEA,1), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WHITECAP(1:NSEA,1) & - , MAPSF, X1 ) - ENDIF ! SMCGRD + CALL S2GRID(WHITECAP(1:NSEA,1), X1) ! ! Whitecap foam thickness ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 8 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( WHITECAP(1:NSEA,2), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WHITECAP(1:NSEA,2) & - , MAPSF, X1 ) - ENDIF + CALL S2GRID(WHITECAP(1:NSEA,2), X1) ! ! Significant breaking wave height ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 9 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( WHITECAP(1:NSEA,3), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WHITECAP(1:NSEA,3) & - , MAPSF, X1 ) - ENDIF ! SMCGRD + CALL S2GRID(WHITECAP(1:NSEA,3), X1) ! ! Whitecap moment ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 10 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( WHITECAP(1:NSEA,4), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, WHITECAP(1:NSEA,4) & - , MAPSF, X1 ) - ENDIF ! SMCGRD + CALL S2GRID(WHITECAP(1:NSEA,4), X1) ! ! Wind sea mean period T0M1 ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 11 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( TWS(1:NSEA), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TWS(1:NSEA), MAPSF, X1 ) - ENDIF ! SMCGRD + CALL S2GRID(TWS(1:NSEA), X1) ! ! Radiation stress ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 1 ) THEN !/RTD ! Radition stress components are always left on rotated pole !/RTD ! at present - need to confirm how to de-rotate - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( SXX(1:NSEA), X1 ) -!/SMC CALL W3S2XY_SMC( SYY(1:NSEA), X2 ) -!/SMC CALL W3S2XY_SMC( SXY(1:NSEA), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, SXX(1:NSEA) & - , MAPSF, X1 ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, SYY(1:NSEA) & - , MAPSF, X2 ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, SXY(1:NSEA) & - , MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(SXX(1:NSEA), X1) + CALL S2GRID(SYY(1:NSEA), X2) + CALL S2GRID(SXY(1:NSEA), XY) NFIELD=3 ! ! Wave to ocean stress ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 2 ) THEN !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUOX(1:NSEA), TAUOY(1:NSEA), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( TAUOX(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( TAUOY(1:NSEA), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUOX(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUOY(1:NSEA) & - , MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(TAUOX(1:NSEA), XX) + CALL S2GRID(TAUOY(1:NSEA), XY) NFIELD=2 ! ! Radiation pressure (Bernouilli Head) ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 3 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( BHD(1:NSEA), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, BHD(1:NSEA) & - , MAPSF, X1 ) - ENDIF ! SMCGRD + CALL S2GRID(BHD(1:NSEA), X1) ! ! Wave to ocean energy flux ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 4 ) THEN IF (NCVARTYPEI.EQ.3) NCVARTYPE=4 DO ISEA=1, NSEA - PHIOC(ISEA)=MIN(3000.,PHIOC(ISEA)) - END DO - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PHIOC(1:NSEA), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHIOC(1:NSEA) & - , MAPSF, X1 ) - ENDIF ! SMCGRD + PHIOC(ISEA)=MIN(3000.,PHIOC(ISEA)) + END DO + CALL S2GRID(PHIOC(1:NSEA), X1) ! ! Stokes transport ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 5 ) THEN !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TUSX(1:NSEA), TUSY(1:NSEA), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( TUSX(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( TUSY(1:NSEA), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TUSX(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TUSY(1:NSEA) & - , MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(TUSX(1:NSEA), XX) + CALL S2GRID(TUSY(1:NSEA), XY) ! X1, X2 will not be output when NFIELD == 2 ! ( Like for .cur, .wnd, .ust, .taw, and .uss ) (CHA at FCOO 2019-06-13): !! Commented out unnecessary statements below for time being @@ -1816,20 +1653,13 @@ ! Surface stokes drift ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 6 ) THEN DO ISEA=1, NSEA - USSX(ISEA)=MAX(-0.9998,MIN(0.9998,USSX(ISEA))) - USSY(ISEA)=MAX(-0.9998,MIN(0.9998,USSY(ISEA))) - END DO + USSX(ISEA)=MAX(-0.9998,MIN(0.9998,USSX(ISEA))) + USSY(ISEA)=MAX(-0.9998,MIN(0.9998,USSY(ISEA))) + END DO !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, USSX(1:NSEA), USSY(1:NSEA), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( USSX(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( USSY(1:NSEA), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, USSX(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, USSY(1:NSEA) & - , MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(USSX(1:NSEA), XX) + CALL S2GRID(USSY(1:NSEA), XY) !! Commented out unnecessary statements below for time being !! TAUWIX, TAUWIY are in north-east convention and X1,X2 !! are not actually written out below @@ -1850,15 +1680,8 @@ ! Power spectral density of equivalent surface pressure ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 7 ) THEN NFIELD=2 - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PRMS(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( TPMS(1:NSEA), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PRMS(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TPMS(1:NSEA) & - , MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(PRMS(1:NSEA), XX) + CALL S2GRID(TPMS(1:NSEA), XY) ! ! Spectral variance of surface stokes drift ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 8 ) THEN @@ -1870,13 +1693,8 @@ DO IK= I1F,I2F !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, US3D(:,IK), US3D(:,NK+IK), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( US3D(:,IK), XX ) -!/SMC CALL W3S2XY_SMC( US3D(:,NK+IK), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,US3D(:,IK), MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,US3D(:,NK+IK), MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(US3D(:,IK), XX) + CALL S2GRID(US3D(:,NK+IK), XY) XXK(:,:,IK)=XX XYK(:,:,IK)=XY END DO @@ -1888,11 +1706,8 @@ I1F=P2MSF(2) I2F=P2MSF(3) DO IK=I1F,I2F - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( P2SMS(:,IK), XX ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,P2SMS(:,IK),MAPSF, XX ) - ENDIF ! SMCGRD + CALL S2GRID(P2SMS(:,IK), XX) + IF (NCVARTYPE.EQ.2) THEN WHERE ( XX.GE.0.) XX = ALOG10(XX*(DWAT*GRAV)**2+1E-12) ELSE @@ -1906,36 +1721,24 @@ ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 10 ) THEN !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUICE(1:NSEA,1), TAUICE(1:NSEA,2), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( TAUICE(1:NSEA,1), XX ) -!/SMC CALL W3S2XY_SMC( TAUICE(1:NSEA,2), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUICE(1:NSEA,1) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUICE(1:NSEA,2) & - , MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(TAUICE(1:NSEA,1), XX) + CALL S2GRID(TAUICE(1:NSEA,2), XY) NFIELD=2 ! ! Wave to sea ice energy flux ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 11 ) THEN IF (NCVARTYPEI.EQ.3) NCVARTYPE=4 DO ISEA=1, NSEA - PHIOC(ISEA)=MIN(3000.,PHIOC(ISEA)) - END DO - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( PHICE(1:NSEA), X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHICE(1:NSEA) & - , MAPSF, X1 ) - ENDIF ! SMCGRD - + PHIOC(ISEA)=MIN(3000.,PHIOC(ISEA)) + END DO + CALL S2GRID(PHICE(1:NSEA), X1) +! ! Partitioned surface stokes drift ELSE IF ( IFI .EQ. 6 .AND. IFJ .EQ. 12 ) THEN ! Information for spectral distribution of surface Stokes drift (2nd file) FLFRQ=.TRUE. IF (USSPF(1)==1) THEN - CUSTOMFRQ=.TRUE. + CUSTOMFRQ=.TRUE. ENDIF NFIELD=2 I1F=1 @@ -1943,15 +1746,10 @@ DO IK= I1F,I2F !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, USSP(:,IK), USSP(:,NK+IK), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( USSP(:,IK), XX ) -!/SMC CALL W3S2XY_SMC( USSP(:,NK+IK), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,USSP(:,IK), MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,USSP(:,NK+IK), MAPSF, XY ) - ENDIF ! SMCGRD - XXK(:,:,IK)=XX - XYK(:,:,IK)=XY + CALL S2GRID(USSP(:,IK), XX) + CALL S2GRID(USSP(:,NK+IK), XY) + XXK(:,:,IK) = XX + XYK(:,:,IK) = XY END DO ! ! Total momentum to the ocean @@ -1974,15 +1772,8 @@ ! NB: ABA and ABD are the X and Y components of the bottom displacement !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, ABA(1:NSEA), ABD(1:NSEA), AnglD) - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( ABA(1:NSEA), XX ) -!/SMC CALL W3S2XY_SMC( ABD(1:NSEA), XY ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, ABA(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, ABD(1:NSEA) & - , MAPSF, XY ) - ENDIF ! SMCGRD + CALL S2GRID(ABA(1:NSEA), XX) + CALL S2GRID(ABD(1:NSEA), XY) NFIELD=2 ! ! RMS of bottom velocity amplitude @@ -1990,10 +1781,8 @@ ! NB: UBA and UBD are the X and Y components of the bottom velocity !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, UBA(1:NSEA), UBD(1:NSEA), AnglD) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, UBA(1:NSEA) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, UBD(1:NSEA) & - , MAPSF, XY ) + CALL S2GRID(UBA(1:NSEA), XX) + CALL S2GRID(UBD(1:NSEA), XY) NFIELD=2 ! ! Bottom roughness @@ -2001,44 +1790,38 @@ !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, BEDFORMS(1:NSEA,2), & !/RTD BEDFORMS(1:NSEA,3), AnglD) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, BEDFORMS(1:NSEA,1) & - , MAPSF, X1 ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, BEDFORMS(1:NSEA,2) & - , MAPSF, X2 ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, BEDFORMS(1:NSEA,3) & - , MAPSF, XY ) + CALL S2GRID(BEDFORMS(1:NSEA,1), X1) + CALL S2GRID(BEDFORMS(1:NSEA,2), X2) + CALL S2GRID(BEDFORMS(1:NSEA,3), XY) NFIELD=3 ! ! Wave dissipation in bottom boundary layer ELSE IF ( IFI .EQ. 7 .AND. IFJ .EQ. 4 ) THEN - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, PHIBBL(1:NSEA) & - , MAPSF, X1 ) + CALL S2GRID(PHIBBL(1:NSEA), X1) ! ! Wave to bottom boundary layer stress ELSE IF ( IFI .EQ. 7 .AND. IFJ .EQ. 5 ) THEN !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, TAUBBL(1:NSEA,1), & !/RTD TAUBBL(1:NSEA,2), AnglD) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUBBL(1:NSEA,1) & - , MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, TAUBBL(1:NSEA,2) & - , MAPSF, XY ) + CALL S2GRID(TAUBBL(1:NSEA,1), XX) + CALL S2GRID(TAUBBL(1:NSEA,2), XY) NFIELD=2 ! ! Mean square slope ELSE IF ( IFI .EQ. 8 .AND. IFJ .EQ. 1 ) THEN !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, MSSX, MSSY, AnglD) - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,MSSX,MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,MSSY,MAPSF, XY ) + CALL S2GRID(MSSX, XX) + CALL S2GRID(MSSY, XY) NFIELD=2 ! ! Phillips constant ELSE IF ( IFI .EQ. 8 .AND. IFJ .EQ. 2 ) THEN !/RTD ! Rotate x,y vector back to standard pole !/RTD IF ( FLAGUNR ) CALL W3XYRTN(NSEA, MSCX, MSCY, AnglD) - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,MSCX,MAPSF, XX ) - CALL W3S2XY ( NSEA, NSEA, NX+1,NY,MSCY,MAPSF, XY ) + CALL S2GRID(MSCX, XX) + CALL S2GRID(MSCY, XY) NFIELD=2 ! ! u direction for mss @@ -2048,9 +1831,9 @@ DO ISEA=1, NSEA IF ( MSSD(ISEA) .NE. UNDEF ) THEN MSSD(ISEA) = MOD ( 630. - RADE*MSSD(ISEA) , 180. ) - END IF - END DO - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, MSSD , MAPSF, X1 ) + END IF + END DO + CALL S2GRID(MSSD, X1) ! ! x direction for msc ELSE IF ( IFI .EQ. 8 .AND. IFJ .EQ. 4 ) THEN @@ -2059,48 +1842,43 @@ DO ISEA=1, NSEA IF ( MSCD(ISEA) .NE. UNDEF ) THEN MSCD(ISEA) = MOD ( 630. - RADE*MSCD(ISEA) , 180. ) - END IF - END DO - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, MSCD , MAPSF, X1 ) + END IF + END DO + CALL S2GRID(MSCD, X1) ! ! Peakedness ELSE IF ( IFI .EQ. 8 .AND. IFJ .EQ. 5 ) THEN - IF( SMCGRD ) THEN -!/SMC CALL W3S2XY_SMC( QP, X1 ) - ELSE - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, QP, MAPSF, X1 ) - ENDIF + CALL S2GRID(QP, X1) ! ! Dynamic time step ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 1 ) THEN DO ISEA=1, NSEA IF ( DTDYN(ISEA) .NE. UNDEF ) THEN DTDYN(ISEA) = DTDYN(ISEA) / 60. - END IF - END DO - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, DTDYN , MAPSF, X1 ) + END IF + END DO + CALL S2GRID(DTDYN, X1) ! ! Cut off frequency ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 2 ) THEN - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, FCUT , MAPSF, X1 ) + CALL S2GRID(FCUT, X1) ! ! Maximum CFL for spatial advection ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 3 ) THEN - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CFLXYMAX , MAPSF, X1 ) + CALL S2GRID(CFLXYMAX, X1) ! ! Maximum CFL for direction advection ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 4 ) THEN - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CFLTHMAX , MAPSF, X1 ) + CALL S2GRID(CFLTHMAX, X1) ! ! Maximum CFL for frequency advection ELSE IF ( IFI .EQ. 9 .AND. IFJ .EQ. 5 ) THEN - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, CFLKMAX , MAPSF, X1 ) + CALL S2GRID(CFLKMAX, X1) ! ! User defined... ELSE IF ( IFI .EQ. 10 ) THEN !CB WRITE (ENAME,'(A2,I2.2)') '.u', IFJ - CALL W3S2XY ( NSEA, NSEA, NX+1, NY, USERO(:,IFJ) & - , MAPSF, X1 ) + CALL S2GRID(USERO(:,IFJ), X1) ELSE WRITE (NDSE,999) IFI, IFJ CALL EXTCDE ( 1 ) @@ -2144,7 +1922,7 @@ S2=LEN_TRIM(META(1)%ENAME) S1=LEN_TRIM(FILEPREFIX)+S4 - FNAMENC(S1+1:50)=' ' + FNAMENC(S1+1:128)=' ' FNAMENC(S1+1:S1+1) = '_' ! If flag TOGETHER and not variable with freq dim & @@ -2232,8 +2010,10 @@ IF (INDEX('0000000000000000',OLDTIMEID).EQ.0 .AND. INDEX(TIMEID,OLDTIMEID).EQ.0) THEN IRET = NF90_REDEF(OLDNCID) CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(OLDNCID,NF90_GLOBAL,'stop_date',STRSTOPDATE) - CALL CHECK_ERR(IRET) + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(OLDNCID,NF90_GLOBAL,'stop_date',STRSTOPDATE) + CALL CHECK_ERR(IRET) + ENDIF IRET=NF90_CLOSE(OLDNCID) CALL CHECK_ERR(IRET) END IF @@ -2281,12 +2061,14 @@ IF (.NOT.ALLOCATED(LON2D)) ALLOCATE(LON2D(NX,NY),LAT2D(NX,NY)) LON2D=TRANSPOSE(XGRD) LAT2D=TRANSPOSE(YGRD) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'latitude_resolution','n/a') - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'longitude_resolution','n/a') - CALL CHECK_ERR(IRET) + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'latitude_resolution','n/a') + CALL CHECK_ERR(IRET) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'longitude_resolution','n/a') + CALL CHECK_ERR(IRET) + ENDIF ! If NOT curvilinear grid, ELSE IF( SMCGRD ) THEN @@ -2380,12 +2162,14 @@ !/SMC END DO !/SMC WRITE(STR2,'(F12.7)') DYO !/SMC STR2=ADJUSTL(STR2) -!/SMC IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & -!/SMC 'latitude_resolution', TRIM(str2)) -!/SMC WRITE(STR2,'(F12.7)') DXO -!/SMC STR2=ADJUSTL(STR2) -!/SMC IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & -!/SMC 'longitude_resolution',TRIM(str2)) +!/SMC IF(FL_DEFAULT_GBL_META) THEN +!/SMC IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & +!/SMC 'latitude_resolution', TRIM(str2)) +!/SMC WRITE(STR2,'(F12.7)') DXO +!/SMC STR2=ADJUSTL(STR2) +!/SMC IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & +!/SMC 'longitude_resolution',TRIM(str2)) +!/SMC ENDIF !/RTD !!CALL W3EQTOLL(LAT2DEQ, LON2DEQ, LAT2D, LON2D, & !/RTD !! ANGLD2D, POLAT, POLON, NYO*NXO) !/RTD ! @@ -2416,16 +2200,18 @@ !/RTD CALL W3EQTOLL(LAT2DEQ, LON2DEQ, LAT2D, LON2D, & !/RTD ANGLD2D, POLAT, POLON, NY*NX) !/RTD END IF ! RTDL - WRITE(STR2,'(F12.0)') SY - STR2=ADJUSTL(STR2) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'latitude_resolution', TRIM(STR2)) - CALL CHECK_ERR(IRET) - WRITE(STR2,'(F12.0)') SX - STR2=ADJUSTL(STR2) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'longitude_resolution',TRIM(STR2)) - CALL CHECK_ERR(IRET) + IF(FL_DEFAULT_GBL_META) THEN + WRITE(STR2,'(F12.0)') SY + STR2=ADJUSTL(STR2) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'latitude_resolution', TRIM(STR2)) + CALL CHECK_ERR(IRET) + WRITE(STR2,'(F12.0)') SX + STR2=ADJUSTL(STR2) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'longitude_resolution',TRIM(STR2)) + CALL CHECK_ERR(IRET) + ENDIF END IF ! SMCGRD END IF @@ -2437,71 +2223,75 @@ DIMLN(2)=NX DIMLN(3)=NTRI TRIGP2=TRANSPOSE(TRIGP) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'latitude_resolution','n/a') - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'latitude_resolution','n/a') + CALL CHECK_ERR(IRET) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & 'longitude_resolution','n/a') - CALL CHECK_ERR(IRET) + CALL CHECK_ERR(IRET) + ENDIF END IF ! Finishes declaration part in file by adding geographical bounds - IF(SMCGRD) THEN - WRITE(STR2,'(F12.0)') MINVAL(LAT) - ELSE - WRITE(STR2,'(F12.0)') MINVAL(YGRD) - ENDIF - STR2=ADJUSTL(STR2) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'southernmost_latitude',TRIM(STR2)) - CALL CHECK_ERR(IRET) - - IF(SMCGRD) THEN - WRITE(STR2,'(F12.0)') MAXVAL(LAT) - ELSE - WRITE(STR2,'(F12.0)') MAXVAL(YGRD) - ENDIF - STR2=ADJUSTL(STR2) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'northernmost_latitude',TRIM(STR2)) - CALL CHECK_ERR(IRET) - - IF(SMCGRD) THEN - WRITE(STR2,'(F12.0)') MINVAL(LON) - ELSE - WRITE(STR2,'(F12.0)') MINVAL(XGRD) - ENDIF - STR2=ADJUSTL(STR2) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'westernmost_longitude',TRIM(STR2)) - CALL CHECK_ERR(IRET) - - - IF(SMCGRD) THEN - WRITE(STR2,'(F12.0)') MAXVAL(LON) - ELSE - WRITE(STR2,'(F12.0)') MAXVAL(XGRD) - ENDIF - STR2=ADJUSTL(STR2) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'easternmost_longitude',TRIM(STR2)) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'minimum_altitude','-12000 m') - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'maximum_altitude','9000 m') - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & - 'altitude_resolution','n/a') - CALL CHECK_ERR(IRET) - -!/RTD IF ( RTDL ) THEN -!/RTD IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & -!/RTD 'grid_north_pole_latitude',POLAT) -!/RTD IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & -!/RTD 'grid_north_pole_longitude',POLON) -!/RTD END IF + IF(FL_DEFAULT_GBL_META) THEN + IF(SMCGRD) THEN + WRITE(STR2,'(F12.0)') MINVAL(LAT) + ELSE + WRITE(STR2,'(F12.0)') MINVAL(YGRD) + ENDIF + STR2=ADJUSTL(STR2) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'southernmost_latitude',TRIM(STR2)) + CALL CHECK_ERR(IRET) + + IF(SMCGRD) THEN + WRITE(STR2,'(F12.0)') MAXVAL(LAT) + ELSE + WRITE(STR2,'(F12.0)') MAXVAL(YGRD) + ENDIF + STR2=ADJUSTL(STR2) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'northernmost_latitude',TRIM(STR2)) + CALL CHECK_ERR(IRET) + + IF(SMCGRD) THEN + WRITE(STR2,'(F12.0)') MINVAL(LON) + ELSE + WRITE(STR2,'(F12.0)') MINVAL(XGRD) + ENDIF + STR2=ADJUSTL(STR2) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'westernmost_longitude',TRIM(STR2)) + CALL CHECK_ERR(IRET) + + + IF(SMCGRD) THEN + WRITE(STR2,'(F12.0)') MAXVAL(LON) + ELSE + WRITE(STR2,'(F12.0)') MAXVAL(XGRD) + ENDIF + STR2=ADJUSTL(STR2) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'easternmost_longitude',TRIM(STR2)) + CALL CHECK_ERR(IRET) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'minimum_altitude','-12000 m') + CALL CHECK_ERR(IRET) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'maximum_altitude','9000 m') + CALL CHECK_ERR(IRET) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & + 'altitude_resolution','n/a') + CALL CHECK_ERR(IRET) + +!/RTD IF ( RTDL ) THEN +!/RTD IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & +!/RTD 'grid_north_pole_latitude',POLAT) +!/RTD IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL, & +!/RTD 'grid_north_pole_longitude',POLON) +!/RTD END IF + ENDIF ! FL_DEFAULT_GBL_META CALL T2D(TIME,STARTDATE,IERR) WRITE(STRSTARTDATE,'(I4.4,A,4(I2.2,A),I2.2)') STARTDATE(1),'-',STARTDATE(2),'-', & @@ -2596,6 +2386,18 @@ CALL CHECK_ERR(IRET) END IF + ! Write forecast reference time, if requested: + IF (FLGFC) THEN + IF(TIMEUNIT .EQ. 'S') THEN + OUTSECS = TSUBSEC(EPOCHDATE, REFDATE) + IRET = NF90_PUT_VAR(NCID, VARID(12), OUTSECS) + ELSE + OUTJULDAY = TSUB(EPOCHDATE, REFDATE) + IRET = NF90_PUT_VAR(NCID, VARID(12), OUTJULDAY) + ENDIF + CALL CHECK_ERR(IRET) + ENDIF + WRITE (NDSO,973) FNAMENC ! 2.5.4 Defines the field(LON,LAT,time) of the variable (i.e. ucur,vcur for current variable) @@ -2661,19 +2463,22 @@ CALL WRITE_META(NCID, VARID(IVAR), META(I), IRET) ! CB CALL CHECK_ERR(IRET) ! CB ! + !! CHRISB: Commenting out below - will be handled by w3oundmeta module !/RTD -!/RTD IF ( RTDL ) THEN -!/RTD ! Add grid mapping attribute for rotated pole grids: -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'grid_mapping', & -!/RTD 'rotated_pole') -!/RTD CALL CHECK_ERR(IRET) -!/RTD END IF +!/RTD ! IF ( RTDL ) THEN +!/RTD ! ! Add grid mapping attribute for rotated pole grids: +!/RTD ! IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'grid_mapping', & +!/RTD ! 'rotated_pole') +!/RTD ! CALL CHECK_ERR(IRET) +!/RTD ! END IF !/RTD END DO ! ! put START date in global attribute - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'start_date',STRSTARTDATE) - CALL CHECK_ERR(IRET) + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'start_date',STRSTARTDATE) + CALL CHECK_ERR(IRET) + ENDIF ! IRET = NF90_ENDDEF(NCID) CALL CHECK_ERR(IRET) @@ -2711,7 +2516,7 @@ IRET=NF90_INQ_DIMID (NCID, 'x', DIMID(2)) IRET=NF90_INQ_VARID (NCID, 'x', VARID(1)) IRET=NF90_INQ_DIMID (NCID, 'y', DIMID(3)) - IRET=NF90_INQ_VARID (NCID, 'y', VARID(1)) + IRET=NF90_INQ_VARID (NCID, 'y', VARID(2)) END IF CALL CHECK_ERR(IRET) END IF @@ -2720,6 +2525,10 @@ IRET=NF90_INQUIRE_DIMENSION (NCID, DIMID(4+EXTRADIM),len=N) CALL CHECK_ERR(IRET) IRET=NF90_INQ_VARID (NCID, 'time', VARID(3)) + IF( FLGFC ) THEN + IRET = NF90_INQ_VARID(NCID, 'forecast_period', VARID(11)) + CALL CHECK_ERR(IRET) + ENDIF ! Get the dimension f IF (EXTRADIM.EQ.1) IRET=NF90_INQ_DIMID (NCID, 'f', DIMID(4)) @@ -2797,13 +2606,14 @@ CALL WRITE_META(NCID, VARID(IVAR), META(I), IRET) ! CB CALL CHECK_ERR(IRET) ! CB ! + !! CHRISB: Commenting out below - will be handled by w3oundmeta module !/RTD -!/RTD IF ( RTDL ) THEN -!/RTD ! Add grid mapping attribute for rotated pole grids: -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'grid_mapping', & -!/RTD 'rotated_pole') -!/RTD CALL CHECK_ERR(IRET) -!/RTD END IF +!/RTD ! IF ( RTDL ) THEN +!/RTD ! ! Add grid mapping attribute for rotated pole grids: +!/RTD ! IRET=NF90_PUT_ATT(NCID,VARID(IVAR),'grid_mapping', & +!/RTD ! 'rotated_pole') +!/RTD ! CALL CHECK_ERR(IRET) +!/RTD ! END IF !/RTD END DO IRET = NF90_ENDDEF(NCID) @@ -2823,12 +2633,11 @@ IRET=NF90_ENDDEF(NCID) CALL CHECK_ERR(IRET) END IF ! N.EQ.1 - END IF ! IERR.EQ.0 + END IF ! FEXIST ! 2.6.4 Defines the current time step and index CALL T2D(TIME,CURDATE,IERR) - OUTJULDAY=TSUB(REFDATE,CURDATE) WRITE(NDSO,'(A,A9,A,I6,A,I4,A,I2.2,A,I2.2,A,I2.2,A,I2.2,A,I2.2,2A)') & 'Writing new record ', META(1)%ENAME(2:) ,'number ',N, & ' for ',CURDATE(1),':',CURDATE(2),':',CURDATE(3),'T',CURDATE(5),& @@ -2856,10 +2665,25 @@ ! Puts time in NetCDF file IF((IFI.EQ.I1.AND.IFJ.EQ.J1.AND.TOGETHER) & .OR.(.NOT.TOGETHER).OR.FLFRQ) THEN - !IVAR1=3+EXTRADIM+(COORDTYPE-1)+MAPSTAOUT IVAR1 = 21 - IRET=NF90_PUT_VAR(NCID,VARID(3),OUTJULDAY,(/N/)) + + IF(TIMEUNIT .EQ. 'S') THEN + ! Time in seconds + OUTSECS = TSUBSEC(EPOCHDATE,CURDATE) + IRET = NF90_PUT_VAR(NCID, VARID(3), OUTSECS, (/N/)) + ELSE + ! Time in days + OUTJULDAY = TSUB(EPOCHDATE,CURDATE) + IRET = NF90_PUT_VAR(NCID, VARID(3), OUTJULDAY, (/N/)) + ENDIF CALL CHECK_ERR(IRET) + + ! ChrisB: Calculate forecast period w.r.t. forecast reference time: + IF (FLGFC) THEN + OUTSECS = TSUBSEC(REFDATE, CURDATE) + IRET = NF90_PUT_VAR(NCID, VARID(11), OUTSECS, (/N/)) + CALL CHECK_ERR(IRET) + ENDIF END IF ! ! 2.6.5 Puts field(s) in NetCDF file @@ -2967,6 +2791,8 @@ MXX(IX,IY) = MFILL MYY(IX,IY) = MFILL ELSE + !PRINT*,XX(IX,IY),XY(IX,IY) + !STOP MXX(IX,IY) = NINT(XX(IX,IY)/META(1)%FSC) MYY(IX,IY) = NINT(XY(IX,IY)/META(2)%FSC) END IF @@ -3465,13 +3291,6 @@ !/NC4 INTEGER :: DEFLATE=1 ! CHARACTER :: ATTNAME*120,ATTVAL*120 - -!/RTD ! RTDL == False for a standard lat-lon grid. Will be set to True if the -!/RTD ! grid is rotated -!/RTD LOGICAL :: RTDL = .FALSE. - -!/RTD ! Is the grid really rotated -!/RTD IF ( Polat < 90. ) RTDL = .True. ! ! Creation in netCDF3 or netCDF4 ! @@ -3549,17 +3368,17 @@ !/SMC ! For seapoint style SMC grid, also define out cell size variables: !/SMC IRET = NF90_DEF_VAR(NCID, 'cx', NF90_SHORT, DIMID(2), VARID(5)) !/SMC CALL CHECK_ERR(IRET) -!/SMC IRET = NF90_PUT_ATT(NCID, VARID(299), 'long_name', & +!/SMC IRET = NF90_PUT_ATT(NCID, VARID(5), 'long_name', & !/SMC 'longitude cell size factor') -!/SMC IRET = NF90_PUT_ATT(NCID, VARID(299), 'valid_min', 1) -!/SMC IRET = NF90_PUT_ATT(NCID, VARID(299), 'valid_max', 256) +!/SMC IRET = NF90_PUT_ATT(NCID, VARID(5), 'valid_min', 1) +!/SMC IRET = NF90_PUT_ATT(NCID, VARID(5), 'valid_max', 256) !/SMC !/SMC IRET = NF90_DEF_VAR(NCID, 'cy', NF90_SHORT, DIMID(2), VARID(6)) !/SMC call CHECK_ERR(IRET) -!/SMC IRET = NF90_PUT_ATT(NCID, VARID(300), 'long_name', & +!/SMC IRET = NF90_PUT_ATT(NCID, VARID(6), 'long_name', & !/SMC 'latitude cell size factor') -!/SMC IRET = NF90_PUT_ATT(NCID, VARID(300), 'valid_min', 1) -!/SMC IRET = NF90_PUT_ATT(NCID, VARID(300), 'valid_max', 256) +!/SMC IRET = NF90_PUT_ATT(NCID, VARID(6), 'valid_min', 1) +!/SMC IRET = NF90_PUT_ATT(NCID, VARID(6), 'valid_max', 256) !/SMC ELSE !/SMC ! Regirdded regular SMC grid - use lon/lat dimensions: !/SMC IRET = NF90_DEF_VAR(NCID, 'longitude', NF90_FLOAT, DIMID(2), VARID(1)) @@ -3603,26 +3422,30 @@ !/RTD IRET=NF90_PUT_ATT(NCID,VARID(2),'standard_name','grid_latitude') !/RTD END IF IRET=NF90_PUT_ATT(NCID,VARID(2),'valid_min',-90.0) - IRET=NF90_PUT_ATT(NCID,VARID(2),'valid_max',180.) + IRET=NF90_PUT_ATT(NCID,VARID(2),'valid_max',90.) ! IF(SMCGRD) THEN !/SMC IF(SMCTYPE .EQ. 1) THEN -!/RTD ! For SMC grid type 1, standard lat/lon variables are 1D: -!/RTD IRET = NF90_DEF_VAR(NCID, 'standard_longitude', NF90_FLOAT, & -!/RTD (/ DIMID(2) /), VARID(7)) -!/RTD call CHECK_ERR(IRET) +!/RTD IF ( RTDL ) THEN +!/RTD ! For SMC grid type 1, standard lat/lon variables are 1D: +!/RTD IRET = NF90_DEF_VAR(NCID, 'standard_longitude', NF90_FLOAT, & +!/RTD (/ DIMID(2) /), VARID(7)) +!/RTD call CHECK_ERR(IRET) !/RTD -!/RTD IRET = NF90_DEF_VAR(NCID, 'standard_latitude', NF90_FLOAT, & -!/RTD (/ DIMID(2) /), VARID(8)) -!/RTD call CHECK_ERR(IRET) +!/RTD IRET = NF90_DEF_VAR(NCID, 'standard_latitude', NF90_FLOAT, & +!/RTD (/ DIMID(2) /), VARID(8)) +!/RTD call CHECK_ERR(IRET) +!/RTD ENDIF ! RTDL !/SMC ELSE -!/RTD IRET = NF90_DEF_VAR(NCID, 'standard_longitude', NF90_FLOAT, & -!/RTD (/ DIMID(2), DIMID(3)/), VARID(7)) -!/RTD call CHECK_ERR(IRET) +!/RTD IF ( RTDL ) THEN +!/RTD IRET = NF90_DEF_VAR(NCID, 'standard_longitude', NF90_FLOAT, & +!/RTD (/ DIMID(2), DIMID(3)/), VARID(7)) +!/RTD call CHECK_ERR(IRET) !/RTD -!/RTD IRET = NF90_DEF_VAR(NCID, 'standard_latitude', NF90_FLOAT, & -!/RTD (/ DIMID(2), DIMID(3)/), VARID(8)) -!/RTD call CHECK_ERR(IRET) +!/RTD IRET = NF90_DEF_VAR(NCID, 'standard_latitude', NF90_FLOAT, & +!/RTD (/ DIMID(2), DIMID(3)/), VARID(8)) +!/RTD call CHECK_ERR(IRET) +!/RTD ENDIF ! RTDL !/SMC ENDIF ELSE !/RTD IF ( RTDL ) THEN @@ -3650,18 +3473,20 @@ !/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'long_name','latitude') !/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'standard_name','latitude') !/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'valid_min',-90.0) -!/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'valid_max',180.) +!/RTD IRET=NF90_PUT_ATT(NCID,VARID(8),'valid_max',90.) !/RTD !/RTD ! Add rotated pole grid mapping variable (dummy scalar variable !/RTD ! used to simply store rotated pole information; see CF1.6 conventions). !/RTD ! TODO: FUTURE WW3_OUNF DEVELOPMENT WILL ALLOW USER TO DEFINE THE !/RTD ! COORDINATE REFERENCE SYSTEM - THIS WILL REQUIRE THE BELOW TO BE !/RTD ! HANDLED DIFFERENTLY. C. Bunney. -!/RTD IRET=NF90_DEF_VAR(NCID, 'rotated_pole', NF90_CHAR, VARID(12)) -!/RTD IRET=NF90_PUT_ATT(NCID, VARID(12), 'grid_north_pole_latitude',POLAT) -!/RTD IRET=NF90_PUT_ATT(NCID, VARID(12), 'grid_north_pole_longitude',POLON) -!/RTD IRET=NF90_PUT_ATT(NCID, VARID(12), 'grid_mapping_name', & -!/RTD 'rotated_latitude_longitude') + + !! CHRISB: Commenting out below - will be handled by w3oundmeta module +!/RTD !!IRET=NF90_DEF_VAR(NCID, 'rotated_pole', NF90_CHAR, VARID(12)) +!/RTD !!IRET=NF90_PUT_ATT(NCID, VARID(12), 'grid_north_pole_latitude',POLAT) +!/RTD !!IRET=NF90_PUT_ATT(NCID, VARID(12), 'grid_north_pole_longitude',POLON) +!/RTD !!IRET=NF90_PUT_ATT(NCID, VARID(12), 'grid_mapping_name', & +!/RTD !! 'rotated_latitude_longitude') !/RTD END IF ! ELSE @@ -3697,13 +3522,13 @@ IRET = NF90_DEF_VAR(NCID, 'f', NF90_FLOAT, DIMID(4), VARID(10)) !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(10), 1, 1, DEFLATE) CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','wave_frequency') + IRET=NF90_PUT_ATT(NCID,VARID(10),'long_name','wave_frequency') CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3),'standard_name','wave_frequency') + IRET=NF90_PUT_ATT(NCID,VARID(10),'standard_name','wave_frequency') CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3),'units','s-1') + IRET=NF90_PUT_ATT(NCID,VARID(10),'units','s-1') CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3),'axis','Hz') + IRET=NF90_PUT_ATT(NCID,VARID(10),'axis','Hz') CALL CHECK_ERR(IRET) END IF @@ -3711,7 +3536,9 @@ ! ! time ! - IRET = NF90_DEF_VAR(NCID, 'time', NF90_DOUBLE, DIMID(4+EXTRADIM), VARID(3)) + ! CHRISB: Allow different time variable types: + IRET = NF90_DEF_VAR(NCID, 'time', TVARTYPE, DIMID(4+EXTRADIM), VARID(3)) + CALL CHECK_ERR(IRET) !/NC4 IF (NCTYPE.EQ.4) IRET = NF90_DEF_VAR_DEFLATE(NCID, VARID(3), 1, 1, DEFLATE) CALL CHECK_ERR(IRET) SELECT CASE (TRIM(CALTYPE)) @@ -3720,20 +3547,61 @@ CASE ('365_day') IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','time in 365 day calendar') CASE ('standard') - IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','julian day (UT)') + !IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','julian day (UT)') ! CB + IRET=NF90_PUT_ATT(NCID,VARID(3),'long_name','time') END SELECT CALL CHECK_ERR(IRET) IRET=NF90_PUT_ATT(NCID,VARID(3),'standard_name','time') CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3),'units','days since 1990-01-01 00:00:00') + ! CHRISB: Allow alternative time units: + !IRET=NF90_PUT_ATT(NCID,VARID(3),'units','days since 1990-01-01 00:00:00') + IRET=NF90_PUT_ATT(NCID,VARID(3),'units', EPOCH) CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,VARID(3),'conventions', & - 'relative julian days with decimal part (as parts of the day )') + ! CHRISB: Not sure this is useful - required information is in "units" + !IRET=NF90_PUT_ATT(NCID,VARID(3),'conventions', & + ! 'relative julian days with decimal part (as parts of the day )') IRET=NF90_PUT_ATT(NCID,VARID(3),'axis','T') CALL CHECK_ERR(IRET) IRET=NF90_PUT_ATT(NCID,VARID(3),'calendar',TRIM(CALTYPE)) CALL CHECK_ERR(IRET) ! +! forecast period and (forecast reference time), if requested +! + IF (FLGFC) THEN + IRET = NF90_DEF_VAR(NCID, 'forecast_period', NF90_INT, & + DIMID(4+EXTRADIM), VARID(11)) + CALL CHECK_ERR(IRET) + IRET = NF90_PUT_ATT(NCID, VARID(11), 'long_name', & + 'forecast period') + CALL CHECK_ERR(IRET) + IRET = NF90_PUT_ATT(NCID, VARID(11), 'standard_name', & + 'forecast_period') + CALL CHECK_ERR(IRET) + IRET = NF90_PUT_ATT(NCID, VARID(11), 'units', 's') + CALL CHECK_ERR(IRET) + + ! Forecast reference time is a scalar variable: + IRET = NF90_DEF_VAR(NCID, 'forecast_reference_time', & + TVARTYPE, varid=VARID(12)) + CALL CHECK_ERR(IRET) + + IRET = NF90_PUT_ATT(NCID, VARID(12), 'long_name', & + 'forecast reference time') + CALL CHECK_ERR(IRET) + + IRET = NF90_PUT_ATT(NCID, VARID(12), 'standard_name', & + 'forecast_reference_time') + CALL CHECK_ERR(IRET) + + IRET = NF90_PUT_ATT(NCID, VARID(12), 'units', EPOCH) + ! 'days since 1990-01-01 00:00:00') + CALL CHECK_ERR(IRET) + + IRET = NF90_PUT_ATT(NCID, VARID(12), 'calendar', 'gregorian') + CALL CHECK_ERR(IRET) + + ENDIF +! ! triangles for irregular grids ! IF (GTYPE.EQ.UNGTYPE) THEN @@ -3763,42 +3631,56 @@ IRET=NF90_PUT_ATT(NCID,VARID(20),'valid_max',32) CALL CHECK_ERR(IRET) END IF +! +! Optional (user-defined) coordinate reference system (scalar variable) +! + IF(CRS_META%N .GT. 0) THEN + IRET = NF90_DEF_VAR(NCID, CRS_NAME, NF90_CHAR, varid=IVAR) + CALL CHECK_ERR(IRET) + !CALL WRITE_FREEFORM_META(NCID, IVAR, CRS_META, N_CRSMETA, IERR) + CALL WRITE_FREEFORM_META_LIST(NCID, IVAR, CRS_META, IERR) + CALL CHECK_ERR(IRET) + ENDIF ! ! Global attributes ! - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'WAVEWATCH_III_version_number' ,TRIM(WWVER)) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'WAVEWATCH_III_switches',TRIM(SWITCHES)) - CALL CHECK_ERR(IRET) -!/ST4 IF (ZZWND.NE.10) IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SIN4 namelist parameter ZWD',ZZWND) -!/ST4 IF (AALPHA.NE.0.0095) IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SIN4 namelist parameter ALPHA0',AALPHA) -!/ST4 IF (BBETA.NE.1.43) IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SIN4 namelist parameter BETAMAX',BBETA) -!/ST4 IF(SSDSC(7).NE.0.3) IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SDS4 namelist parameter WHITECAPWIDTH', SSDSC(7)) + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'WAVEWATCH_III_version_number' ,TRIM(WWVER)) + CALL CHECK_ERR(IRET) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'WAVEWATCH_III_switches',TRIM(SWITCHES)) + CALL CHECK_ERR(IRET) +!/ST4 IF (ZZWND.NE.10) IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SIN4 namelist parameter ZWD',ZZWND) +!/ST4 IF (AALPHA.NE.0.0095) IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SIN4 namelist parameter ALPHA0',AALPHA) +!/ST4 IF (BBETA.NE.1.43) IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SIN4 namelist parameter BETAMAX',BBETA) +!/ST4 IF(SSDSC(7).NE.0.3) IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SDS4 namelist parameter WHITECAPWIDTH', SSDSC(7)) ! ... TO BE CONTINUED ... - IF(SMCGRD) THEN -!/SMC IF(SMCTYPE .EQ. 1) THEN -!/SMC IRET = NF90_PUT_ATT(NCID, NF90_GLOBAL, 'first_lat', Y0) -!/SMC call CHECK_ERR(IRET) -!/SMC IRET = NF90_PUT_ATT(NCID, NF90_GLOBAL, 'first_lon', X0) -!/SMC call CHECK_ERR(IRET) -!/SMC IRET = NF90_PUT_ATT(NCID, NF90_GLOBAL, 'base_lat_size', dlat) -!/SMC call CHECK_ERR(IRET) -!/SMC IRET = NF90_PUT_ATT(NCID, NF90_GLOBAL, 'base_lon_size', dlon) -!/SMC call CHECK_ERR(IRET) -!/SMC IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SMC_grid_type','seapoint') -!/SMC call CHECK_ERR(IRET) -!/SMC ELSE IF(SMCTYPE .EQ. 2) THEN -!/SMC IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SMC_grid_type','regular_regridded') -!/SMC call CHECK_ERR(IRET) -!/SMC ENDIF - ENDIF + IF(SMCGRD) THEN +!/SMC IF(SMCTYPE .EQ. 1) THEN +!/SMC IRET = NF90_PUT_ATT(NCID, NF90_GLOBAL, 'first_lat', Y0) +!/SMC call CHECK_ERR(IRET) +!/SMC IRET = NF90_PUT_ATT(NCID, NF90_GLOBAL, 'first_lon', X0) +!/SMC call CHECK_ERR(IRET) +!/SMC IRET = NF90_PUT_ATT(NCID, NF90_GLOBAL, 'base_lat_size', dlat) +!/SMC call CHECK_ERR(IRET) +!/SMC IRET = NF90_PUT_ATT(NCID, NF90_GLOBAL, 'base_lon_size', dlon) +!/SMC call CHECK_ERR(IRET) +!/SMC IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SMC_grid_type','seapoint') +!/SMC call CHECK_ERR(IRET) +!/SMC ELSE IF(SMCTYPE .EQ. 2) THEN +!/SMC IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'SMC_grid_type','regular_regridded') +!/SMC call CHECK_ERR(IRET) +!/SMC ENDIF + ENDIF + ENDIF ! FL_DEFAULT_GBL_META ! ChrisB: Write user global attributes: CALL WRITE_GLOBAL_META(NCID, IRET) CALL CHECK_ERR(IRET) + ! ChrisB: Below is the old way of writing Global attributes, this + ! is now deprecated, but still supported at the moment... open(unit=994,file='NC_globatt.inp',status='old',iostat=ICODE) IF (ICODE.EQ.0) THEN DO WHILE (ICODE.EQ.0) @@ -3813,15 +3695,108 @@ END DO ENDIF CLOSE(994) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'product_name' ,TRIM(NCFILE)) - CALL CHECK_ERR(IRET) - IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'area',TRIM(GNAME)) - CALL CHECK_ERR(IRET) + IF(FL_DEFAULT_GBL_META) THEN + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'product_name' ,TRIM(NCFILE)) + CALL CHECK_ERR(IRET) + IRET=NF90_PUT_ATT(NCID,NF90_GLOBAL,'area',TRIM(GNAME)) + CALL CHECK_ERR(IRET) + ENDIF RETURN END SUBROUTINE W3CRNC + +!/ ------------------------------------------------------------------- / + SUBROUTINE S2GRID(S, X, FLDIRN) +!/ +!/ +-----------------------------------+ +!/ | C . Bunney | +!/ | FORTRAN 90 | +!/ | Last update : 03-Nov-2020 | +!/ +-----------------------------------+ +!/ +!/ 03-Nov-2020 : Creation ( version 7.XX ) +!/ +! 1. Purpose : +! +! Exapand the seapoint array to full grid with handling of +! SMC regridding. The FLDIRN flag should be set to true for +! directional fields. In this case, they will be decomposed +! into U/V components for SMC grid interpolation and converted +! to oceanograhic convention. +! +! 2. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! S Real. I Sea point array +! X Real. O Gridded array +! FLDIRN Bool. I Directional field flag +! ---------------------------------------------------------------- +! +!/ ------------------------------------------------------------------- / + USE W3SERVMD, ONLY : W3S2XY + + IMPLICIT NONE + + REAL, INTENT(INOUT) :: S(:) + REAL, INTENT(OUT) :: X(:,:) + LOGICAL, OPTIONAL, INTENT(IN) :: FLDIRN + + LOGICAL :: FLDR + INTEGER :: ISEA + + FLDR = .FALSE. + IF(PRESENT(FLDIRN)) FLDR = FLDIRN + +!/SMC IF( SMCGRD ) THEN +!/SMC CALL W3S2XY_SMC( S, X, FLDR ) +!/SMC ELSE ! IF(SMCGRD) + IF(FLDR) THEN + DO ISEA=1, NSEA + IF (S(ISEA) .NE. UNDEF ) THEN + S(ISEA) = MOD ( 630. - RADE * S(ISEA) , 360. ) + END IF + END DO + ENDIF + CALL W3S2XY ( NSEA, NSEA, NX+1, NY, S, MAPSF, X ) +!/SMC ENDIF + + END SUBROUTINE S2GRID + + + SUBROUTINE UV_TO_MAG_DIR(U, V, TOLERANCE) + ! Converts fields formulated as U/V vectors into + ! magnitude and direction fields. Conversion is + ! done in-place. U becomes magnitude, V becomes + ! direction. Optional TOLERANCE sets minimum + ! magnitude. + IMPLICIT NONE + + REAL, INTENT(INOUT) :: U(:), V(:) + REAL, INTENT(IN), OPTIONAL :: TOLERANCE + + REAL :: TOL = 1.0 + REAL :: MAG ! Magnitude + INTEGER :: ISEA + + IF(PRESENT(TOLERANCE)) TOL = TOLERANCE + + DO ISEA=1, NSEA + MAG = SQRT(U(ISEA)**2 + V(ISEA)**2) + IF(MAG .GT. TOL) THEN + V(ISEA) = MOD( 630. - RADE * ATAN2(U(ISEA), V(ISEA)), 360. ) + ELSE + V(ISEA) = UNDEF + ! TODO - Setting V to undef does not work as later the write + ! function only checks the U value. Set both to udef? + END IF + U(ISEA) = MAG + END DO + + END SUBROUTINE UV_TO_MAG_DIR + !============================================================================== SUBROUTINE CHECK_ERROR(IRET, ILINE) diff --git a/model/inp/ounfmeta_legacy.inp b/model/inp/ounfmeta_legacy.inp new file mode 100644 index 000000000..27116eb74 --- /dev/null +++ b/model/inp/ounfmeta_legacy.inp @@ -0,0 +1,236 @@ +$ This is an input file for setting user attributes +$ in the netCDF file generated by ww3_ounf. +$ +$ This example overrides the default values with +$ attributes based on the CMEMS specification. + +META AST + standard_name="air_sea_temperature_difference" + +META IBG + standard_name="icebergs_induced_attenuation_scale_for_waves" + +META D50 + standard_name="sediment_grain_size" + +META IC5 + standard_name="maximum_ice_floe_diameter" + +META LM + standard_name="mean_wave_length" + +META FP + standard_name="sea_surface_wave_peak_frequency" + +META HIG + standard_name="sea_surface_wave_infragravity_significant_height" + +META MXE + standard_name="expected maximum sea surface elevation (nonlinear,2nd order)" + +META MXES + standard_name="std of expected maximum sea surface elevation (nonlinear,2nd order)" + +META MXH + standard_name="expected maximum wave height (linear, 1st order)" + +META MXHC + standard_name="expected maximum wave height from crest (linear, 1st order)" + +META SDMH + standard_name="STD of maximum wave height (linear, 1st order)" + +META SDMHC + standard_name="STD of maximum wave height from crest (linear, 1st order)" + +META WBT + standard_name="dominant_wave_breaking_probability" + +META TH1M + standard_name="sea_surface_wave_from_direction_frequency_spectrum" + +META STH1M + standard_name="sea_surface_wave_spreading_spectrum" + +META TH2M + standard_name="sea_surface_wave_from_direction_frequency_spectrum_from_second_moments" + +META STH2M + standard_name="sea_surface_wave_spreading_spectrum_from_second_moments" + +META WN + standard_name="wave_numbers" + +META PLP + standard_name="peak_wave_length_partition_" + +META PWS + standard_name="wind_sea_fraction_in_partition_" + +META PQP + standard_name="sea_surface_wave_peakedness_partition_" + +META PPE + standard_name="wave_peak_enhancement_factor_partition_" + +META PGW + standard_name="Gaussian_frequency_spread_partition_" + +META PSW + standard_name="sea_surface_wave_spectral_width_partition_" + +META PEP + standard_name="sea_surface_wave_spectral_width_partition_" + +META TWS + standard_name="wind_sea_fraction" + +META TWS + standard_name="number_of_wave_partitions" + +META UST 1 + standard_name="eastward_friction_velocity" + +META UST 2 + standard_name="northward_friction_velocity" + +META CGE + standard_name="sea_surface_wind_wave_energy_flux" + +META TAW 1 + standard_name="eastward_wave_supported_wind_stress" + +META TAW 2 + standard_name="northward_wave_supported_wind_stress" + +META TWA 1 + standard_name="eastward_wave_to_wind_stress" + +META TWA 2 + standard_name="northward_wave_to_wind_stress" + +META WCC + standard_name="whitecap_coverage" + +META WCF + standard_name="whitecap_foam_thickness" + +META WCH + standard_name="significant_breaking_wave_height" + +META WCM + standard_name="whitecap_moment" + +META SXY 1 + standard_name="radiation_stress_component_sxx" + +META SXY 2 + standard_name="radiation_stress_component_syy" + +META SXY 3 + standard_name="radiation_stress_component_sxy" + +META TWO 1 + standard_name="eastward_wave_to_ocean_stress" + +META TWO 2 + standard_name="northward_wave_to_ocean_stress" + +META BHD + standard_name="radiation_pressure" + +META FOC + standard_name="wave_to_ocean_energy_flux" + +META TUS 1 + standard_name="eastward_stokes_transport" + +META TUS 2 + standard_name="northward_stokes_transport" + +META P2S 1 + standard_name="power_spectral_density_of_equivalent_surface_pressure" + +META P2S 2 + standard_name="peak_period_of_power_spectral_density_of_equivalent_surface_pressure" + +META USF 1 + standard_name="eastward_spectral_variance_of_surface_stokes_drift" + +META USF 2 + standard_name="northward_spectral_variance_of_surface_stokes_drift" + +META P2L + standard_name="base_ten_logarithm_of_power_spectral_density_of_equivalent_surface_pressure" + +META TWI 1 + standard_name="eastward_wave_to_sea_ice_stress" + +META TWI 2 + standard_name="northward_wave_to_sea_ice_stress" + +META FIC + standard_name="wave_to_sea_ice_energy_flux" + +META USP 1 + standard_name="eastward_partitioned_surface_stokes_drift" + +META USP 2 + standard_name="northward_partitioned_surface_stokes_drift" + +META ABR 1 + standard_name="rms_of_bottom_displacement_amplitude_zonal" + +META ABR 2 + standard_name="rms_of_bottom_displacement_amplitude_meridional" + +META UBR 1 + standard_name="rms_of_bottom_velocity_amplitude_zonal" + +META UBR 2 + standard_name="rms_of_bottom_velocity_amplitude_meridional" + +META BED 1 + standard_name="sea bottom roughness length" + +META BED 2 + standard_name="eastward_ripple_wavelength" + +META BED 3 + standard_name="northward_ripple_wavelength" + +META FBB + standard_name="wave_energy_dissipation_in_bottom_boundary_layer" + +META TBB 1 + standard_name="eastward_wave_to_bottom_boundary_layer_stress" + +META TBB 2 + standard_name="northward_wave_to_bottom_boundary_layer_stress" + +META MSC 1 + standard_name="eastward_phillips_constant" + +META MSC 2 + standard_name="northward_phillips_constant" + +META MCD + standard_name="sea_surface_wave_dominant_mean_square_slope_direction_in_highest_frequency" + +META QP + standard_name="sea_surface_wave_peakedness" + +META DTD + standard_name="dynamic_time_step" + +META FC + standard_name="cut_off_frequency" + +META CFX + standard_name="maximum_cfl_for_spatial_advection" + +META CFD + standard_name="maximum_cfl_for_direction_advection" + +META CFK + standard_name="maximum_cfl_for_frequency_advection" diff --git a/model/nml/ww3_ounf.nml b/model/nml/ww3_ounf.nml index 5340ffbbd..0e67f1b6c 100644 --- a/model/nml/ww3_ounf.nml +++ b/model/nml/ww3_ounf.nml @@ -30,6 +30,22 @@ ! FIELD%VECTOR = T ! Vector [T] or dir/magnitude [F] for ! ! directional fields ! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] +! FIELD%FCVARS = F ! Generate auxiliary forecast variables +! ! (forecast_period and forecast_reference_time) +! FIELD%TIMEREF = 'unset' ! "Forecast reference time" for calculating +! ! forecast_period; defaults to TIMESTART +! FIELD%TIMEVAR = 'D' ! Time var type ['D' = DOUBLE, 'I' = INT64] +! FIELD%TIMEUNIT = 'D' ! Time units ['D' = days, 'I' = seconds] +! FIELD%TIMEEPOCH = '19900101 000000' ! Epoch used for encoding of NC time variables +! +! Note: If FCVARS = T, the following auxiliary variables will be generated +! (see the manual entry for ww3_ounf for more information): +! +! - forecast_reference_time: The time associated with the "analysis" of +! the current forecast. Defaults to TIMESTART if TIMEREF not set. +! +! - forecast_period: the time period elapsed (in seconds) since the +! associated "forecast_reference_time". ! -------------------------------------------------------------------- ! &FIELD_NML FIELD%TIMESTART = '20100101 000000' @@ -37,6 +53,7 @@ FIELD%LIST = 'DPT WND HS FP DIR SPR MSS' FIELD%SAMEFILE = F FIELD%TYPE = 4 + FIELD%FCVARS = F / diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 6c9db2621..202998994 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -89,6 +89,7 @@ echo " echo ' Assim Update of the restart file : $assim'" >> matrix.head echo " echo ' OASIS coupling : $oasis'" >> matrix.head echo " echo ' Calendar type : $calendar'" >> matrix.head + echo " echo ' Configurable netCDF generation : $confignc'" >> matrix.head echo " echo ' '" >> matrix.head if [ -n "$filter" ] then @@ -2105,7 +2106,7 @@ if [ "$confignc" = 'y' ] && [ "$shrd" = 'y' ] then echo ' ' >> matrix.body - echo "$rtst -o netcdf $ww3 ww3_tnc1" >> matrix.body + echo "$rtst -o netcdf -N $ww3 ww3_tnc1" >> matrix.body fi # --------------------------------------------------------------------------- # diff --git a/regtests/ww3_tnc1/input/ounfmeta.inp b/regtests/ww3_tnc1/input/ounfmeta.inp index b2bbca5dc..bdfc5f4dc 100644 --- a/regtests/ww3_tnc1/input/ounfmeta.inp +++ b/regtests/ww3_tnc1/input/ounfmeta.inp @@ -4,17 +4,20 @@ $ $ This example overrides the default values with $ attributes based on the CMEMS specification. +$ Fields are specified by the "Tag" name: META HS ename=".vhm0" varnm="VHM0" long_name="Spectral significant wave height (Hm0)" - globwave_name= + globwave_name="" vmin=0.0 vmax=50.0 $ an "extra" user attribute (of type "real"): pointless_number = 99.9 r + cell_methods = "time:point" -$ Fields can aslo be specified by their Group(IFI) and Field(IFJ) indices: +$ Fields can also be specified by their Group(IFI) and Param(IFJ) indices: +$ IFI=2, IFJ=5 is T0m1 field META 2 5 ename=".vt0m1" varnm="VT0M1" @@ -22,6 +25,7 @@ META 2 5 varns="sea_surface_wave_mean_period_from_variance_spectral_density_inverse_frequency_moment" varnl="Wave period at spectral peak / peak period (T0M1)" varng="" + cell_methods = "time:point" META T02 ename=".vtm02" @@ -29,6 +33,7 @@ META T02 standard_name="sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment" long_name="Spectral moments (0,2) wave period (Tm02)" globwave_name="" + cell_methods = "time:point" $ Multi-component fields (like wind) can take an extra integer $ parameter to select the component (1 - 3) @@ -37,6 +42,7 @@ META WND 1 ename=".w10" varnm="WSPD" standard_name="wind_speed" + cell_methods = "time:point" META WND 2 $ Second component of wind (direction) @@ -44,47 +50,57 @@ META WND 2 standard_name="wind_from_direction" units="degrees" convention="direction from" + cell_methods = "time:point" META DIR ename=".vmdr" varnm="VMDR" long_name="Mean wave direction from (Mdir)" globwave_name="" + cell_methods = "time:point" META DP ename=".vpdr" varnm="VPDR" long_name="Peak wave direction" globwave_name="" + cell_methods = "time:point" -$ Partitioned parameters can use the placeholder: +$ Partitioned parameters use "template" strings to add +$ partition specific meta data. The the and +$ templates are pre-defined. Use defined templates can be +$ set with a "TEMPLATE" section. +TEMPLATE VARNM_PART + WW + SW1 + SW2 + SW3 + META PHS ename=".vhm0_" - varnm="VHM0_" - long_name="Spectral significant wind wave height" + varnm = VHM0_ + long_name = "Spectral significant wave height" + cell_methods = "time:point" globwave_name="" - + META PTP ename=".vtpk_" - varnm="VTPK_" - long_name="Wind wave peak period" - globwave_name="" - -META PDIR - ename=".vmdr_" - varnm="VMDR_" - long_name="Mean wind wave direction from" - globwave_name="" - -META PT01 - ename=".vtm01_" - varnm="VTM01_" - long_name="sea_surface_wind_wave_mean_period_from_variance_spectral_density_first_frequency_moment" - long_name="Wind wave spectral moments (0,1) wave period (Tm01)" + varnm="VTPK_" + long_name="Wave peak period" + cell_methods = "time:point" globwave_name="" -$ Special section for "global" netCDF parameters +$ Special section for "global" netCDF attributes META global institution="Met Office" - grid_version=1.0 "r" - suite_version=44 "i" + grid_version=1.0 r + suite_version=44 i + +$ A "coordinate reference system" can be set/overriden +$ for all output field variables using the CRS keyword: +CRS crs + grid_mapping_name = latitude_longitude + longitude_of_prime_meridian = 0 f + semi_major_axis = 6378137 f + inverse_flattening = 298.2572 f + diff --git a/regtests/ww3_tnc1/input/ww3_ounf.nml b/regtests/ww3_tnc1/input/ww3_ounf.nml index c5903da28..4bb9fb8e2 100644 --- a/regtests/ww3_tnc1/input/ww3_ounf.nml +++ b/regtests/ww3_tnc1/input/ww3_ounf.nml @@ -2,34 +2,8 @@ ! WAVEWATCH III - ww3_ounf.nml - Grid output post-processing ! ! -------------------------------------------------------------------- ! - ! -------------------------------------------------------------------- ! ! Define the output fields to postprocess via FIELD_NML namelist -! -! * the detailed list of field names FIELD%LIST is given in ww3_shel.nml -! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 -! HS LM T02 T0M1 T01 FP DIR SPR DP HIG -! EF TH1M STH1M TH2M STH2M WN -! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR -! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS -! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC -! ABR UBR BED FBB TBB -! MSS MSC WL02 AXT AYT AXY -! DTD FC CFX CFD CFK -! U1 U2 -! -! * namelist must be terminated with / -! * definitions & defaults: -! FIELD%TIMESTART = '19000101 000000' ! Stop date for the output field -! FIELD%TIMESTRIDE = '0' ! Time stride for the output field -! FIELD%TIMECOUNT = '1000000000' ! Number of time steps -! FIELD%TIMESPLIT = 6 ! [0(nodate),4(yearly),6(monthly),8(daily),10(hourly)] -! FIELD%LIST = 'unset' ! List of output fields -! FIELD%PARTITION = '0 1 2 3' ! List of wave partitions ['0 1 2 3 4 5'] -! FIELD%SAMEFILE = T ! All the variables in the same file -! FIELD%VECTOR = T ! Vector [T] or dir/magnitude [F] for -! ! directional fields -! FIELD%TYPE = 3 ! [2 = SHORT, 3 = it depends , 4 = REAL] ! -------------------------------------------------------------------- ! &FIELD_NML FIELD%TIMESTART = '20100101 000000' @@ -39,49 +13,21 @@ FIELD%SAMEFILE = F FIELD%VECTOR = F FIELD%TYPE = 2 + FIELD%FCVARS = T + FIELD%TIMEUNIT = 'S' + FIELD%TIMEVAR = 'I' + FIELD%TIMEEPOCH = '19700101 000000' / - ! -------------------------------------------------------------------- ! ! Define the content of the output file via FILE_NML namelist -! -! * namelist must be terminated with / -! * definitions & defaults: -! FILE%PREFIX = 'ww3.' ! Prefix for output file name -! FILE%NETCDF = 3 ! Netcdf version [3|4] -! FILE%IX0 = 1 ! First X-axis or node index -! FILE%IXN = 1000000000 ! Last X-axis or node index -! FILE%IY0 = 1 ! First Y-axis index -! FILE%IYN = 1000000000 ! Last Y-axis index ! -------------------------------------------------------------------- ! &FILE_NML - FILE%NETCDF = 3 + FILE%NETCDF = 4 / ! -------------------------------------------------------------------- ! ! Define the content of the output file via SMC_NML namelist -! -! * For SMC grids, IX0, IXN, IY0 and IYN from FILE_NML are not used. -! Two types of output are available: -! * TYPE=1: Flat 1D "seapoint" array of grid cells. -! * TYPE=2: Re-gridded regular grid with cell sizes being an integer -! * multiple of the smallest SMC grid cells size. -! -! * Note that the first/last longitudes and latitudes will be adjusted -! to snap to the underlying SMC grid edges. CELFAC is only used for -! type 2 output and defines the output cell sizes as an integer -! multiple of the smallest SMC Grid cell size. CELFAC should be a -! power of 2, e.g: 1,2,4,8,16, etc... -! -! * namelist must be terminated with / -! * definitions & defaults: -! SMC%TYPE = 1 ! SMC Grid type (1 or 2) -! SMC%SXO = -999.9 ! First longitude -! SMC%EXO = -999.9 ! Last longitude -! SMC%SYO = -999.9 ! First latitude -! SMC%EYO = -999.9 ! Last latitude -! SMC%CELFAC = 1 ! Cell size factor (SMCTYPE=2 only) -! SMC%NOVAL = UNDEF ! Fill value for wet cells with no data ! -------------------------------------------------------------------- ! &SMC_NML / From 6efe9bb9c08207e71061d64082c8025cd97b9c61 Mon Sep 17 00:00:00 2001 From: Steven Brus Date: Wed, 26 May 2021 15:00:51 -0500 Subject: [PATCH 82/84] Make ww3_grid into a callable subroutine (#362) * Rename ww3_grid.ftn -> w3gridmd.ftn * Make body of ww3_grid into module * Substitute w3gridmd for ww3_grid in w3_new --- model/bin/make_makefile.sh | 3 +- model/bin/w3_new | 56 +- model/ftn/w3gridmd.ftn | 6597 ++++++++++++++++++++++++++++++++++++ model/ftn/ww3_grid.ftn | 6589 +---------------------------------- 4 files changed, 6631 insertions(+), 6614 deletions(-) create mode 100644 model/ftn/w3gridmd.ftn diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 6b4cd290b..3112f81a6 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -885,7 +885,7 @@ core= data='w3wdatmd w3gdatmd w3adatmd w3idatmd w3odatmd wmmdatmd' prop= - source="w3parall w3triamd $stx $nlx $btx $is $uostmd" + source="w3parall w3triamd w3gridmd $stx $nlx $btx $is $uostmd" IO='w3iogrmd' aux="constants w3servmd w3arrymd w3dispmd w3gsrumd w3timemd w3nmlgridmd $pdlibyow $memcode" if [ "$scrip" = 'SCRIP' ] @@ -1401,6 +1401,7 @@ 'W3SMCOMD' ) modtest=w3smcomd.o ;; 'W3OUNFMETAMD' ) modtest=w3ounfmetamd.o ;; 'W3METAMD' ) modtest=w3metamd.o ;; + 'W3GRIDMD' ) modtest=w3gridmd.o ;; * ) modfound=no ;; esac diff --git a/model/bin/w3_new b/model/bin/w3_new index d538e71f5..d030243ad 100755 --- a/model/bin/w3_new +++ b/model/bin/w3_new @@ -87,7 +87,7 @@ 'grib' ) cd $main_dir/ftn ; touch ww3_grib.ftn ;; 'mcp' ) cd $main_dir/ftn ; touch w3wavemd.ftn touch ww3_shel.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 'c90' ) cd $main_dir/ftn ; touch w3iogomd.ftn touch w3pro1md.ftn touch w3pro2md.ftn @@ -111,7 +111,7 @@ touch ww3_trnc.ftn ;; 'scrip' ) cd $main_dir/ftn ; touch wmgridmd.ftn touch wmscrpmd.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn cd $main_dir/ftn/SCRIP ; touch scrip_interface.ftn ;; 'scripnc') cd $main_dir/ftn ; touch wmgridmd.ftn cd $main_dir/ftn/SCRIP ; touch scrip_interface.ftn ;; @@ -151,7 +151,7 @@ touch wmgridmd.ftn touch ww3_gspl.ftn touch ww3_shel.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 'prop' ) cd $main_dir/ftn ; touch w3gdatmd.ftn touch w3adatmd.ftn touch w3idatmd.ftn @@ -162,21 +162,21 @@ touch wmgridmd.ftn touch w3updtmd.ftn touch ww3_shel.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_gspl.ftn ;; 'stress' ) cd $main_dir/ftn ; touch w3srcemd.ftn touch w3gdatmd.ftn touch w3iogrmd.ftn touch ww3_outp.ftn touch ww3_ounp.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch gx_outp.ftn ;; 'dstress') cd $main_dir/ftn ; touch w3srcemd.ftn touch w3gdatmd.ftn touch w3iogrmd.ftn touch w3fld1md.ftn touch w3fld2md.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 's_ln' ) cd $main_dir/ftn ; touch w3gdatmd.ftn touch w3srcemd.ftn touch w3iogrmd.ftn @@ -184,7 +184,7 @@ touch w3adatmd.ftn touch w3iogrmd.ftn touch wminitmd.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_outp.ftn touch ww3_ounp.ftn touch ww3_prep.ftn @@ -202,7 +202,7 @@ touch w3iogomd.ftn touch w3updtmd.ftn touch wmesmfmd.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_outp.ftn touch ww3_ounp.ftn touch ww3_ounf.ftn @@ -210,7 +210,7 @@ 'stab' ) cd $main_dir/ftn ; touch w3updtmd.ftn touch w3src3md.ftn touch w3src4md.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_outp.ftn touch ww3_ounp.ftn touch gx_outp.ftn ;; @@ -219,7 +219,7 @@ touch w3srcemd.ftn touch w3iogrmd.ftn touch wminitmd.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_prep.ftn touch ww3_outp.ftn touch ww3_ounp.ftn @@ -230,7 +230,7 @@ 'snls' ) cd $main_dir/ftn ; touch w3gdatmd.ftn touch w3srcemd.ftn touch w3iogrmd.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_outp.ftn touch gx_outp.ftn ;; 's_bot' ) cd $main_dir/ftn ; touch w3gdatmd.ftn @@ -241,7 +241,7 @@ touch w3profsmd_pdlib.ftn touch w3sic4md.ftn touch w3wavemd.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_gint.ftn touch ww3_outp.ftn touch ww3_outf.ftn @@ -253,18 +253,18 @@ touch w3srcemd.ftn touch w3iogrmd.ftn touch w3profsmd_pdlib.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_outp.ftn touch ww3_ounp.ftn touch gx_outp.ftn ;; 'miche' ) cd $main_dir/ftn ; touch w3gdatmd.ftn touch w3srcemd.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 's_tr' ) cd $main_dir/ftn ; touch w3gdatmd.ftn touch w3srcemd.ftn touch w3iogrmd.ftn touch w3profsmd_pdlib.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_outp.ftn touch ww3_ounp.ftn touch gx_outp.ftn ;; @@ -272,7 +272,7 @@ touch w3srcemd.ftn touch w3iogrmd.ftn touch w3profsmd_pdlib.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_outp.ftn touch ww3_ounp.ftn touch gx_outp.ftn ;; @@ -283,7 +283,7 @@ touch w3updtmd.ftn touch w3wavemd.ftn touch w3srcemd.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_outp.ftn touch ww3_ounp.ftn touch ww3_shel.ftn @@ -296,7 +296,7 @@ touch w3sic2md.ftn touch w3wavemd.ftn touch ww3_gint.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_ounf.ftn touch ww3_outf.ftn touch ww3_shel.ftn @@ -313,11 +313,11 @@ touch w3triamd.ftn touch w3updtmd.ftn touch w3wavemd.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 's_xx' ) cd $main_dir/ftn ; touch w3gdatmd.ftn touch w3srcemd.ftn touch w3iogrmd.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_outp.ftn touch ww3_ounp.ftn touch gx_outp.ftn ;; @@ -328,11 +328,11 @@ 'rwind' ) cd $main_dir/ftn ; touch w3updtmd.ftn touch w3gdatmd.ftn touch w3iogrmd.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 'wcor' ) cd $main_dir/ftn ; touch w3updtmd.ftn touch w3gdatmd.ftn touch w3iogrmd.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 'rstwind') cd $main_dir/ftn ; touch wmesmfmd.ftn touch w3idatmd.ftn touch w3iorsmd.ftn ;; @@ -352,12 +352,12 @@ touch wminitmd.ftn touch ww3_shel.ftn ;; 'mggse' ) cd $main_dir/ftn ; touch w3pro3md.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_shel.ftn ;; 'subsec' ) cd $main_dir/ftn ; touch w3gdatmd.ftn touch w3iogrmd.ftn touch w3wavemd.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 'tdyn' ) cd $main_dir/ftn ; touch w3pro2md.ftn touch w3psmcmd.ftn ;; 'dss0' ) cd $main_dir/ftn ; touch w3pro2md.ftn @@ -380,7 +380,7 @@ touch w3ref1md.ftn touch w3src4md.ftn touch w3srcemd.ftn - touch ww3_grid.ftn + touch w3gridmd.ftn touch ww3_ounp.ftn touch ww3_outp.ftn ;; 'rotag' ) cd $main_dir/ftn ; touch w3gdatmd.ftn @@ -393,13 +393,13 @@ touch ww3_ounf.ftn touch ww3_ounp.ftn touch ww3_outf.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 'arctic' ) cd $main_dir/ftn ; touch w3gdatmd.ftn touch w3iogrmd.ftn touch w3psmcmd.ftn touch w3updtmd.ftn touch w3wavemd.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 'nnt' ) cd $main_dir/ftn ; touch w3srcemd.ftn ;; 'mprf' ) cd $main_dir/ftn ; touch wmmdatmd.ftn touch wminitmd.ftn @@ -469,7 +469,7 @@ touch w3iogrmd.ftn touch w3srcemd.ftn touch w3wavemd.ftn - touch ww3_grid.ftn ;; + touch w3gridmd.ftn ;; 'b4b' ) cd $main_dir/ftn ; touch w3psmcmd.ftn ;; * ) echo "w3_new: keyword [$key] not recognized" ;; esac diff --git a/model/ftn/w3gridmd.ftn b/model/ftn/w3gridmd.ftn new file mode 100644 index 000000000..9425c2b8c --- /dev/null +++ b/model/ftn/w3gridmd.ftn @@ -0,0 +1,6597 @@ +#include "w3macros.h" +!/ ------------------------------------------------------------------- / + MODULE W3GRIDMD +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | H. L. Tolman | +!/ | J. H. Alves | +!/ | F. Ardhuin | +!/ | FORTRAN 90 | +!/ | Last update : 15-Apr-2020 | +!/ +-----------------------------------+ +!/ +!/ 14-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) +!/ 27-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 ) +!/ Add UNFORMATTED bath file option. +!/ Read options with namelists. +!/ 14-Feb-2000 : Adding exact Snl ( version 2.01 ) +!/ 04-May-2000 : Non central source term int. ( version 2.03 ) +!/ 24-Jan-2001 : Flat grid option. ( version 2.06 ) +!/ 02-Feb-2001 : Xnl version 3.0 ( version 2.07 ) +!/ 09-Feb-2001 : Third propagation scheme added. ( version 2.08 ) +!/ 27-Feb-2001 : O0 output switch added. ( version 2.08 ) +!/ 16-Mar-2001 : Fourth propagation scheme added. ( version 2.09 ) +!/ 29-Mar-2001 : Sub-grid island treatment. ( version 2.10 ) +!/ 20-Jul-2001 : Clean up. ( version 2.11 ) +!/ 12-Sep-2001 : Clean up. ( version 2.13 ) +!/ 09-Nov-2001 : Clean up. ( version 2.14 ) +!/ 11-Jan-2002 : Sub-grid ice treatment. ( version 2.15 ) +!/ 17-Jan-2002 : DSII bug fix. ( version 2.16 ) +!/ 09-May-2002 : Switch clean up. ( version 2.21 ) +!/ 26-Nov-2002 : Adding first version of NL-3/4. ( version 3.01 ) +!/ Removed before distribution in 3.12. +!/ 26-Dec-2002 : Relaxing CFL time step. ( version 3.02 ) +!/ 01-Aug-2003 : Modify GSE correction for moving gr.( version 3.03 ) +!/ Add offset option for first direction. +!/ 24-Dec-2004 : Multiple grid version. ( version 3.06 ) +!/ 04-May-2005 : Allow active points at edge. ( version 3.07 ) +!/ 07-Jul-2005 : Add MAPST2 and map processing. ( version 3.07 ) +!/ 09-Nov-2005 : Remove soft boundary options. ( version 3.08 ) +!/ 23-Jun-2006 : Adding alternative source terms. ( version 3.09 ) +!/ Module W3SLN1MD, dummy for others. +!/ 28-Jun-2006 : Adding file name preamble. ( version 3.09 ) +!/ 28-Oct-2006 : Spectral partitioning. ( version 3.09 ) +!/ 09-Jan-2007 : Correct edges of read mask. ( version 3.10 ) +!/ 26-Mar-2007 : Add to spectral partitioning. ( version 3.11 ) +!/ 14-Apr-2007 : Add Miche style limiter. ( version 3.11 ) +!/ ( J. H. Alves ) +!/ 25-Apr-2007 : Battjes-Janssen Sdb added. ( version 3.11 ) +!/ ( J. H. Alves ) +!/ 18-Sep-2007 : Adding WAM4 physics option. ( version 3.13 ) +!/ ( F. Ardhuin ) +!/ 09-Oct-2007 : Adding bottom scattering SBS1. ( version 3.13 ) +!/ ( F. Ardhuin ) +!/ 22-Feb-2008 : Initialize TRNX-Y properly. ( version 3.13 ) +!/ 29-May-2009 : Preparing distribution version. ( version 3.14 ) +!/ 23-Jul-2009 : Modification of ST3 namelist . ( version 3.14-SHOM ) +!/ 31-Mar-2010 : Addition of shoreline reflection ( version 3.14-IFREMER ) +!/ 29-Jun-2010 : Adding Stokes drift profile output ( version 3.14-IFREMER ) +!/ 30-Aug-2010 : Adding ST4 option ( version 3.14-IFREMER ) + +!/ 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 : Clean up of unstructured grids ( version 3.14.4 ) +!/ (A. Roland and F. Ardhuin) +!/ 06-Dec-2010 : Change from GLOBAL (logical) to ICLOSE (integer) to +!/ specify index closure for a grid. Change GLOBAL +!/ input in ww3_grid.inp to CSTRG. ( version 3.14 ) +!/ (T. J. Campbell, NRL) +!/ 25-Jun-2011 : Adding movable bed friction ( version 4.01 ) +!/ 16-Sep-2011 : Clean up. ( version 4.05 ) +!/ 01-Dec-2011 : New namelist for reflection ( version 4.05 ) +!/ 01-Mar-2012 : Bug correction for NLPROP in ST2 ( version 4.05 ) +!/ 12-Jun-2012 : Add /RTD rotated grid option. JGLi ( version 4.06 ) +!/ 13-Jul-2012 : Move data structures GMD (SNL3) and nonlinear +!/ filter (SNLS) from 3.15 (HLT). ( version 4.07 ) +!/ 02-Sep-2012 : Clean up of reflection and UG grids ( version 4.08 ) +!/ 12-Dec-2012 : Adding SMC grid. JG_Li ( version 4.08 ) +!/ 19-Dec-2012 : Add NOSWLL as namelist variable. ( version 4.OF ) +!/ 05-Mar-2013 : Adjusted default roughness for rocks( version 4.09 ) +!/ 01-Jun-2013 : Adding namelist for spectral output ( version 4.10 ) +!/ 12-Sep-2013 : Adding Arctic part for SMC grid. ( version 4.11 ) +!/ 01-Nov-2013 : Changed UG list name to UNST ( version 4.12 ) +!/ 11-Nov-2013 : Make SMC and RTD option compatible. ( version 4.13 ) +!/ 13-Nov-2013 : Moved out reflection to W3UPDTMD ( version 4.12 ) +!/ 27-Jul-2013 : Adding free infragravity waves ( version 4.15 ) +!/ 02-Dec-2013 : Update of ST4 ( version 4.16 ) +!/ 16-Feb-2014 : Adds wind bias correction: WCOR ( version 5.00 ) +!/ 10-Mar-2014 : Adding namelist for IC2 ( version 5.01 ) +!/ 29-May-2014 : Adding namelist for IC3 ( version 5.01 ) +!/ 15 Oct-2015 : Change SMC grid input files. JGLi ( version 5.09 ) +!/ 10-Jan-2017 : Changes for US3D and USSP ( version 6.01 ) +!/ 20-Jan-2017 : Bug fix for mask input from file. ( version 6.02 ) +!/ 01-Mar-2018 : RTD poles info read from namelist ( version 6.02 ) +!/ 14-Mar-2018 : Option to read UNST boundary file ( version 6.02 ) +!/ 26-Mar-2018 : Sea-point only Wnd/Cur input. JGLi ( version 6.02 ) +!/ 15-May-2018 : Dry sea points over zlim ( version 6.04 ) +!/ 06-Jun-2018 : add Implicit grid parameters for unstructured grids +!/ add DEBUGGRID/DEBUGSTP ( version 6.04 ) +!/ 18-Aug-2018 : S_{ice} IC5 (Q. Liu) ( version 6.06 ) +!/ 20-Jun-2018 : Update of ST6 (Q. Liu) ( version 6.06 ) +!/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) +!/ 27-Aug-2018 : Add WBT parameter ( version 6.06 ) +!/ 22-Jan-2020 : Update default values for IS2 ( version 7.05 ) +!/ 20-Feb-2020 : Include Romero's dissipation in ST4 ( version 7.06 ) +!/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) +!/ 18-Jun-2020 : Adds 360-day calendar option ( version 7.08 ) +!/ 24-Jun-2020 : RTD output b. c. to rotated grid. ( version 7.11 ) +!/ +!/ 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. +!/ +! 1. Purpose : +! +! "Grid" preprocessing program, which writes a model definition +! file containing the model parameter settigs and grid data. +! +! 2. Method : +! +! Information is read from the file ww3_grid.inp (NDSI), or +! preset in this program. A model definition file mod_def.ww3 is +! then produced by W3IOGR. Note that the name of the model +! definition file is set in W3IOGR. +! +! 3. Parameters : +! +! Local parameters. +! ---------------------------------------------------------------- +! NDSI Int. Input unit number ("ww3_grid.inp"). +! NDSS Int. Scratch file. +! NDSG Int. Grid unit ( may be NDSI ) +! NDSTR Int. Sub-grid unit ( may be NDSI or NDSG ) +! VSC Real Scale factor. +! VOF Real Add offset. +! ZLIM Real Limiting bottom depth, used to define land. +! IDLA Int. Layout indicator used by INA2R. +! IDFM Int. Id. FORMAT indicator. +! RFORM C*16 Id. FORMAT. +! FNAME C*60 File name with bottom level data. +! FROM C*4 Test string for open, 'UNIT' or 'FILE' +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! W3NMOD Subr. W3GDATMD Set number of model. +! W3SETG Subr. Id. Point to selected model. +! W3DIMS Subr. Id. Set array dims for a spectral grid. +! W3DIMX Subr. Id. Set array dims for a spatial grid. +! W3GRMP Subr. W3GSRUMD Compute bilinear interpolation for point +! W3NOUT Subr. W3ODATMD Set number of model for output. +! W3SETO Subr. Id. Point to selected model for output. +! W3DMO5 Subr. Id. Set array dims for output type 5. +! ITRACE Subr. W3SERVMD Subroutine tracing initialization. +! STRACE Subr. Id. Subroutine tracing. +! NEXTLN Subr. Id. Get next line from input file +! EXTCDE Subr. Id. Abort program as graceful as possible. +! DISTAB Subr. W3DISPMD Make tables for solution of the +! dispersion relation. +! READNL Subr. Internal Read namelist. +! INAR2R Subr. W3ARRYMD Read in an REAL array. +! PRTBLK Subr. Id. Print plot of array. +! W3IOGR Subr. W3IOGRMD Reading/writing model definition file. +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! None, stand-alone program. +! +! 6. Error messages : +! +! 7. Remarks : +! +! Physical grid : +! ----------------- +! +! The physical grid is defined by a grid counter IX defining the +! discrete longitude and IY defining the discrete latitude as shown +! below. For mathemathical convenience, these grid axes will +! generally be denoted as the X and Y axes. Two-dimensional arrays +! describing parameters on this grid are given as A(IY,IX). +! +! IY=NY +! ^ | | | | | | ^ N +! | |------|------|------|------|------|---- | +! | | :: | 25 | 26 | 27 | 28 | --|-- +! |------|------|------|------|------|---- | +! IY=3 | :: | :: | 9 | 10 | 11 | | +! |------|------|------|------|------|---- +! IY=2 | :: | 1 | 2 | :: | 3 | +! |------|------|------|------|------|---- +! IY=1 | :: | :: | :: | :: | :: | +! +------+------+------+------+------+---- +! IX=1 IX=2 IX=3 IX=4 IX=5 ---> IX=NX +! +! :: is a land point. +! +! To reduce memory usage of the model, spectra are stored for sea +! points only, in a one-dimensional grid with the length NSEA. This +! grid is called the storage grid. The definition of the counter +! in the storage grid is graphically depicted above. To transfer +! data between the two grids, the maps MAPFS and MAPSF are +! determined. MAPFS gives the counter of the storage grid ISEA +! for every physical grid point (IY,IX), such that +! +! MAPFS(IY,IX) = ISEA +! +! ISEA = 0 corresponds to land points. The map MAPSF gives the grid +! counters (IY,IX) for a given storage point ISEA. +! +! MAPSF(ISEA,1) = IX +! MAPSF(ISEA,2) = IY +! MAPSF(ISEA,3) = IY+(IX-1)*NY ( filled during reading ) +! +! Finally, a status maps MAPSTA and MAPST2 are determined, where +! the status indicator ISTAT = MAPSTA(IY,IX) determines the type +! of the grid point. +! +! ISTAT Means +! --------------------------------------------------- +! 0 Point excluded from grid. +! (-)1 Sea point +! (-)2 "Active" boundary point (data prescribed) +! +! For ISTAT=0, the secondary status counter ISTA2 is defined as +! +! ISTA2 Means +! --------------------------------------------------- +! 0 Land point. +! 1 Point excluded from grid. +! +! Negative values of ISTAT identify points that are temporarily +! taken out of the computation. For these points ISTA2 are +! defined per bit +! +! BIT Means +! --------------------------------------------------- +! 1 Ice flag (1 = ice coverage) +! 2 Dry flag (1 = dry point with depth 0) +! 3 Inferred land in multi-grid model. +! 4 Masking in multi-grid model. +! 5 land point flag for relocatable grid. +! +! Thus ISTA2=0 for ISTAT<0 is in error, ISTA2=1 means ice cover, +! ISTA2=3 means ice on dry point, etc. +! +! Spectral grid : +! ----------------- +! +! In the spectral grid (and in physical space in general), +! the cartesian convention for directions is used, i.e., the +! direction 0 corresponds to waves propagating in the positive +! X-direction and 90 degr. corresponds to waves propagating in +! the positive Y-direction. Similar definitions are used for the +! internal description of winds and currents. Output can obviously +! be transformed according to any preferred convention. +! +! ITH=NTH +! ^ | | | | | +! | |------|------|------|------|---- +! | | | | | | TH(3) = DTH*2. +! |------|------|------|------|---- +! ITH=2 | | | | | TH(2) = DTH +! |------|------|------|------|---- +! ITH=1 | | | | | TH(1) = 0. +! +------+------+------+------+---- +! IK=1 IK=2 IK=3 IK=4 ---> IK=NK +! +! The spectral grid consists of NK wavenumbers. The first +! wavenumber IK=1 corresponds to the longest wave. The wavenumber +! grid varies in space, as given by an invariant relative freq. +! grid and the local depth. The spectral grid furthermore contains +! NTH directions, equally spaced over a full circle. the first +! direction corresponds to the direction 0, etc. +! +! (Begin SMC description) +! +! Spherical Multiple-Cell (SMC) grid +! ----------------------------------- +! +! SMC grid is a multi-resolution grid using cells of multiple times +! of each other. It is similar to the lat-lon grid using rectangular +! cells but only cells at sea points are retained. All land points +! have been removed from the model. At high latitudes, cells are +! merged longitudinally to relax the CFL resctiction on time steps. +! Near coastlines, cells are divided into quarters in a few steps so +! that high resolution is achieved to refine coastlines and resolve +! small islands. At present, three tiers of quarter cells are used. +! For locating purpose, a usual x-y counter is setup by the smallest +! cell size and starting from the south-west corner of the usual +! rectuangular domain. Each sea cell is then given a pair of x-y +! index, plus a pair of increments. These four index are stored in +! the cell array IJKCel(NCel, 5), each row holds i, j, di, dj, ndps +! where ndps is an integer depth in metre. If precision higher than +! a metre is required, it may use other unit (cm for instance) with a +! conversion factor. +! +! For transport calculation, two face arrays, IJKUFc(NUFc, 7) and +! IJKVFc(NVFc,8), are also created to store the neighbouring cell +! sequential numbers and the face location and size. The 3 arrays +! are calculated outside the wave model and input from text files. +! +! Boundary condition is added for SMC grid so that it can be used for +! regional model as well. Most of the original boundary settings +! are reclaimed as long as the boundary condition file is provided +! by a lat-lon grid WW3 model, which will set the interpolation +! parameters in the boundary condition file. The NBI number is +! reset with an input value because the NX-Y double loop overcount +! the boundary cells for merged cells in the SMC grid. ISBPI +! boundary cell mapping array is fine as MAPFS uses duplicated cell +! number in any merged cell. From there, all original NBI loops are +! reusable. +! +! The whole Arctic can be included in the SMC grid if another option +! ARC is activated along with the SMC option. ARC option appends +! the polar Arctic part above 86N to the existing SMC grid and uses +! a map-east reference direction for this extra polar region. +! Because the map-east direction changes with latitude and longitude +! the wave spectra defined to the map-east direction could not be +! mixed up with the conventional spectra defined to the local east +! direction. A rotation sub is provided for convertion from one to +! another. Propagation part will be calculated together, including +! the boundary cells. The boundary cells are then updated by +! assigning the corresponding inner cells to them after conversion. +! Boundary cells are duplicated northmost 4 rows of the global part +! and they can be excluded for source term and output if required. +! For convenience, Arctic cellls are all base level cells and are +! appended to the end of the global cells. If refined cells were +! used in the Arctic part, it would not be kept all together, making +! the sub-loops much more complicated. If refined resolution cells +! are required for a Arctic regional model, users may consider use +! the rotated SMC grid options (RTD and SMC). +! +! For more information about the SMC grid, please refer to +! Li, J.G. (2012) Propagation of Ocean Surface Waves on a Spherical +! Multiple-Cell Grid. J. Comput. Phys., 231, 8262-8277. online at +! http://dx.doi.org/10.1016/j.jcp.2012.08.007 +! +! (End SMC description) +! +! ICEWIND is the scale factor for reduction of wind input by ice +! concentration. Value specified corresponds to the fractional +! input for 100% ice concentration. Default is 1.0, meaning that +! 100% ice concentration result in zero wind input. +! Sin_in_ice=Sin_in_open_water * (1-ICE*ICEWIND) + +! -----------------------------------------------------------------* +! 8. Structure : +! +! ---------------------------------------------------------------- +! 1. Set up grid storage structure. +! ( W3NMOD , W3NOUT , W3SETG , W3SETO ) +! 2.a I-O setup. +! b Print heading(s). +! 3. Prepare int. table for dispersion relation ( DISTAB ) +! 4. Read and process input file up to spectrum. +! a Get comment character +! b Name of grid +! c Define spectrum ( W3DIMS ) +! 5. Set-up discrete spectrum. +! a Directions. +! b Frequency for spectrum. +! 6. Read and process input file up to numerical parameters +! a Set model flags and time steps +! b Set / select source term package +! c Pre-process namelists. +! d Wind input source term. +! e Nonlinear interactions. +! f Whitecapping term. +! g Bottom friction source term. +! h Depth indiced breaking source term. +! i Triad interaction source term. +! j Bottom scattering source term. +! k Undefined source term. +! l Set / select propagaton scheme +! m Parameters for propagation scheme. +! n Set misc. parameters (ice, seeding, ...) +! o End of namelist processing +! p Set various other variables +! 7. Read and prepare grid. +! a Layout of grid +! b Storage of grid of grid +! c Read bottom depths +! d Set up temp map +! e Subgrid information +! 1 Info from input file +! 2 Open file and check if necessary +! 3 Read the data +! 4 Limit +! 8 Finalize status maps +! a Determine where to get the data +! Get data in parts from input file +! ---------------------------------------------------- +! b Read and update TMPSTA with bound. and excl. points. +! c Finalize excluded points +! ---------------------------------------------------- +! Read data from file +! ---------------------------------------------------- +! d Read data from file +! ---------------------------------------------------- +! e Get NSEA and other counters +! f Set up all maps ( W3DIMX ) +! 9. Prepare output boundary points. +! a Read +! b Update +! 10. Write model definition file. ( W3IOGR ) +! ---------------------------------------------------------------- +! +! 9. Switches : +! +! !/FLX1 Stresses according to Wu (1980). +! !/FLX2 Stresses according to T&C (1996). +! !/FLX3 Stresses according to T&C (1996) with cap on Cd. +! !/FLX4 Stresses according to Hwang (2011). +! +! !/LN0 No linear input source term. +! !/SEED 'Seeding' of lowest frequency for sufficiently strong +! winds. Proxi for linear input. +! !/LN1 Cavaleri and Melanotte-Rizzoli with Tolman filter. +! !/LNX Open slot. +! +! !/ST0 No source terms included (input/dissipation) +! !/ST1 WAM-3 physics package. +! !/ST2 Tolman and Chalikov (1996) physics package. +! !/ST3 WAM 4+ source terms from P.A.E.M. Janssen and J-R. Bidlot +! !/ST4 Input and dissipation using saturation following Ardhuin et al. (2009,2010) +! Filipot & Ardhuin (2010) or Romero (2019) +! !/ST6 BYDRZ source term package featuring Donelan et al. +! (2006) input and Babanin et al. (2001,2010) dissipation. +! !/STX Open slot. +! +! !/NL0 No nonlinear interactions. +! !/NL1 Discrete interaction approximation (DIA). +! !/NL2 Exact interactions (WRT). +! !/NL3 Generalized Multiple DIA (GMD). +! !/NL4 Two Scale Approximation +! !/NLX Open slot. +! !/NLS Snl based HF filter. +! +! !/BT0 No bottom friction included. +! !/BT1 JONSWAP bottom friction package. +! !/BT4 SHOWEX bottom friction using movable bed roughness +! (Tolman 1994, Ardhuin & al. 2003) +! !/BTX Open slot. +! +! !/IC1 Sink term for interaction with ice (uniform k_i) +! !/IC2 Sink term for under-ice boundary layer friction +! (Liu et al. 1991: JGR 96 (C3), 4605-4621) +! (Liu and Mollo 1988: JPO 18 1720-1712) +! !/IC3 Sink term for interaction with ice (Wang and Shen method) +! (Wang and Shen JGR 2010) +! !/IC4 Sink term for empirical, frequency-dependent attenuation +! in ice (Wadhams et al. 1988: JGR 93 (C6) 6799-6818) +! !/IC5 Sink term for interaction with ice (Mosig et al. method) +! (Mosig et al. 2015: JGR) +! +! !/UOST Unresolved Obstacles Source Term (UOST), Mentaschi et al. 2015 +! +! !/DB0 No depth-induced breaking included. +! !/DB1 Battjes-Janssen depth-limited breaking. +! !/DBX Open slot. +! !/MLIM Mich-style limiter. +! +! !/TR0 No triad interactions included. +! !/TRX Open slot. +! +! !/BS0 No bottom scattering included. +! !/BS1 Routines from F. Ardhuin. +! !/BSX Open slot. +! +! !/XX0 No unclasified source term included. +! !/XXX Open slot. +! +! !/PR1 First order propagation scheme. +! !/PR2 QUICKEST scheme with ULTIMATE limite and diffusion +! correction for swell dispersion. +! !/PR3 Averaging ULTIMATE QUICKEST scheme. +! +! !/RTD Rotated regular lat-lon grid. Special case is standard Polat=90. +! !/SMC UNO2 scheme on Spherical Multiple-Cell grid. +! !/ARC Append the Arctic part to the SMC grid. +! +! !/MGG GSE correction for moving grid. +! +! !/S Enable subroutine tracing. +! !/T Enable test output. +! !/T0 Enable test output tables for boundary output. +! +! !/O0 Print equivalent namelist setting to std out. +! !/O1 Print tables with boundary points as part of output. +! !/O2 Print MAPSTA as part of output. +! !/O2a Print land-sea mask in mask.ww3. +! !/O2b Print obstruction data. +! !/O2c Print extended status map. +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / + USE CONSTANTS +!/ + USE W3TRIAMD + USE W3GSRUMD, ONLY: W3GRMP + USE W3ODATMD, ONLY: W3NOUT, W3SETO, W3DMO5 + USE W3IOGRMD, ONLY: W3IOGR + USE W3SERVMD, ONLY: ITRACE, NEXTLN, EXTCDE +!/RTD USE W3SERVMD, ONLY: W3EQTOLL, W3LLTOEQ +!/ARC USE W3SERVMD, ONLY: W3LLTOEQ +!/S USE W3SERVMD, ONLY: STRACE + USE W3ARRYMD, ONLY: INA2R, INA2I +!/T USE W3ARRYMD, ONLY: PRTBLK + USE W3DISPMD, ONLY: DISTAB +!/ + USE W3GDATMD + USE W3ODATMD, ONLY: NDSE, NDST, NDSO + USE W3ODATMD, ONLY: NBI, NBI2, NFBPO, NBO, NBO2, FLBPI, FLBPO, & + IPBPO, ISBPO, XBPO, YBPO, RDBPO, FNMPRE, & + IHMAX, HSPMIN, WSMULT, WSCUT, FLCOMB, & + NOSWLL, PTMETH, PTFCUT + USE W3TIMEMD, ONLY: CALTYPE + USE W3NMLGRIDMD +!/SCRIP USE SCRIP_GRIDS, ONLY: GRID1_UNITS, GRID1_NAME, & +!/SCRIP GRID1_CENTER_LON, GRID1_CENTER_LAT, & +!/SCRIP GRID1_CORNER_LON, GRID1_CORNER_LAT, & +!/SCRIP GRID1_MASK, GRID1_SIZE, GRID1_RANK, & +!/SCRIP GRID1_IMASK, & +!/SCRIP GRID1_CORNERS, GRID1_DIMS +!/SCRIP USE SCRIP_KINDSMOD +!/SCRIP USE WMSCRPMD +!/SCRIPNC USE NETCDF +! +!/NL3 USE W3SNL3MD, ONLY: LAMMAX, DELTHM +!/NLS USE W3SNLSMD, ONLY: ABMAX +! + IMPLICIT NONE +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + TYPE(NML_SPECTRUM_T) :: NML_SPECTRUM + TYPE(NML_RUN_T) :: NML_RUN + TYPE(NML_TIMESTEPS_T) :: NML_TIMESTEPS + TYPE(NML_GRID_T) :: NML_GRID + TYPE(NML_RECT_T) :: NML_RECT + TYPE(NML_CURV_T) :: NML_CURV + TYPE(NML_UNST_T) :: NML_UNST + TYPE(NML_SMC_T) :: NML_SMC + TYPE(NML_DEPTH_T) :: NML_DEPTH + TYPE(NML_MASK_T) :: NML_MASK + TYPE(NML_OBST_T) :: NML_OBST + TYPE(NML_SLOPE_T) :: NML_SLOPE + TYPE(NML_SED_T) :: NML_SED + TYPE(NML_INBND_COUNT_T) :: NML_INBND_COUNT + TYPE(NML_INBND_POINT_T), ALLOCATABLE :: NML_INBND_POINT(:) + TYPE(NML_EXCL_COUNT_T) :: NML_EXCL_COUNT + TYPE(NML_EXCL_POINT_T), ALLOCATABLE :: NML_EXCL_POINT(:) + TYPE(NML_EXCL_BODY_T), ALLOCATABLE :: NML_EXCL_BODY(:) + TYPE(NML_OUTBND_COUNT_T) :: NML_OUTBND_COUNT + TYPE(NML_OUTBND_LINE_T), ALLOCATABLE :: NML_OUTBND_LINE(:) +! + INTEGER, PARAMETER :: NFL = 6 + INTEGER :: NDSI, NDSI2, NDSS, NDSM, NDSG, NDSTR,& + IERR, NDSTRC, NTRACE, ITH, IK, ITH0, & + ISP, IYN(NFL), NRLIN, NRSRCE, NRNL, & + NRBT, NRDB, NRTR, NRBS, NRXX, NRPROP,& + IDLA, IDFM, IX0, IXN, IX, IY, ISEA, & + IDX, IXO, IDY, IYO, IBA, NBA, ILOOP, & + IFL, NBOTOT, NPO, IP, IX1, IX2, IY1, & + IY2, J, JJ, IXR(4), IYR(4), ISEAI(4),& + IST, NKI, NTHI, NRIC, NRIS, I, IDFT, & + NSTAT, NBT, NLAND, NOSW, NMAPB, IMAPB +!/NL2 INTEGER :: IDEPTH +!/O1 INTEGER :: IBI, IP0, IPN, IPH, IPI + INTEGER :: NCOL = 78 +!/SMC !!Li Offset to change Equator index = 0 to regular index JEQT +!/SMC !!Li LvSMC levels of refinded resolutions for SMC grid. +!/SMC !!Li NBISMC number of boundary point for regional SMC grid. +!/SMC !!Li ISHFT for SMC i-index from smc origin to regular grid west edge. +!/SMC !!Li SMC cell only subgrid obstruction array dimensions NCObst, JObs. +!/SMC INTEGER :: JEQT, LvSMC, NBISMC, JS, NCObst, JObs, ISHFT +!/SMC INTEGER :: NGUI, NGVJ +!/ARC INTEGER :: NAUI, NAVJ +! +!/O2 INTEGER :: NMAP, IMAP +!/T INTEGER :: IX3, IY3 +!/T0 INTEGER :: IFILE +!/S INTEGER, SAVE :: IENT = 0 +! + INTEGER, ALLOCATABLE :: TMPSTA(:,:), TMPMAP(:,:), READMP(:,:) +!/T INTEGER, ALLOCATABLE :: MAPOUT(:,:) +! + REAL :: RXFR, RFR1, SIGMA, SXFR, FACHF, & + VSC, VSC0, VOF, & + ZLIM, X, Y, XP, XO0, YO0, DXO, DYO, & + XO, YO, RD(4), RDTOT, & + FACTOR, RTH0, FMICHE, RWNDC, & + WCOR1, WCOR2 +! + CHARACTER(LEN=4) :: GSTRG, CSTRG +! +! Variables used to allow spectral output on full grid +! + INTEGER :: P2SF,I1P2SF,I2P2SF + INTEGER :: E3D,I1E3D,I2E3D + INTEGER :: US3D,I1US3D,I2US3D, & + USSP, IUSSP, & + TH1MF, I1TH1M, I2TH1M, & + STH1MF, I1STH1M, I2STH1M, & + TH2MF, I1TH2M, I2TH2M, & + STH2MF, I1STH2M, I2STH2M + ! STK_WN are the decays for Stokes drift partitions + REAL :: STK_WN(25) + +!/DEBUGGRID INTEGER :: nbCase1, nbCase2, nbCase3, & +!/DEBUGGRID nbCase4, nbCase5, nbCase6, & +!/DEBUGGRID nbCase7, nbCase8 +!/DEBUGGRID INTEGER :: nbTMPSTA0, nbTMPSTA1, nbTMPSTA2 +!/DEBUGGRID INTEGER :: IAPROC +! +!/LN1 REAL :: CLIN, RFPM, RFHF +!/ST1 REAL :: CINP, CDIS, APM +!/ST2 REAL :: PHIMIN, FPIA, FPIB, DPHID +!/NL1 REAL :: NLPROP +!/NL2 REAL :: DPTFAC, DEPTHS(100) +!/NL3 REAL :: QPARMS(500) +!/NLS REAL :: A34, FHFC, DNM, FC1, FC2, FC3 +!/BT1 REAL :: GAMMA +!/PR2 REAL :: LATMIN +! +!/SMC REAL :: LATMIN, TRNMX, TRNMY +!/SMC INTEGER, ALLOCATABLE :: NLvCelsk(:), NLvUFcsk(:), NLvVFcsk(:) +!/SMC INTEGER, ALLOCATABLE :: IJKCelin(:,:),IJKUFcin(:,:),IJKVFcin(:,:) +!/SMC INTEGER, ALLOCATABLE :: NBICelin(:), IJKObstr(:,:) +!/ARC REAL :: PoLonAC, PoLatAC +!/ARC INTEGER, ALLOCATABLE :: IJKCelAC(:,:),IJKUFcAC(:,:),IJKVFcAC(:,:) +!/ARC REAL, ALLOCATABLE :: XLONAC(:),YLATAC(:),ELONAC(:),ELATAC(:) +! +!/RTD REAL, ALLOCATABLE :: AnglDin(:,:),StdLon(:,:),StdLat(:,:) +!/RTD ! 1-dim boundary sectors +!/RTD REAL, ALLOCATABLE :: BDYLON(:), BDYLAT(:), & +!/RTD ELatbdy(:), ELonbdy(:), Anglbdy(:) +!/RTD ! If the destination grid for an output b.c. is rotated, its pole is: +!/RTD REAL :: bPolat, bPolon +!/RTD! + REAL, ALLOCATABLE :: XGRDIN(:,:), YGRDIN(:,:) + REAL, ALLOCATABLE :: ZBIN(:,:), OBSX(:,:), OBSY(:,:) + REAL, ALLOCATABLE :: REFD(:,:), REFD2(:,:), REFS(:,:) +!/BT4 REAL, ALLOCATABLE :: SED_D50FILE(:,:), SED_POROFILE(:,:) +!/BT4 LOGICAL :: SEDMAPD50 +!/BT4 REAL :: SED_D50_UNIFORM, SED_DSTAR, RIPFAC1, & +!/BT4 RIPFAC2, RIPFAC3, RIPFAC4, SIGDEPTH, & +!/BT4 BOTROUGHMIN, BOTROUGHFAC +! + LOGICAL :: FLLIN, FLINDS, FLNL, FLBT, FLDB, & + FLTR, FLBS, FLXX, FLPROP, FLREF, & + FIRST, CONNCT, FLNEW, INGRID,FLIC, & + FLIS, FLGNML + LOGICAL :: FLTC96 = .FALSE. + LOGICAL :: FLNMLO = .FALSE. + LOGICAL :: FLSTB2 = .FALSE. + LOGICAL :: FLST4 = .FALSE. + LOGICAL :: FLST6 = .FALSE. + +!!Li Add a logical variable to shelter regular grid lines from SMC grid. + LOGICAL :: RGLGRD = .TRUE. +!!Li + REAL :: FACBERG, REFSLOPE +!/IS1 REAL :: ISC1, ISC2 +!/IS2 REAL :: ISC1, IS2BACKSCAT, IS2C2, IS2C3,& +!/IS2 IS2FRAGILITY, IS2DMIN, IS2DAMP, & +!/IS2 IS2CONC, IS2CREEPB, IS2CREEPC, & +!/IS2 IS2CREEPD, IS2CREEPN, IS2BREAKE,& +!/IS2 IS2WIM1, IS2BREAKF, IS2FLEXSTR, & +!/IS2 IS2ANDISN, IS2ANDISE, IS2ANDISD +!/IS2 LOGICAL :: IS2BREAK, IS2DISP, IS2DUPDATE, & +!/IS2 IS2ISOSCAT, IS2ANDISB +! +!/REF1 REAL :: REFCOAST, REFFREQ, REFMAP, & +!/REF1 REFSUBGRID, REFRMAX, REFMAPD, & +!/REF1 REFICEBERG, REFCOSP_STRAIGHT, & +!/REF1 REFFREQPOW, REFUNSTSOURCE +! +!/IG1 LOGICAL :: IGSWELLMAX, IGBCOVERWRITE +!/IG1 INTEGER :: IGMETHOD, IGADDOUTP, IGSOURCE, & +!/IG1 IGSOURCEATBP, IGSTERMS +!/IG1 REAL :: IGMAXFREQ, IGMINDEP, IGMAXDEP, & +!/IG1 IGKDMIN, IGFIXEDDEPTH, IGEMPIRICAL +! +!/IC2 LOGICAL :: IC2DISPER +!/IC2 REAL :: IC2TURB, IC2ROUGH, IC2REYNOLDS, & +!/IC2 IC2SMOOTH, IC2VISC, IC2TURBS, IC2DMAX + +!/IC3 REAL :: IC2TURB, IC2ROUGH, IC2REYNOLDS, & +!/IC3 IC2SMOOTH, IC2VISC, IC2TURBS, & +!/IC3 IC3MAXTHK, IC3MAXCNC, & +!/IC3 IC3HILIM, IC3KILIM, & +!/IC3 IC3VISC, IC3ELAS, IC3DENS, IC3HICE +!/IC3 LOGICAL :: IC3CHENG,USECGICE + +!/IC4 INTEGER :: IC4METHOD +!/IC4 REAL :: IC4KI(NIC4), IC4FC(NIC4) +! +!/IC5 REAL :: IC5MINIG, IC5MINWT, & +!/IC5 IC5MAXKRATIO, IC5MAXKI, IC5MINHW, & +!/IC5 IC5MAXITER, IC5RKICK, IC5KFILTER + + CHARACTER :: COMSTR*1, PNAME*30, RFORM*16, & + FROM*4, FNAME*60, TNAME*60, LINE*80, & + STATUS*20,FNAME2*60, PNAME2*40 + CHARACTER(LEN=6) :: YESXNO(2) +!/FLX3 CHARACTER(LEN=18) :: TYPEID + +!/SCRIP INTEGER :: NCID +!/SCRIP INTEGER :: grid_size_dimid, grid_rank_dimid, grid_corners_dimid +!/SCRIP INTEGER :: grid_center_lat_varid, grid_center_lon_varid +!/SCRIP INTEGER :: grid_corner_lat_varid, grid_corner_lon_varid +!/SCRIP INTEGER :: grid_area_varid, grid_imask_varid +!/SCRIP INTEGER :: grid_dims_varid +!/SCRIP REAL (SCRIP_R8) :: CONV_DX,CONV_DY,OFFSET + +!/ ------------------------------------------------------------------- / +!/ Namelists +!/ + INTEGER :: FLAGTR, IHM + REAL :: CFLTM, CICE0, CICEN, PMOVE, XFILT, & + LICE, XSEED, XR, HSPM, WSM, WSC, STDX,& + STDY, STDT, ICEHMIN, ICEHFAC, ICEHINIT, & + ICESLN, ICEWIND, ICESNL, ICESDS, & + ICEHDISP, ICEFDISP, ICEDDISP, BTBET +! + REAL(8) :: GSHIFT ! see notes in WMGHGH + LOGICAL :: FLC, ICEDISP, TRCKCMPR + INTEGER :: PTM ! Partitioning method + REAL :: PTFC ! Part. cut off freq (for method 5) + REAL :: AIRCMIN, AIRGB + CHARACTER :: PMNAME*45, PMNAM2*45 ! Part. method desc. +!/FLD1 INTEGER :: TAILTYPE +!/FLD1 REAL :: TAILLEV, TAILT1, TAILT2 +!/FLD2 INTEGER :: TAILTYPE +!/FLD2 REAL :: TAILLEV, TAILT1, TAILT2 +!/FLX3 INTEGER :: CTYPE +!/FLX3 REAL :: CDMAX +!/FLX4 REAL :: CDFAC +!/ST2 REAL :: ZWND, SWELLF, STABSH, STABOF, & +!/ST2 CNEG, CPOS, FNEG, FPOS +!/ST2 REAL :: SDSA0, SDSA1, SDSA2, & +!/ST2 SDSB0, SDSB1, SDSB2, SDSB3 +!/ST3 REAL :: ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP,& +!/ST3 ZALP, SWELLF, FXPM3, FXFM3, & +!/ST3 WNMEANPTAIL, WNMEANP, STXFTF, STXFTWN +!/ST3 REAL :: STXFTFTAIL, SDSC1, & +!/ST3 SDSDELTA1, SDSDELTA2 +! +!/ST4 INTEGER :: SWELLFPAR, SDSISO, SDSBRFDF +!/ST4 REAL :: SDSBCHOICE +!/ST4 REAL :: ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP,& +!/ST4 ZALP, Z0RAT, TAUWSHELTER, SWELLF, & +!/ST4 SWELLF2,SWELLF3,SWELLF4, SWELLF5, & +!/ST4 SWELLF6, SWELLF7, FXPM3, FXFM3, & +!/ST4 WNMEANPTAIL, WNMEANP, STXFTF, STXFTFTAIL, & +!/ST4 STXFTWN, SINBR, FXFMAGE, & +!/ST4 SDSC2, SDSCUM, SDSC4, SDSC5, SDSC6, WHITECAPWIDTH, WHITECAPDUR, & +!/ST4 SDSSTRAIN, SDSSTRAINA, SDSSTRAIN2, & +!/ST4 SDSBR, SDSP, SDSBT, SDS4A, SDKOF, & +!/ST4 SDSCOS, SDSDTH, SDSBCK, SDSABK, & +!/ST4 SDSPBK, SDSBINT, SDSHCK, & +!/ST4 SDSBRF1, & +!/ST4 SDSBM0, SDSBM1, SDSBM2, SDSBM3, & +!/ST4 SDSBM4, SDSFACMTF, SDSCUMP, SDSNUW, & +!/ST4 SDSL, SDSMWD, SDSMWPOW, SPMSS, SDSNMTF +! +!/ST6 REAL :: SINA0, SINWS, SINFC, & +!/ST6 SDSA1, SDSA2, SWLB1 +!/ST6 INTEGER :: SDSP1, SDSP2 +!/ST6 LOGICAL :: SDSET, CSTB1 +! +!/NL1 REAL :: LAMBDA, KDCONV, KDMIN, & +!/NL1 SNLCS1, SNLCS2, SNLCS3 +!/NL2 INTEGER :: IQTYPE, NDEPTH +!/NL2 REAL :: TAILNL +!/NL3 INTEGER :: NQDEF +!/NL3 REAL :: MSC, NSC, KDFD, KDFS +!/NL4 INTEGER :: INDTSA, ALTLP +!/DB1 REAL :: BJALFA, BJGAM +!/DB1 LOGICAL :: BJFLAG +!/PR2 REAL :: DTIME +! +!/SMC REAL :: DTIME, RFMAXD, SYMR, YJ0R +!/SMC LOGICAL :: UNO3, AVERG, SEAWND +! +!/PR3 REAL :: WDTHCG, WDTHTH + LOGICAL :: JGS_TERMINATE_MAXITER = .TRUE. + LOGICAL :: JGS_TERMINATE_DIFFERENCE = .TRUE. + LOGICAL :: JGS_TERMINATE_NORM = .TRUE. + LOGICAL :: JGS_LIMITER = .FALSE. + LOGICAL :: JGS_BLOCK_GAUSS_SEIDEL = .TRUE. + LOGICAL :: JGS_USE_JACOBI = .TRUE. + LOGICAL :: JGS_SOURCE_NONLINEAR = .FALSE. + LOGICAL :: UGOBCAUTO = .FALSE. + LOGICAL :: UGBCCFL = .FALSE. + LOGICAL :: EXPFSN = .TRUE. + LOGICAL :: EXPFSPSI = .FALSE. + LOGICAL :: EXPFSFCT = .FALSE. + LOGICAL :: IMPFSN = .FALSE. + LOGICAL :: EXPTOTAL = .FALSE. + LOGICAL :: IMPTOTAL = .FALSE. + LOGICAL :: IMPREFRACTION = .FALSE. + LOGICAL :: IMPFREQSHIFT = .FALSE. + LOGICAL :: IMPSOURCE = .FALSE. + LOGICAL :: SETUP_APPLY_WLV = .FALSE. + INTEGER :: JGS_MAXITER=100 + INTEGER :: nbSel + INTEGER :: UNSTSCHEMES(4) + INTEGER :: UNSTSCHEME + INTEGER :: JGS_NLEVEL = 0 + REAL*8 :: JGS_PMIN = 0. + REAL*8 :: JGS_DIFF_THR = 1.E-10 + REAL*8 :: JGS_NORM_THR = 1.E-20 + REAL*8 :: SOLVERTHR_SETUP = 1.E-20 + REAL*8 :: CRIT_DEP_SETUP = 0. +! + CHARACTER :: UGOBCFILE*60 + REAL :: UGOBCDEPTH + LOGICAL :: UGOBCOK + +!/RTD REAL :: PLAT, PLON +!/RTD LOGICAL :: UNROT +!/RTD ! Poles of the output nested grids. May be a mix of rotated and standard +!/RTD REAL, DIMENSION(9) :: BPLAT, BPLON +! +!/FLD1 NAMELIST /FLD1/ TAILTYPE, TAILLEV, TAILT1, TAILT2 +!/FLD2 NAMELIST /FLD2/ TAILTYPE, TAILLEV, TAILT1, TAILT2 +!/FLX3 NAMELIST /FLX3/ CDMAX, CTYPE +!/FLX4 NAMELIST /FLX4/ CDFAC +!/IC2 NAMELIST /SIC2/ IC2DISPER, IC2TURB, IC2ROUGH, IC2REYNOLDS, & +!/IC2 IC2SMOOTH, IC2VISC, IC2TURBS, IC2DMAX +!/IC3 NAMELIST /SIC3/ IC3MAXTHK, IC2TURB, IC2ROUGH, IC2REYNOLDS, & +!/IC3 IC2SMOOTH, IC2VISC, IC2TURBS, IC3MAXCNC, & +!/IC3 IC3CHENG, USECGICE, IC3HILIM, IC3KILIM, & +!/IC3 IC3VISC, IC3ELAS, IC3DENS, IC3HICE +!/IC4 NAMELIST /SIC4/ IC4METHOD, IC4KI, IC4FC +!/IC5 NAMELIST /SIC5/ IC5MINIG, IC5MINWT, IC5MAXKRATIO, & +!/IC5 IC5MAXKI, IC5MINHW, IC5MAXITER, IC5RKICK,& +!/IC5 IC5KFILTER +!/IG1 NAMELIST /SIG1/ IGMETHOD, IGADDOUTP, IGSOURCE, IGBCOVERWRITE, & +!/IG1 IGMAXFREQ, IGSTERMS, IGSWELLMAX, & +!/IG1 IGSOURCEATBP, IGKDMIN, IGFIXEDDEPTH, IGEMPIRICAL +!/LN1 NAMELIST /SLN1/ CLIN, RFPM, RFHF +!/ST1 NAMELIST /SIN1/ CINP +!/ST2 NAMELIST /SIN2/ ZWND, SWELLF, STABSH, STABOF, CNEG, CPOS, FNEG +!/ST3 NAMELIST /SIN3/ ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP, ZALP, & +!/ST3 SWELLF +!/ST4 NAMELIST /SIN4/ ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP, ZALP, & +!/ST4 TAUWSHELTER, SWELLFPAR, SWELLF, & +!/ST4 SWELLF2, SWELLF3, SWELLF4, SWELLF5, SWELLF6, & +!/ST4 SWELLF7, Z0RAT, SINBR +!/NL1 NAMELIST /SNL1/ LAMBDA, NLPROP, KDCONV, KDMIN, & +!/NL1 SNLCS1, SNLCS2, SNLCS3 +!/NL2 NAMELIST /SNL2/ IQTYPE, TAILNL, NDEPTH +!/NL2 NAMELIST /ANL2/ DEPTHS +!/NL3 NAMELIST /SNL3/ NQDEF, MSC, NSC, KDFD, KDFS +!/NL3 NAMELIST /ANL3/ QPARMS +!/NL4 NAMELIST /SNL4/ INDTSA, ALTLP +!/NLS NAMELIST /SNLS/ A34, FHFC, DNM, FC1, FC2, FC3 +!/ST1 NAMELIST /SDS1/ CDIS, APM +!/ST2 NAMELIST /SDS2/ SDSA0, SDSA1, SDSA2, SDSB0, SDSB1, PHIMIN +!/ST3 NAMELIST /SDS3/ SDSC1, WNMEANP, FXPM3, FXFM3, SDSDELTA1, & +!/ST3 SDSDELTA2 +!/ST4 NAMELIST /SDS4/ SDSBCHOICE, WNMEANP, WNMEANPTAIL, FXPM3, FXFM3, & +!/ST4 FXFMAGE, SDSC2, SDSCUM, SDSSTRAIN, SDSSTRAINA, & +!/ST4 SDSSTRAIN2, SDSC4, SDSFACMTF, SDSNMTF,SDSCUMP, & +!/ST4 SDSC5, SDSC6, SDSBR, SDSBT, SDSP, SDSISO, & +!/ST4 SDSBCK, SDSABK, SDSPBK, SDSBINT, SDSHCK, & +!/ST4 SDSDTH, SDSCOS, SDSBRF1, SDSBRFDF, SDSNUW, & +!/ST4 SDSBM0, SDSBM1, SDSBM2, SDSBM3, SDSBM4, & +!/ST4 WHITECAPWIDTH, WHITECAPDUR, SDSMWD, SDSMWPOW, SDKOF + +!/ST6 NAMELIST /SIN6/ SINA0, SINWS, SINFC +!/ST6 NAMELIST /SDS6/ SDSET, SDSA1, SDSA2, SDSP1, SDSP2 +!/ST6 NAMELIST /SWL6/ SWLB1, CSTB1 +!/BT1 NAMELIST /SBT1/ GAMMA +!/BT4 NAMELIST /SBT4/ SEDMAPD50, SED_D50_UNIFORM, RIPFAC1, & +!/BT4 RIPFAC2, RIPFAC3, RIPFAC4, SIGDEPTH, & +!/BT4 BOTROUGHMIN, BOTROUGHFAC +!/DB1 NAMELIST /SDB1/ BJALFA, BJGAM, BJFLAG +!/UOST NAMELIST /UOST/ UOSTFILELOCAL, UOSTFILESHADOW, & +!/UOST UOSTFACTORLOCAL, UOSTFACTORSHADOW +! +!/PR1 NAMELIST /PRO1/ CFLTM +!/PR2 NAMELIST /PRO2/ CFLTM, DTIME, LATMIN +!/SMC NAMELIST /PSMC/ CFLTM, DTIME, LATMIN, RFMAXD, UNO3, AVERG, & +!/SMC LvSMC, ISHFT, JEQT, NBISMC, SEAWND +! +!/PR3 NAMELIST /PRO3/ CFLTM, WDTHCG, WDTHTH + NAMELIST /UNST/ UGOBCAUTO, UGOBCDEPTH, UGOBCFILE, & + UGBCCFL, EXPFSN, EXPFSPSI, EXPFSFCT, & + IMPFSN, IMPTOTAL, EXPTOTAL, & + IMPREFRACTION, IMPFREQSHIFT, & + IMPSOURCE, & + JGS_TERMINATE_MAXITER, & + JGS_TERMINATE_DIFFERENCE, & + JGS_TERMINATE_NORM, & + JGS_LIMITER, & + JGS_USE_JACOBI, & + JGS_BLOCK_GAUSS_SEIDEL, & + JGS_MAXITER, & + JGS_PMIN, & + JGS_DIFF_THR, & + JGS_NORM_THR, & + JGS_NLEVEL, & + JGS_SOURCE_NONLINEAR, & + SETUP_APPLY_WLV, SOLVERTHR_SETUP, & + CRIT_DEP_SETUP + NAMELIST /MISC/ CICE0, CICEN, LICE, XSEED, FLAGTR, XP, XR, & + XFILT, PMOVE, IHM, HSPM, WSM, WSC, FLC, FMICHE, & + RWNDC, FACBERG, NOSW, GSHIFT, WCOR1, WCOR2, & + STDX, STDY, STDT, ICEHMIN, ICEHINIT, ICEDISP, & + ICESLN, ICEWIND, ICESNL, ICESDS, ICEHFAC, & + ICEHDISP, ICEDDISP, ICEFDISP, CALTYPE, & + TRCKCMPR, PTM, PTFC, BTBET + NAMELIST /OUTS/ P2SF, I1P2SF, I2P2SF, & + US3D, I1US3D, I2US3D, & + USSP, IUSSP, STK_WN, & + E3D, I1E3D, I2E3D, & + TH1MF, I1TH1M, I2TH1M, & + STH1MF, I1STH1M, I2STH1M, & + TH2MF, I1TH2M, I2TH2M, & + STH2MF, I1STH2M, I2STH2M +!/IS1 NAMELIST /SIS1/ ISC1, ISC2 +!/IS2 NAMELIST /SIS2/ ISC1, IS2C2, IS2C3, IS2BACKSCAT, IS2ISOSCAT, IS2BREAK, & +!/IS2 IS2DISP, IS2FRAGILITY, IS2CONC, IS2DMIN, & +!/IS2 IS2DAMP, IS2DUPDATE, IS2CREEPB, IS2CREEPC, & +!/IS2 IS2CREEPD, IS2CREEPN, IS2BREAKE, IS2BREAKF, & +!/IS2 IS2WIM1, IS2FLEXSTR, IS2ANDISB, IS2ANDISE, IS2ANDISD, & +!/IS2 IS2ANDISN +!/REF1 NAMELIST /REF1/ REFCOAST, REFFREQ, REFMAP, REFMAPD, & +!/REF1 REFSUBGRID, REFICEBERG, & +!/REF1 REFCOSP_STRAIGHT, REFSLOPE, REFRMAX, & +!/REF1 REFFREQPOW, REFUNSTSOURCE +!/ +!/RTD NAMELIST /ROTD/ PLAT, PLON, UNROT +!/RTD! Poles of destination grids for boundary conditions output +!/RTD NAMELIST /ROTB/ BPLAT, BPLON +!/ +!/ ------------------------------------------------------------------- / +!/ + DATA YESXNO / 'YES/--' , '---/NO' / + + CONTAINS + + SUBROUTINE W3GRID() + +!/O0 FLNMLO = .TRUE. +!/STAB2 FLSTB2 = .TRUE. +! +!/SMC !!Li Switch off regular grid lines by setting the logical +!/SMC RGLGRD = .FALSE. +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 1. Set up grid storage structure +! + CALL W3NMOD ( 1, 6, 6 ) + CALL W3SETG ( 1, 6, 6 ) + CALL W3NOUT ( 6, 6 ) + CALL W3SETO ( 1, 6, 6 ) +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 2. IO set-up. +! +!/DEBUGGRID IAPROC = 1 + NDSI = 10 + NDSS = 99 + NDSM = 20 +! + INQUIRE(FILE=TRIM(FNMPRE)//"ww3_grid.nml", EXIST=FLGNML) + IF (FLGNML) THEN + ! Read namelist + CALL W3NMLGRID (NDSI, TRIM(FNMPRE)//'ww3_grid.nml', NML_SPECTRUM, NML_RUN, & + NML_TIMESTEPS, NML_GRID, NML_RECT, NML_CURV, & + NML_UNST, NML_SMC, NML_DEPTH, NML_MASK, & + NML_OBST, NML_SLOPE, NML_SED, NML_INBND_COUNT, & + NML_INBND_POINT, NML_EXCL_COUNT, & + NML_EXCL_POINT, NML_EXCL_BODY, & + NML_OUTBND_COUNT, NML_OUTBND_LINE, IERR) + ELSE + OPEN (NDSI,FILE=TRIM(FNMPRE)//'ww3_grid.inp',STATUS='OLD', & + ERR=2000,IOSTAT=IERR) + END IF +! + NDSTRC = 6 + NTRACE = 10 + CALL ITRACE ( NDSTRC, NTRACE ) +! +!/S CALL STRACE (IENT, 'W3GRID') + WRITE (NDSO,900) +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 3.a Interpolation table for dispersion relation. +! + CALL DISTAB +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 3.b Table for friction factors +! + CALL TABU_FW +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 4 Read and process input file up to spectrum +! + + IF (FLGNML) THEN + ! grid name + GNAME=TRIM(NML_GRID%NAME) + WRITE (NDSO,902) GNAME + + ! spectrum parameters + RXFR=NML_SPECTRUM%XFR + RFR1=NML_SPECTRUM%FREQ1 + NKI=NML_SPECTRUM%NK + NTHI=NML_SPECTRUM%NTH + RTH0=NML_SPECTRUM%THOFF + + ELSE + + READ (NDSI,'(A)',END=2001,ERR=2002,IOSTAT=IERR) COMSTR + IF (COMSTR.EQ.' ') COMSTR = '$' + WRITE (NDSO,901) COMSTR + CALL NEXTLN ( COMSTR , NDSI , NDSE ) +! + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) GNAME + WRITE (NDSO,902) GNAME +! + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) RXFR, RFR1, NKI, NTHI, RTH0 + END IF + + + NK = NKI + NK2 = NKI + 2 + NTH = NTHI + NSPEC = NK * NTH + XFR = MAX ( RXFR , 1.00001 ) + FR1 = MAX ( RFR1 , 1.E-6 ) + DTH = TPI / REAL(NTH) + RTH0 = MAX ( -0.5 , MIN ( 0.5 , RTH0 ) ) + WRITE (NDSO,903) NTH, DTH*RADE + WRITE (NDSO,904) 360./REAL(NTH)*RTH0 + WRITE (NDSO,905) NK, FR1, FR1*XFR**(NK-1), XFR +! + CALL W3DIMS ( 1, NK, NTH, NDSE, NDST ) +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 5. Initialize spectral parameters. +! 5.a Directions : +! + DO ITH=1, NTH + TH (ITH) = DTH * ( RTH0 + REAL(ITH-1) ) + ESIN(ITH) = SIN ( TH(ITH) ) + ECOS(ITH) = COS ( TH(ITH) ) + IF ( ABS(ESIN(ITH)) .LT. 1.E-5 ) THEN + ESIN(ITH) = 0. + IF ( ECOS(ITH) .GT. 0.5 ) THEN + ECOS(ITH) = 1. + ELSE + ECOS(ITH) = -1. + END IF + END IF + IF ( ABS(ECOS(ITH)) .LT. 1.E-5 ) THEN + ECOS(ITH) = 0. + IF ( ESIN(ITH) .GT. 0.5 ) THEN + ESIN(ITH) = 1. + ELSE + ESIN(ITH) = -1. + END IF + END IF + ES2 (ITH) = ESIN(ITH)**2 + EC2 (ITH) = ECOS(ITH)**2 + ESC (ITH) = ESIN(ITH)*ECOS(ITH) + END DO +! + DO IK=2, NK+1 + ITH0 = (IK-1)*NTH + DO ITH=1, NTH + ESIN(ITH0+ITH) = ESIN(ITH) + ECOS(ITH0+ITH) = ECOS(ITH) + ES2 (ITH0+ITH) = ES2 (ITH) + EC2 (ITH0+ITH) = EC2 (ITH) + ESC (ITH0+ITH) = ESC (ITH) + END DO + END DO +! +! b Frequencies : +! + SIGMA = FR1 * TPI / XFR**2 + SXFR = 0.5 * (XFR-1./XFR) +! + DO IK=0, NK+1 + SIGMA = SIGMA * XFR + SIG (IK) = SIGMA + DSIP(IK) = SIGMA * SXFR + END DO +! + DSII( 1) = 0.5 * SIG( 1) * (XFR-1.) + DO IK=2, NK-1 + DSII(IK) = DSIP(IK) + END DO + DSII(NK) = 0.5 * SIG(NK) * (XFR-1.) / XFR +! + DO IK=1, NK + DDEN(IK) = DTH * DSII(IK) * SIG(IK) + END DO +! + DO ISP=1, NSPEC + IK = 1 + (ISP-1)/NTH + SIG2 (ISP) = SIG (IK) + DDEN2(ISP) = DDEN(IK) + END DO +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 6 Read and process input file up to numerical parameters +! 6.a Set model flags and time steps +! + WRITE (NDSO,910) + IF (FLGNML) THEN + FLDRY=NML_RUN%FLDRY + FLCX=NML_RUN%FLCX + FLCY=NML_RUN%FLCY + FLCTH=NML_RUN%FLCTH + FLCK=NML_RUN%FLCK + FLSOU=NML_RUN%FLSOU + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) & + FLDRY, FLCX, FLCY, FLCTH, FLCK, FLSOU + END IF +! + IYN = 2 + IF ( FLDRY ) IYN(1) = 1 + IF ( FLCX ) IYN(2) = 1 + IF ( FLCY ) IYN(3) = 1 + IF ( FLCTH ) IYN(4) = 1 + IF ( FLCK ) IYN(5) = 1 + IF ( FLSOU ) IYN(6) = 1 +! + WRITE (NDSO,911) (YESXNO(IYN(IFL)),IFL=1,NFL) +! + IF ( .NOT. (FLDRY.OR.FLCX.OR.FLCY.OR.FLCK.OR.FLCTH.OR.FLSOU) ) THEN + WRITE (NDSE,1010) + CALL EXTCDE ( 2 ) + END IF +! + IF (FLGNML) THEN + DTMAX=NML_TIMESTEPS%DTMAX + DTCFL=NML_TIMESTEPS%DTXY + DTCFLI=NML_TIMESTEPS%DTKTH + DTMIN=NML_TIMESTEPS%DTMIN + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) DTMAX, DTCFL, DTCFLI, DTMIN + END IF +!/SEC1 IF (DTMAX.LT.1.) THEN +!/SEC1 NITERSEC1=CEILING(1./DTMAX) +!/SEC1 WRITE (NDSO,913) NITERSEC1 +!/SEC1 ELSE +!/SEC1 NITERSEC1=1 +!/SEC1 END IF + + DTMAX = MAX ( 1. , DTMAX ) +! +! Commented to allow very high resolution zooms +! +! DTCFL = MAX ( 1. , DTCFL ) +! DTCFLI = MIN ( DTMAX , MAX ( 1. , DTCFLI ) ) + DTMIN = MIN ( DTMAX , MAX ( 0. , DTMIN ) ) + WRITE (NDSO,912) DTMAX, DTCFL, DTCFLI, DTMIN +! +! 6.b Set / select source term package +! + NRLIN = 0 + NRSRCE = 0 + NRNL = 0 + NRBT = 0 + NRIC = 0 + NRIS = 0 + NRDB = 0 + NRTR = 0 + NRBS = 0 + NRXX = 0 +! + FLLIN = .TRUE. + FLINDS = .TRUE. + FLNL = .TRUE. + FLBT = .TRUE. + FLIC = .FALSE. + FLIS = .FALSE. + FLDB = .TRUE. + FLTR = .TRUE. + FLBS = .TRUE. + FLREF = .FALSE. + FLXX = .TRUE. +! +!/LN0 NRLIN = NRLIN + 1 +!/LN0 FLLIN = .FALSE. +!/SEED NRLIN = NRLIN + 1 +!/LN1 NRLIN = NRLIN + 1 +!/LNX NRLIN = NRLIN + 1 +! +!/ST0 NRSRCE = NRSRCE + 1 +!/ST0 FLINDS = .FALSE. +!/ST1 NRSRCE = NRSRCE + 1 +!/ST2 NRSRCE = NRSRCE + 1 +!/ST2 FLTC96 = .TRUE. +!/ST3 NRSRCE = NRSRCE + 1 +!/ST4 NRSRCE = NRSRCE + 1 +!/ST4 FLST4 = .TRUE. +!/ST6 NRSRCE = NRSRCE + 1 +!/ST6 FLST6 = .TRUE. +!/STX NRSRCE = NRSRCE + 1 +! +!/NL0 NRNL = NRNL + 1 +!/NL0 FLNL = .FALSE. +!/NL1 NRNL = NRNL + 1 +!/NL2 NRNL = NRNL + 1 +!/NL3 NRNL = NRNL + 1 +!/NL4 NRNL = NRNL + 1 +!/NLX NRNL = NRNL + 1 +! +!/BT0 NRBT = NRBT + 1 +!/BT0 FLBT = .FALSE. +!/BT1 NRBT = NRBT + 1 +!/BT4 NRBT = NRBT + 1 +!/BT8 NRBT = NRBT + 1 +!/BT9 NRBT = NRBT + 1 +!/BTX NRBT = NRBT + 1 +! +!/IC1 NRIC = NRIC + 1 +!/IC1 FLIC = .TRUE. +!/IC2 NRIC = NRIC + 1 +!/IC2 FLIC = .TRUE. +!/IC3 NRIC = NRIC + 1 +!/IC3 FLIC = .TRUE. +!/IC4 NRIC = NRIC + 1 +!/IC4 FLIC = .TRUE. +!/IC5 NRIC = NRIC + 1 +!/IC5 FLIC = .TRUE. +! +!/IS1 NRIS = NRIS + 1 +!/IS1 FLIS = .TRUE. +!/IS2 NRIS = NRIS + 1 +!/IS2 FLIS = .TRUE. +! +!/DB0 NRDB = NRDB + 1 +!/DB0 FLDB = .FALSE. +!/DB1 NRDB = NRDB + 1 +!/DBX NRDB = NRDB + 1 +! +!/TR0 NRTR = NRTR + 1 +!/TR0 FLTR = .FALSE. +!/TR1 NRTR = NRTR + 1 +!/TRX NRTR = NRTR + 1 +! +!/BS0 NRBS = NRBS + 1 +!/BS0 FLBS = .FALSE. +!/BS1 NRBS = NRBS + 1 +!/BSX NRBS = NRBS + 1 +! +!/REF1 FLREF = .TRUE. +! +!/XX0 NRXX = NRXX + 1 +!/XX0 FLXX = .FALSE. +!/XXX NRXX = NRXX + 1 +! + IF ( .NOT.FLLIN .AND. .NOT.FLINDS .AND. .NOT.FLNL .AND. & + .NOT.FLBT .AND. .NOT.FLIC .AND. .NOT.FLIS .AND. & + .NOT.FLDB .AND. .NOT.FLTR .AND. .NOT.FLBS .AND. & + .NOT.FLXX .AND. .NOT.FLREF .AND. FLSOU ) THEN + WRITE (NDSE,1020) + CALL EXTCDE ( 10 ) + END IF +! + IF ( ( FLLIN .OR. FLINDS .OR. FLNL .OR. FLBT .OR. FLDB .OR. & + FLTR .OR. FLBS .OR. FLREF .OR. FLXX .OR. FLIC ) & + .AND. .NOT.FLSOU ) THEN + WRITE (NDSE,1021) + END IF +! + IF ( NRLIN .NE. 1 ) THEN + WRITE (NDSE,1022) NRLIN + CALL EXTCDE ( 11 ) + END IF +! + IF ( NRSRCE .NE. 1 ) THEN + WRITE (NDSE,1023) NRSRCE + CALL EXTCDE ( 12 ) + END IF +! + IF ( NRNL .NE. 1 ) THEN + WRITE (NDSE,1024) NRNL + CALL EXTCDE ( 13 ) + END IF +! + IF ( NRBT .NE. 1 ) THEN + WRITE (NDSE,1025) NRBT + CALL EXTCDE ( 14 ) + END IF +! + IF ( NRDB .NE. 1 ) THEN + WRITE (NDSE,1026) NRDB + CALL EXTCDE ( 15 ) + END IF +! + IF ( NRTR .NE. 1 ) THEN + WRITE (NDSE,1027) NRTR + CALL EXTCDE ( 16 ) + END IF +! + IF ( NRBS .NE. 1 ) THEN + WRITE (NDSE,1028) NRBS + CALL EXTCDE ( 17 ) + END IF +! + IF ( NRXX .NE. 1 ) THEN + WRITE (NDSE,1029) NRXX + CALL EXTCDE ( 18 ) + END IF +! + IF ( NRIC .GT. 1 ) THEN + WRITE (NDSE,1034) NRIC + CALL EXTCDE ( 19 ) + END IF +! + IF ( NRIS .GT. 1 ) THEN + WRITE (NDSE,1036) NRIS + CALL EXTCDE ( 26 ) + END IF + + +! +! 6.c Read namelist file or Pre-process namelists into scratch file +! + WRITE (NDSO,915) + IF (FLGNML) THEN + OPEN (NDSS,FILE=TRIM(FNMPRE)//TRIM(NML_GRID%NML),STATUS='OLD',FORM='FORMATTED') + ELSE + OPEN (NDSS,FILE=TRIM(FNMPRE)//'ww3_grid.scratch',FORM='FORMATTED') + DO + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,'(A)',END=2001,ERR=2002) LINE + IF ( LINE(1:16) .EQ. 'END OF NAMELISTS' ) THEN + EXIT + ELSE + WRITE (NDSS,'(A)') LINE + ENDIF + END DO + END IF + WRITE (NDSO,916) +! +! 6.d Define Sin. +! 6.d.1 Stresses +! +!/FLX1 WRITE (NDSO,810) +!/FLX2 WRITE (NDSO,810) +! +!/FLX2 CINXSI = 0.20 +!/FLX2 NITTIN = 3 +!/FLX3 CINXSI = 0.20 +!/FLX3 NITTIN = 3 +!/FLX3 CDMAX = 2.5E-3 +!/FLX3 CTYPE = 0 +! +!/FLX3 CALL READNL ( NDSS, 'FLX3', STATUS ) +!/FLX3 WRITE (NDSO,810) STATUS +!/FLX3 CDMAX = MAX ( 0. , CDMAX ) +!/FLX3 IF ( CTYPE .EQ. 1 ) THEN +!/FLX3 TYPEID = 'hyperbolic tangent' +!/FLX3 ELSE +!/FLX3 CTYPE = 0 +!/FLX3 TYPEID = 'discontinuous ' +!/FLX3 END IF +!/FLX3 WRITE (NDSO,811) CDMAX*1.E3, TYPEID +!/FLX3 CD_MAX = CDMAX +!/FLX3 CAP_ID = CTYPE +! +!/FLX4 CDFAC = 1.0 +!/FLX4 CALL READNL ( NDSS, 'FLX4', STATUS ) +!/FLX4 WRITE (NDSO,810) STATUS +!/FLX4 WRITE (NDSO,811) CDFAC +!/FLX4 FLX4A0 = CDFAC +! +! 6.d.2 Linear input +! +!/LN0 WRITE (NDSO,820) +!/SEED WRITE (NDSO,820) +!/LNX WRITE (NDSO,820) +! +!/LN1 CLIN = 80. +!/LN1 RFPM = 1. +!/LN1 RFHF = 0.5 +! +!/LN1 CALL READNL ( NDSS, 'SLN1', STATUS ) +!/LN1 WRITE (NDSO,820) STATUS +!/LN1 CLIN = MAX (0.,CLIN) +!/LN1 RFPM = MAX (0.,RFPM) +!/LN1 RFHF = MAX(0.,MIN (1.,RFHF)) +!/LN1 WRITE (NDSO,821) CLIN, RFPM, RFHF +!/LN1 SLNC1 = CLIN * (DAIR/DWAT)**2 / GRAV**2 +!/LN1 FSPM = RFPM +!/LN1 FSHF = RFHF +! +! 6.d.3 Exponential input +! +!/ST0 WRITE (NDSO,920) +!/STX WRITE (NDSO,920) +! +!/ST1 CINP = 0.25 +!/ST2 ZWND = 10. +!/ST2 SWELLF = 0.100 +!/ST2 STABSH = 1.38 +!/ST2 STABOF = -0.01 +!/ST2 CNEG = -0.1 +!/ST2 CPOS = 0.1 +!/ST2 FNEG = 150. +! +!/ST3 ZWND = 10. +!/ST3 ALPHA0 = 0.0095 +!/ST3 Z0MAX = 0.0 +!/ST3 BETAMAX = 1.2 ! default WAM4 / WAM4 + is 1.2 with rhow=1000 +!/ST3 SINTHP = 2. +!/ST3 SWELLF = 0. +!/ST3 ZALP = 0.0110 +! +!/ST4 ZWND = 10. +!/ST4 ALPHA0 = 0.0095 +!/ST4 Z0MAX = 0.0 +!/ST4 Z0RAT = 0.04 +!/ST4 BETAMAX = 1.43 +!/ST4 SINTHP = 2. +!/ST4 SWELLF = 0.66 +!/ST4 SWELLFPAR = 1 +!/ST4 SWELLF2 = -0.018 +!/ST4 SWELLF3 = 0.022 +!/ST4 SWELLF4 = 1.5E5 +!/ST4 SWELLF5 = 1.2 +!/ST4 SWELLF6 = 0. +!/ST4 SWELLF7 = 360000. +!/ST4 TAUWSHELTER = 0.3 +!/ST4 ZALP = 0.006 +!/ST4 SINBR = 0. +! +!/ST6 SINA0 = 0.09 +!/ST6 SINWS = 32.0 +!/ST6 SINFC = 6.0 +! +!/ST1 CALL READNL ( NDSS, 'SIN1', STATUS ) +!/ST1 WRITE (NDSO,920) STATUS +!/ST1 WRITE (NDSO,921) CINP +!/ST1 SINC1 = 28. * CINP * DAIR / DWAT +! +!/ST2 CALL READNL ( NDSS, 'SIN2', STATUS ) +!/ST2 WRITE (NDSO,920) STATUS +!/ST2 IF ( SWELLF.LT.0. .OR. SWELLF.GT.1. ) SWELLF = 1. +!/ST2 WRITE (NDSO,921) ZWND, SWELLF +!/ST2 IF ( STABSH .LT. 0.1 ) STABSH = 1. +!/ST2 IF ( CNEG*CPOS .EQ. 0. ) THEN +!/ST2 CNEG = 0. +!/ST2 CPOS = 0. +!/ST2 FNEG = 0. +!/ST2 FPOS = 0. +!/ST2 ELSE +!/ST2 CPOS = - ABS(CPOS) * ABS(CNEG)/CNEG +!/ST2 FNEG = - MAX(1.,ABS(FNEG)) +!/ST2 FPOS = FNEG * CNEG/CPOS +!/ST2 END IF +!/STAB2 WRITE (NDSO,1921) STABSH, STABOF, CNEG, CPOS, FNEG, FPOS +!/ST2 ZWIND = ZWND +!/ST2 FSWELL = SWELLF +!/ST2 SHSTAB = STABSH +!/ST2 OFSTAB = STABOF +!/ST2 CCNG = CNEG +!/ST2 CCPS = CPOS +!/ST2 FFNG = FNEG +!/ST2 FFPS = FPOS +! +!/ST3 CALL READNL ( NDSS, 'SIN3', STATUS ) +!/ST3 WRITE (NDSO,920) STATUS +!/ST3 WRITE (NDSO,921) ALPHA0, BETAMAX, SINTHP, Z0MAX, ZALP, ZWND, & +!/ST3 SWELLF +!/ST3 ZZWND = ZWND +!/ST3 AALPHA = ALPHA0 +!/ST3 BBETA = BETAMAX +!/ST3 SSINTHP = SINTHP +!/ST3 ZZ0MAX = Z0MAX +!/ST3 ZZALP = ZALP +!/ST3 SSWELLF(1) = SWELLF +! +!/ST4 CALL READNL ( NDSS, 'SIN4', STATUS ) +!/ST4 WRITE (NDSO,920) STATUS +!/ST4 WRITE (NDSO,921) ALPHA0, BETAMAX, SINTHP, Z0MAX, ZALP, ZWND, TAUWSHELTER, & +!/ST4 SWELLFPAR, SWELLF, SWELLF2, SWELLF3, SWELLF4, SWELLF5, & +!/ST4 SWELLF6, SWELLF7, Z0RAT +!/ST4 ZZWND = ZWND +!/ST4 AALPHA = ALPHA0 +!/ST4 BBETA = BETAMAX +!/ST4 SSINBR = SINBR +!/ST4 SSINTHP = SINTHP +!/ST4 ZZ0MAX = Z0MAX +!/ST4 ZZ0RAT = Z0RAT +!/ST4 ZZALP = ZALP +!/ST4 TTAUWSHELTER = TAUWSHELTER +!/ST4 SSWELLF(1) = SWELLF +!/ST4 SSWELLF(2) = SWELLF2 +!/ST4 SSWELLF(3) = SWELLF3 +!/ST4 SSWELLF(4) = SWELLF4 +!/ST4 SSWELLF(5) = SWELLF5 +!/ST4 SSWELLF(6) = SWELLF6 +!/ST4 SSWELLF(7) = SWELLF7 +!/ST4 SSWELLFPAR = SWELLFPAR +! +!/ST6 CALL READNL ( NDSS, 'SIN6', STATUS ) +!/ST6 WRITE (NDSO,920) STATUS +!/ST6 SIN6A0 = SINA0 +!/ST6 SIN6WS = SINWS +!/ST6 SIN6FC = SINFC +!/ST6 J = 1 +!/ST6 IF ( SIN6A0.LE.0. ) J = 2 +!/ST6 WRITE (NDSO,921) YESXNO(J), SIN6A0, SIN6WS, SIN6FC +! +! 6.e Define Snl. +! +!/NL0 WRITE (NDSO,922) +! +!/NL1 LAMBDA = 0.25 +!/NL1 IF ( FLTC96 ) THEN +!/NL1 NLPROP = 1.00E7 +!/NL1 ELSE IF ( FLST4 ) THEN +!/NL1 NLPROP = 2.50E7 +!/NL1 ELSE IF ( FLST6 ) THEN +!/NL1 NLPROP = 3.00E7 +!/NL1 ELSE +!/NL1 NLPROP = 2.78E7 +!/NL1 END IF +! +!/NL1 KDCONV = 0.75 +!/NL1 KDMIN = 0.50 +!/NL1 SNLCS1 = 5.5 +!/NL1 SNLCS2 = 0.833 +!/NL1 SNLCS3 = -1.25 +! +!/NL1 CALL READNL ( NDSS, 'SNL1', STATUS ) +!/NL1 WRITE (NDSO,922) STATUS +!/NL1 WRITE (NDSO,923) LAMBDA, NLPROP, KDCONV, KDMIN, & +!/NL1 SNLCS1, SNLCS2, SNLCS3 +!/NL1 SNLC1 = NLPROP / GRAV**4 +!/NL1 LAM = LAMBDA +!/NL1 KDCON = KDCONV +!/NL1 KDMN = KDMIN +!/NL1 SNLS1 = SNLCS1 +!/NL1 SNLS2 = SNLCS2 +!/NL1 SNLS3 = SNLCS3 +! +!/ST0 FACHF = 5. +!/ST1 FACHF = 4.5 +!/ST2 FACHF = 5. +!/ST3 FACHF = 5. +!/ST4 FACHF = 5. +!/ST6 FACHF = 5. +!/STX FACHF = 5. +!/NL2 IQTYPE = 2 +!/NL2 TAILNL = -FACHF +!/NL2 NDEPTH = 0 +!/NL3 NQDEF = 0 +!/NL3 MSC = 0. +!/NL3 NSC = -3.5 +!/NL3 KDFD = 0.20 +!/NL3 KDFS = 5.00 +!/NL4 INDTSA = 1 +!/NL4 ALTLP = 2 +!/NLS A34 = 0.05 +!/NLS FHFC = 1.E10 +!/NLS DNM = 0.25 +!/NLS FC1 = 1.25 +!/NLS FC2 = 1.50 +!/NLS FC3 = 6.00 +! +!/NL2 CALL READNL ( NDSS, 'SNL2', STATUS ) +!/NL2 WRITE (NDSO,922) STATUS +!/NL2 TAILNL = MIN ( MAX ( TAILNL, -5. ) , -4. ) +!/NL2 IF ( IQTYPE .EQ. 3 ) THEN +!/NL2 WRITE (NDSO,923) 'Shallow water', TAILNL +!/NL2 ELSE IF ( IQTYPE .EQ. 2 ) THEN +!/NL2 WRITE (NDSO,923) 'Deep water with scaling', TAILNL +!/NL2 ELSE +!/NL2 WRITE (NDSO,923) 'Deep water', TAILNL +!/NL2 IQTYPE = 1 +!/NL2 END IF +! +!/NL2 IF ( IQTYPE .NE. 3 ) THEN +!/NL2 NDEPTH = 1 +!/NL2 ALLOCATE ( MPARS(1)%SNLPS%DPTHNL(NDEPTH) ) +!/NL2 DPTHNL => MPARS(1)%SNLPS%DPTHNL +!/NL2 DPTHNL = 1000. +!/NL2 ELSE +!/NL2 IF ( NDEPTH .EQ. 0 ) NDEPTH = 7 +!/NL2 NDEPTH = MAX ( 1 , NDEPTH ) +!/NL2 ALLOCATE ( MPARS(1)%SNLPS%DPTHNL(NDEPTH) ) +!/NL2 DPTHNL => MPARS(1)%SNLPS%DPTHNL +!/NL2 DPTHNL(1) = 640. +!/NL2 DPTHNL(NDEPTH) = 10. +!/NL2 IF ( NDEPTH .GT. 1 ) THEN +!/NL2 DPTFAC = (DPTHNL(NDEPTH)/DPTHNL(1))**(1./(REAL(NDEPTH-1))) +!/NL2 DO IDEPTH=2, NDEPTH-1 +!/NL2 DPTHNL(IDEPTH) = DPTFAC*DPTHNL(IDEPTH-1) +!/NL2 END DO +!/NL2 END IF +!/NL2 CALL READNL ( NDSS, 'ANL2', STATUS ) +!/NL2 WRITE (NDSO,1923) NDEPTH, DPTHNL(1:MIN(5,NDEPTH)) +!/NL2 IF (NDEPTH .GT. 5 )WRITE (NDSO,2923) DPTHNL(6:NDEPTH) +!/NL2 END IF +!/NL2 WRITE (NDST,*) +!/NL2 IQTPE = IQTYPE +!/NL2 NDPTHS = NDEPTH +!/NL2 NLTAIL = TAILNL +! +!/NL3 CALL READNL ( NDSS, 'SNL3', STATUS ) +!/NL3 WRITE (NDSO,922) STATUS +!!/NL3 MSC = MAX ( 0. , MIN ( 8. , MSC ) ) ! Disabled HLT ca. 2009 +!/NL3 KDFD = MAX ( 0.001 , MIN ( 10. , KDFD ) ) +!/NL3 KDFS = MAX ( KDFD , MIN ( 10. , KDFS ) ) +!/NL3 WRITE (NDSO,923) MSC, NSC, KDFD, KDFS +! +!/NL3 NQDEF = MAX ( 0 , NQDEF ) +!/NL3 IF ( NQDEF .EQ. 0 ) THEN +!/NL3 NQDEF = 1 +!/NL3 QPARMS(1:5) = [ 0.25 , 0.00, -1., 1.E7, 0.00 ] +!/NL3 ELSE +!/NL3 DO J=1, NQDEF +!/NL3 QPARMS((J-1)*5+1:J*5) = [ 0.25, 0.00, -1., 1.E7, 1.E6 ] +!/NL3 END DO +!/NL3 CALL READNL ( NDSS, 'ANL3', STATUS ) +!/NL3 END IF +!/NL3 DO J=1, NQDEF +!/NL3 QPARMS((J-1)*5+1) = MAX(0.,MIN (LAMMAX,QPARMS((J-1)*5+1))) +!/NL3 QPARMS((J-1)*5+2) = MAX(0.,MIN (QPARMS((J-1)*5+1), & +!/NL3 QPARMS((J-1)*5+2))) +!/NL3 QPARMS((J-1)*5+3) = MIN (DELTHM,QPARMS((J-1)*5+3)) +!/NL3 QPARMS((J-1)*5+4) = MAX (0.,QPARMS((J-1)*5+4)) +!/NL3 QPARMS((J-1)*5+5) = MAX (0.,QPARMS((J-1)*5+5)) +!/NL3 END DO +!/NL3 WRITE (NDSO,1923) NQDEF +!/NL3 WRITE (NDSO,2923) QPARMS(1:NQDEF*5) +!/NL3 WRITE (NDSO,*) +!/NL3 SNLNQ = NQDEF +!/NL3 SNLMSC = MSC +!/NL3 SNLNSC = NSC +!/NL3 SNLSFD = SQRT ( KDFD * TANH(KDFD) ) +!/NL3 SNLSFS = SQRT ( KDFS * TANH(KDFS) ) +!/NL3 ALLOCATE ( MPARS(1)%SNLPS%SNLL(NQDEF), & +!/NL3 MPARS(1)%SNLPS%SNLM(NQDEF), & +!/NL3 MPARS(1)%SNLPS%SNLT(NQDEF), & +!/NL3 MPARS(1)%SNLPS%SNLCD(NQDEF), & +!/NL3 MPARS(1)%SNLPS%SNLCS(NQDEF) ) +!/NL3 SNLL => MPARS(1)%SNLPS%SNLL +!/NL3 SNLL = QPARMS(1:NQDEF*5:5) +!/NL3 SNLM => MPARS(1)%SNLPS%SNLM +!/NL3 SNLM = QPARMS(2:NQDEF*5:5) +!/NL3 SNLT => MPARS(1)%SNLPS%SNLT +!/NL3 SNLT = QPARMS(3:NQDEF*5:5) +!/NL3 SNLCD => MPARS(1)%SNLPS%SNLCD +!/NL3 SNLCD = QPARMS(4:NQDEF*5:5) +!/NL3 SNLCS => MPARS(1)%SNLPS%SNLCS +!/NL3 SNLCS = QPARMS(5:NQDEF*5:5) +! +!/NL4 CALL READNL ( NDSS, 'SNL4', STATUS ) +!/NL4 WRITE (NDSO,922) STATUS +!/NL4 WRITE (NDSO,923) INDTSA, ALTLP +!/NL4 ITSA = INDTSA +!/NL4 IALT = ALTLP +! +!/NLS CALL READNL ( NDSS, 'SNLS', STATUS ) +!/NLS WRITE (NDSO,9922) STATUS +!/NLS A34 = MAX ( 0. , MIN ( A34 , ABMAX ) ) +!/NLS FHFC = MAX ( 0. , FHFC ) +!/NLS DNM = MAX ( 0., DNM ) +!/NLS WRITE (NDSO,9923) A34, (XFR-1.)*A34, FHFC, DNM, FC1, FC2, FC3 +!/NLS CNLSA = A34 +!/NLS CNLSC = FHFC +!/NLS CNLSFM = DNM +!/NLS CNLSC1 = FC1 +!/NLS CNLSC2 = FC2 +!/NLS CNLSC3 = FC3 +! +! 6.f Define Sds. +! +!/ST0 WRITE (NDSO,924) +!/STX WRITE (NDSO,924) +! +!/ST1 CDIS = -2.36E-5 +!/ST1 APM = 3.02E-3 +!/ST2 SDSA0 = 4.8 +!/ST2 SDSA1 = 1.7e-4 +!/ST2 SDSA2 = 2.0 +!/ST2 SDSB0 = 0.3e-3 +!/ST2 SDSB1 = 0.47 +!/ST2 PHIMIN = 0.003 +!/ST2 SDSALN = 0.002 +!/ST2 FPIMIN = 0.009 +!/ST3 SDSC1 = -2.1 !! This is Bidlot et al. 2005, Otherwise WAM4 uses -4.5 +!/ST3 WNMEANP = 0.5 !! This is Bidlot et al. 2005, Otherwise WAM4 uses -0.5 +!/ST3 FXFM3 = 2.5 +!/ST3 FXPM3 = 4. +!/ST3 WNMEANPTAIL = 0.5 +!/ST3 SDSDELTA1 = 0.4 !! This is Bidlot et al. 2005, Otherwise WAM4 uses 0.5 +!/ST3 SDSDELTA2 = 0.6 !! This is Bidlot et al. 2005, Otherwise WAM4 uses 0.5 +! +!/ST4 WNMEANP = 0.5 ! taken from Bidlot et al. 2005 +!/ST4 FXFM3 = 2.5 +!/ST4 FXFMAGE = 0. +!/ST4 FXPM3 = 4. +!/ST4 WNMEANPTAIL = -0.5 +!/ST4 SDSBCHOICE =1 ! 1: Ardhuin et al., 2: Filipot & Ardhuin, 3: Romero +!/ST4 SDSC2 = -2.2E-5 ! -3.8 for Romero +!/ST4 SDSCUM = -0.40344 +!/ST4 SDSC4 = 1. +!/ST4 SDSC5 = 0. +!/ST4 SDSNUW = 0. +!/ST4 SDSC6 = 0.3 +!/ST4 SDSBR = 0.90E-3 ! 0.005 for Romero +!/ST4 SDSBRFDF = 0 +!/ST4 SDSBRF1 = 0.5 +!/ST4 SDSP = 2. ! this is now fixed in w3sds4, should be cleaned up +!/ST4 SDSDTH = 80. +!/ST4 SDSCOS = 2. +!/ST4 SDSISO = 2 +!/ST4 SDSBM0 = 1. +!/ST4 SDSBM1 = 0. +!/ST4 SDSBM2 = 0. +!/ST4 SDSBM3 = 0. +!/ST4 SDSBM4 = 0. +!/ST4 SDSBCK = 0. +!/ST4 SDSABK = 1.5 +!/ST4 SDSPBK = 4. +!/ST4 SDSBINT = 0.3 +!/ST4 SDSHCK = 1.5 +!/ST4 WHITECAPWIDTH = 0.3 +!/ST4 SDSSTRAIN = 0. +!/ST4 SDSFACMTF = 400 ! MTF factor for Lambda , Romero (2019) +!/ST4 SDSSTRAINA = 15. +!/ST4 SDSSTRAIN2 = 0. +!/ST4 WHITECAPDUR = 0.56 ! breaking duration factor +!/ST4! b (strength of breaking) +!/ST4 SDSBT = 1.100E-3 ! B_T (sturation threshold for dissipation rate b) +!/ST4! Lambda parameters +!/ST4 SDSL = 3.5000e-05 ! L scaling +!/ST4! MTF +!/ST4 SPMSS = 0.5 ! cmss^SPMSS +!/ST4 SDSNMTF = 1.5 ! MTF power +!/ST4 SDSCUMP = 2. +!/ST4! MW +!/ST4 SDSMWD = .9 ! new AFo +!/ST4 SDSMWPOW = 1. ! (k )^pow +!/ST4 SDKOF = 3. ! ko factor such that ko= g (SDKOF/(28 us))^2 +! +!/ST6 SDSET = .TRUE. +!/ST6 SDSA1 = 4.75E-06 +!/ST6 SDSP1 = 4 +!/ST6 SDSA2 = 7.00E-05 +!/ST6 SDSP2 = 4 +!/ST6 CSTB1 = .FALSE. +!/ST6 SWLB1 = 0.41E-02 +! +!/ST1 CALL READNL ( NDSS, 'SDS1', STATUS ) +!/ST1 WRITE (NDSO,924) STATUS +!/ST1 WRITE (NDSO,925) CDIS, APM +!/ST1 SDSC1 = TPI * CDIS / APM**2 +! +!/ST2 CALL READNL ( NDSS, 'SDS2', STATUS ) +!/ST2 WRITE (NDSO,924) STATUS +!/ST2 IF ( PHIMIN .LE. 0. ) THEN +!/ST2 SDSB2 = 0. +!/ST2 SDSB3 = 0. +!/ST2 PHIMIN = SDSB0 + SDSB1*FPIMIN +!/ST2 ELSE +!/ST2 FPIA = ( PHIMIN - SDSB0 ) / SDSB1 +!/ST2 IF ( FPIA .LT. FPIMIN ) THEN +!/ST2 SDSB3 = 4. +!/ST2 SDSB2 = FPIMIN**SDSB3 * (PHIMIN-SDSB0-SDSB1*FPIMIN) +!/ST2 ELSE +!/ST2 FPIB = MAX ( FPIA-0.0025 , FPIMIN ) +!/ST2 DPHID = MAX ( PHIMIN - SDSB0 - SDSB1*FPIB , 1.E-15 ) +!/ST2 SDSB3 = MIN ( 10. , SDSB1*FPIB / DPHID ) +!/ST2 SDSB2 = FPIB**SDSB3 * DPHID +!/ST2 FPIMIN = FPIB +!/ST2 END IF +!/ST2 END IF +!/ST2 WRITE (NDSO,925) SDSA0, SDSA1, SDSA2, & +!/ST2 SDSB0, SDSB1, SDSB2, SDSB3, FPIMIN, PHIMIN +!/ST2 CDSA0 = SDSA0 +!/ST2 CDSA1 = SDSA1 +!/ST2 CDSA2 = SDSA2 +!/ST2 CDSB0 = SDSB0 +!/ST2 CDSB1 = SDSB1 +!/ST2 CDSB2 = SDSB2 +!/ST2 CDSB3 = SDSB3 +! +!/ST3 CALL READNL ( NDSS, 'SDS3', STATUS ) +!/ST3 WRITE (NDSO,924) STATUS +!/ST3 WRITE (NDSO,925) SDSC1, WNMEANP, SDSDELTA1, & +!/ST3 SDSDELTA2 +!/ST3 SSDSC1 = SDSC1 +!/ST3 WWNMEANP = WNMEANP +!/ST3 FFXFM = FXFM3 * TPI +!/ST3 FFXPM = FXPM3 * GRAV / 28. +!/ST3 WWNMEANPTAIL = WNMEANPTAIL +!/ST3 DDELTA1 = SDSDELTA1 +!/ST3 DDELTA2 = SDSDELTA2 +! +!/ST4 CALL READNL ( NDSS, 'SDS4', STATUS ) +!/ST4 WRITE (NDSO,924) STATUS +!/ST4 WRITE (NDSO,925) SDSC2, SDSBCK, SDSCUM, WNMEANP +!/ST4 SSDSC(1) = REAL(SDSBCHOICE) +!/ST4 SSDSC(2) = SDSC2 +!/ST4 SSDSC(3) = SDSCUM +!/ST4 SSDSC(4) = SDSC4 +!/ST4 SSDSC(5) = SDSC5 +!/ST4 SSDSC(6) = SDSC6 +!/ST4 SSDSC(7) = WHITECAPWIDTH +!/ST4 SSDSC(8) = SDSSTRAIN ! Straining constant ... +!/ST4 SSDSC(9) = SDSL +!/ST4 SSDSC(10) = SDSSTRAINA*NTH/360. ! angle Aor enhanced straining +!/ST4 SSDSC(11) = SDSSTRAIN2 ! straining constant for directional part +!/ST4 SSDSC(12) = SDSBT +!/ST4 SSDSC(13) = SDSMWD +!/ST4 SSDSC(14) = SPMSS +!/ST4 SSDSC(15) = SDSMWPOW +!/ST4 SSDSC(16) = SDKOF +!/ST4 SSDSC(17) = WHITECAPDUR +!/ST4 SSDSC(18) = SDSFACMTF +!/ST4 SSDSC(19) = SDSNMTF +!/ST4 SSDSC(20) = SDSCUMP +!/ST4 SSDSC(21) = SDSNUW +! +!/ST4 SSDSBR = SDSBR +!/ST4 SSDSBRF1 = SDSBRF1 +!/ST4 SSDSBRFDF= SDSBRFDF +!/ST4 SSDSBM(0) = SDSBM0 +!/ST4 SSDSBM(1) = SDSBM1 +!/ST4 SSDSBM(2) = SDSBM2 +!/ST4 SSDSBM(3) = SDSBM3 +!/ST4 SSDSBM(4) = SDSBM4 +!/ST4 SSDSBT = SDSBT +!/ST4 SSDSISO = SDSISO +!/ST4 SSDSCOS = SDSCOS +!/ST4 SSDSP = SDSP +!/ST4 SSDSDTH = SDSDTH +!/ST4 WWNMEANP = WNMEANP +!/ST4 FFXFM = FXFM3 * TPI +!/ST4 FFXFA = FXFMAGE * TPI +!/ST4 FFXPM = FXPM3 * GRAV / 28. +!/ST4 WWNMEANPTAIL = WNMEANPTAIL +!/ST4 SSDSBCK = SDSBCK +!/ST4 SSDSABK = SDSABK +!/ST4 SSDSPBK = SDSPBK +!/ST4 SSDSBINT = SDSBINT +!/ST4 SSDSHCK = SDSHCK +! +!/ST6 CALL READNL ( NDSS, 'SDS6', STATUS ) +!/ST6 WRITE (NDSO,924) STATUS +!/ST6 SDS6ET = SDSET +!/ST6 SDS6A1 = SDSA1 +!/ST6 SDS6P1 = SDSP1 +!/ST6 SDS6A2 = SDSA2 +!/ST6 SDS6P2 = SDSP2 +!/ST6 J = 2 +!/ST6 IF (SDSET) J = 1 +!/ST6 WRITE (NDSO,925) YESXNO(J), YESXNO(3-J), SDS6A1, SDS6P1, SDS6A2, SDS6P2 +!/ST6 +!/ST6 CALL READNL ( NDSS, 'SWL6', STATUS ) +!/ST6 WRITE (NDSO,937) STATUS +!/ST6 J = 1 +!/ST6 SWL6S6 = SWLB1.GT.0.0 +!/ST6 IF (.NOT.SWL6S6) J = 2 +!/ST6 SWL6B1 = SWLB1 +!/ST6 SWL6CSTB1 = CSTB1 +!/ST6 IF (CSTB1) THEN +!/ST6 WRITE (NDSO,940) YESXNO(J), '(constant) ' ,SWL6B1 +!/ST6 ELSE +!/ST6 WRITE (NDSO,940) YESXNO(J), '(steepness dependent)' ,SWL6B1 +!/ST6 END IF +! +! 6.g Define Sbt. +! +!/BT0 WRITE (NDSO,926) +!/BT4 WRITE (NDSO,926) +!/BTX WRITE (NDSO,926) +! +!/BT1 GAMMA = -0.067 +! +!/BT1 CALL READNL ( NDSS, 'SBT1', STATUS ) +!/BT1 WRITE (NDSO,926) STATUS +!/BT1 WRITE (NDSO,927) GAMMA +!/BT1 SBTC1 = 2. * GAMMA / GRAV +! +!/BT4 SEDMAPD50=.FALSE. +!/BT4 SED_D50_UNIFORM=2.E-4 ! default grain size: medium sand 200 microns +!/BT4 RIPFAC1=0.4 ! A1 in Ardhuin et al. 2003 +!/BT4 RIPFAC2=-2.5 ! A2 in Ardhuin et al. 2003 +!/BT4 RIPFAC3=1.2 ! A3 in Ardhuin et al. 2003 +!/BT4 RIPFAC4=0.05 ! A4 in Ardhuin et al. 2003 +!/BT4 SIGDEPTH=0.05 +!/BT4 BOTROUGHMIN=0.01 +!/BT4 BOTROUGHFAC=1.00 +!/BT4 CALL READNL ( NDSS, 'SBT4', STATUS ) +!/BT4 WRITE (NDSO,926) STATUS +!/BT4 WRITE (NDSO,927) SEDMAPD50, SED_D50_UNIFORM, & +!/BT4 RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4,SIGDEPTH, & +!/BT4 BOTROUGHMIN, BOTROUGHFAC +!/BT4 SBTCX(1)=RIPFAC1 +!/BT4 SBTCX(2)=RIPFAC2 +!/BT4 SBTCX(3)=RIPFAC3 +!/BT4 SBTCX(4)=RIPFAC4 +!/BT4 SBTCX(5)=SIGDEPTH +!/BT4 SBTCX(6)=BOTROUGHMIN +!/BT4 SBTCX(7)=BOTROUGHFAC +! +! +! 6.h Define Sdb. +! +!/DB0 WRITE (NDSO,928) +!/DBX WRITE (NDSO,928) +! +!/DB1 BJALFA = 1. +!/DB1 BJGAM = 0.73 +!/DB1 BJFLAG = .TRUE. +! +!/DB1 CALL READNL ( NDSS, 'SDB1', STATUS ) +!/DB1 WRITE (NDSO,928) STATUS +!/DB1 BJALFA = MAX ( 0. , BJALFA ) +!/DB1 BJGAM = MAX ( 0. , BJGAM ) +!/DB1 WRITE (NDSO,929) BJALFA, BJGAM +!/DB1 IF ( BJFLAG ) THEN +!/DB1 WRITE (NDSO,*) ' Using Hmax/d ratio only.' +!/DB1 ELSE +!/DB1 WRITE (NDSO,*) & +!/DB1 ' Using Hmax/d in Miche style formulation.' +!/DB1 END IF +!/DB1 WRITE (NDSO,*) +!/DB1 SDBC1 = BJALFA +!/DB1 SDBC2 = BJGAM +!/DB1 FDONLY = BJFLAG +! +! +!/UOST UOSTFILELOCAL = 'obstructions_local.'//ADJUSTL(TRIM(GNAME))//'.in' +!/UOST UOSTFILESHADOW = 'obstructions_shadow.'//ADJUSTL(TRIM(GNAME))//'.in' +!/UOST UOSTFACTORLOCAL = 1 +!/UOST UOSTFACTORSHADOW = 1 +!/UOST CALL READNL ( NDSS, 'UOST', STATUS ) +!/UOST WRITE (NDSO,4500) STATUS +!/UOST WRITE (NDSO,4501) ADJUSTL(TRIM(UOSTFILELOCAL)), ADJUSTL(TRIM(UOSTFILESHADOW)), & +!/UOST UOSTFACTORLOCAL, UOSTFACTORSHADOW +! +! 6.i Define Str. +! +!/TR0 WRITE (NDSO,930) +!/TRX WRITE (NDSO,930) +! +! 6.j Define Sbs. +! +!/BS0 WRITE (NDSO,932) +!/BS1 WRITE (NDSO,932) +!/BSX WRITE (NDSO,932) +! +! 6.k Define Sxx and Sic. +! +! !/XX0 WRITE (NDSO,934) +!/XXX WRITE (NDSO,934) +! +!/IC1 WRITE (NDSO,935) +!/IC1 WRITE(NDSO,'(A/A)')' Sice will be calculated using ' & +!/IC1 //'user-specified ki values.',' Required ' & +!/IC1 //'field input: ice parameter 1.' +! +!/IC2 WRITE (NDSO,935) +!/IC2 WRITE(NDSO,'(A/A)')' Sice will be calculated using ' & +!/IC2 //'under-ice boundary layer method.',' Required ' & +!/IC2 //'field input: ice parameters 1 and 2.' +! +!/IC3 WRITE (NDSO,935) +!/IC3 WRITE(NDSO,'(A/A)')' Sice will be calculated using '& +!/IC3 //'Wang and Shen method.',' '& +!/IC3 //'Required field input: ice parameters 1, 2, 3 and 4.' +! +!/IC4 WRITE (NDSO,935) +!/IC4 WRITE(NDSO,'(A/A)')' Sice will be calculated using '& +!/IC4 //'Empirical method.',' '& +!/IC4 //'Required field input: ice parameters (varies).' +! +!/IC5 WRITE (NDSO,935) +!/IC5 WRITE(NDSO,'(A/A/)')' Sice will be calculated using '& +!/IC5 //'Mosig et al. method.',' '& +!/IC5 //'Required field input: ice parameters 1, 2, 3 and 4.' +! +! 6.l Read unstructured data +! initialisation of logical related to unstructured grid + UGOBCAUTO = .TRUE. + UGBCCFL = .TRUE. + UGOBCDEPTH= -10. + UGOBCOK = .FALSE. + UGOBCFILE = 'unset' + EXPFSN = .TRUE. + EXPFSPSI = .FALSE. + EXPFSFCT = .FALSE. + IMPFSN = .FALSE. + IMPTOTAL = .FALSE. + EXPTOTAL = .FALSE. + IMPREFRACTION = .FALSE. + IMPFREQSHIFT = .FALSE. + IMPSOURCE = .FALSE. + SETUP_APPLY_WLV = .FALSE. + SOLVERTHR_SETUP=1E-14 + CRIT_DEP_SETUP=0.1 + JGS_TERMINATE_MAXITER = .TRUE. + JGS_TERMINATE_DIFFERENCE = .TRUE. + JGS_TERMINATE_NORM = .FALSE. + JGS_LIMITER = .FALSE. + JGS_BLOCK_GAUSS_SEIDEL = .TRUE. + JGS_USE_JACOBI = .TRUE. + JGS_MAXITER=100 + JGS_PMIN = 1 + JGS_DIFF_THR = 1.E-10 + JGS_NORM_THR = 1.E-20 + JGS_NLEVEL = 0 + JGS_SOURCE_NONLINEAR = .FALSE. +! read data from the unstructured devoted namelist + CALL READNL ( NDSS, 'UNST', STATUS ) + + B_JGS_USE_JACOBI = JGS_USE_JACOBI + B_JGS_TERMINATE_MAXITER = JGS_TERMINATE_MAXITER + B_JGS_TERMINATE_DIFFERENCE = JGS_TERMINATE_DIFFERENCE + B_JGS_TERMINATE_NORM = JGS_TERMINATE_NORM + B_JGS_LIMITER = JGS_LIMITER + B_JGS_BLOCK_GAUSS_SEIDEL = JGS_BLOCK_GAUSS_SEIDEL + B_JGS_MAXITER = JGS_MAXITER + B_JGS_PMIN = JGS_PMIN + B_JGS_DIFF_THR = JGS_DIFF_THR + B_JGS_NORM_THR = JGS_NORM_THR + B_JGS_NLEVEL = JGS_NLEVEL + B_JGS_SOURCE_NONLINEAR = JGS_SOURCE_NONLINEAR + + IF ((EXPFSN .eqv. .FALSE.).and.(EXPFSPSI .eqv. .FALSE.) & + .and.(EXPFSFCT .eqv. .FALSE.) & + .and.(IMPFSN .eqv. .FALSE.) & + .and.(EXPTOTAL .eqv. .FALSE.) & + .and.(IMPTOTAL .eqv. .FALSE.)) THEN + EXPFSN=.TRUE. ! This is the default scheme ... + END IF + nbSel=0 + + IF (EXPFSN) nbSel=nbSel+1 + IF (EXPFSPSI) nbSel=nbSel+1 + IF (EXPFSFCT) nbSel=nbSel+1 + IF (IMPFSN) nbSel=nbSel+1 + IF (IMPTOTAL) nbSel=nbSel+1 + IF (EXPTOTAL) nbSel=nbSel+1 + + IF (GTYPE .EQ. UNGTYPE) THEN + IF (nbSel .ne. 1) THEN + WRITE(NDSE,*) ' *** WAVEWATCH III ERROR IN WW3_GRID:' + IF (nbSel .gt. 1) THEN + WRITE (NDSE,*) 'More than one scheme selected' + ELSE IF (nbSel .eq. 0) THEN + WRITE (NDSE,*) 'no scheme selected' + END IF + WRITE (NDSE,*)'Select only one of EXPFSN, EXPFSFCT, EXPFSPSI' + WRITE (NDSE,*)'IMPFSN, IMPTOTAL' + CALL EXTCDE ( 30 ) + END IF + END IF +! +! 6.m Select propagation scheme +! + WRITE (NDSO,950) +! + NRPROP = 0 + FLPROP = .TRUE. + PNAME = ' ' +!/PR0 PNAME = 'Not defined ' +!/PR0 NRPROP = NRPROP + 1 +!/PR0 FLPROP = .FALSE. +!/PR1 PNAME = 'First order upstream ' +!/PR1 NRPROP = NRPROP + 1 +!/UQ PNAME = '3rd order UQ' +!/UNO PNAME = '2nd order UNO' + J = LEN_TRIM(PNAME) +!/PR2 PNAME = PNAME(1:J)//' + GSE diffusion ' +!/PR2 NRPROP = NRPROP + 1 +!/PR3 PNAME = PNAME(1:J)//' + GSE averaging ' +!/PR3 NRPROP = NRPROP + 1 +! +!/SMC PNAME = 'UNO2 on SMC grid + diffusion ' +!/SMC NRPROP = NRPROP + 1 +! +!/PRX PNAME = 'Experimental ' +!/PRX NRPROP = NRPROP + 1 +! + IF ( (FLCX.OR.FLCY.OR.FLCTH.OR.FLCK) .AND. .NOT. FLPROP ) THEN + WRITE (NDSE,1030) + CALL EXTCDE ( 20 ) + END IF +! + IF ( .NOT.(FLCX.OR.FLCY.OR.FLCTH.OR.FLCK) .AND. FLPROP ) THEN + WRITE (NDSE,1031) + END IF +! + IF ( NRPROP.EQ.0 ) THEN + WRITE (NDSE,1032) + CALL EXTCDE ( 21 ) + END IF +! + IF ( NRPROP .GT. 1 ) THEN + WRITE (NDSE,1033) NRPROP + CALL EXTCDE ( 22 ) + END IF +! +! 6.m Parameters for propagation scheme +! + WRITE (NDSO,951) PNAME +! + CFLTM = 0.7 +! +!/PR2 DTIME = 0. +!/PR2 LATMIN = 70. +! +!/SMC !Li Default values of smc grid parameters. JGLi23Nov2015 +!/SMC LvSMC = 1 +!/SMC ISHFT = 0 +!/SMC JEQT = 0 +!/SMC NBISMC = 0 +!/SMC DTIME = 0.0 +!/SMC LATMIN = 86.0 +!/SMC RFMAXD = 80.0 +!/SMC UNO3 = .FALSE. +!/SMC AVERG = .FALSE. +!/SMC SEAWND = .FALSE. +! +!/PR3 WDTHCG = 1.5 +!/PR3 WDTHTH = WDTHCG +! +!/PR1 CALL READNL ( NDSS, 'PRO1', STATUS ) +!/PR1 IF ( STATUS(18:18) .EQ. ':' ) STATUS(18:18) = ' ' +!/PR1 WRITE (NDSO,952) STATUS(1:18) +!/PR1 CFLTM = MAX ( 0. , CFLTM ) +!/PR1 WRITE (NDSO,953) CFLTM +! +!/PR2 CALL READNL ( NDSS, 'PRO2', STATUS ) +!/PR2 IF ( STATUS(18:18) .EQ. ':' ) STATUS(18:18) = ' ' +!/PR2 WRITE (NDSO,952) STATUS(1:18) +!/PR2 CFLTM = MAX ( 0. , CFLTM ) +!/PR2 DTIME = MAX ( 0. , DTIME ) +!/PR2 LATMIN = MIN ( 89. , ABS(LATMIN) ) +!/PR2 CLATMN = COS ( LATMIN * DERA ) +!/PR2 IF ( DTIME .EQ. 0. ) THEN +!/PR2 WRITE (NDSO,953) CFLTM, LATMIN +!/PR2 ELSE +!/PR2 WRITE (NDSO,954) CFLTM, DTIME/3600., LATMIN +!/PR2 END IF +!/PR2 DTME = DTIME +! +!/SMC CALL READNL ( NDSS, 'PSMC', STATUS ) +!/SMC IF ( STATUS(18:18) .EQ. ':' ) STATUS(18:18) = ' ' +!/SMC WRITE (NDSO,952) STATUS(1:18) +!/SMC CFLTM = MAX ( 0. , CFLTM ) +!/SMC DTIME = MAX ( 0. , DTIME ) +!/SMC LATMIN = MIN ( 89. , ABS(LATMIN) ) +!/SMC CLATMN = COS ( LATMIN * DERA ) +!/SMC RFMAXD = MIN ( 80.0, ABS(RFMAXD) ) +!/SMC IF ( DTIME .EQ. 0. ) THEN +!/SMC WRITE (NDSO,953) CFLTM, LATMIN, RFMAXD +!/SMC ELSE +!/SMC WRITE (NDSO,954) CFLTM, DTIME/3600., LATMIN, RFMAXD +!/SMC END IF +!/SMC DTME = DTIME +!/SMC Refran = RFMAXD * DERA +!/SMC FUNO3 = UNO3 +!/SMC FVERG = AVERG +!/SMC FSWND = SEAWND +!/SMC IF( UNO3 ) WRITE (NDSO,*) & +!/SMC " Advection use 3rd order UNO3 instead of UNO2 scheme." +!/SMC IF( AVERG ) WRITE (NDSO,*) & +!/SMC " Extra 1-2-1 average smoothing activated on SMC grid." +!/SMC IF( SEAWND ) WRITE (NDSO,*) & +!/SMC " Sea-point only wind input is required for SMC grid. " +!/SMC NRLv = LvSMC +!/SMC WRITE (NDSO,4001) NRLv +!/SMC WRITE (NDSO,4002) JEQT +!/SMC WRITE (NDSO,4302) ISHFT +!/SMC WRITE (NDSO,4003) NBISMC +! +!/PR3 CALL READNL ( NDSS, 'PRO3', STATUS ) +!/PR3 IF ( STATUS(18:18) .EQ. ':' ) STATUS(18:18) = ' ' + IF (GTYPE.NE.UNGTYPE) THEN +!/PR3 WRITE (NDSO,952) STATUS(1:18) +!/PR3 CFLTM = MAX ( 0. , CFLTM ) +!/PR3 WRITE (NDSO,953) CFLTM, WDTHCG +!/PR3 IF ( WDTHCG*(XFR-1.) .GT. 1. ) WRITE (NDSO,955) 1./(XFR-1.) +!/PR3 WRITE (NDSO,954) WDTHTH +!/PR3 IF ( WDTHTH*DTH .GT. 1. ) WRITE (NDSO,955) 1./DTH +!/PR3 WRITE (NDSO,*) + ENDIF +!/PR3 WDCG = WDTHCG +!/PR3 WDTH = WDTHTH +! + CTMAX = CFLTM +! +!/RTD ! Set/ read in rotation values - these will be written out +!/RTD ! later with the rest of the grid info +!/RTD ! Default is a non-rotated lat-lon grid +!/RTD PLAT = 90. +!/RTD PLON = -180. +!/RTD UNROT = .FALSE. +!/RTD CALL READNL ( NDSS, 'ROTD', STATUS ) +!/RTD PLON = MOD( PLON + 180., 360. ) - 180. +!/RTD ! Ensure that a grid with pole at the geographic North is standard lat-lon +!/RTD IF ( PLAT == 90. .AND. ( PLON /= -180. .OR. UNROT ) ) THEN +!/RTD WRITE( NDSE, 1052 ) +!/RTD CALL EXTCDE ( 33 ) +!/RTD ENDIF +!/RTD ! Default poles of output b. c. are non-rotated: +!/RTD BPLAT = 90. +!/RTD BPLON = -180. +!/RTD CALL READNL ( NDSS, 'ROTB', STATUS ) +!/RTD ! A b. c. dest. grid with pole at the geographic North must be non-rotated +!/RTD DO I=1,9 +!/RTD IF ( BPLAT(I) == 90. ) THEN +!/RTD ! Require BPLON(I) == -180., but don't blaim the user if BPLON(I) == 180. +!/RTD IF ( BPLON(I) == 180. ) BPLON(I) = -180. +!/RTD IF ( BPLON(I) == -180. ) CYCLE +!/RTD END IF +!/RTD IF ( BPLAT(I) < 90. ) CYCLE +!/RTD WRITE( NDSE, 1053 ) +!/RTD CALL EXTCDE ( 34 ) +!/RTD END DO +! +! 6.n Set miscellaneous parameters (ice, seeding, numerics ... ) +! + CICE0 = 0.5 + CICEN = 0.5 + LICE = 0. + ICEHFAC= 1.0 + ICEHMIN= 0.2 ! the 0.2 value is arbitrary and needs to be tuned. + ICEHINIT= 0.5 + ICESLN = 1.0 + ICEWIND= 1.0 + ICESNL = 1.0 + ICESDS = 1.0 + ICEHDISP= 0.6 ! Prevent from convergence crash in w3dispmd in the presence of ice, should be tuned + ICEDDISP= 80 + ICEFDISP= 2 + GSHIFT = 0.0D0 + PMOVE = 0.5 + XSEED = 1. + FLAGTR = 0 + XP = 0.15 + XR = 0.10 + XFILT = 0.05 + IHM = 100 + HSPM = 0.05 + WSM = 1.7 + WSC = 0.333 + FLC = .TRUE. + TRCKCMPR = .TRUE. + NOSW = 5 +! +! Gas fluxes +! + AIRCMIN = 2.0 ! cmin for whitecap coverage and entrained air + AIRGB = 0.2 ! volume of entrained air constant (Deike et al. 2017) +! +!/NCO/! NCEP operations retains first three swell systems. +!/NCO NOSW=3 + PTM = 1 ! Default to standard WW3 partitioning. C. Bunney + PTFC = 0.1 ! Part. method 5 cutoff freq default. C. Bunney + FMICHE = 1.6 + RWNDC = 1. + WCOR1 = 99. + WCOR2 = 0. + BTBET = 1.2 ! β for c / [U cos(θ - φ)] < β +! Variables for Space-Time Extremes +! Default negative values make w3iogomd switch off space-time extremes +! forces user to provide NAMELIST if wanting to compute STE parameters + STDX = -1. + STDY = -1. + STDT = -1. + ICEDISP = .FALSE. + CALTYPE = 'standard' +! Variables for 3D array output + E3D=0 + I1E3D=1 + I2E3D=NK + P2SF = 0 + I1P2SF = 1 + I2P2SF = 15 + US3D = 0 + I1US3D = 1 + I2US3D = NK + USSP=0 + IUSSP=1 + STK_WN(:)=0.0 + STK_WN(1)=TPI/100. !Set default decay of 100 m for Stokes drift + TH1MF=0 + I1TH1M=1 + I2TH1M=NK + STH1MF=0 + I1STH1M=1 + I2STH1M=NK + TH2MF=0 + I1TH2M=1 + I2TH2M=NK + STH2MF=0 + I1STH2M=1 + I2STH2M=NK +! + FACBERG=1. +!/IS0 WRITE (NDSO,944) +!/IS1 ISC1 = 1. +!/IS1 ISC2 = 0. +!/IS1 CALL READNL ( NDSS, 'SIS1', STATUS ) +!/IS1 WRITE (NDSO,945) STATUS +!/IS1 WRITE (NDSO,946) ISC1, ISC2 +!/IS1 IS1C1 = ISC1 +!/IS1 IS1C2 = ISC2 +!/IS2 ISC1 = 1. +!/IS2 IS2C2 = 0. ! 0.025 +!/IS2 IS2C3 = 0. ! 2.4253 +!/IS2 IS2CONC = 0. +!/IS2 IS2BACKSCAT = 1. +!/IS2 IS2BREAK = .FALSE. +!/IS2 IS2BREAKF = 3.6 +!/IS2 IS2FLEXSTR=6.00E+05 ! value used in Ardhuin et al. 2020 +!/IS2 IS2ISOSCAT=.TRUE. ! uses isotropic back-scatter +!/IS2 IS2DISP=.FALSE. !not dispersion only attenuation following Liu disp. eq. +!/IS2 IS2DUPDATE=.TRUE. +!/IS2 IS2FRAGILITY=0.9 +!/IS2 IS2DMIN=20 +!/IS2 IS2DAMP=0. +!/IS2 IS2CREEPB=0. +!/IS2 IS2CREEPC=0.4 ! This gives an impact of break-up over a wider freq. range +! ! compared to the 0.2 value in Boutin et al. 2018 +!/IS2 IS2CREEPD=0.5 +!/IS2 IS2CREEPN=3.0 +!/IS2 IS2BREAKE=1. +!/IS2 IS2WIM1=1. +!/IS2 IS2ANDISB=.TRUE. !anelastic instead of inelastic dissipation if IS2CREEPB>0 +!/IS2 IS2ANDISE=0.55 !energy of activation +!/IS2 IS2ANDISD=2.0E-9 !see Ardhuin et al. 2020 +!/IS2 IS2ANDISN=1. !dependency on stress. Equal to 1 normally? +!/IS2 CALL READNL ( NDSS, 'SIS2', STATUS ) +!/IS2 WRITE (NDSO,947) STATUS +!/IS2 WRITE (NDSO,2948) ISC1, IS2BACKSCAT, IS2ISOSCAT, IS2BREAK, IS2DUPDATE, IS2FLEXSTR, IS2DISP, & +!/IS2 IS2DAMP, IS2FRAGILITY, IS2DMIN, IS2C2, IS2C3, IS2CONC, IS2CREEPB,& +!/IS2 IS2CREEPC, IS2CREEPD, IS2CREEPN, IS2BREAKE, IS2BREAKF, IS2WIM1, & +!/IS2 IS2ANDISB, IS2ANDISE, IS2ANDISD, IS2ANDISN +! +!/REF1 REFCOAST=0. +!/REF1 REFMAP=0. +!/REF1 REFMAPD=0. +!/REF1 REFRMAX=1. +!/REF1 REFFREQPOW=2. +!/REF1 REFFREQ=0. +!/REF1 REFCOSP_STRAIGHT=4. +!/REF1 REFSLOPE=0.22 +!/REF1 REFSUBGRID=0. +!/REF1 REFICEBERG=0. +!/REF1 REFUNSTSOURCE=0. +! +!/REF1 CALL READNL ( NDSS, 'REF1', STATUS ) +!/REF1 WRITE (NDSO,969) STATUS +! +!/IG1 IGMETHOD = 2 +!/IG1 IGADDOUTP= 0 +!/IG1 IGSOURCE = 2 +!/IG1 IGSTERMS = 0 +!/IG1 IGMAXFREQ=0.03 +!/IG1 IGSOURCEATBP = 0 +!/IG1 IGBCOVERWRITE = .TRUE. +!/IG1 IGSWELLMAX = .TRUE. +!/IG1 IGKDMIN = 1.1 +!/IG1 IGFIXEDDEPTH = 0. +!/IG1 IGEMPIRICAL = 0.00125 +! +!/IG1 CALL READNL ( NDSS, 'SIG1 ', STATUS ) +!/IG1 WRITE (NDSO,970) STATUS +! +!/IC2 IC2DISPER = .FALSE. +!/IC2 IC2TURB = 1. +!/IC2 IC2TURBS = 0. +!/IC2 IC2ROUGH = 0.01 +!/IC2 IC2REYNOLDS = 1.5E5 +!/IC2 IC2SMOOTH = 2E5 +!/IC2 IC2VISC = 1. +!/IC2 IC2DMAX = 0. +! +!/IC3 IC3MAXTHK = 100.0 +!/IC3 IC3MAXCNC = 100.0 +!/IC3 IC2TURB = 2.0 ! from run_test example by F.A. +!/IC3 IC2TURBS = 0. +!/IC3 IC2ROUGH = 0.02 ! from run_test example by F.A. (alt:0.1) +!/IC3 IC2REYNOLDS = 1.5E5 +!/IC3 IC2SMOOTH = 7.0E4 +!/IC3 IC2VISC = 2.0 +!/IC3 IC3CHENG = .TRUE. +!/IC3 USECGICE = .FALSE. +!/IC3 IC3HILIM = 100.0 +!/IC3 IC3KILIM = 100.0 +!/IC3 IC3HICE = -1.0 +!/IC3 IC3VISC = -2.0 +!/IC3 IC3DENS = -3.0 +!/IC3 IC3ELAS = -4.0 +!fixme: if USECGICE = .TRUE., don't allow use of IC3MAXTHK<100.0 + +!/IC4 IC4METHOD = 1 !switch for methods within IC4 +!/IC4 IC4KI=0.0 +!/IC4 IC4FC=0.0 +! +!/IC5 IC5MINIG = 1. +!/IC5 IC5MINWT = 0. +!/IC5 IC5MAXKRATIO = 1E9 +!/IC5 IC5MAXKI = 100. +!/IC5 IC5MINHW = 300. +!/IC5 IC5MAXITER = 100. +!/IC5 IC5RKICK = 0. +!/IC5 IC5KFILTER = 0.0025 +! +!/IC2 CALL READNL ( NDSS, 'SIC2 ', STATUS ) +!/IC2 WRITE (NDSO,971) STATUS +! +!/IC3 CALL READNL ( NDSS, 'SIC3 ', STATUS ) +!/IC3 WRITE (NDSO,971) STATUS +! +!/IC4 CALL READNL ( NDSS, 'SIC4 ', STATUS ) +!/IC4 WRITE (NDSO,971) STATUS +! +!/IC5 CALL READNL ( NDSS, 'SIC5 ', STATUS ) +!/IC5 WRITE (NDSO,971) STATUS +!/IC5 WRITE (NDSO,2971) IC5MINIG, IC5MINWT, IC5MAXKRATIO, & +!/IC5 IC5MAXKI, IC5MINHW, IC5MAXITER, IC5RKICK, & +!/IC5 IC5KFILTER +! + CALL READNL ( NDSS, 'OUTS', STATUS ) + WRITE (NDSO,4970) STATUS +! +! +! output of frequency spectra, th1m ... +! + E3DF(1,1) = E3D + E3DF(2,1) = MIN(MAX(1,I1E3D),NK) + E3DF(3,1) = MIN(MAX(1,I2E3D),NK) + E3DF(1,2) = TH1MF + E3DF(2,2) = MIN(MAX(1,I1TH1M),NK) + E3DF(3,2) = MIN(MAX(1,I2TH1M),NK) + E3DF(1,3) = STH1MF + E3DF(2,3) = MIN(MAX(1,I1STH1M),NK) + E3DF(3,3) = MIN(MAX(1,I2STH1M),NK) + E3DF(1,4) = TH2MF + E3DF(2,4) = MIN(MAX(1,I1TH2M),NK) + E3DF(3,4) = MIN(MAX(1,I2TH2M),NK) + E3DF(1,5) = STH2MF + E3DF(2,5) = MIN(MAX(1,I1STH2M),NK) + E3DF(3,5) = MIN(MAX(1,I2STH2M),NK) +! +! output of microseismic source spectra +! + P2MSF(1) = P2SF + P2MSF(2) = MIN(MAX(1,I1P2SF),NK) + P2MSF(3) = MIN(MAX(1,I2P2SF),NK) +! +! output of Stokes drift profile +! + US3DF(1) = US3D + US3DF(2) = MAX( 1 , MIN( NK, I1US3D) ) + US3DF(3) = MAX( 1 , MIN( NK, I2US3D) ) +! +! output of Stokes drift partitions +! + USSPF(1) = USSP + USSPF(2) = MAX( 1 , MIN(25, IUSSP ) ) + IF (IUSSP.GT.25) THEN + WRITE(NDSE,*) ' *** WAVEWATCH III ERROR IN ww3_grid:' + WRITE(NDSE,*) " Stokes drift partition outputs not " + WRITE(NDSE,*) " intended for use with more than 25 " + WRITE(NDSE,*) " partitions. Please reduce IUSSP " + WRITE(NDSE,*) " specified in ww3_grid.inp to proceed " + CALL EXTCDE( 31) + ENDIF + + DO J=1,USSPF(2) + USSP_WN(j) = STK_WN(J) + ENDDO + +! + WRITE (NDSO,4971) P2MSF(1:3) + WRITE (NDSO,4972) US3DF(1:3) + WRITE (NDSO,4973) E3DF(1:3,1) + WRITE (NDSO,4974) USSPF(1:2) + DO J=1,USSPF(2) + WRITE(NDSO,4975) J,USSP_WN(J) + ENDDO +! + CALL READNL ( NDSS, 'MISC', STATUS ) + WRITE (NDSO,960) STATUS +! + IF ( FLAGTR.LT.0 .OR. FLAGTR.GT.6 ) FLAGTR = 0 + CICEN = MIN ( 1. , MAX ( 0. , CICEN ) ) + ICESLN = MIN ( 1. , MAX ( 0. , ICESLN ) ) + ICEWIND = MIN ( 1. , MAX ( 0. , ICEWIND ) ) + ICESDS = MIN ( 1. , MAX ( 0. , ICESDS ) ) + ICESNL = MIN ( 1. , MAX ( 0. , ICESNL ) ) + FICEN = CICEN + GRIDSHIFT=GSHIFT + ICESCALES(1)=ICESLN + ICESCALES(2)=ICEWIND + ICESCALES(3)=ICESNL + ICESCALES(4)=ICESDS + CMPRTRCK=TRCKCMPR + CICE0 = MIN ( CICEN , MAX ( 0. , CICE0 ) ) + FICEL = LICE + IICEHMIN = ICEHMIN + IICEHFAC = ICEHFAC + IICEHINIT = ICEHINIT + IICEDISP= ICEDISP + IICEHDISP = ICEHDISP + IICEDDISP = ICEDDISP + IICEFDISP = ICEFDISP + PMOVE = MAX ( 0. , PMOVE ) + PFMOVE = PMOVE +! + BTBETA = MIN(MAX (1., BTBET), 2.) + AAIRCMIN = ALOG(GRAV/AIRCMIN/SIG(1))/ALOG(XFR)+1 ! goes from phase speed C=g/sig to index + AAIRGB = AIRGB +! +! Notes: Presently, if we select CICE0.ne.CICEN requires an obstruction +! grid, that is initialized with zeros as default. + IF ( FLAGTR .LT. 3 ) THEN + IF (CICE0.NE.CICEN) THEN + CICE0 = CICEN + IF (STATUS=='(user def. values) :') WRITE (NDSO,2961) + END IF + END IF +!/IC0 IF ( CICE0.EQ.CICEN .AND. FLAGTR.GE.3 ) FLAGTR = FLAGTR - 2 + WRITE (NDSO,961) CICE0, CICEN + WRITE (NDSO,8972) ICEWIND + FICE0 = CICE0 +! Variables for Space-Time Extremes + STEXU = STDX + IF ( STDY .LE. 0. ) THEN + STDY = STDX + END IF + STEYU = STDY + STEDU = STDT + IF ( STDX .GT. 0 ) THEN + WRITE (NDSO,1040) STDX + WRITE (NDSO,1041) STDY + ELSE + WRITE (NDSO,1042) + END IF + IF ( STDT .GT. 0 ) THEN + WRITE (NDSO,1043) STDT + ELSE + WRITE (NDSO,1044) + END IF +!/MGG WRITE (NDSO,962) PMOVE +! +!/SEED XSEED = MAX ( 1. , XSEED ) +!/SEED WRITE (NDSO,964) XSEED +!/SCRIP WRITE (NDSO,963) GSHIFT + WRITE (NDSO,1972) TRCKCMPR + FACSD = XSEED +!/RWND RWINDC = RWNDC +!/WCOR WWCOR(1) = WCOR1 +!/WCOR WWCOR(2) = WCOR2 +! + XP = MAX ( 1.E-6 , XP ) + XR = MAX ( 1.E-6 , XR ) + XREL = XR + XFILT = MAX ( 0. , XFILT ) + XFLT = XFILT + WRITE (NDSO,965) XP, XR, XFILT + FACP = XP / PI * 0.62E-3 * TPI**4 / GRAV**2 +! + IHMAX = MAX ( 50, IHM ) + HSPMIN = MAX ( 0.0001 , HSPM ) + WSMULT = MAX ( 1. , WSM ) + WSCUT = MIN ( 1.0001 , MAX ( 0. , WSC ) ) + FLCOMB = FLC + NOSWLL = MAX ( 1 , NOSW ) + PTMETH = PTM ! Partitioning method. Chris Bunney (Jan 2016) + PTFCUT = PTFC ! Freq cutoff for partitiong method 5 + PMNAM2 = "" + IF( PTMETH .EQ. 1 ) THEN + PMNAME = "WW3 default" + ELSE IF( PTMETH .EQ. 2 ) THEN + PMNAME = "Watershedding plus wind cut-off" + ELSE IF( PTMETH .EQ. 3 ) THEN + PMNAME = "Watershedding only" + WSCUT = 0.0 ! We don't want to classify by ws frac + PMNAM2 = "WSC set to 0.0" + ELSE IF( PTMETH .EQ. 4 ) THEN + PMNAME = "Wind speed cut-off only" + PMNAM2 = "WSC set to 0.0, NOSW set to 1" + WSCUT = 0.0 ! We don't want to classify by ws frac + NOSWLL = 1 ! Only ever one swell + ELSE IF( PTMETH .EQ. 5 ) THEN + WRITE(PMNAME, '("2-Band hi/low cutoff at ", F4.2,"Hz")') PTFCUT + PMNAM2 = "WSC set to 0.0, NOSW set to 1" + WSCUT = 0.0 ! We don't want to classify by ws frac + NOSWLL = 1 ! Only ever one swell + ELSE + WRITE( NDSE, * ) & + "*** Error - unknown partitioing method (PTM)! ***" + CALL EXIT(1) + ENDIF + + IF ( FLCOMB ) THEN + J = 1 + ELSE + J = 2 + END IF + WRITE (NDSO,966) IHMAX, HSPMIN, WSMULT, WSCUT, YESXNO(J), NOSWLL + WRITE (NDSO,5971) PMNAME + IF( PMNAM2 .NE. "" ) WRITE (NDSO,5972) PMNAM2 +!! WRITE (NDSO,966) IHMAX, HSPMIN, WSMULT, WSCUT, YESXNO(J) +! + FHMAX = MAX ( 0.01 , FMICHE ) + J = 2 +!/MLIM J = 1 + WRITE (NDSO,967) FHMAX, FHMAX/SQRT(2.), YESXNO(J) + IF ( FHMAX.LT.0.50 .AND. J.EQ.1 ) WRITE (NDST,968) +! + IF (TRIM(CALTYPE) .NE. 'standard' .AND. & + TRIM(CALTYPE) .NE. '360_day' .AND. & + TRIM(CALTYPE) .NE. '365_day' ) GOTO 2003 + WRITE (NDST,1973) CALTYPE + WRITE (NDSO,*) +! +! 6.x Read values for FLD stress calculation +! +!/FLD1 TAILTYPE = 0 +!/FLD1 TAILLEV = 0.006 +!/FLD1 TAILT1 = 1.25 +!/FLD1 TAILT2 = 3.00 +!/FLD2 TAILTYPE = 0 +!/FLD2 TAILLEV = 0.006 +!/FLD2 TAILT1 = 1.25 +!/FLD2 TAILT2 = 3.00 +! +!/FLD1 CALL READNL ( NDSS, 'FLD1', STATUS ) +!/FLD1 TAILLEV = MIN( MAX ( 0.0005 , TAILLEV ), 0.04) +!/FLD1 TAIL_LEV = TAILLEV +!/FLD1 TAIL_ID = TAILTYPE +!/FLD1 TAIL_TRAN1 = TAILT1 +!/FLD1 TAIL_TRAN2 = TAILT2 +!/FLD2 CALL READNL ( NDSS, 'FLD2', STATUS ) +!/FLD2 TAILLEV = MIN( MAX ( 0.0005 , TAILLEV ), 0.04) +!/FLD2 TAIL_LEV = TAILLEV +!/FLD2 TAIL_ID = TAILTYPE +!/FLD2 TAIL_TRAN1 = TAILT1 +!/FLD2 TAIL_TRAN2 = TAILT2 +! +! 6.o End of namelist processing +! + IF (FLGNML) THEN + CLOSE (NDSS) + ELSE + CLOSE (NDSS,STATUS='DELETE') + END IF +! + IF ( FLNMLO ) THEN + WRITE (NDSO,917) +!/FLX3 WRITE (NDSO,2810) CDMAX*1.E3, CTYPE +!/FLX4 WRITE (NDSO,2810) CDFAC +!/LN1 WRITE (NDSO,2820) CLIN, RFPM, RFHF +!/ST1 WRITE (NDSO,2920) CINP + IF ( .NOT. FLSTB2 ) THEN +!/ST2 WRITE (NDSO,2920) ZWND, SWELLF + ELSE +!/STAB2 WRITE (NDSO,2921) ZWND, SWELLF, STABSH, STABOF, & +!/STAB2 CNEG, CPOS, FNEG + END IF +! +!/ST3 WRITE (NDSO,2920) ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP, ZALP, & +!/ST3 SWELLF +!/ST4 WRITE (NDSO,2920) ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP, ZALP, & +!/ST4 TAUWSHELTER, SWELLFPAR, SWELLF, SWELLF2, SWELLF3, SWELLF4, & +!/ST4 SWELLF5, SWELLF6, SWELLF7, Z0RAT, SINBR +!/ST6 WRITE (NDSO,2920) SINA0, SINWS, SINFC +!/NL1 WRITE (NDSO,2922) LAMBDA, NLPROP, KDCONV, KDMIN, & +!/NL1 SNLCS1, SNLCS2, SNLCS3 +!/NL2 WRITE (NDSO,2922) IQTYPE, TAILNL, NDEPTH +!/NL2 IF ( IQTYPE .EQ. 3 ) THEN +!/NL2 IF ( NDEPTH .EQ. 1 ) THEN +!/NL2 WRITE (NDSO,3923) DPTHNL(1) +!/NL2 ELSE +!/NL2 WRITE (NDSO,4923) DPTHNL(1) +!/NL2 END IF +!/NL2 WRITE (NDSO,5923) DPTHNL(2:NDEPTH-1) +!/NL2 WRITE (NDSO,6923) DPTHNL(NDEPTH) +!/NL2 END IF +!/NL3 WRITE (NDSO,2922) NQDEF, MSC, NSC, KDFD, KDFS +!/NL3 IF ( NQDEF .EQ. 1 ) THEN +!/NL3 WRITE (NDSO,3923) QPARMS(1:5) +!/NL3 ELSE +!/NL3 WRITE (NDSO,4923) QPARMS(1:5) +!/NL3 DO J=2, NQDEF-1 +!/NL3 WRITE (NDSO,5923) QPARMS((J-1)*5+1:J*5) +!/NL3 END DO +!/NL3 WRITE (NDSO,6923) QPARMS((NQDEF-1)*5+1:NQDEF*5) +!/NL3 END IF +!/NL4 WRITE (NDSO,2922) INDTSA, ALTLP +!/NLS WRITE (NDSO,8922) A34, FHFC, DNM, FC1, FC2, FC3 +!/ST1 WRITE (NDSO,2924) CDIS, APM +!/ST2 WRITE (NDSO,2924) SDSA0, SDSA1, SDSA2, SDSB0, SDSB1, PHIMIN +!/ST3 WRITE (NDSO,2924) SDSC1, WNMEANP, FXPM3, FXFM3, SDSDELTA1, & +!/ST3 SDSDELTA2 + +!/ST4 WRITE (NDSO,2924) SDSBCHOICE, SDSC2, SDSCUM, SDSC4, & +!/ST4 SDSC5, SDSC6, & +!/ST4 WNMEANP, FXPM3, FXFM3, FXFMAGE, & +!/ST4 SDSBINT, SDSBCK, SDSABK, SDSPBK, SDSHCK, & +!/ST4 SDSBR, SDSSTRAIN, SDSSTRAINA, SDSSTRAIN2, & +!/ST4 SDSBT, SDSP, SDSISO, SDSCOS, SDSDTH, SDSBRF1, & +!/ST4 SDSBRFDF, SDSBM0, SDSBM1, SDSBM2, SDSBM3, SDSBM4, & +!/ST4 SPMSS, SDKOF, SDSMWD, SDSFACMTF, SDSNMTF,SDSMWPOW,& +!/ST4 SDSCUMP, SDSNUW, WHITECAPWIDTH, WHITECAPDUR +!/ST6 WRITE (NDSO,2924) SDSET, SDSA1, SDSA2, SDSP1, SDSP2 +!/ST6 WRITE (NDSO,2937) SWLB1, CSTB1 +!/BT1 WRITE (NDSO,2926) GAMMA +!/BT4 WRITE (NDSO,2926) SEDMAPD50, SED_D50_UNIFORM, & +!/BT4 RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4, SIGDEPTH, & +!/BT4 BOTROUGHMIN, BOTROUGHFAC +!/DB1 IF ( BJFLAG ) THEN +!/DB1 WRITE (NDSO,2928) BJALFA, BJGAM, '.TRUE.' +!/DB1 ELSE +!/DB1 WRITE (NDSO,2928) BJALFA, BJGAM, '.FALSE.' +!/DB1 END IF +!/PR1 WRITE (NDSO,2953) CFLTM +!/PR2 WRITE (NDSO,2953) CFLTM, DTIME, LATMIN +!/SMC WRITE (NDSO,2953) CFLTM, DTIME, LATMIN, RFMAXD, UNO3, & +!/SMC AVERG, LvSMC, NBISMC, ISHFT, JEQT, SEAWND +!/PR3 WRITE (NDSO,2953) CFLTM, WDTHCG, WDTHTH +! + WRITE (NDSO,2956) UGBCCFL, UGOBCAUTO, UGOBCDEPTH,TRIM(UGOBCFILE), & + EXPFSN, EXPFSPSI, EXPFSFCT, IMPFSN, EXPTOTAL,& + IMPTOTAL, IMPREFRACTION, IMPFREQSHIFT, & + IMPSOURCE, SETUP_APPLY_WLV, & + JGS_TERMINATE_MAXITER, & + JGS_TERMINATE_DIFFERENCE, & + JGS_TERMINATE_NORM, & + JGS_LIMITER, & + JGS_USE_JACOBI, & + JGS_BLOCK_GAUSS_SEIDEL, & + JGS_MAXITER, & + JGS_PMIN, & + JGS_DIFF_THR, & + JGS_NORM_THR, & + JGS_NLEVEL, & + JGS_SOURCE_NONLINEAR +! + WRITE (NDSO,2976) P2SF, I1P2SF, I2P2SF, & + US3D, I1US3D, I2US3D, & + USSP, IUSSP, & + E3D, I1E3D, I2E3D, & + TH1MF, I1TH1M, I2TH1M, & + STH1MF, I1STH1M, I2STH1M, & + TH2MF, I1TH2M, I2TH2M, & + STH2MF, I1STH2M, I2STH2M +! +!/REF1 WRITE(NDSO,2986) REFCOAST, REFFREQ, REFSLOPE, REFMAP, & +!/REF1 REFMAPD, REFSUBGRID , REFRMAX, REFFREQPOW, & +!/REF1 REFICEBERG, REFCOSP_STRAIGHT, REFUNSTSOURCE +! +!/IG1 WRITE(NDSO,2977) IGMETHOD, IGADDOUTP, IGSOURCE, & +!/IG1 IGSTERMS, IGBCOVERWRITE, IGSWELLMAX, & +!/IG1 IGMAXFREQ, IGSOURCEATBP, IGKDMIN, & +!/IG1 IGFIXEDDEPTH, IGEMPIRICAL +! +!/IC2 WRITE(NDSO,2978) IC2DISPER, IC2TURB, IC2ROUGH, & +!/IC2 IC2REYNOLDS, IC2SMOOTH, IC2VISC, IC2TURBS, & +!/IC2 IC2DMAX +! +!/IC3 WRITE(NDSO,2979) IC3MAXTHK, IC3MAXCNC, IC2TURB, & +!/IC3 IC2ROUGH, IC2REYNOLDS, IC2SMOOTH, & +!/IC3 IC2VISC, IC2TURBS, IC3CHENG, & +!/IC3 USECGICE, IC3HILIM, IC3KILIM, & +!/IC3 IC3HICE, IC3VISC, IC3DENS, IC3ELAS +! +!/IC4 WRITE(NDSO,NML=SIC4) +! +!/IC5 WRITE(NDSO,2981) IC5MINIG, IC5MINWT, IC5MAXKRATIO, & +!/IC5 IC5MAXKI, IC5MINHW, IC5MAXITER, & +!/IC5 IC5RKICK, IC5KFILTER +! +!/IS1 WRITE (NDSO,2946) IS1C1, IS1C2 +! +!/IS2 WRITE (NDSO,948) ISC1, IS2BACKSCAT, IS2ISOSCAT, IS2BREAK, & +!/IS2 IS2DUPDATE, IS2FLEXSTR, IS2DISP, IS2DAMP, IS2FRAGILITY, IS2DMIN, IS2C2, & +!/IS2 IS2C3, IS2CONC, IS2CREEPB, IS2CREEPC, IS2CREEPD, & +!/IS2 IS2CREEPN, IS2BREAKE, IS2BREAKF, IS2WIM1, IS2ANDISB, & +!/IS2 IS2ANDISE, IS2ANDISD, IS2ANDISN +! +!/UOST WRITE (NDSO, 4502) ADJUSTL(TRIM(UOSTFILELOCAL)), ADJUSTL(TRIM(UOSTFILESHADOW)), & +!/UOST UOSTFACTORLOCAL, UOSTFACTORSHADOW + +! + IF ( FLCOMB ) THEN + WRITE (NDSO,2966) CICE0, CICEN, LICE, PMOVE, XSEED, FLAGTR, & + XP, XR, XFILT, IHMAX, HSPMIN, WSMULT, & + WSCUT, '.TRUE.', NOSWLL, FHMAX, & + RWNDC, WCOR1, WCOR2, FACBERG, GSHIFT, & + STDX, STDY, STDT, ICEHMIN, ICEHFAC, & + ICEHINIT, ICEDISP, ICEHDISP, & + ICESLN, ICEWIND, ICESNL, ICESDS, & + ICEDDISP,ICEFDISP, CALTYPE, TRCKCMPR, & + BTBETA + ELSE + WRITE (NDSO,2966) CICE0, CICEN, LICE, PMOVE, XSEED, FLAGTR, & + XP, XR, XFILT, IHMAX, HSPMIN, WSMULT, & + WSCUT, '.FALSE.', NOSWLL, FHMAX, & + RWNDC, WCOR1, WCOR2, FACBERG, GSHIFT, & + STDX, STDY, STDT, ICEHMIN, ICEHFAC, & + ICEHINIT, ICEDISP, ICEHDISP, & + ICESLN, ICEWIND, ICESNL, ICESDS, & + ICEDDISP, ICEFDISP, CALTYPE, TRCKCMPR,& + BTBETA + END IF +! +!/FLD1 WRITE(NDSO,2987) TAIL_ID, TAIL_LEV, TAIL_TRAN1, TAIL_TRAN2 +!/FLD2 WRITE(NDSO,2987) TAIL_ID, TAIL_LEV, TAIL_TRAN1, TAIL_TRAN2 +!/RTD WRITE(NDSO,4991) PLAT, PLON, UNROT +!/RTD WRITE(NDSO,4992) BPLAT, BPLON +! + WRITE (NDSO,918) + END IF +! +! 6.p Set various other values ... +! ... Tail in integration --> scale factor for A to E conv +! + FTE = 0.25 * SIG(NK) * DTH * SIG(NK) + FTF = 0.20 * DTH * SIG(NK) + FTWN = 0.20 * SQRT(GRAV) * DTH * SIG(NK) + FTTR = FTF + FTWL = GRAV / 6. / SIG(NK) * DTH * SIG(NK) +!/ST3 STXFTF = 1/(FACHF-1.-WNMEANP*2) & +!/ST3 * SIG(NK)**(2+WNMEANP*2) * DTH +!/ST3 STXFTFTAIL = 1/(FACHF-1.-WNMEANPTAIL*2) & +!/ST3 * SIG(NK)**(2+WNMEANPTAIL*2) * DTH +!/ST3 STXFTWN = 1/(FACHF-1.-WNMEANP*2) * SIG(NK)**(2) & +!/ST3 * (SIG(NK)/SQRT(GRAV))**(WNMEANP*2) * DTH +!/ST3 SSTXFTF = STXFTF +!/ST3 SSTXFTFTAIL = STXFTFTAIL +!/ST3 SSTXFTWN = STXFTWN +! +!/ST4 STXFTF = 1/(FACHF-1.-WNMEANP*2) & +!/ST4 * SIG(NK)**(2+WNMEANP*2) * DTH +!/ST4 STXFTFTAIL = 1/(FACHF-1.-WNMEANPTAIL*2) & +!/ST4 * SIG(NK)**(2+WNMEANPTAIL*2) * DTH +!/ST4 STXFTWN = 1/(FACHF-1.-WNMEANP*2) * SIG(NK)**(2) & +!/ST4 * (SIG(NK)/SQRT(GRAV))**(WNMEANP*2) * DTH +!/ST4 SSTXFTF = STXFTF +!/ST4 SSTXFTFTAIL = STXFTFTAIL +!/ST4 SSTXFTWN = STXFTWN +! +! ... High frequency cut-off +! + FXFM = 2.5 +!/ST6 FXFM = SIN6FC + FXPM = 4.0 + FXPM = FXPM * GRAV / 28. + FXFM = FXFM * TPI + XFC = 3.0 +!/ST2 XFH = 2.0 +!/ST2 XF1 = 1.75 +!/ST2 XF2 = 2.5 +!/ST2 XFT = XF2 +! + FACTI1 = 1. / LOG(XFR) + FACTI2 = 1. - LOG(TPI*FR1) * FACTI1 +! +! Setting of FACHF moved to before !/NL2 set-up for consistency +! +!/NL2 FACHF = -TAILNL + FACHFA = XFR**(-FACHF-2) + FACHFE = XFR**(-FACHF) +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 7. Read and prepare the grid. +! 7.a Type of grid +! + IF (FLGNML) THEN + GSTRG=TRIM(NML_GRID%TYPE) + IF (TRIM(NML_GRID%COORD).EQ.'SPHE') FLAGLL=.TRUE. + IF (TRIM(NML_GRID%COORD).EQ.'CART') FLAGLL=.FALSE. + CSTRG=TRIM(NML_GRID%CLOS) + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) GSTRG, FLAGLL, CSTRG + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + END IF + + SELECT CASE (TRIM(GSTRG)) + CASE ('RECT') + GTYPE = RLGTYPE + WRITE (NDSO,3000) 'rectilinear' + CASE ('CURV') + GTYPE = CLGTYPE + WRITE (NDSO,3000) 'curvilinear' + CASE ('UNST') + GTYPE = UNGTYPE + WRITE (NDSO,3000) 'unstructured' + CASE DEFAULT + WRITE (NDSE,1007) TRIM(GSTRG) + CALL EXTCDE ( 25 ) + END SELECT +! + IF ( FLAGLL ) THEN + FACTOR = 1. + WRITE (NDSO,3001) 'spherical' + ELSE + FACTOR = 1.E-3 + WRITE (NDSO,3001) 'Cartesian' + END IF +! +! Only process grid closure string for logically rectangular grids. +! Closure setting for unstructured grids is NONE. + ICLOSE = ICLOSE_NONE + IF ( GTYPE.NE.UNGTYPE ) THEN + SELECT CASE (TRIM(CSTRG)) + CASE ('NONE') + ICLOSE = ICLOSE_NONE + WRITE (NDSO,3002) 'none' + CASE ('SMPL') + ICLOSE = ICLOSE_SMPL + WRITE (NDSO,3002) 'simple' + CASE ('TRPL') + WRITE (NDSE,'(/2A)') ' *** WARNING WW3_GRID: TRIPOLE ', & + 'GRID CLOSURE IMPLEMENTATION IS INCOMPLETE ***' + ICLOSE = ICLOSE_TRPL + WRITE (NDSO,3002) 'tripole' + IF ( GTYPE.EQ.RLGTYPE ) THEN + WRITE (NDSE,1009) + CALL EXTCDE ( 25 ) + END IF + CASE DEFAULT + ! Check for old style GLOBAL input + SELECT CASE (TRIM(CSTRG)) + CASE ('T','t','.TRU','.tru') + ICLOSE = ICLOSE_SMPL + WRITE (NDSO,3002) 'simple' + WRITE (NDSE,1013) + CASE ('F','f','.FAL','.fal') + ICLOSE = ICLOSE_NONE + WRITE (NDSO,3002) 'none' + WRITE (NDSE,1013) + CASE DEFAULT + WRITE (NDSE,1012) TRIM(CSTRG) + CALL EXTCDE ( 25 ) + END SELECT + END SELECT + IF ( ICLOSE.NE.ICLOSE_NONE .AND. .NOT.FLAGLL ) THEN + WRITE (NDSE,1008) + CALL EXTCDE ( 25 ) + END IF + END IF !GTYPE.NE.UNGTYPE +! +! 7.b Size of grid +! + IF (FLGNML) THEN + SELECT CASE ( GTYPE ) + CASE ( RLGTYPE ) + NX = NML_RECT%NX + NY = NML_RECT%NY + NX = MAX ( 3 , NX ) + NY = MAX ( 3 , NY ) + WRITE (NDSO,3003) NX, NY + CASE ( CLGTYPE ) + NX = NML_CURV%NX + NY = NML_CURV%NY + NX = MAX ( 3 , NX ) + NY = MAX ( 3 , NY ) + WRITE (NDSO,3003) NX, NY + CASE ( UNGTYPE ) + NY=1 + END SELECT + ELSE + IF ( GTYPE.NE.UNGTYPE) THEN + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) NX, NY + NX = MAX ( 3 , NX ) + NY = MAX ( 3 , NY ) + WRITE (NDSO,3003) NX, NY + ELSE + NY =1 + END IF + END IF +! +! Propagation specific to unstructured grids +! + DO_CHANGE_WLV=.FALSE. + IF ( GTYPE.EQ.UNGTYPE) THEN + UNSTSCHEMES(:)=0 + IF (EXPFSN) UNSTSCHEMES(1)=1 + IF (EXPFSPSI) UNSTSCHEMES(2)=1 + IF (EXPFSFCT) UNSTSCHEMES(3)=1 + IF (IMPFSN) UNSTSCHEMES(4)=1 + UNSTSCHEME=-1 + DO IX=1,4 + IF (UNSTSCHEMES(IX).EQ.1) THEN + UNSTSCHEME=IX + EXIT + END IF + END DO + + FSBCCFL = UGBCCFL + SELECT CASE (UNSTSCHEME) + CASE (1) + FSN = EXPFSN + PNAME2 = 'N Explicit (Fluctuation Splitting) ' + CASE (2) + FSPSI = EXPFSPSI + PNAME2 = 'PSI Explicit (Fluctuation Splitting) ' + CASE (3) + FSFCT = EXPFSFCT + PNAME2 = ' Flux Corrected Transport Explicit' + CASE (4) + FSNIMP = IMPFSN + PNAME2 = 'N Implicit (Fluctuation Splitting) ' + END SELECT +! + IF (SUM(UNSTSCHEMES).GT.1) WRITE(NDSO,1035) + WRITE (NDSO,2951) PNAME2 + IF (IMPTOTAL) THEN + FSTOTALIMP = IMPTOTAL + PNAME2 = 'N Implicit (Fluctuation Splitting) for total implicit' + END IF + IF (EXPTOTAL) THEN + FSTOTALEXP = EXPTOTAL + PNAME2 = 'N Explicit (Fluctuation Splitting) for one exchange explicit DC HPCF ' + END IF + IF (IMPREFRACTION .and. IMPTOTAL .AND. FLCTH) THEN + FSREFRACTION = .TRUE. + PNAME2 = 'Refraction done implicitly' + WRITE (NDSO,2951) PNAME2 + ELSE + FSREFRACTION = .FALSE. + END IF + IF (IMPFREQSHIFT .and. IMPTOTAL .AND. FLCK) THEN + FSFREQSHIFT = .TRUE. + PNAME2 = 'Frequency shifting done implicitly' + WRITE (NDSO,2951) PNAME2 + ELSE + FSFREQSHIFT = .FALSE. + END IF + IF (IMPSOURCE .and. IMPTOTAL .AND. FLSOU) THEN + FSSOURCE = .TRUE. + PNAME2 = 'Source terms integrated implicitly' + WRITE (NDSO,2951) PNAME2 + ELSE + FSSOURCE = .FALSE. + END IF + IF (SETUP_APPLY_WLV) THEN + DO_CHANGE_WLV = SETUP_APPLY_WLV + PNAME2 = ' we change WLV' + WRITE (NDSO,2952) PNAME2 + END IF + SOLVERTHR_STP = SOLVERTHR_SETUP + CRIT_DEP_STP = CRIT_DEP_SETUP + END IF + +! +! 7.c Grid coordinates (branch here based on grid type) +! + IF ( GTYPE.NE.UNGTYPE) ALLOCATE ( XGRDIN(NX,NY), YGRDIN(NX,NY) ) + SELECT CASE ( GTYPE ) +! +! 7.c.1 Rectilinear grid +! + CASE ( RLGTYPE ) +! + IF (FLGNML) THEN + SX = NML_RECT%SX + SY = NML_RECT%SY + VSC = NML_RECT%SF + X0 = NML_RECT%X0 + Y0 = NML_RECT%Y0 + VSC0 = NML_RECT%SF0 + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) SX, SY, VSC + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) X0, Y0, VSC0 + END IF +! + VSC = MAX ( 1.E-7 , VSC ) + SX = SX / VSC + SY = SY / VSC + SX = MAX ( 1.E-7 , SX ) + SY = MAX ( 1.E-7 , SY ) + IF ( ICLOSE.EQ.ICLOSE_SMPL ) SX = 360. / REAL(NX) +! + VSC0 = MAX ( 1.E-7 , VSC0 ) + X0 = X0 / VSC0 + Y0 = Y0 / VSC0 +! + IF ( FLAGLL ) THEN + WRITE (NDSO,3004) FACTOR*SX, FACTOR*SY, & + FACTOR*X0, FACTOR*(X0+REAL(NX-1)*SX), & + FACTOR*Y0, FACTOR*(Y0+REAL(NY-1)*SY) + ELSE + WRITE (NDSO,3005) FACTOR*SX, FACTOR*SY, & + FACTOR*X0, FACTOR*(X0+REAL(NX-1)*SX), & + FACTOR*Y0, FACTOR*(Y0+REAL(NY-1)*SY) + END IF +! + DO IY=1, NY + DO IX=1, NX + XGRDIN(IX,IY) = X0 + REAL(IX-1)*SX + YGRDIN(IX,IY) = Y0 + REAL(IY-1)*SY + END DO + END DO +! +! 7.c.2 Curvilinear grid +! + CASE ( CLGTYPE ) +! +! 7.c.2.a Process x-coordinates +! + IF (FLGNML) THEN + NDSG = NML_CURV%XCOORD%IDF + VSC = NML_CURV%XCOORD%SF + VOF = NML_CURV%XCOORD%OFF + IDLA = NML_CURV%XCOORD%IDLA + IDFM = NML_CURV%XCOORD%IDFM + RFORM = TRIM(NML_CURV%XCOORD%FORMAT) + FROM = TRIM(NML_CURV%XCOORD%FROM) + FNAME = TRIM(NML_CURV%XCOORD%FILENAME) + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) NDSG, VSC, VOF, & + IDLA, IDFM, RFORM, FROM, FNAME + END IF +! + IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 + IF (IDFM.LT.1 .OR. IDFM.GT.3) IDFM = 1 +! + WRITE (NDSO,3006) NDSG, VSC, VOF, IDLA, IDFM + IF (IDFM.EQ.2) WRITE (NDSO,3008) TRIM(RFORM) + IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSI) & + WRITE (NDSO,3009) TRIM(FNAME) +! + IF ( NDSG .EQ. NDSI ) THEN + IF ( IDFM .EQ. 3 ) THEN + WRITE (NDSE,1004) NDSG + CALL EXTCDE (23) + ELSE + IF (.NOT.FLGNML) THEN + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + END IF + END IF + ELSE + IF ( IDFM .EQ. 3 ) THEN + IF (FROM.EQ.'NAME') THEN + OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME),& + FORM='UNFORMATTED', & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + ELSE + OPEN (NDSG, & + FORM='UNFORMATTED', & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + ELSE + IF (FROM.EQ.'NAME') THEN + OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME),& + STATUS='OLD',ERR=2000,IOSTAT=IERR) + ELSE + OPEN (NDSG, & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + END IF !IDFM + END IF !NDSG +! + CALL INA2R ( XGRDIN, NX, NY, 1, NX, 1, NY, NDSG, NDST, NDSE, & + IDFM, RFORM, IDLA, VSC, VOF) +! +! 7.c.2.b Process y-coordinates +! + IF (FLGNML) THEN + NDSG = NML_CURV%YCOORD%IDF + VSC = NML_CURV%YCOORD%SF + VOF = NML_CURV%YCOORD%OFF + IDLA = NML_CURV%YCOORD%IDLA + IDFM = NML_CURV%YCOORD%IDFM + RFORM = TRIM(NML_CURV%YCOORD%FORMAT) + FROM = TRIM(NML_CURV%YCOORD%FROM) + FNAME = TRIM(NML_CURV%YCOORD%FILENAME) + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) NDSG, VSC, VOF, & + IDLA, IDFM, RFORM, FROM, FNAME + END IF +! + IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 + IF (IDFM.LT.1 .OR. IDFM.GT.3) IDFM = 1 +! + WRITE (NDSO,3007) NDSG, VSC, VOF, IDLA, IDFM + IF (IDFM.EQ.2) WRITE (NDSO,3008) TRIM(RFORM) + IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSI) & + WRITE (NDSO,3009) TRIM(FNAME) +! + IF ( NDSG .EQ. NDSI ) THEN + IF ( IDFM .EQ. 3 ) THEN + WRITE (NDSE,1004) NDSG + CALL EXTCDE (23) + ELSE + IF (.NOT.FLGNML) THEN + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + END IF + END IF + ELSE + IF ( IDFM .EQ. 3 ) THEN + IF (FROM.EQ.'NAME') THEN + OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME),& + FORM='UNFORMATTED', & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + ELSE + OPEN (NDSG, & + FORM='UNFORMATTED', & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + ELSE + IF (FROM.EQ.'NAME') THEN + OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME),& + STATUS='OLD',ERR=2000,IOSTAT=IERR) + ELSE + OPEN (NDSG, & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + END IF !IDFM + END IF !NDSG +! + CALL INA2R ( YGRDIN, NX, NY, 1, NX, 1, NY, NDSG, NDST, NDSE, & + IDFM, RFORM, IDLA, VSC, VOF) +! +! 7.c.2.c Check for obvious errors in grid definition or input +! +! ....... Check for inverted grid (can result from wrong IDLA) + IF ( (XGRDIN(2,1)-XGRDIN(1,1))*(YGRDIN(1,2)-YGRDIN(1,1)) .LT. & + (YGRDIN(2,1)-YGRDIN(1,1))*(XGRDIN(1,2)-XGRDIN(1,1)) ) THEN + WRITE (NDSE,1011) IDLA +!.........Notes: here, we are checking to make sure that the j axis is ~90 degrees +!................counter-clockwise from the i axis (the standard cartesian setup). +!................So, it is a check on the handedness of the grid. +!................We have confirmed for one case that a left-handed grid produces +!................errors in SCRIP. We have not confirmed that left-handed grids necessarily +!................produce errors in single-grid simulations, or that they necessarily +!................produce errors in all multi-grid simulations. +!................Note that transposing or flipping a grid will generally change the handedness. + CALL EXTCDE (25) + END IF +! +! 7.c.3 Unstructured grid +! + CASE ( UNGTYPE ) +! + MAXX = 0. + MAXY = 0. + DXYMAX = 0. + WRITE (NDSO,1150) + + IF (FLGNML) THEN + ZLIM = NML_GRID%ZLIM + DMIN = NML_GRID%DMIN + NDSG = NML_UNST%IDF + VSC = NML_UNST%SF + IDLA = NML_UNST%IDLA + IDFM = NML_UNST%IDFM + RFORM = TRIM(NML_UNST%FORMAT) + FROM = 'NAME' + FNAME = TRIM(NML_UNST%FILENAME) + UGOBCFILE = TRIM(NML_UNST%UGOBCFILE) + END IF + END SELECT !GTYPE +! +! 7.d Depth information for grid +! + IF (FLGNML) THEN + IF (GTYPE.NE.UNGTYPE) THEN + ZLIM = NML_GRID%ZLIM + DMIN = NML_GRID%DMIN + NDSG = NML_DEPTH%IDF + VSC = NML_DEPTH%SF + IDLA = NML_DEPTH%IDLA + IDFM = NML_DEPTH%IDFM + RFORM = TRIM(NML_DEPTH%FORMAT) + FROM = TRIM(NML_DEPTH%FROM) + FNAME = TRIM(NML_DEPTH%FILENAME) + END IF + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) ZLIM, DMIN, NDSG, VSC, IDLA, & + IDFM, RFORM, FROM, FNAME + END IF +! + DMIN = MAX ( 1.E-3 , DMIN ) + IF ( ABS(VSC) .LT. 1.E-7 ) VSC = 1. + IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 + IF (IDFM.LT.1 .OR. IDFM.GT.3) IDFM = 1 +! + WRITE (NDSO,972) NDSG, ZLIM, DMIN, VSC, IDLA, IDFM + IF (IDFM.EQ.2) WRITE (NDSO,973) TRIM(RFORM) + IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSI) & + WRITE (NDSO,974) TRIM(FNAME) +! +! 7.e Read bottom depths +! + IF ( GTYPE.NE.UNGTYPE ) THEN +! +! Reading depths on structured grid +! +!Li Suspended for SMC grid, which uses depth stored in its cell array. +!Li JGLi15Oct2014 + IF( RGLGRD ) THEN +!Li + IF ( NDSG .EQ. NDSI ) THEN + IF ( IDFM .EQ. 3 ) THEN + WRITE (NDSE,1004) NDSG + CALL EXTCDE (23) + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + END IF + ELSE ! NDSG.NE.NDSI + IF ( IDFM .EQ. 3 ) THEN + IF (FROM.EQ.'NAME') THEN + OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME), & + FORM='UNFORMATTED',& + STATUS='OLD',ERR=2000,IOSTAT=IERR) + ELSE + OPEN (NDSG, FORM='UNFORMATTED', & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + ELSE + IF (FROM.EQ.'NAME') THEN + OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME), & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + ELSE + OPEN (NDSG, & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + END IF + END IF !( NDSG .EQ. NDSI ) +! +!Li End of RGLGRD block + ENDIF +!Li +! + ALLOCATE ( ZBIN(NX,NY), OBSX(NX,NY), OBSY(NX,NY) ) +! +! Initialize subgrid obstructions with zeros. + ZBIN(:,:)=0. + OBSX(:,:)=0. + OBSY(:,:)=0. + +!Li Suspend read depth file. JGLi15Oct2014 + IF( RGLGRD ) THEN +!Li + CALL INA2R ( ZBIN, NX, NY, 1, NX, 1, NY, NDSG, NDST, NDSE, & + IDFM, RFORM, IDLA, VSC, 0.0) +!Li End of RGLGRD block + ENDIF +!Li +! + ELSE +! +! Reading depths on unstructured grid (this also sets number of mesh points, NX) +! + CALL READMSH(NDSG,FNAME) + ALLOCATE(ZBIN(NX, NY),OBSX(NX,NY),OBSY(NX,NY)) + ZBIN(:,1) = VSC*XYB(:,3) +!/DEBUGSTP WRITE(740,*) 'VSC=', VSC +!/DEBUGSTP WRITE(740,*) 'Printing ZBIN 1' +!/DEBUGSTP DO IX=1,NX +!/DEBUGSTP WRITE(740,*) 'IX/ZBIN=', IX, ZBIN(IX,1) +!/DEBUGSTP END DO +! +! subgrid obstructions are not yet handled in unstructured grids +! + OBSX(:,:)=0. + OBSY(:,:)=0. + + END IF +! +! 7.f Set up temporary map +! + ALLOCATE ( TMPSTA(NY,NX), TMPMAP(NY,NX) ) + TMPSTA = 0 +! +!/DEBUGSTP WRITE(740,*) 'Printing ZBIN 2' +!/DEBUGSTP DO IX=1,NX +!/DEBUGSTP WRITE(740,*) 'IX/ZBIN=', IX, ZBIN(IX,1) +!/DEBUGSTP END DO + IF (GTYPE .EQ. UNGTYPE) THEN + TMPSTA = 1 + ELSE + DO IY=1, NY + DO IX=1, NX + IF ( ZBIN(IX,IY) .LE. ZLIM ) TMPSTA(IY,IX) = 1 + END DO + END DO + ENDIF +! +!Li Suspended for SMC grid. JGLi15Oct2014 + IF( RGLGRD ) THEN +!Li +! +! 7.g Subgrid information +! + TRFLAG = FLAGTR + IF ( TRFLAG.GT.6 .OR. TRFLAG.LT.0 ) TRFLAG = 0 +! + IF ( TRFLAG .EQ. 0 ) THEN + WRITE (NDSO,976) 'Not available.' + ELSE IF ( TRFLAG.EQ.1 .OR. TRFLAG.EQ.3 .OR. TRFLAG.EQ.5 ) THEN + WRITE (NDSO,976) 'In between grid points.' + ELSE + WRITE (NDSO,976) 'At grid points.' + END IF +! + IF ( TRFLAG .NE. 0 ) THEN +! +! 7.g.1 Info from input file +! + IF (FLGNML) THEN + NDSTR = NML_OBST%IDF + VSC = NML_OBST%SF + IDLA = NML_OBST%IDLA + IDFT = NML_OBST%IDFM + RFORM = TRIM(NML_OBST%FORMAT) + FROM = TRIM(NML_OBST%FROM) + TNAME = TRIM(NML_OBST%FILENAME) + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) NDSTR, VSC, IDLA, IDFT, RFORM, & + FROM, TNAME + END IF +! + IF ( ABS(VSC) .LT. 1.E-7 ) VSC = 1. + IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 + IF (IDFT.LT.1 .OR. IDFT.GT.3) IDFT = 1 +! + WRITE (NDSO,977) NDSTR, VSC, IDLA, IDFT + IF (IDFT.EQ.2) WRITE (NDSO,973) RFORM + IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSTR) WRITE (NDSO,974) TNAME +! +! 7.g.2 Open file and check if necessary +! + IF ( NDSTR .EQ. NDSI ) THEN + IF ( IDFT .EQ. 3 ) THEN + WRITE (NDSE,1004) NDSTR + CALL EXTCDE (23) + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + END IF + ELSE IF ( NDSTR .EQ. NDSG ) THEN + IF ( ( IDFM.EQ.3 .AND. IDFT.NE.3 ) .OR. & + ( IDFM.NE.3 .AND. IDFT.EQ.3 ) ) THEN + WRITE (NDSE,1005) IDFM, IDFT + CALL EXTCDE (24) + END IF + ELSE + IF ( IDFT .EQ. 3 ) THEN + IF (FROM.EQ.'NAME') THEN + OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & + FORM='UNFORMATTED',STATUS='OLD',ERR=2000, & + IOSTAT=IERR) + ELSE + OPEN (NDSTR, FORM='UNFORMATTED', & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + ELSE + IF (FROM.EQ.'NAME') THEN + OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + ELSE + OPEN (NDSTR, & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + END IF + END IF +! +! 7.g.3 Read the data +! + CALL INA2R ( OBSX, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & + IDFT, RFORM, IDLA, VSC, 0.0) +! + IF ( NDSTR .EQ. NDSI ) CALL NEXTLN ( COMSTR , NDSI , NDSE ) +! + CALL INA2R ( OBSY, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & + IDFT, RFORM, IDLA, VSC, 0.0) +! +! 7.g.4 Limit +! + DO IX=1, NX + DO IY=1, NY + OBSX(IX,IY) = MAX( 0. , MIN(1.,OBSX(IX,IY)) ) + OBSY(IX,IY) = MAX( 0. , MIN(1.,OBSY(IX,IY)) ) + END DO + END DO +! + WRITE (NDSO,*) +! + END IF ! TRFLAG +! +!Li End of RGLGRD block + END IF +!Li +! +!/RTD ! 7.h Calculate rotation angles for configs with rotated pole +!/RTD PoLon = PLON +!/RTD PoLat = PLAT +!/RTD FLAGUNR = UNROT +!/RTD ! Default values PLON=-180, PLAT=90, UNROT=.FALSE. for standard lat-lon +!/RTD +!/RTD ALLOCATE( AnglDin(NX,NY) ) +!/RTD ! For standard lat-lon the rotation angles are zero +!/RTD IF ( PoLat == 90. ) THEN +!/RTD AnglDin = 0. +!/RTD ELSE +!/RTD ALLOCATE(StdLat(NX,NY), StdLon(NX,NY)) +!/RTD +!/RTD ! Calculate rotation angles; (StdLon/Lat are returned, but not used) +!/RTD ! The regular grid X/YGRDIN are used as equatorial lon and lat +!/RTD CALL W3EQTOLL( YGRDIN, XGRDIN, StdLat, StdLon, AnglDin, & +!/RTD PoLat, PoLon, NX*NY ) +!/RTD +!/RTD ! Clean up +!/RTD DEALLOCATE( StdLat, StdLon ) +!/RTD END IF +!/RTD ! Write out rotation information +!/RTD WRITE (NDSO,4203) PoLat, PoLon +!/RTD WRITE (NDSO,4200) +!/RTD WRITE (NDSO,4201) ( IX, IX=1,NX,NX/3) +!/RTD WRITE (NDSO,4202) 1,(AnglDin(IX, 1), IX=1,NX,NX/3) +!/RTD WRITE (NDSO,4202) NY,(AnglDin(IX,NY), IX=1,NX,NX/3) +!/RTD IF ( FLAGUNR ) WRITE (NDSO,4204) +!/RTD WRITE (NDSO,*) ' ' +!/RTD +! +!/SMC !! 7.i Read SMC grid cell and face integer arrays. +!/SMC IF (FLGNML) THEN +!/SMC NDSTR = NML_SMC%MCELS%IDF +!/SMC IDLA = NML_SMC%MCELS%IDLA +!/SMC IDFM = NML_SMC%MCELS%IDFM +!/SMC RFORM = TRIM(NML_SMC%MCELS%FORMAT) +!/SMC TNAME = TRIM(NML_SMC%MCELS%FILENAME) +!/SMC ELSE +!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME +!/SMC END IF +!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) +!/SMC ALLOCATE ( NLvCelsk( 0:NRLv ) ) +!/SMC READ (NDSTR,*) NLvCelsk +!/SMC NCel=NLvCelsk(0) +!/ARC NGLO=NCel +!/SMC WRITE (NDSO,4004) NCel, NLvCelsk +!/SMC +!/SMC ALLOCATE ( IJKCelin( 5, NCel) ) +!/SMC CALL INA2I ( IJKCelin, 5, NCel, 1, 5, 1, NCel, NDSTR, NDST, NDSE, & +!/SMC IDFM, RFORM, IDLA, 1, 0) +!/SMC CLOSE(NDSTR) +!/SMC !!Li Offset to change Equator index = 0 to regular grid index JEQT +!/SMC IJKCelin( 2, :) = IJKCelin( 2, :) + JEQT +!/SMC !!Li Offset to change i-index = 0 to regular grid index ISHFT +!/SMC IJKCelin( 1, :) = IJKCelin( 1, :) + ISHFT +!/SMC +!/SMC WRITE (NDSO,4005) TNAME +!/SMC WRITE (NDSO,4006) 1,(IJKCelin(ix, 1), ix=1,5) +!/SMC WRITE (NDSO,4006) NCel,(IJKCelin(ix, NCel), ix=1,5) +!/SMC WRITE (NDSO,*) ' ' +!/SMC +!/SMC IF (FLGNML) THEN +!/SMC NDSTR = NML_SMC%ISIDE%IDF +!/SMC IDLA = NML_SMC%ISIDE%IDLA +!/SMC IDFM = NML_SMC%ISIDE%IDFM +!/SMC RFORM = TRIM(NML_SMC%ISIDE%FORMAT) +!/SMC TNAME = TRIM(NML_SMC%ISIDE%FILENAME) +!/SMC ELSE +!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME +!/SMC END IF +!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) +!/SMC ALLOCATE ( NLvUFcsk( 0:NRLv ) ) +!/SMC READ (NDSTR,*) NLvUFcsk +!/SMC NUFc = NLvUFcsk(0) +!/SMC NGUI = NUFc +!/SMC WRITE (NDSO,4007) NUFc, NLvUFcsk +!/SMC +!/SMC ALLOCATE ( IJKUFcin( 7, NUFc) ) +!/SMC CALL INA2I ( IJKUFcin, 7, NUFc, 1, 7, 1, NUFc, NDSTR, NDST, NDSE, & +!/SMC IDFM, RFORM, IDLA, 1, 0) +!/SMC CLOSE(NDSTR) +!/SMC !!Li Offset to change Equator index = 0 to regular grid index +!/SMC IJKUFcin( 2, :) = IJKUFcin( 2, :) + JEQT +!/SMC IJKUFcin( 1, :) = IJKUFcin( 1, :) + ISHFT +!/SMC +!/SMC WRITE (NDSO,4008) TNAME +!/SMC WRITE (NDSO,4009) 1,(IJKUFcin(ix, 1), ix=1,7) +!/SMC WRITE (NDSO,4009) NUFc,(IJKUFcin(ix, NUFc), ix=1,7) +!/SMC WRITE (NDSO,*) ' ' +!/SMC +!/SMC IF (FLGNML) THEN +!/SMC NDSTR = NML_SMC%JSIDE%IDF +!/SMC IDLA = NML_SMC%JSIDE%IDLA +!/SMC IDFM = NML_SMC%JSIDE%IDFM +!/SMC RFORM = TRIM(NML_SMC%JSIDE%FORMAT) +!/SMC TNAME = TRIM(NML_SMC%JSIDE%FILENAME) +!/SMC ELSE +!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME +!/SMC END IF +!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) +!/SMC ALLOCATE ( NLvVFcsk( 0:NRLv ) ) +!/SMC READ (NDSTR,*) NLvVFcsk +!/SMC NVFc= NLvVFcsk(0) +!/SMC NGVJ= NVFc +!/SMC WRITE (NDSO,4010) NVFc, NLvVFcsk +!/SMC +!/SMC ALLOCATE ( IJKVFcin( 8, NVFc) ) +!/SMC CALL INA2I ( IJKVFcin, 8, NVFc, 1, 8, 1, NVFc, NDSTR, NDST, NDSE, & +!/SMC IDFM, RFORM, IDLA, 1, 0) +!/SMC CLOSE(NDSTR) +!/SMC !!Li Offset to change Equator index = 0 to regular grid index +!/SMC IJKVFcin( 2, :) = IJKVFcin( 2, :) + JEQT +!/SMC IJKVFcin( 1, :) = IJKVFcin( 1, :) + ISHFT +!/SMC +!/SMC WRITE (NDSO,4011) TNAME +!/SMC WRITE (NDSO,4012) 1,(IJKVFcin(ix, 1), ix=1,8) +!/SMC WRITE (NDSO,4012) NVFc,(IJKVFcin(ix, NVFc), ix=1,8) +!/SMC WRITE (NDSO,*) ' ' +!/SMC +!/SMC !!Li Subgrid obstruction for each SMCels. JGLi15Oct2014 +!/SMC IF (FLGNML) THEN +!/SMC NDSTR = NML_SMC%SUBTR%IDF +!/SMC IDLA = NML_SMC%SUBTR%IDLA +!/SMC IDFM = NML_SMC%SUBTR%IDFM +!/SMC RFORM = TRIM(NML_SMC%SUBTR%FORMAT) +!/SMC TNAME = TRIM(NML_SMC%SUBTR%FILENAME) +!/SMC ELSE +!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME +!/SMC END IF +!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) +!/SMC READ (NDSTR,*) NCObst, JObs +!/SMC WRITE (NDSO,4110) NCObst, JObs +!/SMC +!/SMC ALLOCATE ( IJKObstr( JObs, NCObst) ) +!/SMC CALL INA2I ( IJKObstr, JObs, NCObst, 1, JObs, 1, NCObst, NDSTR, NDST, & +!/SMC NDSE, IDFM, RFORM, IDLA, 1, 0) +!/SMC CLOSE(NDSTR) +!/SMC +!/SMC WRITE (NDSO,4111) TNAME +!/SMC WRITE (NDSO,4012) 1, (IJKObstr(ix, 1), ix=1,JObs) +!/SMC WRITE (NDSO,4012) NCObst, (IJKObstr(ix, NCObst), ix=1,JObs) +!/SMC WRITE (NDSO,*) ' ' +!/SMC +!/SMC !!Li Bounary cell sequential numbers are read only if NBISMC>0 +!/SMC IF( NBISMC .GT. 0 ) THEN +!/SMC IF (FLGNML) THEN +!/SMC NDSTR = NML_SMC%BUNDY%IDF +!/SMC IDLA = NML_SMC%BUNDY%IDLA +!/SMC IDFM = NML_SMC%BUNDY%IDFM +!/SMC RFORM = TRIM(NML_SMC%BUNDY%FORMAT) +!/SMC TNAME = TRIM(NML_SMC%BUNDY%FILENAME) +!/SMC ELSE +!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME +!/SMC END IF +!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) +!/SMC ALLOCATE ( NBICelin( NBISMC ) ) +!/SMC CALL INA2I ( NBICelin, 1, NBISMC, 1, 1, 1, NBISMC, NDSTR, NDST, & +!/SMC NDSE, IDFM, RFORM, IDLA, 1, 0) +!/SMC CLOSE(NDSTR) +!/SMC +!/SMC WRITE (NDSO,4013) TNAME +!/SMC WRITE (NDSO,4014) 1, NBICelin( 1) +!/SMC WRITE (NDSO,4014) NBISMC, NBICelin(NBISMC) +!/SMC WRITE (NDSO,*) ' ' +!/SMC ENDIF +!/SMC +! +!/ARC !! 7.j Read Arctic grid cell and boundary cell integer arrays. +!/ARC IF (FLGNML) THEN +!/ARC NDSTR = NML_SMC%MBARC%IDF +!/ARC IDLA = NML_SMC%MBARC%IDLA +!/ARC IDFM = NML_SMC%MBARC%IDFM +!/ARC RFORM = TRIM(NML_SMC%MBARC%FORMAT) +!/ARC TNAME = TRIM(NML_SMC%MBARC%FILENAME) +!/ARC ELSE +!/ARC CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/ARC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME +!/ARC END IF +!/ARC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/ARC FORM='FORMATTED',STATUS='OLD',ERR=2000) +!/ARC READ (NDSTR,*) NARC, NBGL, NBAC +!/ARC WRITE (NDSO,4015) NARC, NBGL, NBAC +!/ARC +!/ARC ALLOCATE ( IJKCelAC( 5, NARC) ) +!/ARC CALL INA2I ( IJKCelAC, 5, NARC, 1, 5, 1, NARC, NDSTR, NDST, NDSE, & +!/ARC IDFM, RFORM, IDLA, 1, 0) +!/ARC CLOSE(NDSTR) +!/ARC !!Li Offset to change Equator index = 0 to regular grid index JEQT +!/ARC IJKCelAC( 2, :) = IJKCelAC( 2, :) + JEQT +!/ARC IJKCelAC( 1, :) = IJKCelAC( 1, :) + ISHFT +!/ARC +!/ARC WRITE (NDSO,4016) TNAME +!/ARC WRITE (NDSO,4006) 1,(IJKCelAC(ix, 1), ix=1,5) +!/ARC WRITE (NDSO,4006) NARC,(IJKCelAC(ix, NARC), ix=1,5) +!/ARC WRITE (NDSO,*) ' ' +!/ARC +!/ARC IF (FLGNML) THEN +!/ARC NDSTR = NML_SMC%AISID%IDF +!/ARC IDLA = NML_SMC%AISID%IDLA +!/ARC IDFM = NML_SMC%AISID%IDFM +!/ARC RFORM = TRIM(NML_SMC%AISID%FORMAT) +!/ARC TNAME = TRIM(NML_SMC%AISID%FILENAME) +!/ARC ELSE +!/ARC CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/ARC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME +!/ARC END IF +!/ARC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/ARC FORM='FORMATTED',STATUS='OLD',ERR=2000) +!/ARC READ (NDSTR,*) NAUI +!/ARC WRITE (NDSO,4017) NAUI +!/ARC +!/ARC ALLOCATE ( IJKUFcAC( 7, NAUI) ) +!/ARC CALL INA2I ( IJKUFcAC, 7, NAUI, 1, 7, 1, NAUI, NDSTR, NDST, NDSE, & +!/ARC IDFM, RFORM, IDLA, 1, 0) +!/ARC CLOSE(NDSTR) +!/ARC !!Li Offset to change Equator index = 0 to regular grid index +!/ARC IJKUFcAC( 2, :) = IJKUFcAC( 2, :) + JEQT +!/ARC IJKUFcAC( 1, :) = IJKUFcAC( 1, :) + ISHFT +!/ARC !!Li Offset Arctic cell sequential numbers by global cell number NGLO +!/ARC DO IP=1, NAUI +!/ARC DO IX=4,7 +!/ARC IF( IJKUFcAC(IX,IP) > 0 ) IJKUFcAC(IX,IP) = IJKUFcAC(IX,IP) + NGLO +!/ARC ENDDO +!/ARC ENDDO +!/ARC +!/ARC WRITE (NDSO,4018) TNAME +!/ARC WRITE (NDSO,4009) 1,(IJKUFcAC(ix, 1), ix=1,7) +!/ARC WRITE (NDSO,4009) NAUI,(IJKUFcAC(ix, NAUI), ix=1,7) +!/ARC WRITE (NDSO,*) ' ' +!/ARC +!/ARC IF (FLGNML) THEN +!/ARC NDSTR = NML_SMC%AJSID%IDF +!/ARC IDLA = NML_SMC%AJSID%IDLA +!/ARC IDFM = NML_SMC%AJSID%IDFM +!/ARC RFORM = TRIM(NML_SMC%AJSID%FORMAT) +!/ARC TNAME = TRIM(NML_SMC%AJSID%FILENAME) +!/ARC ELSE +!/ARC CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/ARC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME +!/ARC END IF +!/ARC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/ARC FORM='FORMATTED',STATUS='OLD',ERR=2000) +!/ARC READ (NDSTR,*) NAVJ +!/ARC WRITE (NDSO,4019) NAVJ +!/ARC +!/ARC ALLOCATE ( IJKVFcAC( 8, NAVJ) ) +!/ARC CALL INA2I ( IJKVFcAC, 8, NAVJ, 1, 8, 1, NAVJ, NDSTR, NDST, NDSE, & +!/ARC IDFM, RFORM, IDLA, 1, 0) +!/ARC CLOSE(NDSTR) +!/ARC !!Li Offset to change Equator index = 0 to regular grid index +!/ARC IJKVFcAC( 2, :) = IJKVFcAC( 2, :) + JEQT +!/ARC IJKVFcAC( 1, :) = IJKVFcAC( 1, :) + ISHFT +!/ARC !!Li Offset Arctic cell sequential numbers by global cell number NGLO +!/ARC DO IP=1, NAVJ +!/ARC DO IY=4,7 +!/ARC IF( IJKVFcAC(IY,IP) > 0 ) IJKVFcAC(IY,IP) = IJKVFcAC(IY,IP) + NGLO +!/ARC ENDDO +!/ARC ENDDO +!/ARC +!/ARC WRITE (NDSO,4020) TNAME +!/ARC WRITE (NDSO,4012) 1,(IJKVFcAC(ix, 1), ix=1,8) +!/ARC WRITE (NDSO,4012) NAVJ,(IJKVFcAC(ix, NAVJ), ix=1,8) +!/ARC WRITE (NDSO,*) ' ' +!/ARC +!/ARC !!Li Reset total cell and face numbers +!/ARC NCel = NGLO + NARC +!/ARC NUFc = NGUI + NAUI +!/ARC NVFc = NGVJ + NAVJ +!/ARC !!Li Also append Arctic part into base level sub-loops +!/ARC NLvCelsk(NRLv)=NLvCelsk(NRLv)+NARC +!/ARC NLvUFcsk(NRLv)=NLvUFcsk(NRLv)+NAUI +!/ARC NLvVFcsk(NRLv)=NLvVFcsk(NRLv)+NAVJ +!/ARC !!Li Reset NBAC to total number of boundary cells. +!/ARC NBAC = NBGL + NBAC +!/ARC +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 8. Finalize status maps +! 8.a Defines open boundary conditions for UNST grids +! + J = LEN_TRIM(UGOBCFILE) + IF (GTYPE.EQ.UNGTYPE.AND.UGOBCFILE(:J).NE.'unset') & + CALL READMSHOBC(NDSG,UGOBCFILE,TMPSTA,UGOBCOK) + IF ((GTYPE.EQ.UNGTYPE).AND.UGOBCAUTO.AND.(.NOT.UGOBCOK)) & + CALL UG_GETOPENBOUNDARY(TMPSTA,ZBIN,UGOBCDEPTH) +!/DEBUGSTP WRITE(740,*) 'Printing ZBIN 4' +!/DEBUGSTP DO IX=1,NX +!/DEBUGSTP WRITE(740,*) 'IX/ZBIN=', IX, ZBIN(IX,1) +!/DEBUGSTP END DO +! +! 8.b Determine where to get the data +! + IF (FLGNML) THEN + NDSTR = NML_MASK%IDF + IDLA = NML_MASK%IDLA + IDFT = NML_MASK%IDFM + RFORM = TRIM(NML_MASK%FORMAT) + FROM = TRIM(NML_MASK%FROM) + TNAME = TRIM(NML_MASK%FILENAME) + IF (TNAME.EQ.'unset' .OR. TNAME.EQ.'UNSET') FROM='PART' + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFT, RFORM, & + FROM, TNAME + END IF +! +! ... Data to be read in parts +! +!/DEBUGGRID WRITE(740+IAPROC,*) 'FROM=', TRIM(FROM) + IF ( FROM .EQ. 'PART' ) THEN +! +! 8.b Update TMPSTA with input boundary data (ILOOP=1) +! and excluded points (ILOOP=2) +! + IF ( ICLOSE .EQ. ICLOSE_TRPL ) THEN + WRITE(NDSE,*)'PROGRAM W3GRID STATUS MAP CALCULATION IS '// & + 'NOT TESTED FOR TRIPOLE GRIDS FOR CASE WHERE USER OPTS '// & + 'TO READ DATA IN PARTS. STOPPING NOW (107).' + CALL EXTCDE ( 107 ) + END IF +!/DEBUGGRID nbCase1=0 +!/DEBUGGRID nbCase2=0 +!/DEBUGGRID nbCase3=0 +!/DEBUGGRID nbCase4=0 +!/DEBUGGRID nbCase5=0 +!/DEBUGGRID nbCase6=0 +!/DEBUGGRID nbCase7=0 +!/DEBUGGRID nbCase8=0 + DO ILOOP=1, 2 +! + I = 1 + IF ( ILOOP .EQ. 1 ) THEN + WRITE (NDSO,979) 'boundary points' + NSTAT = 2 + ELSE + WRITE (NDSO,979) 'excluded points' + NSTAT = -1 + END IF + FIRST = .TRUE. +! + DO + IF (FLGNML) THEN + ! inbound points + IF (ILOOP.EQ.1) THEN + IF (NML_INBND_COUNT%N_POINT.GT.0 .AND. I.LE.NML_INBND_COUNT%N_POINT) THEN + IX = NML_INBND_POINT(I)%X_INDEX + IY = NML_INBND_POINT(I)%Y_INDEX + CONNCT = NML_INBND_POINT(I)%CONNECT + I=I+1 + ELSE + EXIT + END IF + ! excluded points + ELSE IF (ILOOP.EQ.2) THEN + IF (NML_EXCL_COUNT%N_POINT.GT.0 .AND. I.LE.NML_EXCL_COUNT%N_POINT) THEN + IX = NML_EXCL_POINT(I)%X_INDEX + IY = NML_EXCL_POINT(I)%Y_INDEX + CONNCT = NML_EXCL_POINT(I)%CONNECT + I=I+1 + ELSE + EXIT + END IF + END IF + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) IX, IY, CONNCT + END IF +!/DEBUGGRID WRITE(740+IAPROC,*) 'read IX=', IX +!/DEBUGGRID WRITE(740+IAPROC,*) 'read IY=', IY +!/DEBUGGRID WRITE(740+IAPROC,*) 'read CONNCT=', CONNCT + +! +! ... Check if last point reached. +! + IF (IX.EQ.0 .AND. IY.EQ.0) EXIT +! +! ... Check if point in grid. +! + IF (GTYPE.EQ.UNGTYPE.AND.(UGOBCAUTO.OR.UGOBCOK)) CYCLE + IF (IX.LT.1 .OR. IX.GT.NX .OR. IY.LT.1 .OR. IY.GT.NY) THEN + WRITE (NDSO,981) + WRITE (NDSO,*) ' ', IX, IY + CYCLE + END IF +! +! ... Check if intermediate points are to be added. +! +!/DEBUGGRID WRITE(740+IAPROC,*) 'CONNCT=', CONNCT +!/DEBUGGRID WRITE(740+IAPROC,*) 'FIRST=', FIRST + IF ( CONNCT .AND. .NOT.FIRST ) THEN + IDX = IX - IXO + IDY = IY - IYO + IF ( IDX.EQ.0 .OR. IDY.EQ.0 .OR. & + ABS(IDX).EQ.ABS(IDY) ) THEN + NBA = MAX ( MAX(ABS(IDX),ABS(IDY))-1 , 0 ) + IF (IDX.NE.0) IDX = SIGN(1,IDX) + IF (IDY.NE.0) IDY = SIGN(1,IDY) + IX = IXO + IY = IYO + DO IBA=1, NBA + IX = IX + IDX + IY = IY + IDY + IF ( TMPSTA(IY,IX).EQ.1 .OR. J.EQ.2 ) THEN + TMPSTA(IY,IX) = NSTAT + ELSE + WRITE(NDSO,*) 'WARNING: POINT (',IX,',',IY, & + ') CANNOT BE GIVEN THE STATUS ',NSTAT + END IF + END DO + IX = IX + IDX + IY = IY + IDY + ELSE + WRITE (NDSO,982) + WRITE (NDSO,*) ' ', IX , IY + WRITE (NDSO,*) ' ', IXO, IYO + END IF + END IF +! +! ... Check if point itself is to be added +! + IF ( TMPSTA(IY,IX).EQ.1 .OR. J.EQ.2 ) THEN +!/DEBUGGRID nbCase2=nbCase2+1 + TMPSTA(IY,IX) = NSTAT + END IF +! +! ... Save data of previous point +! + IXO = IX + IYO = IY + FIRST = .FALSE. +! +! ... Branch back to read. +! + END DO +! +! 8.c Final processing excluded points +! + IF ( ILOOP .EQ. 2 ) THEN +! + I = 1 + DO + IF (FLGNML) THEN + ! excluded bodies + IF (NML_EXCL_COUNT%N_BODY.GT.0 .AND. I.LE.NML_EXCL_COUNT%N_BODY) THEN + IX = NML_EXCL_BODY(I)%X_INDEX + IY = NML_EXCL_BODY(I)%Y_INDEX + I=I+1 + ELSE + EXIT + END IF + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + READ (NDSI,*,END=2001,ERR=2002) IX, IY + END IF +! +! ... Check if last point reached. +! + IF (IX.EQ.0 .AND. IY.EQ.0) EXIT +! +! ... Check if point in grid. +! + IF (IX.LT.1 .OR. IX.GT.NX .OR. IY.LT.1 .OR. IY.GT.NY) THEN + WRITE (NDSO,981) + WRITE (NDSO,*) ' ', IX, IY + CYCLE + END IF +! +! ... Check if point already excluded +! + IF ( TMPSTA(IY,IX) .EQ. NSTAT ) THEN + WRITE (NDSO,1981) + WRITE (NDSO,*) ' ', IX, IY + CYCLE + END IF +! +! ... Search for points to exclude +! + TMPMAP = TMPSTA + J = 1 + IX1 = IX + IY1 = IY +! + JJ = TMPSTA(IY,IX) +!/DEBUGGRID nbCase3=nbCase3 + 1 + TMPSTA(IY,IX) = NSTAT + DO + NBT = 0 + DO IX=MAX(1,IX1-J), MIN(IX1+J,NX) + DO IY=MAX(1,IY1-J), MIN(IY1+J,NY) + IF ( TMPSTA(IY,IX) .EQ. JJ ) THEN + IF (IX.GT.1) THEN + IF (TMPSTA(IY ,IX-1).EQ.NSTAT & + .AND. TMPMAP(IY ,IX-1).EQ.JJ ) THEN +!/DEBUGGRID nbCase4=nbCase4 + 1 + TMPSTA(IY,IX) = NSTAT + END IF + END IF + IF (IX.LT.NX) THEN + IF (TMPSTA(IY ,IX+1).EQ.NSTAT & + .AND. TMPMAP(IY ,IX+1).EQ.JJ ) THEN +!/DEBUGGRID nbCase5=nbCase5 + 1 + TMPSTA(IY,IX) = NSTAT + END IF + END IF + IF (IY.LT.NY) THEN + IF (TMPSTA(IY+1,IX ).EQ.NSTAT & + .AND. TMPMAP(IY+1,IX ).EQ.JJ ) THEN +!/DEBUGGRID nbCase6=nbCase6 + 1 + TMPSTA(IY,IX) = NSTAT + END IF + END IF + IF (IY.GT.1) THEN + IF (TMPSTA(IY-1,IX ).EQ.NSTAT & + .AND. TMPMAP(IY-1,IX ).EQ.JJ ) THEN +!/DEBUGGRID nbCase7=nbCase7 + 1 + TMPSTA(IY,IX) = NSTAT + END IF + END IF + IF (TMPSTA(IY,IX).EQ.NSTAT) NBT = NBT + 1 + END IF + END DO + END DO +! + IF ( NBT .NE. 0 ) THEN + J = J + 1 + ELSE + EXIT + END IF + END DO + END DO +! +! ... Outer boundary excluded points +! + IF ( GTYPE.NE.UNGTYPE ) THEN + + DO IX=1, NX + IF ( TMPSTA( 1,IX) .EQ. 1 ) TMPSTA( 1,IX) = NSTAT + IF ( TMPSTA(NY,IX) .EQ. 1 ) TMPSTA(NY,IX) = NSTAT + END DO +! + IF ( ICLOSE.EQ.ICLOSE_NONE ) THEN + DO IY=2, NY-1 + IF ( TMPSTA(IY, 1) .EQ. 1 ) TMPSTA(IY, 1) = NSTAT + IF ( TMPSTA(IY,NX) .EQ. 1 ) TMPSTA(IY,NX) = NSTAT + END DO + END IF + + END IF ! GTYPE +! + END IF ! ILOOP .EQ. 2 +! +! ... Branch back input / excluded points ( ILOOP in 8.b ) +! + END DO +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase1=', nbCase1 +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase2=', nbCase2 +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase3=', nbCase3 +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase4=', nbCase4 +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase5=', nbCase5 +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase6=', nbCase6 +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase7=', nbCase7 +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase8=', nbCase8 +!/DEBUGGRID nbTMPSTA0=0 +!/DEBUGGRID nbTMPSTA1=0 +!/DEBUGGRID nbTMPSTA2=0 +!/DEBUGGRID DO IX=1,NX +!/DEBUGGRID DO IY=1,NY +!/DEBUGGRID WRITE(740+IAPROC,*) 'IX/IY/TMPSTA=', IX, IY, TMPSTA(IY,IX) +!/DEBUGGRID IF (TMPSTA(IY,IX) .eq. 0) nbTMPSTA0=nbTMPSTA0+1 +!/DEBUGGRID IF (TMPSTA(IY,IX) .eq. 1) nbTMPSTA1=nbTMPSTA1+1 +!/DEBUGGRID IF (TMPSTA(IY,IX) .eq. 2) nbTMPSTA2=nbTMPSTA2+1 +!/DEBUGGRID END DO +!/DEBUGGRID END DO +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbTMPSTA0=', nbTMPSTA0 +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbTMPSTA1=', nbTMPSTA1 +!/DEBUGGRID WRITE(740+IAPROC,*) 'nbTMPSTA2=', nbTMPSTA2 +!/DEBUGGRID FLUSH(740+IAPROC) +! + ELSE ! FROM .EQ. PART +! +! 8.d Read the map from file instead +! + NSTAT = -1 + IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 + IF (IDFT.LT.1 .OR. IDFT.GT.3) IDFT = 1 + +!!Li Suspended for SMC grid though the file input line in ww3_grid.inp +!!Li is kept to divert the program into this block. JGLi15Oct2014 +!!Li + IF( RGLGRD ) THEN +!!Li +! + WRITE (NDSO,978) NDSTR, IDLA, IDFT + IF (IDFT.EQ.2) WRITE (NDSO,973) RFORM + IF (FROM.EQ.'NAME') WRITE (NDSO,974) TNAME +! + IF ( NDSTR .EQ. NDSI ) THEN + IF ( IDFT .EQ. 3 ) THEN + WRITE (NDSE,1004) NDSTR + CALL EXTCDE (23) + ELSE + CALL NEXTLN ( COMSTR , NDSI , NDSE ) + END IF + ELSE + IF ( IDFT .EQ. 3 ) THEN + IF (FROM.EQ.'NAME') THEN + OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & + FORM='UNFORMATTED',STATUS='OLD',ERR=2000, & + IOSTAT=IERR) + ELSE + OPEN (NDSTR, FORM='UNFORMATTED', & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + ELSE + IF (FROM.EQ.'NAME') THEN + OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + ELSE + OPEN (NDSTR, & + STATUS='OLD',ERR=2000,IOSTAT=IERR) + END IF + END IF + END IF +! + ALLOCATE ( READMP(NX,NY) ) + CALL INA2I ( READMP, NX, NY, 1, NX, 1, NY, NDSTR, NDST, & + NDSE, IDFT, RFORM, IDLA, 1, 0 ) +! + IF ( ICLOSE.EQ.ICLOSE_NONE ) THEN + DO IY=2, NY-1 + IF ( READMP( 1,IY) .EQ. 1 ) READMP( 1,IY) = 3 + IF ( READMP(NX,IY) .EQ. 1 ) READMP(NX,IY) = 3 + END DO + END IF +! + DO IX=1, NX + IF ( READMP(IX, 1) .EQ. 1 ) READMP(IX, 1) = 3 + IF ( READMP(IX,NY) .EQ. 1 .AND. ICLOSE .NE. ICLOSE_TRPL) & + READMP(IX,NY) = 3 + END DO +! + DO IY=1, NY + DO IX=1, NX + IF ( READMP(IX,IY) .EQ. 3 ) THEN + TMPSTA(IY,IX) = NSTAT + ELSE + TMPSTA(IY,IX) = READMP(IX,IY) + ! force to dry the sea points over zlim + IF ( ZBIN(IX,IY) .GT. ZLIM ) TMPSTA(IY,IX) = 0 + END IF + END DO + END DO + DEALLOCATE ( READMP ) +!!Li + ENDIF !! RGLGRD +!!Li +! + END IF !FROM .NE. 'PART' +! +! 8.e Get NSEA and other counters +! + NSEA = 0 + NLAND = 0 + NBI = 0 + NBT = 0 +! + DO IX=1, NX + DO IY=1, NY + IF ( TMPSTA(IY,IX) .GT. 0 ) NSEA = NSEA + 1 + IF ( TMPSTA(IY,IX) .EQ. 0 ) NLAND = NLAND + 1 + IF ( TMPSTA(IY,IX) .LT. 0 ) NBT = NBT + 1 + IF ( TMPSTA(IY,IX) .EQ. 2 ) NBI = NBI + 1 + END DO + END DO +! +!/SMC !Li Moved before FLBPI is defined with NBI value. JGLi05Jun2015 +!/SMC !Li Overwrite NSEA with NCel for SMC grid. +!/SMC NSEA = NCel +!/SMC !Li Use input NBI number for SMC grid because merged +!/SMC !Li cells are over-counted by model. +!/SMC NBI = NBISMC +!/SMC !Li No land points are used in SMC grid. JGLi26Feb2016 +!/SMC NLAND = 0 +! + WRITE (NDSO,980) + FLBPI = NBI .GT. 0 + IF ( .NOT. FLBPI ) THEN + WRITE (NDSO,985) + ELSE + WRITE (NDSO,986) NBI +!/O1 IF ( FLAGLL ) THEN +!/O1 WRITE (NDSO, 987) +!/O1 ELSE +!/O1 WRITE (NDSO,1987) +!/O1 END IF +!/O1 IBI = 1 +!/O1 DO IY=1, NY +!/O1 DO IX=1, NX +!/O1 IF (GTYPE.NE.UNGTYPE) THEN +!/O1 X = FACTOR * ( XGRDIN(IX,IY) ) +!/O1 Y = FACTOR * ( YGRDIN(IX,IY) ) +!/O1 ELSE +!/O1 X = FACTOR * XYB(IX,1) +!/O1 Y = FACTOR * XYB(IX,2) +!/O1 END IF +!/O1 IF ( TMPSTA(IY,IX).EQ.2 ) THEN +!/O1 IF ( FLAGLL ) THEN +!/O1 WRITE (NDSO, 988) IBI, IX, IY, X, Y +!/O1 ELSE +!/O1 WRITE (NDSO,1988) IBI, IX, IY, X, Y +!/O1 END IF +!/O1 IBI = IBI + 1 +!/O1 END IF +!/O1 END DO +!/O1 END DO + END IF +! + WRITE (NDSO,1980) + IF ( NBT .EQ. 0 ) THEN + WRITE (NDSO,1985) + ELSE + WRITE (NDSO,1986) NBT + END IF +! +! 8.f Set up all maps +! +!!Li CALL W3DIMX ( 1, NX, NY, NSEA, NDSE, NDST ) + CALL W3DIMX ( 1, NX, NY, NSEA, NDSE, NDST & +!/SMC , NCel, NUFc, NVFc, NRLv & +!/ARC , NARC, NBAC, NSPEC & + ) +!/SMC WRITE (NDSO,4021) NCel +! +! 8.g Activation of reflections and scattering + FFACBERG=FACBERG +!/REF1 REFPARS(1)=REFCOAST +!/REF1 REFPARS(2)=REFSUBGRID +!/REF1 REFPARS(3)=REFUNSTSOURCE +!/REF1 REFPARS(4)=REFICEBERG +!/REF1 REFPARS(6)=REFFREQ +!/REF1 REFPARS(7)=REFSLOPE +!/REF1 REFPARS(8)=REFCOSP_STRAIGHT +!/REF1 REFPARS(9)=REFRMAX +!/REF1 REFPARS(10)=REFFREQPOW +!/REF1 IF (GTYPE.EQ.UNGTYPE) REFPARS(2:5)=0. +!/REF1 IF (REFMAP.EQ.0) THEN +!/REF1 REFLC(3,:)=REFPARS(7) +!/REF1 END IF + + + IF (GTYPE.NE.UNGTYPE) THEN + DO IY=1, NY + DO IX=1, NX + XGRD(IY,IX) = XGRDIN(IX,IY) + YGRD(IY,IX) = YGRDIN(IX,IY) + END DO + END DO + DEALLOCATE ( XGRDIN, YGRDIN ) + CALL W3GNTX ( 1, 6, 6 ) + ELSE +! +!FA: This distinction between structured and unstructured +! should be removed when XYB is replaced by XGRD and YGRD +! + DO IX=1, NX + XGRD(:,IX) = XYB(IX,1) + YGRD(:,IX) = XYB(IX,2) + END DO + END IF ! GTYPE +! +! +!!Li MAPSTA = TMPSTA +!!Li Shelter MAPSTA LLG definition for SMC by RGLGRD. + IF( RGLGRD ) MAPSTA = TMPSTA + MAPFS = 0 +! +!/T ALLOCATE ( MAPOUT(NX,NY) ) +!/T MAPOUT = 0 +! +!/T IX3 = 1 + NX/60 +!/T IY3 = 1 + NY/60 +!/T CALL PRTBLK (NDST, NX, NY, NX, ZBIN, MAPOUT, 1, 0., & +!/T 1, NX, IX3, 1, NY, IY3, 'Zb', 'm') +! +!/DEBUGSTP WRITE(740,*) 'Printing ZBIN 5' +!/DEBUGSTP DO IX=1,NX +!/DEBUGSTP WRITE(740,*) 'IX/ZBIN=', IX, ZBIN(IX,1) +!/DEBUGSTP END DO + TRNX = 0. + TRNY = 0. +! +!Li Shelter MAPSTA etc LLG definitions for SMC by logical RGLGRD ! +!AR This is only .FALSE. for SMC .. + IF( RGLGRD ) THEN + ISEA = 0 + DO IY=1, NY + DO IX=1, NX + IF ( TMPSTA(IY,IX) .EQ. NSTAT ) THEN + MAPSTA(IY,IX) = 0 + MAPST2(IY,IX) = 1 + TMPSTA(IY,IX) = 3 + ELSE + MAPSTA(IY,IX) = TMPSTA(IY,IX) + MAPST2(IY,IX) = 0 + END IF + IF ( MAPSTA(IY,IX) .NE. 0 ) THEN + ISEA = ISEA + 1 + MAPFS (IY,IX) = ISEA + ZB(ISEA) = ZBIN(IX,IY) +!/T MAPOUT(IX,IY) = 1 + MAPSF(ISEA,1) = IX + MAPSF(ISEA,2) = IY + IF ( FLAGLL ) THEN + Y = YGRD(IY,IX) + CLATS(ISEA) = COS(Y*DERA) + CLATIS(ISEA) = 1. / CLATS(ISEA) + CTHG0S(ISEA) = - TAN(DERA*Y) / RADIUS + ELSE + CLATS(ISEA) = 1. + CLATIS(ISEA) = 1. + CTHG0S(ISEA) = 0. + END IF + END IF + +!/ ------------------------------------------------------------------- / + +! notes: Oct 22 2012: I moved the following "if-then" statement from +! inside the "IF ( MAPSTA(IY,IX) .NE. 0 )" statement to outside that +! statement. This is needed since later on, ATRNX is computed from +! TRNX(ix-1) , TRNX(ix) etc. which causes boundary effects if the +! MAPSTA=0 values are set to TRNX=0 + + IF ( TRFLAG .NE. 0 ) THEN + TRNX(IY,IX) = 1. - OBSX(IX,IY) + TRNY(IY,IX) = 1. - OBSY(IX,IY) + END IF + + END DO + END DO +!/DEBUGSTP DO ISEA=1,NSEA +!/DEBUGSTP WRITE(740,*) 'ISEA,ZB=', ISEA, ZB(ISEA) +!/DEBUGSTP END DO +!/DEBUGSTP FLUSH(740) + ENDIF +!!Li End of RGLGRD IF block +! +!/SMC !Li Pass refined level cell and face counts to NLv*(NRLv) +!/SMC NLvCel(0)=0 +!/SMC NLvUFc(0)=0 +!/SMC NLvVFc(0)=0 +!/SMC DO IP = 1, NRLv +!/SMC NLvCel(IP)=NLvCelsk(IP) + NLvCel(IP-1) +!/SMC NLvUFc(IP)=NLvUFcsk(IP) + NLvUFc(IP-1) +!/SMC NLvVFc(IP)=NLvVFcsk(IP) + NLvVFc(IP-1) +!/SMC ENDDO +!/SMC WRITE (NDSO,4022) NLvCel +!/SMC WRITE (NDSO,4023) NLvUFc +!/SMC WRITE (NDSO,4024) NLvVFc +!/SMC +!/SMC !Li Redefine MAPSF MAPFS MAPSTA MAPST2 CLATS and ZB for SMC Grid, +!/SMC !Li using SMC grid cell array and assuming NSEA=NCel. +!/SMC MAPSTA = 0 +!/SMC MAPST2 = 1 +!/SMC MAPFS = 0 +!/SMC +!/SMC !Li Pass input SMC arrays to newly declared grid arrays. +!/SMC WRITE (NDSO,4025) NCel +!/SMC JJ=NCel +!/ARC JJ=NGLO +!/SMC IJKCel(:, 1:JJ )=IJKCelin(:, 1:JJ ) +!/SMC IJKUFc(:, 1:NGUI)=IJKUFcin(:, 1:NGUI) +!/SMC IJKVFc(:, 1:NGVJ)=IJKVFcin(:, 1:NGVJ) +!/ARC !Li Append Arctic part +!/ARC IJKCel(:, NGLO+1:NCel)=IJKCelAC(:, 1:NARC) +!/ARC IJKUFc(:, NGUI+1:NUFc)=IJKUFcAC(:, 1:NAUI) +!/ARC IJKVFc(:, NGVJ+1:NVFc)=IJKVFcAC(:, 1:NAVJ) +!/SMC +!/SMC WRITE (NDSO,4026) +!/SMC WRITE (NDSO,4006) 1,(IJKCel(ix, 1), ix=1,5) +!/SMC JJ=NCel +!/SMC WRITE (NDSO,4006) JJ,(IJKCel(ix, JJ), ix=1,5) +!/SMC WRITE (NDSO,*) ' ' +!/SMC WRITE (NDSO,4027) +!/SMC WRITE (NDSO,4009) 1,(IJKUFc(ix, 1), ix=1,7) +!/SMC JJ=NUFc +!/SMC WRITE (NDSO,4009) JJ,(IJKUFc(ix, JJ), ix=1,7) +!/SMC WRITE (NDSO,*) ' ' +!/SMC WRITE (NDSO,4028) +!/SMC WRITE (NDSO,4012) 1,(IJKVFc(ix, 1), ix=1,8) +!/SMC JJ=NVFc +!/SMC WRITE (NDSO,4012) JJ,(IJKVFc(ix, JJ), ix=1,8) +!/SMC WRITE (NDSO,*) ' ' +!/SMC +!/SMC !Li Boundary -9 to 0 cells for cell x-size 2**n +!/SMC !Li Note the position indice for bounary cell are not used. +!/SMC IJKCel(1, -9:0)=0 +!/SMC !Li Use Equator Y index for boundary cells. JGLi04Apr2011 +!/SMC !Li IJKCel(2, -9:0)=0 +!/SMC IJKCel(2, -9:0)=JEQT +!/SMC IJKCel(3, 0)=1 +!/SMC IJKCel(4, 0)=1 +!/SMC !Li Use minimum 10 m depth for boundary cells. +!/SMC !Li Y-size is restricted below base-cell value. +!/SMC !Li For refined boundary cells, its y-size is replaced with +!/SMC !Li the inner cell y-size for flux gradient. +!/SMC IJKCel(5, 0)=10 +!/SMC DO ip=1,9 +!/SMC IJKCel(3,-ip)=IJKCel(3,-ip+1)*2 +!/SMC IK=MIN(ip, NRLv-1) +!/SMC IJKCel(4,-ip)=2**IK +!/SMC IJKCel(5,-ip)=10 +!/SMC ENDDO +!/SMC WRITE (NDSO,4029) +!/SMC DO ip=0, -9, -1 +!/SMC WRITE (NDSO,4030) IJKCel(:,ip) +!/SMC ENDDO +!/SMC +!/SMC WRITE (NDSO,4031) NCel +!/SMC !Li Multi-resolution SMC grid requires rounding of x, y indices +!/SMC !Li by a factor MRFct. +!/SMC MRFct = 2**(NRLv - 1) +!/SMC WRITE (NDSO,4032) MRFct +!/SMC +!/SMC !Li Cosine for SMC uses refined latitude increment. +!/SMC SYMR = SY*DERA/FLOAT( MRFct ) +!/SMC !Li Reference y point for adjusted cell j=0 in radian. JGLi16Feb2016 +!/SMC YJ0R = ( Y0 - 0.5*SY )*DERA +!/SMC +!/SMC DO ISEA=1, NCel +!/ARC !Li There is no polar cell row so it is mapped to last row. +!/ARC IF(ISEA .EQ. NCel) THEN +!/ARC IX=1 +!/ARC IY=NY +!/ARC IK=1 +!/ARC JS=1 +!/ARC ELSE +!/SMC IX=IJKCel(1,ISEA)/MRFct + 1 +!/SMC IY=IJKCel(2,ISEA)/MRFct + 1 +!/SMC IK=MAX(1, IJKCel(3,ISEA)/MRFct) +!/SMC JS=MAX(1, IJKCel(4,ISEA)/MRFct) +!/ARC ENDIF +!/ARC +!/SMC ! Check that IX, IY are in the bound of [1,NX] and [1,NY] respec. +!/SMC IF ((IX+IK-1 .GT. NX) .OR. (IX .LE. 0)) THEN +!/SMC WRITE (NDSE,1014) ISEA, IX, IX+IK-1, NX +!/SMC CALL EXTCDE(65) +!/SMC END IF +!/SMC +!/SMC IF ((IY+JS-1 .GT. NY) .OR. (IY .LE. 0)) THEN +!/SMC WRITE (NDSE,1015) ISEA, IY, IY+JS-1, NY +!/SMC CALL EXTCDE(65) +!/SMC END IF +!/SMC +!/SMC !Li Minimum DMIN depth is used as well for SMC. +!/SMC ZB(ISEA)= - MAX( DMIN, FLOAT( IJKCel(5, ISEA) ) ) +!/SMC MAPFS(IY:IY+JS-1,IX:IX+IK-1) = ISEA +!/SMC MAPSTA(IY:IY+JS-1,IX:IX+IK-1) = 1 +!/SMC MAPST2(IY:IY+JS-1,IX:IX+IK-1) = 0 +!/SMC MAPSF(ISEA,1) = IX +!/SMC MAPSF(ISEA,2) = IY +!/SMC MAPSF(ISEA,3) = IY + (IX -1)*NY +!/SMC !Li New variable CLATS to hold cosine latitude at cell centre. +!/SMC !Li Also added CLATIS and CTHG0S for version 4.08. +!/SMC ! JJ=IJKCel(2,ISEA) - JEQT +!/SMC ! Y = SYMR*( FLOAT(JJ)+0.5*FLOAT(IJKCel(4,ISEA)) ) +!/SMC !Li Use adjusted j-index to calculate cell centre y from YJ0R. +!/SMC Y = YJ0R + SYMR*( FLOAT(IJKCel(2,ISEA))+0.5*FLOAT(IJKCel(4,ISEA)) ) +!/ARC !Li Arctic polar cell does not need COS(LAT), set 1 row down. +!/ARC IF(Y .GE. HPI-0.1*SYMR) Y=HPI - SYMR*0.5*FLOAT( MRFct ) +!/ARC +!/SMC CLATS(ISEA) = COS( Y ) +!/SMC CLATIS(ISEA)= 1. / CLATS(ISEA) +!/SMC CTHG0S(ISEA)= - TAN( Y ) / RADIUS +!/SMC !!Li Subgrid obstruction is now defined directly from IJKObstr +!/SMC !!Li so old OBSX/Y are no longer used. JGLi15Oct2014 +!/SMC !!Li Transparency is minimum of all merged cells and >= 0.11 +!/SMC ! TRNMX=1.0 +!/SMC ! TRNMY=1.0 +!/SMC ! DO ip = IX, IX+IK-1 +!/SMC ! TRNMX = MIN( TRNMX, ABS(1.0-OBSX(ip,IY)) ) +!/SMC ! TRNMY = MIN( TRNMY, ABS(1.0-OBSY(ip,IY)) ) +!/SMC ! ENDDO +!/SMC !!Li Sub-grid obstruction is set zero beyond NCObst cells. +!/SMC IF(ISEA .GT. NCObst) THEN +!/SMC TRNMX=1.0 +!/SMC TRNMY=1.0 +!/SMC ELSE +!/SMC !!Li Present obstruction is isotropic and in percentage. +!/SMC TRNMX=1.0 - IJKObstr(1, ISEA)*0.01 +!/SMC TRNMY=1.0 - IJKObstr(JObs, ISEA)*0.01 +!/SMC ENDIF +!/SMC CTRNX(ISEA) = MAX(0.11, TRNMX) +!/SMC CTRNY(ISEA) = MAX(0.11, TRNMY) +!/SMC END DO +!/SMC !!Li Transparency for boundary cells are 1.0 JGLi16Jan2012 +!/SMC CTRNX(-9:0) = 1.0 +!/SMC CTRNY(-9:0) = 1.0 +!/SMC !!Li Check range of MAPSF and MAPFS +!/SMC WRITE (NDSO,4033) MINVAL( MAPSF(:,1) ), MAXVAL( MAPSF(:,1) ) +!/SMC WRITE (NDSO,4034) MINVAL( MAPSF(:,2) ), MAXVAL( MAPSF(:,2) ) +!/SMC WRITE (NDSO,4035) MINVAL( MAPSF(:,3) ), MAXVAL( MAPSF(:,3) ) +!/SMC WRITE (NDSO,4036) MINVAL( MAPFS(:,:) ), MAXVAL( MAPFS(:,:) ) +!/SMC +!/SMC !Li New variable CLATF to hold cosine latitude at cell V face. +!/SMC DO IP = 1, NVFC +!/SMC ! CLATF(IP) = COS( SYMR*FLOAT(IJKVFc(2,IP) - JEQT) ) +!/SMC !Li Use adjusted j-index to calculate cell face Y from YJ0R. +!/SMC CLATF(IP) = COS( SYMR*FLOAT(IJKVFc(2,IP)) + YJ0R ) +!/SMC ENDDO +!/SMC !Li Reset MAPSTA for boundary cells if any. +!/SMC IF(NBISMC .GT. 0) THEN +!/SMC DO IP=1, NBISMC +!/SMC ISEA = NBICelin(IP) +!/SMC IX=IJKCel(1,ISEA)/MRFct + 1 +!/SMC IY=IJKCel(2,ISEA)/MRFct + 1 +!/SMC IK=MAX(1, IJKCel(3,ISEA)/MRFct) +!/SMC JS=MAX(1, IJKCel(4,ISEA)/MRFct) +!/SMC MAPSTA(IY:IY+JS-1,IX:IX+IK-1) = 2 +!/SMC MAPST2(IY:IY+JS-1,IX:IX+IK-1) = 0 +!/SMC ENDDO +!/SMC ENDIF +!/SMC +! +!/ARC !Li Define rotation angle for Arctic cells. +!/ARC PoLonAC = 179.999 +!/ARC PoLatAC = 0.001 +!/ARC ALLOCATE( XLONAC(NARC),YLATAC(NARC),ELONAC(NARC),ELATAC(NARC) ) +!/ARC DO ISEA=NGLO+1, NCel +!/ARC !Li There is no polar cell row so it is mapped to last row. +!/ARC IF(ISEA .EQ. NCel) THEN +!/ARC IX=1 +!/ARC IY=NY +!/ARC IK=1 +!/ARC JS=1 +!/ARC ELSE +!/ARC IX=IJKCel(1,ISEA)/MRFct + 1 +!/ARC IY=IJKCel(2,ISEA)/MRFct + 1 +!/ARC IK=MAX(1, IJKCel(3,ISEA)/MRFct) +!/ARC JS=MAX(1, IJKCel(4,ISEA)/MRFct) +!/ARC ENDIF +!/ARC XLONAC(ISEA-NGLO)= X0 + REAL(IX-1+IK/2)*SX +!/ARC YLATAC(ISEA-NGLO)= Y0 + REAL(IY-1+JS/2)*SY +!/ARC ENDDO +!/ARC +!/ARC CALL W3LLTOEQ ( YLATAC, XLONAC, ELATAC, ELONAC, & +!/ARC & ANGARC, PoLatAC, PoLonAC, NARC ) +!/ARC +!/ARC WRITE (NDSO,4037) NARC +!/ARC WRITE (NDSO,4038) (ANGARC(ix), ix=1,NARC,NARC/8) +!/ARC +! +!/ARC !Li Mapping Arctic boundary cells with inner model cells +!/ARC DO IP=1, NBAC +!/ARC IX=IJKCel(1,IP+NGLO) +!/ARC IY=IJKCel(2,IP+NGLO) +!/ARC DO ISEA=1, NGLO +!/ARC IF( (IX .EQ. IJKCel(1,ISEA)) .AND. & +!/ARC & (IY .EQ. IJKCel(2,ISEA)) ) THEN +!/ARC ICLBAC(IP) = ISEA +!/ARC ENDIF +!/ARC ENDDO +!/ARC ENDDO +!/ARC WRITE (NDSO,4039) NBAC +!/ARC WRITE (NDSO,4040) (ICLBAC(ix), ix=1,NBAC,NBAC/8) +!/ARC +!/ARC !Li Redefine GCT term factor for Arctic part or the netative of +!/ARC !Li tangient of rotated latitude divided by radius. JGLi14Sep2015 +!/ARC DO ISEA=NGLO+1, NCel-1 +!/ARC CTHG0S(ISEA)= - TAN( ELATAC(ISEA-NGLO)*DERA ) / RADIUS +!/ARC ENDDO +!/ARC CTHG0S(NCel)=0.0 +!/ARC +! +!/RTD !Li Assign rotated grid angle for all sea points. JGLi01Feb2016 +!/RTD DO ISEA=1,NSEA +!/RTD IX = MAPSF(ISEA,1) +!/RTD IY = MAPSF(ISEA,2) +!/RTD AnglD(ISEA) = AnglDin(IX,IY) +!/RTD END DO +! +!/T CALL PRTBLK (NDST, NX, NY, NX, ZBIN, MAPOUT, 0, 0., & +!/T 1, NX, IX3, 1, NY, IY3, 'Sea points', 'm') +!/T DEALLOCATE ( MAPOUT ) +! + DO ISP=1, NSPEC+NTH + MAPWN(ISP) = 1 + (ISP-1)/NTH + MAPTH(ISP) = 1 + MOD(ISP-1,NTH) + END DO +! +!/O2 NMAP = 1 + (NX-1)/NCOL +!/O2 WRITE (NDSO,1100) NMAP +!/O2 DO IMAP=1, NMAP +!/O2 IX0 = 1 + (IMAP-1)*NCOL +!/O2 IXN = MIN ( NX , IMAP*NCOL ) +!/O2 DO IY=NY,1,-1 +!/O2 WRITE (NDSO,1101) (TMPSTA(IY,IX),IX=IX0,IXN) +!/O2 END DO +!/O2 WRITE (NDSO,*) ' ' +!/O2 END DO +!/O2 WRITE (NDSO,1102) + +!/O2a OPEN (NDSM,FILE=TRIM(FNMPRE)//'mask.ww3') +!/O2a DO IY=1, NY +!/O2a WRITE (NDSM,998) MIN(1,MAPSTA(IY,:)) +!/O2a END DO +!/O2a CLOSE (NDSM) +! +!/O2b IF ( TRFLAG .GT. 0 ) THEN +!/O2b NMAPB = 1 + (NX-1)/NCOL +!/O2b WRITE (NDSO,1103) 'X', NMAPB +!/O2b DO IMAPB=1, NMAPB +!/O2b IX0 = 1 + (IMAPB-1)*NCOL +!/O2b IXN = MIN ( NX , IMAPB*NCOL ) +!/O2b DO IY=NY,1,-1 +!/O2b WRITE (NDSO,1101) (NINT(10.*OBSX(IX,IY)),IX=IX0,IXN) +!/O2b END DO +!/O2b WRITE (NDSO,*) ' ' +!/O2b END DO +!/O2b WRITE (NDSO,1104) +!/O2b WRITE (NDSO,1103) 'Y', NMAPB +!/O2b DO IMAPB=1, NMAPB +!/O2b IX0 = 1 + (IMAPB-1)*NCOL +!/O2b IXN = MIN ( NX , IMAPB*NCOL ) +!/O2b DO IY=NY,1,-1 +!/O2b WRITE (NDSO,1101) (NINT(10.*OBSY(IX,IY)),IX=IX0,IXN) +!/O2b END DO +!/O2b WRITE (NDSO,*) ' ' +!/O2b END DO +!/O2b WRITE (NDSO,1104) +!/O2b END IF +! +!/O2c OPEN (NDSM,FILE=TRIM(FNMPRE)//'mapsta.ww3', RECL=2*NX*NY*50+1) +!/O2c DO IY=NY,1, -1 +!/O2c DO IX=1,NX +!/O2c DO I=1,50 +!/O2c WRITE (NDSM,1998,ADVANCE='NO') (TMPSTA(IY,IX)) +!/O2c END DO +!/O2c END DO +!/O2c END DO +!/O2c CLOSE (NDSM) +! + +!/IG1 IGPARS(1)=IGMETHOD +!/IG1 IGPARS(2)=IGADDOUTP +!/IG1 IGPARS(3)=IGSOURCE +!/IG1 IGPARS(4)=0 +!/IG1 IF (IGBCOVERWRITE) IGPARS(4)=IGPARS(4)+1 +!/IG1 IF (IGSWELLMAX) IGPARS(4)=IGPARS(4)+2 +!/IG1 IGPARS(5)=1 +!/IG1 DO IK=1,NK +!/IG1 IF (SIG(IK)*TPIINV.LT.IGMAXFREQ) IGPARS(5)=IK +!/IG1 END DO +!/IG1 IGMINDEP=MINVAL(ZB*(-1.)-2) ! -2 / +2 is there for water level changes +!/IG1 IGMAXDEP=MAXVAL(ZB*(-1.)+2) +!/IG1 IF (IGSOURCEATBP.EQ.1) IGMINDEP=1. ! should use true minimum depth ... +!/IG1 IGPARS(6)=1+NINT(LOG(MAX(IGMAXDEP,1.0)/MAX(IGMINDEP,1.0))/LOG(1.1)) +!/IG1 IGPARS(7)=MAX(IGMINDEP,1.0) +!/IG1 IGPARS(8)=IGSOURCEATBP +!/IG1 IGPARS(9)=IGKDMIN +!/IG1 IGPARS(10)=IGFIXEDDEPTH +!/IG1 IGPARS(11)=IGEMPIRICAL**2 +!/IG1 IGPARS(12)=IGSTERMS +! +!/IC2 IC2PARS(:)=0. +!/IC2 IF (IC2DISPER) IC2PARS(1)=1. +!/IC2 IC2PARS(2)=IC2TURB +!/IC2 IC2PARS(3)=IC2ROUGH +!/IC2 IC2PARS(4)=IC2REYNOLDS +!/IC2 IC2PARS(5)=IC2SMOOTH +!/IC2 IC2PARS(6)=IC2VISC +!/IC2 IC2PARS(7)=IC2TURBS +!/IC2 IC2PARS(8)=IC2DMAX +! +!/IC3 IC3PARS(:)=0. +!/IC3 IC3PARS(1)=IC3MAXTHK +!/IC3 IC3PARS(2)=IC2TURB +!/IC3 IC3PARS(3)=IC2ROUGH +!/IC3 IC3PARS(4)=IC2REYNOLDS +!/IC3 IC3PARS(5)=IC2SMOOTH +!/IC3 IC3PARS(6)=IC2VISC +!/IC3 IC3PARS(7)=IC2TURBS +!/IC3 IC3PARS(8)=IC3MAXCNC +!/IC3 IF (IC3CHENG) IC3PARS(9)=1.0 +!/IC3 IC3PARS(10)=IC3HILIM +!/IC3 IC3PARS(11)=IC3KILIM +!/IC3 IF (USECGICE) IC3PARS(12)=1.0 +!/IC3 IC3PARS(13)=IC3HICE +!/IC3 IC3PARS(14)=IC3VISC +!/IC3 IC3PARS(15)=IC3DENS +!/IC3 IC3PARS(16)=IC3ELAS +! +!/IC4 IC4PARS(1)=IC4METHOD +!/IC4 IC4_KI=IC4KI +!/IC4 IC4_FC=IC4FC +! +!/IC5 IC5PARS(:)=0. +!/IC5 IC5PARS(1)=IC5MINIG +!/IC5 IC5PARS(2)=IC5MINWT +!/IC5 IC5PARS(3)=IC5MAXKRATIO +!/IC5 IC5PARS(4)=IC5MAXKI +!/IC5 IC5PARS(5)=IC5MINHW +!/IC5 IC5PARS(6)=IC5MAXITER +!/IC5 IC5PARS(7)=IC5RKICK +!/IC5 IC5PARS(8)=IC5KFILTER +! +!/IS2 IS2PARS(1) = ISC1 +!/IS2 IS2PARS(2) = IS2BACKSCAT +!/IS2 IS2PARS(3)=0. +!/IS2 IF (IS2BREAK) IS2PARS(3)=1. +!/IS2 IS2PARS(4)=IS2C2 +!/IS2 IS2PARS(5)=IS2C3 +!/IS2 IS2PARS(6)=0. +!/IS2 IF (IS2DISP) IS2PARS(6)=1. +!/IS2 IS2PARS(7)=IS2DAMP +!/IS2 IS2PARS(8)=IS2FRAGILITY +!/IS2 IS2PARS(9)=IS2DMIN +!/IS2 IS2PARS(10)=0. +!/IS2 IF (IS2DUPDATE) IS2PARS(10)=1. +!/IS2 IS2PARS(11)=IS2CONC +!/IS2 IS2PARS(12)=ABS(IS2CREEPB) +!/IS2 IS2PARS(13)=IS2CREEPC +!/IS2 IS2PARS(14)=IS2CREEPD +!/IS2 IS2PARS(15)=IS2CREEPN +!/IS2 IS2PARS(16)=IS2BREAKE +!/IS2 IS2PARS(17)=IS2BREAKF +!/IS2 IS2PARS(18)=IS2WIM1 +!/IS2 IS2PARS(19)=IS2FLEXSTR +!/IS2 IS2PARS(20)=0. +!/IS2 IF (IS2ISOSCAT) IS2PARS(20)=1. +!/IS2 IS2PARS(21)=IS2ANDISD +!/IS2 IS2PARS(22)=IS2ANDISN +!/IS2 IS2PARS(23)=0. +!/IS2 IF (IS2ANDISB) IS2PARS(23)=1. +!/IS2 IS2PARS(24)=IS2ANDISE +! +! 9.d Estimates shoreline direction for reflection +! and shoreline treatment in general for UNST grids. +! NB: this is updated with moving water levels in W3ULEV +! AR: this is not anymore needed and will be deleted ... +! + IF (GTYPE.EQ.UNGTYPE) THEN + CALL SETUGIOBP +!/REF1 ELSE +!/REF1 CALL W3SETREF + END IF +!/REF1! +!/REF1! 9.a Reads shoreline slope (whith REF1 switch only) +!/REF1! +!/REF1 ALLOCATE ( REFD(NX,NY), REFD2(NX,NY), REFS(NX,NY) ) +!/REF1 IF (REFMAP.EQ.0) THEN +!/REF1 REFS(:,:)=1. +!/REF1 ELSE +!/REF1! +!/REF1! 9.b Info from input file +!/REF1! +!/REF1 IF (FLGNML) THEN +!/REF1 NDSTR = NML_SLOPE%IDF +!/REF1 VSC = NML_SLOPE%SF +!/REF1 IDLA = NML_SLOPE%IDLA +!/REF1 IDFT = NML_SLOPE%IDFM +!/REF1 RFORM = TRIM(NML_SLOPE%FORMAT) +!/REF1 FROM = TRIM(NML_SLOPE%FROM) +!/REF1 TNAME = TRIM(NML_SLOPE%FILENAME) +!/REF1 ELSE +!/REF1 CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/REF1 READ (NDSI,*,END=2001,ERR=2002) NDSTR, VSC, IDLA, IDFT, RFORM, & +!/REF1 FROM, TNAME +!/REF1 END IF +!/REF1! +!/REF1 IF ( ABS(VSC) .LT. 1.E-7 ) VSC = 1. +!/REF1 IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 +!/REF1 IF (IDFT.LT.1 .OR. IDFT.GT.3) IDFT = 1 +!/REF1! +!/REF1 WRITE (NDSO,1977) NDSTR, VSC, IDLA, IDFT +!/REF1 IF (IDFT.EQ.2) WRITE (NDSO,973) RFORM +!/REF1 IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSTR) WRITE (NDSO,974) TNAME +!/REF1! +!/REF1! 9;c Open file and check if necessary +!/REF1! +!/REF1 IF ( NDSTR .EQ. NDSI ) THEN +!/REF1 IF ( IDFT .EQ. 3 ) THEN +!/REF1 WRITE (NDSE,1004) NDSTR +!/REF1 CALL EXTCDE (23) +!/REF1 ELSE +!/REF1 CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/REF1 END IF +!/REF1 ELSE IF ( NDSTR .EQ. NDSG ) THEN +!/REF1 IF ( ( IDFM.EQ.3 .AND. IDFT.NE.3 ) .OR. & +!/REF1 ( IDFM.NE.3 .AND. IDFT.EQ.3 ) ) THEN +!/REF1 WRITE (NDSE,1005) IDFM, IDFT +!/REF1 CALL EXTCDE (24) +!/REF1 END IF +!/REF1 ELSE +!/REF1 IF ( IDFT .EQ. 3 ) THEN +!/REF1 IF (FROM.EQ.'NAME') THEN +!/REF1 OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/REF1 FORM='UNFORMATTED',STATUS='OLD',ERR=2000, & +!/REF1 IOSTAT=IERR) +!/REF1 ELSE +!/REF1 OPEN (NDSTR, FORM='UNFORMATTED', & +!/REF1 STATUS='OLD',ERR=2000,IOSTAT=IERR) +!/REF1 END IF +!/REF1 ELSE +!/REF1 IF (FROM.EQ.'NAME') THEN +!/REF1 OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/REF1 STATUS='OLD',ERR=2000,IOSTAT=IERR) +!/REF1 ELSE +!/REF1 OPEN (NDSTR, & +!/REF1 STATUS='OLD',ERR=2000,IOSTAT=IERR) +!/REF1 END IF !end of (FROM.EQ.'NAME') +!/REF1 END IF !end of ( IDFT .EQ. 3 ) +!/REF1 END IF !end of ( NDSTR .EQ. NDSG ) +!/REF1! +!/REF1! 9.d Read the data +!/REF1! +!/REF1! CALL INA2R ( REFD, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & +!/REF1! IDFM, RFORM, IDLA, VSC, 0.0) +!/REF1! +!/REF1 IF ( NDSTR .EQ. NDSI ) CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/REF1! +!/REF1! CALL INA2R ( REFD2, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & +!/REF1! IDFM, RFORM, IDLA, VSC, 0.0) +!/REF1 CALL INA2R ( REFS, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & +!/REF1 IDFM, RFORM, IDLA, VSC, 0.0) +!/REF1 DO ISEA=1,NSEA +!/REF1 IX = MAPSF(ISEA,1) +!/REF1 IY = MAPSF(ISEA,2) +!/REF1 REFLC(3,ISEA) = REFS(IX,IY)*REFMAP +!/REF1 END DO +! +!/REF1 NMAPB = 1 + (NX-1)/NCOL +!/REF1 WRITE (NDSO,1105) NMAPB +!/T!/REF1 WRITE(NDSO,*) 'Maximum slope for reflection:',MAXVAL(REFS*REFMAP) +! +!/REF1 DO IMAPB=1, NMAPB +!/REF1 IX0 = 1 + (IMAPB-1)*NCOL +!/REF1 IXN = MIN ( NX , IMAPB*NCOL ) +!/T!/REF1 DO IY=NY,1,-1 +!/T!/REF1 WRITE (NDSO,1101) (NINT(100.*REFS(IX,IY)*REFMAP),IX=IX0,IXN) +!/T!/REF1 END DO +!/REF1 WRITE (NDSO,*) ' ' +!/REF1 END DO +!/REF1 WRITE (NDSO,1106) +!/REF1! +!/REF1 WRITE (NDSO,*) +!/REF1! +!/REF1 END IF !end of (REFMAP.EQ.0) +! + DEALLOCATE ( ZBIN, TMPSTA, TMPMAP ) +!/RTD DEALLOCATE ( AnglDin ) +! +! 9.e Reads bottom information from file +! +!/BT4 ALLOCATE ( SED_D50FILE(NX,NY)) +!/BT4 IF ( SEDMAPD50 ) THEN +!/BT4 +!/BT4! +!/BT4! 9.e.1 Info from input file +!/BT4! +!/BT4 IF (FLGNML) THEN +!/BT4 NDSTR = NML_SED%IDF +!/BT4 VSC = NML_SED%SF +!/BT4 IDLA = NML_SED%IDLA +!/BT4 IDFT = NML_SED%IDFM +!/BT4 RFORM = TRIM(NML_SED%FORMAT) +!/BT4 FROM = TRIM(NML_SED%FROM) +!/BT4 TNAME = TRIM(NML_SED%FILENAME) +!/BT4 ELSE +!/BT4 CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/BT4 READ (NDSI,*,END=2001,ERR=2002) NDSTR, VSC, IDLA, IDFT, RFORM, & +!/BT4 FROM, TNAME +!/BT4 END IF +!/BT4! +!/BT4 IF ( ABS(VSC) .LT. 1.E-7 ) THEN +!/BT4 VSC = 1. +!/BT4 ELSE +!/BT4! WARNING TO BE ADDED ... +!/BT4 END IF +!/BT4 IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 +!/BT4 IF (IDFT.LT.1 .OR. IDFT.GT.3) IDFT = 1 +!/BT4! +!/BT4 WRITE (NDSO,1978) NDSTR, VSC, IDLA, IDFT +!/BT4 IF (IDFT.EQ.2) WRITE (NDSO,973) RFORM +!/BT4 IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSTR) WRITE (NDSO,974) TNAME +!/BT4! +!/BT4! 9.e.2 Open file and check if necessary +!/BT4! +!/BT4 IF ( NDSTR .EQ. NDSI ) THEN +!/BT4 IF ( IDFT .EQ. 3 ) THEN +!/BT4 WRITE (NDSE,1004) NDSTR +!/BT4 CALL EXTCDE (23) +!/BT4 ELSE +!/BT4 CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/BT4 END IF +!/BT4 ELSE IF ( NDSTR .EQ. NDSG ) THEN +!/BT4 IF ( ( IDFM.EQ.3 .AND. IDFT.NE.3 ) .OR. & +!/BT4 ( IDFM.NE.3 .AND. IDFT.EQ.3 ) ) THEN +!/BT4 WRITE (NDSE,1005) IDFM, IDFT +!/BT4 CALL EXTCDE (24) +!/BT4 END IF +!/BT4 ELSE +!/BT4 IF ( IDFT .EQ. 3 ) THEN +!/BT4 IF (FROM.EQ.'NAME') THEN +!/BT4 OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/BT4 FORM='UNFORMATTED',STATUS='OLD',ERR=2000, & +!/BT4 IOSTAT=IERR) +!/BT4 ELSE +!/BT4 OPEN (NDSTR, FORM='UNFORMATTED', & +!/BT4 STATUS='OLD',ERR=2000,IOSTAT=IERR) +!/BT4 END IF +!/BT4 ELSE +!/BT4 IF (FROM.EQ.'NAME') THEN +!/BT4 OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & +!/BT4 STATUS='OLD',ERR=2000,IOSTAT=IERR) +!/BT4 ELSE +!/BT4 OPEN (NDSTR, & +!/BT4 STATUS='OLD',ERR=2000,IOSTAT=IERR) +!/BT4 END IF +!/BT4 END IF +!/BT4 END IF +!/BT4! +!/BT4! 9.e.3 Read the data +!/BT4! +!/BT4 CALL INA2R ( SED_D50FILE, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & +!/BT4 IDFM, RFORM, IDLA, VSC, VOF) +!/BT4! +!/BT4 IF ( NDSTR .EQ. NDSI ) CALL NEXTLN ( COMSTR , NDSI , NDSE ) +!/BT4! +!/BT4 WRITE (NDSO,*) 'Min and Max values of grain sizes:',MINVAL(SED_D50FILE), MAXVAL(SED_D50FILE) +!/BT4 WRITE (NDSO,*) +!/BT4! +!/BT4 ELSE +!/BT4 SED_D50FILE(:,:)=SED_D50_UNIFORM +!/BT4 END IF +!/BT4! +!/BT4 DO IY=1, NY +!/BT4 DO IX=1, NX +!/BT4 ISEA = MAPFS (IY,IX) +!/BT4 SED_D50(ISEA) = SED_D50FILE(IX,IY) +!/BT4 SED_D50(ISEA) = MAX(SED_D50(ISEA),1E-5) +!/BT4 ! Critical Shields number, Soulsby, R.L. and R J S W Whitehouse +!/BT4 ! Threshold of sed. motion in coastal environments, Proc. Pacific Coasts and +!/BT4 ! ports, 1997 conference, Christchurch, p149-154, University of Cantebury, NZ +!/BT4 SED_DSTAR=(GRAV*(SED_SG-1)/nu_water**2)**(0.333333)*SED_D50(ISEA) +!/BT4 SED_PSIC(ISEA)=0.3/(1+1.2*SED_DSTAR)+0.55*(1-exp(-0.02*SED_DSTAR)) + + +!/BT4 END DO +!/BT4 END DO +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! 10. Prepare output boundary points. +! ILOOP = 1 to count NFBPO and NBO +! ILOOP = 2 to fill data arrays +! + WRITE (NDSO,990) + IF ( .NOT. FLGNML ) & + OPEN (NDSS,FILE=TRIM(FNMPRE)//'ww3_grid.scratch',FORM='FORMATTED') +! + DO ILOOP = 1, 2 +! + IF ( ILOOP.EQ.2 ) CALL W3DMO5 ( 1, NDST, NDSE, 2 ) +! + I = 1 + NBOTOT = 0 + NFBPO = 0 + NBO(0) = 0 + NBO2(0)= 0 + FIRST = .TRUE. + IF ( .NOT. FLGNML ) THEN + REWIND (NDSS) + IF ( ILOOP .EQ. 1 ) THEN + NDSI2 = NDSI + ELSE + NDSI2 = NDSS + END IF + END IF +! + DO + IF (FLGNML) THEN + ! outbound lines + IF (NML_OUTBND_COUNT%N_LINE.GT.0 .AND. I.LE.NML_OUTBND_COUNT%N_LINE) THEN + XO0 = NML_OUTBND_LINE(I)%X0 + YO0 = NML_OUTBND_LINE(I)%Y0 + DXO = NML_OUTBND_LINE(I)%DX + DYO = NML_OUTBND_LINE(I)%DY + NPO = NML_OUTBND_LINE(I)%NP + I=I+1 + ELSE + NPO=0 + END IF + ELSE + CALL NEXTLN ( COMSTR , NDSI2 , NDSE ) + READ (NDSI2,*,END=2001,ERR=2002) XO0, YO0, DXO, DYO, NPO + END IF +! + IF ( .NOT. FLGNML .AND. ILOOP .EQ. 1 ) THEN + BACKSPACE (NDSI) + READ (NDSI,'(A)') LINE + WRITE (NDSS,'(A)') LINE + END IF +! +! ... Check if new file to be used +! + FIRST = FIRST .OR. NPO.LE.0 + NPO = ABS(NPO) +! +! ... Preparations for new output file including end check +! and output for last output file +! + IF ( FIRST ) THEN +! + FIRST = .FALSE. +! +!/RTD IF ( NPO.NE.0 ) THEN +!/RTD ! Destination pole lat, lon from namelist +!/RTD bPolat = BPLAT(NFBPO+1) +!/RTD bPolon = BPLON(NFBPO+1) +!/RTD END IF +!/RTD ! + IF ( NFBPO.GE.1 .AND. ILOOP.EQ.2 ) THEN + WRITE (NDSO,991) NFBPO, NBO(NFBPO) - NBO(NFBPO-1), & + NBO2(NFBPO) - NBO2(NFBPO-1) +!/RTD ! Print dest. Pole lat/lon if either the dest or present grid is rotated +!/RTD IF ( BPLAT(NFBPO) < 90. .OR. Polat < 90. ) & +!/RTD WRITE (NDSO,1991) BPLAT(NFBPO), BPLON(NFBPO) +!/RTD ! +!/O1 IF ( NBO(NFBPO) - NBO(NFBPO-1) .EQ. 1 ) THEN +!/O1 IF ( FLAGLL ) THEN +!/O1 WRITE (NDSO,992) +!/O1 ELSE +!/O1 WRITE (NDSO,2992) +!/O1 END IF +!/O1 ELSE +!/O1 IF ( FLAGLL ) THEN +!/O1 WRITE (NDSO,1992) +!/O1 ELSE +!/O1 WRITE (NDSO,3992) +!/O1 END IF +!/O1 END IF +!/O1 IP0 = NBO(NFBPO-1)+1 +!/O1 IPN = NBO(NFBPO) +!/O1 IPH = IP0 + (IPN-IP0-1)/2 +!/O1 IPI = IPH -IP0 + 1 + MOD(IPN-IP0+1,2) +!/O1 DO IP=IP0, IPH +!/O1 IF ( FLAGLL ) THEN +!/O1 WRITE (NDSO,1993) IP-NBO(NFBPO-1), & +!/O1 FACTOR*XBPO(IP), & +!/O1 FACTOR*YBPO(IP), & +!/O1 IP+IPI-NBO(NFBPO-1), & +!/O1 FACTOR*XBPO(IP+IPI), & +!/O1 FACTOR*YBPO(IP+IPI) +!/O1 ELSE +!/O1 WRITE (NDSO,3993) IP-NBO(NFBPO-1), & +!/O1 FACTOR*XBPO(IP), & +!/O1 FACTOR*YBPO(IP), & +!/O1 IP+IPI-NBO(NFBPO-1), & +!/O1 FACTOR*XBPO(IP+IPI), & +!/O1 FACTOR*YBPO(IP+IPI) +!/O1 END IF +!/O1 END DO +!/O1 IF ( MOD(IPN-IP0+1,2) .EQ. 1 ) THEN +!/O1 IF ( FLAGLL ) THEN +!/O1 WRITE (NDSO, 993) IPH+1-NBO(NFBPO-1), & +!/O1 FACTOR*XBPO(IPH+1), & +!/O1 FACTOR*YBPO(IPH+1) +!/O1 ELSE +!/O1 WRITE (NDSO,2993) IPH+1-NBO(NFBPO-1), & +!/O1 FACTOR*XBPO(IPH+1), & +!/O1 FACTOR*YBPO(IPH+1) +!/O1 END IF +!/O1 END IF +!/O1 WRITE (NDSO,*) + END IF +! + IF ( NPO .EQ. 0 ) EXIT +! + NFBPO = NFBPO + 1 + IF ( NFBPO .GT. 9 ) THEN + WRITE (NDSE,1006) + CALL EXTCDE ( 50 ) + END IF + NBO2(NFBPO) = NBO2(NFBPO-1) + NBO(NFBPO) = NBOTOT +! + END IF +! +! ... Loop over line segment - - - - - - - - - - - - - - - - - - - - - +! +!/RTD ! If either base or destination grid is rotated lat-lon +!/RTD IF ( allocated(BDYLON) .eqv. .TRUE. ) THEN +!/RTD deallocate( BDYLON, BDYLAT ) +!/RTD IF ( bPolat < 90. .OR. Polat < 90. ) & +!/RTD deallocate( ELatbdy, ELonbdy, Anglbdy ) +!/RTD END IF +!/RTD allocate( BDYLON(NPO), BDYLAT(NPO)) +!/RTD IF ( bPolat < 90. .OR. Polat < 90. ) & +!/RTD allocate( ELatbdy(NPO), ELonbdy(NPO), Anglbdy(NPO) ) +!/RTD ! +!/T WRITE (NDST,9090) +! + DO IP=1, NPO +! + XO = XO0 + REAL(IP-1)*DXO + YO = YO0 + REAL(IP-1)*DYO +!/RTD ! +!/RTD ! Boundary points are specified in coordinates of the destination grid +!/RTD ! +!/RTD ! Collect the line segment points into arrays +!/RTD BDYLON(IP) = XO +!/RTD BDYLAT(IP) = YO +!/RTD ! Close the loop before calculating rotated lat-lon coordinates. +!/RTD END DO +!/RTD +!/RTD ! Create one or two sets of the segment points: +!/RTD ! 1. (BDYLAT, BDYLON) in standard lat-lon coordinates, +!/RTD ! 2. Also (ELatbdy, ELonbdy) in case the base grid is rotated +!/RTD +!/RTD IF ( bPolat < 90. ) THEN +!/RTD ! The destination grid is rotated (std->rot or rot->rot) +!/RTD ! Change BDYLAT, BDYLON to their standard lat-lon positions +!/RTD ! Let ELatbdy,ELonbdy contain the rotated lat-lon coordinates +!/RTD ELatbdy(:) = BDYLAT(:) +!/RTD ELonbdy(:) = BDYLON(:) +!/RTD CALL W3EQTOLL ( ELatbdy, ELonbdy, BDYLAT, BDYLON, & +!/RTD & Anglbdy, bPolat, bPolon, NPO ) +!/RTD ! Let the standard longitudes BDYLON be within the range [-180.,180.[ +!/RTD ! or [0., 360.[ depending on the grid pole +!/RTD IF ( Polon < -90. .OR. Polon > 90. ) THEN +!/RTD BDYLON(:) = MOD( BDYLON(:) + 180., 360. ) - 180. +!/RTD ELSE +!/RTD BDYLON(:) = MOD( BDYLON(:) + 360., 360. ) +!/RTD END IF +!/RTD END IF ! bPolat < 90. +!/RTD ! From now, BDYLAT, BDYLON are defined in standard lat-lon coordinates +!/RTD ! +!/RTD IF ( Polat < 90. ) THEN +!/RTD ! The base grid is rotated (rot->std or rot->rot) +!/RTD ! Find lat-lon in coordinates of the rotated base grid +!/RTD CALL W3LLTOEQ ( BDYLAT, BDYLON, ELatbdy, ELonbdy, & +!/RTD & Anglbdy, Polat, Polon, NPO ) +!/RTD END IF +!/RTD ! +!/RTD ! Take up again the loop over the line segment points +!/RTD DO IP=1, NPO +!/RTD IF ( Polat < 90. ) THEN +!/RTD ! The base grid is rotated (rot->std, rot->rot) +!/RTD ! (The std. lat-lon values BDYLAT, BDYLON go to YBPO, XBPO) +!/RTD XO = ELonbdy(IP) +!/RTD YO = ELatbdy(IP) +!/RTD ELSE +!/RTD ! The base grid is standard geographic (std->rot or std->std) +!/RTD XO = BDYLON(IP) +!/RTD YO = BDYLAT(IP) +!/RTD END IF +! +! ... Compute bilinear remapping weights +! + INGRID = W3GRMP( GSU, XO, YO, IXR, IYR, RD ) +! +! Change cell-corners from counter-clockwise to column-major order + IX = IXR(3); IY = IYR(3); X = RD(3); + IXR(3) = IXR(4); IYR(3) = IYR(4); RD(3) = RD(4); + IXR(4) = IX ; IYR(4) = IY ; RD(4) = X ; +! +!/T WRITE (NDST,9091) FACTOR*XO, FACTOR*YO, & +!/T (IXR(J), IYR(J), RD(J), J=1,4) +! +! ... Check if point in grid +! + IF ( INGRID ) THEN +! +! ... Check if point not on land +! + IF ( ( MAPSTA(IYR(1),IXR(1)).GT.0 .AND. & + RD(1).GT.0.05 ) .OR. & + ( MAPSTA(IYR(2),IXR(2)).GT.0 .AND. & + RD(2).GT.0.05 ) .OR. & + ( MAPSTA(IYR(3),IXR(3)).GT.0 .AND. & + RD(3).GT.0.05 ) .OR. & + ( MAPSTA(IYR(4),IXR(4)).GT.0 .AND. & + RD(4).GT.0.05 ) ) THEN +! +! ... Check storage and store coordinates +! + NBOTOT = NBOTOT + 1 + IF ( ILOOP .EQ. 1 ) CYCLE +! +!/RTD ! BDYLAT, BDYLON contain Y0, X0, which are remapped to standard lat/lon. +!/RTD ! BDYLAT, BDYLON are stored in the mod_def file. +!/RTD IF ( Polat < 90. ) THEN +!/RTD XO = BDYLON(IP) +!/RTD YO = BDYLAT(IP) +!/RTD END IF + XBPO(NBOTOT) = XO + YBPO(NBOTOT) = YO +! +! ... Interpolation factors +! + RDTOT = 0. + DO J=1, 4 + IF ( MAPSTA(IYR(J),IXR(J)).GT.0 .AND. & + RD(J).GT.0.05 ) THEN + RDBPO(NBOTOT,J) = RD(J) + ELSE + RDBPO(NBOTOT,J) = 0. + END IF + RDTOT = RDTOT + RDBPO(NBOTOT,J) + END DO +! + DO J=1, 4 + RDBPO(NBOTOT,J) = RDBPO(NBOTOT,J) / RDTOT + END DO +! +!/T WRITE (NDST,9092) RDTOT, (RDBPO(NBOTOT,J),J=1,4) +! +! ... Determine sea and interpolation point counters +! + DO J=1, 4 + ISEAI(J) = MAPFS(IYR(J),IXR(J)) + END DO +! + DO J=1, 4 + IF ( ISEAI(J).EQ.0 .OR. RDBPO(NBOTOT,J).EQ. 0. ) THEN + IPBPO(NBOTOT,J) = 0 + ELSE + FLNEW = .TRUE. + DO IST=NBO2(NFBPO-1)+1, NBO2(NFBPO) + IF ( ISEAI(J) .EQ. ISBPO(IST) ) THEN + FLNEW = .FALSE. + IPBPO(NBOTOT,J) = IST - NBO2(NFBPO-1) + END IF + END DO + IF ( FLNEW ) THEN + NBO2(NFBPO) = NBO2(NFBPO) + 1 + IPBPO(NBOTOT,J) = NBO2(NFBPO) - NBO2(NFBPO-1) + ISBPO(NBO2(NFBPO)) = ISEAI(J) + END IF + END IF + END DO +! +!/T WRITE (NDST,9093) ISEAI, (IPBPO(NBOTOT,J),J=1,4) +! +! ... Error output +! + ELSE + IF ( FLAGLL ) THEN + WRITE (NDSE,2995) FACTOR*XO, FACTOR*YO + ELSE + WRITE (NDSE,995) FACTOR*XO, FACTOR*YO + END IF + END IF + ELSE + IF ( FLAGLL ) THEN + WRITE (NDSE,2994) FACTOR*XO, FACTOR*YO + ELSE + WRITE (NDSE,994) FACTOR*XO, FACTOR*YO + END IF + END IF +! + END DO +! + NBO(NFBPO) = NBOTOT +! +! ... Branch back to read. +! + END DO +! +! ... End of ILOOP loop +! + END DO +! + IF ( .NOT. FLGNML ) CLOSE ( NDSS, STATUS='DELETE' ) +! + FLBPO = NBOTOT .GT. 0 + IF ( .NOT. FLBPO ) THEN + WRITE (NDSO,996) + ELSE + WRITE (NDSO,997) NBOTOT, NBO2(NFBPO) + END IF +! +!/T0 WRITE (NDST,9095) +!/T0 DO IFILE=1, NFBPO +!/T0 DO IP=NBO2(IFILE-1)+1, NBO2(IFILE) +!/T0 WRITE (NDST,9096) IFILE, IP-NBO2(IFILE-1), ISBPO(IP) +!/T0 END DO +!/T0 END DO +! +!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +!10. Write model definition file. +! + WRITE (NDSO,999) + CALL W3IOGR ( 'WRITE', NDSM ) +! + CLOSE (NDSM) +! + GOTO 2222 +! +! Escape locations read errors : +! + 2000 CONTINUE + WRITE (NDSE,1000) IERR + CALL EXTCDE ( 60 ) +! + 2001 CONTINUE + WRITE (NDSE,1001) + CALL EXTCDE ( 61 ) +! + 2002 CONTINUE + WRITE (NDSE,1002) IERR + CALL EXTCDE ( 62 ) +! + 2003 CONTINUE + WRITE (NDSE,1003) + CALL EXTCDE ( 64 ) +! + 2222 CONTINUE + IF ( GTYPE .NE. UNGTYPE) THEN + IF ( NX*NY .NE. NSEA ) THEN + WRITE (NDSO,9997) NX, NY, NX*NY, NSEA, & + 100.*REAL(NSEA)/REAL(NX*NY), NBI, NLAND, NBT + ELSE + WRITE (NDSO,9998) NX, NY, NX*NY, NSEA, NBI, NLAND, NBT + END IF + ELSE IF ( GTYPE .EQ. UNGTYPE ) THEN + IF ( NX*NY .NE. NSEA ) THEN + WRITE (NDSO,9997) 0, 0, NX*NY, NSEA, & + 100.*REAL(NSEA)/REAL(NX*NY), NBI, NLAND, NBT + ELSE + WRITE (NDSO,9998) 0, 0, NX*NY, NSEA, NBI, NLAND, NBT + END IF + ENDIF ! GTYPE .EQ. UNGTYPE + + WRITE (NDSO,9999) + +!/SCRIP GRID1_UNITS='degrees' ! the other option is radians...we don't use this +!/SCRIP GRID1_NAME='src' ! this is not used, except for netcdf output +!/SCRIP CALL GET_SCRIP_INFO(1, & +!/SCRIP & GRID1_CENTER_LON, GRID1_CENTER_LAT, & +!/SCRIP & GRID1_CORNER_LON, GRID1_CORNER_LAT, GRID1_MASK, & +!/SCRIP & GRID1_DIMS, GRID1_SIZE, GRID1_CORNERS, GRID1_RANK) +!/SCRIP +!/SCRIP + +!/SCRIP IF (GTYPE .EQ. UNGTYPE) THEN +!/SCRIP GRID1_RANK=1 +!/SCRIP DEALLOCATE(GRID1_DIMS) +!/SCRIP ALLOCATE(GRID1_DIMS(GRID1_RANK)) +!/SCRIP GRID1_DIMS(1) = GRID1_SIZE +!/SCRIP ENDIF + +!/SCRIP DO I = 1,GRID1_SIZE +!/SCRIP IF (GRID1_CENTER_LON(I) < 0.0) THEN +!/SCRIP GRID1_CENTER_LON(I) = GRID1_CENTER_LON(I)+360.0 +!/SCRIP ENDIF +!/SCRIP DO J = 1,GRID1_CORNERS +!/SCRIP IF (GRID1_CORNER_LON(J,I) < 0.0) THEN +!/SCRIP GRID1_CORNER_LON(J,I) = GRID1_CORNER_LON(J,I)+360.0 +!/SCRIP ENDIF +!/SCRIP ENDDO +!/SCRIP ENDDO + +!/SCRIPNC IERR = NF90_CREATE(TRIM('scrip.nc'), NF90_NETCDF4, NCID) +!/SCRIPNC IERR = NF90_DEF_DIM(NCID, 'grid_size', GRID1_SIZE, grid_size_dimid) +!/SCRIPNC IERR = NF90_DEF_DIM(NCID, 'grid_corners', GRID1_CORNERS, grid_corners_dimid) +!/SCRIPNC IERR = NF90_DEF_DIM(NCID, 'grid_rank', GRID1_RANK, grid_rank_dimid) + +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_center_lat', NF90_DOUBLE, & +!/SCRIPNC (/grid_size_dimid/),grid_center_lat_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_center_lon', NF90_DOUBLE, & +!/SCRIPNC (/grid_size_dimid/),grid_center_lon_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_corner_lat', NF90_DOUBLE, & +!/SCRIPNC (/grid_corners_dimid,grid_size_dimid/), & +!/SCRIPNC grid_corner_lat_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_corner_lon', NF90_DOUBLE, & +!/SCRIPNC (/grid_corners_dimid,grid_size_dimid/), & +!/SCRIPNC grid_corner_lon_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_imask', NF90_INT, & +!/SCRIPNC (/grid_size_dimid/),grid_imask_varid) +!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_dims', NF90_INT, & +!/SCRIPNC (/grid_rank_dimid/),grid_dims_varid) +!/SCRIPNC IERR = NF90_ENDDEF(NCID) + +!/SCRIP ALLOCATE(GRID1_IMASK(GRID1_DIMS(1))) +!/SCRIP GRID1_IMASK = 0 +!/SCRIP DO I = 1,GRID1_DIMS(1) +!/SCRIP IF (GRID1_MASK(I)) THEN +!/SCRIP GRID1_IMASK(I) = 1 +!/SCRIP ENDIF +!/SCRIP ENDDO + +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_center_lat_varid,'units',GRID1_UNITS) +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_center_lon_varid,'units',GRID1_UNITS) +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_corner_lat_varid,'units',GRID1_UNITS) +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_corner_lon_varid,'units',GRID1_UNITS) +!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_imask_varid,'units','unitless') + +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_center_lat_varid,GRID1_CENTER_LAT) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_center_lon_varid,GRID1_CENTER_LON) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_corner_lat_varid,GRID1_CORNER_LAT) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_corner_lon_varid,GRID1_CORNER_LON) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_imask_varid,GRID1_IMASK) +!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_dims_varid,GRID1_DIMS) +!/SCRIPNC IERR = NF90_CLOSE(NCID) + + +! +! Formats +! + 900 FORMAT (/15X,' *** WAVEWATCH III Grid preprocessor *** '/ & + 15X,'==============================================='/) + 901 FORMAT ( ' Comment character is ''',A,''''/) + 902 FORMAT ( ' Grid name : ',A/) + 903 FORMAT (/' Spectral discretization : '/ & + ' --------------------------------------------------'/ & + ' Number of directions :',I4/ & + ' Directional increment (deg.):',F6.1) + 904 FORMAT ( ' First direction (deg.):',F6.1) + 905 FORMAT ( ' Number of frequencies :',I4/ & + ' Frequency range (Hz) :',F9.4,'-',F6.4/ & + ' Increment factor :',F8.3/) +! + 910 FORMAT (/' Model definition :'/ & + ' --------------------------------------------------') + 911 FORMAT ( ' Dry run (no calculations) : ',A/ & + ' Propagation in X-direction : ',A/ & + ' Propagation in Y-direction : ',A/ & + ' Refraction : ',A/ & + ' Current-induced k-shift : ',A/ & + ' Source term calc. and int. : ',A/) + 912 FORMAT (/' Time steps : '/ & + ' --------------------------------------------------'/ & + ' Maximum global time step (s) :',F8.2/ & + ' Maximum CFL time step X-Y (s) :',F8.2/ & + ' Maximum CFL time step k-theta (s) :',F8.2/ & + ' Minimum source term time step (s) :',F8.2/) + 913 FORMAT (/ ' WARNING, TIME STEP LESS THAN 1 s, NITER:',I8 /) + 915 FORMAT ( ' Preprocessing namelists ...') + 916 FORMAT ( ' Preprocessing namelists finished.'/) + 917 FORMAT (/' Equivalent namelists ...'/) + 918 FORMAT (/' Equivalent namelists finished.'/) +! +!/FLX1 810 FORMAT (/' Stresses (Wu 1980)'/ & +!/FLX1 ' --------------------------------------------------'/) +!/FLX2 810 FORMAT (/' Stresses (T&C 96)'/ & +!/FLX2 ' --------------------------------------------------'/) +!/FLX3 810 FORMAT (/' Stresses (T&C 96 capped) ',A/ & +!/FLX3 ' --------------------------------------------------') +!/FLX4 810 FORMAT (/' Stresses (Hwang 2011) ',A/ & +!/FLX4 ' --------------------------------------------------') +!/FLX4 811 FORMAT ( ' drag coefficient scaling :',F8.2 /) +!/FLX4 2810 FORMAT ( ' &FLX4 CDFAC =',F6.3,' /') +!/FLX3 811 FORMAT ( ' Max Cd * 10^3 :',F8.2/ & +!/FLX3 ' Cap type : ',A/) +!/FLX3 2810 FORMAT ( ' &FLX3 CDMAX =',F6.2,'E-3 , CTYPE = ',I1,' /') +! +!/LN0 820 FORMAT (/' Linear input not defined.'/) +!/SEED 820 FORMAT (/' Seeding as proxi for linear input.'/) +! +!/LN1 820 FORMAT (/' Linear input (C&M-R 82) ',A/ & +!/LN1 ' --------------------------------------------------') +!/LN1 821 FORMAT ( ' CLIN :',f8.2/ & +!/LN1 ' Factor for fPM in filter :',F8.2/ & +!/LN1 ' Factor for fh in filter :',F8.2/) +!/LN1 2820 FORMAT ( ' &SLN1 CLIN =',F6.1,', RFPM =',F6.2, & +!/LN1 ', RFHF =',F6.2,' /') +! +!/LNX 820 FORMAT (/' Experimental linear input.'/) +! +!/ST0 920 FORMAT (/' Wind input not defined.'/) +! +!/ST1 920 FORMAT (/' Wind input (WAM-3) ',A/ & +!/ST1 ' --------------------------------------------------') +!/ST1 921 FORMAT ( ' Cinp :',E10.3/) +!/ST1 2920 FORMAT ( ' &SIN1 CINP =',F7.3,' /') +! +!/ST2 920 FORMAT (/' Wind input (T&C 1996) ',A/ & +!/ST2 ' --------------------------------------------------') +!/ST2 921 FORMAT ( ' Height of input wind (m) :',F8.2/ & +!/ST2 ' Factor negative swell :',F9.3/) +!/STAB2 1921 FORMAT ( ' Effective wind mean factor :',F8.2/ & +!/STAB2 ' Stability par. offset :',F9.3/ & +!/STAB2 ' Stab. correction :',F9.3,F8.3/& +!/STAB2 ' Stab. correction stab. fac. :',F7.1,F9.1/) +!/ST2 2920 FORMAT ( ' &SIN2 ZWND =',F5.1,', SWELLF =',F6.3,' /') +!/STAB2 2921 FORMAT ( ' &SIN2 ZWND =',F5.1,', SWELLF =',F6.3,', STABSH =', & +!/STAB2 F6.3,', STABOF = ',E10.3,','/ & +!/STAB2 ' CNEG =',F7.3,', CPOS =',F7.3,', FNEG =',F7.1,' /') +! +!/ST3 920 FORMAT (/' Wind input (WAM 4+) ',A/ & +!/ST3 ' --------------------------------------------------') +!/ST3 921 FORMAT ( ' minimum Charnock coeff. :',F10.4/ & +!/ST3 ' betamax :',F9.3/ & +!/ST3 ' power of cos. in wind input :',F9.3/ & +!/ST3 ' z0max :',F9.3/ & +!/ST3 ' zalp :',F9.3/ & +!/ST3 ' Height of input wind (m) :',F8.2/ & +!/ST3 ' swell attenuation factor :',F9.3/ ) +!/ST3 2920 FORMAT ( ' &SIN3 ZWND =',F5.1,', ALPHA0 =',F8.5,', Z0MAX =',F8.5,', BETAMAX =', & +!/ST3 F8.5,','/ & +!/ST3 ' SINTHP =',F8.5,', ZALP =',F8.5,','/ & +!/ST3 ' SWELLF =',F8.5,'R /'/) +! +!/ST4 920 FORMAT (/' Wind input (WAM 4+) ',A/ & +!/ST4 ' --------------------------------------------------') +!/ST4 921 FORMAT ( ' minimum Charnock coeff. :',F10.4/ & +!/ST4 ' betamax :',F9.3/ & +!/ST4 ' power of cos. in wind input :',F9.3/ & +!/ST4 ' z0max :',F9.3/ & +!/ST4 ' zalp :',F9.3/ & +!/ST4 ' Height of input wind (m) :',F8.2/ & +!/ST4 ' wind stress sheltering :',F9.3/ & +!/ST4 ' swell attenuation param. :',I5/ & +!/ST4 ' swell attenuation factor :',F9.3/ & +!/ST4 ' swell attenuation factor2 :',F9.3/ & +!/ST4 ' swell attenuation factor3 :',F9.3/ & +!/ST4 ' critical Reynolds number :',F9.1/ & +!/ST4 ' swell attenuation factor5 :',F9.3/ & +!/ST4 ' swell attenuation factor6 :',F9.3/ & +!/ST4 ' swell attenuation factor7 :',F14.3/ & +!/ST4 ' ratio of z0 for orb. & mean :',F9.3/) +!/ST4 2920 FORMAT ( ' &SIN4 ZWND =',F5.1,', ALPHA0 =',F8.5,', Z0MAX =',F8.5,', BETAMAX =', & +!/ST4 F8.5,','/ & +!/ST4 ' SINTHP =',F8.5,', ZALP =',F8.5,', TAUWSHELTER =',F8.5, & +!/ST4 ', SWELLFPAR =',I2,','/ & +!/ST4 ' SWELLF =',F8.5,', SWELLF2 =',F8.5, & +!/ST4 ', SWELLF3 =',F8.5,', SWELLF4 =',F9.1,','/ & +!/ST4 ' SWELLF5 =',F8.5,', SWELLF6 =',F8.5, & +!/ST4 ', SWELLF7 =',F12.2,', Z0RAT =',F8.5,', SINBR =',F8.5,' /') +! +!/ST6 920 FORMAT (/' Wind input (Donelan et al, 2006) ',A/ & +!/ST6 ' --------------------------------------------------') +!/ST6 921 FORMAT ( ' negative wind input active : ',A/ & +!/ST6 ' attenuation factor : ',F6.2/ & +!/ST6 ' wind speed scaling factor : ',F6.2/ & +!/ST6 ' frequency cut-off factor : ',F6.2/) +!/ST6 2920 FORMAT ( ' &SIN6 SINA0 =', F6.3, ', SINWS =', F6.2, ', SINFC =', F6.2, ' /') +! +!/STX 920 FORMAT (/' Experimental wind input.'/) +! +!/NL0 922 FORMAT (/' Nonlinear interactions not defined.'/) +! +!/NL1 922 FORMAT (/' Nonlinear interactions (DIA) ',A/ & +!/NL1 ' --------------------------------------------------') +!/NL1 923 FORMAT ( ' Lambda :',F8.2/ & +!/NL1 ' Prop. constant :',E10.3/ & +!/NL1 ' kd conversion factor :',F8.2/ & +!/NL1 ' minimum kd :',F8.2/ & +!/NL1 ' shallow water constants :',F8.2,2F6.2/) +!/NL1 2922 FORMAT ( ' &SNL1 LAMBDA =',F7.3,', NLPROP =',E10.3, & +!/NL1 ', KDCONV =',F7.3,', KDMIN =',F7.3,','/ & +!/NL1 ' SNLCS1 =',F7.3,', SNLCS2 =',F7.3, & +!/NL1 ', SNLCS3 = ',F7.3,' /') +! +!/NL2 922 FORMAT (/' Nonlinear interactions (WRT) ',A/ & +!/NL2 ' --------------------------------------------------') +!/NL2 923 FORMAT ( ' Deep/shallow options : ',A/ & +!/NL2 ' Power of h-f tail : ',F6.1) +!/NL2 1923 FORMAT ( ' Number of depths used : ',I4/ & +!/NL2 ' Depths (m) :',5F7.1) +!/NL2 2923 FORMAT ( ' ',5F7.1) +!/NL2 2922 FORMAT ( ' &SNL2 IQTYPE =',I2,', TAILNL =',F5.1,',', & +!/NL2 ' NDEPTH =',I3,' /') +!/NL2 3923 FORMAT ( ' &SNL2 DEPTHS =',F9.2,' /') +!/NL2 4923 FORMAT ( ' &ANL2 DEPTHS =',F9.2,' ,') +!/NL2 5923 FORMAT ( ' ',F9.2,' ,') +!/NL2 6923 FORMAT ( ' ',F9.2,' /') +! +!/NL3 922 FORMAT (/' Nonlinear interactions (GMD) ',A/ & +!/NL3 ' --------------------------------------------------') +!/NL3 923 FORMAT ( ' Powers in scaling functions : ',2F7.2/ & +!/NL3 ' Nondimension filter depths : ',2F7.2) +!/NL3 1923 FORMAT ( ' Number of quad. definitions : ',I4) +!/NL3 2923 FORMAT ( ' ',2F8.3,F6.1,2E12.4) +!/NL3 2922 FORMAT ( ' &SNL3 NQDEF =',I3,', MSC =',F6.2,', NSC =', & +!/NL3 F6.2,', KDFD =',F6.2,', KDFS =',F6.2,' /') +!/NL3 3923 FORMAT ( ' &ANL3 QPARMS = ',2(F5.3,', '),F5.1,', ',E10.4, & +!/NL3 ', ',E10.4,' /') +!/NL3 4923 FORMAT ( ' &ANL3 QPARMS = ',2(F5.3,', '),F5.1,', ',E10.4, & +!/NL3 ', ',E10.4,' ,') +!/NL3 5923 FORMAT ( ' ',2(F5.3,', '),F5.1,', ',E10.4, & +!/NL3 ', ',E10.4,' ,') +!/NL3 6923 FORMAT ( ' ',2(F5.3,', '),F5.1,', ',E10.4, & +!/NL3 ', ',E10.4,' /') +! +!/NL4 922 FORMAT (/' Nonlinear interactions (TSA) ',A/ & +!/NL4 ' --------------------------------------------------') +!/NL4 923 FORMAT ( ' Source term computation (1=TSA,0=FBI) : ',I2/ & +!/NL4 ' Alternate loops (1=no,2=yes) : ',I2/ & +!/NL4 ' (To speed up computation) ') +!/NL4 2922 FORMAT ( ' &SNL4 ITSA =',I2,', IALT =',I2 ) +! +!/NLX 922 FORMAT (/' Experimental nonlinear interactions.'/) +! +!/NLS 9922 FORMAT (/' HF filter based on Snl ',A/ & +!/NLS ' --------------------------------------------------') +!/NLS 9923 FORMAT ( ' a34 (lambda) :',F9.3,F9.4/ & +!/NLS ' Prop. constant :',E10.3/ & +!/NLS ' maximum relative change :',F9.3/ & +!/NLS ' filter constants :',F8.2,2F6.2/) +!/NLS 8922 FORMAT ( ' &SNLS A34 =',F6.3,', FHFC =',E11.4, & +!/NLS ', DNM =',F6.3,','/' FC1 =',F6.3, & +!/NLS ', FC2 =',F6.3,', FC3 =',F6.3,' /') +! +!/ST0 924 FORMAT (/' Dissipation not defined.'/) +! +!/ST1 924 FORMAT (/' Dissipation (WAM-3) ',A/ & +!/ST1 ' --------------------------------------------------') +!/ST1 925 FORMAT ( ' Cdis :',E10.3/ & +!/ST1 ' Apm :',E10.3/) +!/ST1 2924 FORMAT ( ' &SDS1 CDIS =',E12.4,', APM =',E11.4,' /') +! +!/ST2 924 FORMAT (/' Dissipation (T&C 1996) ',A/ & +!/ST2 ' --------------------------------------------------') +!/ST2 925 FORMAT ( ' High-frequency constants :',F8.2,E11.3,F6.2/ & +!/ST2 ' Low-frequency constants :',E11.3,F6.2/& +!/ST2 ' ',E11.3,F6.2/& +!/ST2 ' Minimum input peak freq. (-):',F10.4/ & +!/ST2 ' Minimum PHI :',F10.4/) +!/ST2 2924 FORMAT ( ' &SDS2 SDSA0 =',E10.3,', SDSA1 =',E10.3,', SDSA2 =', & +!/ST2 E10.3,', '/ & +!/ST2 ' SDSB0 =',E10.3,', SDSB1 =',E10.3,', ', & +!/ST2 'PHIMIN =',E10.3,' /') +! +!/ST3 924 FORMAT (/' Dissipation (WAM Cycle 4+) ',A/ & +!/ST3 ' --------------------------------------------------') +!/ST3 925 FORMAT ( ' SDSC1 :',1E11.3/ & +!/ST3 ' Power of k in mean k :',F8.2/ & +!/ST3 ' weights of k and k^2 :',F9.3,F6.3/) +!/ST3 2924 FORMAT ( ' &SDS3 SDSC1 =',E12.4,', WNMEANP =',F4.2, & +!/ST3 ', FXPM3 =', F4.2,',FXFM3 =',F4.2,', '/ & +!/ST3 ' SDSDELTA1 =', F5.2,', SDSDELTA2 =',F5.2, & +!/ST3 ' /') +! +!/ST4 924 FORMAT (/' Dissipation (Ardhuin / Filipot / Romero ) ',A/ & +!/ST4 ' --------------------------------------------------') +!/ST4 925 FORMAT ( ' SDSC2, SDSBCK, SDSCUM :',3E11.3/ & +!/ST4 ' Power of k in mean k :',F8.2/) + + +!/ST4 2924 FORMAT ( ' &SDS4 SDSBCHOICE = ',F3.1, & +!/ST4 ', SDSC2 =',E12.4,', SDSCUM =',F6.2,', '/ & +!/ST4 ' SDSC4 =',F6.2,', SDSC5 =',E12.4, & +!/ST4 ', SDSC6 =',E12.4,','/ & +!/ST4 ' WNMEANP =',F4.2,', FXPM3 =', F4.2, & +!/ST4 ', FXFM3 =',F4.1,', FXFMAGE =',F6.3, ', '/ & +!/ST4 ' SDSBINT =',E12.4,', SDSBCK =',E12.4, & +!/ST4 ', SDSABK =',F6.3,', SDSPBK =',F6.3,', '/ & +!/ST4 ' SDSHCK =',F5.2,', SDSBR = ',E12.4, & +!/ST4 ', SDSSTRAIN =',F5.1,', SDSSTRAINA =',F4.1, & +!/ST4 ', SDSSTRAIN2 =',F5.1,', '/ & +!/ST4 ' SDSBT =',F5.2,', SDSP =',F5.2, & +!/ST4 ', SDSISO =',I2, & +!/ST4 ', SDSCOS =',F3.1,', SDSDTH =',F5.1,', '/ & +!/ST4 ' SDSBRF1 = ',F5.2,', SDSBRFDF =',I2,', '/ & +!/ST4 ' SDSBM0 = ',F5.2, ', SDSBM1 =',F5.2, & +!/ST4 ', SDSBM2 =',F5.2,', SDSBM3 =',F5.2,', SDSBM4 =', & +!/ST4 F5.2,', '/, & +!/ST4 ' SPMSS = ',F5.2, ', SDKOF =',F5.2, & +!/ST4 ', SDSMWD =',F5.2,', SDSFACMTF =',F5.1,', '/ & +!/ST4 ' SDSMWPOW =',F3.1,', SDSNMTF =', F5.2, & +!/ST4 ', SDSCUMP =', F3.1,', SDSNUW =', E8.3,', '/, & +!/ST4 ' WHITECAPWIDTH =',F5.2, ' WHITECAPDUR =',F5.2,' /') +! +!/ST6 924 FORMAT (/' Dissipation (Rogers et al. 2012) ',A/ & +!/ST6 ' --------------------------------------------------') +!/ST6 925 FORMAT ( ' normalise by threshold spectral density : ',A/& +!/ST6 ' normalise by spectral density : ',A/& +!/ST6 ' coefficient and exponent for '/ & +!/ST6 ' inherent breaking term a1, L as in (21) : ',E9.3,I3/ & +!/ST6 ' cumulative breaking term a2, M as in (22) : ',E9.3,I3/ & +!/ST6 ' ') +!/ST6 2924 FORMAT ( ' &SDS6 SDSET = ',L,', SDSA1 = ',E9.3, & +!/ST6 ', SDSA2 = ',E9.3,', SDSP1 = ',I2,', SDSP1 = ', & +!/ST6 I2,' /' ) +!/ST6 +!/ST6 937 FORMAT (/' Swell dissipation ',A/ & +!/ST6 ' --------------------------------------------------') +!/ST6 940 FORMAT ( ' subroutine W3SWL6 activated : ',A/ & +!/ST6 ' coefficient b1 ',A, ' : ',E9.3/ ) +!/ST6 2937 FORMAT ( ' &SWL6 SWLB1 = ',E9.3,', CSTB1 = ',L,' /') +! +!/STX 924 FORMAT (/' Experimental dissipation.'/) +! +!/BT0 926 FORMAT (/' Bottom friction not defined.'/) +! +!/BT1 926 FORMAT (/' Bottom friction (JONSWAP) ',A/ & +!/BT1 ' --------------------------------------------------') +!/BT1 927 FORMAT ( ' gamma :',F8.4/) +!/BT1 2926 FORMAT ( ' &SBT1 GAMMA =',E12.4,' /') +! +!/BT4 926 FORMAT (/' Bottom friction (SHOWEX) ',A/ & +!/BT4 ' --------------------------------------------------') +!/BT4 927 FORMAT ( ' SEDMAPD50, SED_D50_UNIFORM :',L3,1X,F8.6/ & +!/BT4 ' RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4 :',4F8.4/ & +!/BT4 ' SIGDEPTH, BOTROUGHMIN, BOTROUGHFAC:',3F8.4/) +!/BT4 2926 FORMAT ( ' &SBT4 SEDMAPD50 =',L3,', SED_D50_UNIFORM =',F8.6,','/ & +!/BT4 ' RIPFAC1 =',F8.4,', RIPFAC2 =',F8.4, & +!/BT4 ', RIPFAC3 =',F8.4,', RIPFAC4 =',F8.4,','/ & +!/BT4 ' SIGDEPTH =',F8.4,', BOTROUGHMIN =',F8.4, & +!/BT4 ', BOTROUGHFAC =',F4.1,' /') +!/BTX 926 FORMAT (/' Experimental bottom friction.'/) +! +!/DB0 928 FORMAT (/' Surf breaking not defined.'/) +! +!/DB1 928 FORMAT (/' Surf breaking (B&J 1978) ',A/ & +!/DB1 ' --------------------------------------------------') +!/DB1 929 FORMAT ( ' alpha :',F8.3/ & +!/DB1 ' gamma :',F8.3) +!/DB1 2928 FORMAT ( ' &SDB1 BJALFA =',F7.3,', BJGAM =',F7.3, & +!/DB1 ', BJFLAG = ',A,' /') +! +!/DBX 928 FORMAT (/' Experimental depth-induced breaking.'/) +! +!/TR0 930 FORMAT (/' Triad interactions not defined.'/) +!/TRX 930 FORMAT (/' Experimental triad interactions.'/) +! +!/BS0 932 FORMAT (/' Bottom scattering not defined.'/) +!/BS1 932 FORMAT (/' Experimental bottom scattering (F. Ardhuin).'/) +!/BSX 932 FORMAT (/' Experimental bottom scattering.'/) +! +!/XX0 934 FORMAT (/' Alternative source term slot not used.'/) +!/XXX 934 FORMAT (/' Experimental unclasified source term.'/) +! +!/IC1 935 FORMAT (/' Dissipation via ice parameters (SIC1).'& +!/IC1 ,/' --------------------------------------------------') +! +!/IC2 935 FORMAT (/' Dissipation via ice parameters (SIC2).'& +!/IC2 ,/' --------------------------------------------------') +! +!/IC3 935 FORMAT (/' Dissipation via ice parameters (SIC3).'& +!/IC3 ,/' --------------------------------------------------') +! +!/IC4 935 FORMAT (/' Dissipation via ice parameters (SIC4).'& +!/IC4 ,/' --------------------------------------------------') +! +!/IC5 935 FORMAT (/' Dissipation via ice parameters (SIC5).'& +!/IC5 ,/' --------------------------------------------------') +! +!/IS0 944 FORMAT (/' Ice scattering not defined.'/) +!/IS1 945 FORMAT (/' Ice scattering ',A,/ & +!/IS1 ' --------------------------------------------------') +!/IS1 946 FORMAT (' Isotropic (linear function of ice concentration)'/& +!/IS1 ' slope : ',E10.3/ & +!/IS1 ' offset : ',E10.3) +!/IS1 2946 FORMAT ( ' &SIS1 ISC1 =',E9.3,', ISC2 =',E9.3) +!/IS2 947 FORMAT (/' Ice scattering ',A,/ & +!/IS2 ' --------------------------------------------------') +!/IS2 948 FORMAT (' IS2 Scattering ... '/& +!/IS2 ' scattering coefficient : ',E9.3/ & +!/IS2 ' 0: no back-scattering : ',E9.3/ & +!/IS2 ' TRUE: istropic back-scattering : ',L3/ & +!/IS2 ' TRUE: update of ICEDMAX : ',L3/ & +!/IS2 ' TRUE: keeps updated ICEDMAX : ',L3/ & +!/IS2 ' flexural strength : ',E9.3/ & +!/IS2 ' TRUE: uses Robinson-Palmer disp.: ',L3/ & +!/IS2 ' attenuation : ',F5.2/ & +!/IS2 ' fragility : ',F5.2/ & +!/IS2 ' minimum floe size in meters : ',F5.2/ & +!/IS2 ' pack scattering coef 1 : ',F5.2/ & +!/IS2 ' pack scattering coef 2 : ',F5.2/ & +!/IS2 ' scaling by concentration : ',F5.2/ & +!/IS2 ' creep B coefficient : ',E9.3/ & +!/IS2 ' creep C coefficient : ',F5.2/ & +!/IS2 ' creep D coefficient : ',F5.2/ & +!/IS2 ' creep N power : ',F5.2/ & +!/IS2 ' elastic energy factor : ',F5.2/ & +!/IS2 ' factor for ice breakup : ',F5.2/ & +!/IS2 ' IS2WIM1 : ',F5.2/ & +!/IS2 ' anelastic dissipation : ',L3/ & +!/IS2 ' energy of activation : ',F5.2/ & +!/IS2 ' anelastic coefficient : ',E11.3/ & +!/IS2 ' anelastic exponent : ',F5.2) +!/IS2 2948 FORMAT ( ' &SIS2 ISC1 =',E9.3,', IS2BACKSCAT =',E9.3, & +!/IS2 ', IS2ISOSCAT =',L3,', IS2BREAK =',L3, & +!/IS2 ', IS2DUPDATE =',L3,','/ & +!/IS2 ' IS2FLEXSTR =',E11.3,', IS2DISP =',L3, & +!/IS2 ', IS2DAMP =',F3.1, & +!/IS2 ', IS2FRAGILITY =',F4.2,', IS2DMIN =',F5.2,','/ & +!/IS2 ' IS2C2 =',F12.8,', IS2C3 =',F8.4, & +!/IS2 ', IS2CONC =',F5.1,', IS2CREEPB =',E11.3,','/ & +!/IS2 ' IS2CREEPC =',F5.2,', IS2CREEPD =',F5.2, & +!/IS2 ', IS2CREEPN =',F5.2,','/ & +!/IS2 ' IS2BREAKE =',F5.2, & +!/IS2 ', IS2BREAKF =',F5.2,', IS2WIM1 =',F5.2,','/ & +!/IS2 ', IS2ANDISB =',L3,', IS2ANDISE =',F5.2, & +!/IS2 ', IS2ANDISD =',E11.3,', IS2ANDISN=',F5.2, ' /') +!/UOST 4500 FORMAT (/' Unresolved Obstacles Source Term (UOST) ',A,/ & +!/UOST ' --------------------------------------------------') +!/UOST 4501 FORMAT (' local alpha-beta file: ',A, & +!/UOST ' shadow alpha-beta file: ',A,/ & +!/UOST ' local calibration factor: ',F5.2, & +!/UOST ' shadow calibration factor: ',F5.2) +!/UOST 4502 FORMAT (' &UOST UOSTFILELOCAL = ',A,', UOSTFILESHADOW = ',A,/ & +!/UOST ' UOSTFACTORLOCAL = ',F5.2', UOSTFACTORSHADOW = ',F5.2,' /') +! + 950 FORMAT (/' Propagation scheme : '/ & + ' --------------------------------------------------') + 951 FORMAT ( ' Type of scheme (structured) :',1X,A) + 2951 FORMAT ( ' Type of scheme(unstructured):',1X,A) + 2952 FORMAT ( ' wave setup computation:',1X,A) + 952 FORMAT ( ' ',1X,A) +!/PR1 953 FORMAT ( ' CFLmax depth refraction :',F9.3/) +!/PR1 2953 FORMAT ( ' &PRO1 CFLTM =',F5.2,' /') +! +!/PR2 953 FORMAT ( ' CFLmax depth refraction :',F9.3/ & +!/PR2 ' Effective swell age (h) : switched off'/ & +!/PR2 ' Cut-off latitude (degr.) :',F7.1/) +!/PR2 954 FORMAT ( ' CFLmax depth refraction :',F9.3/ & +!/PR2 ' Effective swell age (h) :',F8.2/ & +!/PR2 ' Cut-off latitude (degr.) :',F7.1/) +!/PR2 2953 FORMAT ( ' &PRO2 CFLTM =',F5.2,', DTIME =',F8.0, & +!/PR2 ', LATMIN =',F5.1,' /') +! +!/SMC 953 FORMAT ( ' Max propagation CFL number :',F9.3/ & +!/SMC ' Effective swell age (h) : switched off'/ & +!/SMC ' Cut-off latitude (degr.) :',F8.2/ & +!/SMC ' Maximum refraction (degr.) :',F8.2/) +!/SMC 954 FORMAT ( ' Max propagation CFL number :',F9.3/ & +!/SMC ' Effective swell age (h) :',F8.2/ & +!/SMC ' Cut-off latitude (degr.) :',F8.2/ & +!/SMC ' Maximum refraction (degr.) :',F8.2/) +!/SMC 2953 FORMAT ( ' &PSMC CFLTM =',F5.2,', DTIME =', F9.1/ & +!/SMC ' LATMIN =',F5.1,', RFMAXD =', F9.2/ & +!/SMC ' UNO3 =',L5, ', AVERG =',L5/ & +!/SMC ' LvSMC =',i5, ', NBISMC =',i9/ & +!/SMC ' ISHFT =',i5, ', JEQT =',i9/ & +!/SMC ' SEAWND =',L5, ' /') +! +!/PR3 953 FORMAT ( ' CFLmax depth refraction :',F9.3/ & +!/PR3 ' Averaging area factor Cg :',F8.2) +!/PR3 954 FORMAT ( ' Averaging area factor theta :',F8.2) +!/PR3 955 FORMAT ( ' **** Internal maximum .GE.',F6.2,' ****') +!/PR3 2953 FORMAT ( ' &PRO3 CFLTM =',F5.2, & +!/PR3 ', WDTHCG = ',F4.2,', WDTHTH = ',F4.2,' /') +! + 2956 FORMAT ( ' &UNST UGBCCFL =',L3,', UGOBCAUTO =',L3, & + ', UGOBCDEPTH =', F8.3,', UGOBCFILE=',A,','/ & + ', EXPFSN =',L3,',EXPFSPSI =',L3, & + ', EXPFSFCT =', L3,',IMPFSN =',L3,',EXPTOTAL=',L3, & + ', IMPTOTAL=',L3,',IMPREFRACTION=', L3, & + ', IMPFREQSHIFT=', L3,', IMPSOURCE=', L3, & + ', SETUP_APPLY_WLV=', L3, & + ', JGS_TERMINATE_MAXITER=', L3, & + ', JGS_TERMINATE_DIFFERENCE=', L3, & + ', JGS_TERMINATE_NORM=', L3, & + ', JGS_LIMITER=', L3, & + ', JGS_USE_JACOBI=', L3, & + ', JGS_BLOCK_GAUSS_SEIDEL=', L3, & + ', JGS_MAXITER=', I5, & + ', JGS_PMIN=', F8.3, & + ', JGS_DIFF_THR=', F8.3, & + ', JGS_NORM_THR=', F8.3, & + ', JGS_NLEVEL=', I3, & + ', JGS_SOURCE_NONLINEAR=', L3 / ) +! + 960 FORMAT (/' Miscellaneous ',A/ & + ' --------------------------------------------------') + 2961 FORMAT ( ' *** WAVEWATCH-III WARNING IN W3GRID :'/ & + ' CICE0.NE.CICEN requires FLAGTR>2'/ & + ' Parameters corrected: CICE0 = CICEN'/) + 2962 FORMAT (/' *** WAVEWATCH-III WARNING IN W3GRID : User requests', & + 'CICE0=CICEN corresponding to discontinuous treatment of ', & + 'ice, so we will change FLAGTR') + 2963 FORMAT (/' *** WAVEWATCH-III WARNING IN W3GRID :'/ & + ' Ice physics used, so we will change FLAGTR.') + 961 FORMAT ( ' Ice concentration cut-offs :',F8.2,F6.2) +!/MGG 962 FORMAT ( ' Moving grid GSE cor. power :',F8.2) +!/SCRIP 963 FORMAT( ' Grid offset for multi-grid w/SCRIP : ',E11.3) + 1972 FORMAT ( ' Compression of track output : ',L3) +!/SEED 964 FORMAT ( ' Xseed in seeding algorithm :',F8.2) + 965 FORMAT (/' Dynamic source term integration scheme :'/ & + ' Xp (-) :',F9.3/ & + ' Xr (-) :',F9.3/ & + ' Xfilt (-) :',F9.3) + 966 FORMAT (/' Wave field partitioning :'/ & + ' Levels (-) :',I5/ & + ' Minimum wave height (m) :',F9.3/ & + ' Wind area multiplier (-) :',F9.3/ & + ' Cut-off wind sea fract. (-) :',F9.3/ & + ' Combine wind seas : ',A/ & + ' Number of swells in fld out :',I5) + 967 FORMAT (/' Miche-style limiting wave height :'/ & + ' Hs,max/d factor (-) :',F9.3/ & + ' Hrms,max/d factor (-) :',F9.3/ & + ' Limiter activated : ',A) + 968 FORMAT ( ' *** FACTOR DANGEROUSLY LOW ***') + 1973 FORMAT (/' Calendar type : ',A) +! +!/REF1 969 FORMAT (/' Shoreline reflection ',A/ & +!/REF1 ' --------------------------------------------------') +! +!/IG1 970 FORMAT (/' Second order and infragravity waves ',A/ & +!/IG1 ' --------------------------------------------------') +! + 5971 FORMAT (' Partitioning method : ',A) + 5972 FORMAT (' Namelist options overridden : ',A) +! +!/IC2 971 FORMAT (/' Boundary layer below ice ',A/ & +!/IC2 ' --------------------------------------------------') +!/IC3 971 FORMAT (/' Visco-elastic ice layer ',A/ & +!/IC3 ' --------------------------------------------------') +!/IC4 971 FORMAT (/' Empirical wave-ice physics ',A/ & +!/IC4 ' --------------------------------------------------') +!/IC5 971 FORMAT (/' Visco-elastic ice layer (SIC5) ',A/ & +!/IC5 ' --------------------------------------------------') +!/IC5 2971 FORMAT ( ' Min. Ice shear modulus G : ', E10.1/, & +!/IC5 ' Min. Wave period T : ', F7.2/, & +!/IC5 ' Max. Wavenumber Ratio (Ko/Kr): ', E10.1/, & +!/IC5 ' Max. Attenu. Rate (Ki) : ', E10.1/, & +!/IC5 ' Min. Water depth (d) : ', F5.0/, & +!/IC5 ' Max. # of Newton Iter. : ', F5.0/, & +!/IC5 ' Use Rand. Kick : ', F5.0/, & +!/IC5 ' Excluded Imag. Corridor : ', F9.4/ ) +! + 8972 FORMAT ( ' Wind input reduction factor in presence of ', & + /' ice :',F6.2, & + /' (0.0==> no reduction and 1.0==> no wind', & + /' input with 100% ice cover)') +! +! + 4970 FORMAT (/' Spectral output on full grid ',A/ & + ' --------------------------------------------------') + 4971 FORMAT ( ' Second order pressure at K=0:',3I4) + 4972 FORMAT ( ' Spectrum of Uss :',3I4) + 4973 FORMAT ( ' Frequency spectrum :',3I4) + 4974 FORMAT ( ' Partions of Uss :',2I4) + 4975 FORMAT ( ' Partition wavenumber #',I02,' : ',1F6.3) + +! + 4980 FORMAT (/' Coastal / iceberg reflection ',A/ & + ' --------------------------------------------------') + 4981 FORMAT ( ' Coefficient for shorelines :',F6.4) + 4989 FORMAT ( ' *** CURVLINEAR GRID: REFLECTION NOT IMPLEMENTED YET ***') + 2977 FORMAT ( ' &SIG1 IGMETHOD =',I2,', IGADDOUTP =',I2,', IGSOURCE =',I2, & + ', IGSTERMS = ',I2,', IGBCOVERWRITE =', L3,','/ & + ' IGSWELLMAX =', L3,', IGMAXFREQ =',F6.4, & + ', IGSOURCEATBP = ',I2,', IGKDMIN = ',F6.4,','/ & + ' IGFIXEDDEPTH = ',F6.2,', IGEMPIRICAL = ',F8.6,' /') +! + 2978 FORMAT ( ' &SIC2 IC2DISPER =',L3,', IC2TURB =',F6.2, & + ', IC2ROUGH =',F10.6,','/ & + ' IC2REYNOLDS = ',F10.1,', IC2SMOOTH = ',F10.1, & + ', IC2VISC =',F6.3,','/ & + ', IC2TURBS =',F8.2,', IC2DMAX =',F5.3,' /') +! + 2979 FORMAT ( ' &SIC3 IC3MAXTHK =',F6.2, ', IC3MAXCNC =',F6.2,','/ & + ' IC2TURB =',F8.2, & + ', IC2ROUGH =',F7.3,','/ & + ' IC2REYNOLDS = ',F10.1,', IC2SMOOTH = ',F10.1, & + ', IC2VISC =',F10.3,','/ & + ' IC2TURBS =',F8.2,', IC3CHENG =',L3, & + ', USECGICE =',L3,', IC3HILIM = ',F6.2,','/ & + ' IC3KILIM = ',E9.2,', IC3HICE = ',E9.2, & + ', IC3VISC = ',E9.2,','/ & + ' IC3DENS = ',E9.2,', IC3ELAS = ',E9.2,' /') +! + 2981 FORMAT ( ' &SIC5 IC5MINIG = ', E9.2, ', IC5MINWT = ', F5.2, & + ', IC5MAXKRATIO = ', E9.2, ','/ & + ' IC5MAXKI = ', E9.2, ', IC5MINHW = ', F4.0, & + ', IC5MAXITER = ', F4.0, ','/ & + ' IC5RKICK = ', F2.0, ', IC5KFILTER = ', F7.4,' /') +! + 2966 FORMAT ( ' &MISC CICE0 =',F6.3,', CICEN =',F6.3, & + ', LICE = ',F8.1,', PMOVE =',F6.3,','/ & + ' XSEED =',F6.3,', FLAGTR = ', I1, & + ', XP =',F6.3,', XR =',F6.3,', XFILT =', F6.3 / & + ' IHM =',I5,', HSPM =',F6.3,', WSM =',F6.3, & + ', WSC =',F6.3,', FLC = ',A/ & + ' NOSW =',I3,', FMICHE =',F6.3,', RWNDC =' , & + F6.3,', WCOR1 =',F6.2,', WCOR2 =',F6.2,','/ & + ' FACBERG =',F4.1,', GSHIFT = ',E11.3, & + ', STDX = ' ,F7.2,', STDY =',F7.2,','/ & + ' STDT =', F8.2, & + ', ICEHMIN =',F5.2,', ICEHFAC =',F5.2,','/ & + ' ICEHINIT =',F5.2,', ICEDISP =',L3, & + ', ICEHDISP =',F5.2,','/ & + ' ICESLN = ',F6.2,', ICEWIND = ',F6.2, & + ', ICESNL = ',F6.2,', ICESDS = ',F5.2,','/ & + ' ICEDDISP = ',F5.2,', ICEFDISP = ',F5.2, & + ', CALTYPE = ',A8,' , TRCKCMPR = ', L3,','/ & + ' BTBET = ', F6.2, ' /') +! + 2976 FORMAT ( ' &OUTS P2SF =',I2,', I1P2SF =',I2,', I2P2SF =',I3,','/& + ' US3D =',I2,', I1US3D =',I3,', I2US3D =',I3,','/& + ' USSP =',I2,', IUSSP =',I3,','/& + ' E3D =',I2,', I1E3D =',I3,', I2E3D =',I3,','/& + ' TH1MF =',I2,', I1TH1M =',I3,', I2TH1M =',I3,','/& + ' STH1MF=',I2,', I1STH1M=',I3,', I2STH1M=',I3,','/& + ' TH2MF =',I2,', I1TH2M =',I3,', I2TH2M =',I3,','/& + ' STH2MF=',I2,', I1STH2M=',I3,', I2STH2M=',I3,' /') +! + 2986 FORMAT ( ' &REF1 REFCOAST =',F5.2,', REFFREQ =',F5.2,', REFSLOPE =',F5.3, & + ', REFMAP =',F4.1, ', REFMAPD =',F4.1, ', REFSUBGRID =',F5.2,','/ & + ' REFRMAX=',F5.2,', REFFREQPOW =',F5.2, & + ', REFICEBERG =',F5.2,', REFCOSP_STRAIGHT =',F4.1,' /') +! + 2987 FORMAT ( ' &FLD TAIL_ID =',I1,' TAIL_LEV =',F5.4,' TAILT1 =',F5.3,& + ' TAILT2 =',F5.3,' /') +!/RTD +!/RTD 4991 FORMAT ( ' &ROTD PLAT =', F6.2,', PLON =', F7.2,', UNROT =',L3,' /') +!/RTD 4992 FORMAT ( ' &ROTB BPLAT =',9(F6.1,",")/ & +!/RTD ' BPLON =',9(F6.1,","),' /') + + 3000 FORMAT (/' The spatial grid: '/ & + ' --------------------------------------------------'/ & + /' Grid type : ',A) + 3001 FORMAT ( ' Coordinate system : ',A) + 3002 FORMAT ( ' Index closure type : ',A) + 3003 FORMAT ( ' Dimensions : ',I6,I8) + 3004 FORMAT (/' Increments (deg.) :',2F10.4/ & + ' Longitude range (deg.) :',2F10.4/ & + ' Latitude range (deg.) :',2F10.4) + 3005 FORMAT ( ' Increments (km) :',2F8.2/ & + ' X range (km) :',2F8.2/ & + ' Y range (km) :',2F8.2) + 3006 FORMAT (/' X-coordinate unit :',I6/ & + ' Scale factor :',F10.4/ & + ' Add offset :',E12.4/ & + ' Layout indicator :',I6/ & + ' Format indicator :',I6) + 3007 FORMAT (/' Y-coordinate unit :',I6/ & + ' Scale factor :',F10.4/ & + ' Add offset :',E12.4/ & + ' Layout indicator :',I6/ & + ' Format indicator :',I6) + 3008 FORMAT ( ' Format : ',A) + 3009 FORMAT ( ' File name : ',A) +!/SMC 4001 FORMAT ( ' SMC refined levels NRLv = ',I8) +!/SMC 4002 FORMAT ( ' SMC Equator j shift no. = ',I8) +!/SMC 4302 FORMAT ( ' SMC I-index shift number = ',I8) +!/SMC 4003 FORMAT ( ' SMC input boundary no. = ',I8) +!/SMC 4004 FORMAT ( ' SMC NCel = ',6I9) +!/SMC 4005 FORMAT ( ' IJKCel(5,NCel) read from ', A) +!/SMC 4006 FORMAT (6I8) +!/SMC 4007 FORMAT ( ' SMC NUFc = ',6I9) +!/SMC 4008 FORMAT ( ' IJKUFc(7,NCel) read from ', A) +!/SMC 4009 FORMAT (8I8) +!/SMC 4010 FORMAT ( ' SMC NVFc = ',6I9) +!/SMC 4011 FORMAT ( ' IJKVFc(8,NCel) read from ', A) +!/SMC 4110 FORMAT ( ' SMC NCObsr = ',6I9) +!/SMC 4111 FORMAT ( ' IJKObstr(1,NCel) read from ', A) +!/SMC 4012 FORMAT (9I8) +!/SMC 4013 FORMAT ( ' NBICelin(NBISMC) read from ', A) +!/SMC 4014 FORMAT (2I8) +!/ARC 4015 FORMAT ( ' ARC NARC = ',6I9) +!/ARC 4016 FORMAT ( ' IJKCel(5,NARC) read from ', A) +!/ARC 4017 FORMAT ( ' ARC NAUI = ',6I9) +!/ARC 4018 FORMAT ( ' IJKUFc(7,NAUI) read from ', A) +!/ARC 4019 FORMAT ( ' ARC NAVJ = ',6I9) +!/ARC 4020 FORMAT ( ' IJKVFc(8,NAVJ) read from ', A) +!/SMC 4021 FORMAT ( ' Varables by W3DIMX NCel = ',I9) +!/SMC 4022 FORMAT ( ' Defined NLvCel ',6I9) +!/SMC 4023 FORMAT ( ' Defined NLvUFc ',6I9) +!/SMC 4024 FORMAT ( ' Defined NLvVFc ',6I9) +!/SMC 4025 FORMAT ( ' Define IJKCel from -9 to ',I9) +!/SMC 4026 FORMAT ( ' IJKCel(5,NCel) defined : ') +!/SMC 4027 FORMAT ( ' IJKUFc(7,NUFc) defined : ') +!/SMC 4028 FORMAT ( ' IJKVFc(8,NVFc) defined : ') +!/SMC 4029 FORMAT ( ' Boundary cells IJKCel(:,-9:0) : ') +!/SMC 4030 FORMAT (5I8) +!/SMC 4031 FORMAT ( ' Define MAPSF ... 1 to ',I9) +!/SMC 4032 FORMAT ( ' Multi-Resolution factor = ',I6) +!/SMC 4033 FORMAT ( ' Range of MAPSF(:,1) : ',2I9) +!/SMC 4034 FORMAT ( ' Range of MAPSF(:,2) : ',2I9) +!/SMC 4035 FORMAT ( ' Range of MAPSF(:,3) : ',2I9) +!/SMC 4036 FORMAT ( ' Range of MAPFS(:,:) : ',2I9) +!/ARC 4037 FORMAT ( ' Arctic AngArc defined as ',I6) +!/ARC 4038 FORMAT (9F8.2) +!/ARC 4039 FORMAT ( ' Arctic ICLBAC defined as ',I6) +!/ARC 4040 FORMAT (9I8) +!/RTD 4200 FORMAT ( ' AnglDin(NX,NY) defn checks : ') +!/RTD 4201 FORMAT ( ' JY/IX',4I8) +!/RTD 4202 FORMAT (I12,4F8.2) +!/RTD 4203 FORMAT ( ' Rotated pole lat/lon (deg.) : ',2F9.3) +!/RTD 4204 FORMAT ( ' Output dirns and x-y vectors will be set to True North') + 972 FORMAT (/' Bottom level unit :',I6/ & + ' Limiting depth (m) :',F8.2/ & + ' Minimum depth (m) :',F8.2/ & + ' Scale factor :',F8.2/ & + ' Layout indicator :',I6/ & + ' Format indicator :',I6) + 973 FORMAT ( ' Format : ',A) + 974 FORMAT ( ' File name : ',A) + 976 FORMAT (/' Sub-grid information : ',A) + 977 FORMAT ( ' Obstructions unit :',I6/ & + ' Scale factor :',F10.4/ & + ' Layout indicator :',I6/ & + ' Format indicator :',I6) + 978 FORMAT (/' Mask information : From file.'/ & + ' Mask unit :',I6/ & + ' Layout indicator :',I6/ & + ' Format indicator :',I6) + 1977 FORMAT ( ' Shoreline slope :',I6/ & + ' Scale factor :',F10.4/ & + ' Layout indicator :',I6/ & + ' Format indicator :',I6) + 1978 FORMAT ( ' Grain sizes :',I6/ & + ' Scale factor :',F10.4/ & + ' Layout indicator :',I6/ & + ' Format indicator :',I6) +! + 979 FORMAT ( ' Processing ',A) + 980 FORMAT (/' Input boundary points : '/ & + ' --------------------------------------------------') + 1980 FORMAT (/' Excluded points : '/ & + ' --------------------------------------------------') + 981 FORMAT ( ' *** POINT OUTSIDE GRID (SKIPPED), IX, IY =') + 1981 FORMAT ( ' *** POINT ALREADY EXCLUDED (SKIPPED), IX, IY =') + 982 FORMAT ( ' *** CANNOT CONNECT POINTS, IX, IY =') + 985 FORMAT ( ' No boundary points.'/) + 986 FORMAT ( ' Number of boundary points :',I6/) + 1985 FORMAT ( ' No excluded points.'/) + 1986 FORMAT ( ' Number of excluded points :',I6/) + 987 FORMAT ( ' Nr.| IX | IY | Long. | Lat. '/ & + ' -----|-------|-------|---------|---------') + 1987 FORMAT ( ' Nr.| IX | IY | X | Y '/ & + ' -----|-------|-------|-----------|-----------') + 988 FORMAT ( ' ',I4,2(' |',I6),2(' |',F8.2)) + 1988 FORMAT ( ' ',I4,2(' |',I6),2(' |',F8.1,'E3')) + 989 FORMAT ( ' ') +! + 990 FORMAT (/' Output boundary points : '/ & + ' --------------------------------------------------') + 991 FORMAT ( ' File nest',I1,'.ww3 Number of points :',I6/ & + ' Number of spectra :',I6) + 1991 FORMAT ( ' Dest. grid Polat:',F6.2,', Polon:',F8.2) + 992 FORMAT (/' Nr.| Long. | Lat. '/ & + ' -----|---------|---------') + 1992 FORMAT (/' Nr.| Long. | Lat. ', & + ' Nr.| Long. | Lat. '/ & + ' -----|---------|---------', & + ' -----|---------|---------') + 993 FORMAT ( ' ',I4,2(' |',F8.2)) + 1993 FORMAT ( ' ',I4,2(' |',F8.2), & + ' ',I4,2(' |',F8.2)) + 994 FORMAT ( ' *** POINT OUTSIDE GRID (SKIPPED) : X,Y =',2F10.5) + 995 FORMAT ( ' *** POINT ON LAND (SKIPPED) : X,Y =',2F10.5) + 2992 FORMAT (/' Nr.| X | Y '/ & + ' -----|-----------|-----------') + 3992 FORMAT (/' Nr.| X | Y ', & + ' Nr.| X | Y '/ & + ' -----|-----------|-----------', & + ' -----|-----------|-----------') + 2993 FORMAT ( ' ',I4,2(' |',F8.1,'E3')) + 3993 FORMAT ( ' ',I4,2(' |',F8.1,'E3'), & + ' ',I4,2(' |',F8.1,'E3')) + 2994 FORMAT ( ' *** POINT OUTSIDE GRID (SKIPPED) : X,Y =',2(F8.1,'E3')) + 2995 FORMAT ( ' *** POINT ON LAND (SKIPPED) : X,Y =',2(F8.1,'E3')) + 996 FORMAT ( ' No boundary points.'/) + 997 FORMAT ( ' Number of boundary points :',I6/ & + ' Number of spectra :',I6/) +! +!/O2a 998 FORMAT (50I2) +!/O2c 1998 FORMAT (50I2) +! + 999 FORMAT (/' Writing model definition file ...'/) +! + 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & + ' ERROR IN OPENING INPUT FILE'/ & + ' IOSTAT =',I5/) +! + 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & + ' PREMATURE END OF INPUT FILE'/) +! + 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & + ' ERROR IN READING FROM INPUT FILE'/ & + ' IOSTAT =',I5/) +! + 1003 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & + ' INVALID CALENDAR TYPE: SELECT ONE OF:', & + ' standard, 360_day, or 365_day '/) +! + 1004 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & + ' CANNOT READ UNFORMATTED (IDFM = 3) FROM UNIT', & + I4,' (ww3_grid.inp)'/) +! + 1005 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & + ' BOTTOM AND OBSTRUCTION DATA FROM SAME FILE '/ & + ' BUT WITH INCOMPATIBLE FORMATS (',I1,',',I1,')'/) +! + 1006 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' TOO MANY NESTING OUTPUT FILES '/) +! + 1007 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & + ' ILLEGAL GRID TYPE:',A4) +! + 1008 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & + ' A CARTESIAN WITH CLOSURE IS NOT ALLOWED') +! + 1009 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & + ' A RECTILINEAR TRIPOLE GRID IS NOT ALLOWED') +! + 1010 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'// & + ' NO PROPAGATION + NO SOURCE TERMS = NO WAVE MODEL'// & + ' ( USE DRY RUN FLAG TO TEMPORARILY SWITCH OFF ', & + 'CALCULATIONS )'/) +! + 1011 FORMAT (/' *** WAVEWATCH-III WARNING IN W3GRID :'/ & + ' LEFT-HANDED GRID -- POSSIBLE CAUSE IS WRONG '/ & + ' IDLA:',I4,' . THIS MAY PRODUCE ERRORS '/ & + ' (COMMENT THIS EXTCDE AT YOUR OWN RISK).') +! + 1012 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & + ' ILLEGAL GRID CLOSURE TYPE:',A4) +! + 1013 FORMAT (/' *** WAVEWATCH-III WARNING IN W3GRID :'/ & + ' THE GLOBAL (LOGICAL) INPUT FLAG IS DEPRECATED'/ & + ' AND REPLACED WITH A STRING INDICATING THE TYPE'/ & + ' OF GRID INDEX CLOSURE (NONE, SMPL or TRPL).'/ & + ' *** PLEASE UPDATE YOUR GRID INPUT FILE ACCORDINGLY ***'/) +! + 1014 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & + ' SMC CELL LONGITUDE RANGE OUTSIDE BASE GRID RANGE:'/& + ' ISEA =', I6, '; IX =', I4, ':', I4,'; NX =', I4/) +! + 1015 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & + ' SMC CELL LATITUDE RANGE OUTSIDE BASE GRID RANGE: '/& + ' ISEA =', I6, '; IY =', I4, ':', I4,'; NY =', I4/) +! + 1020 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & + ' SOURCE TERMS REQUESTED BUT NOT SELECTED'/) + 1021 FORMAT (/' *** WAVEWATCH III WARNING IN W3GRID :'/ & + ' SOURCE TERMS SELECTED BUT NOT REQUESTED'/) + 1022 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/LNn OR SEED SWITCHES :',I3) + 1023 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/STn SWITCHES :',I3) + 1024 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/NLn SWITCHES :',I3) + 1025 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/BTn SWITCHES :',I3) + 1026 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/DBn SWITCHES :',I3) + 1027 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/TRn SWITCHES :',I3) + 1028 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/BSn SWITCHES :',I3) + 1029 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/XXn SWITCHES :',I3) +! + 1030 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' PROPAGATION REQUESTED BUT NO SCHEME SELECTED '/) + 1031 FORMAT (/' *** WAVEWATCH III WARNING IN W3GRID :'/ & + ' NO PROPAGATION REQUESTED BUT SCHEME SELECTED '/) + 1032 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' NO PROPAGATION SCHEME SELECTED ( use !/PR0 ) '/) + 1033 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' MULTIPLE PROPAGATION SCHEMES SELECTED :',I3/ & + ' CHECK !/PRn SWITCHES'/) + 1034 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/ICn SWITCHES :',I3) + 1035 FORMAT (/' *** WAVEWATCH III WARNING IN W3GRID :'/ & + ' ONLY FIRST PROPAGATION SCHEME WILL BE USED: ') + 1036 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & + ' ILLEGAL NUMBER OF !/ISn SWITCHES :',I3) +!/RTD 1052 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & +!/RTD ' WITH NAMELIST VALUE PLAT == 90, PLON MUST BE -180'/ & +!/RTD ' AND UNROT MUST BE .FALSE.' ) +! +!/RTD 1053 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & +!/RTD ' WITH NAMELIST VALUE BPLAT == 90, BPLON MUST BE -180') +! + 1040 FORMAT ( ' Space-time extremes DX :',F10.2) + 1041 FORMAT ( ' Space-time extremes DX :',F10.2) + 1042 FORMAT ( ' Space-time extremes DX-Y set to default 1000 m') + 1043 FORMAT ( ' Space-time extremes Dt :',F8.2) + 1044 FORMAT ( ' Space-time extremes Dt set to default 1200 s') +! + 1100 FORMAT (/' Status map, printed in',I6,' part(s) '/ & + ' -----------------------------------'/) + 1101 FORMAT (2X,180I2) + 1102 FORMAT ( ' Legend : '/ & + ' -----------------------------'/ & + ' 0 : Land point '/ & + ' 1 : Sea point '/ & + ' 2 : Active boundary point '/ & + ' 3 : Excluded point '/) + 1103 FORMAT (/' Obstruction map ',A1,', printed in',I6,' part(s) '/ & + ' ---------------------------------------------'/) + 1104 FORMAT ( ' Legend : '/ & + ' --------------------------------'/ & + ' fraction of obstruction * 10 '/) + + 1105 FORMAT (/' Shoreline slope, printed in',I6,' part(s) '/ & + ' ---------------------------------------------'/) + 1106 FORMAT ( ' Legend : '/ & + ' --------------------------------'/ & + ' Slope * 100'/) + + + 1150 FORMAT (/' Reading unstructured grid definition files ...'/) +! + 9997 FORMAT (/' Summary grid statistics : '/ & + ' --------------------------------------------------'/ & + ' Number of longitudes :',I10/ & + ' Number of latitudes :',I10/ & + ' Number of grid points :',I10/ & + ' Number of sea points :',I10,' (',F4.1,'%)'/& + ' Number of input b. points :',I10/ & + ' Number of land points :',I10/ & + ' Number of excluded points :',I10/) + 9998 FORMAT (/' Summary grid statistics : '/ & + ' --------------------------------------------------'/ & + ' Number of longitudes :',I10/ & + ' Number of latitudes :',I10/ & + ' Number of grid points :',I10/ & + ' Number of sea points :',I10,' (100%)'/ & + ' Number of input b. points :',I10/ & + ' Number of land points :',I10/ & + ' Number of excluded points :',I10/) + 9999 FORMAT (/' End of program '/ & + ' ========================================'/ & + ' WAVEWATCH III Grid preprocessor '/) +! +!/T 9090 FORMAT ( ' TEST W3GRID : OUTPUT BOUND. POINT DATA LINE SEG.') +!/T 9091 FORMAT ( ' ',2F8.2,4(2I4,F7.2)) +!/T 9092 FORMAT ( ' ',F7.2,2X,4F7.2) +!/T 9093 FORMAT ( ' ',4I7/ & +!/T ' ',4I7) +! +!/T0 9095 FORMAT ( ' TEST W3GRID : OUTPUT BOUND. POINT SPEC DATA ') +!/T0 9096 FORMAT ( ' ',I3,2I8) + + END SUBROUTINE +!/ +!/ Internal function READNL ------------------------------------------ / +!/ +!/ ------------------------------------------------------------------- / + SUBROUTINE READNL ( NDS, NAME, STATUS ) +!/ +!/ +-----------------------------------+ +!/ | WAVEWATCH III NOAA/NCEP | +!/ | H. L. Tolman | +!/ | FORTRAN 90 | +!/ | Last update : 01-Jun-2013 | +!/ +-----------------------------------+ +!/ +! 1. Purpose : +! +! Read namelist info from file if namelist is found in file. +! +! 2. Method : +! +! Look for namelist with name NAME in unit NDS and read if found. +! +! 3. Parameters : +! +! Parameter list +! ---------------------------------------------------------------- +! NDS Int. I Data set number used for search. +! NAME C*4 I Name of namelist. +! STATUS C*20 O Status at end of routine, +! '(default values) ' if no namelist found. +! '(user def. values)' if namelist read. +! ---------------------------------------------------------------- +! +! 4. Subroutines used : +! +! Name Type Module Description +! ---------------------------------------------------------------- +! EXTCDE Subr. W3SERVMD Abort program as graceful as possible. +! ---------------------------------------------------------------- +! +! 5. Called by : +! +! Program in which it is contained. +! +! 6. Error messages : +! +! 7. Remarks : +! +! 8. Structure : +! +! 9. Switches : +! +! 10. Source code : +! +!/ ------------------------------------------------------------------- / +!/ Parameter list +!/ + INTEGER, INTENT(IN) :: NDS + CHARACTER, INTENT(IN) :: NAME*4 + CHARACTER, INTENT(OUT) :: STATUS*20 +!/ +!/ ------------------------------------------------------------------- / +!/ Local parameters +!/ + INTEGER :: IERR, I, J + CHARACTER :: LINE*80 +!/ +!/ ------------------------------------------------------------------- / +!/ +!/S CALL STRACE (IENT, 'READNL') +! + REWIND (NDS) + STATUS = '(default values) : ' +! + DO + READ (NDS,'(A)',END=800,ERR=800,IOSTAT=IERR) LINE + DO I=1, 70 + IF ( LINE(I:I) .NE. ' ' ) THEN + IF ( LINE(I:I) .EQ. '&' ) THEN + IF ( LINE(I+1:I+4) .EQ. NAME ) THEN + BACKSPACE (NDS) + SELECT CASE(NAME) +!/FLD1 CASE('FLD1') +!/FLD1 READ (NDS,NML=FLD1,END=801,ERR=802,IOSTAT=J) +!/FLD2 CASE('FLD2') +!/FLD2 READ (NDS,NML=FLD2,END=801,ERR=802,IOSTAT=J) +!/FLX3 CASE('FLX3') +!/FLX3 READ (NDS,NML=FLX3,END=801,ERR=802,IOSTAT=J) +!/FLX4 CASE('FLX4') +!/FLX4 READ (NDS,NML=FLX4,END=801,ERR=802,IOSTAT=J) +!/LN1 CASE('SLN1') +!/LN1 READ (NDS,NML=SLN1,END=801,ERR=802,IOSTAT=J) +!/ST1 CASE('SIN1') +!/ST1 READ (NDS,NML=SIN1,END=801,ERR=802,IOSTAT=J) +!/ST2 CASE('SIN2') +!/ST2 READ (NDS,NML=SIN2,END=801,ERR=802,IOSTAT=J) +!/ST3 CASE('SIN3') +!/ST3 READ (NDS,NML=SIN3,END=801,ERR=802,IOSTAT=J) +!/ST4 CASE('SIN4') +!/ST4 READ (NDS,NML=SIN4,END=801,ERR=802,IOSTAT=J) +!/ST6 CASE('SIN6') +!/ST6 READ (NDS,NML=SIN6,END=801,ERR=802,IOSTAT=J) +!/NL1 CASE('SNL1') +!/NL1 READ (NDS,NML=SNL1,END=801,ERR=802,IOSTAT=J) +!/NL2 CASE('SNL2') +!/NL2 READ (NDS,NML=SNL2,END=801,ERR=802,IOSTAT=J) +!/NL2 CASE('ANL2') +!/NL2 IF ( NDEPTH .GT. 100 ) GOTO 804 +!/NL2 DEPTHS(1:NDEPTH) = DPTHNL +!/NL2 READ (NDS,NML=ANL2,END=801,ERR=802,IOSTAT=J) +!/NL2 DPTHNL = DEPTHS(1:NDEPTH) +!/NL3 CASE('SNL3') +!/NL3 READ (NDS,NML=SNL3,END=801,ERR=802,IOSTAT=J) +!/NL3 CASE('ANL3') +!/NL3 IF ( NQDEF .GT. 100 ) GOTO 804 +!/NL3 READ (NDS,NML=ANL3,END=801,ERR=802,IOSTAT=J) +!/NL4 CASE('SNL4') +!/NL4 READ (NDS,NML=SNL4,END=801,ERR=802,IOSTAT=J) +!/NLS CASE('SNLS') +!/NLS READ (NDS,NML=SNLS,END=801,ERR=802,IOSTAT=J) +!/ST1 CASE('SDS1') +!/ST1 READ (NDS,NML=SDS1,END=801,ERR=802,IOSTAT=J) +!/ST2 CASE('SDS2') +!/ST2 READ (NDS,NML=SDS2,END=801,ERR=802,IOSTAT=J) +!/ST3 CASE('SDS3') +!/ST3 READ (NDS,NML=SDS3,END=801,ERR=802,IOSTAT=J) +!/ST4 CASE('SDS4') +!/ST4 READ (NDS,NML=SDS4,END=801,ERR=802,IOSTAT=J) +!/ST6 CASE('SDS6') +!/ST6 READ (NDS,NML=SDS6,END=801,ERR=802,IOSTAT=J) +!/ST6 CASE('SWL6') +!/ST6 READ (NDS,NML=SWL6,END=801,ERR=802,IOSTAT=J) +!/BT1 CASE('SBT1') +!/BT1 READ (NDS,NML=SBT1,END=801,ERR=802,IOSTAT=J) +!/BT4 CASE('SBT4') +!/BT4 READ (NDS,NML=SBT4,END=801,ERR=802,IOSTAT=J) +!/IS1 CASE('SIS1') +!/IS1 READ (NDS,NML=SIS1,END=801,ERR=802,IOSTAT=J) +!/IS2 CASE('SIS2') +!/IS2 READ (NDS,NML=SIS2,END=801,ERR=802,IOSTAT=J) +!/DB1 CASE('SDB1') +!/DB1 READ (NDS,NML=SDB1,END=801,ERR=802,IOSTAT=J) +!/UOST CASE('UOST') +!/UOST READ (NDS,NML=UOST,END=801,ERR=802,IOSTAT=J) +!/PR1 CASE('PRO1') +!/PR1 READ (NDS,NML=PRO1,END=801,ERR=802,IOSTAT=J) +!/PR2 CASE('PRO2') +!/PR2 READ (NDS,NML=PRO2,END=801,ERR=802,IOSTAT=J) +!/SMC CASE('PSMC') +!/SMC READ (NDS,NML=PSMC,END=801,ERR=802,IOSTAT=J) +!/PR3 CASE('PRO3') +!/PR3 READ (NDS,NML=PRO3,END=801,ERR=802,IOSTAT=J) +!/RTD CASE('ROTD') +!/RTD READ (NDS,NML=ROTD,END=801,ERR=802,IOSTAT=J) +!/RTD CASE('ROTB') +!/RTD READ (NDS,NML=ROTB,END=801,ERR=802,IOSTAT=J) +!/REF1 CASE('REF1') +!/REF1 READ (NDS,NML=REF1,END=801,ERR=802,IOSTAT=J) +!/IG1 CASE('SIG1') +!/IG1 READ (NDS,NML=SIG1,END=801,ERR=802,IOSTAT=J) +!/IC2 CASE('SIC2') +!/IC2 READ (NDS,NML=SIC2,END=801,ERR=802,IOSTAT=J) +!/IC3 CASE('SIC3') +!/IC3 READ (NDS,NML=SIC3,END=801,ERR=802,IOSTAT=J) +!/IC4 CASE('SIC4 ') +!/IC4 READ (NDS,NML=SIC4,END=801,ERR=802,IOSTAT=J) +!/IC5 CASE('SIC5 ') +!/IC5 READ (NDS,NML=SIC5,END=801,ERR=802,IOSTAT=J) + CASE('UNST') + READ (NDS,NML=UNST,END=801,ERR=802,IOSTAT=J) + CASE('OUTS') + READ (NDS,NML=OUTS,END=801,ERR=802,IOSTAT=J) + CASE('MISC') + READ (NDS,NML=MISC,END=801,ERR=802,IOSTAT=J) + CASE DEFAULT + GOTO 803 + END SELECT + STATUS = '(user def. values) :' + RETURN + END IF + ELSE + EXIT + END IF + ENDIF + END DO + END DO +! + 800 CONTINUE + RETURN +! + 801 CONTINUE + WRITE (NDSE,1001) NAME + CALL EXTCDE(1) + RETURN +! + 802 CONTINUE + WRITE (NDSE,1002) NAME, J + CALL EXTCDE(2) + RETURN +! + 803 CONTINUE + WRITE (NDSE,1003) NAME + CALL EXTCDE(3) + RETURN +! +!/NL2 804 CONTINUE +!/NL2 WRITE (NDSE,1004) NDEPTH +!/NL2 CALL EXTCDE(4) +!/NL2 RETURN +! +!/NL3 804 CONTINUE +!/NL3 WRITE (NDSE,1004) NQDEF +!/NL3 CALL EXTCDE(4) +!/NL3 RETURN +! +! Formats +! + 1001 FORMAT (/' *** WAVEWATCH III ERROR IN READNL : '/ & + ' PREMATURE END OF FILE IN READING ',A/) + 1002 FORMAT (/' *** WAVEWATCH III ERROR IN READNL : '/ & + ' ERROR IN READING ',A,' IOSTAT =',I8/) + 1003 FORMAT (/' *** WAVEWATCH III ERROR IN READNL : '/ & + ' NAMELIST NAME ',A,' NOT RECOGNIZED'/) +!/NL2 1004 FORMAT (/' *** WAVEWATCH III ERROR IN READNL : '/ & +!/NL2 ' TEMP DEPTH ARRAY TOO SMALL, .LE. ',I8/) +!/NL3 1004 FORMAT (/' *** WAVEWATCH-III ERROR IN READNL : '/ & +!/NL3 ' TEMP QPARMS ARRAY TOO SMALL, .LE. ',I8/) +!/ +!/ End of READNL ----------------------------------------------------- / +!/ + END SUBROUTINE +!/ +!/ End of W3GRID ----------------------------------------------------- / +!/ + END MODULE W3GRIDMD diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index d5bfdf18d..e9cf01601 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -1,6591 +1,10 @@ #include "w3macros.h" !/ ------------------------------------------------------------------- / - PROGRAM W3GRID -!/ -!/ +-----------------------------------+ -!/ | WAVEWATCH III NOAA/NCEP | -!/ | H. L. Tolman | -!/ | J. H. Alves | -!/ | F. Ardhuin | -!/ | FORTRAN 90 | -!/ | Last update : 15-Apr-2020 | -!/ +-----------------------------------+ -!/ -!/ 14-Jan-1999 : Final FORTRAN 77 ( version 1.18 ) -!/ 27-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 ) -!/ Add UNFORMATTED bath file option. -!/ Read options with namelists. -!/ 14-Feb-2000 : Adding exact Snl ( version 2.01 ) -!/ 04-May-2000 : Non central source term int. ( version 2.03 ) -!/ 24-Jan-2001 : Flat grid option. ( version 2.06 ) -!/ 02-Feb-2001 : Xnl version 3.0 ( version 2.07 ) -!/ 09-Feb-2001 : Third propagation scheme added. ( version 2.08 ) -!/ 27-Feb-2001 : O0 output switch added. ( version 2.08 ) -!/ 16-Mar-2001 : Fourth propagation scheme added. ( version 2.09 ) -!/ 29-Mar-2001 : Sub-grid island treatment. ( version 2.10 ) -!/ 20-Jul-2001 : Clean up. ( version 2.11 ) -!/ 12-Sep-2001 : Clean up. ( version 2.13 ) -!/ 09-Nov-2001 : Clean up. ( version 2.14 ) -!/ 11-Jan-2002 : Sub-grid ice treatment. ( version 2.15 ) -!/ 17-Jan-2002 : DSII bug fix. ( version 2.16 ) -!/ 09-May-2002 : Switch clean up. ( version 2.21 ) -!/ 26-Nov-2002 : Adding first version of NL-3/4. ( version 3.01 ) -!/ Removed before distribution in 3.12. -!/ 26-Dec-2002 : Relaxing CFL time step. ( version 3.02 ) -!/ 01-Aug-2003 : Modify GSE correction for moving gr.( version 3.03 ) -!/ Add offset option for first direction. -!/ 24-Dec-2004 : Multiple grid version. ( version 3.06 ) -!/ 04-May-2005 : Allow active points at edge. ( version 3.07 ) -!/ 07-Jul-2005 : Add MAPST2 and map processing. ( version 3.07 ) -!/ 09-Nov-2005 : Remove soft boundary options. ( version 3.08 ) -!/ 23-Jun-2006 : Adding alternative source terms. ( version 3.09 ) -!/ Module W3SLN1MD, dummy for others. -!/ 28-Jun-2006 : Adding file name preamble. ( version 3.09 ) -!/ 28-Oct-2006 : Spectral partitioning. ( version 3.09 ) -!/ 09-Jan-2007 : Correct edges of read mask. ( version 3.10 ) -!/ 26-Mar-2007 : Add to spectral partitioning. ( version 3.11 ) -!/ 14-Apr-2007 : Add Miche style limiter. ( version 3.11 ) -!/ ( J. H. Alves ) -!/ 25-Apr-2007 : Battjes-Janssen Sdb added. ( version 3.11 ) -!/ ( J. H. Alves ) -!/ 18-Sep-2007 : Adding WAM4 physics option. ( version 3.13 ) -!/ ( F. Ardhuin ) -!/ 09-Oct-2007 : Adding bottom scattering SBS1. ( version 3.13 ) -!/ ( F. Ardhuin ) -!/ 22-Feb-2008 : Initialize TRNX-Y properly. ( version 3.13 ) -!/ 29-May-2009 : Preparing distribution version. ( version 3.14 ) -!/ 23-Jul-2009 : Modification of ST3 namelist . ( version 3.14-SHOM ) -!/ 31-Mar-2010 : Addition of shoreline reflection ( version 3.14-IFREMER ) -!/ 29-Jun-2010 : Adding Stokes drift profile output ( version 3.14-IFREMER ) -!/ 30-Aug-2010 : Adding ST4 option ( version 3.14-IFREMER ) - -!/ 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 : Clean up of unstructured grids ( version 3.14.4 ) -!/ (A. Roland and F. Ardhuin) -!/ 06-Dec-2010 : Change from GLOBAL (logical) to ICLOSE (integer) to -!/ specify index closure for a grid. Change GLOBAL -!/ input in ww3_grid.inp to CSTRG. ( version 3.14 ) -!/ (T. J. Campbell, NRL) -!/ 25-Jun-2011 : Adding movable bed friction ( version 4.01 ) -!/ 16-Sep-2011 : Clean up. ( version 4.05 ) -!/ 01-Dec-2011 : New namelist for reflection ( version 4.05 ) -!/ 01-Mar-2012 : Bug correction for NLPROP in ST2 ( version 4.05 ) -!/ 12-Jun-2012 : Add /RTD rotated grid option. JGLi ( version 4.06 ) -!/ 13-Jul-2012 : Move data structures GMD (SNL3) and nonlinear -!/ filter (SNLS) from 3.15 (HLT). ( version 4.07 ) -!/ 02-Sep-2012 : Clean up of reflection and UG grids ( version 4.08 ) -!/ 12-Dec-2012 : Adding SMC grid. JG_Li ( version 4.08 ) -!/ 19-Dec-2012 : Add NOSWLL as namelist variable. ( version 4.OF ) -!/ 05-Mar-2013 : Adjusted default roughness for rocks( version 4.09 ) -!/ 01-Jun-2013 : Adding namelist for spectral output ( version 4.10 ) -!/ 12-Sep-2013 : Adding Arctic part for SMC grid. ( version 4.11 ) -!/ 01-Nov-2013 : Changed UG list name to UNST ( version 4.12 ) -!/ 11-Nov-2013 : Make SMC and RTD option compatible. ( version 4.13 ) -!/ 13-Nov-2013 : Moved out reflection to W3UPDTMD ( version 4.12 ) -!/ 27-Jul-2013 : Adding free infragravity waves ( version 4.15 ) -!/ 02-Dec-2013 : Update of ST4 ( version 4.16 ) -!/ 16-Feb-2014 : Adds wind bias correction: WCOR ( version 5.00 ) -!/ 10-Mar-2014 : Adding namelist for IC2 ( version 5.01 ) -!/ 29-May-2014 : Adding namelist for IC3 ( version 5.01 ) -!/ 15 Oct-2015 : Change SMC grid input files. JGLi ( version 5.09 ) -!/ 10-Jan-2017 : Changes for US3D and USSP ( version 6.01 ) -!/ 20-Jan-2017 : Bug fix for mask input from file. ( version 6.02 ) -!/ 01-Mar-2018 : RTD poles info read from namelist ( version 6.02 ) -!/ 14-Mar-2018 : Option to read UNST boundary file ( version 6.02 ) -!/ 26-Mar-2018 : Sea-point only Wnd/Cur input. JGLi ( version 6.02 ) -!/ 15-May-2018 : Dry sea points over zlim ( version 6.04 ) -!/ 06-Jun-2018 : add Implicit grid parameters for unstructured grids -!/ add DEBUGGRID/DEBUGSTP ( version 6.04 ) -!/ 18-Aug-2018 : S_{ice} IC5 (Q. Liu) ( version 6.06 ) -!/ 20-Jun-2018 : Update of ST6 (Q. Liu) ( version 6.06 ) -!/ 26-Aug-2018 : UOST (Mentaschi et al. 2015, 2018) ( version 6.06 ) -!/ 27-Aug-2018 : Add WBT parameter ( version 6.06 ) -!/ 22-Jan-2020 : Update default values for IS2 ( version 7.05 ) -!/ 20-Feb-2020 : Include Romero's dissipation in ST4 ( version 7.06 ) -!/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 ) -!/ 18-Jun-2020 : Adds 360-day calendar option ( version 7.08 ) -!/ 24-Jun-2020 : RTD output b. c. to rotated grid. ( version 7.11 ) -!/ -!/ 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. -!/ -! 1. Purpose : -! -! "Grid" preprocessing program, which writes a model definition -! file containing the model parameter settigs and grid data. -! -! 2. Method : -! -! Information is read from the file ww3_grid.inp (NDSI), or -! preset in this program. A model definition file mod_def.ww3 is -! then produced by W3IOGR. Note that the name of the model -! definition file is set in W3IOGR. -! -! 3. Parameters : -! -! Local parameters. -! ---------------------------------------------------------------- -! NDSI Int. Input unit number ("ww3_grid.inp"). -! NDSS Int. Scratch file. -! NDSG Int. Grid unit ( may be NDSI ) -! NDSTR Int. Sub-grid unit ( may be NDSI or NDSG ) -! VSC Real Scale factor. -! VOF Real Add offset. -! ZLIM Real Limiting bottom depth, used to define land. -! IDLA Int. Layout indicator used by INA2R. -! IDFM Int. Id. FORMAT indicator. -! RFORM C*16 Id. FORMAT. -! FNAME C*60 File name with bottom level data. -! FROM C*4 Test string for open, 'UNIT' or 'FILE' -! ---------------------------------------------------------------- -! -! 4. Subroutines used : -! -! Name Type Module Description -! ---------------------------------------------------------------- -! W3NMOD Subr. W3GDATMD Set number of model. -! W3SETG Subr. Id. Point to selected model. -! W3DIMS Subr. Id. Set array dims for a spectral grid. -! W3DIMX Subr. Id. Set array dims for a spatial grid. -! W3GRMP Subr. W3GSRUMD Compute bilinear interpolation for point -! W3NOUT Subr. W3ODATMD Set number of model for output. -! W3SETO Subr. Id. Point to selected model for output. -! W3DMO5 Subr. Id. Set array dims for output type 5. -! ITRACE Subr. W3SERVMD Subroutine tracing initialization. -! STRACE Subr. Id. Subroutine tracing. -! NEXTLN Subr. Id. Get next line from input file -! EXTCDE Subr. Id. Abort program as graceful as possible. -! DISTAB Subr. W3DISPMD Make tables for solution of the -! dispersion relation. -! READNL Subr. Internal Read namelist. -! INAR2R Subr. W3ARRYMD Read in an REAL array. -! PRTBLK Subr. Id. Print plot of array. -! W3IOGR Subr. W3IOGRMD Reading/writing model definition file. -! ---------------------------------------------------------------- -! -! 5. Called by : -! -! None, stand-alone program. -! -! 6. Error messages : -! -! 7. Remarks : -! -! Physical grid : -! ----------------- -! -! The physical grid is defined by a grid counter IX defining the -! discrete longitude and IY defining the discrete latitude as shown -! below. For mathemathical convenience, these grid axes will -! generally be denoted as the X and Y axes. Two-dimensional arrays -! describing parameters on this grid are given as A(IY,IX). -! -! IY=NY -! ^ | | | | | | ^ N -! | |------|------|------|------|------|---- | -! | | :: | 25 | 26 | 27 | 28 | --|-- -! |------|------|------|------|------|---- | -! IY=3 | :: | :: | 9 | 10 | 11 | | -! |------|------|------|------|------|---- -! IY=2 | :: | 1 | 2 | :: | 3 | -! |------|------|------|------|------|---- -! IY=1 | :: | :: | :: | :: | :: | -! +------+------+------+------+------+---- -! IX=1 IX=2 IX=3 IX=4 IX=5 ---> IX=NX -! -! :: is a land point. -! -! To reduce memory usage of the model, spectra are stored for sea -! points only, in a one-dimensional grid with the length NSEA. This -! grid is called the storage grid. The definition of the counter -! in the storage grid is graphically depicted above. To transfer -! data between the two grids, the maps MAPFS and MAPSF are -! determined. MAPFS gives the counter of the storage grid ISEA -! for every physical grid point (IY,IX), such that -! -! MAPFS(IY,IX) = ISEA -! -! ISEA = 0 corresponds to land points. The map MAPSF gives the grid -! counters (IY,IX) for a given storage point ISEA. -! -! MAPSF(ISEA,1) = IX -! MAPSF(ISEA,2) = IY -! MAPSF(ISEA,3) = IY+(IX-1)*NY ( filled during reading ) -! -! Finally, a status maps MAPSTA and MAPST2 are determined, where -! the status indicator ISTAT = MAPSTA(IY,IX) determines the type -! of the grid point. -! -! ISTAT Means -! --------------------------------------------------- -! 0 Point excluded from grid. -! (-)1 Sea point -! (-)2 "Active" boundary point (data prescribed) -! -! For ISTAT=0, the secondary status counter ISTA2 is defined as -! -! ISTA2 Means -! --------------------------------------------------- -! 0 Land point. -! 1 Point excluded from grid. -! -! Negative values of ISTAT identify points that are temporarily -! taken out of the computation. For these points ISTA2 are -! defined per bit -! -! BIT Means -! --------------------------------------------------- -! 1 Ice flag (1 = ice coverage) -! 2 Dry flag (1 = dry point with depth 0) -! 3 Inferred land in multi-grid model. -! 4 Masking in multi-grid model. -! 5 land point flag for relocatable grid. -! -! Thus ISTA2=0 for ISTAT<0 is in error, ISTA2=1 means ice cover, -! ISTA2=3 means ice on dry point, etc. -! -! Spectral grid : -! ----------------- -! -! In the spectral grid (and in physical space in general), -! the cartesian convention for directions is used, i.e., the -! direction 0 corresponds to waves propagating in the positive -! X-direction and 90 degr. corresponds to waves propagating in -! the positive Y-direction. Similar definitions are used for the -! internal description of winds and currents. Output can obviously -! be transformed according to any preferred convention. -! -! ITH=NTH -! ^ | | | | | -! | |------|------|------|------|---- -! | | | | | | TH(3) = DTH*2. -! |------|------|------|------|---- -! ITH=2 | | | | | TH(2) = DTH -! |------|------|------|------|---- -! ITH=1 | | | | | TH(1) = 0. -! +------+------+------+------+---- -! IK=1 IK=2 IK=3 IK=4 ---> IK=NK -! -! The spectral grid consists of NK wavenumbers. The first -! wavenumber IK=1 corresponds to the longest wave. The wavenumber -! grid varies in space, as given by an invariant relative freq. -! grid and the local depth. The spectral grid furthermore contains -! NTH directions, equally spaced over a full circle. the first -! direction corresponds to the direction 0, etc. -! -! (Begin SMC description) -! -! Spherical Multiple-Cell (SMC) grid -! ----------------------------------- -! -! SMC grid is a multi-resolution grid using cells of multiple times -! of each other. It is similar to the lat-lon grid using rectangular -! cells but only cells at sea points are retained. All land points -! have been removed from the model. At high latitudes, cells are -! merged longitudinally to relax the CFL resctiction on time steps. -! Near coastlines, cells are divided into quarters in a few steps so -! that high resolution is achieved to refine coastlines and resolve -! small islands. At present, three tiers of quarter cells are used. -! For locating purpose, a usual x-y counter is setup by the smallest -! cell size and starting from the south-west corner of the usual -! rectuangular domain. Each sea cell is then given a pair of x-y -! index, plus a pair of increments. These four index are stored in -! the cell array IJKCel(NCel, 5), each row holds i, j, di, dj, ndps -! where ndps is an integer depth in metre. If precision higher than -! a metre is required, it may use other unit (cm for instance) with a -! conversion factor. -! -! For transport calculation, two face arrays, IJKUFc(NUFc, 7) and -! IJKVFc(NVFc,8), are also created to store the neighbouring cell -! sequential numbers and the face location and size. The 3 arrays -! are calculated outside the wave model and input from text files. -! -! Boundary condition is added for SMC grid so that it can be used for -! regional model as well. Most of the original boundary settings -! are reclaimed as long as the boundary condition file is provided -! by a lat-lon grid WW3 model, which will set the interpolation -! parameters in the boundary condition file. The NBI number is -! reset with an input value because the NX-Y double loop overcount -! the boundary cells for merged cells in the SMC grid. ISBPI -! boundary cell mapping array is fine as MAPFS uses duplicated cell -! number in any merged cell. From there, all original NBI loops are -! reusable. -! -! The whole Arctic can be included in the SMC grid if another option -! ARC is activated along with the SMC option. ARC option appends -! the polar Arctic part above 86N to the existing SMC grid and uses -! a map-east reference direction for this extra polar region. -! Because the map-east direction changes with latitude and longitude -! the wave spectra defined to the map-east direction could not be -! mixed up with the conventional spectra defined to the local east -! direction. A rotation sub is provided for convertion from one to -! another. Propagation part will be calculated together, including -! the boundary cells. The boundary cells are then updated by -! assigning the corresponding inner cells to them after conversion. -! Boundary cells are duplicated northmost 4 rows of the global part -! and they can be excluded for source term and output if required. -! For convenience, Arctic cellls are all base level cells and are -! appended to the end of the global cells. If refined cells were -! used in the Arctic part, it would not be kept all together, making -! the sub-loops much more complicated. If refined resolution cells -! are required for a Arctic regional model, users may consider use -! the rotated SMC grid options (RTD and SMC). -! -! For more information about the SMC grid, please refer to -! Li, J.G. (2012) Propagation of Ocean Surface Waves on a Spherical -! Multiple-Cell Grid. J. Comput. Phys., 231, 8262-8277. online at -! http://dx.doi.org/10.1016/j.jcp.2012.08.007 -! -! (End SMC description) -! -! ICEWIND is the scale factor for reduction of wind input by ice -! concentration. Value specified corresponds to the fractional -! input for 100% ice concentration. Default is 1.0, meaning that -! 100% ice concentration result in zero wind input. -! Sin_in_ice=Sin_in_open_water * (1-ICE*ICEWIND) - -! -----------------------------------------------------------------* -! 8. Structure : -! -! ---------------------------------------------------------------- -! 1. Set up grid storage structure. -! ( W3NMOD , W3NOUT , W3SETG , W3SETO ) -! 2.a I-O setup. -! b Print heading(s). -! 3. Prepare int. table for dispersion relation ( DISTAB ) -! 4. Read and process input file up to spectrum. -! a Get comment character -! b Name of grid -! c Define spectrum ( W3DIMS ) -! 5. Set-up discrete spectrum. -! a Directions. -! b Frequency for spectrum. -! 6. Read and process input file up to numerical parameters -! a Set model flags and time steps -! b Set / select source term package -! c Pre-process namelists. -! d Wind input source term. -! e Nonlinear interactions. -! f Whitecapping term. -! g Bottom friction source term. -! h Depth indiced breaking source term. -! i Triad interaction source term. -! j Bottom scattering source term. -! k Undefined source term. -! l Set / select propagaton scheme -! m Parameters for propagation scheme. -! n Set misc. parameters (ice, seeding, ...) -! o End of namelist processing -! p Set various other variables -! 7. Read and prepare grid. -! a Layout of grid -! b Storage of grid of grid -! c Read bottom depths -! d Set up temp map -! e Subgrid information -! 1 Info from input file -! 2 Open file and check if necessary -! 3 Read the data -! 4 Limit -! 8 Finalize status maps -! a Determine where to get the data -! Get data in parts from input file -! ---------------------------------------------------- -! b Read and update TMPSTA with bound. and excl. points. -! c Finalize excluded points -! ---------------------------------------------------- -! Read data from file -! ---------------------------------------------------- -! d Read data from file -! ---------------------------------------------------- -! e Get NSEA and other counters -! f Set up all maps ( W3DIMX ) -! 9. Prepare output boundary points. -! a Read -! b Update -! 10. Write model definition file. ( W3IOGR ) -! ---------------------------------------------------------------- -! -! 9. Switches : -! -! !/FLX1 Stresses according to Wu (1980). -! !/FLX2 Stresses according to T&C (1996). -! !/FLX3 Stresses according to T&C (1996) with cap on Cd. -! !/FLX4 Stresses according to Hwang (2011). -! -! !/LN0 No linear input source term. -! !/SEED 'Seeding' of lowest frequency for sufficiently strong -! winds. Proxi for linear input. -! !/LN1 Cavaleri and Melanotte-Rizzoli with Tolman filter. -! !/LNX Open slot. -! -! !/ST0 No source terms included (input/dissipation) -! !/ST1 WAM-3 physics package. -! !/ST2 Tolman and Chalikov (1996) physics package. -! !/ST3 WAM 4+ source terms from P.A.E.M. Janssen and J-R. Bidlot -! !/ST4 Input and dissipation using saturation following Ardhuin et al. (2009,2010) -! Filipot & Ardhuin (2010) or Romero (2019) -! !/ST6 BYDRZ source term package featuring Donelan et al. -! (2006) input and Babanin et al. (2001,2010) dissipation. -! !/STX Open slot. -! -! !/NL0 No nonlinear interactions. -! !/NL1 Discrete interaction approximation (DIA). -! !/NL2 Exact interactions (WRT). -! !/NL3 Generalized Multiple DIA (GMD). -! !/NL4 Two Scale Approximation -! !/NLX Open slot. -! !/NLS Snl based HF filter. -! -! !/BT0 No bottom friction included. -! !/BT1 JONSWAP bottom friction package. -! !/BT4 SHOWEX bottom friction using movable bed roughness -! (Tolman 1994, Ardhuin & al. 2003) -! !/BTX Open slot. -! -! !/IC1 Sink term for interaction with ice (uniform k_i) -! !/IC2 Sink term for under-ice boundary layer friction -! (Liu et al. 1991: JGR 96 (C3), 4605-4621) -! (Liu and Mollo 1988: JPO 18 1720-1712) -! !/IC3 Sink term for interaction with ice (Wang and Shen method) -! (Wang and Shen JGR 2010) -! !/IC4 Sink term for empirical, frequency-dependent attenuation -! in ice (Wadhams et al. 1988: JGR 93 (C6) 6799-6818) -! !/IC5 Sink term for interaction with ice (Mosig et al. method) -! (Mosig et al. 2015: JGR) -! -! !/UOST Unresolved Obstacles Source Term (UOST), Mentaschi et al. 2015 -! -! !/DB0 No depth-induced breaking included. -! !/DB1 Battjes-Janssen depth-limited breaking. -! !/DBX Open slot. -! !/MLIM Mich-style limiter. -! -! !/TR0 No triad interactions included. -! !/TRX Open slot. -! -! !/BS0 No bottom scattering included. -! !/BS1 Routines from F. Ardhuin. -! !/BSX Open slot. -! -! !/XX0 No unclasified source term included. -! !/XXX Open slot. -! -! !/PR1 First order propagation scheme. -! !/PR2 QUICKEST scheme with ULTIMATE limite and diffusion -! correction for swell dispersion. -! !/PR3 Averaging ULTIMATE QUICKEST scheme. -! -! !/RTD Rotated regular lat-lon grid. Special case is standard Polat=90. -! !/SMC UNO2 scheme on Spherical Multiple-Cell grid. -! !/ARC Append the Arctic part to the SMC grid. -! -! !/MGG GSE correction for moving grid. -! -! !/S Enable subroutine tracing. -! !/T Enable test output. -! !/T0 Enable test output tables for boundary output. -! -! !/O0 Print equivalent namelist setting to std out. -! !/O1 Print tables with boundary points as part of output. -! !/O2 Print MAPSTA as part of output. -! !/O2a Print land-sea mask in mask.ww3. -! !/O2b Print obstruction data. -! !/O2c Print extended status map. -! -! 10. Source code : -! + PROGRAM WW3GRID !/ ------------------------------------------------------------------- / - USE CONSTANTS -!/ - USE W3TRIAMD - USE W3GSRUMD, ONLY: W3GRMP - USE W3ODATMD, ONLY: W3NOUT, W3SETO, W3DMO5 - USE W3IOGRMD, ONLY: W3IOGR - USE W3SERVMD, ONLY: ITRACE, NEXTLN, EXTCDE -!/RTD USE W3SERVMD, ONLY: W3EQTOLL, W3LLTOEQ -!/ARC USE W3SERVMD, ONLY: W3LLTOEQ -!/S USE W3SERVMD, ONLY: STRACE - USE W3ARRYMD, ONLY: INA2R, INA2I -!/T USE W3ARRYMD, ONLY: PRTBLK - USE W3DISPMD, ONLY: DISTAB -!/ - USE W3GDATMD - USE W3ODATMD, ONLY: NDSE, NDST, NDSO - USE W3ODATMD, ONLY: NBI, NBI2, NFBPO, NBO, NBO2, FLBPI, FLBPO, & - IPBPO, ISBPO, XBPO, YBPO, RDBPO, FNMPRE, & - IHMAX, HSPMIN, WSMULT, WSCUT, FLCOMB, & - NOSWLL, PTMETH, PTFCUT - USE W3TIMEMD, ONLY: CALTYPE - USE W3NMLGRIDMD -!/SCRIP USE SCRIP_GRIDS, ONLY: GRID1_UNITS, GRID1_NAME, & -!/SCRIP GRID1_CENTER_LON, GRID1_CENTER_LAT, & -!/SCRIP GRID1_CORNER_LON, GRID1_CORNER_LAT, & -!/SCRIP GRID1_MASK, GRID1_SIZE, GRID1_RANK, & -!/SCRIP GRID1_IMASK, & -!/SCRIP GRID1_CORNERS, GRID1_DIMS -!/SCRIP USE SCRIP_KINDSMOD -!/SCRIP USE WMSCRPMD -!/SCRIPNC USE NETCDF -! -!/NL3 USE W3SNL3MD, ONLY: LAMMAX, DELTHM -!/NLS USE W3SNLSMD, ONLY: ABMAX -! + USE W3GRIDMD IMPLICIT NONE -!/ -!/ ------------------------------------------------------------------- / -!/ Local parameters -!/ - TYPE(NML_SPECTRUM_T) :: NML_SPECTRUM - TYPE(NML_RUN_T) :: NML_RUN - TYPE(NML_TIMESTEPS_T) :: NML_TIMESTEPS - TYPE(NML_GRID_T) :: NML_GRID - TYPE(NML_RECT_T) :: NML_RECT - TYPE(NML_CURV_T) :: NML_CURV - TYPE(NML_UNST_T) :: NML_UNST - TYPE(NML_SMC_T) :: NML_SMC - TYPE(NML_DEPTH_T) :: NML_DEPTH - TYPE(NML_MASK_T) :: NML_MASK - TYPE(NML_OBST_T) :: NML_OBST - TYPE(NML_SLOPE_T) :: NML_SLOPE - TYPE(NML_SED_T) :: NML_SED - TYPE(NML_INBND_COUNT_T) :: NML_INBND_COUNT - TYPE(NML_INBND_POINT_T), ALLOCATABLE :: NML_INBND_POINT(:) - TYPE(NML_EXCL_COUNT_T) :: NML_EXCL_COUNT - TYPE(NML_EXCL_POINT_T), ALLOCATABLE :: NML_EXCL_POINT(:) - TYPE(NML_EXCL_BODY_T), ALLOCATABLE :: NML_EXCL_BODY(:) - TYPE(NML_OUTBND_COUNT_T) :: NML_OUTBND_COUNT - TYPE(NML_OUTBND_LINE_T), ALLOCATABLE :: NML_OUTBND_LINE(:) -! - INTEGER, PARAMETER :: NFL = 6 - INTEGER :: NDSI, NDSI2, NDSS, NDSM, NDSG, NDSTR,& - IERR, NDSTRC, NTRACE, ITH, IK, ITH0, & - ISP, IYN(NFL), NRLIN, NRSRCE, NRNL, & - NRBT, NRDB, NRTR, NRBS, NRXX, NRPROP,& - IDLA, IDFM, IX0, IXN, IX, IY, ISEA, & - IDX, IXO, IDY, IYO, IBA, NBA, ILOOP, & - IFL, NBOTOT, NPO, IP, IX1, IX2, IY1, & - IY2, J, JJ, IXR(4), IYR(4), ISEAI(4),& - IST, NKI, NTHI, NRIC, NRIS, I, IDFT, & - NSTAT, NBT, NLAND, NOSW, NMAPB, IMAPB -!/NL2 INTEGER :: IDEPTH -!/O1 INTEGER :: IBI, IP0, IPN, IPH, IPI - INTEGER :: NCOL = 78 -!/SMC !!Li Offset to change Equator index = 0 to regular index JEQT -!/SMC !!Li LvSMC levels of refinded resolutions for SMC grid. -!/SMC !!Li NBISMC number of boundary point for regional SMC grid. -!/SMC !!Li ISHFT for SMC i-index from smc origin to regular grid west edge. -!/SMC !!Li SMC cell only subgrid obstruction array dimensions NCObst, JObs. -!/SMC INTEGER :: JEQT, LvSMC, NBISMC, JS, NCObst, JObs, ISHFT -!/SMC INTEGER :: NGUI, NGVJ -!/ARC INTEGER :: NAUI, NAVJ -! -!/O2 INTEGER :: NMAP, IMAP -!/T INTEGER :: IX3, IY3 -!/T0 INTEGER :: IFILE -!/S INTEGER, SAVE :: IENT = 0 -! - INTEGER, ALLOCATABLE :: TMPSTA(:,:), TMPMAP(:,:), READMP(:,:) -!/T INTEGER, ALLOCATABLE :: MAPOUT(:,:) -! - REAL :: RXFR, RFR1, SIGMA, SXFR, FACHF, & - VSC, VSC0, VOF, & - ZLIM, X, Y, XP, XO0, YO0, DXO, DYO, & - XO, YO, RD(4), RDTOT, & - FACTOR, RTH0, FMICHE, RWNDC, & - WCOR1, WCOR2 -! - CHARACTER(LEN=4) :: GSTRG, CSTRG -! -! Variables used to allow spectral output on full grid -! - INTEGER :: P2SF,I1P2SF,I2P2SF - INTEGER :: E3D,I1E3D,I2E3D - INTEGER :: US3D,I1US3D,I2US3D, & - USSP, IUSSP, & - TH1MF, I1TH1M, I2TH1M, & - STH1MF, I1STH1M, I2STH1M, & - TH2MF, I1TH2M, I2TH2M, & - STH2MF, I1STH2M, I2STH2M - ! STK_WN are the decays for Stokes drift partitions - REAL :: STK_WN(25) - -!/DEBUGGRID INTEGER :: nbCase1, nbCase2, nbCase3, & -!/DEBUGGRID nbCase4, nbCase5, nbCase6, & -!/DEBUGGRID nbCase7, nbCase8 -!/DEBUGGRID INTEGER :: nbTMPSTA0, nbTMPSTA1, nbTMPSTA2 -!/DEBUGGRID INTEGER :: IAPROC -! -!/LN1 REAL :: CLIN, RFPM, RFHF -!/ST1 REAL :: CINP, CDIS, APM -!/ST2 REAL :: PHIMIN, FPIA, FPIB, DPHID -!/NL1 REAL :: NLPROP -!/NL2 REAL :: DPTFAC, DEPTHS(100) -!/NL3 REAL :: QPARMS(500) -!/NLS REAL :: A34, FHFC, DNM, FC1, FC2, FC3 -!/BT1 REAL :: GAMMA -!/PR2 REAL :: LATMIN -! -!/SMC REAL :: LATMIN, TRNMX, TRNMY -!/SMC INTEGER, ALLOCATABLE :: NLvCelsk(:), NLvUFcsk(:), NLvVFcsk(:) -!/SMC INTEGER, ALLOCATABLE :: IJKCelin(:,:),IJKUFcin(:,:),IJKVFcin(:,:) -!/SMC INTEGER, ALLOCATABLE :: NBICelin(:), IJKObstr(:,:) -!/ARC REAL :: PoLonAC, PoLatAC -!/ARC INTEGER, ALLOCATABLE :: IJKCelAC(:,:),IJKUFcAC(:,:),IJKVFcAC(:,:) -!/ARC REAL, ALLOCATABLE :: XLONAC(:),YLATAC(:),ELONAC(:),ELATAC(:) -! -!/RTD REAL, ALLOCATABLE :: AnglDin(:,:),StdLon(:,:),StdLat(:,:) -!/RTD ! 1-dim boundary sectors -!/RTD REAL, ALLOCATABLE :: BDYLON(:), BDYLAT(:), & -!/RTD ELatbdy(:), ELonbdy(:), Anglbdy(:) -!/RTD ! If the destination grid for an output b.c. is rotated, its pole is: -!/RTD REAL :: bPolat, bPolon -!/RTD! - REAL, ALLOCATABLE :: XGRDIN(:,:), YGRDIN(:,:) - REAL, ALLOCATABLE :: ZBIN(:,:), OBSX(:,:), OBSY(:,:) - REAL, ALLOCATABLE :: REFD(:,:), REFD2(:,:), REFS(:,:) -!/BT4 REAL, ALLOCATABLE :: SED_D50FILE(:,:), SED_POROFILE(:,:) -!/BT4 LOGICAL :: SEDMAPD50 -!/BT4 REAL :: SED_D50_UNIFORM, SED_DSTAR, RIPFAC1, & -!/BT4 RIPFAC2, RIPFAC3, RIPFAC4, SIGDEPTH, & -!/BT4 BOTROUGHMIN, BOTROUGHFAC -! - LOGICAL :: FLLIN, FLINDS, FLNL, FLBT, FLDB, & - FLTR, FLBS, FLXX, FLPROP, FLREF, & - FIRST, CONNCT, FLNEW, INGRID,FLIC, & - FLIS, FLGNML - LOGICAL :: FLTC96 = .FALSE. - LOGICAL :: FLNMLO = .FALSE. - LOGICAL :: FLSTB2 = .FALSE. - LOGICAL :: FLST4 = .FALSE. - LOGICAL :: FLST6 = .FALSE. - -!!Li Add a logical variable to shelter regular grid lines from SMC grid. - LOGICAL :: RGLGRD = .TRUE. -!!Li - REAL :: FACBERG, REFSLOPE -!/IS1 REAL :: ISC1, ISC2 -!/IS2 REAL :: ISC1, IS2BACKSCAT, IS2C2, IS2C3,& -!/IS2 IS2FRAGILITY, IS2DMIN, IS2DAMP, & -!/IS2 IS2CONC, IS2CREEPB, IS2CREEPC, & -!/IS2 IS2CREEPD, IS2CREEPN, IS2BREAKE,& -!/IS2 IS2WIM1, IS2BREAKF, IS2FLEXSTR, & -!/IS2 IS2ANDISN, IS2ANDISE, IS2ANDISD -!/IS2 LOGICAL :: IS2BREAK, IS2DISP, IS2DUPDATE, & -!/IS2 IS2ISOSCAT, IS2ANDISB -! -!/REF1 REAL :: REFCOAST, REFFREQ, REFMAP, & -!/REF1 REFSUBGRID, REFRMAX, REFMAPD, & -!/REF1 REFICEBERG, REFCOSP_STRAIGHT, & -!/REF1 REFFREQPOW, REFUNSTSOURCE -! -!/IG1 LOGICAL :: IGSWELLMAX, IGBCOVERWRITE -!/IG1 INTEGER :: IGMETHOD, IGADDOUTP, IGSOURCE, & -!/IG1 IGSOURCEATBP, IGSTERMS -!/IG1 REAL :: IGMAXFREQ, IGMINDEP, IGMAXDEP, & -!/IG1 IGKDMIN, IGFIXEDDEPTH, IGEMPIRICAL -! -!/IC2 LOGICAL :: IC2DISPER -!/IC2 REAL :: IC2TURB, IC2ROUGH, IC2REYNOLDS, & -!/IC2 IC2SMOOTH, IC2VISC, IC2TURBS, IC2DMAX - -!/IC3 REAL :: IC2TURB, IC2ROUGH, IC2REYNOLDS, & -!/IC3 IC2SMOOTH, IC2VISC, IC2TURBS, & -!/IC3 IC3MAXTHK, IC3MAXCNC, & -!/IC3 IC3HILIM, IC3KILIM, & -!/IC3 IC3VISC, IC3ELAS, IC3DENS, IC3HICE -!/IC3 LOGICAL :: IC3CHENG,USECGICE - -!/IC4 INTEGER :: IC4METHOD -!/IC4 REAL :: IC4KI(NIC4), IC4FC(NIC4) -! -!/IC5 REAL :: IC5MINIG, IC5MINWT, & -!/IC5 IC5MAXKRATIO, IC5MAXKI, IC5MINHW, & -!/IC5 IC5MAXITER, IC5RKICK, IC5KFILTER - - CHARACTER :: COMSTR*1, PNAME*30, RFORM*16, & - FROM*4, FNAME*60, TNAME*60, LINE*80, & - STATUS*20,FNAME2*60, PNAME2*40 - CHARACTER(LEN=6) :: YESXNO(2) -!/FLX3 CHARACTER(LEN=18) :: TYPEID - -!/SCRIP INTEGER :: NCID -!/SCRIP INTEGER :: grid_size_dimid, grid_rank_dimid, grid_corners_dimid -!/SCRIP INTEGER :: grid_center_lat_varid, grid_center_lon_varid -!/SCRIP INTEGER :: grid_corner_lat_varid, grid_corner_lon_varid -!/SCRIP INTEGER :: grid_area_varid, grid_imask_varid -!/SCRIP INTEGER :: grid_dims_varid -!/SCRIP REAL (SCRIP_R8) :: CONV_DX,CONV_DY,OFFSET - -!/ ------------------------------------------------------------------- / -!/ Namelists -!/ - INTEGER :: FLAGTR, IHM - REAL :: CFLTM, CICE0, CICEN, PMOVE, XFILT, & - LICE, XSEED, XR, HSPM, WSM, WSC, STDX,& - STDY, STDT, ICEHMIN, ICEHFAC, ICEHINIT, & - ICESLN, ICEWIND, ICESNL, ICESDS, & - ICEHDISP, ICEFDISP, ICEDDISP, BTBET -! - REAL(8) :: GSHIFT ! see notes in WMGHGH - LOGICAL :: FLC, ICEDISP, TRCKCMPR - INTEGER :: PTM ! Partitioning method - REAL :: PTFC ! Part. cut off freq (for method 5) - REAL :: AIRCMIN, AIRGB - CHARACTER :: PMNAME*45, PMNAM2*45 ! Part. method desc. -!/FLD1 INTEGER :: TAILTYPE -!/FLD1 REAL :: TAILLEV, TAILT1, TAILT2 -!/FLD2 INTEGER :: TAILTYPE -!/FLD2 REAL :: TAILLEV, TAILT1, TAILT2 -!/FLX3 INTEGER :: CTYPE -!/FLX3 REAL :: CDMAX -!/FLX4 REAL :: CDFAC -!/ST2 REAL :: ZWND, SWELLF, STABSH, STABOF, & -!/ST2 CNEG, CPOS, FNEG, FPOS -!/ST2 REAL :: SDSA0, SDSA1, SDSA2, & -!/ST2 SDSB0, SDSB1, SDSB2, SDSB3 -!/ST3 REAL :: ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP,& -!/ST3 ZALP, SWELLF, FXPM3, FXFM3, & -!/ST3 WNMEANPTAIL, WNMEANP, STXFTF, STXFTWN -!/ST3 REAL :: STXFTFTAIL, SDSC1, & -!/ST3 SDSDELTA1, SDSDELTA2 -! -!/ST4 INTEGER :: SWELLFPAR, SDSISO, SDSBRFDF -!/ST4 REAL :: SDSBCHOICE -!/ST4 REAL :: ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP,& -!/ST4 ZALP, Z0RAT, TAUWSHELTER, SWELLF, & -!/ST4 SWELLF2,SWELLF3,SWELLF4, SWELLF5, & -!/ST4 SWELLF6, SWELLF7, FXPM3, FXFM3, & -!/ST4 WNMEANPTAIL, WNMEANP, STXFTF, STXFTFTAIL, & -!/ST4 STXFTWN, SINBR, FXFMAGE, & -!/ST4 SDSC2, SDSCUM, SDSC4, SDSC5, SDSC6, WHITECAPWIDTH, WHITECAPDUR, & -!/ST4 SDSSTRAIN, SDSSTRAINA, SDSSTRAIN2, & -!/ST4 SDSBR, SDSP, SDSBT, SDS4A, SDKOF, & -!/ST4 SDSCOS, SDSDTH, SDSBCK, SDSABK, & -!/ST4 SDSPBK, SDSBINT, SDSHCK, & -!/ST4 SDSBRF1, & -!/ST4 SDSBM0, SDSBM1, SDSBM2, SDSBM3, & -!/ST4 SDSBM4, SDSFACMTF, SDSCUMP, SDSNUW, & -!/ST4 SDSL, SDSMWD, SDSMWPOW, SPMSS, SDSNMTF -! -!/ST6 REAL :: SINA0, SINWS, SINFC, & -!/ST6 SDSA1, SDSA2, SWLB1 -!/ST6 INTEGER :: SDSP1, SDSP2 -!/ST6 LOGICAL :: SDSET, CSTB1 -! -!/NL1 REAL :: LAMBDA, KDCONV, KDMIN, & -!/NL1 SNLCS1, SNLCS2, SNLCS3 -!/NL2 INTEGER :: IQTYPE, NDEPTH -!/NL2 REAL :: TAILNL -!/NL3 INTEGER :: NQDEF -!/NL3 REAL :: MSC, NSC, KDFD, KDFS -!/NL4 INTEGER :: INDTSA, ALTLP -!/DB1 REAL :: BJALFA, BJGAM -!/DB1 LOGICAL :: BJFLAG -!/PR2 REAL :: DTIME -! -!/SMC REAL :: DTIME, RFMAXD, SYMR, YJ0R -!/SMC LOGICAL :: UNO3, AVERG, SEAWND -! -!/PR3 REAL :: WDTHCG, WDTHTH - LOGICAL :: JGS_TERMINATE_MAXITER = .TRUE. - LOGICAL :: JGS_TERMINATE_DIFFERENCE = .TRUE. - LOGICAL :: JGS_TERMINATE_NORM = .TRUE. - LOGICAL :: JGS_LIMITER = .FALSE. - LOGICAL :: JGS_BLOCK_GAUSS_SEIDEL = .TRUE. - LOGICAL :: JGS_USE_JACOBI = .TRUE. - LOGICAL :: JGS_SOURCE_NONLINEAR = .FALSE. - LOGICAL :: UGOBCAUTO = .FALSE. - LOGICAL :: UGBCCFL = .FALSE. - LOGICAL :: EXPFSN = .TRUE. - LOGICAL :: EXPFSPSI = .FALSE. - LOGICAL :: EXPFSFCT = .FALSE. - LOGICAL :: IMPFSN = .FALSE. - LOGICAL :: EXPTOTAL = .FALSE. - LOGICAL :: IMPTOTAL = .FALSE. - LOGICAL :: IMPREFRACTION = .FALSE. - LOGICAL :: IMPFREQSHIFT = .FALSE. - LOGICAL :: IMPSOURCE = .FALSE. - LOGICAL :: SETUP_APPLY_WLV = .FALSE. - INTEGER :: JGS_MAXITER=100 - INTEGER :: nbSel - INTEGER :: UNSTSCHEMES(4) - INTEGER :: UNSTSCHEME - INTEGER :: JGS_NLEVEL = 0 - REAL*8 :: JGS_PMIN = 0. - REAL*8 :: JGS_DIFF_THR = 1.E-10 - REAL*8 :: JGS_NORM_THR = 1.E-20 - REAL*8 :: SOLVERTHR_SETUP = 1.E-20 - REAL*8 :: CRIT_DEP_SETUP = 0. -! - CHARACTER :: UGOBCFILE*60 - REAL :: UGOBCDEPTH - LOGICAL :: UGOBCOK - -!/RTD REAL :: PLAT, PLON -!/RTD LOGICAL :: UNROT -!/RTD ! Poles of the output nested grids. May be a mix of rotated and standard -!/RTD REAL, DIMENSION(9) :: BPLAT, BPLON -! -!/FLD1 NAMELIST /FLD1/ TAILTYPE, TAILLEV, TAILT1, TAILT2 -!/FLD2 NAMELIST /FLD2/ TAILTYPE, TAILLEV, TAILT1, TAILT2 -!/FLX3 NAMELIST /FLX3/ CDMAX, CTYPE -!/FLX4 NAMELIST /FLX4/ CDFAC -!/IC2 NAMELIST /SIC2/ IC2DISPER, IC2TURB, IC2ROUGH, IC2REYNOLDS, & -!/IC2 IC2SMOOTH, IC2VISC, IC2TURBS, IC2DMAX -!/IC3 NAMELIST /SIC3/ IC3MAXTHK, IC2TURB, IC2ROUGH, IC2REYNOLDS, & -!/IC3 IC2SMOOTH, IC2VISC, IC2TURBS, IC3MAXCNC, & -!/IC3 IC3CHENG, USECGICE, IC3HILIM, IC3KILIM, & -!/IC3 IC3VISC, IC3ELAS, IC3DENS, IC3HICE -!/IC4 NAMELIST /SIC4/ IC4METHOD, IC4KI, IC4FC -!/IC5 NAMELIST /SIC5/ IC5MINIG, IC5MINWT, IC5MAXKRATIO, & -!/IC5 IC5MAXKI, IC5MINHW, IC5MAXITER, IC5RKICK,& -!/IC5 IC5KFILTER -!/IG1 NAMELIST /SIG1/ IGMETHOD, IGADDOUTP, IGSOURCE, IGBCOVERWRITE, & -!/IG1 IGMAXFREQ, IGSTERMS, IGSWELLMAX, & -!/IG1 IGSOURCEATBP, IGKDMIN, IGFIXEDDEPTH, IGEMPIRICAL -!/LN1 NAMELIST /SLN1/ CLIN, RFPM, RFHF -!/ST1 NAMELIST /SIN1/ CINP -!/ST2 NAMELIST /SIN2/ ZWND, SWELLF, STABSH, STABOF, CNEG, CPOS, FNEG -!/ST3 NAMELIST /SIN3/ ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP, ZALP, & -!/ST3 SWELLF -!/ST4 NAMELIST /SIN4/ ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP, ZALP, & -!/ST4 TAUWSHELTER, SWELLFPAR, SWELLF, & -!/ST4 SWELLF2, SWELLF3, SWELLF4, SWELLF5, SWELLF6, & -!/ST4 SWELLF7, Z0RAT, SINBR -!/NL1 NAMELIST /SNL1/ LAMBDA, NLPROP, KDCONV, KDMIN, & -!/NL1 SNLCS1, SNLCS2, SNLCS3 -!/NL2 NAMELIST /SNL2/ IQTYPE, TAILNL, NDEPTH -!/NL2 NAMELIST /ANL2/ DEPTHS -!/NL3 NAMELIST /SNL3/ NQDEF, MSC, NSC, KDFD, KDFS -!/NL3 NAMELIST /ANL3/ QPARMS -!/NL4 NAMELIST /SNL4/ INDTSA, ALTLP -!/NLS NAMELIST /SNLS/ A34, FHFC, DNM, FC1, FC2, FC3 -!/ST1 NAMELIST /SDS1/ CDIS, APM -!/ST2 NAMELIST /SDS2/ SDSA0, SDSA1, SDSA2, SDSB0, SDSB1, PHIMIN -!/ST3 NAMELIST /SDS3/ SDSC1, WNMEANP, FXPM3, FXFM3, SDSDELTA1, & -!/ST3 SDSDELTA2 -!/ST4 NAMELIST /SDS4/ SDSBCHOICE, WNMEANP, WNMEANPTAIL, FXPM3, FXFM3, & -!/ST4 FXFMAGE, SDSC2, SDSCUM, SDSSTRAIN, SDSSTRAINA, & -!/ST4 SDSSTRAIN2, SDSC4, SDSFACMTF, SDSNMTF,SDSCUMP, & -!/ST4 SDSC5, SDSC6, SDSBR, SDSBT, SDSP, SDSISO, & -!/ST4 SDSBCK, SDSABK, SDSPBK, SDSBINT, SDSHCK, & -!/ST4 SDSDTH, SDSCOS, SDSBRF1, SDSBRFDF, SDSNUW, & -!/ST4 SDSBM0, SDSBM1, SDSBM2, SDSBM3, SDSBM4, & -!/ST4 WHITECAPWIDTH, WHITECAPDUR, SDSMWD, SDSMWPOW, SDKOF - -!/ST6 NAMELIST /SIN6/ SINA0, SINWS, SINFC -!/ST6 NAMELIST /SDS6/ SDSET, SDSA1, SDSA2, SDSP1, SDSP2 -!/ST6 NAMELIST /SWL6/ SWLB1, CSTB1 -!/BT1 NAMELIST /SBT1/ GAMMA -!/BT4 NAMELIST /SBT4/ SEDMAPD50, SED_D50_UNIFORM, RIPFAC1, & -!/BT4 RIPFAC2, RIPFAC3, RIPFAC4, SIGDEPTH, & -!/BT4 BOTROUGHMIN, BOTROUGHFAC -!/DB1 NAMELIST /SDB1/ BJALFA, BJGAM, BJFLAG -!/UOST NAMELIST /UOST/ UOSTFILELOCAL, UOSTFILESHADOW, & -!/UOST UOSTFACTORLOCAL, UOSTFACTORSHADOW -! -!/PR1 NAMELIST /PRO1/ CFLTM -!/PR2 NAMELIST /PRO2/ CFLTM, DTIME, LATMIN -!/SMC NAMELIST /PSMC/ CFLTM, DTIME, LATMIN, RFMAXD, UNO3, AVERG, & -!/SMC LvSMC, ISHFT, JEQT, NBISMC, SEAWND -! -!/PR3 NAMELIST /PRO3/ CFLTM, WDTHCG, WDTHTH - NAMELIST /UNST/ UGOBCAUTO, UGOBCDEPTH, UGOBCFILE, & - UGBCCFL, EXPFSN, EXPFSPSI, EXPFSFCT, & - IMPFSN, IMPTOTAL, EXPTOTAL, & - IMPREFRACTION, IMPFREQSHIFT, & - IMPSOURCE, & - JGS_TERMINATE_MAXITER, & - JGS_TERMINATE_DIFFERENCE, & - JGS_TERMINATE_NORM, & - JGS_LIMITER, & - JGS_USE_JACOBI, & - JGS_BLOCK_GAUSS_SEIDEL, & - JGS_MAXITER, & - JGS_PMIN, & - JGS_DIFF_THR, & - JGS_NORM_THR, & - JGS_NLEVEL, & - JGS_SOURCE_NONLINEAR, & - SETUP_APPLY_WLV, SOLVERTHR_SETUP, & - CRIT_DEP_SETUP - NAMELIST /MISC/ CICE0, CICEN, LICE, XSEED, FLAGTR, XP, XR, & - XFILT, PMOVE, IHM, HSPM, WSM, WSC, FLC, FMICHE, & - RWNDC, FACBERG, NOSW, GSHIFT, WCOR1, WCOR2, & - STDX, STDY, STDT, ICEHMIN, ICEHINIT, ICEDISP, & - ICESLN, ICEWIND, ICESNL, ICESDS, ICEHFAC, & - ICEHDISP, ICEDDISP, ICEFDISP, CALTYPE, & - TRCKCMPR, PTM, PTFC, BTBET - NAMELIST /OUTS/ P2SF, I1P2SF, I2P2SF, & - US3D, I1US3D, I2US3D, & - USSP, IUSSP, STK_WN, & - E3D, I1E3D, I2E3D, & - TH1MF, I1TH1M, I2TH1M, & - STH1MF, I1STH1M, I2STH1M, & - TH2MF, I1TH2M, I2TH2M, & - STH2MF, I1STH2M, I2STH2M -!/IS1 NAMELIST /SIS1/ ISC1, ISC2 -!/IS2 NAMELIST /SIS2/ ISC1, IS2C2, IS2C3, IS2BACKSCAT, IS2ISOSCAT, IS2BREAK, & -!/IS2 IS2DISP, IS2FRAGILITY, IS2CONC, IS2DMIN, & -!/IS2 IS2DAMP, IS2DUPDATE, IS2CREEPB, IS2CREEPC, & -!/IS2 IS2CREEPD, IS2CREEPN, IS2BREAKE, IS2BREAKF, & -!/IS2 IS2WIM1, IS2FLEXSTR, IS2ANDISB, IS2ANDISE, IS2ANDISD, & -!/IS2 IS2ANDISN -!/REF1 NAMELIST /REF1/ REFCOAST, REFFREQ, REFMAP, REFMAPD, & -!/REF1 REFSUBGRID, REFICEBERG, & -!/REF1 REFCOSP_STRAIGHT, REFSLOPE, REFRMAX, & -!/REF1 REFFREQPOW, REFUNSTSOURCE -!/ -!/RTD NAMELIST /ROTD/ PLAT, PLON, UNROT -!/RTD! Poles of destination grids for boundary conditions output -!/RTD NAMELIST /ROTB/ BPLAT, BPLON -!/ -!/ ------------------------------------------------------------------- / -!/ - DATA YESXNO / 'YES/--' , '---/NO' / -!/O0 FLNMLO = .TRUE. -!/STAB2 FLSTB2 = .TRUE. -! -!/SMC !!Li Switch off regular grid lines by setting the logical -!/SMC RGLGRD = .FALSE. -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 1. Set up grid storage structure -! - CALL W3NMOD ( 1, 6, 6 ) - CALL W3SETG ( 1, 6, 6 ) - CALL W3NOUT ( 6, 6 ) - CALL W3SETO ( 1, 6, 6 ) -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 2. IO set-up. -! -!/DEBUGGRID IAPROC = 1 - NDSI = 10 - NDSS = 99 - NDSM = 20 -! - INQUIRE(FILE=TRIM(FNMPRE)//"ww3_grid.nml", EXIST=FLGNML) - IF (FLGNML) THEN - ! Read namelist - CALL W3NMLGRID (NDSI, TRIM(FNMPRE)//'ww3_grid.nml', NML_SPECTRUM, NML_RUN, & - NML_TIMESTEPS, NML_GRID, NML_RECT, NML_CURV, & - NML_UNST, NML_SMC, NML_DEPTH, NML_MASK, & - NML_OBST, NML_SLOPE, NML_SED, NML_INBND_COUNT, & - NML_INBND_POINT, NML_EXCL_COUNT, & - NML_EXCL_POINT, NML_EXCL_BODY, & - NML_OUTBND_COUNT, NML_OUTBND_LINE, IERR) - ELSE - OPEN (NDSI,FILE=TRIM(FNMPRE)//'ww3_grid.inp',STATUS='OLD', & - ERR=2000,IOSTAT=IERR) - END IF -! - NDSTRC = 6 - NTRACE = 10 - CALL ITRACE ( NDSTRC, NTRACE ) -! -!/S CALL STRACE (IENT, 'W3GRID') - WRITE (NDSO,900) -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 3.a Interpolation table for dispersion relation. -! - CALL DISTAB -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 3.b Table for friction factors -! - CALL TABU_FW -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 4 Read and process input file up to spectrum -! - - IF (FLGNML) THEN - ! grid name - GNAME=TRIM(NML_GRID%NAME) - WRITE (NDSO,902) GNAME - - ! spectrum parameters - RXFR=NML_SPECTRUM%XFR - RFR1=NML_SPECTRUM%FREQ1 - NKI=NML_SPECTRUM%NK - NTHI=NML_SPECTRUM%NTH - RTH0=NML_SPECTRUM%THOFF - - ELSE - - READ (NDSI,'(A)',END=2001,ERR=2002,IOSTAT=IERR) COMSTR - IF (COMSTR.EQ.' ') COMSTR = '$' - WRITE (NDSO,901) COMSTR - CALL NEXTLN ( COMSTR , NDSI , NDSE ) -! - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) GNAME - WRITE (NDSO,902) GNAME -! - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) RXFR, RFR1, NKI, NTHI, RTH0 - END IF - - - NK = NKI - NK2 = NKI + 2 - NTH = NTHI - NSPEC = NK * NTH - XFR = MAX ( RXFR , 1.00001 ) - FR1 = MAX ( RFR1 , 1.E-6 ) - DTH = TPI / REAL(NTH) - RTH0 = MAX ( -0.5 , MIN ( 0.5 , RTH0 ) ) - WRITE (NDSO,903) NTH, DTH*RADE - WRITE (NDSO,904) 360./REAL(NTH)*RTH0 - WRITE (NDSO,905) NK, FR1, FR1*XFR**(NK-1), XFR -! - CALL W3DIMS ( 1, NK, NTH, NDSE, NDST ) -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 5. Initialize spectral parameters. -! 5.a Directions : -! - DO ITH=1, NTH - TH (ITH) = DTH * ( RTH0 + REAL(ITH-1) ) - ESIN(ITH) = SIN ( TH(ITH) ) - ECOS(ITH) = COS ( TH(ITH) ) - IF ( ABS(ESIN(ITH)) .LT. 1.E-5 ) THEN - ESIN(ITH) = 0. - IF ( ECOS(ITH) .GT. 0.5 ) THEN - ECOS(ITH) = 1. - ELSE - ECOS(ITH) = -1. - END IF - END IF - IF ( ABS(ECOS(ITH)) .LT. 1.E-5 ) THEN - ECOS(ITH) = 0. - IF ( ESIN(ITH) .GT. 0.5 ) THEN - ESIN(ITH) = 1. - ELSE - ESIN(ITH) = -1. - END IF - END IF - ES2 (ITH) = ESIN(ITH)**2 - EC2 (ITH) = ECOS(ITH)**2 - ESC (ITH) = ESIN(ITH)*ECOS(ITH) - END DO -! - DO IK=2, NK+1 - ITH0 = (IK-1)*NTH - DO ITH=1, NTH - ESIN(ITH0+ITH) = ESIN(ITH) - ECOS(ITH0+ITH) = ECOS(ITH) - ES2 (ITH0+ITH) = ES2 (ITH) - EC2 (ITH0+ITH) = EC2 (ITH) - ESC (ITH0+ITH) = ESC (ITH) - END DO - END DO -! -! b Frequencies : -! - SIGMA = FR1 * TPI / XFR**2 - SXFR = 0.5 * (XFR-1./XFR) -! - DO IK=0, NK+1 - SIGMA = SIGMA * XFR - SIG (IK) = SIGMA - DSIP(IK) = SIGMA * SXFR - END DO -! - DSII( 1) = 0.5 * SIG( 1) * (XFR-1.) - DO IK=2, NK-1 - DSII(IK) = DSIP(IK) - END DO - DSII(NK) = 0.5 * SIG(NK) * (XFR-1.) / XFR -! - DO IK=1, NK - DDEN(IK) = DTH * DSII(IK) * SIG(IK) - END DO -! - DO ISP=1, NSPEC - IK = 1 + (ISP-1)/NTH - SIG2 (ISP) = SIG (IK) - DDEN2(ISP) = DDEN(IK) - END DO -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 6 Read and process input file up to numerical parameters -! 6.a Set model flags and time steps -! - WRITE (NDSO,910) - IF (FLGNML) THEN - FLDRY=NML_RUN%FLDRY - FLCX=NML_RUN%FLCX - FLCY=NML_RUN%FLCY - FLCTH=NML_RUN%FLCTH - FLCK=NML_RUN%FLCK - FLSOU=NML_RUN%FLSOU - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) & - FLDRY, FLCX, FLCY, FLCTH, FLCK, FLSOU - END IF -! - IYN = 2 - IF ( FLDRY ) IYN(1) = 1 - IF ( FLCX ) IYN(2) = 1 - IF ( FLCY ) IYN(3) = 1 - IF ( FLCTH ) IYN(4) = 1 - IF ( FLCK ) IYN(5) = 1 - IF ( FLSOU ) IYN(6) = 1 -! - WRITE (NDSO,911) (YESXNO(IYN(IFL)),IFL=1,NFL) -! - IF ( .NOT. (FLDRY.OR.FLCX.OR.FLCY.OR.FLCK.OR.FLCTH.OR.FLSOU) ) THEN - WRITE (NDSE,1010) - CALL EXTCDE ( 2 ) - END IF -! - IF (FLGNML) THEN - DTMAX=NML_TIMESTEPS%DTMAX - DTCFL=NML_TIMESTEPS%DTXY - DTCFLI=NML_TIMESTEPS%DTKTH - DTMIN=NML_TIMESTEPS%DTMIN - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) DTMAX, DTCFL, DTCFLI, DTMIN - END IF -!/SEC1 IF (DTMAX.LT.1.) THEN -!/SEC1 NITERSEC1=CEILING(1./DTMAX) -!/SEC1 WRITE (NDSO,913) NITERSEC1 -!/SEC1 ELSE -!/SEC1 NITERSEC1=1 -!/SEC1 END IF - - DTMAX = MAX ( 1. , DTMAX ) -! -! Commented to allow very high resolution zooms -! -! DTCFL = MAX ( 1. , DTCFL ) -! DTCFLI = MIN ( DTMAX , MAX ( 1. , DTCFLI ) ) - DTMIN = MIN ( DTMAX , MAX ( 0. , DTMIN ) ) - WRITE (NDSO,912) DTMAX, DTCFL, DTCFLI, DTMIN -! -! 6.b Set / select source term package -! - NRLIN = 0 - NRSRCE = 0 - NRNL = 0 - NRBT = 0 - NRIC = 0 - NRIS = 0 - NRDB = 0 - NRTR = 0 - NRBS = 0 - NRXX = 0 -! - FLLIN = .TRUE. - FLINDS = .TRUE. - FLNL = .TRUE. - FLBT = .TRUE. - FLIC = .FALSE. - FLIS = .FALSE. - FLDB = .TRUE. - FLTR = .TRUE. - FLBS = .TRUE. - FLREF = .FALSE. - FLXX = .TRUE. -! -!/LN0 NRLIN = NRLIN + 1 -!/LN0 FLLIN = .FALSE. -!/SEED NRLIN = NRLIN + 1 -!/LN1 NRLIN = NRLIN + 1 -!/LNX NRLIN = NRLIN + 1 -! -!/ST0 NRSRCE = NRSRCE + 1 -!/ST0 FLINDS = .FALSE. -!/ST1 NRSRCE = NRSRCE + 1 -!/ST2 NRSRCE = NRSRCE + 1 -!/ST2 FLTC96 = .TRUE. -!/ST3 NRSRCE = NRSRCE + 1 -!/ST4 NRSRCE = NRSRCE + 1 -!/ST4 FLST4 = .TRUE. -!/ST6 NRSRCE = NRSRCE + 1 -!/ST6 FLST6 = .TRUE. -!/STX NRSRCE = NRSRCE + 1 -! -!/NL0 NRNL = NRNL + 1 -!/NL0 FLNL = .FALSE. -!/NL1 NRNL = NRNL + 1 -!/NL2 NRNL = NRNL + 1 -!/NL3 NRNL = NRNL + 1 -!/NL4 NRNL = NRNL + 1 -!/NLX NRNL = NRNL + 1 -! -!/BT0 NRBT = NRBT + 1 -!/BT0 FLBT = .FALSE. -!/BT1 NRBT = NRBT + 1 -!/BT4 NRBT = NRBT + 1 -!/BT8 NRBT = NRBT + 1 -!/BT9 NRBT = NRBT + 1 -!/BTX NRBT = NRBT + 1 -! -!/IC1 NRIC = NRIC + 1 -!/IC1 FLIC = .TRUE. -!/IC2 NRIC = NRIC + 1 -!/IC2 FLIC = .TRUE. -!/IC3 NRIC = NRIC + 1 -!/IC3 FLIC = .TRUE. -!/IC4 NRIC = NRIC + 1 -!/IC4 FLIC = .TRUE. -!/IC5 NRIC = NRIC + 1 -!/IC5 FLIC = .TRUE. -! -!/IS1 NRIS = NRIS + 1 -!/IS1 FLIS = .TRUE. -!/IS2 NRIS = NRIS + 1 -!/IS2 FLIS = .TRUE. -! -!/DB0 NRDB = NRDB + 1 -!/DB0 FLDB = .FALSE. -!/DB1 NRDB = NRDB + 1 -!/DBX NRDB = NRDB + 1 -! -!/TR0 NRTR = NRTR + 1 -!/TR0 FLTR = .FALSE. -!/TR1 NRTR = NRTR + 1 -!/TRX NRTR = NRTR + 1 -! -!/BS0 NRBS = NRBS + 1 -!/BS0 FLBS = .FALSE. -!/BS1 NRBS = NRBS + 1 -!/BSX NRBS = NRBS + 1 -! -!/REF1 FLREF = .TRUE. -! -!/XX0 NRXX = NRXX + 1 -!/XX0 FLXX = .FALSE. -!/XXX NRXX = NRXX + 1 -! - IF ( .NOT.FLLIN .AND. .NOT.FLINDS .AND. .NOT.FLNL .AND. & - .NOT.FLBT .AND. .NOT.FLIC .AND. .NOT.FLIS .AND. & - .NOT.FLDB .AND. .NOT.FLTR .AND. .NOT.FLBS .AND. & - .NOT.FLXX .AND. .NOT.FLREF .AND. FLSOU ) THEN - WRITE (NDSE,1020) - CALL EXTCDE ( 10 ) - END IF -! - IF ( ( FLLIN .OR. FLINDS .OR. FLNL .OR. FLBT .OR. FLDB .OR. & - FLTR .OR. FLBS .OR. FLREF .OR. FLXX .OR. FLIC ) & - .AND. .NOT.FLSOU ) THEN - WRITE (NDSE,1021) - END IF -! - IF ( NRLIN .NE. 1 ) THEN - WRITE (NDSE,1022) NRLIN - CALL EXTCDE ( 11 ) - END IF -! - IF ( NRSRCE .NE. 1 ) THEN - WRITE (NDSE,1023) NRSRCE - CALL EXTCDE ( 12 ) - END IF -! - IF ( NRNL .NE. 1 ) THEN - WRITE (NDSE,1024) NRNL - CALL EXTCDE ( 13 ) - END IF -! - IF ( NRBT .NE. 1 ) THEN - WRITE (NDSE,1025) NRBT - CALL EXTCDE ( 14 ) - END IF -! - IF ( NRDB .NE. 1 ) THEN - WRITE (NDSE,1026) NRDB - CALL EXTCDE ( 15 ) - END IF -! - IF ( NRTR .NE. 1 ) THEN - WRITE (NDSE,1027) NRTR - CALL EXTCDE ( 16 ) - END IF -! - IF ( NRBS .NE. 1 ) THEN - WRITE (NDSE,1028) NRBS - CALL EXTCDE ( 17 ) - END IF -! - IF ( NRXX .NE. 1 ) THEN - WRITE (NDSE,1029) NRXX - CALL EXTCDE ( 18 ) - END IF -! - IF ( NRIC .GT. 1 ) THEN - WRITE (NDSE,1034) NRIC - CALL EXTCDE ( 19 ) - END IF -! - IF ( NRIS .GT. 1 ) THEN - WRITE (NDSE,1036) NRIS - CALL EXTCDE ( 26 ) - END IF - - -! -! 6.c Read namelist file or Pre-process namelists into scratch file -! - WRITE (NDSO,915) - IF (FLGNML) THEN - OPEN (NDSS,FILE=TRIM(FNMPRE)//TRIM(NML_GRID%NML),STATUS='OLD',FORM='FORMATTED') - ELSE - OPEN (NDSS,FILE=TRIM(FNMPRE)//'ww3_grid.scratch',FORM='FORMATTED') - DO - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,'(A)',END=2001,ERR=2002) LINE - IF ( LINE(1:16) .EQ. 'END OF NAMELISTS' ) THEN - EXIT - ELSE - WRITE (NDSS,'(A)') LINE - ENDIF - END DO - END IF - WRITE (NDSO,916) -! -! 6.d Define Sin. -! 6.d.1 Stresses -! -!/FLX1 WRITE (NDSO,810) -!/FLX2 WRITE (NDSO,810) -! -!/FLX2 CINXSI = 0.20 -!/FLX2 NITTIN = 3 -!/FLX3 CINXSI = 0.20 -!/FLX3 NITTIN = 3 -!/FLX3 CDMAX = 2.5E-3 -!/FLX3 CTYPE = 0 -! -!/FLX3 CALL READNL ( NDSS, 'FLX3', STATUS ) -!/FLX3 WRITE (NDSO,810) STATUS -!/FLX3 CDMAX = MAX ( 0. , CDMAX ) -!/FLX3 IF ( CTYPE .EQ. 1 ) THEN -!/FLX3 TYPEID = 'hyperbolic tangent' -!/FLX3 ELSE -!/FLX3 CTYPE = 0 -!/FLX3 TYPEID = 'discontinuous ' -!/FLX3 END IF -!/FLX3 WRITE (NDSO,811) CDMAX*1.E3, TYPEID -!/FLX3 CD_MAX = CDMAX -!/FLX3 CAP_ID = CTYPE -! -!/FLX4 CDFAC = 1.0 -!/FLX4 CALL READNL ( NDSS, 'FLX4', STATUS ) -!/FLX4 WRITE (NDSO,810) STATUS -!/FLX4 WRITE (NDSO,811) CDFAC -!/FLX4 FLX4A0 = CDFAC -! -! 6.d.2 Linear input -! -!/LN0 WRITE (NDSO,820) -!/SEED WRITE (NDSO,820) -!/LNX WRITE (NDSO,820) -! -!/LN1 CLIN = 80. -!/LN1 RFPM = 1. -!/LN1 RFHF = 0.5 -! -!/LN1 CALL READNL ( NDSS, 'SLN1', STATUS ) -!/LN1 WRITE (NDSO,820) STATUS -!/LN1 CLIN = MAX (0.,CLIN) -!/LN1 RFPM = MAX (0.,RFPM) -!/LN1 RFHF = MAX(0.,MIN (1.,RFHF)) -!/LN1 WRITE (NDSO,821) CLIN, RFPM, RFHF -!/LN1 SLNC1 = CLIN * (DAIR/DWAT)**2 / GRAV**2 -!/LN1 FSPM = RFPM -!/LN1 FSHF = RFHF -! -! 6.d.3 Exponential input -! -!/ST0 WRITE (NDSO,920) -!/STX WRITE (NDSO,920) -! -!/ST1 CINP = 0.25 -!/ST2 ZWND = 10. -!/ST2 SWELLF = 0.100 -!/ST2 STABSH = 1.38 -!/ST2 STABOF = -0.01 -!/ST2 CNEG = -0.1 -!/ST2 CPOS = 0.1 -!/ST2 FNEG = 150. -! -!/ST3 ZWND = 10. -!/ST3 ALPHA0 = 0.0095 -!/ST3 Z0MAX = 0.0 -!/ST3 BETAMAX = 1.2 ! default WAM4 / WAM4 + is 1.2 with rhow=1000 -!/ST3 SINTHP = 2. -!/ST3 SWELLF = 0. -!/ST3 ZALP = 0.0110 -! -!/ST4 ZWND = 10. -!/ST4 ALPHA0 = 0.0095 -!/ST4 Z0MAX = 0.0 -!/ST4 Z0RAT = 0.04 -!/ST4 BETAMAX = 1.43 -!/ST4 SINTHP = 2. -!/ST4 SWELLF = 0.66 -!/ST4 SWELLFPAR = 1 -!/ST4 SWELLF2 = -0.018 -!/ST4 SWELLF3 = 0.022 -!/ST4 SWELLF4 = 1.5E5 -!/ST4 SWELLF5 = 1.2 -!/ST4 SWELLF6 = 0. -!/ST4 SWELLF7 = 360000. -!/ST4 TAUWSHELTER = 0.3 -!/ST4 ZALP = 0.006 -!/ST4 SINBR = 0. -! -!/ST6 SINA0 = 0.09 -!/ST6 SINWS = 32.0 -!/ST6 SINFC = 6.0 -! -!/ST1 CALL READNL ( NDSS, 'SIN1', STATUS ) -!/ST1 WRITE (NDSO,920) STATUS -!/ST1 WRITE (NDSO,921) CINP -!/ST1 SINC1 = 28. * CINP * DAIR / DWAT -! -!/ST2 CALL READNL ( NDSS, 'SIN2', STATUS ) -!/ST2 WRITE (NDSO,920) STATUS -!/ST2 IF ( SWELLF.LT.0. .OR. SWELLF.GT.1. ) SWELLF = 1. -!/ST2 WRITE (NDSO,921) ZWND, SWELLF -!/ST2 IF ( STABSH .LT. 0.1 ) STABSH = 1. -!/ST2 IF ( CNEG*CPOS .EQ. 0. ) THEN -!/ST2 CNEG = 0. -!/ST2 CPOS = 0. -!/ST2 FNEG = 0. -!/ST2 FPOS = 0. -!/ST2 ELSE -!/ST2 CPOS = - ABS(CPOS) * ABS(CNEG)/CNEG -!/ST2 FNEG = - MAX(1.,ABS(FNEG)) -!/ST2 FPOS = FNEG * CNEG/CPOS -!/ST2 END IF -!/STAB2 WRITE (NDSO,1921) STABSH, STABOF, CNEG, CPOS, FNEG, FPOS -!/ST2 ZWIND = ZWND -!/ST2 FSWELL = SWELLF -!/ST2 SHSTAB = STABSH -!/ST2 OFSTAB = STABOF -!/ST2 CCNG = CNEG -!/ST2 CCPS = CPOS -!/ST2 FFNG = FNEG -!/ST2 FFPS = FPOS -! -!/ST3 CALL READNL ( NDSS, 'SIN3', STATUS ) -!/ST3 WRITE (NDSO,920) STATUS -!/ST3 WRITE (NDSO,921) ALPHA0, BETAMAX, SINTHP, Z0MAX, ZALP, ZWND, & -!/ST3 SWELLF -!/ST3 ZZWND = ZWND -!/ST3 AALPHA = ALPHA0 -!/ST3 BBETA = BETAMAX -!/ST3 SSINTHP = SINTHP -!/ST3 ZZ0MAX = Z0MAX -!/ST3 ZZALP = ZALP -!/ST3 SSWELLF(1) = SWELLF -! -!/ST4 CALL READNL ( NDSS, 'SIN4', STATUS ) -!/ST4 WRITE (NDSO,920) STATUS -!/ST4 WRITE (NDSO,921) ALPHA0, BETAMAX, SINTHP, Z0MAX, ZALP, ZWND, TAUWSHELTER, & -!/ST4 SWELLFPAR, SWELLF, SWELLF2, SWELLF3, SWELLF4, SWELLF5, & -!/ST4 SWELLF6, SWELLF7, Z0RAT -!/ST4 ZZWND = ZWND -!/ST4 AALPHA = ALPHA0 -!/ST4 BBETA = BETAMAX -!/ST4 SSINBR = SINBR -!/ST4 SSINTHP = SINTHP -!/ST4 ZZ0MAX = Z0MAX -!/ST4 ZZ0RAT = Z0RAT -!/ST4 ZZALP = ZALP -!/ST4 TTAUWSHELTER = TAUWSHELTER -!/ST4 SSWELLF(1) = SWELLF -!/ST4 SSWELLF(2) = SWELLF2 -!/ST4 SSWELLF(3) = SWELLF3 -!/ST4 SSWELLF(4) = SWELLF4 -!/ST4 SSWELLF(5) = SWELLF5 -!/ST4 SSWELLF(6) = SWELLF6 -!/ST4 SSWELLF(7) = SWELLF7 -!/ST4 SSWELLFPAR = SWELLFPAR -! -!/ST6 CALL READNL ( NDSS, 'SIN6', STATUS ) -!/ST6 WRITE (NDSO,920) STATUS -!/ST6 SIN6A0 = SINA0 -!/ST6 SIN6WS = SINWS -!/ST6 SIN6FC = SINFC -!/ST6 J = 1 -!/ST6 IF ( SIN6A0.LE.0. ) J = 2 -!/ST6 WRITE (NDSO,921) YESXNO(J), SIN6A0, SIN6WS, SIN6FC -! -! 6.e Define Snl. -! -!/NL0 WRITE (NDSO,922) -! -!/NL1 LAMBDA = 0.25 -!/NL1 IF ( FLTC96 ) THEN -!/NL1 NLPROP = 1.00E7 -!/NL1 ELSE IF ( FLST4 ) THEN -!/NL1 NLPROP = 2.50E7 -!/NL1 ELSE IF ( FLST6 ) THEN -!/NL1 NLPROP = 3.00E7 -!/NL1 ELSE -!/NL1 NLPROP = 2.78E7 -!/NL1 END IF -! -!/NL1 KDCONV = 0.75 -!/NL1 KDMIN = 0.50 -!/NL1 SNLCS1 = 5.5 -!/NL1 SNLCS2 = 0.833 -!/NL1 SNLCS3 = -1.25 -! -!/NL1 CALL READNL ( NDSS, 'SNL1', STATUS ) -!/NL1 WRITE (NDSO,922) STATUS -!/NL1 WRITE (NDSO,923) LAMBDA, NLPROP, KDCONV, KDMIN, & -!/NL1 SNLCS1, SNLCS2, SNLCS3 -!/NL1 SNLC1 = NLPROP / GRAV**4 -!/NL1 LAM = LAMBDA -!/NL1 KDCON = KDCONV -!/NL1 KDMN = KDMIN -!/NL1 SNLS1 = SNLCS1 -!/NL1 SNLS2 = SNLCS2 -!/NL1 SNLS3 = SNLCS3 -! -!/ST0 FACHF = 5. -!/ST1 FACHF = 4.5 -!/ST2 FACHF = 5. -!/ST3 FACHF = 5. -!/ST4 FACHF = 5. -!/ST6 FACHF = 5. -!/STX FACHF = 5. -!/NL2 IQTYPE = 2 -!/NL2 TAILNL = -FACHF -!/NL2 NDEPTH = 0 -!/NL3 NQDEF = 0 -!/NL3 MSC = 0. -!/NL3 NSC = -3.5 -!/NL3 KDFD = 0.20 -!/NL3 KDFS = 5.00 -!/NL4 INDTSA = 1 -!/NL4 ALTLP = 2 -!/NLS A34 = 0.05 -!/NLS FHFC = 1.E10 -!/NLS DNM = 0.25 -!/NLS FC1 = 1.25 -!/NLS FC2 = 1.50 -!/NLS FC3 = 6.00 -! -!/NL2 CALL READNL ( NDSS, 'SNL2', STATUS ) -!/NL2 WRITE (NDSO,922) STATUS -!/NL2 TAILNL = MIN ( MAX ( TAILNL, -5. ) , -4. ) -!/NL2 IF ( IQTYPE .EQ. 3 ) THEN -!/NL2 WRITE (NDSO,923) 'Shallow water', TAILNL -!/NL2 ELSE IF ( IQTYPE .EQ. 2 ) THEN -!/NL2 WRITE (NDSO,923) 'Deep water with scaling', TAILNL -!/NL2 ELSE -!/NL2 WRITE (NDSO,923) 'Deep water', TAILNL -!/NL2 IQTYPE = 1 -!/NL2 END IF -! -!/NL2 IF ( IQTYPE .NE. 3 ) THEN -!/NL2 NDEPTH = 1 -!/NL2 ALLOCATE ( MPARS(1)%SNLPS%DPTHNL(NDEPTH) ) -!/NL2 DPTHNL => MPARS(1)%SNLPS%DPTHNL -!/NL2 DPTHNL = 1000. -!/NL2 ELSE -!/NL2 IF ( NDEPTH .EQ. 0 ) NDEPTH = 7 -!/NL2 NDEPTH = MAX ( 1 , NDEPTH ) -!/NL2 ALLOCATE ( MPARS(1)%SNLPS%DPTHNL(NDEPTH) ) -!/NL2 DPTHNL => MPARS(1)%SNLPS%DPTHNL -!/NL2 DPTHNL(1) = 640. -!/NL2 DPTHNL(NDEPTH) = 10. -!/NL2 IF ( NDEPTH .GT. 1 ) THEN -!/NL2 DPTFAC = (DPTHNL(NDEPTH)/DPTHNL(1))**(1./(REAL(NDEPTH-1))) -!/NL2 DO IDEPTH=2, NDEPTH-1 -!/NL2 DPTHNL(IDEPTH) = DPTFAC*DPTHNL(IDEPTH-1) -!/NL2 END DO -!/NL2 END IF -!/NL2 CALL READNL ( NDSS, 'ANL2', STATUS ) -!/NL2 WRITE (NDSO,1923) NDEPTH, DPTHNL(1:MIN(5,NDEPTH)) -!/NL2 IF (NDEPTH .GT. 5 )WRITE (NDSO,2923) DPTHNL(6:NDEPTH) -!/NL2 END IF -!/NL2 WRITE (NDST,*) -!/NL2 IQTPE = IQTYPE -!/NL2 NDPTHS = NDEPTH -!/NL2 NLTAIL = TAILNL -! -!/NL3 CALL READNL ( NDSS, 'SNL3', STATUS ) -!/NL3 WRITE (NDSO,922) STATUS -!!/NL3 MSC = MAX ( 0. , MIN ( 8. , MSC ) ) ! Disabled HLT ca. 2009 -!/NL3 KDFD = MAX ( 0.001 , MIN ( 10. , KDFD ) ) -!/NL3 KDFS = MAX ( KDFD , MIN ( 10. , KDFS ) ) -!/NL3 WRITE (NDSO,923) MSC, NSC, KDFD, KDFS -! -!/NL3 NQDEF = MAX ( 0 , NQDEF ) -!/NL3 IF ( NQDEF .EQ. 0 ) THEN -!/NL3 NQDEF = 1 -!/NL3 QPARMS(1:5) = [ 0.25 , 0.00, -1., 1.E7, 0.00 ] -!/NL3 ELSE -!/NL3 DO J=1, NQDEF -!/NL3 QPARMS((J-1)*5+1:J*5) = [ 0.25, 0.00, -1., 1.E7, 1.E6 ] -!/NL3 END DO -!/NL3 CALL READNL ( NDSS, 'ANL3', STATUS ) -!/NL3 END IF -!/NL3 DO J=1, NQDEF -!/NL3 QPARMS((J-1)*5+1) = MAX(0.,MIN (LAMMAX,QPARMS((J-1)*5+1))) -!/NL3 QPARMS((J-1)*5+2) = MAX(0.,MIN (QPARMS((J-1)*5+1), & -!/NL3 QPARMS((J-1)*5+2))) -!/NL3 QPARMS((J-1)*5+3) = MIN (DELTHM,QPARMS((J-1)*5+3)) -!/NL3 QPARMS((J-1)*5+4) = MAX (0.,QPARMS((J-1)*5+4)) -!/NL3 QPARMS((J-1)*5+5) = MAX (0.,QPARMS((J-1)*5+5)) -!/NL3 END DO -!/NL3 WRITE (NDSO,1923) NQDEF -!/NL3 WRITE (NDSO,2923) QPARMS(1:NQDEF*5) -!/NL3 WRITE (NDSO,*) -!/NL3 SNLNQ = NQDEF -!/NL3 SNLMSC = MSC -!/NL3 SNLNSC = NSC -!/NL3 SNLSFD = SQRT ( KDFD * TANH(KDFD) ) -!/NL3 SNLSFS = SQRT ( KDFS * TANH(KDFS) ) -!/NL3 ALLOCATE ( MPARS(1)%SNLPS%SNLL(NQDEF), & -!/NL3 MPARS(1)%SNLPS%SNLM(NQDEF), & -!/NL3 MPARS(1)%SNLPS%SNLT(NQDEF), & -!/NL3 MPARS(1)%SNLPS%SNLCD(NQDEF), & -!/NL3 MPARS(1)%SNLPS%SNLCS(NQDEF) ) -!/NL3 SNLL => MPARS(1)%SNLPS%SNLL -!/NL3 SNLL = QPARMS(1:NQDEF*5:5) -!/NL3 SNLM => MPARS(1)%SNLPS%SNLM -!/NL3 SNLM = QPARMS(2:NQDEF*5:5) -!/NL3 SNLT => MPARS(1)%SNLPS%SNLT -!/NL3 SNLT = QPARMS(3:NQDEF*5:5) -!/NL3 SNLCD => MPARS(1)%SNLPS%SNLCD -!/NL3 SNLCD = QPARMS(4:NQDEF*5:5) -!/NL3 SNLCS => MPARS(1)%SNLPS%SNLCS -!/NL3 SNLCS = QPARMS(5:NQDEF*5:5) -! -!/NL4 CALL READNL ( NDSS, 'SNL4', STATUS ) -!/NL4 WRITE (NDSO,922) STATUS -!/NL4 WRITE (NDSO,923) INDTSA, ALTLP -!/NL4 ITSA = INDTSA -!/NL4 IALT = ALTLP -! -!/NLS CALL READNL ( NDSS, 'SNLS', STATUS ) -!/NLS WRITE (NDSO,9922) STATUS -!/NLS A34 = MAX ( 0. , MIN ( A34 , ABMAX ) ) -!/NLS FHFC = MAX ( 0. , FHFC ) -!/NLS DNM = MAX ( 0., DNM ) -!/NLS WRITE (NDSO,9923) A34, (XFR-1.)*A34, FHFC, DNM, FC1, FC2, FC3 -!/NLS CNLSA = A34 -!/NLS CNLSC = FHFC -!/NLS CNLSFM = DNM -!/NLS CNLSC1 = FC1 -!/NLS CNLSC2 = FC2 -!/NLS CNLSC3 = FC3 -! -! 6.f Define Sds. -! -!/ST0 WRITE (NDSO,924) -!/STX WRITE (NDSO,924) -! -!/ST1 CDIS = -2.36E-5 -!/ST1 APM = 3.02E-3 -!/ST2 SDSA0 = 4.8 -!/ST2 SDSA1 = 1.7e-4 -!/ST2 SDSA2 = 2.0 -!/ST2 SDSB0 = 0.3e-3 -!/ST2 SDSB1 = 0.47 -!/ST2 PHIMIN = 0.003 -!/ST2 SDSALN = 0.002 -!/ST2 FPIMIN = 0.009 -!/ST3 SDSC1 = -2.1 !! This is Bidlot et al. 2005, Otherwise WAM4 uses -4.5 -!/ST3 WNMEANP = 0.5 !! This is Bidlot et al. 2005, Otherwise WAM4 uses -0.5 -!/ST3 FXFM3 = 2.5 -!/ST3 FXPM3 = 4. -!/ST3 WNMEANPTAIL = 0.5 -!/ST3 SDSDELTA1 = 0.4 !! This is Bidlot et al. 2005, Otherwise WAM4 uses 0.5 -!/ST3 SDSDELTA2 = 0.6 !! This is Bidlot et al. 2005, Otherwise WAM4 uses 0.5 -! -!/ST4 WNMEANP = 0.5 ! taken from Bidlot et al. 2005 -!/ST4 FXFM3 = 2.5 -!/ST4 FXFMAGE = 0. -!/ST4 FXPM3 = 4. -!/ST4 WNMEANPTAIL = -0.5 -!/ST4 SDSBCHOICE =1 ! 1: Ardhuin et al., 2: Filipot & Ardhuin, 3: Romero -!/ST4 SDSC2 = -2.2E-5 ! -3.8 for Romero -!/ST4 SDSCUM = -0.40344 -!/ST4 SDSC4 = 1. -!/ST4 SDSC5 = 0. -!/ST4 SDSNUW = 0. -!/ST4 SDSC6 = 0.3 -!/ST4 SDSBR = 0.90E-3 ! 0.005 for Romero -!/ST4 SDSBRFDF = 0 -!/ST4 SDSBRF1 = 0.5 -!/ST4 SDSP = 2. ! this is now fixed in w3sds4, should be cleaned up -!/ST4 SDSDTH = 80. -!/ST4 SDSCOS = 2. -!/ST4 SDSISO = 2 -!/ST4 SDSBM0 = 1. -!/ST4 SDSBM1 = 0. -!/ST4 SDSBM2 = 0. -!/ST4 SDSBM3 = 0. -!/ST4 SDSBM4 = 0. -!/ST4 SDSBCK = 0. -!/ST4 SDSABK = 1.5 -!/ST4 SDSPBK = 4. -!/ST4 SDSBINT = 0.3 -!/ST4 SDSHCK = 1.5 -!/ST4 WHITECAPWIDTH = 0.3 -!/ST4 SDSSTRAIN = 0. -!/ST4 SDSFACMTF = 400 ! MTF factor for Lambda , Romero (2019) -!/ST4 SDSSTRAINA = 15. -!/ST4 SDSSTRAIN2 = 0. -!/ST4 WHITECAPDUR = 0.56 ! breaking duration factor -!/ST4! b (strength of breaking) -!/ST4 SDSBT = 1.100E-3 ! B_T (sturation threshold for dissipation rate b) -!/ST4! Lambda parameters -!/ST4 SDSL = 3.5000e-05 ! L scaling -!/ST4! MTF -!/ST4 SPMSS = 0.5 ! cmss^SPMSS -!/ST4 SDSNMTF = 1.5 ! MTF power -!/ST4 SDSCUMP = 2. -!/ST4! MW -!/ST4 SDSMWD = .9 ! new AFo -!/ST4 SDSMWPOW = 1. ! (k )^pow -!/ST4 SDKOF = 3. ! ko factor such that ko= g (SDKOF/(28 us))^2 -! -!/ST6 SDSET = .TRUE. -!/ST6 SDSA1 = 4.75E-06 -!/ST6 SDSP1 = 4 -!/ST6 SDSA2 = 7.00E-05 -!/ST6 SDSP2 = 4 -!/ST6 CSTB1 = .FALSE. -!/ST6 SWLB1 = 0.41E-02 -! -!/ST1 CALL READNL ( NDSS, 'SDS1', STATUS ) -!/ST1 WRITE (NDSO,924) STATUS -!/ST1 WRITE (NDSO,925) CDIS, APM -!/ST1 SDSC1 = TPI * CDIS / APM**2 -! -!/ST2 CALL READNL ( NDSS, 'SDS2', STATUS ) -!/ST2 WRITE (NDSO,924) STATUS -!/ST2 IF ( PHIMIN .LE. 0. ) THEN -!/ST2 SDSB2 = 0. -!/ST2 SDSB3 = 0. -!/ST2 PHIMIN = SDSB0 + SDSB1*FPIMIN -!/ST2 ELSE -!/ST2 FPIA = ( PHIMIN - SDSB0 ) / SDSB1 -!/ST2 IF ( FPIA .LT. FPIMIN ) THEN -!/ST2 SDSB3 = 4. -!/ST2 SDSB2 = FPIMIN**SDSB3 * (PHIMIN-SDSB0-SDSB1*FPIMIN) -!/ST2 ELSE -!/ST2 FPIB = MAX ( FPIA-0.0025 , FPIMIN ) -!/ST2 DPHID = MAX ( PHIMIN - SDSB0 - SDSB1*FPIB , 1.E-15 ) -!/ST2 SDSB3 = MIN ( 10. , SDSB1*FPIB / DPHID ) -!/ST2 SDSB2 = FPIB**SDSB3 * DPHID -!/ST2 FPIMIN = FPIB -!/ST2 END IF -!/ST2 END IF -!/ST2 WRITE (NDSO,925) SDSA0, SDSA1, SDSA2, & -!/ST2 SDSB0, SDSB1, SDSB2, SDSB3, FPIMIN, PHIMIN -!/ST2 CDSA0 = SDSA0 -!/ST2 CDSA1 = SDSA1 -!/ST2 CDSA2 = SDSA2 -!/ST2 CDSB0 = SDSB0 -!/ST2 CDSB1 = SDSB1 -!/ST2 CDSB2 = SDSB2 -!/ST2 CDSB3 = SDSB3 -! -!/ST3 CALL READNL ( NDSS, 'SDS3', STATUS ) -!/ST3 WRITE (NDSO,924) STATUS -!/ST3 WRITE (NDSO,925) SDSC1, WNMEANP, SDSDELTA1, & -!/ST3 SDSDELTA2 -!/ST3 SSDSC1 = SDSC1 -!/ST3 WWNMEANP = WNMEANP -!/ST3 FFXFM = FXFM3 * TPI -!/ST3 FFXPM = FXPM3 * GRAV / 28. -!/ST3 WWNMEANPTAIL = WNMEANPTAIL -!/ST3 DDELTA1 = SDSDELTA1 -!/ST3 DDELTA2 = SDSDELTA2 -! -!/ST4 CALL READNL ( NDSS, 'SDS4', STATUS ) -!/ST4 WRITE (NDSO,924) STATUS -!/ST4 WRITE (NDSO,925) SDSC2, SDSBCK, SDSCUM, WNMEANP -!/ST4 SSDSC(1) = REAL(SDSBCHOICE) -!/ST4 SSDSC(2) = SDSC2 -!/ST4 SSDSC(3) = SDSCUM -!/ST4 SSDSC(4) = SDSC4 -!/ST4 SSDSC(5) = SDSC5 -!/ST4 SSDSC(6) = SDSC6 -!/ST4 SSDSC(7) = WHITECAPWIDTH -!/ST4 SSDSC(8) = SDSSTRAIN ! Straining constant ... -!/ST4 SSDSC(9) = SDSL -!/ST4 SSDSC(10) = SDSSTRAINA*NTH/360. ! angle Aor enhanced straining -!/ST4 SSDSC(11) = SDSSTRAIN2 ! straining constant for directional part -!/ST4 SSDSC(12) = SDSBT -!/ST4 SSDSC(13) = SDSMWD -!/ST4 SSDSC(14) = SPMSS -!/ST4 SSDSC(15) = SDSMWPOW -!/ST4 SSDSC(16) = SDKOF -!/ST4 SSDSC(17) = WHITECAPDUR -!/ST4 SSDSC(18) = SDSFACMTF -!/ST4 SSDSC(19) = SDSNMTF -!/ST4 SSDSC(20) = SDSCUMP -!/ST4 SSDSC(21) = SDSNUW -! -!/ST4 SSDSBR = SDSBR -!/ST4 SSDSBRF1 = SDSBRF1 -!/ST4 SSDSBRFDF= SDSBRFDF -!/ST4 SSDSBM(0) = SDSBM0 -!/ST4 SSDSBM(1) = SDSBM1 -!/ST4 SSDSBM(2) = SDSBM2 -!/ST4 SSDSBM(3) = SDSBM3 -!/ST4 SSDSBM(4) = SDSBM4 -!/ST4 SSDSBT = SDSBT -!/ST4 SSDSISO = SDSISO -!/ST4 SSDSCOS = SDSCOS -!/ST4 SSDSP = SDSP -!/ST4 SSDSDTH = SDSDTH -!/ST4 WWNMEANP = WNMEANP -!/ST4 FFXFM = FXFM3 * TPI -!/ST4 FFXFA = FXFMAGE * TPI -!/ST4 FFXPM = FXPM3 * GRAV / 28. -!/ST4 WWNMEANPTAIL = WNMEANPTAIL -!/ST4 SSDSBCK = SDSBCK -!/ST4 SSDSABK = SDSABK -!/ST4 SSDSPBK = SDSPBK -!/ST4 SSDSBINT = SDSBINT -!/ST4 SSDSHCK = SDSHCK -! -!/ST6 CALL READNL ( NDSS, 'SDS6', STATUS ) -!/ST6 WRITE (NDSO,924) STATUS -!/ST6 SDS6ET = SDSET -!/ST6 SDS6A1 = SDSA1 -!/ST6 SDS6P1 = SDSP1 -!/ST6 SDS6A2 = SDSA2 -!/ST6 SDS6P2 = SDSP2 -!/ST6 J = 2 -!/ST6 IF (SDSET) J = 1 -!/ST6 WRITE (NDSO,925) YESXNO(J), YESXNO(3-J), SDS6A1, SDS6P1, SDS6A2, SDS6P2 -!/ST6 -!/ST6 CALL READNL ( NDSS, 'SWL6', STATUS ) -!/ST6 WRITE (NDSO,937) STATUS -!/ST6 J = 1 -!/ST6 SWL6S6 = SWLB1.GT.0.0 -!/ST6 IF (.NOT.SWL6S6) J = 2 -!/ST6 SWL6B1 = SWLB1 -!/ST6 SWL6CSTB1 = CSTB1 -!/ST6 IF (CSTB1) THEN -!/ST6 WRITE (NDSO,940) YESXNO(J), '(constant) ' ,SWL6B1 -!/ST6 ELSE -!/ST6 WRITE (NDSO,940) YESXNO(J), '(steepness dependent)' ,SWL6B1 -!/ST6 END IF -! -! 6.g Define Sbt. -! -!/BT0 WRITE (NDSO,926) -!/BT4 WRITE (NDSO,926) -!/BTX WRITE (NDSO,926) -! -!/BT1 GAMMA = -0.067 -! -!/BT1 CALL READNL ( NDSS, 'SBT1', STATUS ) -!/BT1 WRITE (NDSO,926) STATUS -!/BT1 WRITE (NDSO,927) GAMMA -!/BT1 SBTC1 = 2. * GAMMA / GRAV -! -!/BT4 SEDMAPD50=.FALSE. -!/BT4 SED_D50_UNIFORM=2.E-4 ! default grain size: medium sand 200 microns -!/BT4 RIPFAC1=0.4 ! A1 in Ardhuin et al. 2003 -!/BT4 RIPFAC2=-2.5 ! A2 in Ardhuin et al. 2003 -!/BT4 RIPFAC3=1.2 ! A3 in Ardhuin et al. 2003 -!/BT4 RIPFAC4=0.05 ! A4 in Ardhuin et al. 2003 -!/BT4 SIGDEPTH=0.05 -!/BT4 BOTROUGHMIN=0.01 -!/BT4 BOTROUGHFAC=1.00 -!/BT4 CALL READNL ( NDSS, 'SBT4', STATUS ) -!/BT4 WRITE (NDSO,926) STATUS -!/BT4 WRITE (NDSO,927) SEDMAPD50, SED_D50_UNIFORM, & -!/BT4 RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4,SIGDEPTH, & -!/BT4 BOTROUGHMIN, BOTROUGHFAC -!/BT4 SBTCX(1)=RIPFAC1 -!/BT4 SBTCX(2)=RIPFAC2 -!/BT4 SBTCX(3)=RIPFAC3 -!/BT4 SBTCX(4)=RIPFAC4 -!/BT4 SBTCX(5)=SIGDEPTH -!/BT4 SBTCX(6)=BOTROUGHMIN -!/BT4 SBTCX(7)=BOTROUGHFAC -! -! -! 6.h Define Sdb. -! -!/DB0 WRITE (NDSO,928) -!/DBX WRITE (NDSO,928) -! -!/DB1 BJALFA = 1. -!/DB1 BJGAM = 0.73 -!/DB1 BJFLAG = .TRUE. -! -!/DB1 CALL READNL ( NDSS, 'SDB1', STATUS ) -!/DB1 WRITE (NDSO,928) STATUS -!/DB1 BJALFA = MAX ( 0. , BJALFA ) -!/DB1 BJGAM = MAX ( 0. , BJGAM ) -!/DB1 WRITE (NDSO,929) BJALFA, BJGAM -!/DB1 IF ( BJFLAG ) THEN -!/DB1 WRITE (NDSO,*) ' Using Hmax/d ratio only.' -!/DB1 ELSE -!/DB1 WRITE (NDSO,*) & -!/DB1 ' Using Hmax/d in Miche style formulation.' -!/DB1 END IF -!/DB1 WRITE (NDSO,*) -!/DB1 SDBC1 = BJALFA -!/DB1 SDBC2 = BJGAM -!/DB1 FDONLY = BJFLAG -! -! -!/UOST UOSTFILELOCAL = 'obstructions_local.'//ADJUSTL(TRIM(GNAME))//'.in' -!/UOST UOSTFILESHADOW = 'obstructions_shadow.'//ADJUSTL(TRIM(GNAME))//'.in' -!/UOST UOSTFACTORLOCAL = 1 -!/UOST UOSTFACTORSHADOW = 1 -!/UOST CALL READNL ( NDSS, 'UOST', STATUS ) -!/UOST WRITE (NDSO,4500) STATUS -!/UOST WRITE (NDSO,4501) ADJUSTL(TRIM(UOSTFILELOCAL)), ADJUSTL(TRIM(UOSTFILESHADOW)), & -!/UOST UOSTFACTORLOCAL, UOSTFACTORSHADOW -! -! 6.i Define Str. -! -!/TR0 WRITE (NDSO,930) -!/TRX WRITE (NDSO,930) -! -! 6.j Define Sbs. -! -!/BS0 WRITE (NDSO,932) -!/BS1 WRITE (NDSO,932) -!/BSX WRITE (NDSO,932) -! -! 6.k Define Sxx and Sic. -! -! !/XX0 WRITE (NDSO,934) -!/XXX WRITE (NDSO,934) -! -!/IC1 WRITE (NDSO,935) -!/IC1 WRITE(NDSO,'(A/A)')' Sice will be calculated using ' & -!/IC1 //'user-specified ki values.',' Required ' & -!/IC1 //'field input: ice parameter 1.' -! -!/IC2 WRITE (NDSO,935) -!/IC2 WRITE(NDSO,'(A/A)')' Sice will be calculated using ' & -!/IC2 //'under-ice boundary layer method.',' Required ' & -!/IC2 //'field input: ice parameters 1 and 2.' -! -!/IC3 WRITE (NDSO,935) -!/IC3 WRITE(NDSO,'(A/A)')' Sice will be calculated using '& -!/IC3 //'Wang and Shen method.',' '& -!/IC3 //'Required field input: ice parameters 1, 2, 3 and 4.' -! -!/IC4 WRITE (NDSO,935) -!/IC4 WRITE(NDSO,'(A/A)')' Sice will be calculated using '& -!/IC4 //'Empirical method.',' '& -!/IC4 //'Required field input: ice parameters (varies).' -! -!/IC5 WRITE (NDSO,935) -!/IC5 WRITE(NDSO,'(A/A/)')' Sice will be calculated using '& -!/IC5 //'Mosig et al. method.',' '& -!/IC5 //'Required field input: ice parameters 1, 2, 3 and 4.' -! -! 6.l Read unstructured data -! initialisation of logical related to unstructured grid - UGOBCAUTO = .TRUE. - UGBCCFL = .TRUE. - UGOBCDEPTH= -10. - UGOBCOK = .FALSE. - UGOBCFILE = 'unset' - EXPFSN = .TRUE. - EXPFSPSI = .FALSE. - EXPFSFCT = .FALSE. - IMPFSN = .FALSE. - IMPTOTAL = .FALSE. - EXPTOTAL = .FALSE. - IMPREFRACTION = .FALSE. - IMPFREQSHIFT = .FALSE. - IMPSOURCE = .FALSE. - SETUP_APPLY_WLV = .FALSE. - SOLVERTHR_SETUP=1E-14 - CRIT_DEP_SETUP=0.1 - JGS_TERMINATE_MAXITER = .TRUE. - JGS_TERMINATE_DIFFERENCE = .TRUE. - JGS_TERMINATE_NORM = .FALSE. - JGS_LIMITER = .FALSE. - JGS_BLOCK_GAUSS_SEIDEL = .TRUE. - JGS_USE_JACOBI = .TRUE. - JGS_MAXITER=100 - JGS_PMIN = 1 - JGS_DIFF_THR = 1.E-10 - JGS_NORM_THR = 1.E-20 - JGS_NLEVEL = 0 - JGS_SOURCE_NONLINEAR = .FALSE. -! read data from the unstructured devoted namelist - CALL READNL ( NDSS, 'UNST', STATUS ) - - B_JGS_USE_JACOBI = JGS_USE_JACOBI - B_JGS_TERMINATE_MAXITER = JGS_TERMINATE_MAXITER - B_JGS_TERMINATE_DIFFERENCE = JGS_TERMINATE_DIFFERENCE - B_JGS_TERMINATE_NORM = JGS_TERMINATE_NORM - B_JGS_LIMITER = JGS_LIMITER - B_JGS_BLOCK_GAUSS_SEIDEL = JGS_BLOCK_GAUSS_SEIDEL - B_JGS_MAXITER = JGS_MAXITER - B_JGS_PMIN = JGS_PMIN - B_JGS_DIFF_THR = JGS_DIFF_THR - B_JGS_NORM_THR = JGS_NORM_THR - B_JGS_NLEVEL = JGS_NLEVEL - B_JGS_SOURCE_NONLINEAR = JGS_SOURCE_NONLINEAR - - IF ((EXPFSN .eqv. .FALSE.).and.(EXPFSPSI .eqv. .FALSE.) & - .and.(EXPFSFCT .eqv. .FALSE.) & - .and.(IMPFSN .eqv. .FALSE.) & - .and.(EXPTOTAL .eqv. .FALSE.) & - .and.(IMPTOTAL .eqv. .FALSE.)) THEN - EXPFSN=.TRUE. ! This is the default scheme ... - END IF - nbSel=0 - - IF (EXPFSN) nbSel=nbSel+1 - IF (EXPFSPSI) nbSel=nbSel+1 - IF (EXPFSFCT) nbSel=nbSel+1 - IF (IMPFSN) nbSel=nbSel+1 - IF (IMPTOTAL) nbSel=nbSel+1 - IF (EXPTOTAL) nbSel=nbSel+1 - - IF (GTYPE .EQ. UNGTYPE) THEN - IF (nbSel .ne. 1) THEN - WRITE(NDSE,*) ' *** WAVEWATCH III ERROR IN WW3_GRID:' - IF (nbSel .gt. 1) THEN - WRITE (NDSE,*) 'More than one scheme selected' - ELSE IF (nbSel .eq. 0) THEN - WRITE (NDSE,*) 'no scheme selected' - END IF - WRITE (NDSE,*)'Select only one of EXPFSN, EXPFSFCT, EXPFSPSI' - WRITE (NDSE,*)'IMPFSN, IMPTOTAL' - CALL EXTCDE ( 30 ) - END IF - END IF -! -! 6.m Select propagation scheme -! - WRITE (NDSO,950) -! - NRPROP = 0 - FLPROP = .TRUE. - PNAME = ' ' -!/PR0 PNAME = 'Not defined ' -!/PR0 NRPROP = NRPROP + 1 -!/PR0 FLPROP = .FALSE. -!/PR1 PNAME = 'First order upstream ' -!/PR1 NRPROP = NRPROP + 1 -!/UQ PNAME = '3rd order UQ' -!/UNO PNAME = '2nd order UNO' - J = LEN_TRIM(PNAME) -!/PR2 PNAME = PNAME(1:J)//' + GSE diffusion ' -!/PR2 NRPROP = NRPROP + 1 -!/PR3 PNAME = PNAME(1:J)//' + GSE averaging ' -!/PR3 NRPROP = NRPROP + 1 -! -!/SMC PNAME = 'UNO2 on SMC grid + diffusion ' -!/SMC NRPROP = NRPROP + 1 -! -!/PRX PNAME = 'Experimental ' -!/PRX NRPROP = NRPROP + 1 -! - IF ( (FLCX.OR.FLCY.OR.FLCTH.OR.FLCK) .AND. .NOT. FLPROP ) THEN - WRITE (NDSE,1030) - CALL EXTCDE ( 20 ) - END IF -! - IF ( .NOT.(FLCX.OR.FLCY.OR.FLCTH.OR.FLCK) .AND. FLPROP ) THEN - WRITE (NDSE,1031) - END IF -! - IF ( NRPROP.EQ.0 ) THEN - WRITE (NDSE,1032) - CALL EXTCDE ( 21 ) - END IF -! - IF ( NRPROP .GT. 1 ) THEN - WRITE (NDSE,1033) NRPROP - CALL EXTCDE ( 22 ) - END IF -! -! 6.m Parameters for propagation scheme -! - WRITE (NDSO,951) PNAME -! - CFLTM = 0.7 -! -!/PR2 DTIME = 0. -!/PR2 LATMIN = 70. -! -!/SMC !Li Default values of smc grid parameters. JGLi23Nov2015 -!/SMC LvSMC = 1 -!/SMC ISHFT = 0 -!/SMC JEQT = 0 -!/SMC NBISMC = 0 -!/SMC DTIME = 0.0 -!/SMC LATMIN = 86.0 -!/SMC RFMAXD = 80.0 -!/SMC UNO3 = .FALSE. -!/SMC AVERG = .FALSE. -!/SMC SEAWND = .FALSE. -! -!/PR3 WDTHCG = 1.5 -!/PR3 WDTHTH = WDTHCG -! -!/PR1 CALL READNL ( NDSS, 'PRO1', STATUS ) -!/PR1 IF ( STATUS(18:18) .EQ. ':' ) STATUS(18:18) = ' ' -!/PR1 WRITE (NDSO,952) STATUS(1:18) -!/PR1 CFLTM = MAX ( 0. , CFLTM ) -!/PR1 WRITE (NDSO,953) CFLTM -! -!/PR2 CALL READNL ( NDSS, 'PRO2', STATUS ) -!/PR2 IF ( STATUS(18:18) .EQ. ':' ) STATUS(18:18) = ' ' -!/PR2 WRITE (NDSO,952) STATUS(1:18) -!/PR2 CFLTM = MAX ( 0. , CFLTM ) -!/PR2 DTIME = MAX ( 0. , DTIME ) -!/PR2 LATMIN = MIN ( 89. , ABS(LATMIN) ) -!/PR2 CLATMN = COS ( LATMIN * DERA ) -!/PR2 IF ( DTIME .EQ. 0. ) THEN -!/PR2 WRITE (NDSO,953) CFLTM, LATMIN -!/PR2 ELSE -!/PR2 WRITE (NDSO,954) CFLTM, DTIME/3600., LATMIN -!/PR2 END IF -!/PR2 DTME = DTIME -! -!/SMC CALL READNL ( NDSS, 'PSMC', STATUS ) -!/SMC IF ( STATUS(18:18) .EQ. ':' ) STATUS(18:18) = ' ' -!/SMC WRITE (NDSO,952) STATUS(1:18) -!/SMC CFLTM = MAX ( 0. , CFLTM ) -!/SMC DTIME = MAX ( 0. , DTIME ) -!/SMC LATMIN = MIN ( 89. , ABS(LATMIN) ) -!/SMC CLATMN = COS ( LATMIN * DERA ) -!/SMC RFMAXD = MIN ( 80.0, ABS(RFMAXD) ) -!/SMC IF ( DTIME .EQ. 0. ) THEN -!/SMC WRITE (NDSO,953) CFLTM, LATMIN, RFMAXD -!/SMC ELSE -!/SMC WRITE (NDSO,954) CFLTM, DTIME/3600., LATMIN, RFMAXD -!/SMC END IF -!/SMC DTME = DTIME -!/SMC Refran = RFMAXD * DERA -!/SMC FUNO3 = UNO3 -!/SMC FVERG = AVERG -!/SMC FSWND = SEAWND -!/SMC IF( UNO3 ) WRITE (NDSO,*) & -!/SMC " Advection use 3rd order UNO3 instead of UNO2 scheme." -!/SMC IF( AVERG ) WRITE (NDSO,*) & -!/SMC " Extra 1-2-1 average smoothing activated on SMC grid." -!/SMC IF( SEAWND ) WRITE (NDSO,*) & -!/SMC " Sea-point only wind input is required for SMC grid. " -!/SMC NRLv = LvSMC -!/SMC WRITE (NDSO,4001) NRLv -!/SMC WRITE (NDSO,4002) JEQT -!/SMC WRITE (NDSO,4302) ISHFT -!/SMC WRITE (NDSO,4003) NBISMC -! -!/PR3 CALL READNL ( NDSS, 'PRO3', STATUS ) -!/PR3 IF ( STATUS(18:18) .EQ. ':' ) STATUS(18:18) = ' ' - IF (GTYPE.NE.UNGTYPE) THEN -!/PR3 WRITE (NDSO,952) STATUS(1:18) -!/PR3 CFLTM = MAX ( 0. , CFLTM ) -!/PR3 WRITE (NDSO,953) CFLTM, WDTHCG -!/PR3 IF ( WDTHCG*(XFR-1.) .GT. 1. ) WRITE (NDSO,955) 1./(XFR-1.) -!/PR3 WRITE (NDSO,954) WDTHTH -!/PR3 IF ( WDTHTH*DTH .GT. 1. ) WRITE (NDSO,955) 1./DTH -!/PR3 WRITE (NDSO,*) - ENDIF -!/PR3 WDCG = WDTHCG -!/PR3 WDTH = WDTHTH -! - CTMAX = CFLTM -! -!/RTD ! Set/ read in rotation values - these will be written out -!/RTD ! later with the rest of the grid info -!/RTD ! Default is a non-rotated lat-lon grid -!/RTD PLAT = 90. -!/RTD PLON = -180. -!/RTD UNROT = .FALSE. -!/RTD CALL READNL ( NDSS, 'ROTD', STATUS ) -!/RTD PLON = MOD( PLON + 180., 360. ) - 180. -!/RTD ! Ensure that a grid with pole at the geographic North is standard lat-lon -!/RTD IF ( PLAT == 90. .AND. ( PLON /= -180. .OR. UNROT ) ) THEN -!/RTD WRITE( NDSE, 1052 ) -!/RTD CALL EXTCDE ( 33 ) -!/RTD ENDIF -!/RTD ! Default poles of output b. c. are non-rotated: -!/RTD BPLAT = 90. -!/RTD BPLON = -180. -!/RTD CALL READNL ( NDSS, 'ROTB', STATUS ) -!/RTD ! A b. c. dest. grid with pole at the geographic North must be non-rotated -!/RTD DO I=1,9 -!/RTD IF ( BPLAT(I) == 90. ) THEN -!/RTD ! Require BPLON(I) == -180., but don't blaim the user if BPLON(I) == 180. -!/RTD IF ( BPLON(I) == 180. ) BPLON(I) = -180. -!/RTD IF ( BPLON(I) == -180. ) CYCLE -!/RTD END IF -!/RTD IF ( BPLAT(I) < 90. ) CYCLE -!/RTD WRITE( NDSE, 1053 ) -!/RTD CALL EXTCDE ( 34 ) -!/RTD END DO -! -! 6.n Set miscellaneous parameters (ice, seeding, numerics ... ) -! - CICE0 = 0.5 - CICEN = 0.5 - LICE = 0. - ICEHFAC= 1.0 - ICEHMIN= 0.2 ! the 0.2 value is arbitrary and needs to be tuned. - ICEHINIT= 0.5 - ICESLN = 1.0 - ICEWIND= 1.0 - ICESNL = 1.0 - ICESDS = 1.0 - ICEHDISP= 0.6 ! Prevent from convergence crash in w3dispmd in the presence of ice, should be tuned - ICEDDISP= 80 - ICEFDISP= 2 - GSHIFT = 0.0D0 - PMOVE = 0.5 - XSEED = 1. - FLAGTR = 0 - XP = 0.15 - XR = 0.10 - XFILT = 0.05 - IHM = 100 - HSPM = 0.05 - WSM = 1.7 - WSC = 0.333 - FLC = .TRUE. - TRCKCMPR = .TRUE. - NOSW = 5 -! -! Gas fluxes -! - AIRCMIN = 2.0 ! cmin for whitecap coverage and entrained air - AIRGB = 0.2 ! volume of entrained air constant (Deike et al. 2017) -! -!/NCO/! NCEP operations retains first three swell systems. -!/NCO NOSW=3 - PTM = 1 ! Default to standard WW3 partitioning. C. Bunney - PTFC = 0.1 ! Part. method 5 cutoff freq default. C. Bunney - FMICHE = 1.6 - RWNDC = 1. - WCOR1 = 99. - WCOR2 = 0. - BTBET = 1.2 ! β for c / [U cos(θ - φ)] < β -! Variables for Space-Time Extremes -! Default negative values make w3iogomd switch off space-time extremes -! forces user to provide NAMELIST if wanting to compute STE parameters - STDX = -1. - STDY = -1. - STDT = -1. - ICEDISP = .FALSE. - CALTYPE = 'standard' -! Variables for 3D array output - E3D=0 - I1E3D=1 - I2E3D=NK - P2SF = 0 - I1P2SF = 1 - I2P2SF = 15 - US3D = 0 - I1US3D = 1 - I2US3D = NK - USSP=0 - IUSSP=1 - STK_WN(:)=0.0 - STK_WN(1)=TPI/100. !Set default decay of 100 m for Stokes drift - TH1MF=0 - I1TH1M=1 - I2TH1M=NK - STH1MF=0 - I1STH1M=1 - I2STH1M=NK - TH2MF=0 - I1TH2M=1 - I2TH2M=NK - STH2MF=0 - I1STH2M=1 - I2STH2M=NK -! - FACBERG=1. -!/IS0 WRITE (NDSO,944) -!/IS1 ISC1 = 1. -!/IS1 ISC2 = 0. -!/IS1 CALL READNL ( NDSS, 'SIS1', STATUS ) -!/IS1 WRITE (NDSO,945) STATUS -!/IS1 WRITE (NDSO,946) ISC1, ISC2 -!/IS1 IS1C1 = ISC1 -!/IS1 IS1C2 = ISC2 -!/IS2 ISC1 = 1. -!/IS2 IS2C2 = 0. ! 0.025 -!/IS2 IS2C3 = 0. ! 2.4253 -!/IS2 IS2CONC = 0. -!/IS2 IS2BACKSCAT = 1. -!/IS2 IS2BREAK = .FALSE. -!/IS2 IS2BREAKF = 3.6 -!/IS2 IS2FLEXSTR=6.00E+05 ! value used in Ardhuin et al. 2020 -!/IS2 IS2ISOSCAT=.TRUE. ! uses isotropic back-scatter -!/IS2 IS2DISP=.FALSE. !not dispersion only attenuation following Liu disp. eq. -!/IS2 IS2DUPDATE=.TRUE. -!/IS2 IS2FRAGILITY=0.9 -!/IS2 IS2DMIN=20 -!/IS2 IS2DAMP=0. -!/IS2 IS2CREEPB=0. -!/IS2 IS2CREEPC=0.4 ! This gives an impact of break-up over a wider freq. range -! ! compared to the 0.2 value in Boutin et al. 2018 -!/IS2 IS2CREEPD=0.5 -!/IS2 IS2CREEPN=3.0 -!/IS2 IS2BREAKE=1. -!/IS2 IS2WIM1=1. -!/IS2 IS2ANDISB=.TRUE. !anelastic instead of inelastic dissipation if IS2CREEPB>0 -!/IS2 IS2ANDISE=0.55 !energy of activation -!/IS2 IS2ANDISD=2.0E-9 !see Ardhuin et al. 2020 -!/IS2 IS2ANDISN=1. !dependency on stress. Equal to 1 normally? -!/IS2 CALL READNL ( NDSS, 'SIS2', STATUS ) -!/IS2 WRITE (NDSO,947) STATUS -!/IS2 WRITE (NDSO,2948) ISC1, IS2BACKSCAT, IS2ISOSCAT, IS2BREAK, IS2DUPDATE, IS2FLEXSTR, IS2DISP, & -!/IS2 IS2DAMP, IS2FRAGILITY, IS2DMIN, IS2C2, IS2C3, IS2CONC, IS2CREEPB,& -!/IS2 IS2CREEPC, IS2CREEPD, IS2CREEPN, IS2BREAKE, IS2BREAKF, IS2WIM1, & -!/IS2 IS2ANDISB, IS2ANDISE, IS2ANDISD, IS2ANDISN -! -!/REF1 REFCOAST=0. -!/REF1 REFMAP=0. -!/REF1 REFMAPD=0. -!/REF1 REFRMAX=1. -!/REF1 REFFREQPOW=2. -!/REF1 REFFREQ=0. -!/REF1 REFCOSP_STRAIGHT=4. -!/REF1 REFSLOPE=0.22 -!/REF1 REFSUBGRID=0. -!/REF1 REFICEBERG=0. -!/REF1 REFUNSTSOURCE=0. -! -!/REF1 CALL READNL ( NDSS, 'REF1', STATUS ) -!/REF1 WRITE (NDSO,969) STATUS -! -!/IG1 IGMETHOD = 2 -!/IG1 IGADDOUTP= 0 -!/IG1 IGSOURCE = 2 -!/IG1 IGSTERMS = 0 -!/IG1 IGMAXFREQ=0.03 -!/IG1 IGSOURCEATBP = 0 -!/IG1 IGBCOVERWRITE = .TRUE. -!/IG1 IGSWELLMAX = .TRUE. -!/IG1 IGKDMIN = 1.1 -!/IG1 IGFIXEDDEPTH = 0. -!/IG1 IGEMPIRICAL = 0.00125 -! -!/IG1 CALL READNL ( NDSS, 'SIG1 ', STATUS ) -!/IG1 WRITE (NDSO,970) STATUS -! -!/IC2 IC2DISPER = .FALSE. -!/IC2 IC2TURB = 1. -!/IC2 IC2TURBS = 0. -!/IC2 IC2ROUGH = 0.01 -!/IC2 IC2REYNOLDS = 1.5E5 -!/IC2 IC2SMOOTH = 2E5 -!/IC2 IC2VISC = 1. -!/IC2 IC2DMAX = 0. -! -!/IC3 IC3MAXTHK = 100.0 -!/IC3 IC3MAXCNC = 100.0 -!/IC3 IC2TURB = 2.0 ! from run_test example by F.A. -!/IC3 IC2TURBS = 0. -!/IC3 IC2ROUGH = 0.02 ! from run_test example by F.A. (alt:0.1) -!/IC3 IC2REYNOLDS = 1.5E5 -!/IC3 IC2SMOOTH = 7.0E4 -!/IC3 IC2VISC = 2.0 -!/IC3 IC3CHENG = .TRUE. -!/IC3 USECGICE = .FALSE. -!/IC3 IC3HILIM = 100.0 -!/IC3 IC3KILIM = 100.0 -!/IC3 IC3HICE = -1.0 -!/IC3 IC3VISC = -2.0 -!/IC3 IC3DENS = -3.0 -!/IC3 IC3ELAS = -4.0 -!fixme: if USECGICE = .TRUE., don't allow use of IC3MAXTHK<100.0 - -!/IC4 IC4METHOD = 1 !switch for methods within IC4 -!/IC4 IC4KI=0.0 -!/IC4 IC4FC=0.0 -! -!/IC5 IC5MINIG = 1. -!/IC5 IC5MINWT = 0. -!/IC5 IC5MAXKRATIO = 1E9 -!/IC5 IC5MAXKI = 100. -!/IC5 IC5MINHW = 300. -!/IC5 IC5MAXITER = 100. -!/IC5 IC5RKICK = 0. -!/IC5 IC5KFILTER = 0.0025 -! -!/IC2 CALL READNL ( NDSS, 'SIC2 ', STATUS ) -!/IC2 WRITE (NDSO,971) STATUS -! -!/IC3 CALL READNL ( NDSS, 'SIC3 ', STATUS ) -!/IC3 WRITE (NDSO,971) STATUS -! -!/IC4 CALL READNL ( NDSS, 'SIC4 ', STATUS ) -!/IC4 WRITE (NDSO,971) STATUS -! -!/IC5 CALL READNL ( NDSS, 'SIC5 ', STATUS ) -!/IC5 WRITE (NDSO,971) STATUS -!/IC5 WRITE (NDSO,2971) IC5MINIG, IC5MINWT, IC5MAXKRATIO, & -!/IC5 IC5MAXKI, IC5MINHW, IC5MAXITER, IC5RKICK, & -!/IC5 IC5KFILTER -! - CALL READNL ( NDSS, 'OUTS', STATUS ) - WRITE (NDSO,4970) STATUS -! -! -! output of frequency spectra, th1m ... -! - E3DF(1,1) = E3D - E3DF(2,1) = MIN(MAX(1,I1E3D),NK) - E3DF(3,1) = MIN(MAX(1,I2E3D),NK) - E3DF(1,2) = TH1MF - E3DF(2,2) = MIN(MAX(1,I1TH1M),NK) - E3DF(3,2) = MIN(MAX(1,I2TH1M),NK) - E3DF(1,3) = STH1MF - E3DF(2,3) = MIN(MAX(1,I1STH1M),NK) - E3DF(3,3) = MIN(MAX(1,I2STH1M),NK) - E3DF(1,4) = TH2MF - E3DF(2,4) = MIN(MAX(1,I1TH2M),NK) - E3DF(3,4) = MIN(MAX(1,I2TH2M),NK) - E3DF(1,5) = STH2MF - E3DF(2,5) = MIN(MAX(1,I1STH2M),NK) - E3DF(3,5) = MIN(MAX(1,I2STH2M),NK) -! -! output of microseismic source spectra -! - P2MSF(1) = P2SF - P2MSF(2) = MIN(MAX(1,I1P2SF),NK) - P2MSF(3) = MIN(MAX(1,I2P2SF),NK) -! -! output of Stokes drift profile -! - US3DF(1) = US3D - US3DF(2) = MAX( 1 , MIN( NK, I1US3D) ) - US3DF(3) = MAX( 1 , MIN( NK, I2US3D) ) -! -! output of Stokes drift partitions -! - USSPF(1) = USSP - USSPF(2) = MAX( 1 , MIN(25, IUSSP ) ) - IF (IUSSP.GT.25) THEN - WRITE(NDSE,*) ' *** WAVEWATCH III ERROR IN ww3_grid:' - WRITE(NDSE,*) " Stokes drift partition outputs not " - WRITE(NDSE,*) " intended for use with more than 25 " - WRITE(NDSE,*) " partitions. Please reduce IUSSP " - WRITE(NDSE,*) " specified in ww3_grid.inp to proceed " - CALL EXTCDE( 31) - ENDIF - - DO J=1,USSPF(2) - USSP_WN(j) = STK_WN(J) - ENDDO - -! - WRITE (NDSO,4971) P2MSF(1:3) - WRITE (NDSO,4972) US3DF(1:3) - WRITE (NDSO,4973) E3DF(1:3,1) - WRITE (NDSO,4974) USSPF(1:2) - DO J=1,USSPF(2) - WRITE(NDSO,4975) J,USSP_WN(J) - ENDDO -! - CALL READNL ( NDSS, 'MISC', STATUS ) - WRITE (NDSO,960) STATUS -! - IF ( FLAGTR.LT.0 .OR. FLAGTR.GT.6 ) FLAGTR = 0 - CICEN = MIN ( 1. , MAX ( 0. , CICEN ) ) - ICESLN = MIN ( 1. , MAX ( 0. , ICESLN ) ) - ICEWIND = MIN ( 1. , MAX ( 0. , ICEWIND ) ) - ICESDS = MIN ( 1. , MAX ( 0. , ICESDS ) ) - ICESNL = MIN ( 1. , MAX ( 0. , ICESNL ) ) - FICEN = CICEN - GRIDSHIFT=GSHIFT - ICESCALES(1)=ICESLN - ICESCALES(2)=ICEWIND - ICESCALES(3)=ICESNL - ICESCALES(4)=ICESDS - CMPRTRCK=TRCKCMPR - CICE0 = MIN ( CICEN , MAX ( 0. , CICE0 ) ) - FICEL = LICE - IICEHMIN = ICEHMIN - IICEHFAC = ICEHFAC - IICEHINIT = ICEHINIT - IICEDISP= ICEDISP - IICEHDISP = ICEHDISP - IICEDDISP = ICEDDISP - IICEFDISP = ICEFDISP - PMOVE = MAX ( 0. , PMOVE ) - PFMOVE = PMOVE -! - BTBETA = MIN(MAX (1., BTBET), 2.) - AAIRCMIN = ALOG(GRAV/AIRCMIN/SIG(1))/ALOG(XFR)+1 ! goes from phase speed C=g/sig to index - AAIRGB = AIRGB -! -! Notes: Presently, if we select CICE0.ne.CICEN requires an obstruction -! grid, that is initialized with zeros as default. - IF ( FLAGTR .LT. 3 ) THEN - IF (CICE0.NE.CICEN) THEN - CICE0 = CICEN - IF (STATUS=='(user def. values) :') WRITE (NDSO,2961) - END IF - END IF -!/IC0 IF ( CICE0.EQ.CICEN .AND. FLAGTR.GE.3 ) FLAGTR = FLAGTR - 2 - WRITE (NDSO,961) CICE0, CICEN - WRITE (NDSO,8972) ICEWIND - FICE0 = CICE0 -! Variables for Space-Time Extremes - STEXU = STDX - IF ( STDY .LE. 0. ) THEN - STDY = STDX - END IF - STEYU = STDY - STEDU = STDT - IF ( STDX .GT. 0 ) THEN - WRITE (NDSO,1040) STDX - WRITE (NDSO,1041) STDY - ELSE - WRITE (NDSO,1042) - END IF - IF ( STDT .GT. 0 ) THEN - WRITE (NDSO,1043) STDT - ELSE - WRITE (NDSO,1044) - END IF -!/MGG WRITE (NDSO,962) PMOVE -! -!/SEED XSEED = MAX ( 1. , XSEED ) -!/SEED WRITE (NDSO,964) XSEED -!/SCRIP WRITE (NDSO,963) GSHIFT - WRITE (NDSO,1972) TRCKCMPR - FACSD = XSEED -!/RWND RWINDC = RWNDC -!/WCOR WWCOR(1) = WCOR1 -!/WCOR WWCOR(2) = WCOR2 -! - XP = MAX ( 1.E-6 , XP ) - XR = MAX ( 1.E-6 , XR ) - XREL = XR - XFILT = MAX ( 0. , XFILT ) - XFLT = XFILT - WRITE (NDSO,965) XP, XR, XFILT - FACP = XP / PI * 0.62E-3 * TPI**4 / GRAV**2 -! - IHMAX = MAX ( 50, IHM ) - HSPMIN = MAX ( 0.0001 , HSPM ) - WSMULT = MAX ( 1. , WSM ) - WSCUT = MIN ( 1.0001 , MAX ( 0. , WSC ) ) - FLCOMB = FLC - NOSWLL = MAX ( 1 , NOSW ) - PTMETH = PTM ! Partitioning method. Chris Bunney (Jan 2016) - PTFCUT = PTFC ! Freq cutoff for partitiong method 5 - PMNAM2 = "" - IF( PTMETH .EQ. 1 ) THEN - PMNAME = "WW3 default" - ELSE IF( PTMETH .EQ. 2 ) THEN - PMNAME = "Watershedding plus wind cut-off" - ELSE IF( PTMETH .EQ. 3 ) THEN - PMNAME = "Watershedding only" - WSCUT = 0.0 ! We don't want to classify by ws frac - PMNAM2 = "WSC set to 0.0" - ELSE IF( PTMETH .EQ. 4 ) THEN - PMNAME = "Wind speed cut-off only" - PMNAM2 = "WSC set to 0.0, NOSW set to 1" - WSCUT = 0.0 ! We don't want to classify by ws frac - NOSWLL = 1 ! Only ever one swell - ELSE IF( PTMETH .EQ. 5 ) THEN - WRITE(PMNAME, '("2-Band hi/low cutoff at ", F4.2,"Hz")') PTFCUT - PMNAM2 = "WSC set to 0.0, NOSW set to 1" - WSCUT = 0.0 ! We don't want to classify by ws frac - NOSWLL = 1 ! Only ever one swell - ELSE - WRITE( NDSE, * ) & - "*** Error - unknown partitioing method (PTM)! ***" - CALL EXIT(1) - ENDIF - - IF ( FLCOMB ) THEN - J = 1 - ELSE - J = 2 - END IF - WRITE (NDSO,966) IHMAX, HSPMIN, WSMULT, WSCUT, YESXNO(J), NOSWLL - WRITE (NDSO,5971) PMNAME - IF( PMNAM2 .NE. "" ) WRITE (NDSO,5972) PMNAM2 -!! WRITE (NDSO,966) IHMAX, HSPMIN, WSMULT, WSCUT, YESXNO(J) -! - FHMAX = MAX ( 0.01 , FMICHE ) - J = 2 -!/MLIM J = 1 - WRITE (NDSO,967) FHMAX, FHMAX/SQRT(2.), YESXNO(J) - IF ( FHMAX.LT.0.50 .AND. J.EQ.1 ) WRITE (NDST,968) -! - IF (TRIM(CALTYPE) .NE. 'standard' .AND. & - TRIM(CALTYPE) .NE. '360_day' .AND. & - TRIM(CALTYPE) .NE. '365_day' ) GOTO 2003 - WRITE (NDST,1973) CALTYPE - WRITE (NDSO,*) -! -! 6.x Read values for FLD stress calculation -! -!/FLD1 TAILTYPE = 0 -!/FLD1 TAILLEV = 0.006 -!/FLD1 TAILT1 = 1.25 -!/FLD1 TAILT2 = 3.00 -!/FLD2 TAILTYPE = 0 -!/FLD2 TAILLEV = 0.006 -!/FLD2 TAILT1 = 1.25 -!/FLD2 TAILT2 = 3.00 -! -!/FLD1 CALL READNL ( NDSS, 'FLD1', STATUS ) -!/FLD1 TAILLEV = MIN( MAX ( 0.0005 , TAILLEV ), 0.04) -!/FLD1 TAIL_LEV = TAILLEV -!/FLD1 TAIL_ID = TAILTYPE -!/FLD1 TAIL_TRAN1 = TAILT1 -!/FLD1 TAIL_TRAN2 = TAILT2 -!/FLD2 CALL READNL ( NDSS, 'FLD2', STATUS ) -!/FLD2 TAILLEV = MIN( MAX ( 0.0005 , TAILLEV ), 0.04) -!/FLD2 TAIL_LEV = TAILLEV -!/FLD2 TAIL_ID = TAILTYPE -!/FLD2 TAIL_TRAN1 = TAILT1 -!/FLD2 TAIL_TRAN2 = TAILT2 -! -! 6.o End of namelist processing -! - IF (FLGNML) THEN - CLOSE (NDSS) - ELSE - CLOSE (NDSS,STATUS='DELETE') - END IF -! - IF ( FLNMLO ) THEN - WRITE (NDSO,917) -!/FLX3 WRITE (NDSO,2810) CDMAX*1.E3, CTYPE -!/FLX4 WRITE (NDSO,2810) CDFAC -!/LN1 WRITE (NDSO,2820) CLIN, RFPM, RFHF -!/ST1 WRITE (NDSO,2920) CINP - IF ( .NOT. FLSTB2 ) THEN -!/ST2 WRITE (NDSO,2920) ZWND, SWELLF - ELSE -!/STAB2 WRITE (NDSO,2921) ZWND, SWELLF, STABSH, STABOF, & -!/STAB2 CNEG, CPOS, FNEG - END IF -! -!/ST3 WRITE (NDSO,2920) ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP, ZALP, & -!/ST3 SWELLF -!/ST4 WRITE (NDSO,2920) ZWND, ALPHA0, Z0MAX, BETAMAX, SINTHP, ZALP, & -!/ST4 TAUWSHELTER, SWELLFPAR, SWELLF, SWELLF2, SWELLF3, SWELLF4, & -!/ST4 SWELLF5, SWELLF6, SWELLF7, Z0RAT, SINBR -!/ST6 WRITE (NDSO,2920) SINA0, SINWS, SINFC -!/NL1 WRITE (NDSO,2922) LAMBDA, NLPROP, KDCONV, KDMIN, & -!/NL1 SNLCS1, SNLCS2, SNLCS3 -!/NL2 WRITE (NDSO,2922) IQTYPE, TAILNL, NDEPTH -!/NL2 IF ( IQTYPE .EQ. 3 ) THEN -!/NL2 IF ( NDEPTH .EQ. 1 ) THEN -!/NL2 WRITE (NDSO,3923) DPTHNL(1) -!/NL2 ELSE -!/NL2 WRITE (NDSO,4923) DPTHNL(1) -!/NL2 END IF -!/NL2 WRITE (NDSO,5923) DPTHNL(2:NDEPTH-1) -!/NL2 WRITE (NDSO,6923) DPTHNL(NDEPTH) -!/NL2 END IF -!/NL3 WRITE (NDSO,2922) NQDEF, MSC, NSC, KDFD, KDFS -!/NL3 IF ( NQDEF .EQ. 1 ) THEN -!/NL3 WRITE (NDSO,3923) QPARMS(1:5) -!/NL3 ELSE -!/NL3 WRITE (NDSO,4923) QPARMS(1:5) -!/NL3 DO J=2, NQDEF-1 -!/NL3 WRITE (NDSO,5923) QPARMS((J-1)*5+1:J*5) -!/NL3 END DO -!/NL3 WRITE (NDSO,6923) QPARMS((NQDEF-1)*5+1:NQDEF*5) -!/NL3 END IF -!/NL4 WRITE (NDSO,2922) INDTSA, ALTLP -!/NLS WRITE (NDSO,8922) A34, FHFC, DNM, FC1, FC2, FC3 -!/ST1 WRITE (NDSO,2924) CDIS, APM -!/ST2 WRITE (NDSO,2924) SDSA0, SDSA1, SDSA2, SDSB0, SDSB1, PHIMIN -!/ST3 WRITE (NDSO,2924) SDSC1, WNMEANP, FXPM3, FXFM3, SDSDELTA1, & -!/ST3 SDSDELTA2 - -!/ST4 WRITE (NDSO,2924) SDSBCHOICE, SDSC2, SDSCUM, SDSC4, & -!/ST4 SDSC5, SDSC6, & -!/ST4 WNMEANP, FXPM3, FXFM3, FXFMAGE, & -!/ST4 SDSBINT, SDSBCK, SDSABK, SDSPBK, SDSHCK, & -!/ST4 SDSBR, SDSSTRAIN, SDSSTRAINA, SDSSTRAIN2, & -!/ST4 SDSBT, SDSP, SDSISO, SDSCOS, SDSDTH, SDSBRF1, & -!/ST4 SDSBRFDF, SDSBM0, SDSBM1, SDSBM2, SDSBM3, SDSBM4, & -!/ST4 SPMSS, SDKOF, SDSMWD, SDSFACMTF, SDSNMTF,SDSMWPOW,& -!/ST4 SDSCUMP, SDSNUW, WHITECAPWIDTH, WHITECAPDUR -!/ST6 WRITE (NDSO,2924) SDSET, SDSA1, SDSA2, SDSP1, SDSP2 -!/ST6 WRITE (NDSO,2937) SWLB1, CSTB1 -!/BT1 WRITE (NDSO,2926) GAMMA -!/BT4 WRITE (NDSO,2926) SEDMAPD50, SED_D50_UNIFORM, & -!/BT4 RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4, SIGDEPTH, & -!/BT4 BOTROUGHMIN, BOTROUGHFAC -!/DB1 IF ( BJFLAG ) THEN -!/DB1 WRITE (NDSO,2928) BJALFA, BJGAM, '.TRUE.' -!/DB1 ELSE -!/DB1 WRITE (NDSO,2928) BJALFA, BJGAM, '.FALSE.' -!/DB1 END IF -!/PR1 WRITE (NDSO,2953) CFLTM -!/PR2 WRITE (NDSO,2953) CFLTM, DTIME, LATMIN -!/SMC WRITE (NDSO,2953) CFLTM, DTIME, LATMIN, RFMAXD, UNO3, & -!/SMC AVERG, LvSMC, NBISMC, ISHFT, JEQT, SEAWND -!/PR3 WRITE (NDSO,2953) CFLTM, WDTHCG, WDTHTH -! - WRITE (NDSO,2956) UGBCCFL, UGOBCAUTO, UGOBCDEPTH,TRIM(UGOBCFILE), & - EXPFSN, EXPFSPSI, EXPFSFCT, IMPFSN, EXPTOTAL,& - IMPTOTAL, IMPREFRACTION, IMPFREQSHIFT, & - IMPSOURCE, SETUP_APPLY_WLV, & - JGS_TERMINATE_MAXITER, & - JGS_TERMINATE_DIFFERENCE, & - JGS_TERMINATE_NORM, & - JGS_LIMITER, & - JGS_USE_JACOBI, & - JGS_BLOCK_GAUSS_SEIDEL, & - JGS_MAXITER, & - JGS_PMIN, & - JGS_DIFF_THR, & - JGS_NORM_THR, & - JGS_NLEVEL, & - JGS_SOURCE_NONLINEAR -! - WRITE (NDSO,2976) P2SF, I1P2SF, I2P2SF, & - US3D, I1US3D, I2US3D, & - USSP, IUSSP, & - E3D, I1E3D, I2E3D, & - TH1MF, I1TH1M, I2TH1M, & - STH1MF, I1STH1M, I2STH1M, & - TH2MF, I1TH2M, I2TH2M, & - STH2MF, I1STH2M, I2STH2M -! -!/REF1 WRITE(NDSO,2986) REFCOAST, REFFREQ, REFSLOPE, REFMAP, & -!/REF1 REFMAPD, REFSUBGRID , REFRMAX, REFFREQPOW, & -!/REF1 REFICEBERG, REFCOSP_STRAIGHT, REFUNSTSOURCE -! -!/IG1 WRITE(NDSO,2977) IGMETHOD, IGADDOUTP, IGSOURCE, & -!/IG1 IGSTERMS, IGBCOVERWRITE, IGSWELLMAX, & -!/IG1 IGMAXFREQ, IGSOURCEATBP, IGKDMIN, & -!/IG1 IGFIXEDDEPTH, IGEMPIRICAL -! -!/IC2 WRITE(NDSO,2978) IC2DISPER, IC2TURB, IC2ROUGH, & -!/IC2 IC2REYNOLDS, IC2SMOOTH, IC2VISC, IC2TURBS, & -!/IC2 IC2DMAX -! -!/IC3 WRITE(NDSO,2979) IC3MAXTHK, IC3MAXCNC, IC2TURB, & -!/IC3 IC2ROUGH, IC2REYNOLDS, IC2SMOOTH, & -!/IC3 IC2VISC, IC2TURBS, IC3CHENG, & -!/IC3 USECGICE, IC3HILIM, IC3KILIM, & -!/IC3 IC3HICE, IC3VISC, IC3DENS, IC3ELAS -! -!/IC4 WRITE(NDSO,NML=SIC4) -! -!/IC5 WRITE(NDSO,2981) IC5MINIG, IC5MINWT, IC5MAXKRATIO, & -!/IC5 IC5MAXKI, IC5MINHW, IC5MAXITER, & -!/IC5 IC5RKICK, IC5KFILTER -! -!/IS1 WRITE (NDSO,2946) IS1C1, IS1C2 -! -!/IS2 WRITE (NDSO,948) ISC1, IS2BACKSCAT, IS2ISOSCAT, IS2BREAK, & -!/IS2 IS2DUPDATE, IS2FLEXSTR, IS2DISP, IS2DAMP, IS2FRAGILITY, IS2DMIN, IS2C2, & -!/IS2 IS2C3, IS2CONC, IS2CREEPB, IS2CREEPC, IS2CREEPD, & -!/IS2 IS2CREEPN, IS2BREAKE, IS2BREAKF, IS2WIM1, IS2ANDISB, & -!/IS2 IS2ANDISE, IS2ANDISD, IS2ANDISN -! -!/UOST WRITE (NDSO, 4502) ADJUSTL(TRIM(UOSTFILELOCAL)), ADJUSTL(TRIM(UOSTFILESHADOW)), & -!/UOST UOSTFACTORLOCAL, UOSTFACTORSHADOW - -! - IF ( FLCOMB ) THEN - WRITE (NDSO,2966) CICE0, CICEN, LICE, PMOVE, XSEED, FLAGTR, & - XP, XR, XFILT, IHMAX, HSPMIN, WSMULT, & - WSCUT, '.TRUE.', NOSWLL, FHMAX, & - RWNDC, WCOR1, WCOR2, FACBERG, GSHIFT, & - STDX, STDY, STDT, ICEHMIN, ICEHFAC, & - ICEHINIT, ICEDISP, ICEHDISP, & - ICESLN, ICEWIND, ICESNL, ICESDS, & - ICEDDISP,ICEFDISP, CALTYPE, TRCKCMPR, & - BTBETA - ELSE - WRITE (NDSO,2966) CICE0, CICEN, LICE, PMOVE, XSEED, FLAGTR, & - XP, XR, XFILT, IHMAX, HSPMIN, WSMULT, & - WSCUT, '.FALSE.', NOSWLL, FHMAX, & - RWNDC, WCOR1, WCOR2, FACBERG, GSHIFT, & - STDX, STDY, STDT, ICEHMIN, ICEHFAC, & - ICEHINIT, ICEDISP, ICEHDISP, & - ICESLN, ICEWIND, ICESNL, ICESDS, & - ICEDDISP, ICEFDISP, CALTYPE, TRCKCMPR,& - BTBETA - END IF -! -!/FLD1 WRITE(NDSO,2987) TAIL_ID, TAIL_LEV, TAIL_TRAN1, TAIL_TRAN2 -!/FLD2 WRITE(NDSO,2987) TAIL_ID, TAIL_LEV, TAIL_TRAN1, TAIL_TRAN2 -!/RTD WRITE(NDSO,4991) PLAT, PLON, UNROT -!/RTD WRITE(NDSO,4992) BPLAT, BPLON -! - WRITE (NDSO,918) - END IF -! -! 6.p Set various other values ... -! ... Tail in integration --> scale factor for A to E conv -! - FTE = 0.25 * SIG(NK) * DTH * SIG(NK) - FTF = 0.20 * DTH * SIG(NK) - FTWN = 0.20 * SQRT(GRAV) * DTH * SIG(NK) - FTTR = FTF - FTWL = GRAV / 6. / SIG(NK) * DTH * SIG(NK) -!/ST3 STXFTF = 1/(FACHF-1.-WNMEANP*2) & -!/ST3 * SIG(NK)**(2+WNMEANP*2) * DTH -!/ST3 STXFTFTAIL = 1/(FACHF-1.-WNMEANPTAIL*2) & -!/ST3 * SIG(NK)**(2+WNMEANPTAIL*2) * DTH -!/ST3 STXFTWN = 1/(FACHF-1.-WNMEANP*2) * SIG(NK)**(2) & -!/ST3 * (SIG(NK)/SQRT(GRAV))**(WNMEANP*2) * DTH -!/ST3 SSTXFTF = STXFTF -!/ST3 SSTXFTFTAIL = STXFTFTAIL -!/ST3 SSTXFTWN = STXFTWN -! -!/ST4 STXFTF = 1/(FACHF-1.-WNMEANP*2) & -!/ST4 * SIG(NK)**(2+WNMEANP*2) * DTH -!/ST4 STXFTFTAIL = 1/(FACHF-1.-WNMEANPTAIL*2) & -!/ST4 * SIG(NK)**(2+WNMEANPTAIL*2) * DTH -!/ST4 STXFTWN = 1/(FACHF-1.-WNMEANP*2) * SIG(NK)**(2) & -!/ST4 * (SIG(NK)/SQRT(GRAV))**(WNMEANP*2) * DTH -!/ST4 SSTXFTF = STXFTF -!/ST4 SSTXFTFTAIL = STXFTFTAIL -!/ST4 SSTXFTWN = STXFTWN -! -! ... High frequency cut-off -! - FXFM = 2.5 -!/ST6 FXFM = SIN6FC - FXPM = 4.0 - FXPM = FXPM * GRAV / 28. - FXFM = FXFM * TPI - XFC = 3.0 -!/ST2 XFH = 2.0 -!/ST2 XF1 = 1.75 -!/ST2 XF2 = 2.5 -!/ST2 XFT = XF2 -! - FACTI1 = 1. / LOG(XFR) - FACTI2 = 1. - LOG(TPI*FR1) * FACTI1 -! -! Setting of FACHF moved to before !/NL2 set-up for consistency -! -!/NL2 FACHF = -TAILNL - FACHFA = XFR**(-FACHF-2) - FACHFE = XFR**(-FACHF) -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 7. Read and prepare the grid. -! 7.a Type of grid -! - IF (FLGNML) THEN - GSTRG=TRIM(NML_GRID%TYPE) - IF (TRIM(NML_GRID%COORD).EQ.'SPHE') FLAGLL=.TRUE. - IF (TRIM(NML_GRID%COORD).EQ.'CART') FLAGLL=.FALSE. - CSTRG=TRIM(NML_GRID%CLOS) - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) GSTRG, FLAGLL, CSTRG - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - END IF - - SELECT CASE (TRIM(GSTRG)) - CASE ('RECT') - GTYPE = RLGTYPE - WRITE (NDSO,3000) 'rectilinear' - CASE ('CURV') - GTYPE = CLGTYPE - WRITE (NDSO,3000) 'curvilinear' - CASE ('UNST') - GTYPE = UNGTYPE - WRITE (NDSO,3000) 'unstructured' - CASE DEFAULT - WRITE (NDSE,1007) TRIM(GSTRG) - CALL EXTCDE ( 25 ) - END SELECT -! - IF ( FLAGLL ) THEN - FACTOR = 1. - WRITE (NDSO,3001) 'spherical' - ELSE - FACTOR = 1.E-3 - WRITE (NDSO,3001) 'Cartesian' - END IF -! -! Only process grid closure string for logically rectangular grids. -! Closure setting for unstructured grids is NONE. - ICLOSE = ICLOSE_NONE - IF ( GTYPE.NE.UNGTYPE ) THEN - SELECT CASE (TRIM(CSTRG)) - CASE ('NONE') - ICLOSE = ICLOSE_NONE - WRITE (NDSO,3002) 'none' - CASE ('SMPL') - ICLOSE = ICLOSE_SMPL - WRITE (NDSO,3002) 'simple' - CASE ('TRPL') - WRITE (NDSE,'(/2A)') ' *** WARNING WW3_GRID: TRIPOLE ', & - 'GRID CLOSURE IMPLEMENTATION IS INCOMPLETE ***' - ICLOSE = ICLOSE_TRPL - WRITE (NDSO,3002) 'tripole' - IF ( GTYPE.EQ.RLGTYPE ) THEN - WRITE (NDSE,1009) - CALL EXTCDE ( 25 ) - END IF - CASE DEFAULT - ! Check for old style GLOBAL input - SELECT CASE (TRIM(CSTRG)) - CASE ('T','t','.TRU','.tru') - ICLOSE = ICLOSE_SMPL - WRITE (NDSO,3002) 'simple' - WRITE (NDSE,1013) - CASE ('F','f','.FAL','.fal') - ICLOSE = ICLOSE_NONE - WRITE (NDSO,3002) 'none' - WRITE (NDSE,1013) - CASE DEFAULT - WRITE (NDSE,1012) TRIM(CSTRG) - CALL EXTCDE ( 25 ) - END SELECT - END SELECT - IF ( ICLOSE.NE.ICLOSE_NONE .AND. .NOT.FLAGLL ) THEN - WRITE (NDSE,1008) - CALL EXTCDE ( 25 ) - END IF - END IF !GTYPE.NE.UNGTYPE -! -! 7.b Size of grid -! - IF (FLGNML) THEN - SELECT CASE ( GTYPE ) - CASE ( RLGTYPE ) - NX = NML_RECT%NX - NY = NML_RECT%NY - NX = MAX ( 3 , NX ) - NY = MAX ( 3 , NY ) - WRITE (NDSO,3003) NX, NY - CASE ( CLGTYPE ) - NX = NML_CURV%NX - NY = NML_CURV%NY - NX = MAX ( 3 , NX ) - NY = MAX ( 3 , NY ) - WRITE (NDSO,3003) NX, NY - CASE ( UNGTYPE ) - NY=1 - END SELECT - ELSE - IF ( GTYPE.NE.UNGTYPE) THEN - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) NX, NY - NX = MAX ( 3 , NX ) - NY = MAX ( 3 , NY ) - WRITE (NDSO,3003) NX, NY - ELSE - NY =1 - END IF - END IF -! -! Propagation specific to unstructured grids -! - DO_CHANGE_WLV=.FALSE. - IF ( GTYPE.EQ.UNGTYPE) THEN - UNSTSCHEMES(:)=0 - IF (EXPFSN) UNSTSCHEMES(1)=1 - IF (EXPFSPSI) UNSTSCHEMES(2)=1 - IF (EXPFSFCT) UNSTSCHEMES(3)=1 - IF (IMPFSN) UNSTSCHEMES(4)=1 - UNSTSCHEME=-1 - DO IX=1,4 - IF (UNSTSCHEMES(IX).EQ.1) THEN - UNSTSCHEME=IX - EXIT - END IF - END DO - - FSBCCFL = UGBCCFL - SELECT CASE (UNSTSCHEME) - CASE (1) - FSN = EXPFSN - PNAME2 = 'N Explicit (Fluctuation Splitting) ' - CASE (2) - FSPSI = EXPFSPSI - PNAME2 = 'PSI Explicit (Fluctuation Splitting) ' - CASE (3) - FSFCT = EXPFSFCT - PNAME2 = ' Flux Corrected Transport Explicit' - CASE (4) - FSNIMP = IMPFSN - PNAME2 = 'N Implicit (Fluctuation Splitting) ' - END SELECT -! - IF (SUM(UNSTSCHEMES).GT.1) WRITE(NDSO,1035) - WRITE (NDSO,2951) PNAME2 - IF (IMPTOTAL) THEN - FSTOTALIMP = IMPTOTAL - PNAME2 = 'N Implicit (Fluctuation Splitting) for total implicit' - END IF - IF (EXPTOTAL) THEN - FSTOTALEXP = EXPTOTAL - PNAME2 = 'N Explicit (Fluctuation Splitting) for one exchange explicit DC HPCF ' - END IF - IF (IMPREFRACTION .and. IMPTOTAL .AND. FLCTH) THEN - FSREFRACTION = .TRUE. - PNAME2 = 'Refraction done implicitly' - WRITE (NDSO,2951) PNAME2 - ELSE - FSREFRACTION = .FALSE. - END IF - IF (IMPFREQSHIFT .and. IMPTOTAL .AND. FLCK) THEN - FSFREQSHIFT = .TRUE. - PNAME2 = 'Frequency shifting done implicitly' - WRITE (NDSO,2951) PNAME2 - ELSE - FSFREQSHIFT = .FALSE. - END IF - IF (IMPSOURCE .and. IMPTOTAL .AND. FLSOU) THEN - FSSOURCE = .TRUE. - PNAME2 = 'Source terms integrated implicitly' - WRITE (NDSO,2951) PNAME2 - ELSE - FSSOURCE = .FALSE. - END IF - IF (SETUP_APPLY_WLV) THEN - DO_CHANGE_WLV = SETUP_APPLY_WLV - PNAME2 = ' we change WLV' - WRITE (NDSO,2952) PNAME2 - END IF - SOLVERTHR_STP = SOLVERTHR_SETUP - CRIT_DEP_STP = CRIT_DEP_SETUP - END IF - -! -! 7.c Grid coordinates (branch here based on grid type) -! - IF ( GTYPE.NE.UNGTYPE) ALLOCATE ( XGRDIN(NX,NY), YGRDIN(NX,NY) ) - SELECT CASE ( GTYPE ) -! -! 7.c.1 Rectilinear grid -! - CASE ( RLGTYPE ) -! - IF (FLGNML) THEN - SX = NML_RECT%SX - SY = NML_RECT%SY - VSC = NML_RECT%SF - X0 = NML_RECT%X0 - Y0 = NML_RECT%Y0 - VSC0 = NML_RECT%SF0 - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) SX, SY, VSC - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) X0, Y0, VSC0 - END IF -! - VSC = MAX ( 1.E-7 , VSC ) - SX = SX / VSC - SY = SY / VSC - SX = MAX ( 1.E-7 , SX ) - SY = MAX ( 1.E-7 , SY ) - IF ( ICLOSE.EQ.ICLOSE_SMPL ) SX = 360. / REAL(NX) -! - VSC0 = MAX ( 1.E-7 , VSC0 ) - X0 = X0 / VSC0 - Y0 = Y0 / VSC0 -! - IF ( FLAGLL ) THEN - WRITE (NDSO,3004) FACTOR*SX, FACTOR*SY, & - FACTOR*X0, FACTOR*(X0+REAL(NX-1)*SX), & - FACTOR*Y0, FACTOR*(Y0+REAL(NY-1)*SY) - ELSE - WRITE (NDSO,3005) FACTOR*SX, FACTOR*SY, & - FACTOR*X0, FACTOR*(X0+REAL(NX-1)*SX), & - FACTOR*Y0, FACTOR*(Y0+REAL(NY-1)*SY) - END IF -! - DO IY=1, NY - DO IX=1, NX - XGRDIN(IX,IY) = X0 + REAL(IX-1)*SX - YGRDIN(IX,IY) = Y0 + REAL(IY-1)*SY - END DO - END DO -! -! 7.c.2 Curvilinear grid -! - CASE ( CLGTYPE ) -! -! 7.c.2.a Process x-coordinates -! - IF (FLGNML) THEN - NDSG = NML_CURV%XCOORD%IDF - VSC = NML_CURV%XCOORD%SF - VOF = NML_CURV%XCOORD%OFF - IDLA = NML_CURV%XCOORD%IDLA - IDFM = NML_CURV%XCOORD%IDFM - RFORM = TRIM(NML_CURV%XCOORD%FORMAT) - FROM = TRIM(NML_CURV%XCOORD%FROM) - FNAME = TRIM(NML_CURV%XCOORD%FILENAME) - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) NDSG, VSC, VOF, & - IDLA, IDFM, RFORM, FROM, FNAME - END IF -! - IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 - IF (IDFM.LT.1 .OR. IDFM.GT.3) IDFM = 1 -! - WRITE (NDSO,3006) NDSG, VSC, VOF, IDLA, IDFM - IF (IDFM.EQ.2) WRITE (NDSO,3008) TRIM(RFORM) - IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSI) & - WRITE (NDSO,3009) TRIM(FNAME) -! - IF ( NDSG .EQ. NDSI ) THEN - IF ( IDFM .EQ. 3 ) THEN - WRITE (NDSE,1004) NDSG - CALL EXTCDE (23) - ELSE - IF (.NOT.FLGNML) THEN - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - END IF - END IF - ELSE - IF ( IDFM .EQ. 3 ) THEN - IF (FROM.EQ.'NAME') THEN - OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME),& - FORM='UNFORMATTED', & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - ELSE - OPEN (NDSG, & - FORM='UNFORMATTED', & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - ELSE - IF (FROM.EQ.'NAME') THEN - OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME),& - STATUS='OLD',ERR=2000,IOSTAT=IERR) - ELSE - OPEN (NDSG, & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - END IF !IDFM - END IF !NDSG -! - CALL INA2R ( XGRDIN, NX, NY, 1, NX, 1, NY, NDSG, NDST, NDSE, & - IDFM, RFORM, IDLA, VSC, VOF) -! -! 7.c.2.b Process y-coordinates -! - IF (FLGNML) THEN - NDSG = NML_CURV%YCOORD%IDF - VSC = NML_CURV%YCOORD%SF - VOF = NML_CURV%YCOORD%OFF - IDLA = NML_CURV%YCOORD%IDLA - IDFM = NML_CURV%YCOORD%IDFM - RFORM = TRIM(NML_CURV%YCOORD%FORMAT) - FROM = TRIM(NML_CURV%YCOORD%FROM) - FNAME = TRIM(NML_CURV%YCOORD%FILENAME) - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) NDSG, VSC, VOF, & - IDLA, IDFM, RFORM, FROM, FNAME - END IF -! - IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 - IF (IDFM.LT.1 .OR. IDFM.GT.3) IDFM = 1 -! - WRITE (NDSO,3007) NDSG, VSC, VOF, IDLA, IDFM - IF (IDFM.EQ.2) WRITE (NDSO,3008) TRIM(RFORM) - IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSI) & - WRITE (NDSO,3009) TRIM(FNAME) -! - IF ( NDSG .EQ. NDSI ) THEN - IF ( IDFM .EQ. 3 ) THEN - WRITE (NDSE,1004) NDSG - CALL EXTCDE (23) - ELSE - IF (.NOT.FLGNML) THEN - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - END IF - END IF - ELSE - IF ( IDFM .EQ. 3 ) THEN - IF (FROM.EQ.'NAME') THEN - OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME),& - FORM='UNFORMATTED', & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - ELSE - OPEN (NDSG, & - FORM='UNFORMATTED', & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - ELSE - IF (FROM.EQ.'NAME') THEN - OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME),& - STATUS='OLD',ERR=2000,IOSTAT=IERR) - ELSE - OPEN (NDSG, & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - END IF !IDFM - END IF !NDSG -! - CALL INA2R ( YGRDIN, NX, NY, 1, NX, 1, NY, NDSG, NDST, NDSE, & - IDFM, RFORM, IDLA, VSC, VOF) -! -! 7.c.2.c Check for obvious errors in grid definition or input -! -! ....... Check for inverted grid (can result from wrong IDLA) - IF ( (XGRDIN(2,1)-XGRDIN(1,1))*(YGRDIN(1,2)-YGRDIN(1,1)) .LT. & - (YGRDIN(2,1)-YGRDIN(1,1))*(XGRDIN(1,2)-XGRDIN(1,1)) ) THEN - WRITE (NDSE,1011) IDLA -!.........Notes: here, we are checking to make sure that the j axis is ~90 degrees -!................counter-clockwise from the i axis (the standard cartesian setup). -!................So, it is a check on the handedness of the grid. -!................We have confirmed for one case that a left-handed grid produces -!................errors in SCRIP. We have not confirmed that left-handed grids necessarily -!................produce errors in single-grid simulations, or that they necessarily -!................produce errors in all multi-grid simulations. -!................Note that transposing or flipping a grid will generally change the handedness. - CALL EXTCDE (25) - END IF -! -! 7.c.3 Unstructured grid -! - CASE ( UNGTYPE ) -! - MAXX = 0. - MAXY = 0. - DXYMAX = 0. - WRITE (NDSO,1150) - - IF (FLGNML) THEN - ZLIM = NML_GRID%ZLIM - DMIN = NML_GRID%DMIN - NDSG = NML_UNST%IDF - VSC = NML_UNST%SF - IDLA = NML_UNST%IDLA - IDFM = NML_UNST%IDFM - RFORM = TRIM(NML_UNST%FORMAT) - FROM = 'NAME' - FNAME = TRIM(NML_UNST%FILENAME) - UGOBCFILE = TRIM(NML_UNST%UGOBCFILE) - END IF - END SELECT !GTYPE -! -! 7.d Depth information for grid -! - IF (FLGNML) THEN - IF (GTYPE.NE.UNGTYPE) THEN - ZLIM = NML_GRID%ZLIM - DMIN = NML_GRID%DMIN - NDSG = NML_DEPTH%IDF - VSC = NML_DEPTH%SF - IDLA = NML_DEPTH%IDLA - IDFM = NML_DEPTH%IDFM - RFORM = TRIM(NML_DEPTH%FORMAT) - FROM = TRIM(NML_DEPTH%FROM) - FNAME = TRIM(NML_DEPTH%FILENAME) - END IF - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) ZLIM, DMIN, NDSG, VSC, IDLA, & - IDFM, RFORM, FROM, FNAME - END IF -! - DMIN = MAX ( 1.E-3 , DMIN ) - IF ( ABS(VSC) .LT. 1.E-7 ) VSC = 1. - IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 - IF (IDFM.LT.1 .OR. IDFM.GT.3) IDFM = 1 -! - WRITE (NDSO,972) NDSG, ZLIM, DMIN, VSC, IDLA, IDFM - IF (IDFM.EQ.2) WRITE (NDSO,973) TRIM(RFORM) - IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSI) & - WRITE (NDSO,974) TRIM(FNAME) -! -! 7.e Read bottom depths -! - IF ( GTYPE.NE.UNGTYPE ) THEN -! -! Reading depths on structured grid -! -!Li Suspended for SMC grid, which uses depth stored in its cell array. -!Li JGLi15Oct2014 - IF( RGLGRD ) THEN -!Li - IF ( NDSG .EQ. NDSI ) THEN - IF ( IDFM .EQ. 3 ) THEN - WRITE (NDSE,1004) NDSG - CALL EXTCDE (23) - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - END IF - ELSE ! NDSG.NE.NDSI - IF ( IDFM .EQ. 3 ) THEN - IF (FROM.EQ.'NAME') THEN - OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME), & - FORM='UNFORMATTED',& - STATUS='OLD',ERR=2000,IOSTAT=IERR) - ELSE - OPEN (NDSG, FORM='UNFORMATTED', & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - ELSE - IF (FROM.EQ.'NAME') THEN - OPEN (NDSG,FILE=TRIM(FNMPRE)//TRIM(FNAME), & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - ELSE - OPEN (NDSG, & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - END IF - END IF !( NDSG .EQ. NDSI ) -! -!Li End of RGLGRD block - ENDIF -!Li -! - ALLOCATE ( ZBIN(NX,NY), OBSX(NX,NY), OBSY(NX,NY) ) -! -! Initialize subgrid obstructions with zeros. - ZBIN(:,:)=0. - OBSX(:,:)=0. - OBSY(:,:)=0. -!Li Suspend read depth file. JGLi15Oct2014 - IF( RGLGRD ) THEN -!Li - CALL INA2R ( ZBIN, NX, NY, 1, NX, 1, NY, NDSG, NDST, NDSE, & - IDFM, RFORM, IDLA, VSC, 0.0) -!Li End of RGLGRD block - ENDIF -!Li -! - ELSE -! -! Reading depths on unstructured grid (this also sets number of mesh points, NX) -! - CALL READMSH(NDSG,FNAME) - ALLOCATE(ZBIN(NX, NY),OBSX(NX,NY),OBSY(NX,NY)) - ZBIN(:,1) = VSC*XYB(:,3) -!/DEBUGSTP WRITE(740,*) 'VSC=', VSC -!/DEBUGSTP WRITE(740,*) 'Printing ZBIN 1' -!/DEBUGSTP DO IX=1,NX -!/DEBUGSTP WRITE(740,*) 'IX/ZBIN=', IX, ZBIN(IX,1) -!/DEBUGSTP END DO -! -! subgrid obstructions are not yet handled in unstructured grids -! - OBSX(:,:)=0. - OBSY(:,:)=0. + CALL W3GRID - END IF -! -! 7.f Set up temporary map -! - ALLOCATE ( TMPSTA(NY,NX), TMPMAP(NY,NX) ) - TMPSTA = 0 -! -!/DEBUGSTP WRITE(740,*) 'Printing ZBIN 2' -!/DEBUGSTP DO IX=1,NX -!/DEBUGSTP WRITE(740,*) 'IX/ZBIN=', IX, ZBIN(IX,1) -!/DEBUGSTP END DO - IF (GTYPE .EQ. UNGTYPE) THEN - TMPSTA = 1 - ELSE - DO IY=1, NY - DO IX=1, NX - IF ( ZBIN(IX,IY) .LE. ZLIM ) TMPSTA(IY,IX) = 1 - END DO - END DO - ENDIF -! -!Li Suspended for SMC grid. JGLi15Oct2014 - IF( RGLGRD ) THEN -!Li -! -! 7.g Subgrid information -! - TRFLAG = FLAGTR - IF ( TRFLAG.GT.6 .OR. TRFLAG.LT.0 ) TRFLAG = 0 -! - IF ( TRFLAG .EQ. 0 ) THEN - WRITE (NDSO,976) 'Not available.' - ELSE IF ( TRFLAG.EQ.1 .OR. TRFLAG.EQ.3 .OR. TRFLAG.EQ.5 ) THEN - WRITE (NDSO,976) 'In between grid points.' - ELSE - WRITE (NDSO,976) 'At grid points.' - END IF -! - IF ( TRFLAG .NE. 0 ) THEN -! -! 7.g.1 Info from input file -! - IF (FLGNML) THEN - NDSTR = NML_OBST%IDF - VSC = NML_OBST%SF - IDLA = NML_OBST%IDLA - IDFT = NML_OBST%IDFM - RFORM = TRIM(NML_OBST%FORMAT) - FROM = TRIM(NML_OBST%FROM) - TNAME = TRIM(NML_OBST%FILENAME) - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) NDSTR, VSC, IDLA, IDFT, RFORM, & - FROM, TNAME - END IF -! - IF ( ABS(VSC) .LT. 1.E-7 ) VSC = 1. - IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 - IF (IDFT.LT.1 .OR. IDFT.GT.3) IDFT = 1 -! - WRITE (NDSO,977) NDSTR, VSC, IDLA, IDFT - IF (IDFT.EQ.2) WRITE (NDSO,973) RFORM - IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSTR) WRITE (NDSO,974) TNAME -! -! 7.g.2 Open file and check if necessary -! - IF ( NDSTR .EQ. NDSI ) THEN - IF ( IDFT .EQ. 3 ) THEN - WRITE (NDSE,1004) NDSTR - CALL EXTCDE (23) - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - END IF - ELSE IF ( NDSTR .EQ. NDSG ) THEN - IF ( ( IDFM.EQ.3 .AND. IDFT.NE.3 ) .OR. & - ( IDFM.NE.3 .AND. IDFT.EQ.3 ) ) THEN - WRITE (NDSE,1005) IDFM, IDFT - CALL EXTCDE (24) - END IF - ELSE - IF ( IDFT .EQ. 3 ) THEN - IF (FROM.EQ.'NAME') THEN - OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & - FORM='UNFORMATTED',STATUS='OLD',ERR=2000, & - IOSTAT=IERR) - ELSE - OPEN (NDSTR, FORM='UNFORMATTED', & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - ELSE - IF (FROM.EQ.'NAME') THEN - OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - ELSE - OPEN (NDSTR, & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - END IF - END IF -! -! 7.g.3 Read the data -! - CALL INA2R ( OBSX, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & - IDFT, RFORM, IDLA, VSC, 0.0) -! - IF ( NDSTR .EQ. NDSI ) CALL NEXTLN ( COMSTR , NDSI , NDSE ) -! - CALL INA2R ( OBSY, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & - IDFT, RFORM, IDLA, VSC, 0.0) -! -! 7.g.4 Limit -! - DO IX=1, NX - DO IY=1, NY - OBSX(IX,IY) = MAX( 0. , MIN(1.,OBSX(IX,IY)) ) - OBSY(IX,IY) = MAX( 0. , MIN(1.,OBSY(IX,IY)) ) - END DO - END DO -! - WRITE (NDSO,*) -! - END IF ! TRFLAG -! -!Li End of RGLGRD block - END IF -!Li -! -!/RTD ! 7.h Calculate rotation angles for configs with rotated pole -!/RTD PoLon = PLON -!/RTD PoLat = PLAT -!/RTD FLAGUNR = UNROT -!/RTD ! Default values PLON=-180, PLAT=90, UNROT=.FALSE. for standard lat-lon -!/RTD -!/RTD ALLOCATE( AnglDin(NX,NY) ) -!/RTD ! For standard lat-lon the rotation angles are zero -!/RTD IF ( PoLat == 90. ) THEN -!/RTD AnglDin = 0. -!/RTD ELSE -!/RTD ALLOCATE(StdLat(NX,NY), StdLon(NX,NY)) -!/RTD -!/RTD ! Calculate rotation angles; (StdLon/Lat are returned, but not used) -!/RTD ! The regular grid X/YGRDIN are used as equatorial lon and lat -!/RTD CALL W3EQTOLL( YGRDIN, XGRDIN, StdLat, StdLon, AnglDin, & -!/RTD PoLat, PoLon, NX*NY ) -!/RTD -!/RTD ! Clean up -!/RTD DEALLOCATE( StdLat, StdLon ) -!/RTD END IF -!/RTD ! Write out rotation information -!/RTD WRITE (NDSO,4203) PoLat, PoLon -!/RTD WRITE (NDSO,4200) -!/RTD WRITE (NDSO,4201) ( IX, IX=1,NX,NX/3) -!/RTD WRITE (NDSO,4202) 1,(AnglDin(IX, 1), IX=1,NX,NX/3) -!/RTD WRITE (NDSO,4202) NY,(AnglDin(IX,NY), IX=1,NX,NX/3) -!/RTD IF ( FLAGUNR ) WRITE (NDSO,4204) -!/RTD WRITE (NDSO,*) ' ' -!/RTD -! -!/SMC !! 7.i Read SMC grid cell and face integer arrays. -!/SMC IF (FLGNML) THEN -!/SMC NDSTR = NML_SMC%MCELS%IDF -!/SMC IDLA = NML_SMC%MCELS%IDLA -!/SMC IDFM = NML_SMC%MCELS%IDFM -!/SMC RFORM = TRIM(NML_SMC%MCELS%FORMAT) -!/SMC TNAME = TRIM(NML_SMC%MCELS%FILENAME) -!/SMC ELSE -!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME -!/SMC END IF -!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) -!/SMC ALLOCATE ( NLvCelsk( 0:NRLv ) ) -!/SMC READ (NDSTR,*) NLvCelsk -!/SMC NCel=NLvCelsk(0) -!/ARC NGLO=NCel -!/SMC WRITE (NDSO,4004) NCel, NLvCelsk -!/SMC -!/SMC ALLOCATE ( IJKCelin( 5, NCel) ) -!/SMC CALL INA2I ( IJKCelin, 5, NCel, 1, 5, 1, NCel, NDSTR, NDST, NDSE, & -!/SMC IDFM, RFORM, IDLA, 1, 0) -!/SMC CLOSE(NDSTR) -!/SMC !!Li Offset to change Equator index = 0 to regular grid index JEQT -!/SMC IJKCelin( 2, :) = IJKCelin( 2, :) + JEQT -!/SMC !!Li Offset to change i-index = 0 to regular grid index ISHFT -!/SMC IJKCelin( 1, :) = IJKCelin( 1, :) + ISHFT -!/SMC -!/SMC WRITE (NDSO,4005) TNAME -!/SMC WRITE (NDSO,4006) 1,(IJKCelin(ix, 1), ix=1,5) -!/SMC WRITE (NDSO,4006) NCel,(IJKCelin(ix, NCel), ix=1,5) -!/SMC WRITE (NDSO,*) ' ' -!/SMC -!/SMC IF (FLGNML) THEN -!/SMC NDSTR = NML_SMC%ISIDE%IDF -!/SMC IDLA = NML_SMC%ISIDE%IDLA -!/SMC IDFM = NML_SMC%ISIDE%IDFM -!/SMC RFORM = TRIM(NML_SMC%ISIDE%FORMAT) -!/SMC TNAME = TRIM(NML_SMC%ISIDE%FILENAME) -!/SMC ELSE -!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME -!/SMC END IF -!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) -!/SMC ALLOCATE ( NLvUFcsk( 0:NRLv ) ) -!/SMC READ (NDSTR,*) NLvUFcsk -!/SMC NUFc = NLvUFcsk(0) -!/SMC NGUI = NUFc -!/SMC WRITE (NDSO,4007) NUFc, NLvUFcsk -!/SMC -!/SMC ALLOCATE ( IJKUFcin( 7, NUFc) ) -!/SMC CALL INA2I ( IJKUFcin, 7, NUFc, 1, 7, 1, NUFc, NDSTR, NDST, NDSE, & -!/SMC IDFM, RFORM, IDLA, 1, 0) -!/SMC CLOSE(NDSTR) -!/SMC !!Li Offset to change Equator index = 0 to regular grid index -!/SMC IJKUFcin( 2, :) = IJKUFcin( 2, :) + JEQT -!/SMC IJKUFcin( 1, :) = IJKUFcin( 1, :) + ISHFT -!/SMC -!/SMC WRITE (NDSO,4008) TNAME -!/SMC WRITE (NDSO,4009) 1,(IJKUFcin(ix, 1), ix=1,7) -!/SMC WRITE (NDSO,4009) NUFc,(IJKUFcin(ix, NUFc), ix=1,7) -!/SMC WRITE (NDSO,*) ' ' -!/SMC -!/SMC IF (FLGNML) THEN -!/SMC NDSTR = NML_SMC%JSIDE%IDF -!/SMC IDLA = NML_SMC%JSIDE%IDLA -!/SMC IDFM = NML_SMC%JSIDE%IDFM -!/SMC RFORM = TRIM(NML_SMC%JSIDE%FORMAT) -!/SMC TNAME = TRIM(NML_SMC%JSIDE%FILENAME) -!/SMC ELSE -!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME -!/SMC END IF -!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) -!/SMC ALLOCATE ( NLvVFcsk( 0:NRLv ) ) -!/SMC READ (NDSTR,*) NLvVFcsk -!/SMC NVFc= NLvVFcsk(0) -!/SMC NGVJ= NVFc -!/SMC WRITE (NDSO,4010) NVFc, NLvVFcsk -!/SMC -!/SMC ALLOCATE ( IJKVFcin( 8, NVFc) ) -!/SMC CALL INA2I ( IJKVFcin, 8, NVFc, 1, 8, 1, NVFc, NDSTR, NDST, NDSE, & -!/SMC IDFM, RFORM, IDLA, 1, 0) -!/SMC CLOSE(NDSTR) -!/SMC !!Li Offset to change Equator index = 0 to regular grid index -!/SMC IJKVFcin( 2, :) = IJKVFcin( 2, :) + JEQT -!/SMC IJKVFcin( 1, :) = IJKVFcin( 1, :) + ISHFT -!/SMC -!/SMC WRITE (NDSO,4011) TNAME -!/SMC WRITE (NDSO,4012) 1,(IJKVFcin(ix, 1), ix=1,8) -!/SMC WRITE (NDSO,4012) NVFc,(IJKVFcin(ix, NVFc), ix=1,8) -!/SMC WRITE (NDSO,*) ' ' -!/SMC -!/SMC !!Li Subgrid obstruction for each SMCels. JGLi15Oct2014 -!/SMC IF (FLGNML) THEN -!/SMC NDSTR = NML_SMC%SUBTR%IDF -!/SMC IDLA = NML_SMC%SUBTR%IDLA -!/SMC IDFM = NML_SMC%SUBTR%IDFM -!/SMC RFORM = TRIM(NML_SMC%SUBTR%FORMAT) -!/SMC TNAME = TRIM(NML_SMC%SUBTR%FILENAME) -!/SMC ELSE -!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME -!/SMC END IF -!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) -!/SMC READ (NDSTR,*) NCObst, JObs -!/SMC WRITE (NDSO,4110) NCObst, JObs -!/SMC -!/SMC ALLOCATE ( IJKObstr( JObs, NCObst) ) -!/SMC CALL INA2I ( IJKObstr, JObs, NCObst, 1, JObs, 1, NCObst, NDSTR, NDST, & -!/SMC NDSE, IDFM, RFORM, IDLA, 1, 0) -!/SMC CLOSE(NDSTR) -!/SMC -!/SMC WRITE (NDSO,4111) TNAME -!/SMC WRITE (NDSO,4012) 1, (IJKObstr(ix, 1), ix=1,JObs) -!/SMC WRITE (NDSO,4012) NCObst, (IJKObstr(ix, NCObst), ix=1,JObs) -!/SMC WRITE (NDSO,*) ' ' -!/SMC -!/SMC !!Li Bounary cell sequential numbers are read only if NBISMC>0 -!/SMC IF( NBISMC .GT. 0 ) THEN -!/SMC IF (FLGNML) THEN -!/SMC NDSTR = NML_SMC%BUNDY%IDF -!/SMC IDLA = NML_SMC%BUNDY%IDLA -!/SMC IDFM = NML_SMC%BUNDY%IDFM -!/SMC RFORM = TRIM(NML_SMC%BUNDY%FORMAT) -!/SMC TNAME = TRIM(NML_SMC%BUNDY%FILENAME) -!/SMC ELSE -!/SMC CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/SMC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME -!/SMC END IF -!/SMC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/SMC FORM='FORMATTED',STATUS='OLD',ERR=2000) -!/SMC ALLOCATE ( NBICelin( NBISMC ) ) -!/SMC CALL INA2I ( NBICelin, 1, NBISMC, 1, 1, 1, NBISMC, NDSTR, NDST, & -!/SMC NDSE, IDFM, RFORM, IDLA, 1, 0) -!/SMC CLOSE(NDSTR) -!/SMC -!/SMC WRITE (NDSO,4013) TNAME -!/SMC WRITE (NDSO,4014) 1, NBICelin( 1) -!/SMC WRITE (NDSO,4014) NBISMC, NBICelin(NBISMC) -!/SMC WRITE (NDSO,*) ' ' -!/SMC ENDIF -!/SMC -! -!/ARC !! 7.j Read Arctic grid cell and boundary cell integer arrays. -!/ARC IF (FLGNML) THEN -!/ARC NDSTR = NML_SMC%MBARC%IDF -!/ARC IDLA = NML_SMC%MBARC%IDLA -!/ARC IDFM = NML_SMC%MBARC%IDFM -!/ARC RFORM = TRIM(NML_SMC%MBARC%FORMAT) -!/ARC TNAME = TRIM(NML_SMC%MBARC%FILENAME) -!/ARC ELSE -!/ARC CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/ARC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME -!/ARC END IF -!/ARC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/ARC FORM='FORMATTED',STATUS='OLD',ERR=2000) -!/ARC READ (NDSTR,*) NARC, NBGL, NBAC -!/ARC WRITE (NDSO,4015) NARC, NBGL, NBAC -!/ARC -!/ARC ALLOCATE ( IJKCelAC( 5, NARC) ) -!/ARC CALL INA2I ( IJKCelAC, 5, NARC, 1, 5, 1, NARC, NDSTR, NDST, NDSE, & -!/ARC IDFM, RFORM, IDLA, 1, 0) -!/ARC CLOSE(NDSTR) -!/ARC !!Li Offset to change Equator index = 0 to regular grid index JEQT -!/ARC IJKCelAC( 2, :) = IJKCelAC( 2, :) + JEQT -!/ARC IJKCelAC( 1, :) = IJKCelAC( 1, :) + ISHFT -!/ARC -!/ARC WRITE (NDSO,4016) TNAME -!/ARC WRITE (NDSO,4006) 1,(IJKCelAC(ix, 1), ix=1,5) -!/ARC WRITE (NDSO,4006) NARC,(IJKCelAC(ix, NARC), ix=1,5) -!/ARC WRITE (NDSO,*) ' ' -!/ARC -!/ARC IF (FLGNML) THEN -!/ARC NDSTR = NML_SMC%AISID%IDF -!/ARC IDLA = NML_SMC%AISID%IDLA -!/ARC IDFM = NML_SMC%AISID%IDFM -!/ARC RFORM = TRIM(NML_SMC%AISID%FORMAT) -!/ARC TNAME = TRIM(NML_SMC%AISID%FILENAME) -!/ARC ELSE -!/ARC CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/ARC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME -!/ARC END IF -!/ARC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/ARC FORM='FORMATTED',STATUS='OLD',ERR=2000) -!/ARC READ (NDSTR,*) NAUI -!/ARC WRITE (NDSO,4017) NAUI -!/ARC -!/ARC ALLOCATE ( IJKUFcAC( 7, NAUI) ) -!/ARC CALL INA2I ( IJKUFcAC, 7, NAUI, 1, 7, 1, NAUI, NDSTR, NDST, NDSE, & -!/ARC IDFM, RFORM, IDLA, 1, 0) -!/ARC CLOSE(NDSTR) -!/ARC !!Li Offset to change Equator index = 0 to regular grid index -!/ARC IJKUFcAC( 2, :) = IJKUFcAC( 2, :) + JEQT -!/ARC IJKUFcAC( 1, :) = IJKUFcAC( 1, :) + ISHFT -!/ARC !!Li Offset Arctic cell sequential numbers by global cell number NGLO -!/ARC DO IP=1, NAUI -!/ARC DO IX=4,7 -!/ARC IF( IJKUFcAC(IX,IP) > 0 ) IJKUFcAC(IX,IP) = IJKUFcAC(IX,IP) + NGLO -!/ARC ENDDO -!/ARC ENDDO -!/ARC -!/ARC WRITE (NDSO,4018) TNAME -!/ARC WRITE (NDSO,4009) 1,(IJKUFcAC(ix, 1), ix=1,7) -!/ARC WRITE (NDSO,4009) NAUI,(IJKUFcAC(ix, NAUI), ix=1,7) -!/ARC WRITE (NDSO,*) ' ' -!/ARC -!/ARC IF (FLGNML) THEN -!/ARC NDSTR = NML_SMC%AJSID%IDF -!/ARC IDLA = NML_SMC%AJSID%IDLA -!/ARC IDFM = NML_SMC%AJSID%IDFM -!/ARC RFORM = TRIM(NML_SMC%AJSID%FORMAT) -!/ARC TNAME = TRIM(NML_SMC%AJSID%FILENAME) -!/ARC ELSE -!/ARC CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/ARC READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFM, RFORM, TNAME -!/ARC END IF -!/ARC OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/ARC FORM='FORMATTED',STATUS='OLD',ERR=2000) -!/ARC READ (NDSTR,*) NAVJ -!/ARC WRITE (NDSO,4019) NAVJ -!/ARC -!/ARC ALLOCATE ( IJKVFcAC( 8, NAVJ) ) -!/ARC CALL INA2I ( IJKVFcAC, 8, NAVJ, 1, 8, 1, NAVJ, NDSTR, NDST, NDSE, & -!/ARC IDFM, RFORM, IDLA, 1, 0) -!/ARC CLOSE(NDSTR) -!/ARC !!Li Offset to change Equator index = 0 to regular grid index -!/ARC IJKVFcAC( 2, :) = IJKVFcAC( 2, :) + JEQT -!/ARC IJKVFcAC( 1, :) = IJKVFcAC( 1, :) + ISHFT -!/ARC !!Li Offset Arctic cell sequential numbers by global cell number NGLO -!/ARC DO IP=1, NAVJ -!/ARC DO IY=4,7 -!/ARC IF( IJKVFcAC(IY,IP) > 0 ) IJKVFcAC(IY,IP) = IJKVFcAC(IY,IP) + NGLO -!/ARC ENDDO -!/ARC ENDDO -!/ARC -!/ARC WRITE (NDSO,4020) TNAME -!/ARC WRITE (NDSO,4012) 1,(IJKVFcAC(ix, 1), ix=1,8) -!/ARC WRITE (NDSO,4012) NAVJ,(IJKVFcAC(ix, NAVJ), ix=1,8) -!/ARC WRITE (NDSO,*) ' ' -!/ARC -!/ARC !!Li Reset total cell and face numbers -!/ARC NCel = NGLO + NARC -!/ARC NUFc = NGUI + NAUI -!/ARC NVFc = NGVJ + NAVJ -!/ARC !!Li Also append Arctic part into base level sub-loops -!/ARC NLvCelsk(NRLv)=NLvCelsk(NRLv)+NARC -!/ARC NLvUFcsk(NRLv)=NLvUFcsk(NRLv)+NAUI -!/ARC NLvVFcsk(NRLv)=NLvVFcsk(NRLv)+NAVJ -!/ARC !!Li Reset NBAC to total number of boundary cells. -!/ARC NBAC = NBGL + NBAC -!/ARC -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 8. Finalize status maps -! 8.a Defines open boundary conditions for UNST grids -! - J = LEN_TRIM(UGOBCFILE) - IF (GTYPE.EQ.UNGTYPE.AND.UGOBCFILE(:J).NE.'unset') & - CALL READMSHOBC(NDSG,UGOBCFILE,TMPSTA,UGOBCOK) - IF ((GTYPE.EQ.UNGTYPE).AND.UGOBCAUTO.AND.(.NOT.UGOBCOK)) & - CALL UG_GETOPENBOUNDARY(TMPSTA,ZBIN,UGOBCDEPTH) -!/DEBUGSTP WRITE(740,*) 'Printing ZBIN 4' -!/DEBUGSTP DO IX=1,NX -!/DEBUGSTP WRITE(740,*) 'IX/ZBIN=', IX, ZBIN(IX,1) -!/DEBUGSTP END DO -! -! 8.b Determine where to get the data -! - IF (FLGNML) THEN - NDSTR = NML_MASK%IDF - IDLA = NML_MASK%IDLA - IDFT = NML_MASK%IDFM - RFORM = TRIM(NML_MASK%FORMAT) - FROM = TRIM(NML_MASK%FROM) - TNAME = TRIM(NML_MASK%FILENAME) - IF (TNAME.EQ.'unset' .OR. TNAME.EQ.'UNSET') FROM='PART' - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) NDSTR, IDLA, IDFT, RFORM, & - FROM, TNAME - END IF -! -! ... Data to be read in parts -! -!/DEBUGGRID WRITE(740+IAPROC,*) 'FROM=', TRIM(FROM) - IF ( FROM .EQ. 'PART' ) THEN -! -! 8.b Update TMPSTA with input boundary data (ILOOP=1) -! and excluded points (ILOOP=2) -! - IF ( ICLOSE .EQ. ICLOSE_TRPL ) THEN - WRITE(NDSE,*)'PROGRAM W3GRID STATUS MAP CALCULATION IS '// & - 'NOT TESTED FOR TRIPOLE GRIDS FOR CASE WHERE USER OPTS '// & - 'TO READ DATA IN PARTS. STOPPING NOW (107).' - CALL EXTCDE ( 107 ) - END IF -!/DEBUGGRID nbCase1=0 -!/DEBUGGRID nbCase2=0 -!/DEBUGGRID nbCase3=0 -!/DEBUGGRID nbCase4=0 -!/DEBUGGRID nbCase5=0 -!/DEBUGGRID nbCase6=0 -!/DEBUGGRID nbCase7=0 -!/DEBUGGRID nbCase8=0 - DO ILOOP=1, 2 -! - I = 1 - IF ( ILOOP .EQ. 1 ) THEN - WRITE (NDSO,979) 'boundary points' - NSTAT = 2 - ELSE - WRITE (NDSO,979) 'excluded points' - NSTAT = -1 - END IF - FIRST = .TRUE. -! - DO - IF (FLGNML) THEN - ! inbound points - IF (ILOOP.EQ.1) THEN - IF (NML_INBND_COUNT%N_POINT.GT.0 .AND. I.LE.NML_INBND_COUNT%N_POINT) THEN - IX = NML_INBND_POINT(I)%X_INDEX - IY = NML_INBND_POINT(I)%Y_INDEX - CONNCT = NML_INBND_POINT(I)%CONNECT - I=I+1 - ELSE - EXIT - END IF - ! excluded points - ELSE IF (ILOOP.EQ.2) THEN - IF (NML_EXCL_COUNT%N_POINT.GT.0 .AND. I.LE.NML_EXCL_COUNT%N_POINT) THEN - IX = NML_EXCL_POINT(I)%X_INDEX - IY = NML_EXCL_POINT(I)%Y_INDEX - CONNCT = NML_EXCL_POINT(I)%CONNECT - I=I+1 - ELSE - EXIT - END IF - END IF - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) IX, IY, CONNCT - END IF -!/DEBUGGRID WRITE(740+IAPROC,*) 'read IX=', IX -!/DEBUGGRID WRITE(740+IAPROC,*) 'read IY=', IY -!/DEBUGGRID WRITE(740+IAPROC,*) 'read CONNCT=', CONNCT - -! -! ... Check if last point reached. -! - IF (IX.EQ.0 .AND. IY.EQ.0) EXIT -! -! ... Check if point in grid. -! - IF (GTYPE.EQ.UNGTYPE.AND.(UGOBCAUTO.OR.UGOBCOK)) CYCLE - IF (IX.LT.1 .OR. IX.GT.NX .OR. IY.LT.1 .OR. IY.GT.NY) THEN - WRITE (NDSO,981) - WRITE (NDSO,*) ' ', IX, IY - CYCLE - END IF -! -! ... Check if intermediate points are to be added. -! -!/DEBUGGRID WRITE(740+IAPROC,*) 'CONNCT=', CONNCT -!/DEBUGGRID WRITE(740+IAPROC,*) 'FIRST=', FIRST - IF ( CONNCT .AND. .NOT.FIRST ) THEN - IDX = IX - IXO - IDY = IY - IYO - IF ( IDX.EQ.0 .OR. IDY.EQ.0 .OR. & - ABS(IDX).EQ.ABS(IDY) ) THEN - NBA = MAX ( MAX(ABS(IDX),ABS(IDY))-1 , 0 ) - IF (IDX.NE.0) IDX = SIGN(1,IDX) - IF (IDY.NE.0) IDY = SIGN(1,IDY) - IX = IXO - IY = IYO - DO IBA=1, NBA - IX = IX + IDX - IY = IY + IDY - IF ( TMPSTA(IY,IX).EQ.1 .OR. J.EQ.2 ) THEN - TMPSTA(IY,IX) = NSTAT - ELSE - WRITE(NDSO,*) 'WARNING: POINT (',IX,',',IY, & - ') CANNOT BE GIVEN THE STATUS ',NSTAT - END IF - END DO - IX = IX + IDX - IY = IY + IDY - ELSE - WRITE (NDSO,982) - WRITE (NDSO,*) ' ', IX , IY - WRITE (NDSO,*) ' ', IXO, IYO - END IF - END IF -! -! ... Check if point itself is to be added -! - IF ( TMPSTA(IY,IX).EQ.1 .OR. J.EQ.2 ) THEN -!/DEBUGGRID nbCase2=nbCase2+1 - TMPSTA(IY,IX) = NSTAT - END IF -! -! ... Save data of previous point -! - IXO = IX - IYO = IY - FIRST = .FALSE. -! -! ... Branch back to read. -! - END DO -! -! 8.c Final processing excluded points -! - IF ( ILOOP .EQ. 2 ) THEN -! - I = 1 - DO - IF (FLGNML) THEN - ! excluded bodies - IF (NML_EXCL_COUNT%N_BODY.GT.0 .AND. I.LE.NML_EXCL_COUNT%N_BODY) THEN - IX = NML_EXCL_BODY(I)%X_INDEX - IY = NML_EXCL_BODY(I)%Y_INDEX - I=I+1 - ELSE - EXIT - END IF - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=2001,ERR=2002) IX, IY - END IF -! -! ... Check if last point reached. -! - IF (IX.EQ.0 .AND. IY.EQ.0) EXIT -! -! ... Check if point in grid. -! - IF (IX.LT.1 .OR. IX.GT.NX .OR. IY.LT.1 .OR. IY.GT.NY) THEN - WRITE (NDSO,981) - WRITE (NDSO,*) ' ', IX, IY - CYCLE - END IF -! -! ... Check if point already excluded -! - IF ( TMPSTA(IY,IX) .EQ. NSTAT ) THEN - WRITE (NDSO,1981) - WRITE (NDSO,*) ' ', IX, IY - CYCLE - END IF -! -! ... Search for points to exclude -! - TMPMAP = TMPSTA - J = 1 - IX1 = IX - IY1 = IY -! - JJ = TMPSTA(IY,IX) -!/DEBUGGRID nbCase3=nbCase3 + 1 - TMPSTA(IY,IX) = NSTAT - DO - NBT = 0 - DO IX=MAX(1,IX1-J), MIN(IX1+J,NX) - DO IY=MAX(1,IY1-J), MIN(IY1+J,NY) - IF ( TMPSTA(IY,IX) .EQ. JJ ) THEN - IF (IX.GT.1) THEN - IF (TMPSTA(IY ,IX-1).EQ.NSTAT & - .AND. TMPMAP(IY ,IX-1).EQ.JJ ) THEN -!/DEBUGGRID nbCase4=nbCase4 + 1 - TMPSTA(IY,IX) = NSTAT - END IF - END IF - IF (IX.LT.NX) THEN - IF (TMPSTA(IY ,IX+1).EQ.NSTAT & - .AND. TMPMAP(IY ,IX+1).EQ.JJ ) THEN -!/DEBUGGRID nbCase5=nbCase5 + 1 - TMPSTA(IY,IX) = NSTAT - END IF - END IF - IF (IY.LT.NY) THEN - IF (TMPSTA(IY+1,IX ).EQ.NSTAT & - .AND. TMPMAP(IY+1,IX ).EQ.JJ ) THEN -!/DEBUGGRID nbCase6=nbCase6 + 1 - TMPSTA(IY,IX) = NSTAT - END IF - END IF - IF (IY.GT.1) THEN - IF (TMPSTA(IY-1,IX ).EQ.NSTAT & - .AND. TMPMAP(IY-1,IX ).EQ.JJ ) THEN -!/DEBUGGRID nbCase7=nbCase7 + 1 - TMPSTA(IY,IX) = NSTAT - END IF - END IF - IF (TMPSTA(IY,IX).EQ.NSTAT) NBT = NBT + 1 - END IF - END DO - END DO -! - IF ( NBT .NE. 0 ) THEN - J = J + 1 - ELSE - EXIT - END IF - END DO - END DO -! -! ... Outer boundary excluded points -! - IF ( GTYPE.NE.UNGTYPE ) THEN - - DO IX=1, NX - IF ( TMPSTA( 1,IX) .EQ. 1 ) TMPSTA( 1,IX) = NSTAT - IF ( TMPSTA(NY,IX) .EQ. 1 ) TMPSTA(NY,IX) = NSTAT - END DO -! - IF ( ICLOSE.EQ.ICLOSE_NONE ) THEN - DO IY=2, NY-1 - IF ( TMPSTA(IY, 1) .EQ. 1 ) TMPSTA(IY, 1) = NSTAT - IF ( TMPSTA(IY,NX) .EQ. 1 ) TMPSTA(IY,NX) = NSTAT - END DO - END IF - - END IF ! GTYPE -! - END IF ! ILOOP .EQ. 2 -! -! ... Branch back input / excluded points ( ILOOP in 8.b ) -! - END DO -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase1=', nbCase1 -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase2=', nbCase2 -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase3=', nbCase3 -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase4=', nbCase4 -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase5=', nbCase5 -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase6=', nbCase6 -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase7=', nbCase7 -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbCase8=', nbCase8 -!/DEBUGGRID nbTMPSTA0=0 -!/DEBUGGRID nbTMPSTA1=0 -!/DEBUGGRID nbTMPSTA2=0 -!/DEBUGGRID DO IX=1,NX -!/DEBUGGRID DO IY=1,NY -!/DEBUGGRID WRITE(740+IAPROC,*) 'IX/IY/TMPSTA=', IX, IY, TMPSTA(IY,IX) -!/DEBUGGRID IF (TMPSTA(IY,IX) .eq. 0) nbTMPSTA0=nbTMPSTA0+1 -!/DEBUGGRID IF (TMPSTA(IY,IX) .eq. 1) nbTMPSTA1=nbTMPSTA1+1 -!/DEBUGGRID IF (TMPSTA(IY,IX) .eq. 2) nbTMPSTA2=nbTMPSTA2+1 -!/DEBUGGRID END DO -!/DEBUGGRID END DO -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbTMPSTA0=', nbTMPSTA0 -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbTMPSTA1=', nbTMPSTA1 -!/DEBUGGRID WRITE(740+IAPROC,*) 'nbTMPSTA2=', nbTMPSTA2 -!/DEBUGGRID FLUSH(740+IAPROC) -! - ELSE ! FROM .EQ. PART -! -! 8.d Read the map from file instead -! - NSTAT = -1 - IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 - IF (IDFT.LT.1 .OR. IDFT.GT.3) IDFT = 1 - -!!Li Suspended for SMC grid though the file input line in ww3_grid.inp -!!Li is kept to divert the program into this block. JGLi15Oct2014 -!!Li - IF( RGLGRD ) THEN -!!Li -! - WRITE (NDSO,978) NDSTR, IDLA, IDFT - IF (IDFT.EQ.2) WRITE (NDSO,973) RFORM - IF (FROM.EQ.'NAME') WRITE (NDSO,974) TNAME -! - IF ( NDSTR .EQ. NDSI ) THEN - IF ( IDFT .EQ. 3 ) THEN - WRITE (NDSE,1004) NDSTR - CALL EXTCDE (23) - ELSE - CALL NEXTLN ( COMSTR , NDSI , NDSE ) - END IF - ELSE - IF ( IDFT .EQ. 3 ) THEN - IF (FROM.EQ.'NAME') THEN - OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & - FORM='UNFORMATTED',STATUS='OLD',ERR=2000, & - IOSTAT=IERR) - ELSE - OPEN (NDSTR, FORM='UNFORMATTED', & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - ELSE - IF (FROM.EQ.'NAME') THEN - OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - ELSE - OPEN (NDSTR, & - STATUS='OLD',ERR=2000,IOSTAT=IERR) - END IF - END IF - END IF -! - ALLOCATE ( READMP(NX,NY) ) - CALL INA2I ( READMP, NX, NY, 1, NX, 1, NY, NDSTR, NDST, & - NDSE, IDFT, RFORM, IDLA, 1, 0 ) -! - IF ( ICLOSE.EQ.ICLOSE_NONE ) THEN - DO IY=2, NY-1 - IF ( READMP( 1,IY) .EQ. 1 ) READMP( 1,IY) = 3 - IF ( READMP(NX,IY) .EQ. 1 ) READMP(NX,IY) = 3 - END DO - END IF -! - DO IX=1, NX - IF ( READMP(IX, 1) .EQ. 1 ) READMP(IX, 1) = 3 - IF ( READMP(IX,NY) .EQ. 1 .AND. ICLOSE .NE. ICLOSE_TRPL) & - READMP(IX,NY) = 3 - END DO -! - DO IY=1, NY - DO IX=1, NX - IF ( READMP(IX,IY) .EQ. 3 ) THEN - TMPSTA(IY,IX) = NSTAT - ELSE - TMPSTA(IY,IX) = READMP(IX,IY) - ! force to dry the sea points over zlim - IF ( ZBIN(IX,IY) .GT. ZLIM ) TMPSTA(IY,IX) = 0 - END IF - END DO - END DO - DEALLOCATE ( READMP ) -!!Li - ENDIF !! RGLGRD -!!Li -! - END IF !FROM .NE. 'PART' -! -! 8.e Get NSEA and other counters -! - NSEA = 0 - NLAND = 0 - NBI = 0 - NBT = 0 -! - DO IX=1, NX - DO IY=1, NY - IF ( TMPSTA(IY,IX) .GT. 0 ) NSEA = NSEA + 1 - IF ( TMPSTA(IY,IX) .EQ. 0 ) NLAND = NLAND + 1 - IF ( TMPSTA(IY,IX) .LT. 0 ) NBT = NBT + 1 - IF ( TMPSTA(IY,IX) .EQ. 2 ) NBI = NBI + 1 - END DO - END DO -! -!/SMC !Li Moved before FLBPI is defined with NBI value. JGLi05Jun2015 -!/SMC !Li Overwrite NSEA with NCel for SMC grid. -!/SMC NSEA = NCel -!/SMC !Li Use input NBI number for SMC grid because merged -!/SMC !Li cells are over-counted by model. -!/SMC NBI = NBISMC -!/SMC !Li No land points are used in SMC grid. JGLi26Feb2016 -!/SMC NLAND = 0 -! - WRITE (NDSO,980) - FLBPI = NBI .GT. 0 - IF ( .NOT. FLBPI ) THEN - WRITE (NDSO,985) - ELSE - WRITE (NDSO,986) NBI -!/O1 IF ( FLAGLL ) THEN -!/O1 WRITE (NDSO, 987) -!/O1 ELSE -!/O1 WRITE (NDSO,1987) -!/O1 END IF -!/O1 IBI = 1 -!/O1 DO IY=1, NY -!/O1 DO IX=1, NX -!/O1 IF (GTYPE.NE.UNGTYPE) THEN -!/O1 X = FACTOR * ( XGRDIN(IX,IY) ) -!/O1 Y = FACTOR * ( YGRDIN(IX,IY) ) -!/O1 ELSE -!/O1 X = FACTOR * XYB(IX,1) -!/O1 Y = FACTOR * XYB(IX,2) -!/O1 END IF -!/O1 IF ( TMPSTA(IY,IX).EQ.2 ) THEN -!/O1 IF ( FLAGLL ) THEN -!/O1 WRITE (NDSO, 988) IBI, IX, IY, X, Y -!/O1 ELSE -!/O1 WRITE (NDSO,1988) IBI, IX, IY, X, Y -!/O1 END IF -!/O1 IBI = IBI + 1 -!/O1 END IF -!/O1 END DO -!/O1 END DO - END IF -! - WRITE (NDSO,1980) - IF ( NBT .EQ. 0 ) THEN - WRITE (NDSO,1985) - ELSE - WRITE (NDSO,1986) NBT - END IF -! -! 8.f Set up all maps -! -!!Li CALL W3DIMX ( 1, NX, NY, NSEA, NDSE, NDST ) - CALL W3DIMX ( 1, NX, NY, NSEA, NDSE, NDST & -!/SMC , NCel, NUFc, NVFc, NRLv & -!/ARC , NARC, NBAC, NSPEC & - ) -!/SMC WRITE (NDSO,4021) NCel -! -! 8.g Activation of reflections and scattering - FFACBERG=FACBERG -!/REF1 REFPARS(1)=REFCOAST -!/REF1 REFPARS(2)=REFSUBGRID -!/REF1 REFPARS(3)=REFUNSTSOURCE -!/REF1 REFPARS(4)=REFICEBERG -!/REF1 REFPARS(6)=REFFREQ -!/REF1 REFPARS(7)=REFSLOPE -!/REF1 REFPARS(8)=REFCOSP_STRAIGHT -!/REF1 REFPARS(9)=REFRMAX -!/REF1 REFPARS(10)=REFFREQPOW -!/REF1 IF (GTYPE.EQ.UNGTYPE) REFPARS(2:5)=0. -!/REF1 IF (REFMAP.EQ.0) THEN -!/REF1 REFLC(3,:)=REFPARS(7) -!/REF1 END IF - - - IF (GTYPE.NE.UNGTYPE) THEN - DO IY=1, NY - DO IX=1, NX - XGRD(IY,IX) = XGRDIN(IX,IY) - YGRD(IY,IX) = YGRDIN(IX,IY) - END DO - END DO - DEALLOCATE ( XGRDIN, YGRDIN ) - CALL W3GNTX ( 1, 6, 6 ) - ELSE -! -!FA: This distinction between structured and unstructured -! should be removed when XYB is replaced by XGRD and YGRD -! - DO IX=1, NX - XGRD(:,IX) = XYB(IX,1) - YGRD(:,IX) = XYB(IX,2) - END DO - END IF ! GTYPE -! -! -!!Li MAPSTA = TMPSTA -!!Li Shelter MAPSTA LLG definition for SMC by RGLGRD. - IF( RGLGRD ) MAPSTA = TMPSTA - MAPFS = 0 -! -!/T ALLOCATE ( MAPOUT(NX,NY) ) -!/T MAPOUT = 0 -! -!/T IX3 = 1 + NX/60 -!/T IY3 = 1 + NY/60 -!/T CALL PRTBLK (NDST, NX, NY, NX, ZBIN, MAPOUT, 1, 0., & -!/T 1, NX, IX3, 1, NY, IY3, 'Zb', 'm') -! -!/DEBUGSTP WRITE(740,*) 'Printing ZBIN 5' -!/DEBUGSTP DO IX=1,NX -!/DEBUGSTP WRITE(740,*) 'IX/ZBIN=', IX, ZBIN(IX,1) -!/DEBUGSTP END DO - TRNX = 0. - TRNY = 0. -! -!Li Shelter MAPSTA etc LLG definitions for SMC by logical RGLGRD ! -!AR This is only .FALSE. for SMC .. - IF( RGLGRD ) THEN - ISEA = 0 - DO IY=1, NY - DO IX=1, NX - IF ( TMPSTA(IY,IX) .EQ. NSTAT ) THEN - MAPSTA(IY,IX) = 0 - MAPST2(IY,IX) = 1 - TMPSTA(IY,IX) = 3 - ELSE - MAPSTA(IY,IX) = TMPSTA(IY,IX) - MAPST2(IY,IX) = 0 - END IF - IF ( MAPSTA(IY,IX) .NE. 0 ) THEN - ISEA = ISEA + 1 - MAPFS (IY,IX) = ISEA - ZB(ISEA) = ZBIN(IX,IY) -!/T MAPOUT(IX,IY) = 1 - MAPSF(ISEA,1) = IX - MAPSF(ISEA,2) = IY - IF ( FLAGLL ) THEN - Y = YGRD(IY,IX) - CLATS(ISEA) = COS(Y*DERA) - CLATIS(ISEA) = 1. / CLATS(ISEA) - CTHG0S(ISEA) = - TAN(DERA*Y) / RADIUS - ELSE - CLATS(ISEA) = 1. - CLATIS(ISEA) = 1. - CTHG0S(ISEA) = 0. - END IF - END IF - -!/ ------------------------------------------------------------------- / - -! notes: Oct 22 2012: I moved the following "if-then" statement from -! inside the "IF ( MAPSTA(IY,IX) .NE. 0 )" statement to outside that -! statement. This is needed since later on, ATRNX is computed from -! TRNX(ix-1) , TRNX(ix) etc. which causes boundary effects if the -! MAPSTA=0 values are set to TRNX=0 - - IF ( TRFLAG .NE. 0 ) THEN - TRNX(IY,IX) = 1. - OBSX(IX,IY) - TRNY(IY,IX) = 1. - OBSY(IX,IY) - END IF - - END DO - END DO -!/DEBUGSTP DO ISEA=1,NSEA -!/DEBUGSTP WRITE(740,*) 'ISEA,ZB=', ISEA, ZB(ISEA) -!/DEBUGSTP END DO -!/DEBUGSTP FLUSH(740) - ENDIF -!!Li End of RGLGRD IF block -! -!/SMC !Li Pass refined level cell and face counts to NLv*(NRLv) -!/SMC NLvCel(0)=0 -!/SMC NLvUFc(0)=0 -!/SMC NLvVFc(0)=0 -!/SMC DO IP = 1, NRLv -!/SMC NLvCel(IP)=NLvCelsk(IP) + NLvCel(IP-1) -!/SMC NLvUFc(IP)=NLvUFcsk(IP) + NLvUFc(IP-1) -!/SMC NLvVFc(IP)=NLvVFcsk(IP) + NLvVFc(IP-1) -!/SMC ENDDO -!/SMC WRITE (NDSO,4022) NLvCel -!/SMC WRITE (NDSO,4023) NLvUFc -!/SMC WRITE (NDSO,4024) NLvVFc -!/SMC -!/SMC !Li Redefine MAPSF MAPFS MAPSTA MAPST2 CLATS and ZB for SMC Grid, -!/SMC !Li using SMC grid cell array and assuming NSEA=NCel. -!/SMC MAPSTA = 0 -!/SMC MAPST2 = 1 -!/SMC MAPFS = 0 -!/SMC -!/SMC !Li Pass input SMC arrays to newly declared grid arrays. -!/SMC WRITE (NDSO,4025) NCel -!/SMC JJ=NCel -!/ARC JJ=NGLO -!/SMC IJKCel(:, 1:JJ )=IJKCelin(:, 1:JJ ) -!/SMC IJKUFc(:, 1:NGUI)=IJKUFcin(:, 1:NGUI) -!/SMC IJKVFc(:, 1:NGVJ)=IJKVFcin(:, 1:NGVJ) -!/ARC !Li Append Arctic part -!/ARC IJKCel(:, NGLO+1:NCel)=IJKCelAC(:, 1:NARC) -!/ARC IJKUFc(:, NGUI+1:NUFc)=IJKUFcAC(:, 1:NAUI) -!/ARC IJKVFc(:, NGVJ+1:NVFc)=IJKVFcAC(:, 1:NAVJ) -!/SMC -!/SMC WRITE (NDSO,4026) -!/SMC WRITE (NDSO,4006) 1,(IJKCel(ix, 1), ix=1,5) -!/SMC JJ=NCel -!/SMC WRITE (NDSO,4006) JJ,(IJKCel(ix, JJ), ix=1,5) -!/SMC WRITE (NDSO,*) ' ' -!/SMC WRITE (NDSO,4027) -!/SMC WRITE (NDSO,4009) 1,(IJKUFc(ix, 1), ix=1,7) -!/SMC JJ=NUFc -!/SMC WRITE (NDSO,4009) JJ,(IJKUFc(ix, JJ), ix=1,7) -!/SMC WRITE (NDSO,*) ' ' -!/SMC WRITE (NDSO,4028) -!/SMC WRITE (NDSO,4012) 1,(IJKVFc(ix, 1), ix=1,8) -!/SMC JJ=NVFc -!/SMC WRITE (NDSO,4012) JJ,(IJKVFc(ix, JJ), ix=1,8) -!/SMC WRITE (NDSO,*) ' ' -!/SMC -!/SMC !Li Boundary -9 to 0 cells for cell x-size 2**n -!/SMC !Li Note the position indice for bounary cell are not used. -!/SMC IJKCel(1, -9:0)=0 -!/SMC !Li Use Equator Y index for boundary cells. JGLi04Apr2011 -!/SMC !Li IJKCel(2, -9:0)=0 -!/SMC IJKCel(2, -9:0)=JEQT -!/SMC IJKCel(3, 0)=1 -!/SMC IJKCel(4, 0)=1 -!/SMC !Li Use minimum 10 m depth for boundary cells. -!/SMC !Li Y-size is restricted below base-cell value. -!/SMC !Li For refined boundary cells, its y-size is replaced with -!/SMC !Li the inner cell y-size for flux gradient. -!/SMC IJKCel(5, 0)=10 -!/SMC DO ip=1,9 -!/SMC IJKCel(3,-ip)=IJKCel(3,-ip+1)*2 -!/SMC IK=MIN(ip, NRLv-1) -!/SMC IJKCel(4,-ip)=2**IK -!/SMC IJKCel(5,-ip)=10 -!/SMC ENDDO -!/SMC WRITE (NDSO,4029) -!/SMC DO ip=0, -9, -1 -!/SMC WRITE (NDSO,4030) IJKCel(:,ip) -!/SMC ENDDO -!/SMC -!/SMC WRITE (NDSO,4031) NCel -!/SMC !Li Multi-resolution SMC grid requires rounding of x, y indices -!/SMC !Li by a factor MRFct. -!/SMC MRFct = 2**(NRLv - 1) -!/SMC WRITE (NDSO,4032) MRFct -!/SMC -!/SMC !Li Cosine for SMC uses refined latitude increment. -!/SMC SYMR = SY*DERA/FLOAT( MRFct ) -!/SMC !Li Reference y point for adjusted cell j=0 in radian. JGLi16Feb2016 -!/SMC YJ0R = ( Y0 - 0.5*SY )*DERA -!/SMC -!/SMC DO ISEA=1, NCel -!/ARC !Li There is no polar cell row so it is mapped to last row. -!/ARC IF(ISEA .EQ. NCel) THEN -!/ARC IX=1 -!/ARC IY=NY -!/ARC IK=1 -!/ARC JS=1 -!/ARC ELSE -!/SMC IX=IJKCel(1,ISEA)/MRFct + 1 -!/SMC IY=IJKCel(2,ISEA)/MRFct + 1 -!/SMC IK=MAX(1, IJKCel(3,ISEA)/MRFct) -!/SMC JS=MAX(1, IJKCel(4,ISEA)/MRFct) -!/ARC ENDIF -!/ARC -!/SMC ! Check that IX, IY are in the bound of [1,NX] and [1,NY] respec. -!/SMC IF ((IX+IK-1 .GT. NX) .OR. (IX .LE. 0)) THEN -!/SMC WRITE (NDSE,1014) ISEA, IX, IX+IK-1, NX -!/SMC CALL EXTCDE(65) -!/SMC END IF -!/SMC -!/SMC IF ((IY+JS-1 .GT. NY) .OR. (IY .LE. 0)) THEN -!/SMC WRITE (NDSE,1015) ISEA, IY, IY+JS-1, NY -!/SMC CALL EXTCDE(65) -!/SMC END IF -!/SMC -!/SMC !Li Minimum DMIN depth is used as well for SMC. -!/SMC ZB(ISEA)= - MAX( DMIN, FLOAT( IJKCel(5, ISEA) ) ) -!/SMC MAPFS(IY:IY+JS-1,IX:IX+IK-1) = ISEA -!/SMC MAPSTA(IY:IY+JS-1,IX:IX+IK-1) = 1 -!/SMC MAPST2(IY:IY+JS-1,IX:IX+IK-1) = 0 -!/SMC MAPSF(ISEA,1) = IX -!/SMC MAPSF(ISEA,2) = IY -!/SMC MAPSF(ISEA,3) = IY + (IX -1)*NY -!/SMC !Li New variable CLATS to hold cosine latitude at cell centre. -!/SMC !Li Also added CLATIS and CTHG0S for version 4.08. -!/SMC ! JJ=IJKCel(2,ISEA) - JEQT -!/SMC ! Y = SYMR*( FLOAT(JJ)+0.5*FLOAT(IJKCel(4,ISEA)) ) -!/SMC !Li Use adjusted j-index to calculate cell centre y from YJ0R. -!/SMC Y = YJ0R + SYMR*( FLOAT(IJKCel(2,ISEA))+0.5*FLOAT(IJKCel(4,ISEA)) ) -!/ARC !Li Arctic polar cell does not need COS(LAT), set 1 row down. -!/ARC IF(Y .GE. HPI-0.1*SYMR) Y=HPI - SYMR*0.5*FLOAT( MRFct ) -!/ARC -!/SMC CLATS(ISEA) = COS( Y ) -!/SMC CLATIS(ISEA)= 1. / CLATS(ISEA) -!/SMC CTHG0S(ISEA)= - TAN( Y ) / RADIUS -!/SMC !!Li Subgrid obstruction is now defined directly from IJKObstr -!/SMC !!Li so old OBSX/Y are no longer used. JGLi15Oct2014 -!/SMC !!Li Transparency is minimum of all merged cells and >= 0.11 -!/SMC ! TRNMX=1.0 -!/SMC ! TRNMY=1.0 -!/SMC ! DO ip = IX, IX+IK-1 -!/SMC ! TRNMX = MIN( TRNMX, ABS(1.0-OBSX(ip,IY)) ) -!/SMC ! TRNMY = MIN( TRNMY, ABS(1.0-OBSY(ip,IY)) ) -!/SMC ! ENDDO -!/SMC !!Li Sub-grid obstruction is set zero beyond NCObst cells. -!/SMC IF(ISEA .GT. NCObst) THEN -!/SMC TRNMX=1.0 -!/SMC TRNMY=1.0 -!/SMC ELSE -!/SMC !!Li Present obstruction is isotropic and in percentage. -!/SMC TRNMX=1.0 - IJKObstr(1, ISEA)*0.01 -!/SMC TRNMY=1.0 - IJKObstr(JObs, ISEA)*0.01 -!/SMC ENDIF -!/SMC CTRNX(ISEA) = MAX(0.11, TRNMX) -!/SMC CTRNY(ISEA) = MAX(0.11, TRNMY) -!/SMC END DO -!/SMC !!Li Transparency for boundary cells are 1.0 JGLi16Jan2012 -!/SMC CTRNX(-9:0) = 1.0 -!/SMC CTRNY(-9:0) = 1.0 -!/SMC !!Li Check range of MAPSF and MAPFS -!/SMC WRITE (NDSO,4033) MINVAL( MAPSF(:,1) ), MAXVAL( MAPSF(:,1) ) -!/SMC WRITE (NDSO,4034) MINVAL( MAPSF(:,2) ), MAXVAL( MAPSF(:,2) ) -!/SMC WRITE (NDSO,4035) MINVAL( MAPSF(:,3) ), MAXVAL( MAPSF(:,3) ) -!/SMC WRITE (NDSO,4036) MINVAL( MAPFS(:,:) ), MAXVAL( MAPFS(:,:) ) -!/SMC -!/SMC !Li New variable CLATF to hold cosine latitude at cell V face. -!/SMC DO IP = 1, NVFC -!/SMC ! CLATF(IP) = COS( SYMR*FLOAT(IJKVFc(2,IP) - JEQT) ) -!/SMC !Li Use adjusted j-index to calculate cell face Y from YJ0R. -!/SMC CLATF(IP) = COS( SYMR*FLOAT(IJKVFc(2,IP)) + YJ0R ) -!/SMC ENDDO -!/SMC !Li Reset MAPSTA for boundary cells if any. -!/SMC IF(NBISMC .GT. 0) THEN -!/SMC DO IP=1, NBISMC -!/SMC ISEA = NBICelin(IP) -!/SMC IX=IJKCel(1,ISEA)/MRFct + 1 -!/SMC IY=IJKCel(2,ISEA)/MRFct + 1 -!/SMC IK=MAX(1, IJKCel(3,ISEA)/MRFct) -!/SMC JS=MAX(1, IJKCel(4,ISEA)/MRFct) -!/SMC MAPSTA(IY:IY+JS-1,IX:IX+IK-1) = 2 -!/SMC MAPST2(IY:IY+JS-1,IX:IX+IK-1) = 0 -!/SMC ENDDO -!/SMC ENDIF -!/SMC -! -!/ARC !Li Define rotation angle for Arctic cells. -!/ARC PoLonAC = 179.999 -!/ARC PoLatAC = 0.001 -!/ARC ALLOCATE( XLONAC(NARC),YLATAC(NARC),ELONAC(NARC),ELATAC(NARC) ) -!/ARC DO ISEA=NGLO+1, NCel -!/ARC !Li There is no polar cell row so it is mapped to last row. -!/ARC IF(ISEA .EQ. NCel) THEN -!/ARC IX=1 -!/ARC IY=NY -!/ARC IK=1 -!/ARC JS=1 -!/ARC ELSE -!/ARC IX=IJKCel(1,ISEA)/MRFct + 1 -!/ARC IY=IJKCel(2,ISEA)/MRFct + 1 -!/ARC IK=MAX(1, IJKCel(3,ISEA)/MRFct) -!/ARC JS=MAX(1, IJKCel(4,ISEA)/MRFct) -!/ARC ENDIF -!/ARC XLONAC(ISEA-NGLO)= X0 + REAL(IX-1+IK/2)*SX -!/ARC YLATAC(ISEA-NGLO)= Y0 + REAL(IY-1+JS/2)*SY -!/ARC ENDDO -!/ARC -!/ARC CALL W3LLTOEQ ( YLATAC, XLONAC, ELATAC, ELONAC, & -!/ARC & ANGARC, PoLatAC, PoLonAC, NARC ) -!/ARC -!/ARC WRITE (NDSO,4037) NARC -!/ARC WRITE (NDSO,4038) (ANGARC(ix), ix=1,NARC,NARC/8) -!/ARC -! -!/ARC !Li Mapping Arctic boundary cells with inner model cells -!/ARC DO IP=1, NBAC -!/ARC IX=IJKCel(1,IP+NGLO) -!/ARC IY=IJKCel(2,IP+NGLO) -!/ARC DO ISEA=1, NGLO -!/ARC IF( (IX .EQ. IJKCel(1,ISEA)) .AND. & -!/ARC & (IY .EQ. IJKCel(2,ISEA)) ) THEN -!/ARC ICLBAC(IP) = ISEA -!/ARC ENDIF -!/ARC ENDDO -!/ARC ENDDO -!/ARC WRITE (NDSO,4039) NBAC -!/ARC WRITE (NDSO,4040) (ICLBAC(ix), ix=1,NBAC,NBAC/8) -!/ARC -!/ARC !Li Redefine GCT term factor for Arctic part or the netative of -!/ARC !Li tangient of rotated latitude divided by radius. JGLi14Sep2015 -!/ARC DO ISEA=NGLO+1, NCel-1 -!/ARC CTHG0S(ISEA)= - TAN( ELATAC(ISEA-NGLO)*DERA ) / RADIUS -!/ARC ENDDO -!/ARC CTHG0S(NCel)=0.0 -!/ARC -! -!/RTD !Li Assign rotated grid angle for all sea points. JGLi01Feb2016 -!/RTD DO ISEA=1,NSEA -!/RTD IX = MAPSF(ISEA,1) -!/RTD IY = MAPSF(ISEA,2) -!/RTD AnglD(ISEA) = AnglDin(IX,IY) -!/RTD END DO -! -!/T CALL PRTBLK (NDST, NX, NY, NX, ZBIN, MAPOUT, 0, 0., & -!/T 1, NX, IX3, 1, NY, IY3, 'Sea points', 'm') -!/T DEALLOCATE ( MAPOUT ) -! - DO ISP=1, NSPEC+NTH - MAPWN(ISP) = 1 + (ISP-1)/NTH - MAPTH(ISP) = 1 + MOD(ISP-1,NTH) - END DO -! -!/O2 NMAP = 1 + (NX-1)/NCOL -!/O2 WRITE (NDSO,1100) NMAP -!/O2 DO IMAP=1, NMAP -!/O2 IX0 = 1 + (IMAP-1)*NCOL -!/O2 IXN = MIN ( NX , IMAP*NCOL ) -!/O2 DO IY=NY,1,-1 -!/O2 WRITE (NDSO,1101) (TMPSTA(IY,IX),IX=IX0,IXN) -!/O2 END DO -!/O2 WRITE (NDSO,*) ' ' -!/O2 END DO -!/O2 WRITE (NDSO,1102) - -!/O2a OPEN (NDSM,FILE=TRIM(FNMPRE)//'mask.ww3') -!/O2a DO IY=1, NY -!/O2a WRITE (NDSM,998) MIN(1,MAPSTA(IY,:)) -!/O2a END DO -!/O2a CLOSE (NDSM) -! -!/O2b IF ( TRFLAG .GT. 0 ) THEN -!/O2b NMAPB = 1 + (NX-1)/NCOL -!/O2b WRITE (NDSO,1103) 'X', NMAPB -!/O2b DO IMAPB=1, NMAPB -!/O2b IX0 = 1 + (IMAPB-1)*NCOL -!/O2b IXN = MIN ( NX , IMAPB*NCOL ) -!/O2b DO IY=NY,1,-1 -!/O2b WRITE (NDSO,1101) (NINT(10.*OBSX(IX,IY)),IX=IX0,IXN) -!/O2b END DO -!/O2b WRITE (NDSO,*) ' ' -!/O2b END DO -!/O2b WRITE (NDSO,1104) -!/O2b WRITE (NDSO,1103) 'Y', NMAPB -!/O2b DO IMAPB=1, NMAPB -!/O2b IX0 = 1 + (IMAPB-1)*NCOL -!/O2b IXN = MIN ( NX , IMAPB*NCOL ) -!/O2b DO IY=NY,1,-1 -!/O2b WRITE (NDSO,1101) (NINT(10.*OBSY(IX,IY)),IX=IX0,IXN) -!/O2b END DO -!/O2b WRITE (NDSO,*) ' ' -!/O2b END DO -!/O2b WRITE (NDSO,1104) -!/O2b END IF -! -!/O2c OPEN (NDSM,FILE=TRIM(FNMPRE)//'mapsta.ww3', RECL=2*NX*NY*50+1) -!/O2c DO IY=NY,1, -1 -!/O2c DO IX=1,NX -!/O2c DO I=1,50 -!/O2c WRITE (NDSM,1998,ADVANCE='NO') (TMPSTA(IY,IX)) -!/O2c END DO -!/O2c END DO -!/O2c END DO -!/O2c CLOSE (NDSM) -! - -!/IG1 IGPARS(1)=IGMETHOD -!/IG1 IGPARS(2)=IGADDOUTP -!/IG1 IGPARS(3)=IGSOURCE -!/IG1 IGPARS(4)=0 -!/IG1 IF (IGBCOVERWRITE) IGPARS(4)=IGPARS(4)+1 -!/IG1 IF (IGSWELLMAX) IGPARS(4)=IGPARS(4)+2 -!/IG1 IGPARS(5)=1 -!/IG1 DO IK=1,NK -!/IG1 IF (SIG(IK)*TPIINV.LT.IGMAXFREQ) IGPARS(5)=IK -!/IG1 END DO -!/IG1 IGMINDEP=MINVAL(ZB*(-1.)-2) ! -2 / +2 is there for water level changes -!/IG1 IGMAXDEP=MAXVAL(ZB*(-1.)+2) -!/IG1 IF (IGSOURCEATBP.EQ.1) IGMINDEP=1. ! should use true minimum depth ... -!/IG1 IGPARS(6)=1+NINT(LOG(MAX(IGMAXDEP,1.0)/MAX(IGMINDEP,1.0))/LOG(1.1)) -!/IG1 IGPARS(7)=MAX(IGMINDEP,1.0) -!/IG1 IGPARS(8)=IGSOURCEATBP -!/IG1 IGPARS(9)=IGKDMIN -!/IG1 IGPARS(10)=IGFIXEDDEPTH -!/IG1 IGPARS(11)=IGEMPIRICAL**2 -!/IG1 IGPARS(12)=IGSTERMS -! -!/IC2 IC2PARS(:)=0. -!/IC2 IF (IC2DISPER) IC2PARS(1)=1. -!/IC2 IC2PARS(2)=IC2TURB -!/IC2 IC2PARS(3)=IC2ROUGH -!/IC2 IC2PARS(4)=IC2REYNOLDS -!/IC2 IC2PARS(5)=IC2SMOOTH -!/IC2 IC2PARS(6)=IC2VISC -!/IC2 IC2PARS(7)=IC2TURBS -!/IC2 IC2PARS(8)=IC2DMAX -! -!/IC3 IC3PARS(:)=0. -!/IC3 IC3PARS(1)=IC3MAXTHK -!/IC3 IC3PARS(2)=IC2TURB -!/IC3 IC3PARS(3)=IC2ROUGH -!/IC3 IC3PARS(4)=IC2REYNOLDS -!/IC3 IC3PARS(5)=IC2SMOOTH -!/IC3 IC3PARS(6)=IC2VISC -!/IC3 IC3PARS(7)=IC2TURBS -!/IC3 IC3PARS(8)=IC3MAXCNC -!/IC3 IF (IC3CHENG) IC3PARS(9)=1.0 -!/IC3 IC3PARS(10)=IC3HILIM -!/IC3 IC3PARS(11)=IC3KILIM -!/IC3 IF (USECGICE) IC3PARS(12)=1.0 -!/IC3 IC3PARS(13)=IC3HICE -!/IC3 IC3PARS(14)=IC3VISC -!/IC3 IC3PARS(15)=IC3DENS -!/IC3 IC3PARS(16)=IC3ELAS -! -!/IC4 IC4PARS(1)=IC4METHOD -!/IC4 IC4_KI=IC4KI -!/IC4 IC4_FC=IC4FC -! -!/IC5 IC5PARS(:)=0. -!/IC5 IC5PARS(1)=IC5MINIG -!/IC5 IC5PARS(2)=IC5MINWT -!/IC5 IC5PARS(3)=IC5MAXKRATIO -!/IC5 IC5PARS(4)=IC5MAXKI -!/IC5 IC5PARS(5)=IC5MINHW -!/IC5 IC5PARS(6)=IC5MAXITER -!/IC5 IC5PARS(7)=IC5RKICK -!/IC5 IC5PARS(8)=IC5KFILTER -! -!/IS2 IS2PARS(1) = ISC1 -!/IS2 IS2PARS(2) = IS2BACKSCAT -!/IS2 IS2PARS(3)=0. -!/IS2 IF (IS2BREAK) IS2PARS(3)=1. -!/IS2 IS2PARS(4)=IS2C2 -!/IS2 IS2PARS(5)=IS2C3 -!/IS2 IS2PARS(6)=0. -!/IS2 IF (IS2DISP) IS2PARS(6)=1. -!/IS2 IS2PARS(7)=IS2DAMP -!/IS2 IS2PARS(8)=IS2FRAGILITY -!/IS2 IS2PARS(9)=IS2DMIN -!/IS2 IS2PARS(10)=0. -!/IS2 IF (IS2DUPDATE) IS2PARS(10)=1. -!/IS2 IS2PARS(11)=IS2CONC -!/IS2 IS2PARS(12)=ABS(IS2CREEPB) -!/IS2 IS2PARS(13)=IS2CREEPC -!/IS2 IS2PARS(14)=IS2CREEPD -!/IS2 IS2PARS(15)=IS2CREEPN -!/IS2 IS2PARS(16)=IS2BREAKE -!/IS2 IS2PARS(17)=IS2BREAKF -!/IS2 IS2PARS(18)=IS2WIM1 -!/IS2 IS2PARS(19)=IS2FLEXSTR -!/IS2 IS2PARS(20)=0. -!/IS2 IF (IS2ISOSCAT) IS2PARS(20)=1. -!/IS2 IS2PARS(21)=IS2ANDISD -!/IS2 IS2PARS(22)=IS2ANDISN -!/IS2 IS2PARS(23)=0. -!/IS2 IF (IS2ANDISB) IS2PARS(23)=1. -!/IS2 IS2PARS(24)=IS2ANDISE -! -! 9.d Estimates shoreline direction for reflection -! and shoreline treatment in general for UNST grids. -! NB: this is updated with moving water levels in W3ULEV -! AR: this is not anymore needed and will be deleted ... -! - IF (GTYPE.EQ.UNGTYPE) THEN - CALL SETUGIOBP -!/REF1 ELSE -!/REF1 CALL W3SETREF - END IF -!/REF1! -!/REF1! 9.a Reads shoreline slope (whith REF1 switch only) -!/REF1! -!/REF1 ALLOCATE ( REFD(NX,NY), REFD2(NX,NY), REFS(NX,NY) ) -!/REF1 IF (REFMAP.EQ.0) THEN -!/REF1 REFS(:,:)=1. -!/REF1 ELSE -!/REF1! -!/REF1! 9.b Info from input file -!/REF1! -!/REF1 IF (FLGNML) THEN -!/REF1 NDSTR = NML_SLOPE%IDF -!/REF1 VSC = NML_SLOPE%SF -!/REF1 IDLA = NML_SLOPE%IDLA -!/REF1 IDFT = NML_SLOPE%IDFM -!/REF1 RFORM = TRIM(NML_SLOPE%FORMAT) -!/REF1 FROM = TRIM(NML_SLOPE%FROM) -!/REF1 TNAME = TRIM(NML_SLOPE%FILENAME) -!/REF1 ELSE -!/REF1 CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/REF1 READ (NDSI,*,END=2001,ERR=2002) NDSTR, VSC, IDLA, IDFT, RFORM, & -!/REF1 FROM, TNAME -!/REF1 END IF -!/REF1! -!/REF1 IF ( ABS(VSC) .LT. 1.E-7 ) VSC = 1. -!/REF1 IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 -!/REF1 IF (IDFT.LT.1 .OR. IDFT.GT.3) IDFT = 1 -!/REF1! -!/REF1 WRITE (NDSO,1977) NDSTR, VSC, IDLA, IDFT -!/REF1 IF (IDFT.EQ.2) WRITE (NDSO,973) RFORM -!/REF1 IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSTR) WRITE (NDSO,974) TNAME -!/REF1! -!/REF1! 9;c Open file and check if necessary -!/REF1! -!/REF1 IF ( NDSTR .EQ. NDSI ) THEN -!/REF1 IF ( IDFT .EQ. 3 ) THEN -!/REF1 WRITE (NDSE,1004) NDSTR -!/REF1 CALL EXTCDE (23) -!/REF1 ELSE -!/REF1 CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/REF1 END IF -!/REF1 ELSE IF ( NDSTR .EQ. NDSG ) THEN -!/REF1 IF ( ( IDFM.EQ.3 .AND. IDFT.NE.3 ) .OR. & -!/REF1 ( IDFM.NE.3 .AND. IDFT.EQ.3 ) ) THEN -!/REF1 WRITE (NDSE,1005) IDFM, IDFT -!/REF1 CALL EXTCDE (24) -!/REF1 END IF -!/REF1 ELSE -!/REF1 IF ( IDFT .EQ. 3 ) THEN -!/REF1 IF (FROM.EQ.'NAME') THEN -!/REF1 OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/REF1 FORM='UNFORMATTED',STATUS='OLD',ERR=2000, & -!/REF1 IOSTAT=IERR) -!/REF1 ELSE -!/REF1 OPEN (NDSTR, FORM='UNFORMATTED', & -!/REF1 STATUS='OLD',ERR=2000,IOSTAT=IERR) -!/REF1 END IF -!/REF1 ELSE -!/REF1 IF (FROM.EQ.'NAME') THEN -!/REF1 OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/REF1 STATUS='OLD',ERR=2000,IOSTAT=IERR) -!/REF1 ELSE -!/REF1 OPEN (NDSTR, & -!/REF1 STATUS='OLD',ERR=2000,IOSTAT=IERR) -!/REF1 END IF !end of (FROM.EQ.'NAME') -!/REF1 END IF !end of ( IDFT .EQ. 3 ) -!/REF1 END IF !end of ( NDSTR .EQ. NDSG ) -!/REF1! -!/REF1! 9.d Read the data -!/REF1! -!/REF1! CALL INA2R ( REFD, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & -!/REF1! IDFM, RFORM, IDLA, VSC, 0.0) -!/REF1! -!/REF1 IF ( NDSTR .EQ. NDSI ) CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/REF1! -!/REF1! CALL INA2R ( REFD2, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & -!/REF1! IDFM, RFORM, IDLA, VSC, 0.0) -!/REF1 CALL INA2R ( REFS, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & -!/REF1 IDFM, RFORM, IDLA, VSC, 0.0) -!/REF1 DO ISEA=1,NSEA -!/REF1 IX = MAPSF(ISEA,1) -!/REF1 IY = MAPSF(ISEA,2) -!/REF1 REFLC(3,ISEA) = REFS(IX,IY)*REFMAP -!/REF1 END DO -! -!/REF1 NMAPB = 1 + (NX-1)/NCOL -!/REF1 WRITE (NDSO,1105) NMAPB -!/T!/REF1 WRITE(NDSO,*) 'Maximum slope for reflection:',MAXVAL(REFS*REFMAP) -! -!/REF1 DO IMAPB=1, NMAPB -!/REF1 IX0 = 1 + (IMAPB-1)*NCOL -!/REF1 IXN = MIN ( NX , IMAPB*NCOL ) -!/T!/REF1 DO IY=NY,1,-1 -!/T!/REF1 WRITE (NDSO,1101) (NINT(100.*REFS(IX,IY)*REFMAP),IX=IX0,IXN) -!/T!/REF1 END DO -!/REF1 WRITE (NDSO,*) ' ' -!/REF1 END DO -!/REF1 WRITE (NDSO,1106) -!/REF1! -!/REF1 WRITE (NDSO,*) -!/REF1! -!/REF1 END IF !end of (REFMAP.EQ.0) -! - DEALLOCATE ( ZBIN, TMPSTA, TMPMAP ) -!/RTD DEALLOCATE ( AnglDin ) -! -! 9.e Reads bottom information from file -! -!/BT4 ALLOCATE ( SED_D50FILE(NX,NY)) -!/BT4 IF ( SEDMAPD50 ) THEN -!/BT4 -!/BT4! -!/BT4! 9.e.1 Info from input file -!/BT4! -!/BT4 IF (FLGNML) THEN -!/BT4 NDSTR = NML_SED%IDF -!/BT4 VSC = NML_SED%SF -!/BT4 IDLA = NML_SED%IDLA -!/BT4 IDFT = NML_SED%IDFM -!/BT4 RFORM = TRIM(NML_SED%FORMAT) -!/BT4 FROM = TRIM(NML_SED%FROM) -!/BT4 TNAME = TRIM(NML_SED%FILENAME) -!/BT4 ELSE -!/BT4 CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/BT4 READ (NDSI,*,END=2001,ERR=2002) NDSTR, VSC, IDLA, IDFT, RFORM, & -!/BT4 FROM, TNAME -!/BT4 END IF -!/BT4! -!/BT4 IF ( ABS(VSC) .LT. 1.E-7 ) THEN -!/BT4 VSC = 1. -!/BT4 ELSE -!/BT4! WARNING TO BE ADDED ... -!/BT4 END IF -!/BT4 IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1 -!/BT4 IF (IDFT.LT.1 .OR. IDFT.GT.3) IDFT = 1 -!/BT4! -!/BT4 WRITE (NDSO,1978) NDSTR, VSC, IDLA, IDFT -!/BT4 IF (IDFT.EQ.2) WRITE (NDSO,973) RFORM -!/BT4 IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSTR) WRITE (NDSO,974) TNAME -!/BT4! -!/BT4! 9.e.2 Open file and check if necessary -!/BT4! -!/BT4 IF ( NDSTR .EQ. NDSI ) THEN -!/BT4 IF ( IDFT .EQ. 3 ) THEN -!/BT4 WRITE (NDSE,1004) NDSTR -!/BT4 CALL EXTCDE (23) -!/BT4 ELSE -!/BT4 CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/BT4 END IF -!/BT4 ELSE IF ( NDSTR .EQ. NDSG ) THEN -!/BT4 IF ( ( IDFM.EQ.3 .AND. IDFT.NE.3 ) .OR. & -!/BT4 ( IDFM.NE.3 .AND. IDFT.EQ.3 ) ) THEN -!/BT4 WRITE (NDSE,1005) IDFM, IDFT -!/BT4 CALL EXTCDE (24) -!/BT4 END IF -!/BT4 ELSE -!/BT4 IF ( IDFT .EQ. 3 ) THEN -!/BT4 IF (FROM.EQ.'NAME') THEN -!/BT4 OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/BT4 FORM='UNFORMATTED',STATUS='OLD',ERR=2000, & -!/BT4 IOSTAT=IERR) -!/BT4 ELSE -!/BT4 OPEN (NDSTR, FORM='UNFORMATTED', & -!/BT4 STATUS='OLD',ERR=2000,IOSTAT=IERR) -!/BT4 END IF -!/BT4 ELSE -!/BT4 IF (FROM.EQ.'NAME') THEN -!/BT4 OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, & -!/BT4 STATUS='OLD',ERR=2000,IOSTAT=IERR) -!/BT4 ELSE -!/BT4 OPEN (NDSTR, & -!/BT4 STATUS='OLD',ERR=2000,IOSTAT=IERR) -!/BT4 END IF -!/BT4 END IF -!/BT4 END IF -!/BT4! -!/BT4! 9.e.3 Read the data -!/BT4! -!/BT4 CALL INA2R ( SED_D50FILE, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, & -!/BT4 IDFM, RFORM, IDLA, VSC, VOF) -!/BT4! -!/BT4 IF ( NDSTR .EQ. NDSI ) CALL NEXTLN ( COMSTR , NDSI , NDSE ) -!/BT4! -!/BT4 WRITE (NDSO,*) 'Min and Max values of grain sizes:',MINVAL(SED_D50FILE), MAXVAL(SED_D50FILE) -!/BT4 WRITE (NDSO,*) -!/BT4! -!/BT4 ELSE -!/BT4 SED_D50FILE(:,:)=SED_D50_UNIFORM -!/BT4 END IF -!/BT4! -!/BT4 DO IY=1, NY -!/BT4 DO IX=1, NX -!/BT4 ISEA = MAPFS (IY,IX) -!/BT4 SED_D50(ISEA) = SED_D50FILE(IX,IY) -!/BT4 SED_D50(ISEA) = MAX(SED_D50(ISEA),1E-5) -!/BT4 ! Critical Shields number, Soulsby, R.L. and R J S W Whitehouse -!/BT4 ! Threshold of sed. motion in coastal environments, Proc. Pacific Coasts and -!/BT4 ! ports, 1997 conference, Christchurch, p149-154, University of Cantebury, NZ -!/BT4 SED_DSTAR=(GRAV*(SED_SG-1)/nu_water**2)**(0.333333)*SED_D50(ISEA) -!/BT4 SED_PSIC(ISEA)=0.3/(1+1.2*SED_DSTAR)+0.55*(1-exp(-0.02*SED_DSTAR)) - - -!/BT4 END DO -!/BT4 END DO -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! 10. Prepare output boundary points. -! ILOOP = 1 to count NFBPO and NBO -! ILOOP = 2 to fill data arrays -! - WRITE (NDSO,990) - IF ( .NOT. FLGNML ) & - OPEN (NDSS,FILE=TRIM(FNMPRE)//'ww3_grid.scratch',FORM='FORMATTED') -! - DO ILOOP = 1, 2 -! - IF ( ILOOP.EQ.2 ) CALL W3DMO5 ( 1, NDST, NDSE, 2 ) -! - I = 1 - NBOTOT = 0 - NFBPO = 0 - NBO(0) = 0 - NBO2(0)= 0 - FIRST = .TRUE. - IF ( .NOT. FLGNML ) THEN - REWIND (NDSS) - IF ( ILOOP .EQ. 1 ) THEN - NDSI2 = NDSI - ELSE - NDSI2 = NDSS - END IF - END IF -! - DO - IF (FLGNML) THEN - ! outbound lines - IF (NML_OUTBND_COUNT%N_LINE.GT.0 .AND. I.LE.NML_OUTBND_COUNT%N_LINE) THEN - XO0 = NML_OUTBND_LINE(I)%X0 - YO0 = NML_OUTBND_LINE(I)%Y0 - DXO = NML_OUTBND_LINE(I)%DX - DYO = NML_OUTBND_LINE(I)%DY - NPO = NML_OUTBND_LINE(I)%NP - I=I+1 - ELSE - NPO=0 - END IF - ELSE - CALL NEXTLN ( COMSTR , NDSI2 , NDSE ) - READ (NDSI2,*,END=2001,ERR=2002) XO0, YO0, DXO, DYO, NPO - END IF -! - IF ( .NOT. FLGNML .AND. ILOOP .EQ. 1 ) THEN - BACKSPACE (NDSI) - READ (NDSI,'(A)') LINE - WRITE (NDSS,'(A)') LINE - END IF -! -! ... Check if new file to be used -! - FIRST = FIRST .OR. NPO.LE.0 - NPO = ABS(NPO) -! -! ... Preparations for new output file including end check -! and output for last output file -! - IF ( FIRST ) THEN -! - FIRST = .FALSE. -! -!/RTD IF ( NPO.NE.0 ) THEN -!/RTD ! Destination pole lat, lon from namelist -!/RTD bPolat = BPLAT(NFBPO+1) -!/RTD bPolon = BPLON(NFBPO+1) -!/RTD END IF -!/RTD ! - IF ( NFBPO.GE.1 .AND. ILOOP.EQ.2 ) THEN - WRITE (NDSO,991) NFBPO, NBO(NFBPO) - NBO(NFBPO-1), & - NBO2(NFBPO) - NBO2(NFBPO-1) -!/RTD ! Print dest. Pole lat/lon if either the dest or present grid is rotated -!/RTD IF ( BPLAT(NFBPO) < 90. .OR. Polat < 90. ) & -!/RTD WRITE (NDSO,1991) BPLAT(NFBPO), BPLON(NFBPO) -!/RTD ! -!/O1 IF ( NBO(NFBPO) - NBO(NFBPO-1) .EQ. 1 ) THEN -!/O1 IF ( FLAGLL ) THEN -!/O1 WRITE (NDSO,992) -!/O1 ELSE -!/O1 WRITE (NDSO,2992) -!/O1 END IF -!/O1 ELSE -!/O1 IF ( FLAGLL ) THEN -!/O1 WRITE (NDSO,1992) -!/O1 ELSE -!/O1 WRITE (NDSO,3992) -!/O1 END IF -!/O1 END IF -!/O1 IP0 = NBO(NFBPO-1)+1 -!/O1 IPN = NBO(NFBPO) -!/O1 IPH = IP0 + (IPN-IP0-1)/2 -!/O1 IPI = IPH -IP0 + 1 + MOD(IPN-IP0+1,2) -!/O1 DO IP=IP0, IPH -!/O1 IF ( FLAGLL ) THEN -!/O1 WRITE (NDSO,1993) IP-NBO(NFBPO-1), & -!/O1 FACTOR*XBPO(IP), & -!/O1 FACTOR*YBPO(IP), & -!/O1 IP+IPI-NBO(NFBPO-1), & -!/O1 FACTOR*XBPO(IP+IPI), & -!/O1 FACTOR*YBPO(IP+IPI) -!/O1 ELSE -!/O1 WRITE (NDSO,3993) IP-NBO(NFBPO-1), & -!/O1 FACTOR*XBPO(IP), & -!/O1 FACTOR*YBPO(IP), & -!/O1 IP+IPI-NBO(NFBPO-1), & -!/O1 FACTOR*XBPO(IP+IPI), & -!/O1 FACTOR*YBPO(IP+IPI) -!/O1 END IF -!/O1 END DO -!/O1 IF ( MOD(IPN-IP0+1,2) .EQ. 1 ) THEN -!/O1 IF ( FLAGLL ) THEN -!/O1 WRITE (NDSO, 993) IPH+1-NBO(NFBPO-1), & -!/O1 FACTOR*XBPO(IPH+1), & -!/O1 FACTOR*YBPO(IPH+1) -!/O1 ELSE -!/O1 WRITE (NDSO,2993) IPH+1-NBO(NFBPO-1), & -!/O1 FACTOR*XBPO(IPH+1), & -!/O1 FACTOR*YBPO(IPH+1) -!/O1 END IF -!/O1 END IF -!/O1 WRITE (NDSO,*) - END IF -! - IF ( NPO .EQ. 0 ) EXIT -! - NFBPO = NFBPO + 1 - IF ( NFBPO .GT. 9 ) THEN - WRITE (NDSE,1006) - CALL EXTCDE ( 50 ) - END IF - NBO2(NFBPO) = NBO2(NFBPO-1) - NBO(NFBPO) = NBOTOT -! - END IF -! -! ... Loop over line segment - - - - - - - - - - - - - - - - - - - - - -! -!/RTD ! If either base or destination grid is rotated lat-lon -!/RTD IF ( allocated(BDYLON) .eqv. .TRUE. ) THEN -!/RTD deallocate( BDYLON, BDYLAT ) -!/RTD IF ( bPolat < 90. .OR. Polat < 90. ) & -!/RTD deallocate( ELatbdy, ELonbdy, Anglbdy ) -!/RTD END IF -!/RTD allocate( BDYLON(NPO), BDYLAT(NPO)) -!/RTD IF ( bPolat < 90. .OR. Polat < 90. ) & -!/RTD allocate( ELatbdy(NPO), ELonbdy(NPO), Anglbdy(NPO) ) -!/RTD ! -!/T WRITE (NDST,9090) -! - DO IP=1, NPO -! - XO = XO0 + REAL(IP-1)*DXO - YO = YO0 + REAL(IP-1)*DYO -!/RTD ! -!/RTD ! Boundary points are specified in coordinates of the destination grid -!/RTD ! -!/RTD ! Collect the line segment points into arrays -!/RTD BDYLON(IP) = XO -!/RTD BDYLAT(IP) = YO -!/RTD ! Close the loop before calculating rotated lat-lon coordinates. -!/RTD END DO -!/RTD -!/RTD ! Create one or two sets of the segment points: -!/RTD ! 1. (BDYLAT, BDYLON) in standard lat-lon coordinates, -!/RTD ! 2. Also (ELatbdy, ELonbdy) in case the base grid is rotated -!/RTD -!/RTD IF ( bPolat < 90. ) THEN -!/RTD ! The destination grid is rotated (std->rot or rot->rot) -!/RTD ! Change BDYLAT, BDYLON to their standard lat-lon positions -!/RTD ! Let ELatbdy,ELonbdy contain the rotated lat-lon coordinates -!/RTD ELatbdy(:) = BDYLAT(:) -!/RTD ELonbdy(:) = BDYLON(:) -!/RTD CALL W3EQTOLL ( ELatbdy, ELonbdy, BDYLAT, BDYLON, & -!/RTD & Anglbdy, bPolat, bPolon, NPO ) -!/RTD ! Let the standard longitudes BDYLON be within the range [-180.,180.[ -!/RTD ! or [0., 360.[ depending on the grid pole -!/RTD IF ( Polon < -90. .OR. Polon > 90. ) THEN -!/RTD BDYLON(:) = MOD( BDYLON(:) + 180., 360. ) - 180. -!/RTD ELSE -!/RTD BDYLON(:) = MOD( BDYLON(:) + 360., 360. ) -!/RTD END IF -!/RTD END IF ! bPolat < 90. -!/RTD ! From now, BDYLAT, BDYLON are defined in standard lat-lon coordinates -!/RTD ! -!/RTD IF ( Polat < 90. ) THEN -!/RTD ! The base grid is rotated (rot->std or rot->rot) -!/RTD ! Find lat-lon in coordinates of the rotated base grid -!/RTD CALL W3LLTOEQ ( BDYLAT, BDYLON, ELatbdy, ELonbdy, & -!/RTD & Anglbdy, Polat, Polon, NPO ) -!/RTD END IF -!/RTD ! -!/RTD ! Take up again the loop over the line segment points -!/RTD DO IP=1, NPO -!/RTD IF ( Polat < 90. ) THEN -!/RTD ! The base grid is rotated (rot->std, rot->rot) -!/RTD ! (The std. lat-lon values BDYLAT, BDYLON go to YBPO, XBPO) -!/RTD XO = ELonbdy(IP) -!/RTD YO = ELatbdy(IP) -!/RTD ELSE -!/RTD ! The base grid is standard geographic (std->rot or std->std) -!/RTD XO = BDYLON(IP) -!/RTD YO = BDYLAT(IP) -!/RTD END IF -! -! ... Compute bilinear remapping weights -! - INGRID = W3GRMP( GSU, XO, YO, IXR, IYR, RD ) -! -! Change cell-corners from counter-clockwise to column-major order - IX = IXR(3); IY = IYR(3); X = RD(3); - IXR(3) = IXR(4); IYR(3) = IYR(4); RD(3) = RD(4); - IXR(4) = IX ; IYR(4) = IY ; RD(4) = X ; -! -!/T WRITE (NDST,9091) FACTOR*XO, FACTOR*YO, & -!/T (IXR(J), IYR(J), RD(J), J=1,4) -! -! ... Check if point in grid -! - IF ( INGRID ) THEN -! -! ... Check if point not on land -! - IF ( ( MAPSTA(IYR(1),IXR(1)).GT.0 .AND. & - RD(1).GT.0.05 ) .OR. & - ( MAPSTA(IYR(2),IXR(2)).GT.0 .AND. & - RD(2).GT.0.05 ) .OR. & - ( MAPSTA(IYR(3),IXR(3)).GT.0 .AND. & - RD(3).GT.0.05 ) .OR. & - ( MAPSTA(IYR(4),IXR(4)).GT.0 .AND. & - RD(4).GT.0.05 ) ) THEN -! -! ... Check storage and store coordinates -! - NBOTOT = NBOTOT + 1 - IF ( ILOOP .EQ. 1 ) CYCLE -! -!/RTD ! BDYLAT, BDYLON contain Y0, X0, which are remapped to standard lat/lon. -!/RTD ! BDYLAT, BDYLON are stored in the mod_def file. -!/RTD IF ( Polat < 90. ) THEN -!/RTD XO = BDYLON(IP) -!/RTD YO = BDYLAT(IP) -!/RTD END IF - XBPO(NBOTOT) = XO - YBPO(NBOTOT) = YO -! -! ... Interpolation factors -! - RDTOT = 0. - DO J=1, 4 - IF ( MAPSTA(IYR(J),IXR(J)).GT.0 .AND. & - RD(J).GT.0.05 ) THEN - RDBPO(NBOTOT,J) = RD(J) - ELSE - RDBPO(NBOTOT,J) = 0. - END IF - RDTOT = RDTOT + RDBPO(NBOTOT,J) - END DO -! - DO J=1, 4 - RDBPO(NBOTOT,J) = RDBPO(NBOTOT,J) / RDTOT - END DO -! -!/T WRITE (NDST,9092) RDTOT, (RDBPO(NBOTOT,J),J=1,4) -! -! ... Determine sea and interpolation point counters -! - DO J=1, 4 - ISEAI(J) = MAPFS(IYR(J),IXR(J)) - END DO -! - DO J=1, 4 - IF ( ISEAI(J).EQ.0 .OR. RDBPO(NBOTOT,J).EQ. 0. ) THEN - IPBPO(NBOTOT,J) = 0 - ELSE - FLNEW = .TRUE. - DO IST=NBO2(NFBPO-1)+1, NBO2(NFBPO) - IF ( ISEAI(J) .EQ. ISBPO(IST) ) THEN - FLNEW = .FALSE. - IPBPO(NBOTOT,J) = IST - NBO2(NFBPO-1) - END IF - END DO - IF ( FLNEW ) THEN - NBO2(NFBPO) = NBO2(NFBPO) + 1 - IPBPO(NBOTOT,J) = NBO2(NFBPO) - NBO2(NFBPO-1) - ISBPO(NBO2(NFBPO)) = ISEAI(J) - END IF - END IF - END DO -! -!/T WRITE (NDST,9093) ISEAI, (IPBPO(NBOTOT,J),J=1,4) -! -! ... Error output -! - ELSE - IF ( FLAGLL ) THEN - WRITE (NDSE,2995) FACTOR*XO, FACTOR*YO - ELSE - WRITE (NDSE,995) FACTOR*XO, FACTOR*YO - END IF - END IF - ELSE - IF ( FLAGLL ) THEN - WRITE (NDSE,2994) FACTOR*XO, FACTOR*YO - ELSE - WRITE (NDSE,994) FACTOR*XO, FACTOR*YO - END IF - END IF -! - END DO -! - NBO(NFBPO) = NBOTOT -! -! ... Branch back to read. -! - END DO -! -! ... End of ILOOP loop -! - END DO -! - IF ( .NOT. FLGNML ) CLOSE ( NDSS, STATUS='DELETE' ) -! - FLBPO = NBOTOT .GT. 0 - IF ( .NOT. FLBPO ) THEN - WRITE (NDSO,996) - ELSE - WRITE (NDSO,997) NBOTOT, NBO2(NFBPO) - END IF -! -!/T0 WRITE (NDST,9095) -!/T0 DO IFILE=1, NFBPO -!/T0 DO IP=NBO2(IFILE-1)+1, NBO2(IFILE) -!/T0 WRITE (NDST,9096) IFILE, IP-NBO2(IFILE-1), ISBPO(IP) -!/T0 END DO -!/T0 END DO -! -!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!10. Write model definition file. -! - WRITE (NDSO,999) - CALL W3IOGR ( 'WRITE', NDSM ) -! - CLOSE (NDSM) -! - GOTO 2222 -! -! Escape locations read errors : -! - 2000 CONTINUE - WRITE (NDSE,1000) IERR - CALL EXTCDE ( 60 ) -! - 2001 CONTINUE - WRITE (NDSE,1001) - CALL EXTCDE ( 61 ) -! - 2002 CONTINUE - WRITE (NDSE,1002) IERR - CALL EXTCDE ( 62 ) -! - 2003 CONTINUE - WRITE (NDSE,1003) - CALL EXTCDE ( 64 ) -! - 2222 CONTINUE - IF ( GTYPE .NE. UNGTYPE) THEN - IF ( NX*NY .NE. NSEA ) THEN - WRITE (NDSO,9997) NX, NY, NX*NY, NSEA, & - 100.*REAL(NSEA)/REAL(NX*NY), NBI, NLAND, NBT - ELSE - WRITE (NDSO,9998) NX, NY, NX*NY, NSEA, NBI, NLAND, NBT - END IF - ELSE IF ( GTYPE .EQ. UNGTYPE ) THEN - IF ( NX*NY .NE. NSEA ) THEN - WRITE (NDSO,9997) 0, 0, NX*NY, NSEA, & - 100.*REAL(NSEA)/REAL(NX*NY), NBI, NLAND, NBT - ELSE - WRITE (NDSO,9998) 0, 0, NX*NY, NSEA, NBI, NLAND, NBT - END IF - ENDIF ! GTYPE .EQ. UNGTYPE - - WRITE (NDSO,9999) - -!/SCRIP GRID1_UNITS='degrees' ! the other option is radians...we don't use this -!/SCRIP GRID1_NAME='src' ! this is not used, except for netcdf output -!/SCRIP CALL GET_SCRIP_INFO(1, & -!/SCRIP & GRID1_CENTER_LON, GRID1_CENTER_LAT, & -!/SCRIP & GRID1_CORNER_LON, GRID1_CORNER_LAT, GRID1_MASK, & -!/SCRIP & GRID1_DIMS, GRID1_SIZE, GRID1_CORNERS, GRID1_RANK) -!/SCRIP -!/SCRIP - -!/SCRIP IF (GTYPE .EQ. UNGTYPE) THEN -!/SCRIP GRID1_RANK=1 -!/SCRIP DEALLOCATE(GRID1_DIMS) -!/SCRIP ALLOCATE(GRID1_DIMS(GRID1_RANK)) -!/SCRIP GRID1_DIMS(1) = GRID1_SIZE -!/SCRIP ENDIF - -!/SCRIP DO I = 1,GRID1_SIZE -!/SCRIP IF (GRID1_CENTER_LON(I) < 0.0) THEN -!/SCRIP GRID1_CENTER_LON(I) = GRID1_CENTER_LON(I)+360.0 -!/SCRIP ENDIF -!/SCRIP DO J = 1,GRID1_CORNERS -!/SCRIP IF (GRID1_CORNER_LON(J,I) < 0.0) THEN -!/SCRIP GRID1_CORNER_LON(J,I) = GRID1_CORNER_LON(J,I)+360.0 -!/SCRIP ENDIF -!/SCRIP ENDDO -!/SCRIP ENDDO - -!/SCRIPNC IERR = NF90_CREATE(TRIM('scrip.nc'), NF90_NETCDF4, NCID) -!/SCRIPNC IERR = NF90_DEF_DIM(NCID, 'grid_size', GRID1_SIZE, grid_size_dimid) -!/SCRIPNC IERR = NF90_DEF_DIM(NCID, 'grid_corners', GRID1_CORNERS, grid_corners_dimid) -!/SCRIPNC IERR = NF90_DEF_DIM(NCID, 'grid_rank', GRID1_RANK, grid_rank_dimid) - -!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_center_lat', NF90_DOUBLE, & -!/SCRIPNC (/grid_size_dimid/),grid_center_lat_varid) -!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_center_lon', NF90_DOUBLE, & -!/SCRIPNC (/grid_size_dimid/),grid_center_lon_varid) -!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_corner_lat', NF90_DOUBLE, & -!/SCRIPNC (/grid_corners_dimid,grid_size_dimid/), & -!/SCRIPNC grid_corner_lat_varid) -!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_corner_lon', NF90_DOUBLE, & -!/SCRIPNC (/grid_corners_dimid,grid_size_dimid/), & -!/SCRIPNC grid_corner_lon_varid) -!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_imask', NF90_INT, & -!/SCRIPNC (/grid_size_dimid/),grid_imask_varid) -!/SCRIPNC IERR = NF90_DEF_VAR(NCID, 'grid_dims', NF90_INT, & -!/SCRIPNC (/grid_rank_dimid/),grid_dims_varid) -!/SCRIPNC IERR = NF90_ENDDEF(NCID) - -!/SCRIP ALLOCATE(GRID1_IMASK(GRID1_DIMS(1))) -!/SCRIP GRID1_IMASK = 0 -!/SCRIP DO I = 1,GRID1_DIMS(1) -!/SCRIP IF (GRID1_MASK(I)) THEN -!/SCRIP GRID1_IMASK(I) = 1 -!/SCRIP ENDIF -!/SCRIP ENDDO - -!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_center_lat_varid,'units',GRID1_UNITS) -!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_center_lon_varid,'units',GRID1_UNITS) -!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_corner_lat_varid,'units',GRID1_UNITS) -!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_corner_lon_varid,'units',GRID1_UNITS) -!/SCRIPNC IERR = NF90_PUT_ATT(NCID,grid_imask_varid,'units','unitless') - -!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_center_lat_varid,GRID1_CENTER_LAT) -!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_center_lon_varid,GRID1_CENTER_LON) -!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_corner_lat_varid,GRID1_CORNER_LAT) -!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_corner_lon_varid,GRID1_CORNER_LON) -!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_imask_varid,GRID1_IMASK) -!/SCRIPNC IERR = NF90_PUT_VAR(NCID,grid_dims_varid,GRID1_DIMS) -!/SCRIPNC IERR = NF90_CLOSE(NCID) - - -! -! Formats -! - 900 FORMAT (/15X,' *** WAVEWATCH III Grid preprocessor *** '/ & - 15X,'==============================================='/) - 901 FORMAT ( ' Comment character is ''',A,''''/) - 902 FORMAT ( ' Grid name : ',A/) - 903 FORMAT (/' Spectral discretization : '/ & - ' --------------------------------------------------'/ & - ' Number of directions :',I4/ & - ' Directional increment (deg.):',F6.1) - 904 FORMAT ( ' First direction (deg.):',F6.1) - 905 FORMAT ( ' Number of frequencies :',I4/ & - ' Frequency range (Hz) :',F9.4,'-',F6.4/ & - ' Increment factor :',F8.3/) -! - 910 FORMAT (/' Model definition :'/ & - ' --------------------------------------------------') - 911 FORMAT ( ' Dry run (no calculations) : ',A/ & - ' Propagation in X-direction : ',A/ & - ' Propagation in Y-direction : ',A/ & - ' Refraction : ',A/ & - ' Current-induced k-shift : ',A/ & - ' Source term calc. and int. : ',A/) - 912 FORMAT (/' Time steps : '/ & - ' --------------------------------------------------'/ & - ' Maximum global time step (s) :',F8.2/ & - ' Maximum CFL time step X-Y (s) :',F8.2/ & - ' Maximum CFL time step k-theta (s) :',F8.2/ & - ' Minimum source term time step (s) :',F8.2/) - 913 FORMAT (/ ' WARNING, TIME STEP LESS THAN 1 s, NITER:',I8 /) - 915 FORMAT ( ' Preprocessing namelists ...') - 916 FORMAT ( ' Preprocessing namelists finished.'/) - 917 FORMAT (/' Equivalent namelists ...'/) - 918 FORMAT (/' Equivalent namelists finished.'/) -! -!/FLX1 810 FORMAT (/' Stresses (Wu 1980)'/ & -!/FLX1 ' --------------------------------------------------'/) -!/FLX2 810 FORMAT (/' Stresses (T&C 96)'/ & -!/FLX2 ' --------------------------------------------------'/) -!/FLX3 810 FORMAT (/' Stresses (T&C 96 capped) ',A/ & -!/FLX3 ' --------------------------------------------------') -!/FLX4 810 FORMAT (/' Stresses (Hwang 2011) ',A/ & -!/FLX4 ' --------------------------------------------------') -!/FLX4 811 FORMAT ( ' drag coefficient scaling :',F8.2 /) -!/FLX4 2810 FORMAT ( ' &FLX4 CDFAC =',F6.3,' /') -!/FLX3 811 FORMAT ( ' Max Cd * 10^3 :',F8.2/ & -!/FLX3 ' Cap type : ',A/) -!/FLX3 2810 FORMAT ( ' &FLX3 CDMAX =',F6.2,'E-3 , CTYPE = ',I1,' /') -! -!/LN0 820 FORMAT (/' Linear input not defined.'/) -!/SEED 820 FORMAT (/' Seeding as proxi for linear input.'/) -! -!/LN1 820 FORMAT (/' Linear input (C&M-R 82) ',A/ & -!/LN1 ' --------------------------------------------------') -!/LN1 821 FORMAT ( ' CLIN :',f8.2/ & -!/LN1 ' Factor for fPM in filter :',F8.2/ & -!/LN1 ' Factor for fh in filter :',F8.2/) -!/LN1 2820 FORMAT ( ' &SLN1 CLIN =',F6.1,', RFPM =',F6.2, & -!/LN1 ', RFHF =',F6.2,' /') -! -!/LNX 820 FORMAT (/' Experimental linear input.'/) -! -!/ST0 920 FORMAT (/' Wind input not defined.'/) -! -!/ST1 920 FORMAT (/' Wind input (WAM-3) ',A/ & -!/ST1 ' --------------------------------------------------') -!/ST1 921 FORMAT ( ' Cinp :',E10.3/) -!/ST1 2920 FORMAT ( ' &SIN1 CINP =',F7.3,' /') -! -!/ST2 920 FORMAT (/' Wind input (T&C 1996) ',A/ & -!/ST2 ' --------------------------------------------------') -!/ST2 921 FORMAT ( ' Height of input wind (m) :',F8.2/ & -!/ST2 ' Factor negative swell :',F9.3/) -!/STAB2 1921 FORMAT ( ' Effective wind mean factor :',F8.2/ & -!/STAB2 ' Stability par. offset :',F9.3/ & -!/STAB2 ' Stab. correction :',F9.3,F8.3/& -!/STAB2 ' Stab. correction stab. fac. :',F7.1,F9.1/) -!/ST2 2920 FORMAT ( ' &SIN2 ZWND =',F5.1,', SWELLF =',F6.3,' /') -!/STAB2 2921 FORMAT ( ' &SIN2 ZWND =',F5.1,', SWELLF =',F6.3,', STABSH =', & -!/STAB2 F6.3,', STABOF = ',E10.3,','/ & -!/STAB2 ' CNEG =',F7.3,', CPOS =',F7.3,', FNEG =',F7.1,' /') -! -!/ST3 920 FORMAT (/' Wind input (WAM 4+) ',A/ & -!/ST3 ' --------------------------------------------------') -!/ST3 921 FORMAT ( ' minimum Charnock coeff. :',F10.4/ & -!/ST3 ' betamax :',F9.3/ & -!/ST3 ' power of cos. in wind input :',F9.3/ & -!/ST3 ' z0max :',F9.3/ & -!/ST3 ' zalp :',F9.3/ & -!/ST3 ' Height of input wind (m) :',F8.2/ & -!/ST3 ' swell attenuation factor :',F9.3/ ) -!/ST3 2920 FORMAT ( ' &SIN3 ZWND =',F5.1,', ALPHA0 =',F8.5,', Z0MAX =',F8.5,', BETAMAX =', & -!/ST3 F8.5,','/ & -!/ST3 ' SINTHP =',F8.5,', ZALP =',F8.5,','/ & -!/ST3 ' SWELLF =',F8.5,'R /'/) -! -!/ST4 920 FORMAT (/' Wind input (WAM 4+) ',A/ & -!/ST4 ' --------------------------------------------------') -!/ST4 921 FORMAT ( ' minimum Charnock coeff. :',F10.4/ & -!/ST4 ' betamax :',F9.3/ & -!/ST4 ' power of cos. in wind input :',F9.3/ & -!/ST4 ' z0max :',F9.3/ & -!/ST4 ' zalp :',F9.3/ & -!/ST4 ' Height of input wind (m) :',F8.2/ & -!/ST4 ' wind stress sheltering :',F9.3/ & -!/ST4 ' swell attenuation param. :',I5/ & -!/ST4 ' swell attenuation factor :',F9.3/ & -!/ST4 ' swell attenuation factor2 :',F9.3/ & -!/ST4 ' swell attenuation factor3 :',F9.3/ & -!/ST4 ' critical Reynolds number :',F9.1/ & -!/ST4 ' swell attenuation factor5 :',F9.3/ & -!/ST4 ' swell attenuation factor6 :',F9.3/ & -!/ST4 ' swell attenuation factor7 :',F14.3/ & -!/ST4 ' ratio of z0 for orb. & mean :',F9.3/) -!/ST4 2920 FORMAT ( ' &SIN4 ZWND =',F5.1,', ALPHA0 =',F8.5,', Z0MAX =',F8.5,', BETAMAX =', & -!/ST4 F8.5,','/ & -!/ST4 ' SINTHP =',F8.5,', ZALP =',F8.5,', TAUWSHELTER =',F8.5, & -!/ST4 ', SWELLFPAR =',I2,','/ & -!/ST4 ' SWELLF =',F8.5,', SWELLF2 =',F8.5, & -!/ST4 ', SWELLF3 =',F8.5,', SWELLF4 =',F9.1,','/ & -!/ST4 ' SWELLF5 =',F8.5,', SWELLF6 =',F8.5, & -!/ST4 ', SWELLF7 =',F12.2,', Z0RAT =',F8.5,', SINBR =',F8.5,' /') -! -!/ST6 920 FORMAT (/' Wind input (Donelan et al, 2006) ',A/ & -!/ST6 ' --------------------------------------------------') -!/ST6 921 FORMAT ( ' negative wind input active : ',A/ & -!/ST6 ' attenuation factor : ',F6.2/ & -!/ST6 ' wind speed scaling factor : ',F6.2/ & -!/ST6 ' frequency cut-off factor : ',F6.2/) -!/ST6 2920 FORMAT ( ' &SIN6 SINA0 =', F6.3, ', SINWS =', F6.2, ', SINFC =', F6.2, ' /') -! -!/STX 920 FORMAT (/' Experimental wind input.'/) -! -!/NL0 922 FORMAT (/' Nonlinear interactions not defined.'/) -! -!/NL1 922 FORMAT (/' Nonlinear interactions (DIA) ',A/ & -!/NL1 ' --------------------------------------------------') -!/NL1 923 FORMAT ( ' Lambda :',F8.2/ & -!/NL1 ' Prop. constant :',E10.3/ & -!/NL1 ' kd conversion factor :',F8.2/ & -!/NL1 ' minimum kd :',F8.2/ & -!/NL1 ' shallow water constants :',F8.2,2F6.2/) -!/NL1 2922 FORMAT ( ' &SNL1 LAMBDA =',F7.3,', NLPROP =',E10.3, & -!/NL1 ', KDCONV =',F7.3,', KDMIN =',F7.3,','/ & -!/NL1 ' SNLCS1 =',F7.3,', SNLCS2 =',F7.3, & -!/NL1 ', SNLCS3 = ',F7.3,' /') -! -!/NL2 922 FORMAT (/' Nonlinear interactions (WRT) ',A/ & -!/NL2 ' --------------------------------------------------') -!/NL2 923 FORMAT ( ' Deep/shallow options : ',A/ & -!/NL2 ' Power of h-f tail : ',F6.1) -!/NL2 1923 FORMAT ( ' Number of depths used : ',I4/ & -!/NL2 ' Depths (m) :',5F7.1) -!/NL2 2923 FORMAT ( ' ',5F7.1) -!/NL2 2922 FORMAT ( ' &SNL2 IQTYPE =',I2,', TAILNL =',F5.1,',', & -!/NL2 ' NDEPTH =',I3,' /') -!/NL2 3923 FORMAT ( ' &SNL2 DEPTHS =',F9.2,' /') -!/NL2 4923 FORMAT ( ' &ANL2 DEPTHS =',F9.2,' ,') -!/NL2 5923 FORMAT ( ' ',F9.2,' ,') -!/NL2 6923 FORMAT ( ' ',F9.2,' /') -! -!/NL3 922 FORMAT (/' Nonlinear interactions (GMD) ',A/ & -!/NL3 ' --------------------------------------------------') -!/NL3 923 FORMAT ( ' Powers in scaling functions : ',2F7.2/ & -!/NL3 ' Nondimension filter depths : ',2F7.2) -!/NL3 1923 FORMAT ( ' Number of quad. definitions : ',I4) -!/NL3 2923 FORMAT ( ' ',2F8.3,F6.1,2E12.4) -!/NL3 2922 FORMAT ( ' &SNL3 NQDEF =',I3,', MSC =',F6.2,', NSC =', & -!/NL3 F6.2,', KDFD =',F6.2,', KDFS =',F6.2,' /') -!/NL3 3923 FORMAT ( ' &ANL3 QPARMS = ',2(F5.3,', '),F5.1,', ',E10.4, & -!/NL3 ', ',E10.4,' /') -!/NL3 4923 FORMAT ( ' &ANL3 QPARMS = ',2(F5.3,', '),F5.1,', ',E10.4, & -!/NL3 ', ',E10.4,' ,') -!/NL3 5923 FORMAT ( ' ',2(F5.3,', '),F5.1,', ',E10.4, & -!/NL3 ', ',E10.4,' ,') -!/NL3 6923 FORMAT ( ' ',2(F5.3,', '),F5.1,', ',E10.4, & -!/NL3 ', ',E10.4,' /') -! -!/NL4 922 FORMAT (/' Nonlinear interactions (TSA) ',A/ & -!/NL4 ' --------------------------------------------------') -!/NL4 923 FORMAT ( ' Source term computation (1=TSA,0=FBI) : ',I2/ & -!/NL4 ' Alternate loops (1=no,2=yes) : ',I2/ & -!/NL4 ' (To speed up computation) ') -!/NL4 2922 FORMAT ( ' &SNL4 ITSA =',I2,', IALT =',I2 ) -! -!/NLX 922 FORMAT (/' Experimental nonlinear interactions.'/) -! -!/NLS 9922 FORMAT (/' HF filter based on Snl ',A/ & -!/NLS ' --------------------------------------------------') -!/NLS 9923 FORMAT ( ' a34 (lambda) :',F9.3,F9.4/ & -!/NLS ' Prop. constant :',E10.3/ & -!/NLS ' maximum relative change :',F9.3/ & -!/NLS ' filter constants :',F8.2,2F6.2/) -!/NLS 8922 FORMAT ( ' &SNLS A34 =',F6.3,', FHFC =',E11.4, & -!/NLS ', DNM =',F6.3,','/' FC1 =',F6.3, & -!/NLS ', FC2 =',F6.3,', FC3 =',F6.3,' /') -! -!/ST0 924 FORMAT (/' Dissipation not defined.'/) -! -!/ST1 924 FORMAT (/' Dissipation (WAM-3) ',A/ & -!/ST1 ' --------------------------------------------------') -!/ST1 925 FORMAT ( ' Cdis :',E10.3/ & -!/ST1 ' Apm :',E10.3/) -!/ST1 2924 FORMAT ( ' &SDS1 CDIS =',E12.4,', APM =',E11.4,' /') -! -!/ST2 924 FORMAT (/' Dissipation (T&C 1996) ',A/ & -!/ST2 ' --------------------------------------------------') -!/ST2 925 FORMAT ( ' High-frequency constants :',F8.2,E11.3,F6.2/ & -!/ST2 ' Low-frequency constants :',E11.3,F6.2/& -!/ST2 ' ',E11.3,F6.2/& -!/ST2 ' Minimum input peak freq. (-):',F10.4/ & -!/ST2 ' Minimum PHI :',F10.4/) -!/ST2 2924 FORMAT ( ' &SDS2 SDSA0 =',E10.3,', SDSA1 =',E10.3,', SDSA2 =', & -!/ST2 E10.3,', '/ & -!/ST2 ' SDSB0 =',E10.3,', SDSB1 =',E10.3,', ', & -!/ST2 'PHIMIN =',E10.3,' /') -! -!/ST3 924 FORMAT (/' Dissipation (WAM Cycle 4+) ',A/ & -!/ST3 ' --------------------------------------------------') -!/ST3 925 FORMAT ( ' SDSC1 :',1E11.3/ & -!/ST3 ' Power of k in mean k :',F8.2/ & -!/ST3 ' weights of k and k^2 :',F9.3,F6.3/) -!/ST3 2924 FORMAT ( ' &SDS3 SDSC1 =',E12.4,', WNMEANP =',F4.2, & -!/ST3 ', FXPM3 =', F4.2,',FXFM3 =',F4.2,', '/ & -!/ST3 ' SDSDELTA1 =', F5.2,', SDSDELTA2 =',F5.2, & -!/ST3 ' /') -! -!/ST4 924 FORMAT (/' Dissipation (Ardhuin / Filipot / Romero ) ',A/ & -!/ST4 ' --------------------------------------------------') -!/ST4 925 FORMAT ( ' SDSC2, SDSBCK, SDSCUM :',3E11.3/ & -!/ST4 ' Power of k in mean k :',F8.2/) - - -!/ST4 2924 FORMAT ( ' &SDS4 SDSBCHOICE = ',F3.1, & -!/ST4 ', SDSC2 =',E12.4,', SDSCUM =',F6.2,', '/ & -!/ST4 ' SDSC4 =',F6.2,', SDSC5 =',E12.4, & -!/ST4 ', SDSC6 =',E12.4,','/ & -!/ST4 ' WNMEANP =',F4.2,', FXPM3 =', F4.2, & -!/ST4 ', FXFM3 =',F4.1,', FXFMAGE =',F6.3, ', '/ & -!/ST4 ' SDSBINT =',E12.4,', SDSBCK =',E12.4, & -!/ST4 ', SDSABK =',F6.3,', SDSPBK =',F6.3,', '/ & -!/ST4 ' SDSHCK =',F5.2,', SDSBR = ',E12.4, & -!/ST4 ', SDSSTRAIN =',F5.1,', SDSSTRAINA =',F4.1, & -!/ST4 ', SDSSTRAIN2 =',F5.1,', '/ & -!/ST4 ' SDSBT =',F5.2,', SDSP =',F5.2, & -!/ST4 ', SDSISO =',I2, & -!/ST4 ', SDSCOS =',F3.1,', SDSDTH =',F5.1,', '/ & -!/ST4 ' SDSBRF1 = ',F5.2,', SDSBRFDF =',I2,', '/ & -!/ST4 ' SDSBM0 = ',F5.2, ', SDSBM1 =',F5.2, & -!/ST4 ', SDSBM2 =',F5.2,', SDSBM3 =',F5.2,', SDSBM4 =', & -!/ST4 F5.2,', '/, & -!/ST4 ' SPMSS = ',F5.2, ', SDKOF =',F5.2, & -!/ST4 ', SDSMWD =',F5.2,', SDSFACMTF =',F5.1,', '/ & -!/ST4 ' SDSMWPOW =',F3.1,', SDSNMTF =', F5.2, & -!/ST4 ', SDSCUMP =', F3.1,', SDSNUW =', E8.3,', '/, & -!/ST4 ' WHITECAPWIDTH =',F5.2, ' WHITECAPDUR =',F5.2,' /') -! -!/ST6 924 FORMAT (/' Dissipation (Rogers et al. 2012) ',A/ & -!/ST6 ' --------------------------------------------------') -!/ST6 925 FORMAT ( ' normalise by threshold spectral density : ',A/& -!/ST6 ' normalise by spectral density : ',A/& -!/ST6 ' coefficient and exponent for '/ & -!/ST6 ' inherent breaking term a1, L as in (21) : ',E9.3,I3/ & -!/ST6 ' cumulative breaking term a2, M as in (22) : ',E9.3,I3/ & -!/ST6 ' ') -!/ST6 2924 FORMAT ( ' &SDS6 SDSET = ',L,', SDSA1 = ',E9.3, & -!/ST6 ', SDSA2 = ',E9.3,', SDSP1 = ',I2,', SDSP1 = ', & -!/ST6 I2,' /' ) -!/ST6 -!/ST6 937 FORMAT (/' Swell dissipation ',A/ & -!/ST6 ' --------------------------------------------------') -!/ST6 940 FORMAT ( ' subroutine W3SWL6 activated : ',A/ & -!/ST6 ' coefficient b1 ',A, ' : ',E9.3/ ) -!/ST6 2937 FORMAT ( ' &SWL6 SWLB1 = ',E9.3,', CSTB1 = ',L,' /') -! -!/STX 924 FORMAT (/' Experimental dissipation.'/) -! -!/BT0 926 FORMAT (/' Bottom friction not defined.'/) -! -!/BT1 926 FORMAT (/' Bottom friction (JONSWAP) ',A/ & -!/BT1 ' --------------------------------------------------') -!/BT1 927 FORMAT ( ' gamma :',F8.4/) -!/BT1 2926 FORMAT ( ' &SBT1 GAMMA =',E12.4,' /') -! -!/BT4 926 FORMAT (/' Bottom friction (SHOWEX) ',A/ & -!/BT4 ' --------------------------------------------------') -!/BT4 927 FORMAT ( ' SEDMAPD50, SED_D50_UNIFORM :',L3,1X,F8.6/ & -!/BT4 ' RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4 :',4F8.4/ & -!/BT4 ' SIGDEPTH, BOTROUGHMIN, BOTROUGHFAC:',3F8.4/) -!/BT4 2926 FORMAT ( ' &SBT4 SEDMAPD50 =',L3,', SED_D50_UNIFORM =',F8.6,','/ & -!/BT4 ' RIPFAC1 =',F8.4,', RIPFAC2 =',F8.4, & -!/BT4 ', RIPFAC3 =',F8.4,', RIPFAC4 =',F8.4,','/ & -!/BT4 ' SIGDEPTH =',F8.4,', BOTROUGHMIN =',F8.4, & -!/BT4 ', BOTROUGHFAC =',F4.1,' /') -!/BTX 926 FORMAT (/' Experimental bottom friction.'/) -! -!/DB0 928 FORMAT (/' Surf breaking not defined.'/) -! -!/DB1 928 FORMAT (/' Surf breaking (B&J 1978) ',A/ & -!/DB1 ' --------------------------------------------------') -!/DB1 929 FORMAT ( ' alpha :',F8.3/ & -!/DB1 ' gamma :',F8.3) -!/DB1 2928 FORMAT ( ' &SDB1 BJALFA =',F7.3,', BJGAM =',F7.3, & -!/DB1 ', BJFLAG = ',A,' /') -! -!/DBX 928 FORMAT (/' Experimental depth-induced breaking.'/) -! -!/TR0 930 FORMAT (/' Triad interactions not defined.'/) -!/TRX 930 FORMAT (/' Experimental triad interactions.'/) -! -!/BS0 932 FORMAT (/' Bottom scattering not defined.'/) -!/BS1 932 FORMAT (/' Experimental bottom scattering (F. Ardhuin).'/) -!/BSX 932 FORMAT (/' Experimental bottom scattering.'/) -! -!/XX0 934 FORMAT (/' Alternative source term slot not used.'/) -!/XXX 934 FORMAT (/' Experimental unclasified source term.'/) -! -!/IC1 935 FORMAT (/' Dissipation via ice parameters (SIC1).'& -!/IC1 ,/' --------------------------------------------------') -! -!/IC2 935 FORMAT (/' Dissipation via ice parameters (SIC2).'& -!/IC2 ,/' --------------------------------------------------') -! -!/IC3 935 FORMAT (/' Dissipation via ice parameters (SIC3).'& -!/IC3 ,/' --------------------------------------------------') -! -!/IC4 935 FORMAT (/' Dissipation via ice parameters (SIC4).'& -!/IC4 ,/' --------------------------------------------------') -! -!/IC5 935 FORMAT (/' Dissipation via ice parameters (SIC5).'& -!/IC5 ,/' --------------------------------------------------') -! -!/IS0 944 FORMAT (/' Ice scattering not defined.'/) -!/IS1 945 FORMAT (/' Ice scattering ',A,/ & -!/IS1 ' --------------------------------------------------') -!/IS1 946 FORMAT (' Isotropic (linear function of ice concentration)'/& -!/IS1 ' slope : ',E10.3/ & -!/IS1 ' offset : ',E10.3) -!/IS1 2946 FORMAT ( ' &SIS1 ISC1 =',E9.3,', ISC2 =',E9.3) -!/IS2 947 FORMAT (/' Ice scattering ',A,/ & -!/IS2 ' --------------------------------------------------') -!/IS2 948 FORMAT (' IS2 Scattering ... '/& -!/IS2 ' scattering coefficient : ',E9.3/ & -!/IS2 ' 0: no back-scattering : ',E9.3/ & -!/IS2 ' TRUE: istropic back-scattering : ',L3/ & -!/IS2 ' TRUE: update of ICEDMAX : ',L3/ & -!/IS2 ' TRUE: keeps updated ICEDMAX : ',L3/ & -!/IS2 ' flexural strength : ',E9.3/ & -!/IS2 ' TRUE: uses Robinson-Palmer disp.: ',L3/ & -!/IS2 ' attenuation : ',F5.2/ & -!/IS2 ' fragility : ',F5.2/ & -!/IS2 ' minimum floe size in meters : ',F5.2/ & -!/IS2 ' pack scattering coef 1 : ',F5.2/ & -!/IS2 ' pack scattering coef 2 : ',F5.2/ & -!/IS2 ' scaling by concentration : ',F5.2/ & -!/IS2 ' creep B coefficient : ',E9.3/ & -!/IS2 ' creep C coefficient : ',F5.2/ & -!/IS2 ' creep D coefficient : ',F5.2/ & -!/IS2 ' creep N power : ',F5.2/ & -!/IS2 ' elastic energy factor : ',F5.2/ & -!/IS2 ' factor for ice breakup : ',F5.2/ & -!/IS2 ' IS2WIM1 : ',F5.2/ & -!/IS2 ' anelastic dissipation : ',L3/ & -!/IS2 ' energy of activation : ',F5.2/ & -!/IS2 ' anelastic coefficient : ',E11.3/ & -!/IS2 ' anelastic exponent : ',F5.2) -!/IS2 2948 FORMAT ( ' &SIS2 ISC1 =',E9.3,', IS2BACKSCAT =',E9.3, & -!/IS2 ', IS2ISOSCAT =',L3,', IS2BREAK =',L3, & -!/IS2 ', IS2DUPDATE =',L3,','/ & -!/IS2 ' IS2FLEXSTR =',E11.3,', IS2DISP =',L3, & -!/IS2 ', IS2DAMP =',F3.1, & -!/IS2 ', IS2FRAGILITY =',F4.2,', IS2DMIN =',F5.2,','/ & -!/IS2 ' IS2C2 =',F12.8,', IS2C3 =',F8.4, & -!/IS2 ', IS2CONC =',F5.1,', IS2CREEPB =',E11.3,','/ & -!/IS2 ' IS2CREEPC =',F5.2,', IS2CREEPD =',F5.2, & -!/IS2 ', IS2CREEPN =',F5.2,','/ & -!/IS2 ' IS2BREAKE =',F5.2, & -!/IS2 ', IS2BREAKF =',F5.2,', IS2WIM1 =',F5.2,','/ & -!/IS2 ', IS2ANDISB =',L3,', IS2ANDISE =',F5.2, & -!/IS2 ', IS2ANDISD =',E11.3,', IS2ANDISN=',F5.2, ' /') -!/UOST 4500 FORMAT (/' Unresolved Obstacles Source Term (UOST) ',A,/ & -!/UOST ' --------------------------------------------------') -!/UOST 4501 FORMAT (' local alpha-beta file: ',A, & -!/UOST ' shadow alpha-beta file: ',A,/ & -!/UOST ' local calibration factor: ',F5.2, & -!/UOST ' shadow calibration factor: ',F5.2) -!/UOST 4502 FORMAT (' &UOST UOSTFILELOCAL = ',A,', UOSTFILESHADOW = ',A,/ & -!/UOST ' UOSTFACTORLOCAL = ',F5.2', UOSTFACTORSHADOW = ',F5.2,' /') -! - 950 FORMAT (/' Propagation scheme : '/ & - ' --------------------------------------------------') - 951 FORMAT ( ' Type of scheme (structured) :',1X,A) - 2951 FORMAT ( ' Type of scheme(unstructured):',1X,A) - 2952 FORMAT ( ' wave setup computation:',1X,A) - 952 FORMAT ( ' ',1X,A) -!/PR1 953 FORMAT ( ' CFLmax depth refraction :',F9.3/) -!/PR1 2953 FORMAT ( ' &PRO1 CFLTM =',F5.2,' /') -! -!/PR2 953 FORMAT ( ' CFLmax depth refraction :',F9.3/ & -!/PR2 ' Effective swell age (h) : switched off'/ & -!/PR2 ' Cut-off latitude (degr.) :',F7.1/) -!/PR2 954 FORMAT ( ' CFLmax depth refraction :',F9.3/ & -!/PR2 ' Effective swell age (h) :',F8.2/ & -!/PR2 ' Cut-off latitude (degr.) :',F7.1/) -!/PR2 2953 FORMAT ( ' &PRO2 CFLTM =',F5.2,', DTIME =',F8.0, & -!/PR2 ', LATMIN =',F5.1,' /') -! -!/SMC 953 FORMAT ( ' Max propagation CFL number :',F9.3/ & -!/SMC ' Effective swell age (h) : switched off'/ & -!/SMC ' Cut-off latitude (degr.) :',F8.2/ & -!/SMC ' Maximum refraction (degr.) :',F8.2/) -!/SMC 954 FORMAT ( ' Max propagation CFL number :',F9.3/ & -!/SMC ' Effective swell age (h) :',F8.2/ & -!/SMC ' Cut-off latitude (degr.) :',F8.2/ & -!/SMC ' Maximum refraction (degr.) :',F8.2/) -!/SMC 2953 FORMAT ( ' &PSMC CFLTM =',F5.2,', DTIME =', F9.1/ & -!/SMC ' LATMIN =',F5.1,', RFMAXD =', F9.2/ & -!/SMC ' UNO3 =',L5, ', AVERG =',L5/ & -!/SMC ' LvSMC =',i5, ', NBISMC =',i9/ & -!/SMC ' ISHFT =',i5, ', JEQT =',i9/ & -!/SMC ' SEAWND =',L5, ' /') -! -!/PR3 953 FORMAT ( ' CFLmax depth refraction :',F9.3/ & -!/PR3 ' Averaging area factor Cg :',F8.2) -!/PR3 954 FORMAT ( ' Averaging area factor theta :',F8.2) -!/PR3 955 FORMAT ( ' **** Internal maximum .GE.',F6.2,' ****') -!/PR3 2953 FORMAT ( ' &PRO3 CFLTM =',F5.2, & -!/PR3 ', WDTHCG = ',F4.2,', WDTHTH = ',F4.2,' /') -! - 2956 FORMAT ( ' &UNST UGBCCFL =',L3,', UGOBCAUTO =',L3, & - ', UGOBCDEPTH =', F8.3,', UGOBCFILE=',A,','/ & - ', EXPFSN =',L3,',EXPFSPSI =',L3, & - ', EXPFSFCT =', L3,',IMPFSN =',L3,',EXPTOTAL=',L3, & - ', IMPTOTAL=',L3,',IMPREFRACTION=', L3, & - ', IMPFREQSHIFT=', L3,', IMPSOURCE=', L3, & - ', SETUP_APPLY_WLV=', L3, & - ', JGS_TERMINATE_MAXITER=', L3, & - ', JGS_TERMINATE_DIFFERENCE=', L3, & - ', JGS_TERMINATE_NORM=', L3, & - ', JGS_LIMITER=', L3, & - ', JGS_USE_JACOBI=', L3, & - ', JGS_BLOCK_GAUSS_SEIDEL=', L3, & - ', JGS_MAXITER=', I5, & - ', JGS_PMIN=', F8.3, & - ', JGS_DIFF_THR=', F8.3, & - ', JGS_NORM_THR=', F8.3, & - ', JGS_NLEVEL=', I3, & - ', JGS_SOURCE_NONLINEAR=', L3 / ) -! - 960 FORMAT (/' Miscellaneous ',A/ & - ' --------------------------------------------------') - 2961 FORMAT ( ' *** WAVEWATCH-III WARNING IN W3GRID :'/ & - ' CICE0.NE.CICEN requires FLAGTR>2'/ & - ' Parameters corrected: CICE0 = CICEN'/) - 2962 FORMAT (/' *** WAVEWATCH-III WARNING IN W3GRID : User requests', & - 'CICE0=CICEN corresponding to discontinuous treatment of ', & - 'ice, so we will change FLAGTR') - 2963 FORMAT (/' *** WAVEWATCH-III WARNING IN W3GRID :'/ & - ' Ice physics used, so we will change FLAGTR.') - 961 FORMAT ( ' Ice concentration cut-offs :',F8.2,F6.2) -!/MGG 962 FORMAT ( ' Moving grid GSE cor. power :',F8.2) -!/SCRIP 963 FORMAT( ' Grid offset for multi-grid w/SCRIP : ',E11.3) - 1972 FORMAT ( ' Compression of track output : ',L3) -!/SEED 964 FORMAT ( ' Xseed in seeding algorithm :',F8.2) - 965 FORMAT (/' Dynamic source term integration scheme :'/ & - ' Xp (-) :',F9.3/ & - ' Xr (-) :',F9.3/ & - ' Xfilt (-) :',F9.3) - 966 FORMAT (/' Wave field partitioning :'/ & - ' Levels (-) :',I5/ & - ' Minimum wave height (m) :',F9.3/ & - ' Wind area multiplier (-) :',F9.3/ & - ' Cut-off wind sea fract. (-) :',F9.3/ & - ' Combine wind seas : ',A/ & - ' Number of swells in fld out :',I5) - 967 FORMAT (/' Miche-style limiting wave height :'/ & - ' Hs,max/d factor (-) :',F9.3/ & - ' Hrms,max/d factor (-) :',F9.3/ & - ' Limiter activated : ',A) - 968 FORMAT ( ' *** FACTOR DANGEROUSLY LOW ***') - 1973 FORMAT (/' Calendar type : ',A) -! -!/REF1 969 FORMAT (/' Shoreline reflection ',A/ & -!/REF1 ' --------------------------------------------------') -! -!/IG1 970 FORMAT (/' Second order and infragravity waves ',A/ & -!/IG1 ' --------------------------------------------------') -! - 5971 FORMAT (' Partitioning method : ',A) - 5972 FORMAT (' Namelist options overridden : ',A) -! -!/IC2 971 FORMAT (/' Boundary layer below ice ',A/ & -!/IC2 ' --------------------------------------------------') -!/IC3 971 FORMAT (/' Visco-elastic ice layer ',A/ & -!/IC3 ' --------------------------------------------------') -!/IC4 971 FORMAT (/' Empirical wave-ice physics ',A/ & -!/IC4 ' --------------------------------------------------') -!/IC5 971 FORMAT (/' Visco-elastic ice layer (SIC5) ',A/ & -!/IC5 ' --------------------------------------------------') -!/IC5 2971 FORMAT ( ' Min. Ice shear modulus G : ', E10.1/, & -!/IC5 ' Min. Wave period T : ', F7.2/, & -!/IC5 ' Max. Wavenumber Ratio (Ko/Kr): ', E10.1/, & -!/IC5 ' Max. Attenu. Rate (Ki) : ', E10.1/, & -!/IC5 ' Min. Water depth (d) : ', F5.0/, & -!/IC5 ' Max. # of Newton Iter. : ', F5.0/, & -!/IC5 ' Use Rand. Kick : ', F5.0/, & -!/IC5 ' Excluded Imag. Corridor : ', F9.4/ ) -! - 8972 FORMAT ( ' Wind input reduction factor in presence of ', & - /' ice :',F6.2, & - /' (0.0==> no reduction and 1.0==> no wind', & - /' input with 100% ice cover)') -! -! - 4970 FORMAT (/' Spectral output on full grid ',A/ & - ' --------------------------------------------------') - 4971 FORMAT ( ' Second order pressure at K=0:',3I4) - 4972 FORMAT ( ' Spectrum of Uss :',3I4) - 4973 FORMAT ( ' Frequency spectrum :',3I4) - 4974 FORMAT ( ' Partions of Uss :',2I4) - 4975 FORMAT ( ' Partition wavenumber #',I02,' : ',1F6.3) - -! - 4980 FORMAT (/' Coastal / iceberg reflection ',A/ & - ' --------------------------------------------------') - 4981 FORMAT ( ' Coefficient for shorelines :',F6.4) - 4989 FORMAT ( ' *** CURVLINEAR GRID: REFLECTION NOT IMPLEMENTED YET ***') - 2977 FORMAT ( ' &SIG1 IGMETHOD =',I2,', IGADDOUTP =',I2,', IGSOURCE =',I2, & - ', IGSTERMS = ',I2,', IGBCOVERWRITE =', L3,','/ & - ' IGSWELLMAX =', L3,', IGMAXFREQ =',F6.4, & - ', IGSOURCEATBP = ',I2,', IGKDMIN = ',F6.4,','/ & - ' IGFIXEDDEPTH = ',F6.2,', IGEMPIRICAL = ',F8.6,' /') -! - 2978 FORMAT ( ' &SIC2 IC2DISPER =',L3,', IC2TURB =',F6.2, & - ', IC2ROUGH =',F10.6,','/ & - ' IC2REYNOLDS = ',F10.1,', IC2SMOOTH = ',F10.1, & - ', IC2VISC =',F6.3,','/ & - ', IC2TURBS =',F8.2,', IC2DMAX =',F5.3,' /') -! - 2979 FORMAT ( ' &SIC3 IC3MAXTHK =',F6.2, ', IC3MAXCNC =',F6.2,','/ & - ' IC2TURB =',F8.2, & - ', IC2ROUGH =',F7.3,','/ & - ' IC2REYNOLDS = ',F10.1,', IC2SMOOTH = ',F10.1, & - ', IC2VISC =',F10.3,','/ & - ' IC2TURBS =',F8.2,', IC3CHENG =',L3, & - ', USECGICE =',L3,', IC3HILIM = ',F6.2,','/ & - ' IC3KILIM = ',E9.2,', IC3HICE = ',E9.2, & - ', IC3VISC = ',E9.2,','/ & - ' IC3DENS = ',E9.2,', IC3ELAS = ',E9.2,' /') -! - 2981 FORMAT ( ' &SIC5 IC5MINIG = ', E9.2, ', IC5MINWT = ', F5.2, & - ', IC5MAXKRATIO = ', E9.2, ','/ & - ' IC5MAXKI = ', E9.2, ', IC5MINHW = ', F4.0, & - ', IC5MAXITER = ', F4.0, ','/ & - ' IC5RKICK = ', F2.0, ', IC5KFILTER = ', F7.4,' /') -! - 2966 FORMAT ( ' &MISC CICE0 =',F6.3,', CICEN =',F6.3, & - ', LICE = ',F8.1,', PMOVE =',F6.3,','/ & - ' XSEED =',F6.3,', FLAGTR = ', I1, & - ', XP =',F6.3,', XR =',F6.3,', XFILT =', F6.3 / & - ' IHM =',I5,', HSPM =',F6.3,', WSM =',F6.3, & - ', WSC =',F6.3,', FLC = ',A/ & - ' NOSW =',I3,', FMICHE =',F6.3,', RWNDC =' , & - F6.3,', WCOR1 =',F6.2,', WCOR2 =',F6.2,','/ & - ' FACBERG =',F4.1,', GSHIFT = ',E11.3, & - ', STDX = ' ,F7.2,', STDY =',F7.2,','/ & - ' STDT =', F8.2, & - ', ICEHMIN =',F5.2,', ICEHFAC =',F5.2,','/ & - ' ICEHINIT =',F5.2,', ICEDISP =',L3, & - ', ICEHDISP =',F5.2,','/ & - ' ICESLN = ',F6.2,', ICEWIND = ',F6.2, & - ', ICESNL = ',F6.2,', ICESDS = ',F5.2,','/ & - ' ICEDDISP = ',F5.2,', ICEFDISP = ',F5.2, & - ', CALTYPE = ',A8,' , TRCKCMPR = ', L3,','/ & - ' BTBET = ', F6.2, ' /') -! - 2976 FORMAT ( ' &OUTS P2SF =',I2,', I1P2SF =',I2,', I2P2SF =',I3,','/& - ' US3D =',I2,', I1US3D =',I3,', I2US3D =',I3,','/& - ' USSP =',I2,', IUSSP =',I3,','/& - ' E3D =',I2,', I1E3D =',I3,', I2E3D =',I3,','/& - ' TH1MF =',I2,', I1TH1M =',I3,', I2TH1M =',I3,','/& - ' STH1MF=',I2,', I1STH1M=',I3,', I2STH1M=',I3,','/& - ' TH2MF =',I2,', I1TH2M =',I3,', I2TH2M =',I3,','/& - ' STH2MF=',I2,', I1STH2M=',I3,', I2STH2M=',I3,' /') -! - 2986 FORMAT ( ' &REF1 REFCOAST =',F5.2,', REFFREQ =',F5.2,', REFSLOPE =',F5.3, & - ', REFMAP =',F4.1, ', REFMAPD =',F4.1, ', REFSUBGRID =',F5.2,','/ & - ' REFRMAX=',F5.2,', REFFREQPOW =',F5.2, & - ', REFICEBERG =',F5.2,', REFCOSP_STRAIGHT =',F4.1,' /') -! - 2987 FORMAT ( ' &FLD TAIL_ID =',I1,' TAIL_LEV =',F5.4,' TAILT1 =',F5.3,& - ' TAILT2 =',F5.3,' /') -!/RTD -!/RTD 4991 FORMAT ( ' &ROTD PLAT =', F6.2,', PLON =', F7.2,', UNROT =',L3,' /') -!/RTD 4992 FORMAT ( ' &ROTB BPLAT =',9(F6.1,",")/ & -!/RTD ' BPLON =',9(F6.1,","),' /') - - 3000 FORMAT (/' The spatial grid: '/ & - ' --------------------------------------------------'/ & - /' Grid type : ',A) - 3001 FORMAT ( ' Coordinate system : ',A) - 3002 FORMAT ( ' Index closure type : ',A) - 3003 FORMAT ( ' Dimensions : ',I6,I8) - 3004 FORMAT (/' Increments (deg.) :',2F10.4/ & - ' Longitude range (deg.) :',2F10.4/ & - ' Latitude range (deg.) :',2F10.4) - 3005 FORMAT ( ' Increments (km) :',2F8.2/ & - ' X range (km) :',2F8.2/ & - ' Y range (km) :',2F8.2) - 3006 FORMAT (/' X-coordinate unit :',I6/ & - ' Scale factor :',F10.4/ & - ' Add offset :',E12.4/ & - ' Layout indicator :',I6/ & - ' Format indicator :',I6) - 3007 FORMAT (/' Y-coordinate unit :',I6/ & - ' Scale factor :',F10.4/ & - ' Add offset :',E12.4/ & - ' Layout indicator :',I6/ & - ' Format indicator :',I6) - 3008 FORMAT ( ' Format : ',A) - 3009 FORMAT ( ' File name : ',A) -!/SMC 4001 FORMAT ( ' SMC refined levels NRLv = ',I8) -!/SMC 4002 FORMAT ( ' SMC Equator j shift no. = ',I8) -!/SMC 4302 FORMAT ( ' SMC I-index shift number = ',I8) -!/SMC 4003 FORMAT ( ' SMC input boundary no. = ',I8) -!/SMC 4004 FORMAT ( ' SMC NCel = ',6I9) -!/SMC 4005 FORMAT ( ' IJKCel(5,NCel) read from ', A) -!/SMC 4006 FORMAT (6I8) -!/SMC 4007 FORMAT ( ' SMC NUFc = ',6I9) -!/SMC 4008 FORMAT ( ' IJKUFc(7,NCel) read from ', A) -!/SMC 4009 FORMAT (8I8) -!/SMC 4010 FORMAT ( ' SMC NVFc = ',6I9) -!/SMC 4011 FORMAT ( ' IJKVFc(8,NCel) read from ', A) -!/SMC 4110 FORMAT ( ' SMC NCObsr = ',6I9) -!/SMC 4111 FORMAT ( ' IJKObstr(1,NCel) read from ', A) -!/SMC 4012 FORMAT (9I8) -!/SMC 4013 FORMAT ( ' NBICelin(NBISMC) read from ', A) -!/SMC 4014 FORMAT (2I8) -!/ARC 4015 FORMAT ( ' ARC NARC = ',6I9) -!/ARC 4016 FORMAT ( ' IJKCel(5,NARC) read from ', A) -!/ARC 4017 FORMAT ( ' ARC NAUI = ',6I9) -!/ARC 4018 FORMAT ( ' IJKUFc(7,NAUI) read from ', A) -!/ARC 4019 FORMAT ( ' ARC NAVJ = ',6I9) -!/ARC 4020 FORMAT ( ' IJKVFc(8,NAVJ) read from ', A) -!/SMC 4021 FORMAT ( ' Varables by W3DIMX NCel = ',I9) -!/SMC 4022 FORMAT ( ' Defined NLvCel ',6I9) -!/SMC 4023 FORMAT ( ' Defined NLvUFc ',6I9) -!/SMC 4024 FORMAT ( ' Defined NLvVFc ',6I9) -!/SMC 4025 FORMAT ( ' Define IJKCel from -9 to ',I9) -!/SMC 4026 FORMAT ( ' IJKCel(5,NCel) defined : ') -!/SMC 4027 FORMAT ( ' IJKUFc(7,NUFc) defined : ') -!/SMC 4028 FORMAT ( ' IJKVFc(8,NVFc) defined : ') -!/SMC 4029 FORMAT ( ' Boundary cells IJKCel(:,-9:0) : ') -!/SMC 4030 FORMAT (5I8) -!/SMC 4031 FORMAT ( ' Define MAPSF ... 1 to ',I9) -!/SMC 4032 FORMAT ( ' Multi-Resolution factor = ',I6) -!/SMC 4033 FORMAT ( ' Range of MAPSF(:,1) : ',2I9) -!/SMC 4034 FORMAT ( ' Range of MAPSF(:,2) : ',2I9) -!/SMC 4035 FORMAT ( ' Range of MAPSF(:,3) : ',2I9) -!/SMC 4036 FORMAT ( ' Range of MAPFS(:,:) : ',2I9) -!/ARC 4037 FORMAT ( ' Arctic AngArc defined as ',I6) -!/ARC 4038 FORMAT (9F8.2) -!/ARC 4039 FORMAT ( ' Arctic ICLBAC defined as ',I6) -!/ARC 4040 FORMAT (9I8) -!/RTD 4200 FORMAT ( ' AnglDin(NX,NY) defn checks : ') -!/RTD 4201 FORMAT ( ' JY/IX',4I8) -!/RTD 4202 FORMAT (I12,4F8.2) -!/RTD 4203 FORMAT ( ' Rotated pole lat/lon (deg.) : ',2F9.3) -!/RTD 4204 FORMAT ( ' Output dirns and x-y vectors will be set to True North') - 972 FORMAT (/' Bottom level unit :',I6/ & - ' Limiting depth (m) :',F8.2/ & - ' Minimum depth (m) :',F8.2/ & - ' Scale factor :',F8.2/ & - ' Layout indicator :',I6/ & - ' Format indicator :',I6) - 973 FORMAT ( ' Format : ',A) - 974 FORMAT ( ' File name : ',A) - 976 FORMAT (/' Sub-grid information : ',A) - 977 FORMAT ( ' Obstructions unit :',I6/ & - ' Scale factor :',F10.4/ & - ' Layout indicator :',I6/ & - ' Format indicator :',I6) - 978 FORMAT (/' Mask information : From file.'/ & - ' Mask unit :',I6/ & - ' Layout indicator :',I6/ & - ' Format indicator :',I6) - 1977 FORMAT ( ' Shoreline slope :',I6/ & - ' Scale factor :',F10.4/ & - ' Layout indicator :',I6/ & - ' Format indicator :',I6) - 1978 FORMAT ( ' Grain sizes :',I6/ & - ' Scale factor :',F10.4/ & - ' Layout indicator :',I6/ & - ' Format indicator :',I6) -! - 979 FORMAT ( ' Processing ',A) - 980 FORMAT (/' Input boundary points : '/ & - ' --------------------------------------------------') - 1980 FORMAT (/' Excluded points : '/ & - ' --------------------------------------------------') - 981 FORMAT ( ' *** POINT OUTSIDE GRID (SKIPPED), IX, IY =') - 1981 FORMAT ( ' *** POINT ALREADY EXCLUDED (SKIPPED), IX, IY =') - 982 FORMAT ( ' *** CANNOT CONNECT POINTS, IX, IY =') - 985 FORMAT ( ' No boundary points.'/) - 986 FORMAT ( ' Number of boundary points :',I6/) - 1985 FORMAT ( ' No excluded points.'/) - 1986 FORMAT ( ' Number of excluded points :',I6/) - 987 FORMAT ( ' Nr.| IX | IY | Long. | Lat. '/ & - ' -----|-------|-------|---------|---------') - 1987 FORMAT ( ' Nr.| IX | IY | X | Y '/ & - ' -----|-------|-------|-----------|-----------') - 988 FORMAT ( ' ',I4,2(' |',I6),2(' |',F8.2)) - 1988 FORMAT ( ' ',I4,2(' |',I6),2(' |',F8.1,'E3')) - 989 FORMAT ( ' ') -! - 990 FORMAT (/' Output boundary points : '/ & - ' --------------------------------------------------') - 991 FORMAT ( ' File nest',I1,'.ww3 Number of points :',I6/ & - ' Number of spectra :',I6) - 1991 FORMAT ( ' Dest. grid Polat:',F6.2,', Polon:',F8.2) - 992 FORMAT (/' Nr.| Long. | Lat. '/ & - ' -----|---------|---------') - 1992 FORMAT (/' Nr.| Long. | Lat. ', & - ' Nr.| Long. | Lat. '/ & - ' -----|---------|---------', & - ' -----|---------|---------') - 993 FORMAT ( ' ',I4,2(' |',F8.2)) - 1993 FORMAT ( ' ',I4,2(' |',F8.2), & - ' ',I4,2(' |',F8.2)) - 994 FORMAT ( ' *** POINT OUTSIDE GRID (SKIPPED) : X,Y =',2F10.5) - 995 FORMAT ( ' *** POINT ON LAND (SKIPPED) : X,Y =',2F10.5) - 2992 FORMAT (/' Nr.| X | Y '/ & - ' -----|-----------|-----------') - 3992 FORMAT (/' Nr.| X | Y ', & - ' Nr.| X | Y '/ & - ' -----|-----------|-----------', & - ' -----|-----------|-----------') - 2993 FORMAT ( ' ',I4,2(' |',F8.1,'E3')) - 3993 FORMAT ( ' ',I4,2(' |',F8.1,'E3'), & - ' ',I4,2(' |',F8.1,'E3')) - 2994 FORMAT ( ' *** POINT OUTSIDE GRID (SKIPPED) : X,Y =',2(F8.1,'E3')) - 2995 FORMAT ( ' *** POINT ON LAND (SKIPPED) : X,Y =',2(F8.1,'E3')) - 996 FORMAT ( ' No boundary points.'/) - 997 FORMAT ( ' Number of boundary points :',I6/ & - ' Number of spectra :',I6/) -! -!/O2a 998 FORMAT (50I2) -!/O2c 1998 FORMAT (50I2) -! - 999 FORMAT (/' Writing model definition file ...'/) -! - 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & - ' ERROR IN OPENING INPUT FILE'/ & - ' IOSTAT =',I5/) -! - 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & - ' PREMATURE END OF INPUT FILE'/) -! - 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & - ' ERROR IN READING FROM INPUT FILE'/ & - ' IOSTAT =',I5/) -! - 1003 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & - ' INVALID CALENDAR TYPE: SELECT ONE OF:', & - ' standard, 360_day, or 365_day '/) -! - 1004 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & - ' CANNOT READ UNFORMATTED (IDFM = 3) FROM UNIT', & - I4,' (ww3_grid.inp)'/) -! - 1005 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID : '/ & - ' BOTTOM AND OBSTRUCTION DATA FROM SAME FILE '/ & - ' BUT WITH INCOMPATIBLE FORMATS (',I1,',',I1,')'/) -! - 1006 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' TOO MANY NESTING OUTPUT FILES '/) -! - 1007 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & - ' ILLEGAL GRID TYPE:',A4) -! - 1008 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & - ' A CARTESIAN WITH CLOSURE IS NOT ALLOWED') -! - 1009 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & - ' A RECTILINEAR TRIPOLE GRID IS NOT ALLOWED') -! - 1010 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'// & - ' NO PROPAGATION + NO SOURCE TERMS = NO WAVE MODEL'// & - ' ( USE DRY RUN FLAG TO TEMPORARILY SWITCH OFF ', & - 'CALCULATIONS )'/) -! - 1011 FORMAT (/' *** WAVEWATCH-III WARNING IN W3GRID :'/ & - ' LEFT-HANDED GRID -- POSSIBLE CAUSE IS WRONG '/ & - ' IDLA:',I4,' . THIS MAY PRODUCE ERRORS '/ & - ' (COMMENT THIS EXTCDE AT YOUR OWN RISK).') -! - 1012 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & - ' ILLEGAL GRID CLOSURE TYPE:',A4) -! - 1013 FORMAT (/' *** WAVEWATCH-III WARNING IN W3GRID :'/ & - ' THE GLOBAL (LOGICAL) INPUT FLAG IS DEPRECATED'/ & - ' AND REPLACED WITH A STRING INDICATING THE TYPE'/ & - ' OF GRID INDEX CLOSURE (NONE, SMPL or TRPL).'/ & - ' *** PLEASE UPDATE YOUR GRID INPUT FILE ACCORDINGLY ***'/) -! - 1014 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & - ' SMC CELL LONGITUDE RANGE OUTSIDE BASE GRID RANGE:'/& - ' ISEA =', I6, '; IX =', I4, ':', I4,'; NX =', I4/) -! - 1015 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & - ' SMC CELL LATITUDE RANGE OUTSIDE BASE GRID RANGE: '/& - ' ISEA =', I6, '; IY =', I4, ':', I4,'; NY =', I4/) -! - 1020 FORMAT (/' *** WAVEWATCH-III ERROR IN W3GRID :'/ & - ' SOURCE TERMS REQUESTED BUT NOT SELECTED'/) - 1021 FORMAT (/' *** WAVEWATCH III WARNING IN W3GRID :'/ & - ' SOURCE TERMS SELECTED BUT NOT REQUESTED'/) - 1022 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/LNn OR SEED SWITCHES :',I3) - 1023 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/STn SWITCHES :',I3) - 1024 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/NLn SWITCHES :',I3) - 1025 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/BTn SWITCHES :',I3) - 1026 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/DBn SWITCHES :',I3) - 1027 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/TRn SWITCHES :',I3) - 1028 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/BSn SWITCHES :',I3) - 1029 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/XXn SWITCHES :',I3) -! - 1030 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' PROPAGATION REQUESTED BUT NO SCHEME SELECTED '/) - 1031 FORMAT (/' *** WAVEWATCH III WARNING IN W3GRID :'/ & - ' NO PROPAGATION REQUESTED BUT SCHEME SELECTED '/) - 1032 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' NO PROPAGATION SCHEME SELECTED ( use !/PR0 ) '/) - 1033 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' MULTIPLE PROPAGATION SCHEMES SELECTED :',I3/ & - ' CHECK !/PRn SWITCHES'/) - 1034 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/ICn SWITCHES :',I3) - 1035 FORMAT (/' *** WAVEWATCH III WARNING IN W3GRID :'/ & - ' ONLY FIRST PROPAGATION SCHEME WILL BE USED: ') - 1036 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & - ' ILLEGAL NUMBER OF !/ISn SWITCHES :',I3) -!/RTD 1052 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & -!/RTD ' WITH NAMELIST VALUE PLAT == 90, PLON MUST BE -180'/ & -!/RTD ' AND UNROT MUST BE .FALSE.' ) -! -!/RTD 1053 FORMAT (/' *** WAVEWATCH III ERROR IN W3GRID :'/ & -!/RTD ' WITH NAMELIST VALUE BPLAT == 90, BPLON MUST BE -180') -! - 1040 FORMAT ( ' Space-time extremes DX :',F10.2) - 1041 FORMAT ( ' Space-time extremes DX :',F10.2) - 1042 FORMAT ( ' Space-time extremes DX-Y set to default 1000 m') - 1043 FORMAT ( ' Space-time extremes Dt :',F8.2) - 1044 FORMAT ( ' Space-time extremes Dt set to default 1200 s') -! - 1100 FORMAT (/' Status map, printed in',I6,' part(s) '/ & - ' -----------------------------------'/) - 1101 FORMAT (2X,180I2) - 1102 FORMAT ( ' Legend : '/ & - ' -----------------------------'/ & - ' 0 : Land point '/ & - ' 1 : Sea point '/ & - ' 2 : Active boundary point '/ & - ' 3 : Excluded point '/) - 1103 FORMAT (/' Obstruction map ',A1,', printed in',I6,' part(s) '/ & - ' ---------------------------------------------'/) - 1104 FORMAT ( ' Legend : '/ & - ' --------------------------------'/ & - ' fraction of obstruction * 10 '/) - - 1105 FORMAT (/' Shoreline slope, printed in',I6,' part(s) '/ & - ' ---------------------------------------------'/) - 1106 FORMAT ( ' Legend : '/ & - ' --------------------------------'/ & - ' Slope * 100'/) - - - 1150 FORMAT (/' Reading unstructured grid definition files ...'/) -! - 9997 FORMAT (/' Summary grid statistics : '/ & - ' --------------------------------------------------'/ & - ' Number of longitudes :',I10/ & - ' Number of latitudes :',I10/ & - ' Number of grid points :',I10/ & - ' Number of sea points :',I10,' (',F4.1,'%)'/& - ' Number of input b. points :',I10/ & - ' Number of land points :',I10/ & - ' Number of excluded points :',I10/) - 9998 FORMAT (/' Summary grid statistics : '/ & - ' --------------------------------------------------'/ & - ' Number of longitudes :',I10/ & - ' Number of latitudes :',I10/ & - ' Number of grid points :',I10/ & - ' Number of sea points :',I10,' (100%)'/ & - ' Number of input b. points :',I10/ & - ' Number of land points :',I10/ & - ' Number of excluded points :',I10/) - 9999 FORMAT (/' End of program '/ & - ' ========================================'/ & - ' WAVEWATCH III Grid preprocessor '/) -! -!/T 9090 FORMAT ( ' TEST W3GRID : OUTPUT BOUND. POINT DATA LINE SEG.') -!/T 9091 FORMAT ( ' ',2F8.2,4(2I4,F7.2)) -!/T 9092 FORMAT ( ' ',F7.2,2X,4F7.2) -!/T 9093 FORMAT ( ' ',4I7/ & -!/T ' ',4I7) -! -!/T0 9095 FORMAT ( ' TEST W3GRID : OUTPUT BOUND. POINT SPEC DATA ') -!/T0 9096 FORMAT ( ' ',I3,2I8) -!/ -!/ Internal function READNL ------------------------------------------ / -!/ - CONTAINS -!/ ------------------------------------------------------------------- / - SUBROUTINE READNL ( NDS, NAME, STATUS ) -!/ -!/ +-----------------------------------+ -!/ | WAVEWATCH III NOAA/NCEP | -!/ | H. L. Tolman | -!/ | FORTRAN 90 | -!/ | Last update : 01-Jun-2013 | -!/ +-----------------------------------+ -!/ -! 1. Purpose : -! -! Read namelist info from file if namelist is found in file. -! -! 2. Method : -! -! Look for namelist with name NAME in unit NDS and read if found. -! -! 3. Parameters : -! -! Parameter list -! ---------------------------------------------------------------- -! NDS Int. I Data set number used for search. -! NAME C*4 I Name of namelist. -! STATUS C*20 O Status at end of routine, -! '(default values) ' if no namelist found. -! '(user def. values)' if namelist read. -! ---------------------------------------------------------------- -! -! 4. Subroutines used : -! -! Name Type Module Description -! ---------------------------------------------------------------- -! EXTCDE Subr. W3SERVMD Abort program as graceful as possible. -! ---------------------------------------------------------------- -! -! 5. Called by : -! -! Program in which it is contained. -! -! 6. Error messages : -! -! 7. Remarks : -! -! 8. Structure : -! -! 9. Switches : -! -! 10. Source code : -! -!/ ------------------------------------------------------------------- / -!/ Parameter list -!/ - INTEGER, INTENT(IN) :: NDS - CHARACTER, INTENT(IN) :: NAME*4 - CHARACTER, INTENT(OUT) :: STATUS*20 -!/ -!/ ------------------------------------------------------------------- / -!/ Local parameters -!/ - INTEGER :: IERR, I, J - CHARACTER :: LINE*80 -!/ -!/ ------------------------------------------------------------------- / -!/ -!/S CALL STRACE (IENT, 'READNL') -! - REWIND (NDS) - STATUS = '(default values) : ' -! - DO - READ (NDS,'(A)',END=800,ERR=800,IOSTAT=IERR) LINE - DO I=1, 70 - IF ( LINE(I:I) .NE. ' ' ) THEN - IF ( LINE(I:I) .EQ. '&' ) THEN - IF ( LINE(I+1:I+4) .EQ. NAME ) THEN - BACKSPACE (NDS) - SELECT CASE(NAME) -!/FLD1 CASE('FLD1') -!/FLD1 READ (NDS,NML=FLD1,END=801,ERR=802,IOSTAT=J) -!/FLD2 CASE('FLD2') -!/FLD2 READ (NDS,NML=FLD2,END=801,ERR=802,IOSTAT=J) -!/FLX3 CASE('FLX3') -!/FLX3 READ (NDS,NML=FLX3,END=801,ERR=802,IOSTAT=J) -!/FLX4 CASE('FLX4') -!/FLX4 READ (NDS,NML=FLX4,END=801,ERR=802,IOSTAT=J) -!/LN1 CASE('SLN1') -!/LN1 READ (NDS,NML=SLN1,END=801,ERR=802,IOSTAT=J) -!/ST1 CASE('SIN1') -!/ST1 READ (NDS,NML=SIN1,END=801,ERR=802,IOSTAT=J) -!/ST2 CASE('SIN2') -!/ST2 READ (NDS,NML=SIN2,END=801,ERR=802,IOSTAT=J) -!/ST3 CASE('SIN3') -!/ST3 READ (NDS,NML=SIN3,END=801,ERR=802,IOSTAT=J) -!/ST4 CASE('SIN4') -!/ST4 READ (NDS,NML=SIN4,END=801,ERR=802,IOSTAT=J) -!/ST6 CASE('SIN6') -!/ST6 READ (NDS,NML=SIN6,END=801,ERR=802,IOSTAT=J) -!/NL1 CASE('SNL1') -!/NL1 READ (NDS,NML=SNL1,END=801,ERR=802,IOSTAT=J) -!/NL2 CASE('SNL2') -!/NL2 READ (NDS,NML=SNL2,END=801,ERR=802,IOSTAT=J) -!/NL2 CASE('ANL2') -!/NL2 IF ( NDEPTH .GT. 100 ) GOTO 804 -!/NL2 DEPTHS(1:NDEPTH) = DPTHNL -!/NL2 READ (NDS,NML=ANL2,END=801,ERR=802,IOSTAT=J) -!/NL2 DPTHNL = DEPTHS(1:NDEPTH) -!/NL3 CASE('SNL3') -!/NL3 READ (NDS,NML=SNL3,END=801,ERR=802,IOSTAT=J) -!/NL3 CASE('ANL3') -!/NL3 IF ( NQDEF .GT. 100 ) GOTO 804 -!/NL3 READ (NDS,NML=ANL3,END=801,ERR=802,IOSTAT=J) -!/NL4 CASE('SNL4') -!/NL4 READ (NDS,NML=SNL4,END=801,ERR=802,IOSTAT=J) -!/NLS CASE('SNLS') -!/NLS READ (NDS,NML=SNLS,END=801,ERR=802,IOSTAT=J) -!/ST1 CASE('SDS1') -!/ST1 READ (NDS,NML=SDS1,END=801,ERR=802,IOSTAT=J) -!/ST2 CASE('SDS2') -!/ST2 READ (NDS,NML=SDS2,END=801,ERR=802,IOSTAT=J) -!/ST3 CASE('SDS3') -!/ST3 READ (NDS,NML=SDS3,END=801,ERR=802,IOSTAT=J) -!/ST4 CASE('SDS4') -!/ST4 READ (NDS,NML=SDS4,END=801,ERR=802,IOSTAT=J) -!/ST6 CASE('SDS6') -!/ST6 READ (NDS,NML=SDS6,END=801,ERR=802,IOSTAT=J) -!/ST6 CASE('SWL6') -!/ST6 READ (NDS,NML=SWL6,END=801,ERR=802,IOSTAT=J) -!/BT1 CASE('SBT1') -!/BT1 READ (NDS,NML=SBT1,END=801,ERR=802,IOSTAT=J) -!/BT4 CASE('SBT4') -!/BT4 READ (NDS,NML=SBT4,END=801,ERR=802,IOSTAT=J) -!/IS1 CASE('SIS1') -!/IS1 READ (NDS,NML=SIS1,END=801,ERR=802,IOSTAT=J) -!/IS2 CASE('SIS2') -!/IS2 READ (NDS,NML=SIS2,END=801,ERR=802,IOSTAT=J) -!/DB1 CASE('SDB1') -!/DB1 READ (NDS,NML=SDB1,END=801,ERR=802,IOSTAT=J) -!/UOST CASE('UOST') -!/UOST READ (NDS,NML=UOST,END=801,ERR=802,IOSTAT=J) -!/PR1 CASE('PRO1') -!/PR1 READ (NDS,NML=PRO1,END=801,ERR=802,IOSTAT=J) -!/PR2 CASE('PRO2') -!/PR2 READ (NDS,NML=PRO2,END=801,ERR=802,IOSTAT=J) -!/SMC CASE('PSMC') -!/SMC READ (NDS,NML=PSMC,END=801,ERR=802,IOSTAT=J) -!/PR3 CASE('PRO3') -!/PR3 READ (NDS,NML=PRO3,END=801,ERR=802,IOSTAT=J) -!/RTD CASE('ROTD') -!/RTD READ (NDS,NML=ROTD,END=801,ERR=802,IOSTAT=J) -!/RTD CASE('ROTB') -!/RTD READ (NDS,NML=ROTB,END=801,ERR=802,IOSTAT=J) -!/REF1 CASE('REF1') -!/REF1 READ (NDS,NML=REF1,END=801,ERR=802,IOSTAT=J) -!/IG1 CASE('SIG1') -!/IG1 READ (NDS,NML=SIG1,END=801,ERR=802,IOSTAT=J) -!/IC2 CASE('SIC2') -!/IC2 READ (NDS,NML=SIC2,END=801,ERR=802,IOSTAT=J) -!/IC3 CASE('SIC3') -!/IC3 READ (NDS,NML=SIC3,END=801,ERR=802,IOSTAT=J) -!/IC4 CASE('SIC4 ') -!/IC4 READ (NDS,NML=SIC4,END=801,ERR=802,IOSTAT=J) -!/IC5 CASE('SIC5 ') -!/IC5 READ (NDS,NML=SIC5,END=801,ERR=802,IOSTAT=J) - CASE('UNST') - READ (NDS,NML=UNST,END=801,ERR=802,IOSTAT=J) - CASE('OUTS') - READ (NDS,NML=OUTS,END=801,ERR=802,IOSTAT=J) - CASE('MISC') - READ (NDS,NML=MISC,END=801,ERR=802,IOSTAT=J) - CASE DEFAULT - GOTO 803 - END SELECT - STATUS = '(user def. values) :' - RETURN - END IF - ELSE - EXIT - END IF - ENDIF - END DO - END DO -! - 800 CONTINUE - RETURN -! - 801 CONTINUE - WRITE (NDSE,1001) NAME - CALL EXTCDE(1) - RETURN -! - 802 CONTINUE - WRITE (NDSE,1002) NAME, J - CALL EXTCDE(2) - RETURN -! - 803 CONTINUE - WRITE (NDSE,1003) NAME - CALL EXTCDE(3) - RETURN -! -!/NL2 804 CONTINUE -!/NL2 WRITE (NDSE,1004) NDEPTH -!/NL2 CALL EXTCDE(4) -!/NL2 RETURN -! -!/NL3 804 CONTINUE -!/NL3 WRITE (NDSE,1004) NQDEF -!/NL3 CALL EXTCDE(4) -!/NL3 RETURN -! -! Formats -! - 1001 FORMAT (/' *** WAVEWATCH III ERROR IN READNL : '/ & - ' PREMATURE END OF FILE IN READING ',A/) - 1002 FORMAT (/' *** WAVEWATCH III ERROR IN READNL : '/ & - ' ERROR IN READING ',A,' IOSTAT =',I8/) - 1003 FORMAT (/' *** WAVEWATCH III ERROR IN READNL : '/ & - ' NAMELIST NAME ',A,' NOT RECOGNIZED'/) -!/NL2 1004 FORMAT (/' *** WAVEWATCH III ERROR IN READNL : '/ & -!/NL2 ' TEMP DEPTH ARRAY TOO SMALL, .LE. ',I8/) -!/NL3 1004 FORMAT (/' *** WAVEWATCH-III ERROR IN READNL : '/ & -!/NL3 ' TEMP QPARMS ARRAY TOO SMALL, .LE. ',I8/) -!/ -!/ End of READNL ----------------------------------------------------- / -!/ - END SUBROUTINE -!/ -!/ End of W3GRID ----------------------------------------------------- / -!/ - END PROGRAM W3GRID + END PROGRAM WW3GRID From 3b949d36a00f5e0cf6a7b79f382c491b8b2e1800 Mon Sep 17 00:00:00 2001 From: Mark Potts <33099090+mark-a-potts@users.noreply.github.com> Date: Thu, 27 May 2021 10:07:24 -0400 Subject: [PATCH 83/84] updates for build on wcoss2 (#370) * add wcoss2 to the list of machines --- model/bin/cmplr.env | 5 +++-- model/bin/w3_setup | 2 ++ model/esmf/Makefile | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 8fddea569..c9fdafa87 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -111,6 +111,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || [ "$cmplr" == "datarmor_intel_prof" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne.intel" ] || \ [ "$cmplr" == "gaea.intel" ] || [ "$cmplr" == "jet.intel" ] || \ + [ "$cmplr" == "wcoss2" ] || \ [ "$cmplr" == "hera.intel" ] || [ "$cmplr" == "orion.intel" ] || [ "$cmplr" == "stampede.intel" ] ; then @@ -121,7 +122,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c comp_mpi='mpiifort' # cray compiler - if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] || [ "$cmplr" == "gaea.intel" ]; then + if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] || [ "$cmplr" == "gaea.intel" ] || [ "$cmplr" == "wcoss2" ]; then comp_seq='ftn' comp_mpi='ftn' fi @@ -159,7 +160,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$c # omp options if [ ! -z "$(echo $cmplr | grep datarmor)" ] || [ "$cmplr" == "hera.intel" ] || [ "$cmplr" == "orion.intel" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "cheyenne.intel" ] || \ - [ "$cmplr" == "gaea.intel" ] || [ "$cmplr" == "jet.intel" ] || \ + [ "$cmplr" == "gaea.intel" ] || [ "$cmplr" == "jet.intel" ] || [ "$cmplr" == "wcoss2" ] \ [ "$cmplr" == "stampede.intel" ]; then optomp="-qopenmp" else diff --git a/model/bin/w3_setup b/model/bin/w3_setup index d8e0d4b62..1b0521880 100755 --- a/model/bin/w3_setup +++ b/model/bin/w3_setup @@ -417,6 +417,7 @@ then [ "$cmplr" == "hera.intel" ] || [ "$cmplr" == "orion.intel" ] || \ [ "$cmplr" == "hera.gnu" ] || [ "$cmplr" == "jet.intel" ] || \ [ "$cmplr" == "stampede.intel" ] || [ "$cmplr" == "gaea.intel" ] || \ + [ "$cmplr" == "wcoss2" ] || \ [ "$cmplr" == "cheyenne.intel" ] || [ "$cmplr" == "cheyenne.gnu" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ @@ -445,6 +446,7 @@ then [ "$cmplr" == "hera.intel" ] || [ "$cmplr" == "orion.intel" ] || \ [ "$cmplr" == "hera.gnu" ] || [ "$cmplr" == "jet.intel" ] || \ [ "$cmplr" == "stampede.intel" ] || [ "$cmplr" == "gaea.intel" ] || \ + [ "$cmplr" == "wcoss2" ] || \ [ "$cmplr" == "cheyenne.intel" ] || [ "$cmplr" == "cheyenne.gnu" ] || \ [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ diff --git a/model/esmf/Makefile b/model/esmf/Makefile index f17026be9..5deab2842 100644 --- a/model/esmf/Makefile +++ b/model/esmf/Makefile @@ -39,7 +39,7 @@ else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","Intel" "hera.intel" "orion.inte ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)", "cheyenne.intel" "stampede.intel")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian -else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_cray" "wcoss_dell_p3" "gaea.intel")) +else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","wcoss_cray" "wcoss_dell_p3" "gaea.intel" "wcoss2")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian else ifeq ("$(WW3_COMP)",$(filter "$(WW3_COMP)","intel" "datarmor_intel" "datarmor_intel_debug")) ESMF_F90COMPILEOPTS := $(ESMF_F90COMPILEOPTS) -convert big_endian From d312bf09ed24d1307d0cb183a78d78e1b46e8a57 Mon Sep 17 00:00:00 2001 From: zacharyburnettNOAA Date: Wed, 2 Jun 2021 14:17:41 -0400 Subject: [PATCH 84/84] dos2unix --- regtests/ww3_tig1.1/matlab/readWWNC_SPEC.m | 190 +-- regtests/ww3_tp2.14/input/iro_1p5k.bot | 1428 ++++++++++---------- regtests/ww3_tp2.8/input/iro_1p5k.bot | 1428 ++++++++++---------- 3 files changed, 1523 insertions(+), 1523 deletions(-) diff --git a/regtests/ww3_tig1.1/matlab/readWWNC_SPEC.m b/regtests/ww3_tig1.1/matlab/readWWNC_SPEC.m index 1f9fba330..61bd35605 100644 --- a/regtests/ww3_tig1.1/matlab/readWWNC_SPEC.m +++ b/regtests/ww3_tig1.1/matlab/readWWNC_SPEC.m @@ -1,95 +1,95 @@ - -function [lat,lon,freq,dir,df,time,spectra1,depth,curr,currdir,unit1]=readWWNC_SPEC(filename,varname,date1) -% -% Reads all or a subset of a NetCDF file, with a frequency dimension. -% If date1 is specified: takes only the closest dates in the file -% if lon1 is specificied: takes only the closest longitude ... - -% -% 1. Opens file and gets dimensions of arrays -% - fid=netcdf.open(filename,'NC_NOWRITE'); - [ndims,nvars,ngatts,unlimdimid]=netcdf.inq(fid); - - dimstat = netcdf.inqDimID(fid,'station'); - dimtime = netcdf.inqDimID(fid,'time'); - dimf = netcdf.inqDimID(fid,'frequency'); - dimd = netcdf.inqDimID(fid,'direction'); - [d0,ns]=netcdf.inqDim(fid,dimstat); - [d1,nd]=netcdf.inqDim(fid,dimd); - [d3,nt]=netcdf.inqDim(fid,dimtime); - [d4,nf]=netcdf.inqDim(fid,dimf); - - vard = netcdf.inqVarID(fid,'direction'); - varf = netcdf.inqVarID(fid,'frequency'); - varf1 = netcdf.inqVarID(fid,'frequency1'); - varf2 = netcdf.inqVarID(fid,'frequency2'); - varlon = netcdf.inqVarID(fid,'longitude'); - varlat = netcdf.inqVarID(fid,'latitude'); - freq=netcdf.getVar(fid,varf); - dir=netcdf.getVar(fid,vard); - freq1=netcdf.getVar(fid,varf1); - freq2=netcdf.getVar(fid,varf2); - df=freq2-freq1; - lon=netcdf.getVar(fid,varlon); - lat=netcdf.getVar(fid,varlat); -% -% We assume that the date reference is 1 Jan 1990. -% This is normally written in the time attributes -% - time0=datenum(1990,1,1); - vartime = netcdf.inqVarID(fid,'time'); - time=netcdf.getVar(fid,vartime)+time0; - varids=[]; -myvar= netcdf.inqVarID(fid,varname); - -% -% Gets all the indices for the variables -% - [var1 type vardims]=netcdf.inqVar(fid,myvar); -% -% 2. defines the indices for the data subset -% -if exist('date1') - [timedist,kk]=min(abs(time-date1)); - time=time(kk); - KK=kk; - nk=1; -else - KK=1; - nk=nt; -end -II=1; -ni=nd; -JJ=1; -nj=nf; - -LL=1; -nl=ns; - -% -% 3. Extracts data -% - j=1; - j1=j; - varid=myvar; - eval(['unit' num2str(j) '=netcdf.getAtt(fid,varid,''units'');']); - eval(['scale=netcdf.getAtt(fid,varid,''scale_factor'');']); - eval(['fillv=netcdf.getAtt(fid,varid,''_FillValue'');']); - eval(['vali=netcdf.getVar(fid,varid,[II-1 JJ-1 LL-1 KK-1],[ni nj nl nk]);']); - %eval(['var' num2str(j) '=netcdf.getAtt(fid,var' num2str(j) 'id,''long_name'');']); - - I=find(vali== fillv); - val=double(vali).*scale; - val(I)=NaN; - eval(['spectra' num2str(j) '=val;']); - - varc1 = netcdf.inqVarID(fid,'cur'); - curr= netcdf.getVar(fid,varc1,[LL-1 KK-1],[nl nk]); - varc1 = netcdf.inqVarID(fid,'curdir'); - currdir= netcdf.getVar(fid,varc1,[LL-1 KK-1],[nl nk]); - varc1 = netcdf.inqVarID(fid,'dpt'); - depth= netcdf.getVar(fid,varc1,[LL-1 KK-1],[nl nk]); - netcdf.close(fid); -% pcolor(lon1,lat1,squeeze(val1(:,:,1))');shading flat; - + +function [lat,lon,freq,dir,df,time,spectra1,depth,curr,currdir,unit1]=readWWNC_SPEC(filename,varname,date1) +% +% Reads all or a subset of a NetCDF file, with a frequency dimension. +% If date1 is specified: takes only the closest dates in the file +% if lon1 is specificied: takes only the closest longitude ... + +% +% 1. Opens file and gets dimensions of arrays +% + fid=netcdf.open(filename,'NC_NOWRITE'); + [ndims,nvars,ngatts,unlimdimid]=netcdf.inq(fid); + + dimstat = netcdf.inqDimID(fid,'station'); + dimtime = netcdf.inqDimID(fid,'time'); + dimf = netcdf.inqDimID(fid,'frequency'); + dimd = netcdf.inqDimID(fid,'direction'); + [d0,ns]=netcdf.inqDim(fid,dimstat); + [d1,nd]=netcdf.inqDim(fid,dimd); + [d3,nt]=netcdf.inqDim(fid,dimtime); + [d4,nf]=netcdf.inqDim(fid,dimf); + + vard = netcdf.inqVarID(fid,'direction'); + varf = netcdf.inqVarID(fid,'frequency'); + varf1 = netcdf.inqVarID(fid,'frequency1'); + varf2 = netcdf.inqVarID(fid,'frequency2'); + varlon = netcdf.inqVarID(fid,'longitude'); + varlat = netcdf.inqVarID(fid,'latitude'); + freq=netcdf.getVar(fid,varf); + dir=netcdf.getVar(fid,vard); + freq1=netcdf.getVar(fid,varf1); + freq2=netcdf.getVar(fid,varf2); + df=freq2-freq1; + lon=netcdf.getVar(fid,varlon); + lat=netcdf.getVar(fid,varlat); +% +% We assume that the date reference is 1 Jan 1990. +% This is normally written in the time attributes +% + time0=datenum(1990,1,1); + vartime = netcdf.inqVarID(fid,'time'); + time=netcdf.getVar(fid,vartime)+time0; + varids=[]; +myvar= netcdf.inqVarID(fid,varname); + +% +% Gets all the indices for the variables +% + [var1 type vardims]=netcdf.inqVar(fid,myvar); +% +% 2. defines the indices for the data subset +% +if exist('date1') + [timedist,kk]=min(abs(time-date1)); + time=time(kk); + KK=kk; + nk=1; +else + KK=1; + nk=nt; +end +II=1; +ni=nd; +JJ=1; +nj=nf; + +LL=1; +nl=ns; + +% +% 3. Extracts data +% + j=1; + j1=j; + varid=myvar; + eval(['unit' num2str(j) '=netcdf.getAtt(fid,varid,''units'');']); + eval(['scale=netcdf.getAtt(fid,varid,''scale_factor'');']); + eval(['fillv=netcdf.getAtt(fid,varid,''_FillValue'');']); + eval(['vali=netcdf.getVar(fid,varid,[II-1 JJ-1 LL-1 KK-1],[ni nj nl nk]);']); + %eval(['var' num2str(j) '=netcdf.getAtt(fid,var' num2str(j) 'id,''long_name'');']); + + I=find(vali== fillv); + val=double(vali).*scale; + val(I)=NaN; + eval(['spectra' num2str(j) '=val;']); + + varc1 = netcdf.inqVarID(fid,'cur'); + curr= netcdf.getVar(fid,varc1,[LL-1 KK-1],[nl nk]); + varc1 = netcdf.inqVarID(fid,'curdir'); + currdir= netcdf.getVar(fid,varc1,[LL-1 KK-1],[nl nk]); + varc1 = netcdf.inqVarID(fid,'dpt'); + depth= netcdf.getVar(fid,varc1,[LL-1 KK-1],[nl nk]); + netcdf.close(fid); +% pcolor(lon1,lat1,squeeze(val1(:,:,1))');shading flat; + diff --git a/regtests/ww3_tp2.14/input/iro_1p5k.bot b/regtests/ww3_tp2.14/input/iro_1p5k.bot index da764b399..3b0b0a992 100755 --- a/regtests/ww3_tp2.14/input/iro_1p5k.bot +++ b/regtests/ww3_tp2.14/input/iro_1p5k.bot @@ -1,714 +1,714 @@ -146.38 146.38 148.51 143.80 148.11 144.13 147.17 146.53 146.09 143.07 143.81 144.73 146.63 146.16 146.55 144.34 141.64 141.53 139.39 136.69 -137.43 136.69 135.68 135.18 134.48 136.63 137.75 136.70 137.07 136.78 136.00 135.63 135.23 134.60 134.07 132.86 133.31 132.32 131.50 131.82 -131.76 130.68 130.91 130.70 129.23 128.79 129.27 127.42 127.71 128.14 128.56 128.98 128.60 127.60 127.81 127.24 126.21 124.46 125.15 124.46 -123.42 122.92 120.16 118.50 118.34 116.78 116.85 116.80 115.35 114.74 115.19 114.26 114.46 113.97 113.48 112.33 112.95 110.62 111.51 111.90 -111.26 110.22 108.90 108.23 107.87 106.88 106.55 105.54 104.44 104.30 103.99 103.14 102.07 101.82 99.36 98.70 97.92 97.14 96.03 95.52 -94.54 93.13 93.13 -146.38 146.38 148.51 143.80 148.11 144.13 147.17 146.53 146.09 143.07 143.81 144.73 146.63 146.16 146.55 144.34 141.64 141.53 139.39 136.69 -137.43 136.69 135.68 135.18 134.48 136.63 137.75 136.70 137.07 136.78 136.00 135.63 135.23 134.60 134.07 132.86 133.31 132.32 131.50 131.82 -131.76 130.68 130.91 130.70 129.23 128.79 129.27 127.42 127.71 128.14 128.56 128.98 128.60 127.60 127.81 127.24 126.21 124.46 125.15 124.46 -123.42 122.92 120.16 118.50 118.34 116.78 116.85 116.80 115.35 114.74 115.19 114.26 114.46 113.97 113.48 112.33 112.95 110.62 111.51 111.90 -111.26 110.22 108.90 108.23 107.87 106.88 106.55 105.54 104.44 104.30 103.99 103.14 102.07 101.82 99.36 98.70 97.92 97.14 96.03 95.52 -94.54 93.13 93.13 -153.46 153.46 148.42 141.56 143.96 146.03 144.23 145.78 146.07 146.59 145.54 145.06 145.72 144.27 142.90 140.15 142.78 140.34 139.53 138.03 -136.61 136.89 135.77 134.84 135.12 136.60 137.07 136.58 135.81 135.96 135.79 135.10 134.83 134.12 132.93 132.84 132.41 131.74 131.48 131.87 -131.20 130.97 130.21 130.26 129.85 128.70 127.55 129.61 128.19 128.49 128.60 128.71 128.64 128.29 127.59 125.91 125.31 125.05 124.90 123.65 -122.76 121.61 120.65 117.78 116.51 117.70 118.41 117.99 117.35 116.93 116.28 115.31 114.47 113.93 112.61 112.20 112.09 112.12 111.89 110.88 -110.86 110.23 108.88 107.87 107.31 106.01 106.09 104.21 103.49 103.77 103.24 102.32 100.83 100.70 98.83 97.62 96.87 96.08 94.58 94.30 -91.32 91.12 91.12 -152.58 152.58 148.10 144.65 144.97 142.53 144.91 142.93 145.51 147.56 143.96 142.81 143.85 143.21 142.13 140.89 140.57 139.26 139.94 138.74 -137.49 136.33 135.36 136.22 135.39 136.34 136.59 136.25 135.69 135.17 134.39 134.82 134.00 133.71 132.17 131.92 132.68 131.44 132.35 131.87 -131.07 130.95 130.87 129.80 129.93 129.35 129.26 127.70 128.41 127.15 128.61 128.17 127.08 127.14 126.42 125.32 125.07 124.80 124.23 122.92 -121.76 121.80 121.34 119.90 118.50 118.23 118.06 117.50 117.70 117.56 115.92 115.11 115.66 114.19 113.43 112.86 111.71 111.38 110.89 109.97 -109.40 108.21 107.80 106.19 105.53 104.44 104.19 104.74 102.17 102.20 101.57 100.07 99.30 98.75 97.12 95.91 95.36 94.06 93.18 90.91 -89.73 88.07 88.07 -152.97 152.97 149.53 146.70 139.69 143.00 145.29 139.82 143.01 144.38 139.94 144.69 144.06 143.88 142.30 141.83 141.01 139.74 139.28 138.24 -136.85 136.85 135.54 134.63 135.01 136.28 135.80 135.59 134.13 134.41 134.33 132.80 134.00 133.26 131.89 132.10 131.88 132.04 131.93 131.87 -131.56 131.26 130.40 129.84 130.03 129.69 129.27 129.15 129.62 127.80 126.93 126.34 126.57 125.65 125.85 125.43 125.26 124.66 123.86 122.57 -122.38 121.56 120.96 120.40 118.53 118.26 118.16 118.25 117.29 115.49 114.27 113.55 113.70 113.09 112.63 111.22 110.90 109.55 109.60 108.39 -107.29 101.76 103.58 104.62 103.69 102.36 101.94 102.54 100.44 99.37 98.92 97.90 97.03 96.03 94.96 94.68 93.22 91.87 91.15 88.69 -86.85 84.65 84.65 -153.38 153.38 150.35 147.12 140.51 141.72 141.95 139.79 136.88 140.26 141.50 144.34 144.41 143.12 141.37 140.76 140.33 139.12 138.23 137.06 -136.53 136.15 134.98 134.72 135.27 135.79 134.65 133.96 134.50 133.87 134.16 133.50 133.53 133.86 132.76 132.32 132.25 132.89 132.11 131.70 -131.45 131.82 130.46 130.39 129.34 129.22 129.44 128.70 128.34 127.35 126.31 126.33 125.65 125.93 125.81 125.25 125.05 124.77 123.60 122.01 -121.85 120.88 120.40 120.00 118.18 117.57 117.58 116.81 115.80 113.66 112.56 110.20 110.55 110.19 109.11 108.96 108.94 107.58 106.18 105.69 -100.76 95.41 100.46 101.55 100.43 99.50 97.82 97.20 94.29 93.70 94.49 93.44 92.92 92.84 91.88 91.70 91.17 90.56 87.60 85.45 -83.78 81.93 81.93 -153.15 153.15 152.63 144.81 144.62 143.50 145.46 142.42 136.35 140.90 141.10 143.91 143.73 141.23 141.47 140.34 141.76 137.31 137.44 136.01 -135.31 135.53 135.33 134.36 134.85 134.93 134.51 134.08 134.07 134.76 133.93 133.84 133.81 133.48 132.91 132.42 131.89 132.15 132.40 131.90 -131.50 131.18 130.70 129.70 129.79 129.63 128.69 127.85 127.35 125.97 124.94 124.02 124.47 124.62 123.60 124.97 123.71 122.98 122.74 121.58 -121.48 120.37 119.29 119.45 118.16 117.59 116.74 114.97 113.79 111.91 108.30 108.45 108.19 107.02 105.33 105.56 104.94 104.32 97.03 95.57 -96.41 92.68 95.52 96.28 95.47 95.23 92.49 88.94 88.22 81.50 79.43 82.35 86.93 86.89 88.38 87.93 87.37 75.53 69.71 74.22 -77.37 76.47 76.47 -152.24 152.24 150.77 146.73 146.32 144.94 143.74 138.57 134.72 136.58 138.25 141.86 142.33 141.64 139.25 139.37 138.41 136.89 136.20 136.33 -135.46 135.69 134.52 135.50 134.83 133.76 133.80 133.73 133.82 133.87 133.83 133.85 133.78 132.75 132.34 132.54 131.34 130.92 132.22 131.91 -130.00 129.36 128.37 128.93 127.82 128.51 127.83 126.52 126.80 125.95 125.25 125.13 124.82 124.56 124.63 124.59 123.65 122.98 122.38 121.31 -120.59 119.93 119.38 118.49 116.76 115.54 114.69 113.48 111.76 106.17 103.07 103.20 104.09 101.04 103.75 103.46 102.68 100.99 94.83 87.19 -92.50 95.68 95.22 87.63 88.38 91.72 86.48 87.82 83.65 83.46 80.01 80.32 84.60 84.40 84.32 81.91 76.77 66.47 59.95 54.65 -60.88 56.93 56.93 -152.27 152.27 151.16 149.53 146.08 144.67 141.62 135.08 132.85 136.56 141.83 142.28 143.42 139.93 137.99 137.73 137.54 135.88 136.23 133.90 -135.24 134.63 134.71 134.08 133.19 133.86 132.72 133.75 133.58 132.99 132.56 133.13 132.86 132.62 132.07 132.02 131.06 131.73 131.45 130.58 -129.10 128.19 127.91 128.26 127.73 126.89 127.15 126.61 126.21 125.11 125.60 125.26 125.26 123.93 122.94 122.83 122.27 121.89 121.65 120.94 -119.52 117.79 117.40 116.05 115.11 114.17 112.80 109.14 106.95 105.90 102.03 100.90 97.52 99.13 100.96 101.29 99.91 98.63 96.99 94.61 -95.30 94.08 92.63 87.66 86.00 89.41 86.92 86.10 83.50 85.07 83.84 84.50 82.69 82.08 76.26 68.74 55.32 48.97 48.28 44.00 -39.35 45.29 45.29 -152.59 152.59 151.32 148.51 145.83 144.75 141.18 136.44 131.58 134.82 141.38 141.35 139.46 139.57 137.99 137.31 136.39 136.90 136.74 135.59 -134.97 134.09 134.45 133.66 133.14 132.86 132.69 132.44 131.83 131.90 131.66 131.63 131.95 131.99 132.18 131.82 131.11 130.83 130.20 130.67 -129.66 129.47 128.38 127.68 127.02 126.40 126.21 126.40 125.51 125.53 124.62 124.71 124.25 122.83 122.11 122.16 121.56 120.90 119.84 118.63 -117.54 116.32 115.82 114.24 112.81 110.18 108.35 105.49 103.22 97.45 94.93 97.10 98.09 98.33 97.58 97.37 96.22 95.70 92.71 91.46 -91.06 91.95 85.25 83.62 86.59 87.37 84.46 83.66 84.07 82.67 81.03 79.81 77.40 75.37 55.80 44.84 42.04 40.61 33.52 33.97 -33.61 33.22 33.22 -152.55 152.55 149.86 148.55 146.18 143.66 136.03 138.36 134.22 131.46 139.70 140.66 139.26 138.22 137.41 137.22 137.66 137.44 137.15 136.43 -135.98 134.34 133.51 132.81 132.98 132.69 132.45 133.16 132.32 132.02 131.23 131.54 131.18 131.86 132.05 131.28 130.83 130.93 129.63 129.48 -129.13 128.88 128.13 127.82 125.98 126.00 125.73 125.80 125.18 124.55 124.12 123.58 122.68 121.34 119.51 118.50 117.97 118.73 117.81 116.58 -113.32 113.17 111.93 110.69 109.81 107.57 105.73 102.70 101.18 97.59 94.81 88.93 89.05 93.04 93.51 92.57 87.39 80.03 84.09 83.92 -84.04 87.49 86.41 83.83 85.19 82.94 82.32 81.45 81.65 80.34 76.86 71.61 68.52 66.23 32.89 24.19 19.68 14.30 12.18 23.42 -26.95 27.21 27.21 -149.45 149.45 148.23 146.82 144.86 142.58 139.64 139.98 130.48 131.96 138.74 139.62 138.09 136.94 136.99 136.83 137.80 137.68 136.37 135.06 -133.79 134.06 133.51 130.84 132.32 132.30 132.85 132.80 131.87 131.62 131.85 131.84 131.20 131.57 131.78 130.96 129.68 129.65 129.77 129.04 -128.67 128.08 127.42 127.60 126.53 125.96 125.83 124.80 124.93 124.45 123.01 121.68 117.66 118.16 117.29 114.35 115.41 115.67 113.07 113.17 -110.40 107.98 104.56 105.00 104.42 103.77 102.55 101.29 100.05 98.07 92.78 90.17 87.93 86.73 85.25 87.42 86.60 78.30 79.53 80.65 -76.04 77.06 79.76 81.07 79.78 81.77 80.30 81.07 79.06 75.59 69.54 56.09 39.23 22.68 7.15 18.85 23.62 7.00 8.62 12.35 -21.92 17.79 17.79 -149.02 149.02 147.33 148.52 144.68 142.63 140.27 136.26 132.13 133.78 137.98 138.96 137.69 137.20 136.55 137.11 137.05 136.56 135.87 134.70 -133.68 132.93 132.52 132.84 132.59 132.78 132.81 132.38 132.02 131.14 131.25 131.74 131.25 130.89 130.58 130.05 129.19 128.90 128.99 128.48 -127.17 126.94 126.11 126.31 126.78 125.98 125.18 124.20 123.62 122.12 120.97 119.86 117.79 114.45 113.34 111.38 110.69 108.00 109.64 109.04 -106.53 104.49 100.44 99.73 100.34 98.39 98.45 97.97 98.08 96.45 94.31 91.89 90.98 91.53 90.49 88.88 87.12 86.94 84.85 83.21 -81.08 75.81 75.26 75.51 76.55 77.60 76.96 70.47 73.13 71.44 62.28 27.08 7.00 7.00 7.00 7.00 11.13 -10.00 -10.00 8.21 -10.43 10.12 10.12 -148.83 148.83 148.36 148.54 145.56 142.17 137.93 137.84 136.37 132.38 138.49 138.40 137.12 136.10 136.04 136.91 137.08 136.26 136.35 133.73 -133.55 133.55 132.36 131.75 132.25 132.81 131.69 131.87 131.38 131.83 131.48 131.32 131.67 130.89 129.64 129.30 128.27 128.03 128.55 128.00 -127.03 126.95 125.89 126.00 126.01 124.71 124.07 123.05 121.64 120.37 119.35 118.63 116.68 114.29 109.25 106.63 106.70 105.04 104.42 104.05 -101.78 96.82 98.32 91.79 95.11 94.55 95.32 89.01 92.01 89.73 93.28 92.70 91.64 89.78 89.22 88.29 87.42 86.03 80.29 78.23 -81.69 77.82 76.63 74.65 71.41 71.00 75.75 67.79 58.98 65.46 51.07 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -148.37 148.37 146.20 147.63 145.13 142.68 137.44 137.82 135.26 134.47 137.73 138.25 137.20 136.56 136.52 137.40 136.45 135.20 135.19 134.27 -133.36 132.80 132.75 132.78 133.60 133.18 131.71 130.94 131.69 131.01 131.75 131.38 130.50 130.01 129.90 129.15 128.62 127.92 128.23 127.63 -126.98 126.56 126.01 125.45 125.05 122.33 119.74 119.75 119.09 112.93 116.09 115.68 112.15 109.97 107.25 103.60 101.78 101.37 99.56 99.88 -98.54 98.34 95.30 93.65 91.15 87.12 84.40 86.60 82.26 87.54 88.50 88.20 87.70 87.47 86.39 85.48 83.91 82.20 80.91 82.19 -79.40 79.42 77.82 75.78 73.92 71.57 67.08 68.73 62.93 56.41 40.67 22.16 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -147.31 147.31 145.78 145.57 142.13 141.08 138.09 136.63 134.76 137.79 137.93 137.73 136.49 136.32 136.62 136.97 136.41 135.21 134.42 132.91 -132.69 132.83 132.57 131.96 133.06 132.41 131.83 131.74 131.31 131.08 131.39 130.35 129.18 129.90 128.63 129.47 128.17 127.46 126.93 127.18 -126.90 126.73 125.97 125.05 124.43 119.54 110.07 112.85 111.81 111.60 110.95 107.16 106.73 100.48 100.45 98.40 94.47 95.59 94.60 93.14 -94.87 92.89 92.43 90.08 88.46 85.86 85.79 85.08 81.99 81.41 82.93 83.18 84.64 81.02 82.86 75.84 80.38 78.77 79.95 79.72 -78.77 78.99 78.20 76.17 74.45 72.92 67.09 63.56 58.66 51.00 39.21 25.67 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -146.77 146.77 144.42 143.53 140.81 140.33 136.73 136.70 136.29 137.89 137.87 137.41 136.38 135.85 135.34 135.32 134.85 134.48 133.57 132.57 -132.66 132.53 132.77 131.98 132.40 131.84 131.49 131.70 131.84 131.14 131.37 129.81 128.51 128.93 128.76 127.97 127.47 126.64 126.45 126.15 -126.14 125.63 125.24 124.61 123.75 120.80 116.05 107.43 106.24 107.00 104.94 94.77 74.56 90.07 92.72 90.59 86.43 89.26 89.47 89.34 -89.79 87.16 87.28 83.77 77.04 70.92 73.56 73.31 77.71 64.83 74.60 74.25 75.33 77.13 78.76 78.78 78.07 73.81 77.91 77.47 -78.06 77.62 77.13 75.69 73.58 70.82 65.52 59.36 54.79 50.01 37.82 25.70 14.23 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -145.59 145.59 145.42 143.10 141.50 140.25 140.26 139.41 136.92 137.37 137.20 137.26 136.85 135.77 133.99 134.40 133.37 133.41 133.64 132.37 -132.88 132.86 132.28 131.87 131.44 131.07 131.80 130.16 131.34 131.02 130.70 129.91 129.26 129.10 128.42 127.88 127.12 126.80 126.27 126.49 -125.26 125.22 124.91 124.10 118.74 116.62 109.88 105.64 96.63 92.91 93.89 84.53 66.78 81.48 84.44 80.95 82.25 83.08 84.27 84.31 -85.80 81.33 82.45 81.15 81.05 79.65 66.98 67.62 63.31 63.09 65.29 68.17 69.89 72.53 66.34 74.54 74.25 76.65 75.82 76.78 -76.19 76.50 75.75 74.37 72.14 68.15 63.78 59.08 52.91 47.53 37.80 24.54 12.96 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -144.88 144.88 144.67 140.64 142.10 142.04 139.45 138.95 137.65 136.58 137.76 134.59 135.04 134.90 135.40 134.74 133.19 131.66 131.33 131.95 -132.15 132.39 131.71 131.14 131.91 131.54 131.37 130.87 130.78 130.33 130.05 128.98 128.90 128.50 127.22 126.62 127.14 131.44 126.02 125.10 -124.76 124.18 124.00 122.64 117.69 105.12 85.46 81.08 80.84 84.91 81.16 73.85 71.55 66.82 74.34 79.52 78.21 79.93 81.05 75.71 -79.80 78.81 78.39 78.69 76.92 72.19 69.42 64.29 60.36 61.49 64.44 64.44 65.64 65.33 65.32 67.03 70.18 71.64 73.75 72.63 -74.43 74.59 74.16 72.61 66.76 55.39 60.05 56.11 51.49 44.79 35.37 21.32 10.57 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -142.65 142.65 142.25 143.21 140.81 139.51 139.30 137.75 136.56 135.89 138.05 136.50 134.35 133.64 132.96 132.43 133.61 131.92 131.44 131.64 -131.89 132.09 131.93 131.82 132.15 131.19 130.93 131.12 130.29 129.93 129.49 128.28 128.18 127.85 127.44 127.08 125.98 126.57 125.52 124.89 -123.94 123.48 122.43 119.36 112.29 93.18 76.26 70.84 76.35 71.53 69.46 67.83 66.65 64.58 64.77 70.03 71.26 70.44 69.16 70.47 -75.17 74.20 69.16 60.65 57.84 57.35 59.35 54.43 54.72 57.12 61.33 57.43 56.88 59.18 59.65 62.21 65.60 68.51 69.46 70.52 -71.28 72.41 71.12 68.06 48.75 46.62 54.11 51.95 47.86 41.52 31.50 18.11 7.22 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -144.04 144.04 142.46 142.06 141.44 139.45 138.75 137.60 137.08 137.75 136.74 135.58 134.84 133.81 132.59 131.44 130.91 130.01 131.88 132.58 -132.44 132.84 131.87 131.65 132.25 130.90 131.21 131.12 130.57 129.92 128.96 128.39 127.71 126.96 127.11 126.63 125.78 125.28 124.91 123.34 -119.89 117.34 114.55 114.86 110.97 96.66 78.26 67.03 75.04 69.90 70.57 70.48 69.02 64.68 63.50 64.92 68.63 68.87 68.28 66.74 -64.24 69.67 66.50 60.48 58.13 58.36 52.19 54.25 54.99 52.67 56.79 52.28 52.78 53.08 54.22 56.35 58.22 63.32 65.54 66.43 -67.59 68.18 66.93 58.67 40.57 47.96 49.27 48.50 44.20 37.97 27.22 14.47 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -142.75 142.75 141.95 141.05 139.57 138.11 139.05 135.93 135.33 137.51 136.44 135.43 134.37 133.36 136.18 132.48 130.83 130.10 130.79 132.03 -132.20 133.57 131.90 132.54 131.34 130.32 131.10 130.93 130.45 129.75 127.11 126.66 127.01 127.03 126.45 126.77 125.25 125.88 125.93 123.02 -113.72 108.21 111.76 108.26 108.38 95.32 78.00 67.27 72.99 73.66 71.37 72.24 69.65 68.73 63.20 64.54 65.45 66.43 66.22 65.19 -62.97 58.60 57.00 55.67 56.07 56.26 54.81 51.54 48.54 43.02 39.95 41.11 40.38 45.31 48.20 49.98 47.97 53.37 58.10 61.43 -62.99 58.78 53.21 48.10 37.80 46.93 47.30 45.34 39.74 32.93 21.72 10.40 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -143.38 143.38 140.97 140.27 139.69 138.23 137.87 135.25 135.77 136.01 135.46 135.49 134.46 132.53 132.39 130.64 130.60 131.76 132.44 132.07 -132.77 132.79 132.06 131.79 131.67 130.98 130.61 128.97 129.09 129.46 128.09 127.69 127.25 126.14 125.10 126.50 124.92 123.76 122.76 120.38 -114.85 111.40 107.25 105.99 99.88 94.03 79.00 76.36 73.21 74.34 75.64 75.12 74.01 72.23 67.74 66.60 61.68 64.19 64.62 61.07 -61.04 57.54 55.88 53.13 52.71 54.63 53.53 49.52 44.98 42.60 39.17 38.07 36.92 35.95 42.77 48.14 47.61 48.99 50.21 56.05 -53.36 45.62 41.42 37.09 36.26 41.05 43.42 41.24 36.41 26.92 15.48 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -142.04 142.04 140.75 141.23 139.71 138.22 137.55 134.71 135.14 136.34 135.06 134.82 133.27 132.73 131.86 130.73 130.46 131.88 132.67 134.25 -133.36 132.29 131.46 131.35 129.95 130.74 131.16 129.93 129.39 127.22 128.71 127.44 122.97 122.97 124.21 125.16 124.67 121.51 119.83 117.59 -119.64 114.62 110.27 102.99 101.35 86.22 92.30 75.24 79.71 81.28 80.18 79.03 76.96 77.82 73.58 66.23 62.34 64.87 63.48 61.26 -59.21 57.71 55.62 52.81 50.86 49.46 46.63 48.39 46.98 43.39 39.62 36.67 34.14 33.56 35.54 35.71 46.00 48.54 47.11 50.04 -49.08 43.34 40.64 34.04 37.83 41.03 41.47 36.83 31.37 19.61 10.30 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -142.31 142.31 141.04 140.15 140.98 138.99 137.95 136.56 135.30 135.17 134.34 133.62 132.80 131.94 131.14 129.93 130.56 132.22 134.37 135.30 -133.32 131.23 131.26 130.73 129.90 130.70 129.87 129.31 127.45 127.64 125.75 126.34 123.18 120.84 123.60 124.76 122.09 121.58 117.56 115.18 -112.76 114.98 108.51 106.51 103.54 98.76 91.69 82.18 81.65 86.09 83.90 80.51 81.04 78.92 77.09 74.07 65.84 67.67 60.90 58.87 -55.47 50.79 50.07 48.57 47.27 47.03 45.79 45.26 43.42 42.96 40.96 36.70 35.63 34.63 36.22 38.89 42.27 44.03 43.07 45.31 -46.95 45.37 40.20 37.28 37.83 36.40 38.96 34.75 22.79 12.53 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -141.36 141.36 140.37 140.55 140.27 139.18 136.53 136.05 134.49 133.01 133.94 133.43 131.73 131.11 130.09 130.69 131.89 131.73 134.40 134.81 -132.88 131.67 131.09 130.27 129.76 129.00 129.57 128.51 126.60 125.78 125.67 110.82 120.36 123.13 123.45 121.93 121.17 111.93 110.50 114.81 -109.54 107.85 106.87 106.23 105.57 102.70 98.03 84.29 91.56 88.94 85.22 83.46 80.26 75.59 76.27 75.21 71.68 68.76 59.60 56.89 -53.67 49.52 46.46 43.97 43.61 46.38 43.76 41.08 41.80 38.18 36.18 33.75 34.03 33.70 34.95 35.75 38.84 43.21 40.86 40.25 -42.68 41.09 37.50 36.11 36.14 35.86 35.84 28.11 16.70 8.61 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -140.79 140.79 140.45 140.24 139.44 138.90 137.25 135.10 134.16 133.17 132.70 131.84 131.41 130.56 130.37 131.55 132.41 132.62 133.83 133.07 -133.26 130.88 129.70 129.23 129.33 128.99 128.88 128.70 126.18 125.39 124.83 123.97 122.26 122.95 122.73 120.84 114.70 111.50 107.67 112.61 -108.29 106.66 101.87 105.22 104.16 100.99 97.29 94.99 92.51 89.63 86.03 82.11 77.34 77.22 73.68 73.67 69.95 65.59 54.93 50.81 -52.22 51.73 48.07 44.92 46.15 44.90 42.61 40.86 37.31 35.10 31.06 28.58 29.32 31.36 33.56 33.03 34.05 40.15 41.13 39.61 -38.21 38.16 36.73 35.29 32.41 32.36 30.22 21.50 9.62 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -140.45 140.45 140.22 139.77 138.81 138.81 137.60 136.35 134.12 131.95 132.58 130.96 129.81 130.76 130.27 131.75 134.11 134.34 133.73 133.34 -132.30 130.74 129.41 128.46 126.98 127.63 128.11 127.69 125.65 126.52 124.07 124.14 123.75 121.74 122.10 114.67 115.42 113.72 112.37 100.16 -96.87 95.34 101.29 99.82 99.10 97.83 96.22 92.82 91.61 90.09 84.55 78.22 73.18 74.51 73.54 72.09 66.33 61.09 52.31 48.83 -52.72 52.25 49.95 47.36 48.34 46.49 43.39 39.35 36.07 34.20 31.63 29.93 29.08 28.71 29.95 28.44 32.16 35.10 35.85 34.39 -34.61 35.71 33.24 30.46 27.44 25.98 22.38 11.71 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -140.55 140.55 140.41 139.68 138.45 138.75 136.76 135.76 133.77 132.23 131.16 129.77 130.21 129.92 130.59 132.42 134.11 133.90 133.20 132.38 -131.97 128.03 128.87 128.82 127.97 126.03 127.72 127.24 124.28 124.88 123.72 124.45 122.81 123.56 121.47 121.21 119.90 114.33 115.84 108.12 -104.82 98.69 98.34 95.32 97.37 94.87 90.52 94.14 86.58 86.70 85.98 79.49 69.19 59.66 58.85 69.54 65.00 53.25 50.17 50.39 -53.69 48.96 52.67 49.80 48.33 45.04 44.31 38.88 34.54 32.35 30.58 28.88 27.46 28.03 28.41 31.03 32.81 30.41 30.00 30.82 -29.96 26.78 25.92 23.10 19.57 17.16 9.75 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -139.87 139.87 140.96 139.66 138.30 137.71 136.12 133.32 133.66 131.42 131.05 130.46 129.42 129.61 130.54 132.08 135.33 133.59 132.85 132.89 -131.52 130.21 129.61 128.04 126.38 127.01 127.18 126.42 124.08 124.53 123.68 124.15 123.40 122.82 122.23 122.09 120.57 118.82 113.25 103.56 -94.29 95.87 99.38 95.91 92.33 83.12 87.46 89.73 84.30 83.98 83.59 80.47 65.90 60.45 64.84 58.25 55.06 55.72 52.63 52.36 -53.00 52.19 52.16 51.64 47.83 46.59 38.79 38.10 33.83 31.55 28.55 26.60 26.50 26.85 26.99 25.42 24.11 20.74 23.93 16.83 -18.85 11.60 7.00 7.32 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -140.24 140.24 139.75 139.72 138.36 136.62 136.21 135.06 133.45 131.04 129.40 129.88 129.75 129.37 130.51 131.10 134.26 133.36 132.94 132.28 -132.13 130.23 128.21 127.98 125.83 126.35 126.68 122.38 123.96 124.11 124.35 124.44 123.87 123.87 123.25 121.97 121.81 117.56 106.35 94.20 -95.63 89.46 92.60 81.35 82.42 74.61 77.73 79.30 80.55 82.05 77.60 80.04 71.31 64.59 58.94 56.40 53.68 54.88 55.23 56.71 -48.67 51.49 53.23 49.09 45.57 43.81 40.06 32.64 32.18 29.46 28.76 28.66 28.03 28.49 20.26 20.23 20.65 20.87 20.40 13.11 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -140.66 140.66 140.14 139.24 137.73 136.65 135.87 133.91 132.67 131.06 129.37 129.87 129.79 129.12 130.95 131.74 133.72 133.84 132.38 131.57 -130.72 130.02 129.50 125.08 126.92 126.45 126.39 124.56 124.89 124.72 124.58 124.82 123.30 124.06 122.88 122.68 121.94 121.34 113.86 115.44 -104.81 100.37 99.21 80.52 86.00 82.38 72.94 59.05 78.56 77.84 76.49 77.63 73.57 67.45 57.58 52.80 62.50 59.14 57.10 58.59 -52.67 51.84 47.47 33.28 29.41 26.47 27.81 19.37 17.19 13.51 29.42 32.02 29.58 23.19 24.14 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -140.16 140.16 140.27 138.97 137.02 136.02 135.18 133.75 130.82 130.94 129.53 128.59 129.20 129.15 131.40 131.63 133.56 134.31 132.99 131.59 -131.59 130.89 129.16 128.58 126.87 124.61 125.44 123.90 125.58 124.13 124.49 123.91 123.75 123.70 122.20 122.07 121.16 120.99 120.13 117.72 -114.19 111.36 109.18 106.49 102.43 99.54 89.00 71.68 76.32 80.78 78.84 76.37 77.26 73.83 66.41 61.84 66.87 56.95 58.65 50.79 -44.38 26.99 16.72 16.08 -10.00 -10.00 -10.00 -10.00 -10.00 24.76 35.87 35.73 22.97 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -140.20 140.20 138.82 138.58 137.35 134.68 134.01 132.86 132.10 130.90 129.92 128.54 128.69 130.89 131.08 131.76 132.34 133.00 131.74 130.66 -130.61 129.70 128.74 127.46 127.64 124.75 125.46 125.16 125.08 124.42 123.44 123.75 123.97 122.74 122.83 122.72 121.81 120.22 118.09 118.05 -115.76 114.69 111.97 111.35 109.03 106.17 103.40 101.75 98.69 95.42 90.21 80.82 65.09 54.47 55.49 48.93 39.08 33.45 21.08 14.62 -20.41 18.17 -10.00 -10.00 -10.00 -10.00 -10.00 16.37 41.58 36.50 40.79 38.79 35.98 30.89 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -139.77 139.77 139.39 138.61 136.65 135.83 133.25 131.91 131.23 130.73 130.05 128.92 129.16 131.55 131.87 132.91 133.02 133.06 131.18 130.40 -128.85 128.19 128.23 127.38 126.30 125.59 124.83 124.41 124.91 123.72 123.97 123.55 123.07 123.93 123.17 122.33 121.77 121.14 119.08 118.71 -115.87 113.08 113.72 113.60 112.37 109.36 106.34 104.09 101.07 97.17 95.15 91.63 88.13 87.42 83.18 78.62 78.96 73.12 67.77 62.51 -58.15 52.53 53.41 58.03 60.73 58.23 53.42 50.77 43.53 39.18 28.94 29.46 37.00 27.52 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -140.74 140.74 139.82 138.52 136.05 134.91 132.71 131.05 131.86 130.91 129.89 128.92 129.70 130.32 131.37 132.52 133.47 133.16 131.65 129.64 -128.68 127.97 127.24 127.32 126.69 126.60 125.12 124.92 124.99 124.07 123.20 121.15 123.03 124.32 122.80 122.21 122.22 121.18 120.07 116.80 -116.62 115.86 115.57 114.97 113.04 110.69 106.53 105.22 102.57 99.85 98.20 96.47 93.39 90.41 88.39 86.70 83.95 80.28 73.09 68.56 -68.73 71.34 61.63 68.52 72.43 70.24 60.56 57.90 53.06 31.83 21.59 46.22 37.53 43.44 40.44 36.95 34.16 33.27 27.56 27.56 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -139.64 139.64 138.79 137.65 137.33 136.26 134.12 132.36 132.08 130.88 129.58 129.25 128.72 130.16 131.64 133.01 133.02 131.75 131.13 128.72 -128.58 127.28 127.06 127.23 126.99 127.03 126.57 124.29 123.90 123.20 121.96 122.99 122.86 122.82 122.98 122.53 121.94 121.60 117.96 118.11 -117.40 117.12 116.85 115.11 113.32 111.27 109.07 105.60 103.19 101.83 100.65 98.36 97.02 93.08 91.40 88.71 88.03 84.70 81.71 79.83 -78.18 77.49 76.95 79.82 76.39 73.03 66.21 64.26 55.93 51.88 52.64 52.27 47.24 41.39 45.46 45.35 43.37 40.10 36.76 35.08 -29.07 29.44 27.68 15.09 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -138.83 138.83 138.47 135.94 135.91 134.30 132.52 130.25 130.19 130.91 130.85 130.29 128.67 129.70 131.59 132.82 132.46 131.09 129.73 129.12 -127.34 127.22 125.63 126.32 126.07 125.51 126.09 125.37 124.76 123.89 123.18 122.19 123.09 122.66 121.90 122.24 122.83 122.15 120.71 117.92 -117.91 118.69 117.34 115.64 112.73 109.79 108.96 107.79 105.61 103.48 101.55 99.36 97.15 96.94 93.69 77.64 83.45 87.37 84.38 83.17 -80.38 80.52 82.51 81.94 79.01 75.81 71.07 59.40 58.24 59.91 55.48 55.31 52.72 49.71 49.36 48.19 45.08 39.72 37.42 39.22 -39.07 38.27 35.58 30.83 26.04 26.79 23.13 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 9.56 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -138.56 138.56 138.80 135.20 135.95 133.66 132.21 131.19 130.87 130.52 129.70 129.07 128.03 129.29 131.53 132.65 132.15 131.05 130.39 127.74 -127.49 127.15 125.75 126.27 126.81 126.16 126.08 124.90 123.51 123.33 122.58 120.82 122.25 122.45 122.23 121.38 121.92 121.75 121.92 120.15 -119.58 118.77 117.92 116.66 114.18 110.11 109.32 108.51 106.94 104.62 103.08 100.77 99.68 97.74 86.51 79.56 69.77 85.80 85.01 80.82 -78.50 84.37 84.10 80.28 76.74 74.89 70.78 67.05 67.04 64.19 61.25 56.31 54.32 51.24 51.21 47.35 41.74 42.27 40.33 41.54 -41.90 40.83 40.34 38.63 35.53 34.96 33.62 31.79 28.96 26.79 23.01 7.71 16.97 15.50 16.24 14.84 7.68 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -137.81 137.81 136.72 133.09 135.86 134.11 133.34 132.39 132.06 130.36 129.51 129.15 128.49 130.13 130.73 131.04 130.22 129.03 128.55 127.53 -127.24 127.06 125.37 125.42 126.72 126.14 125.53 124.80 124.36 123.94 123.12 122.41 121.12 121.49 121.79 121.52 122.25 121.82 121.19 120.89 -118.51 119.18 117.73 116.73 114.81 112.35 112.22 110.98 107.88 104.32 104.26 101.96 100.19 98.07 94.98 87.66 67.38 71.52 86.55 83.32 -83.21 84.25 81.95 79.01 73.65 67.11 65.68 58.73 62.66 62.27 61.20 58.58 58.40 50.42 47.24 47.52 44.74 35.95 40.76 40.05 -39.72 42.32 40.42 38.59 37.71 35.84 35.29 35.34 32.62 30.40 28.82 26.72 24.68 22.68 20.43 17.31 10.25 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -137.54 137.54 137.25 136.98 131.80 133.54 133.00 132.78 131.62 130.87 129.72 128.73 129.61 130.28 131.52 131.19 130.23 129.29 125.78 127.74 -126.62 126.01 125.43 125.39 126.12 126.11 124.00 124.59 123.87 123.42 123.14 121.89 122.04 120.32 120.40 121.11 121.41 121.28 120.07 120.69 -119.32 119.87 118.21 117.50 115.10 114.35 112.42 112.35 109.25 105.04 103.57 101.58 100.34 99.09 96.74 95.32 71.78 71.69 87.35 85.40 -85.34 83.32 76.87 76.38 73.53 69.24 64.49 61.58 57.27 57.17 58.72 57.08 54.20 51.67 49.39 49.91 44.24 41.29 34.66 37.62 -35.04 36.15 37.46 37.89 38.08 37.84 36.65 35.21 33.32 32.10 30.02 27.53 26.24 23.17 21.06 18.30 10.55 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -136.69 136.69 136.02 135.91 135.23 134.68 133.34 132.36 131.64 130.58 129.57 129.11 130.28 130.38 130.40 129.86 129.22 127.16 127.17 126.03 -126.10 126.95 125.49 125.10 125.15 124.89 125.27 125.16 123.96 123.13 122.37 122.20 120.74 119.80 119.54 120.27 120.13 119.93 121.00 120.47 -119.71 119.31 118.32 116.49 116.25 115.19 113.37 112.17 110.16 106.94 102.63 100.13 98.66 98.08 96.92 95.88 91.90 84.85 87.78 88.05 -86.28 82.56 80.57 69.18 67.64 68.53 67.07 58.85 53.75 54.91 54.58 56.14 50.61 49.61 50.74 45.20 43.95 39.71 38.44 32.66 -30.32 23.82 23.12 27.76 33.26 34.81 35.32 34.07 32.86 30.81 29.68 27.23 25.63 23.78 21.15 16.02 9.40 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -135.30 135.30 136.84 136.90 135.68 134.06 133.04 132.94 131.39 129.65 129.25 129.14 130.03 130.70 129.60 129.27 128.64 126.98 125.78 126.01 -125.94 126.25 125.55 124.56 124.50 124.97 124.75 124.51 123.18 123.27 122.79 122.10 121.67 120.90 118.91 120.30 118.84 119.60 119.57 119.52 -119.83 119.75 117.88 117.31 116.90 116.31 115.25 112.85 110.35 107.81 104.36 95.81 96.32 96.80 95.73 94.53 94.17 90.84 89.24 85.74 -83.58 85.62 82.08 75.16 58.18 66.51 66.09 61.56 58.35 54.37 50.07 51.32 50.53 50.21 48.14 44.18 38.43 37.34 38.36 37.65 -27.97 22.28 18.61 16.54 23.01 29.10 33.25 32.84 30.74 29.26 28.26 26.78 25.38 21.27 18.54 14.64 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -136.81 136.81 135.81 136.59 135.32 134.51 131.98 131.49 129.88 128.13 129.11 130.09 130.07 130.40 129.45 128.57 128.15 127.94 125.94 125.90 -125.13 125.96 125.64 125.27 123.97 124.40 124.43 124.44 123.45 122.46 122.36 122.01 120.98 120.22 119.94 119.70 118.23 117.63 118.31 118.54 -119.76 119.36 117.43 117.11 116.82 116.30 114.18 112.90 109.78 106.36 103.19 96.50 94.61 95.49 91.38 93.02 92.25 91.04 87.46 82.04 -81.70 84.80 80.54 80.19 74.65 71.38 68.81 62.34 53.10 49.02 46.72 49.68 45.04 47.41 43.56 40.69 39.75 37.39 34.35 35.81 -29.01 27.82 -10.00 -10.00 17.00 22.17 29.09 29.48 27.66 27.54 26.43 25.09 23.31 19.58 17.36 12.93 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -135.05 135.05 135.37 135.43 134.78 133.57 132.03 131.23 130.13 128.58 129.52 130.79 129.51 129.55 129.07 128.68 127.86 127.11 125.12 124.91 -124.52 124.57 124.76 124.49 124.33 124.00 123.89 123.97 123.82 123.07 121.85 122.14 121.74 119.40 119.21 117.53 118.44 116.77 116.21 117.89 -118.57 118.21 117.07 116.57 116.08 114.54 113.83 112.49 109.83 107.44 102.15 98.34 96.87 94.07 92.88 91.05 89.13 85.65 81.83 82.03 -80.04 80.34 80.50 76.82 74.86 71.96 64.26 62.34 53.66 49.87 48.13 45.77 46.15 44.82 44.44 40.09 42.05 37.38 28.73 32.28 -30.68 27.27 11.32 -10.00 -10.00 18.20 25.05 25.91 27.20 27.08 25.83 22.26 19.86 17.74 14.52 9.06 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -136.03 136.03 134.97 135.82 135.17 132.01 132.18 130.74 130.25 128.93 129.98 129.11 130.04 129.48 128.66 126.82 126.36 125.70 125.03 124.05 -122.72 123.67 124.82 124.51 124.52 122.11 123.46 123.37 121.07 122.35 120.10 121.54 121.30 120.59 119.61 118.14 116.75 116.51 116.24 115.35 -116.16 117.28 116.60 116.56 114.99 114.33 112.61 110.53 111.39 107.36 103.29 100.20 97.66 95.66 92.23 89.27 85.33 78.91 76.92 78.11 -76.05 78.03 79.31 80.16 73.24 71.95 61.53 54.01 51.56 50.75 47.97 46.31 46.02 43.00 44.67 42.20 34.27 34.78 25.96 29.02 -25.61 24.84 8.68 -10.00 -10.00 14.29 21.10 22.57 20.03 23.77 22.72 15.77 13.57 10.84 7.54 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -135.93 135.93 134.39 134.62 134.76 133.64 131.98 129.79 129.88 130.26 130.32 129.77 129.44 128.78 128.21 127.14 126.30 124.47 124.70 122.12 -123.16 123.58 124.22 124.97 124.00 122.01 122.32 123.03 122.23 122.77 121.45 120.92 120.69 121.41 118.95 118.20 117.04 116.81 116.50 116.33 -115.44 115.53 116.62 116.97 115.26 114.47 111.41 110.70 108.53 108.49 104.44 101.86 98.94 95.19 90.81 89.28 83.60 68.66 70.46 69.81 -71.76 75.08 78.18 78.00 77.04 74.67 67.89 56.81 50.89 51.99 51.33 46.73 44.21 42.27 40.58 39.39 39.30 34.69 27.65 26.79 -27.91 22.14 7.00 -10.00 -10.00 -10.00 17.22 18.15 17.63 17.59 17.49 11.92 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -136.09 136.09 134.82 134.25 134.20 132.61 131.55 130.39 130.16 130.25 129.96 129.64 128.65 128.79 128.02 126.59 126.00 124.08 123.58 122.65 -124.27 124.57 124.82 124.76 122.97 123.25 121.31 122.63 122.50 121.45 121.01 119.78 119.39 121.44 119.73 118.86 117.89 115.15 115.30 115.24 -113.77 115.07 115.99 115.82 115.79 112.07 112.93 112.05 109.68 106.73 103.69 101.87 99.03 93.18 90.24 85.72 78.01 69.95 69.99 67.24 -68.18 70.88 74.68 75.67 74.57 72.25 68.15 55.92 52.58 54.74 50.15 47.14 42.86 41.72 37.68 37.48 36.11 35.18 34.14 30.02 -24.46 19.71 -10.00 -10.00 -10.00 -10.00 11.75 14.42 11.49 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -134.65 134.65 133.94 133.00 132.79 132.29 130.46 129.64 130.34 130.87 130.06 128.06 127.74 127.98 127.18 126.98 125.46 124.86 123.86 123.99 -122.59 124.11 123.74 124.07 123.64 122.25 120.90 121.74 122.63 121.29 119.21 120.47 120.20 120.26 119.70 116.43 116.98 117.92 117.01 117.06 -115.41 113.18 109.02 113.13 112.73 114.24 112.57 111.51 109.23 107.20 103.15 102.00 100.08 95.97 92.43 88.36 79.16 74.71 69.55 67.44 -66.73 69.80 71.70 73.15 71.80 70.37 66.83 60.87 55.52 49.88 49.63 46.23 43.43 42.34 40.66 36.82 32.37 29.83 30.92 30.19 -25.20 16.98 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -134.52 134.52 133.28 133.08 132.44 131.38 129.90 129.97 130.84 130.10 128.79 125.14 127.09 126.36 125.76 125.13 123.48 123.61 123.11 122.44 -122.54 122.99 123.08 123.30 117.92 122.11 119.72 121.28 119.77 120.49 120.21 119.42 119.34 120.04 120.44 117.84 115.98 116.22 115.89 116.33 -113.56 113.97 112.82 113.53 114.35 113.06 111.67 112.49 104.71 106.49 104.07 100.79 99.10 95.55 85.71 78.86 74.12 71.25 70.13 70.63 -68.09 66.16 69.11 70.65 69.95 67.34 62.14 56.08 51.52 39.57 42.42 42.83 44.44 38.58 37.89 35.77 35.46 31.91 22.15 19.42 -7.95 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -134.37 134.37 132.89 133.10 133.07 132.54 130.88 131.03 131.15 130.41 128.34 125.99 125.34 126.22 125.00 124.80 123.80 123.18 120.43 122.23 -121.96 121.43 121.50 122.50 121.52 118.25 119.26 119.77 119.89 119.77 120.10 118.42 115.43 120.06 118.04 118.07 114.99 117.33 113.09 115.30 -114.75 113.68 110.20 113.36 112.44 113.99 111.55 112.40 109.06 106.14 104.82 101.50 99.20 92.79 77.64 71.33 66.19 68.29 70.11 69.79 -68.10 67.79 68.19 68.10 66.85 63.46 56.87 50.76 47.72 41.67 39.60 39.38 37.97 27.36 29.29 28.87 30.75 20.82 22.19 22.19 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -133.98 133.98 132.70 132.96 132.27 130.79 130.12 131.28 130.61 129.01 128.45 126.33 126.12 125.75 124.91 124.79 124.02 123.75 122.10 123.15 -122.58 121.71 120.42 122.20 122.74 120.47 119.01 114.94 118.75 121.32 119.77 119.42 119.06 116.96 118.33 117.77 118.35 115.02 116.00 113.45 -112.18 114.47 113.50 111.90 112.14 112.15 111.25 108.48 108.72 103.91 103.06 99.37 98.18 91.27 79.61 69.20 69.77 74.00 69.10 67.30 -65.33 66.23 63.55 63.09 61.88 58.00 51.83 47.28 45.02 41.97 40.71 37.77 37.79 38.87 36.09 27.40 20.59 23.29 13.50 13.50 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -133.12 133.12 132.08 133.10 133.05 132.09 132.18 131.76 130.10 129.43 128.15 126.48 125.91 124.97 124.27 124.29 122.68 121.71 121.76 121.40 -122.10 122.03 121.23 121.78 122.30 122.07 118.57 117.57 118.71 118.83 116.89 116.94 118.44 118.33 116.05 117.64 114.99 116.13 112.90 109.21 -113.16 114.38 110.90 112.79 111.30 111.62 111.31 109.39 108.48 106.84 99.74 95.30 93.25 83.10 70.09 73.17 79.77 73.08 67.60 68.09 -66.24 64.23 58.77 58.74 58.40 54.06 47.88 42.28 38.94 41.60 38.88 34.91 31.02 33.54 30.65 41.43 37.12 27.88 25.55 20.90 -9.44 15.89 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.18 8.55 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -133.71 133.71 132.44 133.08 131.61 131.90 131.34 130.42 130.73 129.07 127.99 125.89 125.01 125.78 124.55 123.89 122.61 120.90 120.76 121.35 -121.12 121.73 121.97 121.73 121.22 120.54 119.42 117.89 118.90 119.43 118.37 116.68 116.72 115.28 115.33 117.29 115.34 112.34 114.55 114.17 -110.52 113.09 113.46 111.19 111.61 110.90 107.83 104.31 106.86 100.28 99.14 99.98 96.58 90.68 86.96 84.38 81.16 73.69 69.00 67.29 -67.83 63.75 56.86 48.22 45.82 35.36 29.96 27.78 28.16 30.55 29.08 31.18 29.61 26.46 25.40 26.17 31.51 32.47 27.93 26.07 -24.90 20.18 -10.00 7.00 7.00 -10.00 13.05 18.56 19.87 16.63 24.49 15.39 10.91 14.66 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -131.16 131.16 131.12 132.65 131.79 132.19 131.49 129.89 129.78 127.78 125.53 126.38 125.28 124.32 124.41 122.69 121.58 122.58 120.24 120.93 -121.05 121.86 119.73 121.21 120.81 120.79 117.67 118.79 116.89 118.17 118.64 114.81 118.71 116.82 116.94 115.65 114.89 110.63 113.10 113.24 -112.28 113.84 109.73 112.44 108.56 110.34 110.61 109.17 99.83 102.29 89.11 91.77 77.02 76.78 83.13 81.10 70.29 61.49 58.90 53.97 -53.84 50.84 22.69 20.61 13.12 20.88 10.09 7.78 23.96 24.20 25.31 24.60 23.32 21.82 23.31 23.57 25.26 29.23 36.69 27.45 -21.07 -10.00 -10.00 7.00 9.03 -10.00 24.64 26.29 22.35 27.78 12.65 15.26 8.77 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -132.67 132.67 131.57 131.46 131.74 131.26 129.95 129.88 129.80 127.86 125.87 125.80 122.48 124.94 121.44 121.32 120.69 121.03 121.07 120.17 -120.79 122.08 121.93 121.65 121.21 120.61 120.07 115.68 116.49 117.12 115.72 117.59 116.40 116.03 117.60 114.08 116.40 114.90 113.38 113.92 -114.34 112.90 111.60 110.06 107.60 105.21 103.96 100.31 99.89 103.11 100.21 98.70 93.45 86.94 78.82 77.67 63.11 61.24 61.46 55.45 -52.62 43.16 29.13 16.03 10.46 8.90 7.83 8.62 10.61 11.94 15.91 -10.00 -10.00 18.90 11.66 20.98 19.83 19.28 37.70 37.04 -26.56 -10.00 -10.00 -10.00 23.72 33.74 25.82 17.70 -10.00 10.05 -10.00 -10.00 7.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -130.90 130.90 130.38 131.68 130.96 129.84 129.47 129.68 129.77 129.05 128.17 126.73 125.58 123.94 123.59 122.66 121.78 121.03 119.60 120.04 -120.99 120.41 120.51 120.64 117.55 118.38 116.75 115.62 112.56 115.54 115.00 113.08 116.52 115.71 115.41 115.75 116.03 116.51 114.45 112.60 -113.80 111.92 110.00 109.69 109.81 103.47 98.35 97.61 91.34 104.01 102.88 96.39 87.99 85.75 79.49 71.70 56.81 54.97 56.33 56.72 -33.76 23.13 22.47 20.10 15.20 10.41 7.00 7.00 11.58 13.70 14.01 13.37 -10.00 -10.00 -10.00 13.29 19.58 18.38 13.37 -10.00 -36.24 32.34 7.00 -10.00 25.39 29.26 23.83 21.69 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -130.12 130.12 130.74 130.50 130.01 129.98 129.24 129.04 128.21 126.55 124.92 123.90 123.20 122.73 121.69 119.57 122.06 121.87 121.09 118.89 -119.85 119.00 119.05 119.51 119.23 119.09 117.24 118.40 118.04 115.18 115.38 115.85 114.78 114.10 115.26 114.90 116.42 115.86 109.20 112.37 -114.21 111.19 108.28 106.66 103.10 96.57 94.89 101.63 103.15 104.63 101.47 95.00 84.65 82.99 74.80 72.02 71.19 59.61 54.35 37.46 -26.29 12.15 12.59 12.24 13.50 12.63 -10.00 -10.00 11.16 12.88 11.28 -10.00 -10.00 -10.00 -10.00 7.00 8.92 -10.00 -10.00 -10.00 --10.00 -10.00 18.89 25.43 31.73 36.27 24.53 9.91 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -130.58 130.58 131.57 130.87 130.31 129.97 129.09 128.71 128.45 128.07 124.48 124.29 123.16 122.05 121.27 121.40 120.83 121.94 120.46 120.20 -119.51 118.67 119.81 120.94 120.12 119.41 117.22 114.94 116.92 115.57 113.87 114.94 114.14 117.21 116.75 115.77 116.78 117.00 102.76 98.82 -114.24 111.74 110.78 109.20 107.62 105.50 99.91 99.48 103.94 103.71 100.50 96.65 88.37 80.53 78.61 70.90 63.15 43.88 43.19 33.76 -16.81 7.00 7.13 7.31 9.18 7.00 9.18 -10.00 11.15 12.79 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 14.16 19.05 11.66 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -129.31 129.31 130.75 129.57 130.44 128.31 128.02 128.09 127.65 127.50 125.13 123.63 123.59 122.10 120.98 121.75 121.31 121.69 121.33 119.67 -119.49 117.38 115.89 117.03 114.41 119.26 118.54 117.17 115.08 115.49 113.45 112.84 115.06 113.68 116.47 115.66 116.11 111.03 112.30 108.59 -113.72 113.28 111.75 110.44 109.01 104.20 101.53 100.63 104.16 102.81 77.44 97.75 93.34 87.51 73.41 51.67 48.06 25.21 26.15 16.67 -9.42 7.00 -10.00 7.00 -10.00 7.00 7.62 11.82 14.50 23.76 18.19 11.66 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 11.72 8.98 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -129.21 129.21 129.58 129.03 128.35 127.54 126.76 126.37 126.48 125.49 123.44 123.62 122.34 120.69 121.59 122.36 120.80 121.25 120.05 119.17 -118.54 119.48 119.12 116.48 115.89 114.24 113.82 114.88 111.00 114.17 112.31 112.19 112.07 115.01 114.11 116.14 115.69 114.17 115.39 114.88 -114.17 113.89 113.51 112.34 110.40 107.74 106.39 105.55 104.38 98.64 56.71 92.99 91.90 82.48 70.40 61.76 33.53 22.22 21.72 15.54 -7.92 -10.00 7.00 8.59 -10.00 7.00 7.98 19.10 20.66 28.22 20.31 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -129.09 129.09 129.42 128.48 128.03 126.95 127.05 127.05 125.56 124.33 124.62 124.16 124.13 123.66 122.06 121.90 123.13 121.81 121.18 120.98 -120.19 119.63 119.52 118.69 118.89 116.84 115.61 114.65 116.22 116.46 115.82 114.26 115.19 115.38 115.06 116.45 115.38 115.92 115.96 115.37 -115.30 114.46 114.65 115.36 113.45 111.95 110.34 108.85 104.53 95.55 76.27 90.43 90.16 80.85 72.81 51.19 46.23 15.12 19.35 9.21 -7.00 -10.00 7.00 14.69 10.58 9.94 17.07 38.50 25.47 23.03 16.61 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -128.07 128.07 128.84 128.16 127.51 126.67 126.63 126.60 126.20 125.43 125.61 126.66 125.52 124.18 122.75 122.28 123.44 122.08 122.02 120.86 -120.15 119.90 117.12 117.55 116.51 117.78 116.85 114.32 114.85 116.28 115.06 113.49 111.25 108.44 115.22 115.65 115.81 114.16 114.42 114.85 -115.02 114.63 114.12 115.99 114.37 112.82 113.27 108.58 103.54 98.09 87.99 86.23 82.71 81.20 71.89 63.94 58.80 32.10 16.29 10.16 -7.00 11.71 19.74 23.66 7.31 10.36 30.57 37.32 23.44 18.08 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -127.79 127.79 127.34 126.73 125.41 124.91 126.67 125.96 125.84 125.19 123.66 124.29 124.62 122.53 121.60 120.45 120.94 123.12 122.64 120.91 -120.20 119.84 119.26 118.61 118.28 117.99 116.54 115.51 114.45 116.52 115.40 114.44 111.30 114.64 115.39 115.53 115.42 115.74 113.96 115.41 -116.02 115.38 113.17 115.26 115.15 113.24 115.83 110.14 101.19 94.24 88.06 69.09 33.26 54.36 59.71 59.57 59.15 61.09 -10.00 14.20 -12.48 28.33 32.56 15.27 13.18 38.98 44.54 29.64 23.83 16.21 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -128.16 128.16 127.22 126.11 127.20 126.50 126.53 124.71 124.90 125.00 123.38 123.73 124.90 123.58 121.78 120.72 120.08 121.59 122.25 120.85 -118.37 120.13 119.33 119.25 118.63 114.77 116.06 116.18 114.85 115.08 114.11 114.61 113.73 112.25 115.45 115.58 115.65 115.16 110.13 114.12 -115.65 115.53 113.15 115.99 117.35 116.88 114.28 115.04 97.46 93.66 82.71 80.17 28.99 -10.00 -10.00 54.38 46.64 40.75 17.71 15.80 -48.28 49.10 40.85 32.58 43.94 40.34 21.97 22.32 24.94 19.79 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -125.51 125.51 125.82 125.84 125.10 124.09 125.10 125.13 123.59 122.79 122.64 122.45 122.31 122.50 121.29 120.98 119.76 120.47 119.67 121.43 -120.39 118.20 116.66 117.40 116.25 117.63 116.67 116.89 115.26 114.13 110.28 111.88 111.48 113.24 114.72 114.15 113.32 114.85 114.47 114.79 -116.07 114.97 116.01 114.56 122.20 116.98 115.39 112.64 104.79 94.08 59.74 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 50.32 56.82 66.94 -66.69 69.87 77.06 68.51 65.18 31.81 27.31 40.96 44.91 15.91 9.57 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -126.58 126.58 124.78 124.91 124.05 124.65 123.36 124.74 124.31 121.96 121.85 121.94 122.48 121.40 120.32 120.07 118.74 118.71 118.77 120.83 -120.32 119.35 119.34 115.89 117.04 116.51 117.14 114.86 115.86 115.25 113.61 109.00 111.57 112.67 115.21 115.56 114.16 115.28 113.85 116.11 -115.54 116.49 116.41 113.84 127.01 134.40 121.00 113.09 109.66 96.31 83.91 54.06 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 35.88 77.17 -78.32 79.43 80.96 75.92 52.24 38.25 48.05 57.47 48.85 38.46 13.76 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -124.68 124.68 123.85 124.28 123.59 124.01 124.14 124.22 123.80 123.92 121.87 122.85 122.40 122.32 120.72 120.69 119.40 118.42 119.22 120.06 -119.97 118.72 118.23 117.92 115.69 116.50 116.17 117.07 113.85 115.03 112.90 111.41 111.33 108.67 115.59 114.59 113.90 114.12 113.64 115.77 -115.64 117.20 116.93 115.70 117.57 142.65 146.64 114.30 111.97 100.06 86.50 69.08 50.53 9.52 -10.00 -10.00 -10.00 65.82 61.64 59.75 -71.95 82.50 84.78 80.56 72.45 66.75 64.38 50.80 55.05 33.79 20.60 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -124.37 124.37 124.15 123.94 123.34 123.40 123.95 124.34 123.31 122.12 122.26 121.90 121.39 120.99 120.56 119.35 119.40 119.05 118.78 120.22 -118.13 118.74 117.90 116.95 115.62 115.29 115.41 116.15 116.51 115.76 115.50 110.95 110.79 110.21 112.97 114.05 114.20 113.74 113.50 111.62 -115.91 115.41 117.69 116.11 115.49 128.91 160.29 149.67 112.29 107.03 95.67 95.92 70.71 56.13 76.68 55.62 68.47 74.99 65.13 66.24 -81.80 81.53 80.72 72.50 72.34 73.93 62.81 50.60 45.17 24.71 13.38 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -123.76 123.76 124.07 122.18 123.15 122.66 121.49 122.56 122.44 121.44 120.48 120.29 121.60 120.18 118.74 117.57 118.09 118.21 117.66 118.45 -119.89 119.71 120.00 118.76 118.22 117.10 116.29 116.29 115.47 116.62 115.48 113.97 113.95 114.33 113.33 114.84 114.50 114.40 113.69 113.26 -112.34 115.09 117.45 118.13 115.52 113.21 128.56 165.70 141.69 109.22 105.88 103.49 98.09 85.48 84.00 91.69 89.10 93.05 92.37 90.20 -93.68 85.69 74.51 64.40 66.87 72.00 71.38 57.98 49.24 43.94 19.43 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -124.11 124.11 122.85 120.92 121.62 121.20 121.90 122.28 122.26 121.93 120.70 121.17 117.70 119.77 119.57 118.86 119.31 117.23 118.90 118.43 -119.58 117.91 115.31 116.46 115.54 116.79 116.14 116.45 115.89 115.45 114.77 114.85 113.85 113.12 113.94 113.78 114.70 114.74 114.38 114.29 -114.19 112.23 114.40 117.21 115.65 114.31 112.26 159.39 173.41 167.19 108.18 105.00 103.94 98.34 99.53 97.44 94.33 90.25 92.33 94.36 -94.44 93.91 92.29 78.63 66.24 76.15 79.82 70.10 55.02 42.19 23.62 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -123.91 123.91 122.89 121.71 122.26 119.34 120.90 121.79 121.60 120.18 120.68 121.91 121.19 119.92 119.00 119.24 119.35 120.20 119.20 117.42 -118.48 118.67 118.19 117.68 115.45 117.02 117.16 116.24 116.22 115.71 114.36 114.55 114.04 111.94 109.76 115.23 114.53 115.17 114.26 112.94 -113.01 112.48 111.62 112.09 118.94 116.17 115.24 112.89 157.40 197.25 160.45 108.65 107.21 104.68 102.31 98.49 96.37 94.11 96.37 95.90 -94.48 95.25 93.36 71.27 71.65 50.27 68.38 82.97 56.65 33.00 23.54 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -123.59 123.59 123.66 119.85 121.15 121.36 121.43 121.91 122.01 121.50 121.57 121.63 120.94 121.23 119.23 119.06 118.83 119.68 118.98 117.97 -117.90 115.96 116.73 117.59 116.75 115.25 115.91 114.82 116.19 115.74 115.79 114.62 114.81 111.49 113.36 115.44 113.54 113.11 113.64 113.80 -113.42 113.05 113.19 112.56 114.27 116.43 116.21 110.98 114.01 142.05 163.27 139.31 110.44 106.78 105.29 104.24 101.70 101.09 97.63 96.67 -95.52 94.76 90.66 70.01 66.96 69.05 60.46 84.56 72.03 54.19 27.06 22.67 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -124.01 124.01 123.08 120.71 121.48 121.74 122.21 121.98 122.04 121.87 121.34 121.32 120.06 120.02 118.57 119.45 119.29 117.58 118.25 118.08 -117.89 118.08 117.39 116.40 116.46 113.42 116.20 115.83 115.66 116.01 116.33 114.41 114.57 112.33 113.64 110.91 113.81 114.05 113.83 114.15 -114.31 113.37 112.33 112.77 110.29 113.10 115.41 113.99 113.75 121.15 114.45 121.43 119.79 109.22 105.07 103.72 103.17 103.06 101.08 97.59 -97.65 90.20 74.33 79.07 87.82 88.01 64.76 70.46 82.06 63.55 44.43 33.11 17.34 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -122.92 122.92 122.79 120.73 122.17 123.00 121.28 122.76 121.75 121.70 121.47 121.62 120.95 120.14 119.30 118.65 119.00 118.59 117.45 117.29 -117.45 117.01 116.26 117.15 116.75 113.02 116.38 114.98 116.23 115.49 115.35 114.87 113.74 113.27 112.35 114.31 114.97 114.55 113.86 114.19 -113.53 114.39 112.66 112.16 110.33 112.00 114.19 113.32 112.53 115.46 127.42 116.36 110.73 110.82 108.74 104.69 99.83 98.49 99.70 93.10 -82.23 69.41 84.01 87.37 95.47 92.76 75.61 66.79 86.47 52.13 56.27 33.12 26.08 19.17 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -122.91 122.91 122.40 121.21 121.12 120.48 121.36 121.98 121.34 121.39 121.05 121.06 120.32 120.66 121.10 120.17 120.22 119.22 118.13 116.50 -116.19 118.19 116.32 116.12 116.43 114.38 114.84 114.14 115.31 114.30 114.68 114.05 113.31 112.50 114.08 113.35 115.05 114.23 114.65 114.35 -112.65 112.41 112.14 112.54 111.43 109.65 111.16 115.96 113.73 112.41 110.70 120.05 117.15 111.78 110.04 107.21 105.76 99.72 92.87 91.27 -87.29 83.21 90.01 91.87 94.23 98.81 99.36 83.64 89.03 76.82 66.73 50.56 14.92 7.84 8.93 -10.00 7.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -122.54 122.54 122.60 120.27 120.43 119.69 121.50 119.66 120.92 120.64 121.00 121.20 120.13 120.23 119.27 119.22 120.13 118.92 119.01 117.25 -115.96 117.40 117.39 117.04 115.79 113.80 113.44 113.07 114.69 114.21 114.71 115.78 115.29 112.87 113.99 112.24 114.77 113.87 112.71 113.03 -114.03 113.32 112.49 111.74 111.95 108.29 111.18 112.28 113.67 111.63 110.66 108.69 111.76 109.48 109.05 104.89 107.66 105.59 98.16 96.10 -91.07 91.33 96.43 96.56 96.32 97.16 96.21 94.15 93.63 74.70 49.50 44.08 22.21 -10.00 18.09 13.46 13.34 8.60 7.10 7.00 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -122.50 122.50 122.02 121.58 120.66 119.66 120.63 120.41 120.35 121.07 119.91 120.44 119.66 119.97 120.28 119.87 119.53 118.98 119.13 118.13 -115.03 116.79 116.28 115.65 114.92 114.47 114.25 114.17 115.68 115.51 115.70 114.51 113.64 112.63 112.74 111.45 113.18 113.78 113.69 113.84 -113.31 113.22 113.78 112.62 112.12 107.73 110.44 111.27 112.74 111.42 111.42 110.02 109.45 107.09 109.86 107.29 105.90 100.36 105.11 102.92 -97.68 101.55 101.66 98.13 96.12 97.66 96.27 97.66 97.64 93.16 57.51 49.87 31.43 44.70 23.31 31.53 19.95 19.64 10.12 10.12 --10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -122.21 122.21 122.54 121.76 121.37 120.18 119.60 119.14 118.28 120.60 120.06 119.80 117.45 118.86 118.37 118.77 119.41 117.97 118.30 117.60 -116.29 115.52 115.61 114.99 112.47 115.22 115.44 113.94 115.80 115.01 114.74 114.10 114.03 113.03 112.07 109.84 113.85 114.34 114.03 113.81 -113.94 112.96 113.29 112.12 111.32 111.00 110.36 110.20 111.16 111.35 108.42 109.16 107.37 106.26 109.01 106.11 104.65 107.76 107.27 102.28 -102.68 97.91 100.50 97.94 99.29 97.23 97.01 98.36 95.43 96.64 91.50 61.98 49.45 56.33 55.35 50.00 30.76 29.91 12.75 7.00 -7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -122.98 122.98 121.68 122.51 120.19 120.37 119.46 118.93 119.71 119.82 120.45 120.19 119.96 120.09 118.66 119.06 119.08 117.66 117.47 117.85 -117.23 116.54 115.27 116.46 114.40 115.46 114.36 114.08 114.51 113.74 112.81 113.02 112.38 112.31 112.11 110.86 112.27 113.16 114.09 112.83 -112.84 112.94 113.65 113.46 111.57 110.82 111.15 109.00 111.32 110.37 107.10 108.30 109.60 105.76 107.44 107.13 107.40 106.44 105.22 105.98 -105.70 103.11 100.74 105.31 99.05 96.99 100.38 98.49 95.70 94.48 93.02 92.40 74.34 70.69 64.59 64.44 53.90 55.35 27.41 10.77 -7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -122.17 122.17 122.10 121.55 121.25 119.77 118.91 117.24 119.47 119.38 118.65 118.89 118.59 118.84 118.07 117.60 117.00 117.52 117.69 117.32 -117.82 116.50 115.76 113.59 114.29 115.14 114.41 114.94 113.39 113.16 112.41 113.23 112.65 112.19 111.51 110.84 110.74 112.66 113.73 113.83 -113.38 113.81 112.93 113.00 113.47 110.27 112.08 110.70 110.46 109.37 109.63 107.23 108.23 104.55 105.43 109.27 108.64 107.47 105.88 106.57 -106.17 105.66 104.44 101.96 101.54 101.95 98.23 98.22 97.87 97.60 98.54 97.50 92.54 82.75 80.54 77.53 58.36 57.67 44.08 32.22 -31.61 17.15 7.00 -10.00 22.73 14.44 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -122.43 122.43 121.17 119.78 120.97 118.48 119.15 118.97 118.47 118.88 119.09 118.65 118.09 117.64 117.00 116.16 115.67 117.56 117.65 117.34 -117.70 115.96 112.36 115.92 114.70 116.04 114.81 114.34 113.10 113.61 112.24 112.68 112.52 111.87 112.38 111.24 110.27 112.99 113.11 114.08 -113.25 113.44 113.10 113.04 112.50 113.45 113.38 110.92 110.92 110.45 108.61 109.20 109.34 109.70 108.77 108.79 109.54 108.41 106.96 106.47 -106.26 105.78 104.38 104.92 105.18 101.94 102.03 99.50 100.16 99.16 99.31 97.73 93.59 89.06 92.38 84.76 73.56 72.49 64.33 63.09 -61.70 59.04 21.68 11.28 10.75 7.00 7.30 11.40 7.39 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 --10.00 -10.00 -10.00 -122.91 122.91 122.45 121.55 119.41 120.51 118.94 117.89 117.17 117.95 119.03 118.61 118.30 116.93 117.86 115.64 117.35 117.29 117.18 116.34 -116.74 115.19 116.93 114.24 113.79 112.98 114.75 114.70 113.64 113.42 112.32 112.38 112.88 109.88 111.80 108.73 107.95 112.49 112.54 112.85 -113.62 112.93 112.91 112.73 113.14 112.36 111.27 112.22 109.47 107.20 108.87 108.93 108.69 108.40 108.59 109.20 108.80 108.04 108.39 107.39 -105.62 104.94 105.50 105.47 105.98 103.72 101.99 102.33 99.44 98.72 100.42 99.95 92.31 92.83 92.28 91.99 87.46 81.43 62.51 63.29 -66.54 54.74 46.04 15.73 31.53 7.00 12.94 7.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 --10.00 -10.00 -10.00 -122.42 122.42 121.56 122.21 119.75 118.73 118.23 116.91 117.25 116.37 116.73 117.29 117.89 118.66 118.19 115.23 117.02 117.10 117.94 118.33 -117.06 116.88 116.09 113.88 114.26 115.17 115.22 115.25 114.04 113.92 113.94 112.03 112.37 112.12 110.69 111.68 106.29 107.32 112.28 112.61 -112.73 112.56 112.68 113.77 112.57 111.57 111.01 110.59 109.95 108.92 109.81 107.53 107.64 106.28 108.85 108.89 108.59 108.79 107.27 110.05 -106.73 107.89 106.35 105.24 105.04 104.52 104.18 102.40 100.96 99.65 100.77 100.49 97.83 96.30 96.04 95.64 90.27 83.52 77.59 76.65 -74.95 62.75 51.66 63.91 44.25 20.25 24.18 20.88 7.00 25.83 13.49 8.13 22.32 -10.00 -10.00 8.40 7.00 7.61 10.19 17.31 -10.61 -10.00 -10.00 -122.06 122.06 120.94 121.13 119.76 119.31 118.27 116.53 117.34 117.76 117.60 116.72 118.20 117.85 117.61 117.68 116.73 117.38 117.53 116.86 -117.18 115.90 115.86 113.98 113.97 113.31 113.53 114.32 114.59 112.91 113.43 112.40 113.21 111.25 111.16 109.24 110.91 111.25 110.82 111.97 -111.89 111.99 112.51 111.62 112.57 111.15 110.59 111.76 111.05 111.50 109.77 107.50 109.51 107.13 109.08 109.30 108.51 108.09 106.93 107.17 -108.76 108.41 106.04 106.40 105.40 104.32 103.90 104.39 100.79 102.15 102.19 99.17 98.73 97.81 97.34 99.10 95.95 96.71 88.18 89.25 -80.65 75.93 72.01 69.16 63.27 48.05 55.04 36.89 26.86 42.82 37.31 34.38 15.94 16.57 18.89 15.83 17.41 16.18 17.67 17.09 -21.14 7.00 7.00 -122.08 122.08 121.60 121.73 121.35 119.83 117.87 117.74 116.87 116.65 116.88 116.77 116.73 117.32 118.03 118.54 116.80 118.14 116.60 117.86 -116.59 117.24 117.22 114.99 113.78 115.47 115.80 114.46 114.07 113.16 112.17 113.76 112.58 108.75 108.85 108.59 109.46 110.24 111.04 111.38 -111.75 111.79 109.85 112.83 111.60 110.16 111.17 111.84 109.30 109.41 109.26 109.90 108.35 105.26 108.08 108.75 108.21 108.93 107.24 108.30 -108.29 106.98 107.51 108.07 107.50 104.89 104.66 103.40 102.48 104.46 101.98 100.97 99.17 97.48 98.55 94.79 99.77 94.89 93.29 90.91 -85.09 82.24 81.03 81.84 73.56 66.04 63.23 55.27 55.16 58.26 55.14 52.19 46.83 40.71 31.06 35.90 41.56 34.06 33.67 26.39 -30.50 26.65 26.65 -122.23 122.23 119.59 120.56 121.05 120.00 118.69 118.24 115.42 117.12 116.97 116.82 116.04 117.71 117.67 118.32 118.14 118.05 116.50 117.56 -116.79 116.59 115.75 116.28 114.07 115.59 114.24 115.17 115.54 114.19 113.72 112.75 112.33 108.66 108.11 104.50 108.14 106.83 106.85 110.92 -110.34 111.81 111.63 111.59 111.14 112.02 111.50 111.52 110.32 109.84 109.05 108.93 108.62 109.75 107.83 108.23 107.70 107.36 108.37 109.63 -107.36 107.44 107.59 106.84 107.47 105.93 104.38 104.49 103.68 104.33 100.98 103.33 100.92 101.00 98.87 97.56 97.27 101.77 95.67 94.67 -90.03 86.23 86.90 82.38 78.57 66.63 65.01 65.16 70.81 68.74 69.06 64.63 59.32 48.56 43.51 52.48 43.55 51.11 44.28 43.60 -43.83 40.12 40.12 -122.25 122.25 121.57 120.38 118.69 118.21 117.35 113.85 116.33 116.40 117.16 117.70 117.91 117.35 118.28 118.82 118.95 117.22 115.54 116.57 -117.19 116.66 116.22 115.35 115.86 114.22 114.06 115.40 114.48 113.89 112.19 111.22 110.29 111.03 109.43 107.34 107.77 108.95 108.43 108.44 -110.60 109.11 109.68 111.31 111.06 111.90 111.30 108.01 109.10 109.03 107.63 108.05 107.22 107.28 107.56 108.52 108.43 108.65 108.01 107.71 -109.49 108.67 107.47 106.97 106.23 105.95 104.90 104.90 104.75 105.06 103.92 102.59 103.24 100.94 102.01 100.19 99.76 97.77 96.08 95.70 -96.35 94.76 92.46 90.06 82.60 81.01 84.24 88.05 85.65 81.93 82.49 76.03 69.06 67.14 65.54 64.80 60.44 60.90 50.67 44.88 -53.48 48.74 48.74 -123.05 123.05 122.06 121.09 118.15 116.79 117.45 116.79 116.92 116.08 117.72 117.43 118.83 117.93 118.45 118.80 117.72 116.93 113.03 112.69 -116.38 114.86 114.76 114.76 115.84 114.97 114.17 110.56 113.05 113.25 114.61 111.63 114.23 115.51 112.35 101.84 106.18 107.50 112.58 108.47 -107.92 108.39 109.38 111.89 110.76 110.37 109.17 110.33 109.15 108.97 108.60 109.69 108.01 107.41 109.06 108.52 109.39 108.69 109.90 108.89 -109.66 107.98 108.33 106.89 106.95 105.10 104.82 105.65 106.53 104.45 103.24 103.52 101.74 100.76 101.40 100.85 101.55 98.47 98.32 97.83 -95.25 96.57 95.57 93.74 90.56 91.67 90.67 89.71 89.28 88.60 88.52 86.94 86.42 79.77 85.93 74.65 73.22 68.21 59.27 59.93 -62.01 53.17 53.17 -127.77 127.77 123.83 122.45 120.55 120.28 118.54 116.07 116.63 115.09 115.59 116.39 116.45 116.86 117.91 117.57 117.42 117.27 116.93 114.16 -115.42 115.51 116.11 115.01 114.89 112.68 113.89 114.63 114.61 114.73 112.93 111.75 109.70 109.19 108.60 105.18 107.42 109.54 112.13 111.39 -111.00 108.95 110.90 110.88 110.84 110.36 109.87 109.05 108.63 107.32 108.60 108.16 108.26 107.96 108.41 109.28 109.00 108.02 109.44 109.20 -109.92 110.79 106.95 107.49 106.01 105.12 105.96 105.91 104.52 104.47 104.43 104.37 102.52 102.47 102.45 100.28 100.94 100.75 99.46 100.11 -98.74 98.13 96.45 95.80 95.12 94.80 94.22 92.04 90.18 89.45 89.03 88.47 87.31 86.46 85.00 84.06 82.35 79.97 79.24 78.44 -79.91 78.27 78.27 -126.95 126.95 128.36 127.38 122.56 120.03 119.40 118.49 118.65 117.76 117.57 114.14 114.99 116.66 117.24 118.49 119.32 116.81 116.32 115.89 -115.16 117.31 114.97 112.55 114.46 113.76 114.92 113.59 113.45 114.46 113.80 112.93 110.48 110.07 109.03 107.80 104.27 108.17 108.44 110.02 -111.61 110.38 110.02 109.85 111.22 110.29 109.47 109.40 110.30 108.74 107.22 108.43 105.38 104.97 105.66 108.49 107.74 110.15 109.99 106.77 -108.29 108.25 108.00 105.84 105.94 106.75 106.37 105.04 105.13 105.73 103.50 102.93 104.69 102.08 103.13 101.25 100.88 102.00 100.07 99.51 -99.73 98.51 98.45 98.47 96.71 95.42 95.23 93.47 92.11 91.44 91.13 90.61 89.06 88.48 89.75 86.74 86.16 85.19 84.36 84.26 -83.12 81.69 81.69 -124.05 124.05 127.20 128.35 126.16 122.09 118.86 118.34 117.05 116.56 115.58 115.32 114.18 116.81 117.47 116.36 117.63 116.78 115.87 115.15 -115.02 114.78 115.12 114.80 114.07 113.63 113.24 110.39 113.94 113.62 113.60 113.13 112.92 112.87 111.37 109.67 108.21 108.49 107.42 108.80 -110.19 109.25 108.58 109.80 109.53 109.49 108.90 109.57 108.17 107.40 107.54 107.41 106.22 107.27 106.96 104.98 109.24 109.29 108.63 108.81 -107.98 108.61 107.99 106.63 107.33 106.64 105.78 104.89 106.37 105.48 103.89 105.50 103.52 103.44 101.38 104.54 103.47 103.41 102.64 99.17 -101.78 100.79 99.73 98.78 98.53 96.73 96.21 95.20 93.61 92.37 92.44 92.67 91.20 90.53 89.56 88.41 87.96 87.47 86.78 85.69 -84.59 84.46 84.46 -121.07 121.07 124.93 125.50 127.52 126.11 121.79 119.09 117.89 116.93 116.94 115.97 116.34 114.43 115.54 115.72 115.93 117.68 116.44 116.59 -115.63 111.93 116.23 115.02 114.20 113.21 113.13 112.08 111.99 110.29 114.32 113.05 113.74 113.32 110.84 110.13 108.69 109.79 109.76 108.65 -108.61 108.12 109.73 108.15 109.68 109.17 109.71 108.89 108.71 107.50 107.32 106.55 107.43 106.51 105.90 106.61 107.59 100.29 107.85 108.67 -109.07 106.43 106.37 107.83 107.42 107.03 105.69 107.66 105.91 105.13 105.22 104.23 106.40 104.60 103.98 104.20 103.47 102.72 101.92 102.09 -98.31 98.25 98.52 99.16 98.75 98.07 96.86 96.12 94.45 93.56 93.05 93.40 91.99 92.38 91.45 90.08 89.78 88.92 88.37 87.39 -86.17 85.98 85.98 -121.03 121.03 122.02 123.28 124.89 127.18 123.82 118.67 118.51 117.24 116.58 117.07 117.14 117.28 115.97 117.48 116.21 116.35 116.84 116.39 -117.35 115.66 115.40 113.52 114.15 115.20 113.75 112.38 109.47 110.58 112.83 113.05 112.25 110.56 110.43 110.99 108.92 108.85 110.23 109.36 -109.78 108.72 108.13 106.76 109.16 109.84 108.90 108.30 107.30 107.01 107.41 108.26 106.41 105.20 105.45 103.70 106.85 107.91 108.22 108.02 -108.27 107.50 106.36 106.74 106.40 105.95 106.20 106.77 104.85 105.72 105.18 104.74 105.58 105.12 105.02 104.00 102.53 101.77 100.00 101.02 -99.46 100.58 99.82 99.19 98.46 98.41 97.20 96.48 95.48 94.81 94.10 93.30 93.01 92.76 93.11 91.83 91.26 90.58 88.10 88.50 -87.34 87.27 87.27 -120.75 120.75 119.56 122.15 122.77 123.12 124.79 123.51 120.07 116.25 116.80 116.88 117.38 117.86 116.76 116.22 116.43 116.99 116.94 116.71 -117.38 116.15 115.59 115.63 113.21 114.03 114.37 113.82 112.34 111.93 112.23 112.45 110.63 112.41 110.29 112.11 109.73 110.72 109.11 110.20 -109.53 109.25 107.15 109.59 108.21 107.45 108.42 107.64 107.70 106.30 106.20 106.35 104.97 106.46 106.33 103.10 103.98 107.00 104.65 107.58 -107.50 107.66 106.37 106.27 104.76 103.91 100.49 105.24 105.56 105.45 105.26 106.06 103.25 103.73 103.58 103.48 101.91 102.61 101.86 101.26 -100.85 98.18 100.08 99.54 98.88 98.09 96.67 96.37 95.50 95.64 95.68 94.47 93.77 93.90 93.85 91.89 92.82 92.01 90.75 89.60 -88.38 88.34 88.34 -121.03 121.03 118.91 119.18 121.24 122.19 122.35 122.30 121.46 117.95 115.86 117.88 116.97 116.87 117.21 116.47 117.24 116.97 116.79 115.12 -115.46 117.05 115.50 116.42 114.00 112.81 112.94 113.17 114.37 113.86 112.50 111.99 113.08 111.53 114.25 111.26 110.94 110.52 108.91 110.33 -109.21 109.11 109.32 109.73 108.09 107.34 107.53 107.50 106.51 107.33 105.55 104.01 105.65 107.05 108.22 103.52 105.68 105.03 105.93 101.13 -105.54 106.75 105.26 104.83 103.75 105.30 104.86 105.27 105.79 104.46 106.42 105.48 103.96 104.05 104.03 102.53 103.00 101.96 102.18 99.59 -102.27 100.74 100.63 100.12 98.86 98.68 97.55 97.06 95.99 95.97 95.75 94.86 95.16 94.67 94.17 93.54 92.57 92.20 91.27 90.64 -90.60 90.08 90.08 -121.17 121.17 119.84 119.00 121.35 120.71 120.83 120.08 121.07 120.09 115.82 115.76 116.95 117.96 117.48 117.92 116.79 117.10 115.62 116.77 -117.33 115.74 115.00 114.84 114.08 111.60 113.96 113.57 114.52 113.24 114.04 113.46 113.59 113.02 112.53 111.49 111.50 109.48 109.84 109.81 -109.44 109.41 110.35 107.40 108.38 106.63 107.77 106.65 107.99 106.37 105.92 106.19 108.61 108.73 109.78 103.66 106.50 106.69 107.92 105.03 -105.25 105.42 104.32 105.34 105.26 102.92 104.14 105.23 104.01 103.58 105.64 103.77 105.17 103.78 104.84 103.90 103.24 102.21 101.99 101.35 -102.59 101.09 101.51 101.06 101.18 100.41 98.48 97.45 97.21 96.53 96.13 95.28 95.56 95.26 93.82 93.48 93.28 92.50 91.75 91.90 -90.95 89.97 89.97 -125.23 125.23 121.12 118.26 119.63 120.60 120.14 120.71 119.97 119.00 116.15 115.98 118.42 118.43 118.25 117.75 116.18 115.95 117.23 116.41 -117.28 115.17 115.15 114.17 114.41 113.22 113.41 113.91 112.93 114.37 113.75 112.85 112.67 113.46 112.41 112.54 111.25 110.21 111.21 110.04 -110.44 110.74 108.88 108.88 108.14 107.78 106.30 108.58 107.36 106.28 107.27 110.26 109.97 109.34 107.12 109.41 106.43 106.95 102.69 103.49 -104.01 104.03 104.56 105.69 104.23 102.33 105.19 103.99 103.73 105.51 102.90 104.42 105.32 104.12 104.70 105.02 103.53 101.90 102.90 101.90 -101.12 101.88 101.37 101.01 100.82 100.23 100.49 98.80 98.01 97.20 96.23 95.51 95.88 95.93 94.87 94.51 93.34 92.80 92.41 92.51 -90.73 89.95 89.95 -126.78 126.78 123.93 119.51 117.61 120.07 120.84 119.60 119.84 120.48 118.87 118.39 117.85 118.52 117.31 116.53 116.88 116.51 116.39 115.38 -114.57 114.80 114.28 116.45 115.01 113.57 113.34 112.27 113.35 111.53 114.18 112.18 113.05 113.32 113.40 112.68 111.07 107.38 111.28 111.16 -111.77 109.71 110.54 109.35 109.07 107.81 108.30 107.20 107.18 107.41 111.75 110.06 108.89 108.37 109.78 108.87 107.68 107.27 105.29 105.03 -104.57 103.99 105.75 102.71 104.05 105.02 104.16 103.38 104.70 103.77 102.99 105.57 103.91 103.75 103.85 103.75 104.39 102.61 102.99 105.02 -103.47 102.85 102.25 100.79 101.17 100.24 100.61 99.45 99.40 98.54 98.35 97.30 97.39 95.51 94.60 94.22 93.73 93.43 93.51 90.92 -90.66 90.45 90.45 -129.08 129.08 124.37 121.20 119.56 118.42 120.01 120.10 119.76 120.68 119.80 119.35 118.42 117.06 116.59 117.06 116.53 116.63 114.33 114.24 -113.54 114.26 114.71 114.40 113.41 113.61 114.63 114.17 114.96 112.93 113.49 113.30 113.51 112.47 112.63 110.68 110.77 111.15 111.64 112.36 -109.80 111.04 110.00 109.75 107.57 109.69 108.53 108.30 107.82 105.08 109.47 108.67 107.83 109.84 108.21 108.94 108.02 106.31 105.46 105.11 -103.87 105.44 103.28 102.76 106.07 104.95 101.72 105.09 104.36 103.62 104.85 103.43 102.66 102.89 102.52 104.05 102.61 102.70 102.23 102.32 -102.55 102.83 103.02 101.80 102.14 100.73 99.93 100.03 99.29 99.17 97.94 96.88 98.27 97.64 96.50 96.33 95.60 94.46 92.90 92.03 -91.98 91.62 91.62 -129.61 129.61 128.46 122.74 122.48 119.29 119.96 120.34 121.62 120.11 120.12 117.85 118.94 118.62 118.14 117.61 116.76 115.45 115.00 113.97 -115.43 115.15 114.59 114.34 113.71 115.57 114.71 114.82 113.91 112.64 113.75 113.43 113.02 113.03 112.17 112.23 110.93 111.40 112.11 111.07 -110.55 110.89 110.00 109.34 109.60 109.69 109.47 108.16 109.16 109.82 107.14 107.70 106.93 109.09 108.18 107.81 107.36 105.40 104.46 105.12 -105.27 103.67 103.32 105.03 107.47 103.29 105.43 104.77 102.63 101.81 103.89 103.20 103.20 103.11 102.37 102.13 102.24 102.49 101.22 102.53 -101.81 102.44 102.61 102.68 101.82 101.40 100.44 99.96 99.09 98.72 97.93 96.82 98.00 97.39 97.86 96.84 95.97 94.61 94.50 93.89 -93.57 92.74 92.74 -129.31 129.31 127.96 125.52 125.59 124.53 122.00 120.32 120.74 118.13 118.08 120.05 118.98 118.14 118.69 117.33 115.57 116.63 116.38 116.03 -113.80 115.85 114.32 114.11 115.39 114.37 114.42 113.92 113.80 111.27 114.44 112.42 113.55 112.27 112.18 111.73 110.63 110.32 111.13 111.74 -109.47 110.61 109.76 110.43 109.85 110.02 108.27 109.93 109.87 107.78 109.49 108.18 109.10 107.54 106.54 107.95 106.30 106.08 106.61 105.52 -104.36 102.99 105.61 106.36 103.48 104.55 105.95 104.42 103.20 104.46 103.09 101.83 101.95 100.53 103.66 103.01 102.33 100.01 101.87 101.90 -101.02 101.62 101.06 101.33 101.10 100.99 100.53 100.94 99.71 99.61 98.59 97.36 97.17 95.97 96.35 96.48 96.43 95.41 95.22 94.58 -94.55 94.17 94.17 -125.69 125.69 125.38 126.77 127.14 123.45 122.83 119.90 119.61 118.52 117.90 118.48 119.64 117.59 117.27 117.48 115.81 117.20 115.01 115.32 -115.79 114.03 115.11 115.11 115.53 113.94 111.77 113.99 113.40 114.14 113.64 112.88 111.43 112.00 113.19 112.67 111.84 111.67 112.27 110.28 -110.27 108.99 110.09 110.61 110.80 108.52 110.87 110.28 110.57 109.61 108.22 107.07 108.02 107.98 107.76 107.43 106.02 106.08 106.78 103.33 -104.15 104.31 104.44 101.95 104.50 105.08 105.58 103.11 105.57 104.34 103.36 103.24 103.04 102.40 102.44 101.19 101.88 100.96 102.01 100.87 -101.35 101.51 100.68 100.52 100.01 99.52 99.37 99.12 99.52 100.38 98.81 98.45 97.65 97.31 96.09 92.77 94.86 94.83 95.01 94.84 -94.41 93.91 93.91 -123.76 123.76 125.05 123.70 122.06 122.16 122.31 120.09 121.19 119.10 116.67 117.57 116.45 117.10 117.04 116.29 117.29 115.87 116.26 115.15 -115.30 115.48 114.74 115.83 114.31 114.21 114.42 114.02 114.22 113.52 112.70 112.72 112.54 112.45 112.53 111.88 110.99 110.88 110.22 110.95 -110.14 109.33 109.86 110.15 108.88 110.83 111.65 110.26 109.46 108.26 107.79 108.43 107.90 107.81 108.13 106.97 107.42 106.88 104.32 104.37 -104.74 105.08 102.81 102.75 106.17 106.17 103.10 103.33 104.94 103.26 103.46 103.45 103.18 102.25 102.72 101.79 101.64 100.37 101.19 100.30 -100.62 100.41 100.08 99.94 99.99 98.57 98.52 98.20 97.43 97.43 97.48 98.03 98.53 97.75 96.28 96.28 95.09 95.30 94.56 94.58 -93.30 93.00 93.00 -124.79 124.79 123.55 122.12 121.03 119.62 121.28 122.18 120.87 120.79 118.98 116.92 116.06 117.25 117.97 115.87 114.19 115.83 113.20 114.76 -115.34 115.41 115.83 113.76 114.14 112.94 115.38 114.00 114.03 111.74 112.17 112.77 112.83 112.08 112.04 111.32 112.33 109.90 110.83 109.83 -109.94 110.69 110.62 109.32 109.80 110.77 110.85 109.00 109.29 108.00 108.86 107.87 107.63 108.52 106.93 108.02 107.34 107.41 105.97 105.33 -105.87 105.31 102.55 102.79 106.02 104.64 104.70 105.70 103.91 103.85 104.81 104.89 104.18 103.80 102.70 101.65 101.57 100.99 100.86 101.17 -102.11 101.20 100.18 100.22 99.83 99.37 98.71 98.31 97.68 97.78 97.17 97.09 96.26 95.81 97.13 96.30 97.28 95.95 95.89 95.29 -94.40 93.58 93.58 -123.85 123.85 122.39 122.94 122.22 122.18 119.82 120.75 121.12 119.70 120.15 118.34 116.54 117.05 114.90 115.76 117.09 115.09 116.32 116.20 -116.03 114.31 113.91 114.22 114.28 115.98 114.11 113.36 112.54 113.42 113.09 112.53 112.76 111.60 112.04 112.12 110.54 108.62 109.31 107.60 -110.33 110.60 109.34 109.25 112.77 110.75 110.43 110.18 108.29 109.57 107.81 107.15 108.00 106.44 107.55 107.57 107.42 106.02 106.49 106.56 -104.76 103.98 103.99 103.74 103.07 101.11 105.34 105.50 104.21 103.54 104.18 103.58 103.30 102.75 102.10 102.12 101.70 101.92 101.64 101.28 -101.93 100.29 100.27 99.95 99.44 99.33 99.29 98.56 97.74 97.46 97.16 97.39 97.14 96.85 95.94 96.62 95.68 96.62 95.76 95.97 -95.04 94.70 94.70 -121.64 121.64 122.18 122.67 121.96 121.16 121.29 120.28 119.22 119.62 119.09 120.22 116.78 114.74 116.01 115.36 114.78 116.27 116.54 117.27 -113.72 114.62 113.93 114.11 114.17 114.01 114.56 112.43 112.71 113.47 112.45 112.54 112.48 112.12 112.35 110.95 109.67 110.41 110.18 111.23 -109.81 110.81 109.93 112.14 110.41 109.54 109.13 107.91 110.39 108.83 108.23 108.71 106.94 107.09 107.74 107.51 106.16 106.46 107.15 104.90 -104.60 104.72 105.10 104.54 101.83 100.29 101.66 105.75 104.15 105.25 104.53 104.34 103.15 103.25 102.68 102.95 101.69 102.99 101.75 100.88 -102.03 101.14 100.38 100.00 99.49 99.10 98.79 98.15 97.88 97.68 96.98 97.30 96.97 96.47 96.83 96.07 96.41 95.54 95.57 95.30 -94.67 95.49 95.49 -122.01 122.01 121.78 120.53 121.25 121.82 119.18 119.46 119.48 120.08 119.74 118.02 116.42 112.58 114.42 113.95 116.40 116.75 117.22 115.13 -115.76 114.68 114.56 114.81 113.83 113.83 112.69 113.25 113.03 112.99 113.02 111.33 112.04 112.19 110.86 111.57 110.14 109.31 111.99 106.94 -110.15 109.53 111.70 111.20 109.39 109.86 109.64 109.96 109.01 108.69 108.19 107.45 107.97 107.35 107.45 105.99 105.93 106.89 108.07 105.88 -105.10 105.69 104.51 102.57 102.18 103.39 101.81 100.90 104.33 104.32 104.68 102.54 101.99 102.79 103.18 101.94 101.59 101.57 101.81 101.46 -102.20 101.24 101.17 101.07 99.36 99.26 99.03 98.35 97.78 97.69 97.30 97.35 96.86 96.89 96.16 96.81 95.82 95.79 95.92 94.23 -95.31 95.57 95.57 -122.38 122.38 120.63 120.81 119.86 117.23 119.76 117.53 119.45 119.22 116.91 118.04 117.37 116.38 115.85 115.85 117.10 114.35 116.03 115.92 -114.36 115.16 114.47 114.02 113.21 112.61 113.28 113.00 113.07 113.05 112.14 112.20 112.10 110.88 111.99 110.50 110.55 112.41 110.37 111.05 -109.24 111.55 111.95 110.65 109.24 109.75 110.48 109.21 107.71 106.47 107.83 107.25 107.97 107.79 105.30 106.32 106.65 107.36 106.68 105.92 -105.91 106.57 104.41 103.09 103.18 103.42 101.22 100.90 101.87 106.72 105.76 102.93 102.60 101.61 100.04 101.60 101.87 101.83 102.03 102.39 -101.86 101.27 100.03 100.29 99.65 99.27 99.12 98.71 98.58 97.84 97.58 97.40 97.50 96.95 97.11 96.34 96.52 96.86 95.91 95.73 -95.20 95.37 95.37 -121.63 121.63 121.23 119.84 118.72 119.39 119.01 117.64 117.89 117.61 119.61 117.67 117.45 115.60 116.08 116.26 115.30 115.50 115.63 115.36 -115.74 115.58 114.71 113.03 113.12 113.31 112.92 113.10 112.53 111.96 111.68 112.41 110.87 112.05 108.20 111.19 112.20 110.49 110.74 109.35 -111.30 110.21 110.13 108.73 110.27 109.73 110.00 108.39 108.44 107.11 108.20 107.92 107.78 105.79 105.34 106.27 107.50 106.22 104.89 106.09 -106.71 105.91 103.83 103.86 104.07 104.99 103.12 101.41 98.42 102.31 108.04 108.15 104.59 104.55 101.80 101.89 100.93 102.53 101.27 102.96 -101.99 102.06 100.97 99.74 100.06 100.89 100.65 99.10 99.10 96.74 97.52 98.23 97.94 97.53 96.83 96.92 97.00 95.96 95.52 95.79 -95.88 94.88 94.88 -120.37 120.37 119.33 120.21 119.24 117.51 118.07 117.02 118.65 117.48 117.28 117.82 117.16 118.47 117.50 114.31 115.56 114.86 114.87 117.17 -113.46 113.69 113.34 112.41 113.33 113.07 112.96 113.37 111.26 111.91 112.68 110.28 110.78 110.38 110.44 112.02 110.81 111.05 107.43 110.98 -109.89 110.23 110.00 109.70 108.84 110.25 109.43 107.53 108.52 108.36 106.58 107.28 106.98 106.61 106.59 107.40 105.61 106.24 106.28 107.44 -106.18 104.36 103.66 105.26 104.23 102.90 102.50 102.51 102.99 99.50 99.95 104.78 114.49 105.52 102.26 101.95 100.84 100.85 100.54 102.03 -101.26 101.56 101.44 100.75 99.50 98.87 99.59 91.00 100.42 98.68 97.26 97.72 96.66 96.31 96.75 96.59 96.55 95.70 95.42 96.02 -96.71 98.20 98.20 -119.77 119.77 119.45 117.20 119.03 117.80 114.72 117.42 118.13 117.44 116.55 117.42 117.99 117.51 111.93 115.73 113.59 114.52 116.49 114.78 -114.86 112.81 113.52 113.71 113.67 113.15 113.37 111.70 112.45 113.05 111.06 111.38 110.69 110.35 111.86 109.90 110.67 109.66 110.80 110.22 -107.80 107.85 109.33 107.80 109.25 108.63 108.48 109.64 106.88 106.99 108.28 106.90 107.14 107.31 106.78 105.86 104.26 106.08 106.70 106.79 -104.81 103.27 103.71 104.22 104.72 103.55 101.79 102.64 102.68 102.72 101.49 101.12 99.67 111.22 125.45 112.68 102.20 102.99 100.08 100.03 -99.31 100.04 100.70 99.61 96.33 99.69 99.01 98.92 99.63 99.88 99.89 95.33 95.37 95.34 95.36 95.87 98.70 98.90 98.91 98.45 -97.64 97.98 97.98 -119.51 119.51 119.09 118.62 117.20 117.06 117.76 117.95 116.97 117.25 115.46 117.90 115.91 113.58 115.14 114.07 114.90 112.79 113.94 114.17 -113.04 112.05 114.06 110.96 113.35 114.27 111.81 112.69 112.84 111.45 111.19 111.13 110.52 111.85 111.48 111.01 109.52 109.38 108.48 110.89 -109.37 109.67 108.88 107.35 109.25 107.45 108.06 107.82 105.05 105.71 106.78 106.22 107.17 104.56 106.23 105.07 105.52 105.84 106.48 105.25 -104.75 103.52 104.33 104.81 103.06 102.87 101.80 103.69 101.17 101.18 101.80 102.03 98.25 98.80 96.71 104.13 121.85 120.43 104.27 101.42 -99.42 98.48 99.13 98.88 99.29 98.32 98.54 99.57 98.37 98.18 96.54 95.32 95.33 95.33 96.70 96.17 96.18 98.88 98.90 98.94 -98.81 98.14 98.14 -119.37 119.37 118.68 117.23 118.30 117.25 116.18 116.23 117.04 117.19 117.25 117.43 117.30 116.29 115.48 114.86 113.89 112.31 113.95 112.95 -114.03 114.97 114.19 113.36 113.48 112.63 111.73 112.88 109.53 112.33 111.44 110.56 111.90 111.26 111.21 110.35 110.09 111.22 110.54 109.66 -109.08 109.06 109.12 108.79 107.29 107.93 108.12 107.12 107.17 106.38 106.30 106.44 106.77 107.39 106.04 105.87 106.35 107.10 106.51 104.75 -104.38 104.84 104.29 104.39 103.80 102.06 102.59 102.44 102.11 100.97 101.47 101.34 100.70 99.76 98.23 96.23 97.48 99.82 106.51 112.80 -108.56 102.92 99.21 95.72 98.09 97.97 97.23 98.40 98.31 97.04 97.15 97.21 97.19 97.12 97.14 96.15 96.16 99.44 98.89 98.77 -98.46 97.39 97.39 -118.78 118.78 117.84 118.03 117.14 115.91 116.45 116.73 116.28 116.61 114.07 117.48 115.34 115.23 115.09 114.49 114.04 112.82 111.52 113.32 -113.85 114.38 113.47 112.95 111.54 112.58 112.72 111.38 112.31 111.53 111.78 109.89 111.75 111.70 111.07 109.56 111.93 109.27 110.03 109.47 -108.23 108.61 109.31 108.54 107.50 106.89 107.17 107.69 107.26 107.82 107.61 106.77 107.09 101.35 105.03 105.23 104.56 106.81 105.41 105.13 -104.31 103.85 106.04 103.79 103.20 103.55 103.78 100.46 100.67 101.84 102.34 100.15 99.02 99.64 99.14 99.52 98.21 96.38 97.37 96.93 -96.15 100.34 101.51 96.15 98.07 97.63 97.07 97.29 98.25 97.65 97.91 97.03 97.22 97.05 97.11 96.15 96.16 99.68 99.61 98.61 -98.44 97.36 97.36 -119.06 119.06 119.81 116.85 116.87 117.05 117.21 116.90 116.17 116.03 120.10 114.49 113.75 114.95 114.65 113.78 113.62 112.28 111.73 113.20 -112.74 112.68 113.21 111.01 113.06 113.15 111.10 113.17 111.63 110.62 108.89 112.12 111.04 112.17 110.25 111.80 110.72 111.03 109.28 109.54 -109.25 106.61 109.26 107.24 107.05 107.19 105.84 105.46 106.53 106.85 106.41 107.19 105.94 105.58 105.07 105.70 104.06 105.13 104.72 103.88 -104.96 104.33 104.29 103.63 102.84 103.00 104.10 104.53 99.69 100.21 100.26 100.68 99.30 98.27 98.16 98.38 98.08 95.79 96.96 97.51 -96.84 95.97 95.22 96.17 96.37 97.51 96.11 95.77 98.10 97.41 97.51 96.99 97.33 97.13 96.10 96.35 96.56 99.16 98.30 98.54 -96.56 97.24 97.24 -118.52 118.52 117.76 115.56 116.96 117.24 117.22 116.21 116.80 115.97 114.65 114.11 114.21 113.03 114.30 113.01 112.18 112.94 113.11 112.30 -111.84 111.56 111.12 112.59 112.44 109.89 113.46 112.00 111.85 110.26 112.26 111.56 111.76 110.37 110.98 110.56 111.75 110.17 109.13 107.29 -108.23 106.21 108.69 108.70 107.23 108.64 107.37 103.92 106.16 106.69 106.79 107.27 105.36 105.73 104.99 104.80 105.25 104.13 104.22 104.61 -103.68 105.09 105.35 104.24 104.22 104.19 102.51 102.57 103.26 102.49 101.63 100.33 97.44 98.61 97.94 97.69 97.91 97.39 97.46 98.10 -97.53 96.97 96.28 96.03 95.99 95.12 95.71 95.27 96.19 96.01 97.46 97.76 97.08 97.67 96.50 96.82 97.32 96.38 97.99 95.43 -95.96 95.03 95.03 -117.81 117.81 117.62 118.86 117.56 117.21 116.90 117.42 116.55 116.98 115.45 114.27 113.84 113.95 112.62 112.19 113.09 113.20 112.41 110.78 -110.74 109.41 110.72 112.45 111.59 112.81 111.33 111.83 110.67 112.16 110.79 110.70 109.40 110.48 111.46 111.65 110.93 109.63 109.56 109.47 -109.22 109.48 108.67 108.69 109.04 107.81 108.04 107.09 106.70 105.86 105.86 106.14 106.51 106.12 105.85 104.55 105.77 105.49 105.15 105.30 -105.04 105.14 104.67 103.35 104.62 104.47 103.50 102.91 102.43 102.29 101.94 101.66 99.40 99.22 98.91 98.48 97.80 97.65 97.77 97.39 -97.03 97.02 96.37 96.44 96.51 95.11 95.76 95.43 95.84 95.16 95.93 96.64 96.87 96.96 97.37 97.96 96.32 97.38 95.96 97.41 -95.55 94.74 94.74 -117.81 117.81 117.62 118.86 117.56 117.21 116.90 117.42 116.55 116.98 115.45 114.27 113.84 113.95 112.62 112.19 113.09 113.20 112.41 110.78 -110.74 109.41 110.72 112.45 111.59 112.81 111.33 111.83 110.67 112.16 110.79 110.70 109.40 110.48 111.46 111.65 110.93 109.63 109.56 109.47 -109.22 109.48 108.67 108.69 109.04 107.81 108.04 107.09 106.70 105.86 105.86 106.14 106.51 106.12 105.85 104.55 105.77 105.49 105.15 105.30 -105.04 105.14 104.67 103.35 104.62 104.47 103.50 102.91 102.43 102.29 101.94 101.66 99.40 99.22 98.91 98.48 97.80 97.65 97.77 97.39 -97.03 97.02 96.37 96.44 96.51 95.11 95.76 95.43 95.84 95.16 95.93 96.64 96.87 96.96 97.37 97.96 96.32 97.38 95.96 97.41 -95.55 94.74 94.74 +146.38 146.38 148.51 143.80 148.11 144.13 147.17 146.53 146.09 143.07 143.81 144.73 146.63 146.16 146.55 144.34 141.64 141.53 139.39 136.69 +137.43 136.69 135.68 135.18 134.48 136.63 137.75 136.70 137.07 136.78 136.00 135.63 135.23 134.60 134.07 132.86 133.31 132.32 131.50 131.82 +131.76 130.68 130.91 130.70 129.23 128.79 129.27 127.42 127.71 128.14 128.56 128.98 128.60 127.60 127.81 127.24 126.21 124.46 125.15 124.46 +123.42 122.92 120.16 118.50 118.34 116.78 116.85 116.80 115.35 114.74 115.19 114.26 114.46 113.97 113.48 112.33 112.95 110.62 111.51 111.90 +111.26 110.22 108.90 108.23 107.87 106.88 106.55 105.54 104.44 104.30 103.99 103.14 102.07 101.82 99.36 98.70 97.92 97.14 96.03 95.52 +94.54 93.13 93.13 +146.38 146.38 148.51 143.80 148.11 144.13 147.17 146.53 146.09 143.07 143.81 144.73 146.63 146.16 146.55 144.34 141.64 141.53 139.39 136.69 +137.43 136.69 135.68 135.18 134.48 136.63 137.75 136.70 137.07 136.78 136.00 135.63 135.23 134.60 134.07 132.86 133.31 132.32 131.50 131.82 +131.76 130.68 130.91 130.70 129.23 128.79 129.27 127.42 127.71 128.14 128.56 128.98 128.60 127.60 127.81 127.24 126.21 124.46 125.15 124.46 +123.42 122.92 120.16 118.50 118.34 116.78 116.85 116.80 115.35 114.74 115.19 114.26 114.46 113.97 113.48 112.33 112.95 110.62 111.51 111.90 +111.26 110.22 108.90 108.23 107.87 106.88 106.55 105.54 104.44 104.30 103.99 103.14 102.07 101.82 99.36 98.70 97.92 97.14 96.03 95.52 +94.54 93.13 93.13 +153.46 153.46 148.42 141.56 143.96 146.03 144.23 145.78 146.07 146.59 145.54 145.06 145.72 144.27 142.90 140.15 142.78 140.34 139.53 138.03 +136.61 136.89 135.77 134.84 135.12 136.60 137.07 136.58 135.81 135.96 135.79 135.10 134.83 134.12 132.93 132.84 132.41 131.74 131.48 131.87 +131.20 130.97 130.21 130.26 129.85 128.70 127.55 129.61 128.19 128.49 128.60 128.71 128.64 128.29 127.59 125.91 125.31 125.05 124.90 123.65 +122.76 121.61 120.65 117.78 116.51 117.70 118.41 117.99 117.35 116.93 116.28 115.31 114.47 113.93 112.61 112.20 112.09 112.12 111.89 110.88 +110.86 110.23 108.88 107.87 107.31 106.01 106.09 104.21 103.49 103.77 103.24 102.32 100.83 100.70 98.83 97.62 96.87 96.08 94.58 94.30 +91.32 91.12 91.12 +152.58 152.58 148.10 144.65 144.97 142.53 144.91 142.93 145.51 147.56 143.96 142.81 143.85 143.21 142.13 140.89 140.57 139.26 139.94 138.74 +137.49 136.33 135.36 136.22 135.39 136.34 136.59 136.25 135.69 135.17 134.39 134.82 134.00 133.71 132.17 131.92 132.68 131.44 132.35 131.87 +131.07 130.95 130.87 129.80 129.93 129.35 129.26 127.70 128.41 127.15 128.61 128.17 127.08 127.14 126.42 125.32 125.07 124.80 124.23 122.92 +121.76 121.80 121.34 119.90 118.50 118.23 118.06 117.50 117.70 117.56 115.92 115.11 115.66 114.19 113.43 112.86 111.71 111.38 110.89 109.97 +109.40 108.21 107.80 106.19 105.53 104.44 104.19 104.74 102.17 102.20 101.57 100.07 99.30 98.75 97.12 95.91 95.36 94.06 93.18 90.91 +89.73 88.07 88.07 +152.97 152.97 149.53 146.70 139.69 143.00 145.29 139.82 143.01 144.38 139.94 144.69 144.06 143.88 142.30 141.83 141.01 139.74 139.28 138.24 +136.85 136.85 135.54 134.63 135.01 136.28 135.80 135.59 134.13 134.41 134.33 132.80 134.00 133.26 131.89 132.10 131.88 132.04 131.93 131.87 +131.56 131.26 130.40 129.84 130.03 129.69 129.27 129.15 129.62 127.80 126.93 126.34 126.57 125.65 125.85 125.43 125.26 124.66 123.86 122.57 +122.38 121.56 120.96 120.40 118.53 118.26 118.16 118.25 117.29 115.49 114.27 113.55 113.70 113.09 112.63 111.22 110.90 109.55 109.60 108.39 +107.29 101.76 103.58 104.62 103.69 102.36 101.94 102.54 100.44 99.37 98.92 97.90 97.03 96.03 94.96 94.68 93.22 91.87 91.15 88.69 +86.85 84.65 84.65 +153.38 153.38 150.35 147.12 140.51 141.72 141.95 139.79 136.88 140.26 141.50 144.34 144.41 143.12 141.37 140.76 140.33 139.12 138.23 137.06 +136.53 136.15 134.98 134.72 135.27 135.79 134.65 133.96 134.50 133.87 134.16 133.50 133.53 133.86 132.76 132.32 132.25 132.89 132.11 131.70 +131.45 131.82 130.46 130.39 129.34 129.22 129.44 128.70 128.34 127.35 126.31 126.33 125.65 125.93 125.81 125.25 125.05 124.77 123.60 122.01 +121.85 120.88 120.40 120.00 118.18 117.57 117.58 116.81 115.80 113.66 112.56 110.20 110.55 110.19 109.11 108.96 108.94 107.58 106.18 105.69 +100.76 95.41 100.46 101.55 100.43 99.50 97.82 97.20 94.29 93.70 94.49 93.44 92.92 92.84 91.88 91.70 91.17 90.56 87.60 85.45 +83.78 81.93 81.93 +153.15 153.15 152.63 144.81 144.62 143.50 145.46 142.42 136.35 140.90 141.10 143.91 143.73 141.23 141.47 140.34 141.76 137.31 137.44 136.01 +135.31 135.53 135.33 134.36 134.85 134.93 134.51 134.08 134.07 134.76 133.93 133.84 133.81 133.48 132.91 132.42 131.89 132.15 132.40 131.90 +131.50 131.18 130.70 129.70 129.79 129.63 128.69 127.85 127.35 125.97 124.94 124.02 124.47 124.62 123.60 124.97 123.71 122.98 122.74 121.58 +121.48 120.37 119.29 119.45 118.16 117.59 116.74 114.97 113.79 111.91 108.30 108.45 108.19 107.02 105.33 105.56 104.94 104.32 97.03 95.57 +96.41 92.68 95.52 96.28 95.47 95.23 92.49 88.94 88.22 81.50 79.43 82.35 86.93 86.89 88.38 87.93 87.37 75.53 69.71 74.22 +77.37 76.47 76.47 +152.24 152.24 150.77 146.73 146.32 144.94 143.74 138.57 134.72 136.58 138.25 141.86 142.33 141.64 139.25 139.37 138.41 136.89 136.20 136.33 +135.46 135.69 134.52 135.50 134.83 133.76 133.80 133.73 133.82 133.87 133.83 133.85 133.78 132.75 132.34 132.54 131.34 130.92 132.22 131.91 +130.00 129.36 128.37 128.93 127.82 128.51 127.83 126.52 126.80 125.95 125.25 125.13 124.82 124.56 124.63 124.59 123.65 122.98 122.38 121.31 +120.59 119.93 119.38 118.49 116.76 115.54 114.69 113.48 111.76 106.17 103.07 103.20 104.09 101.04 103.75 103.46 102.68 100.99 94.83 87.19 +92.50 95.68 95.22 87.63 88.38 91.72 86.48 87.82 83.65 83.46 80.01 80.32 84.60 84.40 84.32 81.91 76.77 66.47 59.95 54.65 +60.88 56.93 56.93 +152.27 152.27 151.16 149.53 146.08 144.67 141.62 135.08 132.85 136.56 141.83 142.28 143.42 139.93 137.99 137.73 137.54 135.88 136.23 133.90 +135.24 134.63 134.71 134.08 133.19 133.86 132.72 133.75 133.58 132.99 132.56 133.13 132.86 132.62 132.07 132.02 131.06 131.73 131.45 130.58 +129.10 128.19 127.91 128.26 127.73 126.89 127.15 126.61 126.21 125.11 125.60 125.26 125.26 123.93 122.94 122.83 122.27 121.89 121.65 120.94 +119.52 117.79 117.40 116.05 115.11 114.17 112.80 109.14 106.95 105.90 102.03 100.90 97.52 99.13 100.96 101.29 99.91 98.63 96.99 94.61 +95.30 94.08 92.63 87.66 86.00 89.41 86.92 86.10 83.50 85.07 83.84 84.50 82.69 82.08 76.26 68.74 55.32 48.97 48.28 44.00 +39.35 45.29 45.29 +152.59 152.59 151.32 148.51 145.83 144.75 141.18 136.44 131.58 134.82 141.38 141.35 139.46 139.57 137.99 137.31 136.39 136.90 136.74 135.59 +134.97 134.09 134.45 133.66 133.14 132.86 132.69 132.44 131.83 131.90 131.66 131.63 131.95 131.99 132.18 131.82 131.11 130.83 130.20 130.67 +129.66 129.47 128.38 127.68 127.02 126.40 126.21 126.40 125.51 125.53 124.62 124.71 124.25 122.83 122.11 122.16 121.56 120.90 119.84 118.63 +117.54 116.32 115.82 114.24 112.81 110.18 108.35 105.49 103.22 97.45 94.93 97.10 98.09 98.33 97.58 97.37 96.22 95.70 92.71 91.46 +91.06 91.95 85.25 83.62 86.59 87.37 84.46 83.66 84.07 82.67 81.03 79.81 77.40 75.37 55.80 44.84 42.04 40.61 33.52 33.97 +33.61 33.22 33.22 +152.55 152.55 149.86 148.55 146.18 143.66 136.03 138.36 134.22 131.46 139.70 140.66 139.26 138.22 137.41 137.22 137.66 137.44 137.15 136.43 +135.98 134.34 133.51 132.81 132.98 132.69 132.45 133.16 132.32 132.02 131.23 131.54 131.18 131.86 132.05 131.28 130.83 130.93 129.63 129.48 +129.13 128.88 128.13 127.82 125.98 126.00 125.73 125.80 125.18 124.55 124.12 123.58 122.68 121.34 119.51 118.50 117.97 118.73 117.81 116.58 +113.32 113.17 111.93 110.69 109.81 107.57 105.73 102.70 101.18 97.59 94.81 88.93 89.05 93.04 93.51 92.57 87.39 80.03 84.09 83.92 +84.04 87.49 86.41 83.83 85.19 82.94 82.32 81.45 81.65 80.34 76.86 71.61 68.52 66.23 32.89 24.19 19.68 14.30 12.18 23.42 +26.95 27.21 27.21 +149.45 149.45 148.23 146.82 144.86 142.58 139.64 139.98 130.48 131.96 138.74 139.62 138.09 136.94 136.99 136.83 137.80 137.68 136.37 135.06 +133.79 134.06 133.51 130.84 132.32 132.30 132.85 132.80 131.87 131.62 131.85 131.84 131.20 131.57 131.78 130.96 129.68 129.65 129.77 129.04 +128.67 128.08 127.42 127.60 126.53 125.96 125.83 124.80 124.93 124.45 123.01 121.68 117.66 118.16 117.29 114.35 115.41 115.67 113.07 113.17 +110.40 107.98 104.56 105.00 104.42 103.77 102.55 101.29 100.05 98.07 92.78 90.17 87.93 86.73 85.25 87.42 86.60 78.30 79.53 80.65 +76.04 77.06 79.76 81.07 79.78 81.77 80.30 81.07 79.06 75.59 69.54 56.09 39.23 22.68 7.15 18.85 23.62 7.00 8.62 12.35 +21.92 17.79 17.79 +149.02 149.02 147.33 148.52 144.68 142.63 140.27 136.26 132.13 133.78 137.98 138.96 137.69 137.20 136.55 137.11 137.05 136.56 135.87 134.70 +133.68 132.93 132.52 132.84 132.59 132.78 132.81 132.38 132.02 131.14 131.25 131.74 131.25 130.89 130.58 130.05 129.19 128.90 128.99 128.48 +127.17 126.94 126.11 126.31 126.78 125.98 125.18 124.20 123.62 122.12 120.97 119.86 117.79 114.45 113.34 111.38 110.69 108.00 109.64 109.04 +106.53 104.49 100.44 99.73 100.34 98.39 98.45 97.97 98.08 96.45 94.31 91.89 90.98 91.53 90.49 88.88 87.12 86.94 84.85 83.21 +81.08 75.81 75.26 75.51 76.55 77.60 76.96 70.47 73.13 71.44 62.28 27.08 7.00 7.00 7.00 7.00 11.13 -10.00 -10.00 8.21 +10.43 10.12 10.12 +148.83 148.83 148.36 148.54 145.56 142.17 137.93 137.84 136.37 132.38 138.49 138.40 137.12 136.10 136.04 136.91 137.08 136.26 136.35 133.73 +133.55 133.55 132.36 131.75 132.25 132.81 131.69 131.87 131.38 131.83 131.48 131.32 131.67 130.89 129.64 129.30 128.27 128.03 128.55 128.00 +127.03 126.95 125.89 126.00 126.01 124.71 124.07 123.05 121.64 120.37 119.35 118.63 116.68 114.29 109.25 106.63 106.70 105.04 104.42 104.05 +101.78 96.82 98.32 91.79 95.11 94.55 95.32 89.01 92.01 89.73 93.28 92.70 91.64 89.78 89.22 88.29 87.42 86.03 80.29 78.23 +81.69 77.82 76.63 74.65 71.41 71.00 75.75 67.79 58.98 65.46 51.07 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +148.37 148.37 146.20 147.63 145.13 142.68 137.44 137.82 135.26 134.47 137.73 138.25 137.20 136.56 136.52 137.40 136.45 135.20 135.19 134.27 +133.36 132.80 132.75 132.78 133.60 133.18 131.71 130.94 131.69 131.01 131.75 131.38 130.50 130.01 129.90 129.15 128.62 127.92 128.23 127.63 +126.98 126.56 126.01 125.45 125.05 122.33 119.74 119.75 119.09 112.93 116.09 115.68 112.15 109.97 107.25 103.60 101.78 101.37 99.56 99.88 +98.54 98.34 95.30 93.65 91.15 87.12 84.40 86.60 82.26 87.54 88.50 88.20 87.70 87.47 86.39 85.48 83.91 82.20 80.91 82.19 +79.40 79.42 77.82 75.78 73.92 71.57 67.08 68.73 62.93 56.41 40.67 22.16 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +147.31 147.31 145.78 145.57 142.13 141.08 138.09 136.63 134.76 137.79 137.93 137.73 136.49 136.32 136.62 136.97 136.41 135.21 134.42 132.91 +132.69 132.83 132.57 131.96 133.06 132.41 131.83 131.74 131.31 131.08 131.39 130.35 129.18 129.90 128.63 129.47 128.17 127.46 126.93 127.18 +126.90 126.73 125.97 125.05 124.43 119.54 110.07 112.85 111.81 111.60 110.95 107.16 106.73 100.48 100.45 98.40 94.47 95.59 94.60 93.14 +94.87 92.89 92.43 90.08 88.46 85.86 85.79 85.08 81.99 81.41 82.93 83.18 84.64 81.02 82.86 75.84 80.38 78.77 79.95 79.72 +78.77 78.99 78.20 76.17 74.45 72.92 67.09 63.56 58.66 51.00 39.21 25.67 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +146.77 146.77 144.42 143.53 140.81 140.33 136.73 136.70 136.29 137.89 137.87 137.41 136.38 135.85 135.34 135.32 134.85 134.48 133.57 132.57 +132.66 132.53 132.77 131.98 132.40 131.84 131.49 131.70 131.84 131.14 131.37 129.81 128.51 128.93 128.76 127.97 127.47 126.64 126.45 126.15 +126.14 125.63 125.24 124.61 123.75 120.80 116.05 107.43 106.24 107.00 104.94 94.77 74.56 90.07 92.72 90.59 86.43 89.26 89.47 89.34 +89.79 87.16 87.28 83.77 77.04 70.92 73.56 73.31 77.71 64.83 74.60 74.25 75.33 77.13 78.76 78.78 78.07 73.81 77.91 77.47 +78.06 77.62 77.13 75.69 73.58 70.82 65.52 59.36 54.79 50.01 37.82 25.70 14.23 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +145.59 145.59 145.42 143.10 141.50 140.25 140.26 139.41 136.92 137.37 137.20 137.26 136.85 135.77 133.99 134.40 133.37 133.41 133.64 132.37 +132.88 132.86 132.28 131.87 131.44 131.07 131.80 130.16 131.34 131.02 130.70 129.91 129.26 129.10 128.42 127.88 127.12 126.80 126.27 126.49 +125.26 125.22 124.91 124.10 118.74 116.62 109.88 105.64 96.63 92.91 93.89 84.53 66.78 81.48 84.44 80.95 82.25 83.08 84.27 84.31 +85.80 81.33 82.45 81.15 81.05 79.65 66.98 67.62 63.31 63.09 65.29 68.17 69.89 72.53 66.34 74.54 74.25 76.65 75.82 76.78 +76.19 76.50 75.75 74.37 72.14 68.15 63.78 59.08 52.91 47.53 37.80 24.54 12.96 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +144.88 144.88 144.67 140.64 142.10 142.04 139.45 138.95 137.65 136.58 137.76 134.59 135.04 134.90 135.40 134.74 133.19 131.66 131.33 131.95 +132.15 132.39 131.71 131.14 131.91 131.54 131.37 130.87 130.78 130.33 130.05 128.98 128.90 128.50 127.22 126.62 127.14 131.44 126.02 125.10 +124.76 124.18 124.00 122.64 117.69 105.12 85.46 81.08 80.84 84.91 81.16 73.85 71.55 66.82 74.34 79.52 78.21 79.93 81.05 75.71 +79.80 78.81 78.39 78.69 76.92 72.19 69.42 64.29 60.36 61.49 64.44 64.44 65.64 65.33 65.32 67.03 70.18 71.64 73.75 72.63 +74.43 74.59 74.16 72.61 66.76 55.39 60.05 56.11 51.49 44.79 35.37 21.32 10.57 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +142.65 142.65 142.25 143.21 140.81 139.51 139.30 137.75 136.56 135.89 138.05 136.50 134.35 133.64 132.96 132.43 133.61 131.92 131.44 131.64 +131.89 132.09 131.93 131.82 132.15 131.19 130.93 131.12 130.29 129.93 129.49 128.28 128.18 127.85 127.44 127.08 125.98 126.57 125.52 124.89 +123.94 123.48 122.43 119.36 112.29 93.18 76.26 70.84 76.35 71.53 69.46 67.83 66.65 64.58 64.77 70.03 71.26 70.44 69.16 70.47 +75.17 74.20 69.16 60.65 57.84 57.35 59.35 54.43 54.72 57.12 61.33 57.43 56.88 59.18 59.65 62.21 65.60 68.51 69.46 70.52 +71.28 72.41 71.12 68.06 48.75 46.62 54.11 51.95 47.86 41.52 31.50 18.11 7.22 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +144.04 144.04 142.46 142.06 141.44 139.45 138.75 137.60 137.08 137.75 136.74 135.58 134.84 133.81 132.59 131.44 130.91 130.01 131.88 132.58 +132.44 132.84 131.87 131.65 132.25 130.90 131.21 131.12 130.57 129.92 128.96 128.39 127.71 126.96 127.11 126.63 125.78 125.28 124.91 123.34 +119.89 117.34 114.55 114.86 110.97 96.66 78.26 67.03 75.04 69.90 70.57 70.48 69.02 64.68 63.50 64.92 68.63 68.87 68.28 66.74 +64.24 69.67 66.50 60.48 58.13 58.36 52.19 54.25 54.99 52.67 56.79 52.28 52.78 53.08 54.22 56.35 58.22 63.32 65.54 66.43 +67.59 68.18 66.93 58.67 40.57 47.96 49.27 48.50 44.20 37.97 27.22 14.47 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +142.75 142.75 141.95 141.05 139.57 138.11 139.05 135.93 135.33 137.51 136.44 135.43 134.37 133.36 136.18 132.48 130.83 130.10 130.79 132.03 +132.20 133.57 131.90 132.54 131.34 130.32 131.10 130.93 130.45 129.75 127.11 126.66 127.01 127.03 126.45 126.77 125.25 125.88 125.93 123.02 +113.72 108.21 111.76 108.26 108.38 95.32 78.00 67.27 72.99 73.66 71.37 72.24 69.65 68.73 63.20 64.54 65.45 66.43 66.22 65.19 +62.97 58.60 57.00 55.67 56.07 56.26 54.81 51.54 48.54 43.02 39.95 41.11 40.38 45.31 48.20 49.98 47.97 53.37 58.10 61.43 +62.99 58.78 53.21 48.10 37.80 46.93 47.30 45.34 39.74 32.93 21.72 10.40 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +143.38 143.38 140.97 140.27 139.69 138.23 137.87 135.25 135.77 136.01 135.46 135.49 134.46 132.53 132.39 130.64 130.60 131.76 132.44 132.07 +132.77 132.79 132.06 131.79 131.67 130.98 130.61 128.97 129.09 129.46 128.09 127.69 127.25 126.14 125.10 126.50 124.92 123.76 122.76 120.38 +114.85 111.40 107.25 105.99 99.88 94.03 79.00 76.36 73.21 74.34 75.64 75.12 74.01 72.23 67.74 66.60 61.68 64.19 64.62 61.07 +61.04 57.54 55.88 53.13 52.71 54.63 53.53 49.52 44.98 42.60 39.17 38.07 36.92 35.95 42.77 48.14 47.61 48.99 50.21 56.05 +53.36 45.62 41.42 37.09 36.26 41.05 43.42 41.24 36.41 26.92 15.48 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +142.04 142.04 140.75 141.23 139.71 138.22 137.55 134.71 135.14 136.34 135.06 134.82 133.27 132.73 131.86 130.73 130.46 131.88 132.67 134.25 +133.36 132.29 131.46 131.35 129.95 130.74 131.16 129.93 129.39 127.22 128.71 127.44 122.97 122.97 124.21 125.16 124.67 121.51 119.83 117.59 +119.64 114.62 110.27 102.99 101.35 86.22 92.30 75.24 79.71 81.28 80.18 79.03 76.96 77.82 73.58 66.23 62.34 64.87 63.48 61.26 +59.21 57.71 55.62 52.81 50.86 49.46 46.63 48.39 46.98 43.39 39.62 36.67 34.14 33.56 35.54 35.71 46.00 48.54 47.11 50.04 +49.08 43.34 40.64 34.04 37.83 41.03 41.47 36.83 31.37 19.61 10.30 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +142.31 142.31 141.04 140.15 140.98 138.99 137.95 136.56 135.30 135.17 134.34 133.62 132.80 131.94 131.14 129.93 130.56 132.22 134.37 135.30 +133.32 131.23 131.26 130.73 129.90 130.70 129.87 129.31 127.45 127.64 125.75 126.34 123.18 120.84 123.60 124.76 122.09 121.58 117.56 115.18 +112.76 114.98 108.51 106.51 103.54 98.76 91.69 82.18 81.65 86.09 83.90 80.51 81.04 78.92 77.09 74.07 65.84 67.67 60.90 58.87 +55.47 50.79 50.07 48.57 47.27 47.03 45.79 45.26 43.42 42.96 40.96 36.70 35.63 34.63 36.22 38.89 42.27 44.03 43.07 45.31 +46.95 45.37 40.20 37.28 37.83 36.40 38.96 34.75 22.79 12.53 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +141.36 141.36 140.37 140.55 140.27 139.18 136.53 136.05 134.49 133.01 133.94 133.43 131.73 131.11 130.09 130.69 131.89 131.73 134.40 134.81 +132.88 131.67 131.09 130.27 129.76 129.00 129.57 128.51 126.60 125.78 125.67 110.82 120.36 123.13 123.45 121.93 121.17 111.93 110.50 114.81 +109.54 107.85 106.87 106.23 105.57 102.70 98.03 84.29 91.56 88.94 85.22 83.46 80.26 75.59 76.27 75.21 71.68 68.76 59.60 56.89 +53.67 49.52 46.46 43.97 43.61 46.38 43.76 41.08 41.80 38.18 36.18 33.75 34.03 33.70 34.95 35.75 38.84 43.21 40.86 40.25 +42.68 41.09 37.50 36.11 36.14 35.86 35.84 28.11 16.70 8.61 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +140.79 140.79 140.45 140.24 139.44 138.90 137.25 135.10 134.16 133.17 132.70 131.84 131.41 130.56 130.37 131.55 132.41 132.62 133.83 133.07 +133.26 130.88 129.70 129.23 129.33 128.99 128.88 128.70 126.18 125.39 124.83 123.97 122.26 122.95 122.73 120.84 114.70 111.50 107.67 112.61 +108.29 106.66 101.87 105.22 104.16 100.99 97.29 94.99 92.51 89.63 86.03 82.11 77.34 77.22 73.68 73.67 69.95 65.59 54.93 50.81 +52.22 51.73 48.07 44.92 46.15 44.90 42.61 40.86 37.31 35.10 31.06 28.58 29.32 31.36 33.56 33.03 34.05 40.15 41.13 39.61 +38.21 38.16 36.73 35.29 32.41 32.36 30.22 21.50 9.62 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +140.45 140.45 140.22 139.77 138.81 138.81 137.60 136.35 134.12 131.95 132.58 130.96 129.81 130.76 130.27 131.75 134.11 134.34 133.73 133.34 +132.30 130.74 129.41 128.46 126.98 127.63 128.11 127.69 125.65 126.52 124.07 124.14 123.75 121.74 122.10 114.67 115.42 113.72 112.37 100.16 +96.87 95.34 101.29 99.82 99.10 97.83 96.22 92.82 91.61 90.09 84.55 78.22 73.18 74.51 73.54 72.09 66.33 61.09 52.31 48.83 +52.72 52.25 49.95 47.36 48.34 46.49 43.39 39.35 36.07 34.20 31.63 29.93 29.08 28.71 29.95 28.44 32.16 35.10 35.85 34.39 +34.61 35.71 33.24 30.46 27.44 25.98 22.38 11.71 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +140.55 140.55 140.41 139.68 138.45 138.75 136.76 135.76 133.77 132.23 131.16 129.77 130.21 129.92 130.59 132.42 134.11 133.90 133.20 132.38 +131.97 128.03 128.87 128.82 127.97 126.03 127.72 127.24 124.28 124.88 123.72 124.45 122.81 123.56 121.47 121.21 119.90 114.33 115.84 108.12 +104.82 98.69 98.34 95.32 97.37 94.87 90.52 94.14 86.58 86.70 85.98 79.49 69.19 59.66 58.85 69.54 65.00 53.25 50.17 50.39 +53.69 48.96 52.67 49.80 48.33 45.04 44.31 38.88 34.54 32.35 30.58 28.88 27.46 28.03 28.41 31.03 32.81 30.41 30.00 30.82 +29.96 26.78 25.92 23.10 19.57 17.16 9.75 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +139.87 139.87 140.96 139.66 138.30 137.71 136.12 133.32 133.66 131.42 131.05 130.46 129.42 129.61 130.54 132.08 135.33 133.59 132.85 132.89 +131.52 130.21 129.61 128.04 126.38 127.01 127.18 126.42 124.08 124.53 123.68 124.15 123.40 122.82 122.23 122.09 120.57 118.82 113.25 103.56 +94.29 95.87 99.38 95.91 92.33 83.12 87.46 89.73 84.30 83.98 83.59 80.47 65.90 60.45 64.84 58.25 55.06 55.72 52.63 52.36 +53.00 52.19 52.16 51.64 47.83 46.59 38.79 38.10 33.83 31.55 28.55 26.60 26.50 26.85 26.99 25.42 24.11 20.74 23.93 16.83 +18.85 11.60 7.00 7.32 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +140.24 140.24 139.75 139.72 138.36 136.62 136.21 135.06 133.45 131.04 129.40 129.88 129.75 129.37 130.51 131.10 134.26 133.36 132.94 132.28 +132.13 130.23 128.21 127.98 125.83 126.35 126.68 122.38 123.96 124.11 124.35 124.44 123.87 123.87 123.25 121.97 121.81 117.56 106.35 94.20 +95.63 89.46 92.60 81.35 82.42 74.61 77.73 79.30 80.55 82.05 77.60 80.04 71.31 64.59 58.94 56.40 53.68 54.88 55.23 56.71 +48.67 51.49 53.23 49.09 45.57 43.81 40.06 32.64 32.18 29.46 28.76 28.66 28.03 28.49 20.26 20.23 20.65 20.87 20.40 13.11 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +140.66 140.66 140.14 139.24 137.73 136.65 135.87 133.91 132.67 131.06 129.37 129.87 129.79 129.12 130.95 131.74 133.72 133.84 132.38 131.57 +130.72 130.02 129.50 125.08 126.92 126.45 126.39 124.56 124.89 124.72 124.58 124.82 123.30 124.06 122.88 122.68 121.94 121.34 113.86 115.44 +104.81 100.37 99.21 80.52 86.00 82.38 72.94 59.05 78.56 77.84 76.49 77.63 73.57 67.45 57.58 52.80 62.50 59.14 57.10 58.59 +52.67 51.84 47.47 33.28 29.41 26.47 27.81 19.37 17.19 13.51 29.42 32.02 29.58 23.19 24.14 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +140.16 140.16 140.27 138.97 137.02 136.02 135.18 133.75 130.82 130.94 129.53 128.59 129.20 129.15 131.40 131.63 133.56 134.31 132.99 131.59 +131.59 130.89 129.16 128.58 126.87 124.61 125.44 123.90 125.58 124.13 124.49 123.91 123.75 123.70 122.20 122.07 121.16 120.99 120.13 117.72 +114.19 111.36 109.18 106.49 102.43 99.54 89.00 71.68 76.32 80.78 78.84 76.37 77.26 73.83 66.41 61.84 66.87 56.95 58.65 50.79 +44.38 26.99 16.72 16.08 -10.00 -10.00 -10.00 -10.00 -10.00 24.76 35.87 35.73 22.97 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +140.20 140.20 138.82 138.58 137.35 134.68 134.01 132.86 132.10 130.90 129.92 128.54 128.69 130.89 131.08 131.76 132.34 133.00 131.74 130.66 +130.61 129.70 128.74 127.46 127.64 124.75 125.46 125.16 125.08 124.42 123.44 123.75 123.97 122.74 122.83 122.72 121.81 120.22 118.09 118.05 +115.76 114.69 111.97 111.35 109.03 106.17 103.40 101.75 98.69 95.42 90.21 80.82 65.09 54.47 55.49 48.93 39.08 33.45 21.08 14.62 +20.41 18.17 -10.00 -10.00 -10.00 -10.00 -10.00 16.37 41.58 36.50 40.79 38.79 35.98 30.89 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +139.77 139.77 139.39 138.61 136.65 135.83 133.25 131.91 131.23 130.73 130.05 128.92 129.16 131.55 131.87 132.91 133.02 133.06 131.18 130.40 +128.85 128.19 128.23 127.38 126.30 125.59 124.83 124.41 124.91 123.72 123.97 123.55 123.07 123.93 123.17 122.33 121.77 121.14 119.08 118.71 +115.87 113.08 113.72 113.60 112.37 109.36 106.34 104.09 101.07 97.17 95.15 91.63 88.13 87.42 83.18 78.62 78.96 73.12 67.77 62.51 +58.15 52.53 53.41 58.03 60.73 58.23 53.42 50.77 43.53 39.18 28.94 29.46 37.00 27.52 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +140.74 140.74 139.82 138.52 136.05 134.91 132.71 131.05 131.86 130.91 129.89 128.92 129.70 130.32 131.37 132.52 133.47 133.16 131.65 129.64 +128.68 127.97 127.24 127.32 126.69 126.60 125.12 124.92 124.99 124.07 123.20 121.15 123.03 124.32 122.80 122.21 122.22 121.18 120.07 116.80 +116.62 115.86 115.57 114.97 113.04 110.69 106.53 105.22 102.57 99.85 98.20 96.47 93.39 90.41 88.39 86.70 83.95 80.28 73.09 68.56 +68.73 71.34 61.63 68.52 72.43 70.24 60.56 57.90 53.06 31.83 21.59 46.22 37.53 43.44 40.44 36.95 34.16 33.27 27.56 27.56 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +139.64 139.64 138.79 137.65 137.33 136.26 134.12 132.36 132.08 130.88 129.58 129.25 128.72 130.16 131.64 133.01 133.02 131.75 131.13 128.72 +128.58 127.28 127.06 127.23 126.99 127.03 126.57 124.29 123.90 123.20 121.96 122.99 122.86 122.82 122.98 122.53 121.94 121.60 117.96 118.11 +117.40 117.12 116.85 115.11 113.32 111.27 109.07 105.60 103.19 101.83 100.65 98.36 97.02 93.08 91.40 88.71 88.03 84.70 81.71 79.83 +78.18 77.49 76.95 79.82 76.39 73.03 66.21 64.26 55.93 51.88 52.64 52.27 47.24 41.39 45.46 45.35 43.37 40.10 36.76 35.08 +29.07 29.44 27.68 15.09 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +138.83 138.83 138.47 135.94 135.91 134.30 132.52 130.25 130.19 130.91 130.85 130.29 128.67 129.70 131.59 132.82 132.46 131.09 129.73 129.12 +127.34 127.22 125.63 126.32 126.07 125.51 126.09 125.37 124.76 123.89 123.18 122.19 123.09 122.66 121.90 122.24 122.83 122.15 120.71 117.92 +117.91 118.69 117.34 115.64 112.73 109.79 108.96 107.79 105.61 103.48 101.55 99.36 97.15 96.94 93.69 77.64 83.45 87.37 84.38 83.17 +80.38 80.52 82.51 81.94 79.01 75.81 71.07 59.40 58.24 59.91 55.48 55.31 52.72 49.71 49.36 48.19 45.08 39.72 37.42 39.22 +39.07 38.27 35.58 30.83 26.04 26.79 23.13 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 9.56 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +138.56 138.56 138.80 135.20 135.95 133.66 132.21 131.19 130.87 130.52 129.70 129.07 128.03 129.29 131.53 132.65 132.15 131.05 130.39 127.74 +127.49 127.15 125.75 126.27 126.81 126.16 126.08 124.90 123.51 123.33 122.58 120.82 122.25 122.45 122.23 121.38 121.92 121.75 121.92 120.15 +119.58 118.77 117.92 116.66 114.18 110.11 109.32 108.51 106.94 104.62 103.08 100.77 99.68 97.74 86.51 79.56 69.77 85.80 85.01 80.82 +78.50 84.37 84.10 80.28 76.74 74.89 70.78 67.05 67.04 64.19 61.25 56.31 54.32 51.24 51.21 47.35 41.74 42.27 40.33 41.54 +41.90 40.83 40.34 38.63 35.53 34.96 33.62 31.79 28.96 26.79 23.01 7.71 16.97 15.50 16.24 14.84 7.68 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +137.81 137.81 136.72 133.09 135.86 134.11 133.34 132.39 132.06 130.36 129.51 129.15 128.49 130.13 130.73 131.04 130.22 129.03 128.55 127.53 +127.24 127.06 125.37 125.42 126.72 126.14 125.53 124.80 124.36 123.94 123.12 122.41 121.12 121.49 121.79 121.52 122.25 121.82 121.19 120.89 +118.51 119.18 117.73 116.73 114.81 112.35 112.22 110.98 107.88 104.32 104.26 101.96 100.19 98.07 94.98 87.66 67.38 71.52 86.55 83.32 +83.21 84.25 81.95 79.01 73.65 67.11 65.68 58.73 62.66 62.27 61.20 58.58 58.40 50.42 47.24 47.52 44.74 35.95 40.76 40.05 +39.72 42.32 40.42 38.59 37.71 35.84 35.29 35.34 32.62 30.40 28.82 26.72 24.68 22.68 20.43 17.31 10.25 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +137.54 137.54 137.25 136.98 131.80 133.54 133.00 132.78 131.62 130.87 129.72 128.73 129.61 130.28 131.52 131.19 130.23 129.29 125.78 127.74 +126.62 126.01 125.43 125.39 126.12 126.11 124.00 124.59 123.87 123.42 123.14 121.89 122.04 120.32 120.40 121.11 121.41 121.28 120.07 120.69 +119.32 119.87 118.21 117.50 115.10 114.35 112.42 112.35 109.25 105.04 103.57 101.58 100.34 99.09 96.74 95.32 71.78 71.69 87.35 85.40 +85.34 83.32 76.87 76.38 73.53 69.24 64.49 61.58 57.27 57.17 58.72 57.08 54.20 51.67 49.39 49.91 44.24 41.29 34.66 37.62 +35.04 36.15 37.46 37.89 38.08 37.84 36.65 35.21 33.32 32.10 30.02 27.53 26.24 23.17 21.06 18.30 10.55 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +136.69 136.69 136.02 135.91 135.23 134.68 133.34 132.36 131.64 130.58 129.57 129.11 130.28 130.38 130.40 129.86 129.22 127.16 127.17 126.03 +126.10 126.95 125.49 125.10 125.15 124.89 125.27 125.16 123.96 123.13 122.37 122.20 120.74 119.80 119.54 120.27 120.13 119.93 121.00 120.47 +119.71 119.31 118.32 116.49 116.25 115.19 113.37 112.17 110.16 106.94 102.63 100.13 98.66 98.08 96.92 95.88 91.90 84.85 87.78 88.05 +86.28 82.56 80.57 69.18 67.64 68.53 67.07 58.85 53.75 54.91 54.58 56.14 50.61 49.61 50.74 45.20 43.95 39.71 38.44 32.66 +30.32 23.82 23.12 27.76 33.26 34.81 35.32 34.07 32.86 30.81 29.68 27.23 25.63 23.78 21.15 16.02 9.40 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +135.30 135.30 136.84 136.90 135.68 134.06 133.04 132.94 131.39 129.65 129.25 129.14 130.03 130.70 129.60 129.27 128.64 126.98 125.78 126.01 +125.94 126.25 125.55 124.56 124.50 124.97 124.75 124.51 123.18 123.27 122.79 122.10 121.67 120.90 118.91 120.30 118.84 119.60 119.57 119.52 +119.83 119.75 117.88 117.31 116.90 116.31 115.25 112.85 110.35 107.81 104.36 95.81 96.32 96.80 95.73 94.53 94.17 90.84 89.24 85.74 +83.58 85.62 82.08 75.16 58.18 66.51 66.09 61.56 58.35 54.37 50.07 51.32 50.53 50.21 48.14 44.18 38.43 37.34 38.36 37.65 +27.97 22.28 18.61 16.54 23.01 29.10 33.25 32.84 30.74 29.26 28.26 26.78 25.38 21.27 18.54 14.64 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +136.81 136.81 135.81 136.59 135.32 134.51 131.98 131.49 129.88 128.13 129.11 130.09 130.07 130.40 129.45 128.57 128.15 127.94 125.94 125.90 +125.13 125.96 125.64 125.27 123.97 124.40 124.43 124.44 123.45 122.46 122.36 122.01 120.98 120.22 119.94 119.70 118.23 117.63 118.31 118.54 +119.76 119.36 117.43 117.11 116.82 116.30 114.18 112.90 109.78 106.36 103.19 96.50 94.61 95.49 91.38 93.02 92.25 91.04 87.46 82.04 +81.70 84.80 80.54 80.19 74.65 71.38 68.81 62.34 53.10 49.02 46.72 49.68 45.04 47.41 43.56 40.69 39.75 37.39 34.35 35.81 +29.01 27.82 -10.00 -10.00 17.00 22.17 29.09 29.48 27.66 27.54 26.43 25.09 23.31 19.58 17.36 12.93 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +135.05 135.05 135.37 135.43 134.78 133.57 132.03 131.23 130.13 128.58 129.52 130.79 129.51 129.55 129.07 128.68 127.86 127.11 125.12 124.91 +124.52 124.57 124.76 124.49 124.33 124.00 123.89 123.97 123.82 123.07 121.85 122.14 121.74 119.40 119.21 117.53 118.44 116.77 116.21 117.89 +118.57 118.21 117.07 116.57 116.08 114.54 113.83 112.49 109.83 107.44 102.15 98.34 96.87 94.07 92.88 91.05 89.13 85.65 81.83 82.03 +80.04 80.34 80.50 76.82 74.86 71.96 64.26 62.34 53.66 49.87 48.13 45.77 46.15 44.82 44.44 40.09 42.05 37.38 28.73 32.28 +30.68 27.27 11.32 -10.00 -10.00 18.20 25.05 25.91 27.20 27.08 25.83 22.26 19.86 17.74 14.52 9.06 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +136.03 136.03 134.97 135.82 135.17 132.01 132.18 130.74 130.25 128.93 129.98 129.11 130.04 129.48 128.66 126.82 126.36 125.70 125.03 124.05 +122.72 123.67 124.82 124.51 124.52 122.11 123.46 123.37 121.07 122.35 120.10 121.54 121.30 120.59 119.61 118.14 116.75 116.51 116.24 115.35 +116.16 117.28 116.60 116.56 114.99 114.33 112.61 110.53 111.39 107.36 103.29 100.20 97.66 95.66 92.23 89.27 85.33 78.91 76.92 78.11 +76.05 78.03 79.31 80.16 73.24 71.95 61.53 54.01 51.56 50.75 47.97 46.31 46.02 43.00 44.67 42.20 34.27 34.78 25.96 29.02 +25.61 24.84 8.68 -10.00 -10.00 14.29 21.10 22.57 20.03 23.77 22.72 15.77 13.57 10.84 7.54 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +135.93 135.93 134.39 134.62 134.76 133.64 131.98 129.79 129.88 130.26 130.32 129.77 129.44 128.78 128.21 127.14 126.30 124.47 124.70 122.12 +123.16 123.58 124.22 124.97 124.00 122.01 122.32 123.03 122.23 122.77 121.45 120.92 120.69 121.41 118.95 118.20 117.04 116.81 116.50 116.33 +115.44 115.53 116.62 116.97 115.26 114.47 111.41 110.70 108.53 108.49 104.44 101.86 98.94 95.19 90.81 89.28 83.60 68.66 70.46 69.81 +71.76 75.08 78.18 78.00 77.04 74.67 67.89 56.81 50.89 51.99 51.33 46.73 44.21 42.27 40.58 39.39 39.30 34.69 27.65 26.79 +27.91 22.14 7.00 -10.00 -10.00 -10.00 17.22 18.15 17.63 17.59 17.49 11.92 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +136.09 136.09 134.82 134.25 134.20 132.61 131.55 130.39 130.16 130.25 129.96 129.64 128.65 128.79 128.02 126.59 126.00 124.08 123.58 122.65 +124.27 124.57 124.82 124.76 122.97 123.25 121.31 122.63 122.50 121.45 121.01 119.78 119.39 121.44 119.73 118.86 117.89 115.15 115.30 115.24 +113.77 115.07 115.99 115.82 115.79 112.07 112.93 112.05 109.68 106.73 103.69 101.87 99.03 93.18 90.24 85.72 78.01 69.95 69.99 67.24 +68.18 70.88 74.68 75.67 74.57 72.25 68.15 55.92 52.58 54.74 50.15 47.14 42.86 41.72 37.68 37.48 36.11 35.18 34.14 30.02 +24.46 19.71 -10.00 -10.00 -10.00 -10.00 11.75 14.42 11.49 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +134.65 134.65 133.94 133.00 132.79 132.29 130.46 129.64 130.34 130.87 130.06 128.06 127.74 127.98 127.18 126.98 125.46 124.86 123.86 123.99 +122.59 124.11 123.74 124.07 123.64 122.25 120.90 121.74 122.63 121.29 119.21 120.47 120.20 120.26 119.70 116.43 116.98 117.92 117.01 117.06 +115.41 113.18 109.02 113.13 112.73 114.24 112.57 111.51 109.23 107.20 103.15 102.00 100.08 95.97 92.43 88.36 79.16 74.71 69.55 67.44 +66.73 69.80 71.70 73.15 71.80 70.37 66.83 60.87 55.52 49.88 49.63 46.23 43.43 42.34 40.66 36.82 32.37 29.83 30.92 30.19 +25.20 16.98 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +134.52 134.52 133.28 133.08 132.44 131.38 129.90 129.97 130.84 130.10 128.79 125.14 127.09 126.36 125.76 125.13 123.48 123.61 123.11 122.44 +122.54 122.99 123.08 123.30 117.92 122.11 119.72 121.28 119.77 120.49 120.21 119.42 119.34 120.04 120.44 117.84 115.98 116.22 115.89 116.33 +113.56 113.97 112.82 113.53 114.35 113.06 111.67 112.49 104.71 106.49 104.07 100.79 99.10 95.55 85.71 78.86 74.12 71.25 70.13 70.63 +68.09 66.16 69.11 70.65 69.95 67.34 62.14 56.08 51.52 39.57 42.42 42.83 44.44 38.58 37.89 35.77 35.46 31.91 22.15 19.42 +7.95 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +134.37 134.37 132.89 133.10 133.07 132.54 130.88 131.03 131.15 130.41 128.34 125.99 125.34 126.22 125.00 124.80 123.80 123.18 120.43 122.23 +121.96 121.43 121.50 122.50 121.52 118.25 119.26 119.77 119.89 119.77 120.10 118.42 115.43 120.06 118.04 118.07 114.99 117.33 113.09 115.30 +114.75 113.68 110.20 113.36 112.44 113.99 111.55 112.40 109.06 106.14 104.82 101.50 99.20 92.79 77.64 71.33 66.19 68.29 70.11 69.79 +68.10 67.79 68.19 68.10 66.85 63.46 56.87 50.76 47.72 41.67 39.60 39.38 37.97 27.36 29.29 28.87 30.75 20.82 22.19 22.19 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +133.98 133.98 132.70 132.96 132.27 130.79 130.12 131.28 130.61 129.01 128.45 126.33 126.12 125.75 124.91 124.79 124.02 123.75 122.10 123.15 +122.58 121.71 120.42 122.20 122.74 120.47 119.01 114.94 118.75 121.32 119.77 119.42 119.06 116.96 118.33 117.77 118.35 115.02 116.00 113.45 +112.18 114.47 113.50 111.90 112.14 112.15 111.25 108.48 108.72 103.91 103.06 99.37 98.18 91.27 79.61 69.20 69.77 74.00 69.10 67.30 +65.33 66.23 63.55 63.09 61.88 58.00 51.83 47.28 45.02 41.97 40.71 37.77 37.79 38.87 36.09 27.40 20.59 23.29 13.50 13.50 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +133.12 133.12 132.08 133.10 133.05 132.09 132.18 131.76 130.10 129.43 128.15 126.48 125.91 124.97 124.27 124.29 122.68 121.71 121.76 121.40 +122.10 122.03 121.23 121.78 122.30 122.07 118.57 117.57 118.71 118.83 116.89 116.94 118.44 118.33 116.05 117.64 114.99 116.13 112.90 109.21 +113.16 114.38 110.90 112.79 111.30 111.62 111.31 109.39 108.48 106.84 99.74 95.30 93.25 83.10 70.09 73.17 79.77 73.08 67.60 68.09 +66.24 64.23 58.77 58.74 58.40 54.06 47.88 42.28 38.94 41.60 38.88 34.91 31.02 33.54 30.65 41.43 37.12 27.88 25.55 20.90 +9.44 15.89 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.18 8.55 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +133.71 133.71 132.44 133.08 131.61 131.90 131.34 130.42 130.73 129.07 127.99 125.89 125.01 125.78 124.55 123.89 122.61 120.90 120.76 121.35 +121.12 121.73 121.97 121.73 121.22 120.54 119.42 117.89 118.90 119.43 118.37 116.68 116.72 115.28 115.33 117.29 115.34 112.34 114.55 114.17 +110.52 113.09 113.46 111.19 111.61 110.90 107.83 104.31 106.86 100.28 99.14 99.98 96.58 90.68 86.96 84.38 81.16 73.69 69.00 67.29 +67.83 63.75 56.86 48.22 45.82 35.36 29.96 27.78 28.16 30.55 29.08 31.18 29.61 26.46 25.40 26.17 31.51 32.47 27.93 26.07 +24.90 20.18 -10.00 7.00 7.00 -10.00 13.05 18.56 19.87 16.63 24.49 15.39 10.91 14.66 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +131.16 131.16 131.12 132.65 131.79 132.19 131.49 129.89 129.78 127.78 125.53 126.38 125.28 124.32 124.41 122.69 121.58 122.58 120.24 120.93 +121.05 121.86 119.73 121.21 120.81 120.79 117.67 118.79 116.89 118.17 118.64 114.81 118.71 116.82 116.94 115.65 114.89 110.63 113.10 113.24 +112.28 113.84 109.73 112.44 108.56 110.34 110.61 109.17 99.83 102.29 89.11 91.77 77.02 76.78 83.13 81.10 70.29 61.49 58.90 53.97 +53.84 50.84 22.69 20.61 13.12 20.88 10.09 7.78 23.96 24.20 25.31 24.60 23.32 21.82 23.31 23.57 25.26 29.23 36.69 27.45 +21.07 -10.00 -10.00 7.00 9.03 -10.00 24.64 26.29 22.35 27.78 12.65 15.26 8.77 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +132.67 132.67 131.57 131.46 131.74 131.26 129.95 129.88 129.80 127.86 125.87 125.80 122.48 124.94 121.44 121.32 120.69 121.03 121.07 120.17 +120.79 122.08 121.93 121.65 121.21 120.61 120.07 115.68 116.49 117.12 115.72 117.59 116.40 116.03 117.60 114.08 116.40 114.90 113.38 113.92 +114.34 112.90 111.60 110.06 107.60 105.21 103.96 100.31 99.89 103.11 100.21 98.70 93.45 86.94 78.82 77.67 63.11 61.24 61.46 55.45 +52.62 43.16 29.13 16.03 10.46 8.90 7.83 8.62 10.61 11.94 15.91 -10.00 -10.00 18.90 11.66 20.98 19.83 19.28 37.70 37.04 +26.56 -10.00 -10.00 -10.00 23.72 33.74 25.82 17.70 -10.00 10.05 -10.00 -10.00 7.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +130.90 130.90 130.38 131.68 130.96 129.84 129.47 129.68 129.77 129.05 128.17 126.73 125.58 123.94 123.59 122.66 121.78 121.03 119.60 120.04 +120.99 120.41 120.51 120.64 117.55 118.38 116.75 115.62 112.56 115.54 115.00 113.08 116.52 115.71 115.41 115.75 116.03 116.51 114.45 112.60 +113.80 111.92 110.00 109.69 109.81 103.47 98.35 97.61 91.34 104.01 102.88 96.39 87.99 85.75 79.49 71.70 56.81 54.97 56.33 56.72 +33.76 23.13 22.47 20.10 15.20 10.41 7.00 7.00 11.58 13.70 14.01 13.37 -10.00 -10.00 -10.00 13.29 19.58 18.38 13.37 -10.00 +36.24 32.34 7.00 -10.00 25.39 29.26 23.83 21.69 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +130.12 130.12 130.74 130.50 130.01 129.98 129.24 129.04 128.21 126.55 124.92 123.90 123.20 122.73 121.69 119.57 122.06 121.87 121.09 118.89 +119.85 119.00 119.05 119.51 119.23 119.09 117.24 118.40 118.04 115.18 115.38 115.85 114.78 114.10 115.26 114.90 116.42 115.86 109.20 112.37 +114.21 111.19 108.28 106.66 103.10 96.57 94.89 101.63 103.15 104.63 101.47 95.00 84.65 82.99 74.80 72.02 71.19 59.61 54.35 37.46 +26.29 12.15 12.59 12.24 13.50 12.63 -10.00 -10.00 11.16 12.88 11.28 -10.00 -10.00 -10.00 -10.00 7.00 8.92 -10.00 -10.00 -10.00 +-10.00 -10.00 18.89 25.43 31.73 36.27 24.53 9.91 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +130.58 130.58 131.57 130.87 130.31 129.97 129.09 128.71 128.45 128.07 124.48 124.29 123.16 122.05 121.27 121.40 120.83 121.94 120.46 120.20 +119.51 118.67 119.81 120.94 120.12 119.41 117.22 114.94 116.92 115.57 113.87 114.94 114.14 117.21 116.75 115.77 116.78 117.00 102.76 98.82 +114.24 111.74 110.78 109.20 107.62 105.50 99.91 99.48 103.94 103.71 100.50 96.65 88.37 80.53 78.61 70.90 63.15 43.88 43.19 33.76 +16.81 7.00 7.13 7.31 9.18 7.00 9.18 -10.00 11.15 12.79 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 14.16 19.05 11.66 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +129.31 129.31 130.75 129.57 130.44 128.31 128.02 128.09 127.65 127.50 125.13 123.63 123.59 122.10 120.98 121.75 121.31 121.69 121.33 119.67 +119.49 117.38 115.89 117.03 114.41 119.26 118.54 117.17 115.08 115.49 113.45 112.84 115.06 113.68 116.47 115.66 116.11 111.03 112.30 108.59 +113.72 113.28 111.75 110.44 109.01 104.20 101.53 100.63 104.16 102.81 77.44 97.75 93.34 87.51 73.41 51.67 48.06 25.21 26.15 16.67 +9.42 7.00 -10.00 7.00 -10.00 7.00 7.62 11.82 14.50 23.76 18.19 11.66 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 11.72 8.98 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +129.21 129.21 129.58 129.03 128.35 127.54 126.76 126.37 126.48 125.49 123.44 123.62 122.34 120.69 121.59 122.36 120.80 121.25 120.05 119.17 +118.54 119.48 119.12 116.48 115.89 114.24 113.82 114.88 111.00 114.17 112.31 112.19 112.07 115.01 114.11 116.14 115.69 114.17 115.39 114.88 +114.17 113.89 113.51 112.34 110.40 107.74 106.39 105.55 104.38 98.64 56.71 92.99 91.90 82.48 70.40 61.76 33.53 22.22 21.72 15.54 +7.92 -10.00 7.00 8.59 -10.00 7.00 7.98 19.10 20.66 28.22 20.31 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +129.09 129.09 129.42 128.48 128.03 126.95 127.05 127.05 125.56 124.33 124.62 124.16 124.13 123.66 122.06 121.90 123.13 121.81 121.18 120.98 +120.19 119.63 119.52 118.69 118.89 116.84 115.61 114.65 116.22 116.46 115.82 114.26 115.19 115.38 115.06 116.45 115.38 115.92 115.96 115.37 +115.30 114.46 114.65 115.36 113.45 111.95 110.34 108.85 104.53 95.55 76.27 90.43 90.16 80.85 72.81 51.19 46.23 15.12 19.35 9.21 +7.00 -10.00 7.00 14.69 10.58 9.94 17.07 38.50 25.47 23.03 16.61 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +128.07 128.07 128.84 128.16 127.51 126.67 126.63 126.60 126.20 125.43 125.61 126.66 125.52 124.18 122.75 122.28 123.44 122.08 122.02 120.86 +120.15 119.90 117.12 117.55 116.51 117.78 116.85 114.32 114.85 116.28 115.06 113.49 111.25 108.44 115.22 115.65 115.81 114.16 114.42 114.85 +115.02 114.63 114.12 115.99 114.37 112.82 113.27 108.58 103.54 98.09 87.99 86.23 82.71 81.20 71.89 63.94 58.80 32.10 16.29 10.16 +7.00 11.71 19.74 23.66 7.31 10.36 30.57 37.32 23.44 18.08 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +127.79 127.79 127.34 126.73 125.41 124.91 126.67 125.96 125.84 125.19 123.66 124.29 124.62 122.53 121.60 120.45 120.94 123.12 122.64 120.91 +120.20 119.84 119.26 118.61 118.28 117.99 116.54 115.51 114.45 116.52 115.40 114.44 111.30 114.64 115.39 115.53 115.42 115.74 113.96 115.41 +116.02 115.38 113.17 115.26 115.15 113.24 115.83 110.14 101.19 94.24 88.06 69.09 33.26 54.36 59.71 59.57 59.15 61.09 -10.00 14.20 +12.48 28.33 32.56 15.27 13.18 38.98 44.54 29.64 23.83 16.21 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +128.16 128.16 127.22 126.11 127.20 126.50 126.53 124.71 124.90 125.00 123.38 123.73 124.90 123.58 121.78 120.72 120.08 121.59 122.25 120.85 +118.37 120.13 119.33 119.25 118.63 114.77 116.06 116.18 114.85 115.08 114.11 114.61 113.73 112.25 115.45 115.58 115.65 115.16 110.13 114.12 +115.65 115.53 113.15 115.99 117.35 116.88 114.28 115.04 97.46 93.66 82.71 80.17 28.99 -10.00 -10.00 54.38 46.64 40.75 17.71 15.80 +48.28 49.10 40.85 32.58 43.94 40.34 21.97 22.32 24.94 19.79 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +125.51 125.51 125.82 125.84 125.10 124.09 125.10 125.13 123.59 122.79 122.64 122.45 122.31 122.50 121.29 120.98 119.76 120.47 119.67 121.43 +120.39 118.20 116.66 117.40 116.25 117.63 116.67 116.89 115.26 114.13 110.28 111.88 111.48 113.24 114.72 114.15 113.32 114.85 114.47 114.79 +116.07 114.97 116.01 114.56 122.20 116.98 115.39 112.64 104.79 94.08 59.74 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 50.32 56.82 66.94 +66.69 69.87 77.06 68.51 65.18 31.81 27.31 40.96 44.91 15.91 9.57 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +126.58 126.58 124.78 124.91 124.05 124.65 123.36 124.74 124.31 121.96 121.85 121.94 122.48 121.40 120.32 120.07 118.74 118.71 118.77 120.83 +120.32 119.35 119.34 115.89 117.04 116.51 117.14 114.86 115.86 115.25 113.61 109.00 111.57 112.67 115.21 115.56 114.16 115.28 113.85 116.11 +115.54 116.49 116.41 113.84 127.01 134.40 121.00 113.09 109.66 96.31 83.91 54.06 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 35.88 77.17 +78.32 79.43 80.96 75.92 52.24 38.25 48.05 57.47 48.85 38.46 13.76 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +124.68 124.68 123.85 124.28 123.59 124.01 124.14 124.22 123.80 123.92 121.87 122.85 122.40 122.32 120.72 120.69 119.40 118.42 119.22 120.06 +119.97 118.72 118.23 117.92 115.69 116.50 116.17 117.07 113.85 115.03 112.90 111.41 111.33 108.67 115.59 114.59 113.90 114.12 113.64 115.77 +115.64 117.20 116.93 115.70 117.57 142.65 146.64 114.30 111.97 100.06 86.50 69.08 50.53 9.52 -10.00 -10.00 -10.00 65.82 61.64 59.75 +71.95 82.50 84.78 80.56 72.45 66.75 64.38 50.80 55.05 33.79 20.60 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +124.37 124.37 124.15 123.94 123.34 123.40 123.95 124.34 123.31 122.12 122.26 121.90 121.39 120.99 120.56 119.35 119.40 119.05 118.78 120.22 +118.13 118.74 117.90 116.95 115.62 115.29 115.41 116.15 116.51 115.76 115.50 110.95 110.79 110.21 112.97 114.05 114.20 113.74 113.50 111.62 +115.91 115.41 117.69 116.11 115.49 128.91 160.29 149.67 112.29 107.03 95.67 95.92 70.71 56.13 76.68 55.62 68.47 74.99 65.13 66.24 +81.80 81.53 80.72 72.50 72.34 73.93 62.81 50.60 45.17 24.71 13.38 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +123.76 123.76 124.07 122.18 123.15 122.66 121.49 122.56 122.44 121.44 120.48 120.29 121.60 120.18 118.74 117.57 118.09 118.21 117.66 118.45 +119.89 119.71 120.00 118.76 118.22 117.10 116.29 116.29 115.47 116.62 115.48 113.97 113.95 114.33 113.33 114.84 114.50 114.40 113.69 113.26 +112.34 115.09 117.45 118.13 115.52 113.21 128.56 165.70 141.69 109.22 105.88 103.49 98.09 85.48 84.00 91.69 89.10 93.05 92.37 90.20 +93.68 85.69 74.51 64.40 66.87 72.00 71.38 57.98 49.24 43.94 19.43 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +124.11 124.11 122.85 120.92 121.62 121.20 121.90 122.28 122.26 121.93 120.70 121.17 117.70 119.77 119.57 118.86 119.31 117.23 118.90 118.43 +119.58 117.91 115.31 116.46 115.54 116.79 116.14 116.45 115.89 115.45 114.77 114.85 113.85 113.12 113.94 113.78 114.70 114.74 114.38 114.29 +114.19 112.23 114.40 117.21 115.65 114.31 112.26 159.39 173.41 167.19 108.18 105.00 103.94 98.34 99.53 97.44 94.33 90.25 92.33 94.36 +94.44 93.91 92.29 78.63 66.24 76.15 79.82 70.10 55.02 42.19 23.62 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +123.91 123.91 122.89 121.71 122.26 119.34 120.90 121.79 121.60 120.18 120.68 121.91 121.19 119.92 119.00 119.24 119.35 120.20 119.20 117.42 +118.48 118.67 118.19 117.68 115.45 117.02 117.16 116.24 116.22 115.71 114.36 114.55 114.04 111.94 109.76 115.23 114.53 115.17 114.26 112.94 +113.01 112.48 111.62 112.09 118.94 116.17 115.24 112.89 157.40 197.25 160.45 108.65 107.21 104.68 102.31 98.49 96.37 94.11 96.37 95.90 +94.48 95.25 93.36 71.27 71.65 50.27 68.38 82.97 56.65 33.00 23.54 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +123.59 123.59 123.66 119.85 121.15 121.36 121.43 121.91 122.01 121.50 121.57 121.63 120.94 121.23 119.23 119.06 118.83 119.68 118.98 117.97 +117.90 115.96 116.73 117.59 116.75 115.25 115.91 114.82 116.19 115.74 115.79 114.62 114.81 111.49 113.36 115.44 113.54 113.11 113.64 113.80 +113.42 113.05 113.19 112.56 114.27 116.43 116.21 110.98 114.01 142.05 163.27 139.31 110.44 106.78 105.29 104.24 101.70 101.09 97.63 96.67 +95.52 94.76 90.66 70.01 66.96 69.05 60.46 84.56 72.03 54.19 27.06 22.67 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +124.01 124.01 123.08 120.71 121.48 121.74 122.21 121.98 122.04 121.87 121.34 121.32 120.06 120.02 118.57 119.45 119.29 117.58 118.25 118.08 +117.89 118.08 117.39 116.40 116.46 113.42 116.20 115.83 115.66 116.01 116.33 114.41 114.57 112.33 113.64 110.91 113.81 114.05 113.83 114.15 +114.31 113.37 112.33 112.77 110.29 113.10 115.41 113.99 113.75 121.15 114.45 121.43 119.79 109.22 105.07 103.72 103.17 103.06 101.08 97.59 +97.65 90.20 74.33 79.07 87.82 88.01 64.76 70.46 82.06 63.55 44.43 33.11 17.34 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +122.92 122.92 122.79 120.73 122.17 123.00 121.28 122.76 121.75 121.70 121.47 121.62 120.95 120.14 119.30 118.65 119.00 118.59 117.45 117.29 +117.45 117.01 116.26 117.15 116.75 113.02 116.38 114.98 116.23 115.49 115.35 114.87 113.74 113.27 112.35 114.31 114.97 114.55 113.86 114.19 +113.53 114.39 112.66 112.16 110.33 112.00 114.19 113.32 112.53 115.46 127.42 116.36 110.73 110.82 108.74 104.69 99.83 98.49 99.70 93.10 +82.23 69.41 84.01 87.37 95.47 92.76 75.61 66.79 86.47 52.13 56.27 33.12 26.08 19.17 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +122.91 122.91 122.40 121.21 121.12 120.48 121.36 121.98 121.34 121.39 121.05 121.06 120.32 120.66 121.10 120.17 120.22 119.22 118.13 116.50 +116.19 118.19 116.32 116.12 116.43 114.38 114.84 114.14 115.31 114.30 114.68 114.05 113.31 112.50 114.08 113.35 115.05 114.23 114.65 114.35 +112.65 112.41 112.14 112.54 111.43 109.65 111.16 115.96 113.73 112.41 110.70 120.05 117.15 111.78 110.04 107.21 105.76 99.72 92.87 91.27 +87.29 83.21 90.01 91.87 94.23 98.81 99.36 83.64 89.03 76.82 66.73 50.56 14.92 7.84 8.93 -10.00 7.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +122.54 122.54 122.60 120.27 120.43 119.69 121.50 119.66 120.92 120.64 121.00 121.20 120.13 120.23 119.27 119.22 120.13 118.92 119.01 117.25 +115.96 117.40 117.39 117.04 115.79 113.80 113.44 113.07 114.69 114.21 114.71 115.78 115.29 112.87 113.99 112.24 114.77 113.87 112.71 113.03 +114.03 113.32 112.49 111.74 111.95 108.29 111.18 112.28 113.67 111.63 110.66 108.69 111.76 109.48 109.05 104.89 107.66 105.59 98.16 96.10 +91.07 91.33 96.43 96.56 96.32 97.16 96.21 94.15 93.63 74.70 49.50 44.08 22.21 -10.00 18.09 13.46 13.34 8.60 7.10 7.00 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +122.50 122.50 122.02 121.58 120.66 119.66 120.63 120.41 120.35 121.07 119.91 120.44 119.66 119.97 120.28 119.87 119.53 118.98 119.13 118.13 +115.03 116.79 116.28 115.65 114.92 114.47 114.25 114.17 115.68 115.51 115.70 114.51 113.64 112.63 112.74 111.45 113.18 113.78 113.69 113.84 +113.31 113.22 113.78 112.62 112.12 107.73 110.44 111.27 112.74 111.42 111.42 110.02 109.45 107.09 109.86 107.29 105.90 100.36 105.11 102.92 +97.68 101.55 101.66 98.13 96.12 97.66 96.27 97.66 97.64 93.16 57.51 49.87 31.43 44.70 23.31 31.53 19.95 19.64 10.12 10.12 +-10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +122.21 122.21 122.54 121.76 121.37 120.18 119.60 119.14 118.28 120.60 120.06 119.80 117.45 118.86 118.37 118.77 119.41 117.97 118.30 117.60 +116.29 115.52 115.61 114.99 112.47 115.22 115.44 113.94 115.80 115.01 114.74 114.10 114.03 113.03 112.07 109.84 113.85 114.34 114.03 113.81 +113.94 112.96 113.29 112.12 111.32 111.00 110.36 110.20 111.16 111.35 108.42 109.16 107.37 106.26 109.01 106.11 104.65 107.76 107.27 102.28 +102.68 97.91 100.50 97.94 99.29 97.23 97.01 98.36 95.43 96.64 91.50 61.98 49.45 56.33 55.35 50.00 30.76 29.91 12.75 7.00 +7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +122.98 122.98 121.68 122.51 120.19 120.37 119.46 118.93 119.71 119.82 120.45 120.19 119.96 120.09 118.66 119.06 119.08 117.66 117.47 117.85 +117.23 116.54 115.27 116.46 114.40 115.46 114.36 114.08 114.51 113.74 112.81 113.02 112.38 112.31 112.11 110.86 112.27 113.16 114.09 112.83 +112.84 112.94 113.65 113.46 111.57 110.82 111.15 109.00 111.32 110.37 107.10 108.30 109.60 105.76 107.44 107.13 107.40 106.44 105.22 105.98 +105.70 103.11 100.74 105.31 99.05 96.99 100.38 98.49 95.70 94.48 93.02 92.40 74.34 70.69 64.59 64.44 53.90 55.35 27.41 10.77 +7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +122.17 122.17 122.10 121.55 121.25 119.77 118.91 117.24 119.47 119.38 118.65 118.89 118.59 118.84 118.07 117.60 117.00 117.52 117.69 117.32 +117.82 116.50 115.76 113.59 114.29 115.14 114.41 114.94 113.39 113.16 112.41 113.23 112.65 112.19 111.51 110.84 110.74 112.66 113.73 113.83 +113.38 113.81 112.93 113.00 113.47 110.27 112.08 110.70 110.46 109.37 109.63 107.23 108.23 104.55 105.43 109.27 108.64 107.47 105.88 106.57 +106.17 105.66 104.44 101.96 101.54 101.95 98.23 98.22 97.87 97.60 98.54 97.50 92.54 82.75 80.54 77.53 58.36 57.67 44.08 32.22 +31.61 17.15 7.00 -10.00 22.73 14.44 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +122.43 122.43 121.17 119.78 120.97 118.48 119.15 118.97 118.47 118.88 119.09 118.65 118.09 117.64 117.00 116.16 115.67 117.56 117.65 117.34 +117.70 115.96 112.36 115.92 114.70 116.04 114.81 114.34 113.10 113.61 112.24 112.68 112.52 111.87 112.38 111.24 110.27 112.99 113.11 114.08 +113.25 113.44 113.10 113.04 112.50 113.45 113.38 110.92 110.92 110.45 108.61 109.20 109.34 109.70 108.77 108.79 109.54 108.41 106.96 106.47 +106.26 105.78 104.38 104.92 105.18 101.94 102.03 99.50 100.16 99.16 99.31 97.73 93.59 89.06 92.38 84.76 73.56 72.49 64.33 63.09 +61.70 59.04 21.68 11.28 10.75 7.00 7.30 11.40 7.39 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 +-10.00 -10.00 -10.00 +122.91 122.91 122.45 121.55 119.41 120.51 118.94 117.89 117.17 117.95 119.03 118.61 118.30 116.93 117.86 115.64 117.35 117.29 117.18 116.34 +116.74 115.19 116.93 114.24 113.79 112.98 114.75 114.70 113.64 113.42 112.32 112.38 112.88 109.88 111.80 108.73 107.95 112.49 112.54 112.85 +113.62 112.93 112.91 112.73 113.14 112.36 111.27 112.22 109.47 107.20 108.87 108.93 108.69 108.40 108.59 109.20 108.80 108.04 108.39 107.39 +105.62 104.94 105.50 105.47 105.98 103.72 101.99 102.33 99.44 98.72 100.42 99.95 92.31 92.83 92.28 91.99 87.46 81.43 62.51 63.29 +66.54 54.74 46.04 15.73 31.53 7.00 12.94 7.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 +-10.00 -10.00 -10.00 +122.42 122.42 121.56 122.21 119.75 118.73 118.23 116.91 117.25 116.37 116.73 117.29 117.89 118.66 118.19 115.23 117.02 117.10 117.94 118.33 +117.06 116.88 116.09 113.88 114.26 115.17 115.22 115.25 114.04 113.92 113.94 112.03 112.37 112.12 110.69 111.68 106.29 107.32 112.28 112.61 +112.73 112.56 112.68 113.77 112.57 111.57 111.01 110.59 109.95 108.92 109.81 107.53 107.64 106.28 108.85 108.89 108.59 108.79 107.27 110.05 +106.73 107.89 106.35 105.24 105.04 104.52 104.18 102.40 100.96 99.65 100.77 100.49 97.83 96.30 96.04 95.64 90.27 83.52 77.59 76.65 +74.95 62.75 51.66 63.91 44.25 20.25 24.18 20.88 7.00 25.83 13.49 8.13 22.32 -10.00 -10.00 8.40 7.00 7.61 10.19 17.31 +10.61 -10.00 -10.00 +122.06 122.06 120.94 121.13 119.76 119.31 118.27 116.53 117.34 117.76 117.60 116.72 118.20 117.85 117.61 117.68 116.73 117.38 117.53 116.86 +117.18 115.90 115.86 113.98 113.97 113.31 113.53 114.32 114.59 112.91 113.43 112.40 113.21 111.25 111.16 109.24 110.91 111.25 110.82 111.97 +111.89 111.99 112.51 111.62 112.57 111.15 110.59 111.76 111.05 111.50 109.77 107.50 109.51 107.13 109.08 109.30 108.51 108.09 106.93 107.17 +108.76 108.41 106.04 106.40 105.40 104.32 103.90 104.39 100.79 102.15 102.19 99.17 98.73 97.81 97.34 99.10 95.95 96.71 88.18 89.25 +80.65 75.93 72.01 69.16 63.27 48.05 55.04 36.89 26.86 42.82 37.31 34.38 15.94 16.57 18.89 15.83 17.41 16.18 17.67 17.09 +21.14 7.00 7.00 +122.08 122.08 121.60 121.73 121.35 119.83 117.87 117.74 116.87 116.65 116.88 116.77 116.73 117.32 118.03 118.54 116.80 118.14 116.60 117.86 +116.59 117.24 117.22 114.99 113.78 115.47 115.80 114.46 114.07 113.16 112.17 113.76 112.58 108.75 108.85 108.59 109.46 110.24 111.04 111.38 +111.75 111.79 109.85 112.83 111.60 110.16 111.17 111.84 109.30 109.41 109.26 109.90 108.35 105.26 108.08 108.75 108.21 108.93 107.24 108.30 +108.29 106.98 107.51 108.07 107.50 104.89 104.66 103.40 102.48 104.46 101.98 100.97 99.17 97.48 98.55 94.79 99.77 94.89 93.29 90.91 +85.09 82.24 81.03 81.84 73.56 66.04 63.23 55.27 55.16 58.26 55.14 52.19 46.83 40.71 31.06 35.90 41.56 34.06 33.67 26.39 +30.50 26.65 26.65 +122.23 122.23 119.59 120.56 121.05 120.00 118.69 118.24 115.42 117.12 116.97 116.82 116.04 117.71 117.67 118.32 118.14 118.05 116.50 117.56 +116.79 116.59 115.75 116.28 114.07 115.59 114.24 115.17 115.54 114.19 113.72 112.75 112.33 108.66 108.11 104.50 108.14 106.83 106.85 110.92 +110.34 111.81 111.63 111.59 111.14 112.02 111.50 111.52 110.32 109.84 109.05 108.93 108.62 109.75 107.83 108.23 107.70 107.36 108.37 109.63 +107.36 107.44 107.59 106.84 107.47 105.93 104.38 104.49 103.68 104.33 100.98 103.33 100.92 101.00 98.87 97.56 97.27 101.77 95.67 94.67 +90.03 86.23 86.90 82.38 78.57 66.63 65.01 65.16 70.81 68.74 69.06 64.63 59.32 48.56 43.51 52.48 43.55 51.11 44.28 43.60 +43.83 40.12 40.12 +122.25 122.25 121.57 120.38 118.69 118.21 117.35 113.85 116.33 116.40 117.16 117.70 117.91 117.35 118.28 118.82 118.95 117.22 115.54 116.57 +117.19 116.66 116.22 115.35 115.86 114.22 114.06 115.40 114.48 113.89 112.19 111.22 110.29 111.03 109.43 107.34 107.77 108.95 108.43 108.44 +110.60 109.11 109.68 111.31 111.06 111.90 111.30 108.01 109.10 109.03 107.63 108.05 107.22 107.28 107.56 108.52 108.43 108.65 108.01 107.71 +109.49 108.67 107.47 106.97 106.23 105.95 104.90 104.90 104.75 105.06 103.92 102.59 103.24 100.94 102.01 100.19 99.76 97.77 96.08 95.70 +96.35 94.76 92.46 90.06 82.60 81.01 84.24 88.05 85.65 81.93 82.49 76.03 69.06 67.14 65.54 64.80 60.44 60.90 50.67 44.88 +53.48 48.74 48.74 +123.05 123.05 122.06 121.09 118.15 116.79 117.45 116.79 116.92 116.08 117.72 117.43 118.83 117.93 118.45 118.80 117.72 116.93 113.03 112.69 +116.38 114.86 114.76 114.76 115.84 114.97 114.17 110.56 113.05 113.25 114.61 111.63 114.23 115.51 112.35 101.84 106.18 107.50 112.58 108.47 +107.92 108.39 109.38 111.89 110.76 110.37 109.17 110.33 109.15 108.97 108.60 109.69 108.01 107.41 109.06 108.52 109.39 108.69 109.90 108.89 +109.66 107.98 108.33 106.89 106.95 105.10 104.82 105.65 106.53 104.45 103.24 103.52 101.74 100.76 101.40 100.85 101.55 98.47 98.32 97.83 +95.25 96.57 95.57 93.74 90.56 91.67 90.67 89.71 89.28 88.60 88.52 86.94 86.42 79.77 85.93 74.65 73.22 68.21 59.27 59.93 +62.01 53.17 53.17 +127.77 127.77 123.83 122.45 120.55 120.28 118.54 116.07 116.63 115.09 115.59 116.39 116.45 116.86 117.91 117.57 117.42 117.27 116.93 114.16 +115.42 115.51 116.11 115.01 114.89 112.68 113.89 114.63 114.61 114.73 112.93 111.75 109.70 109.19 108.60 105.18 107.42 109.54 112.13 111.39 +111.00 108.95 110.90 110.88 110.84 110.36 109.87 109.05 108.63 107.32 108.60 108.16 108.26 107.96 108.41 109.28 109.00 108.02 109.44 109.20 +109.92 110.79 106.95 107.49 106.01 105.12 105.96 105.91 104.52 104.47 104.43 104.37 102.52 102.47 102.45 100.28 100.94 100.75 99.46 100.11 +98.74 98.13 96.45 95.80 95.12 94.80 94.22 92.04 90.18 89.45 89.03 88.47 87.31 86.46 85.00 84.06 82.35 79.97 79.24 78.44 +79.91 78.27 78.27 +126.95 126.95 128.36 127.38 122.56 120.03 119.40 118.49 118.65 117.76 117.57 114.14 114.99 116.66 117.24 118.49 119.32 116.81 116.32 115.89 +115.16 117.31 114.97 112.55 114.46 113.76 114.92 113.59 113.45 114.46 113.80 112.93 110.48 110.07 109.03 107.80 104.27 108.17 108.44 110.02 +111.61 110.38 110.02 109.85 111.22 110.29 109.47 109.40 110.30 108.74 107.22 108.43 105.38 104.97 105.66 108.49 107.74 110.15 109.99 106.77 +108.29 108.25 108.00 105.84 105.94 106.75 106.37 105.04 105.13 105.73 103.50 102.93 104.69 102.08 103.13 101.25 100.88 102.00 100.07 99.51 +99.73 98.51 98.45 98.47 96.71 95.42 95.23 93.47 92.11 91.44 91.13 90.61 89.06 88.48 89.75 86.74 86.16 85.19 84.36 84.26 +83.12 81.69 81.69 +124.05 124.05 127.20 128.35 126.16 122.09 118.86 118.34 117.05 116.56 115.58 115.32 114.18 116.81 117.47 116.36 117.63 116.78 115.87 115.15 +115.02 114.78 115.12 114.80 114.07 113.63 113.24 110.39 113.94 113.62 113.60 113.13 112.92 112.87 111.37 109.67 108.21 108.49 107.42 108.80 +110.19 109.25 108.58 109.80 109.53 109.49 108.90 109.57 108.17 107.40 107.54 107.41 106.22 107.27 106.96 104.98 109.24 109.29 108.63 108.81 +107.98 108.61 107.99 106.63 107.33 106.64 105.78 104.89 106.37 105.48 103.89 105.50 103.52 103.44 101.38 104.54 103.47 103.41 102.64 99.17 +101.78 100.79 99.73 98.78 98.53 96.73 96.21 95.20 93.61 92.37 92.44 92.67 91.20 90.53 89.56 88.41 87.96 87.47 86.78 85.69 +84.59 84.46 84.46 +121.07 121.07 124.93 125.50 127.52 126.11 121.79 119.09 117.89 116.93 116.94 115.97 116.34 114.43 115.54 115.72 115.93 117.68 116.44 116.59 +115.63 111.93 116.23 115.02 114.20 113.21 113.13 112.08 111.99 110.29 114.32 113.05 113.74 113.32 110.84 110.13 108.69 109.79 109.76 108.65 +108.61 108.12 109.73 108.15 109.68 109.17 109.71 108.89 108.71 107.50 107.32 106.55 107.43 106.51 105.90 106.61 107.59 100.29 107.85 108.67 +109.07 106.43 106.37 107.83 107.42 107.03 105.69 107.66 105.91 105.13 105.22 104.23 106.40 104.60 103.98 104.20 103.47 102.72 101.92 102.09 +98.31 98.25 98.52 99.16 98.75 98.07 96.86 96.12 94.45 93.56 93.05 93.40 91.99 92.38 91.45 90.08 89.78 88.92 88.37 87.39 +86.17 85.98 85.98 +121.03 121.03 122.02 123.28 124.89 127.18 123.82 118.67 118.51 117.24 116.58 117.07 117.14 117.28 115.97 117.48 116.21 116.35 116.84 116.39 +117.35 115.66 115.40 113.52 114.15 115.20 113.75 112.38 109.47 110.58 112.83 113.05 112.25 110.56 110.43 110.99 108.92 108.85 110.23 109.36 +109.78 108.72 108.13 106.76 109.16 109.84 108.90 108.30 107.30 107.01 107.41 108.26 106.41 105.20 105.45 103.70 106.85 107.91 108.22 108.02 +108.27 107.50 106.36 106.74 106.40 105.95 106.20 106.77 104.85 105.72 105.18 104.74 105.58 105.12 105.02 104.00 102.53 101.77 100.00 101.02 +99.46 100.58 99.82 99.19 98.46 98.41 97.20 96.48 95.48 94.81 94.10 93.30 93.01 92.76 93.11 91.83 91.26 90.58 88.10 88.50 +87.34 87.27 87.27 +120.75 120.75 119.56 122.15 122.77 123.12 124.79 123.51 120.07 116.25 116.80 116.88 117.38 117.86 116.76 116.22 116.43 116.99 116.94 116.71 +117.38 116.15 115.59 115.63 113.21 114.03 114.37 113.82 112.34 111.93 112.23 112.45 110.63 112.41 110.29 112.11 109.73 110.72 109.11 110.20 +109.53 109.25 107.15 109.59 108.21 107.45 108.42 107.64 107.70 106.30 106.20 106.35 104.97 106.46 106.33 103.10 103.98 107.00 104.65 107.58 +107.50 107.66 106.37 106.27 104.76 103.91 100.49 105.24 105.56 105.45 105.26 106.06 103.25 103.73 103.58 103.48 101.91 102.61 101.86 101.26 +100.85 98.18 100.08 99.54 98.88 98.09 96.67 96.37 95.50 95.64 95.68 94.47 93.77 93.90 93.85 91.89 92.82 92.01 90.75 89.60 +88.38 88.34 88.34 +121.03 121.03 118.91 119.18 121.24 122.19 122.35 122.30 121.46 117.95 115.86 117.88 116.97 116.87 117.21 116.47 117.24 116.97 116.79 115.12 +115.46 117.05 115.50 116.42 114.00 112.81 112.94 113.17 114.37 113.86 112.50 111.99 113.08 111.53 114.25 111.26 110.94 110.52 108.91 110.33 +109.21 109.11 109.32 109.73 108.09 107.34 107.53 107.50 106.51 107.33 105.55 104.01 105.65 107.05 108.22 103.52 105.68 105.03 105.93 101.13 +105.54 106.75 105.26 104.83 103.75 105.30 104.86 105.27 105.79 104.46 106.42 105.48 103.96 104.05 104.03 102.53 103.00 101.96 102.18 99.59 +102.27 100.74 100.63 100.12 98.86 98.68 97.55 97.06 95.99 95.97 95.75 94.86 95.16 94.67 94.17 93.54 92.57 92.20 91.27 90.64 +90.60 90.08 90.08 +121.17 121.17 119.84 119.00 121.35 120.71 120.83 120.08 121.07 120.09 115.82 115.76 116.95 117.96 117.48 117.92 116.79 117.10 115.62 116.77 +117.33 115.74 115.00 114.84 114.08 111.60 113.96 113.57 114.52 113.24 114.04 113.46 113.59 113.02 112.53 111.49 111.50 109.48 109.84 109.81 +109.44 109.41 110.35 107.40 108.38 106.63 107.77 106.65 107.99 106.37 105.92 106.19 108.61 108.73 109.78 103.66 106.50 106.69 107.92 105.03 +105.25 105.42 104.32 105.34 105.26 102.92 104.14 105.23 104.01 103.58 105.64 103.77 105.17 103.78 104.84 103.90 103.24 102.21 101.99 101.35 +102.59 101.09 101.51 101.06 101.18 100.41 98.48 97.45 97.21 96.53 96.13 95.28 95.56 95.26 93.82 93.48 93.28 92.50 91.75 91.90 +90.95 89.97 89.97 +125.23 125.23 121.12 118.26 119.63 120.60 120.14 120.71 119.97 119.00 116.15 115.98 118.42 118.43 118.25 117.75 116.18 115.95 117.23 116.41 +117.28 115.17 115.15 114.17 114.41 113.22 113.41 113.91 112.93 114.37 113.75 112.85 112.67 113.46 112.41 112.54 111.25 110.21 111.21 110.04 +110.44 110.74 108.88 108.88 108.14 107.78 106.30 108.58 107.36 106.28 107.27 110.26 109.97 109.34 107.12 109.41 106.43 106.95 102.69 103.49 +104.01 104.03 104.56 105.69 104.23 102.33 105.19 103.99 103.73 105.51 102.90 104.42 105.32 104.12 104.70 105.02 103.53 101.90 102.90 101.90 +101.12 101.88 101.37 101.01 100.82 100.23 100.49 98.80 98.01 97.20 96.23 95.51 95.88 95.93 94.87 94.51 93.34 92.80 92.41 92.51 +90.73 89.95 89.95 +126.78 126.78 123.93 119.51 117.61 120.07 120.84 119.60 119.84 120.48 118.87 118.39 117.85 118.52 117.31 116.53 116.88 116.51 116.39 115.38 +114.57 114.80 114.28 116.45 115.01 113.57 113.34 112.27 113.35 111.53 114.18 112.18 113.05 113.32 113.40 112.68 111.07 107.38 111.28 111.16 +111.77 109.71 110.54 109.35 109.07 107.81 108.30 107.20 107.18 107.41 111.75 110.06 108.89 108.37 109.78 108.87 107.68 107.27 105.29 105.03 +104.57 103.99 105.75 102.71 104.05 105.02 104.16 103.38 104.70 103.77 102.99 105.57 103.91 103.75 103.85 103.75 104.39 102.61 102.99 105.02 +103.47 102.85 102.25 100.79 101.17 100.24 100.61 99.45 99.40 98.54 98.35 97.30 97.39 95.51 94.60 94.22 93.73 93.43 93.51 90.92 +90.66 90.45 90.45 +129.08 129.08 124.37 121.20 119.56 118.42 120.01 120.10 119.76 120.68 119.80 119.35 118.42 117.06 116.59 117.06 116.53 116.63 114.33 114.24 +113.54 114.26 114.71 114.40 113.41 113.61 114.63 114.17 114.96 112.93 113.49 113.30 113.51 112.47 112.63 110.68 110.77 111.15 111.64 112.36 +109.80 111.04 110.00 109.75 107.57 109.69 108.53 108.30 107.82 105.08 109.47 108.67 107.83 109.84 108.21 108.94 108.02 106.31 105.46 105.11 +103.87 105.44 103.28 102.76 106.07 104.95 101.72 105.09 104.36 103.62 104.85 103.43 102.66 102.89 102.52 104.05 102.61 102.70 102.23 102.32 +102.55 102.83 103.02 101.80 102.14 100.73 99.93 100.03 99.29 99.17 97.94 96.88 98.27 97.64 96.50 96.33 95.60 94.46 92.90 92.03 +91.98 91.62 91.62 +129.61 129.61 128.46 122.74 122.48 119.29 119.96 120.34 121.62 120.11 120.12 117.85 118.94 118.62 118.14 117.61 116.76 115.45 115.00 113.97 +115.43 115.15 114.59 114.34 113.71 115.57 114.71 114.82 113.91 112.64 113.75 113.43 113.02 113.03 112.17 112.23 110.93 111.40 112.11 111.07 +110.55 110.89 110.00 109.34 109.60 109.69 109.47 108.16 109.16 109.82 107.14 107.70 106.93 109.09 108.18 107.81 107.36 105.40 104.46 105.12 +105.27 103.67 103.32 105.03 107.47 103.29 105.43 104.77 102.63 101.81 103.89 103.20 103.20 103.11 102.37 102.13 102.24 102.49 101.22 102.53 +101.81 102.44 102.61 102.68 101.82 101.40 100.44 99.96 99.09 98.72 97.93 96.82 98.00 97.39 97.86 96.84 95.97 94.61 94.50 93.89 +93.57 92.74 92.74 +129.31 129.31 127.96 125.52 125.59 124.53 122.00 120.32 120.74 118.13 118.08 120.05 118.98 118.14 118.69 117.33 115.57 116.63 116.38 116.03 +113.80 115.85 114.32 114.11 115.39 114.37 114.42 113.92 113.80 111.27 114.44 112.42 113.55 112.27 112.18 111.73 110.63 110.32 111.13 111.74 +109.47 110.61 109.76 110.43 109.85 110.02 108.27 109.93 109.87 107.78 109.49 108.18 109.10 107.54 106.54 107.95 106.30 106.08 106.61 105.52 +104.36 102.99 105.61 106.36 103.48 104.55 105.95 104.42 103.20 104.46 103.09 101.83 101.95 100.53 103.66 103.01 102.33 100.01 101.87 101.90 +101.02 101.62 101.06 101.33 101.10 100.99 100.53 100.94 99.71 99.61 98.59 97.36 97.17 95.97 96.35 96.48 96.43 95.41 95.22 94.58 +94.55 94.17 94.17 +125.69 125.69 125.38 126.77 127.14 123.45 122.83 119.90 119.61 118.52 117.90 118.48 119.64 117.59 117.27 117.48 115.81 117.20 115.01 115.32 +115.79 114.03 115.11 115.11 115.53 113.94 111.77 113.99 113.40 114.14 113.64 112.88 111.43 112.00 113.19 112.67 111.84 111.67 112.27 110.28 +110.27 108.99 110.09 110.61 110.80 108.52 110.87 110.28 110.57 109.61 108.22 107.07 108.02 107.98 107.76 107.43 106.02 106.08 106.78 103.33 +104.15 104.31 104.44 101.95 104.50 105.08 105.58 103.11 105.57 104.34 103.36 103.24 103.04 102.40 102.44 101.19 101.88 100.96 102.01 100.87 +101.35 101.51 100.68 100.52 100.01 99.52 99.37 99.12 99.52 100.38 98.81 98.45 97.65 97.31 96.09 92.77 94.86 94.83 95.01 94.84 +94.41 93.91 93.91 +123.76 123.76 125.05 123.70 122.06 122.16 122.31 120.09 121.19 119.10 116.67 117.57 116.45 117.10 117.04 116.29 117.29 115.87 116.26 115.15 +115.30 115.48 114.74 115.83 114.31 114.21 114.42 114.02 114.22 113.52 112.70 112.72 112.54 112.45 112.53 111.88 110.99 110.88 110.22 110.95 +110.14 109.33 109.86 110.15 108.88 110.83 111.65 110.26 109.46 108.26 107.79 108.43 107.90 107.81 108.13 106.97 107.42 106.88 104.32 104.37 +104.74 105.08 102.81 102.75 106.17 106.17 103.10 103.33 104.94 103.26 103.46 103.45 103.18 102.25 102.72 101.79 101.64 100.37 101.19 100.30 +100.62 100.41 100.08 99.94 99.99 98.57 98.52 98.20 97.43 97.43 97.48 98.03 98.53 97.75 96.28 96.28 95.09 95.30 94.56 94.58 +93.30 93.00 93.00 +124.79 124.79 123.55 122.12 121.03 119.62 121.28 122.18 120.87 120.79 118.98 116.92 116.06 117.25 117.97 115.87 114.19 115.83 113.20 114.76 +115.34 115.41 115.83 113.76 114.14 112.94 115.38 114.00 114.03 111.74 112.17 112.77 112.83 112.08 112.04 111.32 112.33 109.90 110.83 109.83 +109.94 110.69 110.62 109.32 109.80 110.77 110.85 109.00 109.29 108.00 108.86 107.87 107.63 108.52 106.93 108.02 107.34 107.41 105.97 105.33 +105.87 105.31 102.55 102.79 106.02 104.64 104.70 105.70 103.91 103.85 104.81 104.89 104.18 103.80 102.70 101.65 101.57 100.99 100.86 101.17 +102.11 101.20 100.18 100.22 99.83 99.37 98.71 98.31 97.68 97.78 97.17 97.09 96.26 95.81 97.13 96.30 97.28 95.95 95.89 95.29 +94.40 93.58 93.58 +123.85 123.85 122.39 122.94 122.22 122.18 119.82 120.75 121.12 119.70 120.15 118.34 116.54 117.05 114.90 115.76 117.09 115.09 116.32 116.20 +116.03 114.31 113.91 114.22 114.28 115.98 114.11 113.36 112.54 113.42 113.09 112.53 112.76 111.60 112.04 112.12 110.54 108.62 109.31 107.60 +110.33 110.60 109.34 109.25 112.77 110.75 110.43 110.18 108.29 109.57 107.81 107.15 108.00 106.44 107.55 107.57 107.42 106.02 106.49 106.56 +104.76 103.98 103.99 103.74 103.07 101.11 105.34 105.50 104.21 103.54 104.18 103.58 103.30 102.75 102.10 102.12 101.70 101.92 101.64 101.28 +101.93 100.29 100.27 99.95 99.44 99.33 99.29 98.56 97.74 97.46 97.16 97.39 97.14 96.85 95.94 96.62 95.68 96.62 95.76 95.97 +95.04 94.70 94.70 +121.64 121.64 122.18 122.67 121.96 121.16 121.29 120.28 119.22 119.62 119.09 120.22 116.78 114.74 116.01 115.36 114.78 116.27 116.54 117.27 +113.72 114.62 113.93 114.11 114.17 114.01 114.56 112.43 112.71 113.47 112.45 112.54 112.48 112.12 112.35 110.95 109.67 110.41 110.18 111.23 +109.81 110.81 109.93 112.14 110.41 109.54 109.13 107.91 110.39 108.83 108.23 108.71 106.94 107.09 107.74 107.51 106.16 106.46 107.15 104.90 +104.60 104.72 105.10 104.54 101.83 100.29 101.66 105.75 104.15 105.25 104.53 104.34 103.15 103.25 102.68 102.95 101.69 102.99 101.75 100.88 +102.03 101.14 100.38 100.00 99.49 99.10 98.79 98.15 97.88 97.68 96.98 97.30 96.97 96.47 96.83 96.07 96.41 95.54 95.57 95.30 +94.67 95.49 95.49 +122.01 122.01 121.78 120.53 121.25 121.82 119.18 119.46 119.48 120.08 119.74 118.02 116.42 112.58 114.42 113.95 116.40 116.75 117.22 115.13 +115.76 114.68 114.56 114.81 113.83 113.83 112.69 113.25 113.03 112.99 113.02 111.33 112.04 112.19 110.86 111.57 110.14 109.31 111.99 106.94 +110.15 109.53 111.70 111.20 109.39 109.86 109.64 109.96 109.01 108.69 108.19 107.45 107.97 107.35 107.45 105.99 105.93 106.89 108.07 105.88 +105.10 105.69 104.51 102.57 102.18 103.39 101.81 100.90 104.33 104.32 104.68 102.54 101.99 102.79 103.18 101.94 101.59 101.57 101.81 101.46 +102.20 101.24 101.17 101.07 99.36 99.26 99.03 98.35 97.78 97.69 97.30 97.35 96.86 96.89 96.16 96.81 95.82 95.79 95.92 94.23 +95.31 95.57 95.57 +122.38 122.38 120.63 120.81 119.86 117.23 119.76 117.53 119.45 119.22 116.91 118.04 117.37 116.38 115.85 115.85 117.10 114.35 116.03 115.92 +114.36 115.16 114.47 114.02 113.21 112.61 113.28 113.00 113.07 113.05 112.14 112.20 112.10 110.88 111.99 110.50 110.55 112.41 110.37 111.05 +109.24 111.55 111.95 110.65 109.24 109.75 110.48 109.21 107.71 106.47 107.83 107.25 107.97 107.79 105.30 106.32 106.65 107.36 106.68 105.92 +105.91 106.57 104.41 103.09 103.18 103.42 101.22 100.90 101.87 106.72 105.76 102.93 102.60 101.61 100.04 101.60 101.87 101.83 102.03 102.39 +101.86 101.27 100.03 100.29 99.65 99.27 99.12 98.71 98.58 97.84 97.58 97.40 97.50 96.95 97.11 96.34 96.52 96.86 95.91 95.73 +95.20 95.37 95.37 +121.63 121.63 121.23 119.84 118.72 119.39 119.01 117.64 117.89 117.61 119.61 117.67 117.45 115.60 116.08 116.26 115.30 115.50 115.63 115.36 +115.74 115.58 114.71 113.03 113.12 113.31 112.92 113.10 112.53 111.96 111.68 112.41 110.87 112.05 108.20 111.19 112.20 110.49 110.74 109.35 +111.30 110.21 110.13 108.73 110.27 109.73 110.00 108.39 108.44 107.11 108.20 107.92 107.78 105.79 105.34 106.27 107.50 106.22 104.89 106.09 +106.71 105.91 103.83 103.86 104.07 104.99 103.12 101.41 98.42 102.31 108.04 108.15 104.59 104.55 101.80 101.89 100.93 102.53 101.27 102.96 +101.99 102.06 100.97 99.74 100.06 100.89 100.65 99.10 99.10 96.74 97.52 98.23 97.94 97.53 96.83 96.92 97.00 95.96 95.52 95.79 +95.88 94.88 94.88 +120.37 120.37 119.33 120.21 119.24 117.51 118.07 117.02 118.65 117.48 117.28 117.82 117.16 118.47 117.50 114.31 115.56 114.86 114.87 117.17 +113.46 113.69 113.34 112.41 113.33 113.07 112.96 113.37 111.26 111.91 112.68 110.28 110.78 110.38 110.44 112.02 110.81 111.05 107.43 110.98 +109.89 110.23 110.00 109.70 108.84 110.25 109.43 107.53 108.52 108.36 106.58 107.28 106.98 106.61 106.59 107.40 105.61 106.24 106.28 107.44 +106.18 104.36 103.66 105.26 104.23 102.90 102.50 102.51 102.99 99.50 99.95 104.78 114.49 105.52 102.26 101.95 100.84 100.85 100.54 102.03 +101.26 101.56 101.44 100.75 99.50 98.87 99.59 91.00 100.42 98.68 97.26 97.72 96.66 96.31 96.75 96.59 96.55 95.70 95.42 96.02 +96.71 98.20 98.20 +119.77 119.77 119.45 117.20 119.03 117.80 114.72 117.42 118.13 117.44 116.55 117.42 117.99 117.51 111.93 115.73 113.59 114.52 116.49 114.78 +114.86 112.81 113.52 113.71 113.67 113.15 113.37 111.70 112.45 113.05 111.06 111.38 110.69 110.35 111.86 109.90 110.67 109.66 110.80 110.22 +107.80 107.85 109.33 107.80 109.25 108.63 108.48 109.64 106.88 106.99 108.28 106.90 107.14 107.31 106.78 105.86 104.26 106.08 106.70 106.79 +104.81 103.27 103.71 104.22 104.72 103.55 101.79 102.64 102.68 102.72 101.49 101.12 99.67 111.22 125.45 112.68 102.20 102.99 100.08 100.03 +99.31 100.04 100.70 99.61 96.33 99.69 99.01 98.92 99.63 99.88 99.89 95.33 95.37 95.34 95.36 95.87 98.70 98.90 98.91 98.45 +97.64 97.98 97.98 +119.51 119.51 119.09 118.62 117.20 117.06 117.76 117.95 116.97 117.25 115.46 117.90 115.91 113.58 115.14 114.07 114.90 112.79 113.94 114.17 +113.04 112.05 114.06 110.96 113.35 114.27 111.81 112.69 112.84 111.45 111.19 111.13 110.52 111.85 111.48 111.01 109.52 109.38 108.48 110.89 +109.37 109.67 108.88 107.35 109.25 107.45 108.06 107.82 105.05 105.71 106.78 106.22 107.17 104.56 106.23 105.07 105.52 105.84 106.48 105.25 +104.75 103.52 104.33 104.81 103.06 102.87 101.80 103.69 101.17 101.18 101.80 102.03 98.25 98.80 96.71 104.13 121.85 120.43 104.27 101.42 +99.42 98.48 99.13 98.88 99.29 98.32 98.54 99.57 98.37 98.18 96.54 95.32 95.33 95.33 96.70 96.17 96.18 98.88 98.90 98.94 +98.81 98.14 98.14 +119.37 119.37 118.68 117.23 118.30 117.25 116.18 116.23 117.04 117.19 117.25 117.43 117.30 116.29 115.48 114.86 113.89 112.31 113.95 112.95 +114.03 114.97 114.19 113.36 113.48 112.63 111.73 112.88 109.53 112.33 111.44 110.56 111.90 111.26 111.21 110.35 110.09 111.22 110.54 109.66 +109.08 109.06 109.12 108.79 107.29 107.93 108.12 107.12 107.17 106.38 106.30 106.44 106.77 107.39 106.04 105.87 106.35 107.10 106.51 104.75 +104.38 104.84 104.29 104.39 103.80 102.06 102.59 102.44 102.11 100.97 101.47 101.34 100.70 99.76 98.23 96.23 97.48 99.82 106.51 112.80 +108.56 102.92 99.21 95.72 98.09 97.97 97.23 98.40 98.31 97.04 97.15 97.21 97.19 97.12 97.14 96.15 96.16 99.44 98.89 98.77 +98.46 97.39 97.39 +118.78 118.78 117.84 118.03 117.14 115.91 116.45 116.73 116.28 116.61 114.07 117.48 115.34 115.23 115.09 114.49 114.04 112.82 111.52 113.32 +113.85 114.38 113.47 112.95 111.54 112.58 112.72 111.38 112.31 111.53 111.78 109.89 111.75 111.70 111.07 109.56 111.93 109.27 110.03 109.47 +108.23 108.61 109.31 108.54 107.50 106.89 107.17 107.69 107.26 107.82 107.61 106.77 107.09 101.35 105.03 105.23 104.56 106.81 105.41 105.13 +104.31 103.85 106.04 103.79 103.20 103.55 103.78 100.46 100.67 101.84 102.34 100.15 99.02 99.64 99.14 99.52 98.21 96.38 97.37 96.93 +96.15 100.34 101.51 96.15 98.07 97.63 97.07 97.29 98.25 97.65 97.91 97.03 97.22 97.05 97.11 96.15 96.16 99.68 99.61 98.61 +98.44 97.36 97.36 +119.06 119.06 119.81 116.85 116.87 117.05 117.21 116.90 116.17 116.03 120.10 114.49 113.75 114.95 114.65 113.78 113.62 112.28 111.73 113.20 +112.74 112.68 113.21 111.01 113.06 113.15 111.10 113.17 111.63 110.62 108.89 112.12 111.04 112.17 110.25 111.80 110.72 111.03 109.28 109.54 +109.25 106.61 109.26 107.24 107.05 107.19 105.84 105.46 106.53 106.85 106.41 107.19 105.94 105.58 105.07 105.70 104.06 105.13 104.72 103.88 +104.96 104.33 104.29 103.63 102.84 103.00 104.10 104.53 99.69 100.21 100.26 100.68 99.30 98.27 98.16 98.38 98.08 95.79 96.96 97.51 +96.84 95.97 95.22 96.17 96.37 97.51 96.11 95.77 98.10 97.41 97.51 96.99 97.33 97.13 96.10 96.35 96.56 99.16 98.30 98.54 +96.56 97.24 97.24 +118.52 118.52 117.76 115.56 116.96 117.24 117.22 116.21 116.80 115.97 114.65 114.11 114.21 113.03 114.30 113.01 112.18 112.94 113.11 112.30 +111.84 111.56 111.12 112.59 112.44 109.89 113.46 112.00 111.85 110.26 112.26 111.56 111.76 110.37 110.98 110.56 111.75 110.17 109.13 107.29 +108.23 106.21 108.69 108.70 107.23 108.64 107.37 103.92 106.16 106.69 106.79 107.27 105.36 105.73 104.99 104.80 105.25 104.13 104.22 104.61 +103.68 105.09 105.35 104.24 104.22 104.19 102.51 102.57 103.26 102.49 101.63 100.33 97.44 98.61 97.94 97.69 97.91 97.39 97.46 98.10 +97.53 96.97 96.28 96.03 95.99 95.12 95.71 95.27 96.19 96.01 97.46 97.76 97.08 97.67 96.50 96.82 97.32 96.38 97.99 95.43 +95.96 95.03 95.03 +117.81 117.81 117.62 118.86 117.56 117.21 116.90 117.42 116.55 116.98 115.45 114.27 113.84 113.95 112.62 112.19 113.09 113.20 112.41 110.78 +110.74 109.41 110.72 112.45 111.59 112.81 111.33 111.83 110.67 112.16 110.79 110.70 109.40 110.48 111.46 111.65 110.93 109.63 109.56 109.47 +109.22 109.48 108.67 108.69 109.04 107.81 108.04 107.09 106.70 105.86 105.86 106.14 106.51 106.12 105.85 104.55 105.77 105.49 105.15 105.30 +105.04 105.14 104.67 103.35 104.62 104.47 103.50 102.91 102.43 102.29 101.94 101.66 99.40 99.22 98.91 98.48 97.80 97.65 97.77 97.39 +97.03 97.02 96.37 96.44 96.51 95.11 95.76 95.43 95.84 95.16 95.93 96.64 96.87 96.96 97.37 97.96 96.32 97.38 95.96 97.41 +95.55 94.74 94.74 +117.81 117.81 117.62 118.86 117.56 117.21 116.90 117.42 116.55 116.98 115.45 114.27 113.84 113.95 112.62 112.19 113.09 113.20 112.41 110.78 +110.74 109.41 110.72 112.45 111.59 112.81 111.33 111.83 110.67 112.16 110.79 110.70 109.40 110.48 111.46 111.65 110.93 109.63 109.56 109.47 +109.22 109.48 108.67 108.69 109.04 107.81 108.04 107.09 106.70 105.86 105.86 106.14 106.51 106.12 105.85 104.55 105.77 105.49 105.15 105.30 +105.04 105.14 104.67 103.35 104.62 104.47 103.50 102.91 102.43 102.29 101.94 101.66 99.40 99.22 98.91 98.48 97.80 97.65 97.77 97.39 +97.03 97.02 96.37 96.44 96.51 95.11 95.76 95.43 95.84 95.16 95.93 96.64 96.87 96.96 97.37 97.96 96.32 97.38 95.96 97.41 +95.55 94.74 94.74 diff --git a/regtests/ww3_tp2.8/input/iro_1p5k.bot b/regtests/ww3_tp2.8/input/iro_1p5k.bot index 3243ab139..b858fa28b 100644 --- a/regtests/ww3_tp2.8/input/iro_1p5k.bot +++ b/regtests/ww3_tp2.8/input/iro_1p5k.bot @@ -1,714 +1,714 @@ - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 146.38 148.51 143.80 148.11 144.13 147.17 146.53 146.09 143.07 143.81 144.73 146.63 146.16 146.55 144.34 141.64 141.53 139.39 136.69 - 137.43 136.69 135.68 135.18 134.48 136.63 137.75 136.70 137.07 136.78 136.00 135.63 135.23 134.60 134.07 132.86 133.31 132.32 131.50 131.82 - 131.76 130.68 130.91 130.70 129.23 128.79 129.27 127.42 127.71 128.14 128.56 128.98 128.60 127.60 127.81 127.24 126.21 124.46 125.15 124.46 - 123.42 122.92 120.16 118.50 118.34 116.78 116.85 116.80 115.35 114.74 115.19 114.26 114.46 113.97 113.48 112.33 112.95 110.62 111.51 111.90 - 111.26 110.22 108.90 108.23 107.87 106.88 106.55 105.54 104.44 104.30 103.99 103.14 102.07 101.82 99.36 98.70 97.92 97.14 96.03 95.52 - 94.54 93.13 -10.00 - -10.00 153.46 148.42 141.56 143.96 146.03 144.23 145.78 146.07 146.59 145.54 145.06 145.72 144.27 142.90 140.15 142.78 140.34 139.53 138.03 - 136.61 136.89 135.77 134.84 135.12 136.60 137.07 136.58 135.81 135.96 135.79 135.10 134.83 134.12 132.93 132.84 132.41 131.74 131.48 131.87 - 131.20 130.97 130.21 130.26 129.85 128.70 127.55 129.61 128.19 128.49 128.60 128.71 128.64 128.29 127.59 125.91 125.31 125.05 124.90 123.65 - 122.76 121.61 120.65 117.78 116.51 117.70 118.41 117.99 117.35 116.93 116.28 115.31 114.47 113.93 112.61 112.20 112.09 112.12 111.89 110.88 - 110.86 110.23 108.88 107.87 107.31 106.01 106.09 104.21 103.49 103.77 103.24 102.32 100.83 100.70 98.83 97.62 96.87 96.08 94.58 94.30 - 91.32 91.12 -10.00 - -10.00 152.58 148.10 144.65 144.97 142.53 144.91 142.93 145.51 147.56 143.96 142.81 143.85 143.21 142.13 140.89 140.57 139.26 139.94 138.74 - 137.49 136.33 135.36 136.22 135.39 136.34 136.59 136.25 135.69 135.17 134.39 134.82 134.00 133.71 132.17 131.92 132.68 131.44 132.35 131.87 - 131.07 130.95 130.87 129.80 129.93 129.35 129.26 127.70 128.41 127.15 128.61 128.17 127.08 127.14 126.42 125.32 125.07 124.80 124.23 122.92 - 121.76 121.80 121.34 119.90 118.50 118.23 118.06 117.50 117.70 117.56 115.92 115.11 115.66 114.19 113.43 112.86 111.71 111.38 110.89 109.97 - 109.40 108.21 107.80 106.19 105.53 104.44 104.19 104.74 102.17 102.20 101.57 100.07 99.30 98.75 97.12 95.91 95.36 94.06 93.18 90.91 - 89.73 88.07 -10.00 - -10.00 152.97 149.53 146.70 139.69 143.00 145.29 139.82 143.01 144.38 139.94 144.69 144.06 143.88 142.30 141.83 141.01 139.74 139.28 138.24 - 136.85 136.85 135.54 134.63 135.01 136.28 135.80 135.59 134.13 134.41 134.33 132.80 134.00 133.26 131.89 132.10 131.88 132.04 131.93 131.87 - 131.56 131.26 130.40 129.84 130.03 129.69 129.27 129.15 129.62 127.80 126.93 126.34 126.57 125.65 125.85 125.43 125.26 124.66 123.86 122.57 - 122.38 121.56 120.96 120.40 118.53 118.26 118.16 118.25 117.29 115.49 114.27 113.55 113.70 113.09 112.63 111.22 110.90 109.55 109.60 108.39 - 107.29 101.76 103.58 104.62 103.69 102.36 101.94 102.54 100.44 99.37 98.92 97.90 97.03 96.03 94.96 94.68 93.22 91.87 91.15 88.69 - 86.85 84.65 -10.00 - -10.00 153.38 150.35 147.12 140.51 141.72 141.95 139.79 136.88 140.26 141.50 144.34 144.41 143.12 141.37 140.76 140.33 139.12 138.23 137.06 - 136.53 136.15 134.98 134.72 135.27 135.79 134.65 133.96 134.50 133.87 134.16 133.50 133.53 133.86 132.76 132.32 132.25 132.89 132.11 131.70 - 131.45 131.82 130.46 130.39 129.34 129.22 129.44 128.70 128.34 127.35 126.31 126.33 125.65 125.93 125.81 125.25 125.05 124.77 123.60 122.01 - 121.85 120.88 120.40 120.00 118.18 117.57 117.58 116.81 115.80 113.66 112.56 110.20 110.55 110.19 109.11 108.96 108.94 107.58 106.18 105.69 - 100.76 95.41 100.46 101.55 100.43 99.50 97.82 97.20 94.29 93.70 94.49 93.44 92.92 92.84 91.88 91.70 91.17 90.56 87.60 85.45 - 83.78 81.93 -10.00 - -10.00 153.15 152.63 144.81 144.62 143.50 145.46 142.42 136.35 140.90 141.10 143.91 143.73 141.23 141.47 140.34 141.76 137.31 137.44 136.01 - 135.31 135.53 135.33 134.36 134.85 134.93 134.51 134.08 134.07 134.76 133.93 133.84 133.81 133.48 132.91 132.42 131.89 132.15 132.40 131.90 - 131.50 131.18 130.70 129.70 129.79 129.63 128.69 127.85 127.35 125.97 124.94 124.02 124.47 124.62 123.60 124.97 123.71 122.98 122.74 121.58 - 121.48 120.37 119.29 119.45 118.16 117.59 116.74 114.97 113.79 111.91 108.30 108.45 108.19 107.02 105.33 105.56 104.94 104.32 97.03 95.57 - 96.41 92.68 95.52 96.28 95.47 95.23 92.49 88.94 88.22 81.50 79.43 82.35 86.93 86.89 88.38 87.93 87.37 75.53 69.71 74.22 - 77.37 76.47 -10.00 - -10.00 152.24 150.77 146.73 146.32 144.94 143.74 138.57 134.72 136.58 138.25 141.86 142.33 141.64 139.25 139.37 138.41 136.89 136.20 136.33 - 135.46 135.69 134.52 135.50 134.83 133.76 133.80 133.73 133.82 133.87 133.83 133.85 133.78 132.75 132.34 132.54 131.34 130.92 132.22 131.91 - 130.00 129.36 128.37 128.93 127.82 128.51 127.83 126.52 126.80 125.95 125.25 125.13 124.82 124.56 124.63 124.59 123.65 122.98 122.38 121.31 - 120.59 119.93 119.38 118.49 116.76 115.54 114.69 113.48 111.76 106.17 103.07 103.20 104.09 101.04 103.75 103.46 102.68 100.99 94.83 87.19 - 92.50 95.68 95.22 87.63 88.38 91.72 86.48 87.82 83.65 83.46 80.01 80.32 84.60 84.40 84.32 81.91 76.77 66.47 59.95 54.65 - 60.88 56.93 -10.00 - -10.00 152.27 151.16 149.53 146.08 144.67 141.62 135.08 132.85 136.56 141.83 142.28 143.42 139.93 137.99 137.73 137.54 135.88 136.23 133.90 - 135.24 134.63 134.71 134.08 133.19 133.86 132.72 133.75 133.58 132.99 132.56 133.13 132.86 132.62 132.07 132.02 131.06 131.73 131.45 130.58 - 129.10 128.19 127.91 128.26 127.73 126.89 127.15 126.61 126.21 125.11 125.60 125.26 125.26 123.93 122.94 122.83 122.27 121.89 121.65 120.94 - 119.52 117.79 117.40 116.05 115.11 114.17 112.80 109.14 106.95 105.90 102.03 100.90 97.52 99.13 100.96 101.29 99.91 98.63 96.99 94.61 - 95.30 94.08 92.63 87.66 86.00 89.41 86.92 86.10 83.50 85.07 83.84 84.50 82.69 82.08 76.26 68.74 55.32 48.97 48.28 44.00 - 39.35 45.29 -10.00 - -10.00 152.59 151.32 148.51 145.83 144.75 141.18 136.44 131.58 134.82 141.38 141.35 139.46 139.57 137.99 137.31 136.39 136.90 136.74 135.59 - 134.97 134.09 134.45 133.66 133.14 132.86 132.69 132.44 131.83 131.90 131.66 131.63 131.95 131.99 132.18 131.82 131.11 130.83 130.20 130.67 - 129.66 129.47 128.38 127.68 127.02 126.40 126.21 126.40 125.51 125.53 124.62 124.71 124.25 122.83 122.11 122.16 121.56 120.90 119.84 118.63 - 117.54 116.32 115.82 114.24 112.81 110.18 108.35 105.49 103.22 97.45 94.93 97.10 98.09 98.33 97.58 97.37 96.22 95.70 92.71 91.46 - 91.06 91.95 85.25 83.62 86.59 87.37 84.46 83.66 84.07 82.67 81.03 79.81 77.40 75.37 55.80 44.84 42.04 40.61 33.52 33.97 - 33.61 33.22 -10.00 - -10.00 152.55 149.86 148.55 146.18 143.66 136.03 138.36 134.22 131.46 139.70 140.66 139.26 138.22 137.41 137.22 137.66 137.44 137.15 136.43 - 135.98 134.34 133.51 132.81 132.98 132.69 132.45 133.16 132.32 132.02 131.23 131.54 131.18 131.86 132.05 131.28 130.83 130.93 129.63 129.48 - 129.13 128.88 128.13 127.82 125.98 126.00 125.73 125.80 125.18 124.55 124.12 123.58 122.68 121.34 119.51 118.50 117.97 118.73 117.81 116.58 - 113.32 113.17 111.93 110.69 109.81 107.57 105.73 102.70 101.18 97.59 94.81 88.93 89.05 93.04 93.51 92.57 87.39 80.03 84.09 83.92 - 84.04 87.49 86.41 83.83 85.19 82.94 82.32 81.45 81.65 80.34 76.86 71.61 68.52 66.23 32.89 24.19 19.68 14.30 12.18 23.42 - 26.95 27.21 -10.00 - -10.00 149.45 148.23 146.82 144.86 142.58 139.64 139.98 130.48 131.96 138.74 139.62 138.09 136.94 136.99 136.83 137.80 137.68 136.37 135.06 - 133.79 134.06 133.51 130.84 132.32 132.30 132.85 132.80 131.87 131.62 131.85 131.84 131.20 131.57 131.78 130.96 129.68 129.65 129.77 129.04 - 128.67 128.08 127.42 127.60 126.53 125.96 125.83 124.80 124.93 124.45 123.01 121.68 117.66 118.16 117.29 114.35 115.41 115.67 113.07 113.17 - 110.40 107.98 104.56 105.00 104.42 103.77 102.55 101.29 100.05 98.07 92.78 90.17 87.93 86.73 85.25 87.42 86.60 78.30 79.53 80.65 - 76.04 77.06 79.76 81.07 79.78 81.77 80.30 81.07 79.06 75.59 69.54 56.09 39.23 22.68 7.15 18.85 23.62 7.00 8.62 12.35 - 21.92 17.79 -10.00 - -10.00 149.02 147.33 148.52 144.68 142.63 140.27 136.26 132.13 133.78 137.98 138.96 137.69 137.20 136.55 137.11 137.05 136.56 135.87 134.70 - 133.68 132.93 132.52 132.84 132.59 132.78 132.81 132.38 132.02 131.14 131.25 131.74 131.25 130.89 130.58 130.05 129.19 128.90 128.99 128.48 - 127.17 126.94 126.11 126.31 126.78 125.98 125.18 124.20 123.62 122.12 120.97 119.86 117.79 114.45 113.34 111.38 110.69 108.00 109.64 109.04 - 106.53 104.49 100.44 99.73 100.34 98.39 98.45 97.97 98.08 96.45 94.31 91.89 90.98 91.53 90.49 88.88 87.12 86.94 84.85 83.21 - 81.08 75.81 75.26 75.51 76.55 77.60 76.96 70.47 73.13 71.44 62.28 27.08 7.00 7.00 7.00 7.00 11.13 -10.00 -10.00 8.21 - 10.43 10.12 -10.00 - -10.00 148.83 148.36 148.54 145.56 142.17 137.93 137.84 136.37 132.38 138.49 138.40 137.12 136.10 136.04 136.91 137.08 136.26 136.35 133.73 - 133.55 133.55 132.36 131.75 132.25 132.81 131.69 131.87 131.38 131.83 131.48 131.32 131.67 130.89 129.64 129.30 128.27 128.03 128.55 128.00 - 127.03 126.95 125.89 126.00 126.01 124.71 124.07 123.05 121.64 120.37 119.35 118.63 116.68 114.29 109.25 106.63 106.70 105.04 104.42 104.05 - 101.78 96.82 98.32 91.79 95.11 94.55 95.32 89.01 92.01 89.73 93.28 92.70 91.64 89.78 89.22 88.29 87.42 86.03 80.29 78.23 - 81.69 77.82 76.63 74.65 71.41 71.00 75.75 67.79 58.98 65.46 51.07 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 148.37 146.20 147.63 145.13 142.68 137.44 137.82 135.26 134.47 137.73 138.25 137.20 136.56 136.52 137.40 136.45 135.20 135.19 134.27 - 133.36 132.80 132.75 132.78 133.60 133.18 131.71 130.94 131.69 131.01 131.75 131.38 130.50 130.01 129.90 129.15 128.62 127.92 128.23 127.63 - 126.98 126.56 126.01 125.45 125.05 122.33 119.74 119.75 119.09 112.93 116.09 115.68 112.15 109.97 107.25 103.60 101.78 101.37 99.56 99.88 - 98.54 98.34 95.30 93.65 91.15 87.12 84.40 86.60 82.26 87.54 88.50 88.20 87.70 87.47 86.39 85.48 83.91 82.20 80.91 82.19 - 79.40 79.42 77.82 75.78 73.92 71.57 67.08 68.73 62.93 56.41 40.67 22.16 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 147.31 145.78 145.57 142.13 141.08 138.09 136.63 134.76 137.79 137.93 137.73 136.49 136.32 136.62 136.97 136.41 135.21 134.42 132.91 - 132.69 132.83 132.57 131.96 133.06 132.41 131.83 131.74 131.31 131.08 131.39 130.35 129.18 129.90 128.63 129.47 128.17 127.46 126.93 127.18 - 126.90 126.73 125.97 125.05 124.43 119.54 110.07 112.85 111.81 111.60 110.95 107.16 106.73 100.48 100.45 98.40 94.47 95.59 94.60 93.14 - 94.87 92.89 92.43 90.08 88.46 85.86 85.79 85.08 81.99 81.41 82.93 83.18 84.64 81.02 82.86 75.84 80.38 78.77 79.95 79.72 - 78.77 78.99 78.20 76.17 74.45 72.92 67.09 63.56 58.66 51.00 39.21 25.67 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 146.77 144.42 143.53 140.81 140.33 136.73 136.70 136.29 137.89 137.87 137.41 136.38 135.85 135.34 135.32 134.85 134.48 133.57 132.57 - 132.66 132.53 132.77 131.98 132.40 131.84 131.49 131.70 131.84 131.14 131.37 129.81 128.51 128.93 128.76 127.97 127.47 126.64 126.45 126.15 - 126.14 125.63 125.24 124.61 123.75 120.80 116.05 107.43 106.24 107.00 104.94 94.77 74.56 90.07 92.72 90.59 86.43 89.26 89.47 89.34 - 89.79 87.16 87.28 83.77 77.04 70.92 73.56 73.31 77.71 64.83 74.60 74.25 75.33 77.13 78.76 78.78 78.07 73.81 77.91 77.47 - 78.06 77.62 77.13 75.69 73.58 70.82 65.52 59.36 54.79 50.01 37.82 25.70 14.23 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 145.59 145.42 143.10 141.50 140.25 140.26 139.41 136.92 137.37 137.20 137.26 136.85 135.77 133.99 134.40 133.37 133.41 133.64 132.37 - 132.88 132.86 132.28 131.87 131.44 131.07 131.80 130.16 131.34 131.02 130.70 129.91 129.26 129.10 128.42 127.88 127.12 126.80 126.27 126.49 - 125.26 125.22 124.91 124.10 118.74 116.62 109.88 105.64 96.63 92.91 93.89 84.53 66.78 81.48 84.44 80.95 82.25 83.08 84.27 84.31 - 85.80 81.33 82.45 81.15 81.05 79.65 66.98 67.62 63.31 63.09 65.29 68.17 69.89 72.53 66.34 74.54 74.25 76.65 75.82 76.78 - 76.19 76.50 75.75 74.37 72.14 68.15 63.78 59.08 52.91 47.53 37.80 24.54 12.96 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 144.88 144.67 140.64 142.10 142.04 139.45 138.95 137.65 136.58 137.76 134.59 135.04 134.90 135.40 134.74 133.19 131.66 131.33 131.95 - 132.15 132.39 131.71 131.14 131.91 131.54 131.37 130.87 130.78 130.33 130.05 128.98 128.90 128.50 127.22 126.62 127.14 131.44 126.02 125.10 - 124.76 124.18 124.00 122.64 117.69 105.12 85.46 81.08 80.84 84.91 81.16 73.85 71.55 66.82 74.34 79.52 78.21 79.93 81.05 75.71 - 79.80 78.81 78.39 78.69 76.92 72.19 69.42 64.29 60.36 61.49 64.44 64.44 65.64 65.33 65.32 67.03 70.18 71.64 73.75 72.63 - 74.43 74.59 74.16 72.61 66.76 55.39 60.05 56.11 51.49 44.79 35.37 21.32 10.57 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 142.65 142.25 143.21 140.81 139.51 139.30 137.75 136.56 135.89 138.05 136.50 134.35 133.64 132.96 132.43 133.61 131.92 131.44 131.64 - 131.89 132.09 131.93 131.82 132.15 131.19 130.93 131.12 130.29 129.93 129.49 128.28 128.18 127.85 127.44 127.08 125.98 126.57 125.52 124.89 - 123.94 123.48 122.43 119.36 112.29 93.18 76.26 70.84 76.35 71.53 69.46 67.83 66.65 64.58 64.77 70.03 71.26 70.44 69.16 70.47 - 75.17 74.20 69.16 60.65 57.84 57.35 59.35 54.43 54.72 57.12 61.33 57.43 56.88 59.18 59.65 62.21 65.60 68.51 69.46 70.52 - 71.28 72.41 71.12 68.06 48.75 46.62 54.11 51.95 47.86 41.52 31.50 18.11 7.22 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 144.04 142.46 142.06 141.44 139.45 138.75 137.60 137.08 137.75 136.74 135.58 134.84 133.81 132.59 131.44 130.91 130.01 131.88 132.58 - 132.44 132.84 131.87 131.65 132.25 130.90 131.21 131.12 130.57 129.92 128.96 128.39 127.71 126.96 127.11 126.63 125.78 125.28 124.91 123.34 - 119.89 117.34 114.55 114.86 110.97 96.66 78.26 67.03 75.04 69.90 70.57 70.48 69.02 64.68 63.50 64.92 68.63 68.87 68.28 66.74 - 64.24 69.67 66.50 60.48 58.13 58.36 52.19 54.25 54.99 52.67 56.79 52.28 52.78 53.08 54.22 56.35 58.22 63.32 65.54 66.43 - 67.59 68.18 66.93 58.67 40.57 47.96 49.27 48.50 44.20 37.97 27.22 14.47 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 142.75 141.95 141.05 139.57 138.11 139.05 135.93 135.33 137.51 136.44 135.43 134.37 133.36 136.18 132.48 130.83 130.10 130.79 132.03 - 132.20 133.57 131.90 132.54 131.34 130.32 131.10 130.93 130.45 129.75 127.11 126.66 127.01 127.03 126.45 126.77 125.25 125.88 125.93 123.02 - 113.72 108.21 111.76 108.26 108.38 95.32 78.00 67.27 72.99 73.66 71.37 72.24 69.65 68.73 63.20 64.54 65.45 66.43 66.22 65.19 - 62.97 58.60 57.00 55.67 56.07 56.26 54.81 51.54 48.54 43.02 39.95 41.11 40.38 45.31 48.20 49.98 47.97 53.37 58.10 61.43 - 62.99 58.78 53.21 48.10 37.80 46.93 47.30 45.34 39.74 32.93 21.72 10.40 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 143.38 140.97 140.27 139.69 138.23 137.87 135.25 135.77 136.01 135.46 135.49 134.46 132.53 132.39 130.64 130.60 131.76 132.44 132.07 - 132.77 132.79 132.06 131.79 131.67 130.98 130.61 128.97 129.09 129.46 128.09 127.69 127.25 126.14 125.10 126.50 124.92 123.76 122.76 120.38 - 114.85 111.40 107.25 105.99 99.88 94.03 79.00 76.36 73.21 74.34 75.64 75.12 74.01 72.23 67.74 66.60 61.68 64.19 64.62 61.07 - 61.04 57.54 55.88 53.13 52.71 54.63 53.53 49.52 44.98 42.60 39.17 38.07 36.92 35.95 42.77 48.14 47.61 48.99 50.21 56.05 - 53.36 45.62 41.42 37.09 36.26 41.05 43.42 41.24 36.41 26.92 15.48 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 142.04 140.75 141.23 139.71 138.22 137.55 134.71 135.14 136.34 135.06 134.82 133.27 132.73 131.86 130.73 130.46 131.88 132.67 134.25 - 133.36 132.29 131.46 131.35 129.95 130.74 131.16 129.93 129.39 127.22 128.71 127.44 122.97 122.97 124.21 125.16 124.67 121.51 119.83 117.59 - 119.64 114.62 110.27 102.99 101.35 86.22 92.30 75.24 79.71 81.28 80.18 79.03 76.96 77.82 73.58 66.23 62.34 64.87 63.48 61.26 - 59.21 57.71 55.62 52.81 50.86 49.46 46.63 48.39 46.98 43.39 39.62 36.67 34.14 33.56 35.54 35.71 46.00 48.54 47.11 50.04 - 49.08 43.34 40.64 34.04 37.83 41.03 41.47 36.83 31.37 19.61 10.30 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 142.31 141.04 140.15 140.98 138.99 137.95 136.56 135.30 135.17 134.34 133.62 132.80 131.94 131.14 129.93 130.56 132.22 134.37 135.30 - 133.32 131.23 131.26 130.73 129.90 130.70 129.87 129.31 127.45 127.64 125.75 126.34 123.18 120.84 123.60 124.76 122.09 121.58 117.56 115.18 - 112.76 114.98 108.51 106.51 103.54 98.76 91.69 82.18 81.65 86.09 83.90 80.51 81.04 78.92 77.09 74.07 65.84 67.67 60.90 58.87 - 55.47 50.79 50.07 48.57 47.27 47.03 45.79 45.26 43.42 42.96 40.96 36.70 35.63 34.63 36.22 38.89 42.27 44.03 43.07 45.31 - 46.95 45.37 40.20 37.28 37.83 36.40 38.96 34.75 22.79 12.53 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 141.36 140.37 140.55 140.27 139.18 136.53 136.05 134.49 133.01 133.94 133.43 131.73 131.11 130.09 130.69 131.89 131.73 134.40 134.81 - 132.88 131.67 131.09 130.27 129.76 129.00 129.57 128.51 126.60 125.78 125.67 110.82 120.36 123.13 123.45 121.93 121.17 111.93 110.50 114.81 - 109.54 107.85 106.87 106.23 105.57 102.70 98.03 84.29 91.56 88.94 85.22 83.46 80.26 75.59 76.27 75.21 71.68 68.76 59.60 56.89 - 53.67 49.52 46.46 43.97 43.61 46.38 43.76 41.08 41.80 38.18 36.18 33.75 34.03 33.70 34.95 35.75 38.84 43.21 40.86 40.25 - 42.68 41.09 37.50 36.11 36.14 35.86 35.84 28.11 16.70 8.61 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 140.79 140.45 140.24 139.44 138.90 137.25 135.10 134.16 133.17 132.70 131.84 131.41 130.56 130.37 131.55 132.41 132.62 133.83 133.07 - 133.26 130.88 129.70 129.23 129.33 128.99 128.88 128.70 126.18 125.39 124.83 123.97 122.26 122.95 122.73 120.84 114.70 111.50 107.67 112.61 - 108.29 106.66 101.87 105.22 104.16 100.99 97.29 94.99 92.51 89.63 86.03 82.11 77.34 77.22 73.68 73.67 69.95 65.59 54.93 50.81 - 52.22 51.73 48.07 44.92 46.15 44.90 42.61 40.86 37.31 35.10 31.06 28.58 29.32 31.36 33.56 33.03 34.05 40.15 41.13 39.61 - 38.21 38.16 36.73 35.29 32.41 32.36 30.22 21.50 9.62 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 140.45 140.22 139.77 138.81 138.81 137.60 136.35 134.12 131.95 132.58 130.96 129.81 130.76 130.27 131.75 134.11 134.34 133.73 133.34 - 132.30 130.74 129.41 128.46 126.98 127.63 128.11 127.69 125.65 126.52 124.07 124.14 123.75 121.74 122.10 114.67 115.42 113.72 112.37 100.16 - 96.87 95.34 101.29 99.82 99.10 97.83 96.22 92.82 91.61 90.09 84.55 78.22 73.18 74.51 73.54 72.09 66.33 61.09 52.31 48.83 - 52.72 52.25 49.95 47.36 48.34 46.49 43.39 39.35 36.07 34.20 31.63 29.93 29.08 28.71 29.95 28.44 32.16 35.10 35.85 34.39 - 34.61 35.71 33.24 30.46 27.44 25.98 22.38 11.71 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 140.55 140.41 139.68 138.45 138.75 136.76 135.76 133.77 132.23 131.16 129.77 130.21 129.92 130.59 132.42 134.11 133.90 133.20 132.38 - 131.97 128.03 128.87 128.82 127.97 126.03 127.72 127.24 124.28 124.88 123.72 124.45 122.81 123.56 121.47 121.21 119.90 114.33 115.84 108.12 - 104.82 98.69 98.34 95.32 97.37 94.87 90.52 94.14 86.58 86.70 85.98 79.49 69.19 59.66 58.85 69.54 65.00 53.25 50.17 50.39 - 53.69 48.96 52.67 49.80 48.33 45.04 44.31 38.88 34.54 32.35 30.58 28.88 27.46 28.03 28.41 31.03 32.81 30.41 30.00 30.82 - 29.96 26.78 25.92 23.10 19.57 17.16 9.75 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 139.87 140.96 139.66 138.30 137.71 136.12 133.32 133.66 131.42 131.05 130.46 129.42 129.61 130.54 132.08 135.33 133.59 132.85 132.89 - 131.52 130.21 129.61 128.04 126.38 127.01 127.18 126.42 124.08 124.53 123.68 124.15 123.40 122.82 122.23 122.09 120.57 118.82 113.25 103.56 - 94.29 95.87 99.38 95.91 92.33 83.12 87.46 89.73 84.30 83.98 83.59 80.47 65.90 60.45 64.84 58.25 55.06 55.72 52.63 52.36 - 53.00 52.19 52.16 51.64 47.83 46.59 38.79 38.10 33.83 31.55 28.55 26.60 26.50 26.85 26.99 25.42 24.11 20.74 23.93 16.83 - 18.85 11.60 7.00 7.32 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 140.24 139.75 139.72 138.36 136.62 136.21 135.06 133.45 131.04 129.40 129.88 129.75 129.37 130.51 131.10 134.26 133.36 132.94 132.28 - 132.13 130.23 128.21 127.98 125.83 126.35 126.68 122.38 123.96 124.11 124.35 124.44 123.87 123.87 123.25 121.97 121.81 117.56 106.35 94.20 - 95.63 89.46 92.60 81.35 82.42 74.61 77.73 79.30 80.55 82.05 77.60 80.04 71.31 64.59 58.94 56.40 53.68 54.88 55.23 56.71 - 48.67 51.49 53.23 49.09 45.57 43.81 40.06 32.64 32.18 29.46 28.76 28.66 28.03 28.49 20.26 20.23 20.65 20.87 20.40 13.11 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 140.66 140.14 139.24 137.73 136.65 135.87 133.91 132.67 131.06 129.37 129.87 129.79 129.12 130.95 131.74 133.72 133.84 132.38 131.57 - 130.72 130.02 129.50 125.08 126.92 126.45 126.39 124.56 124.89 124.72 124.58 124.82 123.30 124.06 122.88 122.68 121.94 121.34 113.86 115.44 - 104.81 100.37 99.21 80.52 86.00 82.38 72.94 59.05 78.56 77.84 76.49 77.63 73.57 67.45 57.58 52.80 62.50 59.14 57.10 58.59 - 52.67 51.84 47.47 33.28 29.41 26.47 27.81 19.37 17.19 13.51 29.42 32.02 29.58 23.19 24.14 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 140.16 140.27 138.97 137.02 136.02 135.18 133.75 130.82 130.94 129.53 128.59 129.20 129.15 131.40 131.63 133.56 134.31 132.99 131.59 - 131.59 130.89 129.16 128.58 126.87 124.61 125.44 123.90 125.58 124.13 124.49 123.91 123.75 123.70 122.20 122.07 121.16 120.99 120.13 117.72 - 114.19 111.36 109.18 106.49 102.43 99.54 89.00 71.68 76.32 80.78 78.84 76.37 77.26 73.83 66.41 61.84 66.87 56.95 58.65 50.79 - 44.38 26.99 16.72 16.08 -10.00 -10.00 -10.00 -10.00 -10.00 24.76 35.87 35.73 22.97 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 140.20 138.82 138.58 137.35 134.68 134.01 132.86 132.10 130.90 129.92 128.54 128.69 130.89 131.08 131.76 132.34 133.00 131.74 130.66 - 130.61 129.70 128.74 127.46 127.64 124.75 125.46 125.16 125.08 124.42 123.44 123.75 123.97 122.74 122.83 122.72 121.81 120.22 118.09 118.05 - 115.76 114.69 111.97 111.35 109.03 106.17 103.40 101.75 98.69 95.42 90.21 80.82 65.09 54.47 55.49 48.93 39.08 33.45 21.08 14.62 - 20.41 18.17 -10.00 -10.00 -10.00 -10.00 -10.00 16.37 41.58 36.50 40.79 38.79 35.98 30.89 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 139.77 139.39 138.61 136.65 135.83 133.25 131.91 131.23 130.73 130.05 128.92 129.16 131.55 131.87 132.91 133.02 133.06 131.18 130.40 - 128.85 128.19 128.23 127.38 126.30 125.59 124.83 124.41 124.91 123.72 123.97 123.55 123.07 123.93 123.17 122.33 121.77 121.14 119.08 118.71 - 115.87 113.08 113.72 113.60 112.37 109.36 106.34 104.09 101.07 97.17 95.15 91.63 88.13 87.42 83.18 78.62 78.96 73.12 67.77 62.51 - 58.15 52.53 53.41 58.03 60.73 58.23 53.42 50.77 43.53 39.18 28.94 29.46 37.00 27.52 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 140.74 139.82 138.52 136.05 134.91 132.71 131.05 131.86 130.91 129.89 128.92 129.70 130.32 131.37 132.52 133.47 133.16 131.65 129.64 - 128.68 127.97 127.24 127.32 126.69 126.60 125.12 124.92 124.99 124.07 123.20 121.15 123.03 124.32 122.80 122.21 122.22 121.18 120.07 116.80 - 116.62 115.86 115.57 114.97 113.04 110.69 106.53 105.22 102.57 99.85 98.20 96.47 93.39 90.41 88.39 86.70 83.95 80.28 73.09 68.56 - 68.73 71.34 61.63 68.52 72.43 70.24 60.56 57.90 53.06 31.83 21.59 46.22 37.53 43.44 40.44 36.95 34.16 33.27 27.56 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 139.64 138.79 137.65 137.33 136.26 134.12 132.36 132.08 130.88 129.58 129.25 128.72 130.16 131.64 133.01 133.02 131.75 131.13 128.72 - 128.58 127.28 127.06 127.23 126.99 127.03 126.57 124.29 123.90 123.20 121.96 122.99 122.86 122.82 122.98 122.53 121.94 121.60 117.96 118.11 - 117.40 117.12 116.85 115.11 113.32 111.27 109.07 105.60 103.19 101.83 100.65 98.36 97.02 93.08 91.40 88.71 88.03 84.70 81.71 79.83 - 78.18 77.49 76.95 79.82 76.39 73.03 66.21 64.26 55.93 51.88 52.64 52.27 47.24 41.39 45.46 45.35 43.37 40.10 36.76 35.08 - 29.07 29.44 27.68 15.09 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 138.83 138.47 135.94 135.91 134.30 132.52 130.25 130.19 130.91 130.85 130.29 128.67 129.70 131.59 132.82 132.46 131.09 129.73 129.12 - 127.34 127.22 125.63 126.32 126.07 125.51 126.09 125.37 124.76 123.89 123.18 122.19 123.09 122.66 121.90 122.24 122.83 122.15 120.71 117.92 - 117.91 118.69 117.34 115.64 112.73 109.79 108.96 107.79 105.61 103.48 101.55 99.36 97.15 96.94 93.69 77.64 83.45 87.37 84.38 83.17 - 80.38 80.52 82.51 81.94 79.01 75.81 71.07 59.40 58.24 59.91 55.48 55.31 52.72 49.71 49.36 48.19 45.08 39.72 37.42 39.22 - 39.07 38.27 35.58 30.83 26.04 26.79 23.13 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 9.56 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 138.56 138.80 135.20 135.95 133.66 132.21 131.19 130.87 130.52 129.70 129.07 128.03 129.29 131.53 132.65 132.15 131.05 130.39 127.74 - 127.49 127.15 125.75 126.27 126.81 126.16 126.08 124.90 123.51 123.33 122.58 120.82 122.25 122.45 122.23 121.38 121.92 121.75 121.92 120.15 - 119.58 118.77 117.92 116.66 114.18 110.11 109.32 108.51 106.94 104.62 103.08 100.77 99.68 97.74 86.51 79.56 69.77 85.80 85.01 80.82 - 78.50 84.37 84.10 80.28 76.74 74.89 70.78 67.05 67.04 64.19 61.25 56.31 54.32 51.24 51.21 47.35 41.74 42.27 40.33 41.54 - 41.90 40.83 40.34 38.63 35.53 34.96 33.62 31.79 28.96 26.79 23.01 7.71 16.97 15.50 16.24 14.84 7.68 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 137.81 136.72 133.09 135.86 134.11 133.34 132.39 132.06 130.36 129.51 129.15 128.49 130.13 130.73 131.04 130.22 129.03 128.55 127.53 - 127.24 127.06 125.37 125.42 126.72 126.14 125.53 124.80 124.36 123.94 123.12 122.41 121.12 121.49 121.79 121.52 122.25 121.82 121.19 120.89 - 118.51 119.18 117.73 116.73 114.81 112.35 112.22 110.98 107.88 104.32 104.26 101.96 100.19 98.07 94.98 87.66 67.38 71.52 86.55 83.32 - 83.21 84.25 81.95 79.01 73.65 67.11 65.68 58.73 62.66 62.27 61.20 58.58 58.40 50.42 47.24 47.52 44.74 35.95 40.76 40.05 - 39.72 42.32 40.42 38.59 37.71 35.84 35.29 35.34 32.62 30.40 28.82 26.72 24.68 22.68 20.43 17.31 10.25 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 137.54 137.25 136.98 131.80 133.54 133.00 132.78 131.62 130.87 129.72 128.73 129.61 130.28 131.52 131.19 130.23 129.29 125.78 127.74 - 126.62 126.01 125.43 125.39 126.12 126.11 124.00 124.59 123.87 123.42 123.14 121.89 122.04 120.32 120.40 121.11 121.41 121.28 120.07 120.69 - 119.32 119.87 118.21 117.50 115.10 114.35 112.42 112.35 109.25 105.04 103.57 101.58 100.34 99.09 96.74 95.32 71.78 71.69 87.35 85.40 - 85.34 83.32 76.87 76.38 73.53 69.24 64.49 61.58 57.27 57.17 58.72 57.08 54.20 51.67 49.39 49.91 44.24 41.29 34.66 37.62 - 35.04 36.15 37.46 37.89 38.08 37.84 36.65 35.21 33.32 32.10 30.02 27.53 26.24 23.17 21.06 18.30 10.55 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 136.69 136.02 135.91 135.23 134.68 133.34 132.36 131.64 130.58 129.57 129.11 130.28 130.38 130.40 129.86 129.22 127.16 127.17 126.03 - 126.10 126.95 125.49 125.10 125.15 124.89 125.27 125.16 123.96 123.13 122.37 122.20 120.74 119.80 119.54 120.27 120.13 119.93 121.00 120.47 - 119.71 119.31 118.32 116.49 116.25 115.19 113.37 112.17 110.16 106.94 102.63 100.13 98.66 98.08 96.92 95.88 91.90 84.85 87.78 88.05 - 86.28 82.56 80.57 69.18 67.64 68.53 67.07 58.85 53.75 54.91 54.58 56.14 50.61 49.61 50.74 45.20 43.95 39.71 38.44 32.66 - 30.32 23.82 23.12 27.76 33.26 34.81 35.32 34.07 32.86 30.81 29.68 27.23 25.63 23.78 21.15 16.02 9.40 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 135.30 136.84 136.90 135.68 134.06 133.04 132.94 131.39 129.65 129.25 129.14 130.03 130.70 129.60 129.27 128.64 126.98 125.78 126.01 - 125.94 126.25 125.55 124.56 124.50 124.97 124.75 124.51 123.18 123.27 122.79 122.10 121.67 120.90 118.91 120.30 118.84 119.60 119.57 119.52 - 119.83 119.75 117.88 117.31 116.90 116.31 115.25 112.85 110.35 107.81 104.36 95.81 96.32 96.80 95.73 94.53 94.17 90.84 89.24 85.74 - 83.58 85.62 82.08 75.16 58.18 66.51 66.09 61.56 58.35 54.37 50.07 51.32 50.53 50.21 48.14 44.18 38.43 37.34 38.36 37.65 - 27.97 22.28 18.61 16.54 23.01 29.10 33.25 32.84 30.74 29.26 28.26 26.78 25.38 21.27 18.54 14.64 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 136.81 135.81 136.59 135.32 134.51 131.98 131.49 129.88 128.13 129.11 130.09 130.07 130.40 129.45 128.57 128.15 127.94 125.94 125.90 - 125.13 125.96 125.64 125.27 123.97 124.40 124.43 124.44 123.45 122.46 122.36 122.01 120.98 120.22 119.94 119.70 118.23 117.63 118.31 118.54 - 119.76 119.36 117.43 117.11 116.82 116.30 114.18 112.90 109.78 106.36 103.19 96.50 94.61 95.49 91.38 93.02 92.25 91.04 87.46 82.04 - 81.70 84.80 80.54 80.19 74.65 71.38 68.81 62.34 53.10 49.02 46.72 49.68 45.04 47.41 43.56 40.69 39.75 37.39 34.35 35.81 - 29.01 27.82 -10.00 -10.00 17.00 22.17 29.09 29.48 27.66 27.54 26.43 25.09 23.31 19.58 17.36 12.93 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 135.05 135.37 135.43 134.78 133.57 132.03 131.23 130.13 128.58 129.52 130.79 129.51 129.55 129.07 128.68 127.86 127.11 125.12 124.91 - 124.52 124.57 124.76 124.49 124.33 124.00 123.89 123.97 123.82 123.07 121.85 122.14 121.74 119.40 119.21 117.53 118.44 116.77 116.21 117.89 - 118.57 118.21 117.07 116.57 116.08 114.54 113.83 112.49 109.83 107.44 102.15 98.34 96.87 94.07 92.88 91.05 89.13 85.65 81.83 82.03 - 80.04 80.34 80.50 76.82 74.86 71.96 64.26 62.34 53.66 49.87 48.13 45.77 46.15 44.82 44.44 40.09 42.05 37.38 28.73 32.28 - 30.68 27.27 11.32 -10.00 -10.00 18.20 25.05 25.91 27.20 27.08 25.83 22.26 19.86 17.74 14.52 9.06 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 136.03 134.97 135.82 135.17 132.01 132.18 130.74 130.25 128.93 129.98 129.11 130.04 129.48 128.66 126.82 126.36 125.70 125.03 124.05 - 122.72 123.67 124.82 124.51 124.52 122.11 123.46 123.37 121.07 122.35 120.10 121.54 121.30 120.59 119.61 118.14 116.75 116.51 116.24 115.35 - 116.16 117.28 116.60 116.56 114.99 114.33 112.61 110.53 111.39 107.36 103.29 100.20 97.66 95.66 92.23 89.27 85.33 78.91 76.92 78.11 - 76.05 78.03 79.31 80.16 73.24 71.95 61.53 54.01 51.56 50.75 47.97 46.31 46.02 43.00 44.67 42.20 34.27 34.78 25.96 29.02 - 25.61 24.84 8.68 -10.00 -10.00 14.29 21.10 22.57 20.03 23.77 22.72 15.77 13.57 10.84 7.54 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 135.93 134.39 134.62 134.76 133.64 131.98 129.79 129.88 130.26 130.32 129.77 129.44 128.78 128.21 127.14 126.30 124.47 124.70 122.12 - 123.16 123.58 124.22 124.97 124.00 122.01 122.32 123.03 122.23 122.77 121.45 120.92 120.69 121.41 118.95 118.20 117.04 116.81 116.50 116.33 - 115.44 115.53 116.62 116.97 115.26 114.47 111.41 110.70 108.53 108.49 104.44 101.86 98.94 95.19 90.81 89.28 83.60 68.66 70.46 69.81 - 71.76 75.08 78.18 78.00 77.04 74.67 67.89 56.81 50.89 51.99 51.33 46.73 44.21 42.27 40.58 39.39 39.30 34.69 27.65 26.79 - 27.91 22.14 7.00 -10.00 -10.00 -10.00 17.22 18.15 17.63 17.59 17.49 11.92 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 136.09 134.82 134.25 134.20 132.61 131.55 130.39 130.16 130.25 129.96 129.64 128.65 128.79 128.02 126.59 126.00 124.08 123.58 122.65 - 124.27 124.57 124.82 124.76 122.97 123.25 121.31 122.63 122.50 121.45 121.01 119.78 119.39 121.44 119.73 118.86 117.89 115.15 115.30 115.24 - 113.77 115.07 115.99 115.82 115.79 112.07 112.93 112.05 109.68 106.73 103.69 101.87 99.03 93.18 90.24 85.72 78.01 69.95 69.99 67.24 - 68.18 70.88 74.68 75.67 74.57 72.25 68.15 55.92 52.58 54.74 50.15 47.14 42.86 41.72 37.68 37.48 36.11 35.18 34.14 30.02 - 24.46 19.71 -10.00 -10.00 -10.00 -10.00 11.75 14.42 11.49 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 134.65 133.94 133.00 132.79 132.29 130.46 129.64 130.34 130.87 130.06 128.06 127.74 127.98 127.18 126.98 125.46 124.86 123.86 123.99 - 122.59 124.11 123.74 124.07 123.64 122.25 120.90 121.74 122.63 121.29 119.21 120.47 120.20 120.26 119.70 116.43 116.98 117.92 117.01 117.06 - 115.41 113.18 109.02 113.13 112.73 114.24 112.57 111.51 109.23 107.20 103.15 102.00 100.08 95.97 92.43 88.36 79.16 74.71 69.55 67.44 - 66.73 69.80 71.70 73.15 71.80 70.37 66.83 60.87 55.52 49.88 49.63 46.23 43.43 42.34 40.66 36.82 32.37 29.83 30.92 30.19 - 25.20 16.98 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 134.52 133.28 133.08 132.44 131.38 129.90 129.97 130.84 130.10 128.79 125.14 127.09 126.36 125.76 125.13 123.48 123.61 123.11 122.44 - 122.54 122.99 123.08 123.30 117.92 122.11 119.72 121.28 119.77 120.49 120.21 119.42 119.34 120.04 120.44 117.84 115.98 116.22 115.89 116.33 - 113.56 113.97 112.82 113.53 114.35 113.06 111.67 112.49 104.71 106.49 104.07 100.79 99.10 95.55 85.71 78.86 74.12 71.25 70.13 70.63 - 68.09 66.16 69.11 70.65 69.95 67.34 62.14 56.08 51.52 39.57 42.42 42.83 44.44 38.58 37.89 35.77 35.46 31.91 22.15 19.42 - 7.95 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 134.37 132.89 133.10 133.07 132.54 130.88 131.03 131.15 130.41 128.34 125.99 125.34 126.22 125.00 124.80 123.80 123.18 120.43 122.23 - 121.96 121.43 121.50 122.50 121.52 118.25 119.26 119.77 119.89 119.77 120.10 118.42 115.43 120.06 118.04 118.07 114.99 117.33 113.09 115.30 - 114.75 113.68 110.20 113.36 112.44 113.99 111.55 112.40 109.06 106.14 104.82 101.50 99.20 92.79 77.64 71.33 66.19 68.29 70.11 69.79 - 68.10 67.79 68.19 68.10 66.85 63.46 56.87 50.76 47.72 41.67 39.60 39.38 37.97 27.36 29.29 28.87 30.75 20.82 22.19 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 133.98 132.70 132.96 132.27 130.79 130.12 131.28 130.61 129.01 128.45 126.33 126.12 125.75 124.91 124.79 124.02 123.75 122.10 123.15 - 122.58 121.71 120.42 122.20 122.74 120.47 119.01 114.94 118.75 121.32 119.77 119.42 119.06 116.96 118.33 117.77 118.35 115.02 116.00 113.45 - 112.18 114.47 113.50 111.90 112.14 112.15 111.25 108.48 108.72 103.91 103.06 99.37 98.18 91.27 79.61 69.20 69.77 74.00 69.10 67.30 - 65.33 66.23 63.55 63.09 61.88 58.00 51.83 47.28 45.02 41.97 40.71 37.77 37.79 38.87 36.09 27.40 20.59 23.29 13.50 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 133.12 132.08 133.10 133.05 132.09 132.18 131.76 130.10 129.43 128.15 126.48 125.91 124.97 124.27 124.29 122.68 121.71 121.76 121.40 - 122.10 122.03 121.23 121.78 122.30 122.07 118.57 117.57 118.71 118.83 116.89 116.94 118.44 118.33 116.05 117.64 114.99 116.13 112.90 109.21 - 113.16 114.38 110.90 112.79 111.30 111.62 111.31 109.39 108.48 106.84 99.74 95.30 93.25 83.10 70.09 73.17 79.77 73.08 67.60 68.09 - 66.24 64.23 58.77 58.74 58.40 54.06 47.88 42.28 38.94 41.60 38.88 34.91 31.02 33.54 30.65 41.43 37.12 27.88 25.55 20.90 - 9.44 15.89 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.18 8.55 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 133.71 132.44 133.08 131.61 131.90 131.34 130.42 130.73 129.07 127.99 125.89 125.01 125.78 124.55 123.89 122.61 120.90 120.76 121.35 - 121.12 121.73 121.97 121.73 121.22 120.54 119.42 117.89 118.90 119.43 118.37 116.68 116.72 115.28 115.33 117.29 115.34 112.34 114.55 114.17 - 110.52 113.09 113.46 111.19 111.61 110.90 107.83 104.31 106.86 100.28 99.14 99.98 96.58 90.68 86.96 84.38 81.16 73.69 69.00 67.29 - 67.83 63.75 56.86 48.22 45.82 35.36 29.96 27.78 28.16 30.55 29.08 31.18 29.61 26.46 25.40 26.17 31.51 32.47 27.93 26.07 - 24.90 20.18 -10.00 7.00 7.00 -10.00 13.05 18.56 19.87 16.63 24.49 15.39 10.91 14.66 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 131.16 131.12 132.65 131.79 132.19 131.49 129.89 129.78 127.78 125.53 126.38 125.28 124.32 124.41 122.69 121.58 122.58 120.24 120.93 - 121.05 121.86 119.73 121.21 120.81 120.79 117.67 118.79 116.89 118.17 118.64 114.81 118.71 116.82 116.94 115.65 114.89 110.63 113.10 113.24 - 112.28 113.84 109.73 112.44 108.56 110.34 110.61 109.17 99.83 102.29 89.11 91.77 77.02 76.78 83.13 81.10 70.29 61.49 58.90 53.97 - 53.84 50.84 22.69 20.61 13.12 20.88 10.09 7.78 23.96 24.20 25.31 24.60 23.32 21.82 23.31 23.57 25.26 29.23 36.69 27.45 - 21.07 -10.00 -10.00 7.00 9.03 -10.00 24.64 26.29 22.35 27.78 12.65 15.26 8.77 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 132.67 131.57 131.46 131.74 131.26 129.95 129.88 129.80 127.86 125.87 125.80 122.48 124.94 121.44 121.32 120.69 121.03 121.07 120.17 - 120.79 122.08 121.93 121.65 121.21 120.61 120.07 115.68 116.49 117.12 115.72 117.59 116.40 116.03 117.60 114.08 116.40 114.90 113.38 113.92 - 114.34 112.90 111.60 110.06 107.60 105.21 103.96 100.31 99.89 103.11 100.21 98.70 93.45 86.94 78.82 77.67 63.11 61.24 61.46 55.45 - 52.62 43.16 29.13 16.03 10.46 8.90 7.83 8.62 10.61 11.94 15.91 -10.00 -10.00 18.90 11.66 20.98 19.83 19.28 37.70 37.04 - 26.56 -10.00 -10.00 -10.00 23.72 33.74 25.82 17.70 -10.00 10.05 -10.00 -10.00 7.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 130.90 130.38 131.68 130.96 129.84 129.47 129.68 129.77 129.05 128.17 126.73 125.58 123.94 123.59 122.66 121.78 121.03 119.60 120.04 - 120.99 120.41 120.51 120.64 117.55 118.38 116.75 115.62 112.56 115.54 115.00 113.08 116.52 115.71 115.41 115.75 116.03 116.51 114.45 112.60 - 113.80 111.92 110.00 109.69 109.81 103.47 98.35 97.61 91.34 104.01 102.88 96.39 87.99 85.75 79.49 71.70 56.81 54.97 56.33 56.72 - 33.76 23.13 22.47 20.10 15.20 10.41 7.00 7.00 11.58 13.70 14.01 -10.00 -10.00 -10.00 -10.00 13.29 19.58 18.38 13.37 -10.00 - 36.24 32.34 7.00 -10.00 25.39 29.26 23.83 21.69 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 130.12 130.74 130.50 130.01 129.98 129.24 129.04 128.21 126.55 124.92 123.90 123.20 122.73 121.69 119.57 122.06 121.87 121.09 118.89 - 119.85 119.00 119.05 119.51 119.23 119.09 117.24 118.40 118.04 115.18 115.38 115.85 114.78 114.10 115.26 114.90 116.42 115.86 109.20 112.37 - 114.21 111.19 108.28 106.66 103.10 96.57 94.89 101.63 103.15 104.63 101.47 95.00 84.65 82.99 74.80 72.02 71.19 59.61 54.35 37.46 - 26.29 12.15 12.59 12.24 13.50 12.63 -10.00 -10.00 11.16 12.88 11.28 -10.00 -10.00 -10.00 -10.00 7.00 8.92 -10.00 -10.00 -10.00 - -10.00 -10.00 18.89 25.43 31.73 36.27 24.53 9.91 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 130.58 131.57 130.87 130.31 129.97 129.09 128.71 128.45 128.07 124.48 124.29 123.16 122.05 121.27 121.40 120.83 121.94 120.46 120.20 - 119.51 118.67 119.81 120.94 120.12 119.41 117.22 114.94 116.92 115.57 113.87 114.94 114.14 117.21 116.75 115.77 116.78 117.00 102.76 98.82 - 114.24 111.74 110.78 109.20 107.62 105.50 99.91 99.48 103.94 103.71 100.50 96.65 88.37 80.53 78.61 70.90 63.15 43.88 43.19 33.76 - 16.81 7.00 7.13 7.31 9.18 7.00 9.18 -10.00 11.15 12.79 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 14.16 19.05 11.66 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 129.31 130.75 129.57 130.44 128.31 128.02 128.09 127.65 127.50 125.13 123.63 123.59 122.10 120.98 121.75 121.31 121.69 121.33 119.67 - 119.49 117.38 115.89 117.03 114.41 119.26 118.54 117.17 115.08 115.49 113.45 112.84 115.06 113.68 116.47 115.66 116.11 111.03 112.30 108.59 - 113.72 113.28 111.75 110.44 109.01 104.20 101.53 100.63 104.16 102.81 77.44 97.75 93.34 87.51 73.41 51.67 48.06 25.21 26.15 16.67 - 9.42 7.00 -10.00 7.00 -10.00 7.00 7.62 11.82 14.50 23.76 18.19 11.66 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 11.72 8.98 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 129.21 129.58 129.03 128.35 127.54 126.76 126.37 126.48 125.49 123.44 123.62 122.34 120.69 121.59 122.36 120.80 121.25 120.05 119.17 - 118.54 119.48 119.12 116.48 115.89 114.24 113.82 114.88 111.00 114.17 112.31 112.19 112.07 115.01 114.11 116.14 115.69 114.17 115.39 114.88 - 114.17 113.89 113.51 112.34 110.40 107.74 106.39 105.55 104.38 98.64 56.71 92.99 91.90 82.48 70.40 61.76 33.53 22.22 21.72 15.54 - 7.92 -10.00 7.00 8.59 -10.00 7.00 7.98 19.10 20.66 28.22 20.31 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 129.09 129.42 128.48 128.03 126.95 127.05 127.05 125.56 124.33 124.62 124.16 124.13 123.66 122.06 121.90 123.13 121.81 121.18 120.98 - 120.19 119.63 119.52 118.69 118.89 116.84 115.61 114.65 116.22 116.46 115.82 114.26 115.19 115.38 115.06 116.45 115.38 115.92 115.96 115.37 - 115.30 114.46 114.65 115.36 113.45 111.95 110.34 108.85 104.53 95.55 76.27 90.43 90.16 80.85 72.81 51.19 46.23 15.12 19.35 9.21 - 7.00 -10.00 7.00 14.69 10.58 9.94 17.07 38.50 25.47 23.03 16.61 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 128.07 128.84 128.16 127.51 126.67 126.63 126.60 126.20 125.43 125.61 126.66 125.52 124.18 122.75 122.28 123.44 122.08 122.02 120.86 - 120.15 119.90 117.12 117.55 116.51 117.78 116.85 114.32 114.85 116.28 115.06 113.49 111.25 108.44 115.22 115.65 115.81 114.16 114.42 114.85 - 115.02 114.63 114.12 115.99 114.37 112.82 113.27 108.58 103.54 98.09 87.99 86.23 82.71 81.20 71.89 63.94 58.80 32.10 16.29 10.16 - 7.00 11.71 19.74 23.66 7.31 10.36 30.57 37.32 23.44 18.08 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 127.79 127.34 126.73 125.41 124.91 126.67 125.96 125.84 125.19 123.66 124.29 124.62 122.53 121.60 120.45 120.94 123.12 122.64 120.91 - 120.20 119.84 119.26 118.61 118.28 117.99 116.54 115.51 114.45 116.52 115.40 114.44 111.30 114.64 115.39 115.53 115.42 115.74 113.96 115.41 - 116.02 115.38 113.17 115.26 115.15 113.24 115.83 110.14 101.19 94.24 88.06 69.09 33.26 54.36 59.71 59.57 59.15 61.09 -10.00 14.20 - 12.48 28.33 32.56 15.27 13.18 38.98 44.54 29.64 23.83 16.21 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 128.16 127.22 126.11 127.20 126.50 126.53 124.71 124.90 125.00 123.38 123.73 124.90 123.58 121.78 120.72 120.08 121.59 122.25 120.85 - 118.37 120.13 119.33 119.25 118.63 114.77 116.06 116.18 114.85 115.08 114.11 114.61 113.73 112.25 115.45 115.58 115.65 115.16 110.13 114.12 - 115.65 115.53 113.15 115.99 117.35 116.88 114.28 115.04 97.46 93.66 82.71 80.17 28.99 -10.00 -10.00 54.38 46.64 40.75 17.71 15.80 - 48.28 49.10 40.85 32.58 43.94 40.34 21.97 22.32 24.94 19.79 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 125.51 125.82 125.84 125.10 124.09 125.10 125.13 123.59 122.79 122.64 122.45 122.31 122.50 121.29 120.98 119.76 120.47 119.67 121.43 - 120.39 118.20 116.66 117.40 116.25 117.63 116.67 116.89 115.26 114.13 110.28 111.88 111.48 113.24 114.72 114.15 113.32 114.85 114.47 114.79 - 116.07 114.97 116.01 114.56 122.20 116.98 115.39 112.64 104.79 94.08 59.74 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 50.32 56.82 66.94 - 66.69 69.87 77.06 68.51 65.18 31.81 27.31 40.96 44.91 15.91 9.57 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 126.58 124.78 124.91 124.05 124.65 123.36 124.74 124.31 121.96 121.85 121.94 122.48 121.40 120.32 120.07 118.74 118.71 118.77 120.83 - 120.32 119.35 119.34 115.89 117.04 116.51 117.14 114.86 115.86 115.25 113.61 109.00 111.57 112.67 115.21 115.56 114.16 115.28 113.85 116.11 - 115.54 116.49 116.41 113.84 127.01 134.40 121.00 113.09 109.66 96.31 83.91 54.06 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 35.88 77.17 - 78.32 79.43 80.96 75.92 52.24 38.25 48.05 57.47 48.85 38.46 13.76 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 124.68 123.85 124.28 123.59 124.01 124.14 124.22 123.80 123.92 121.87 122.85 122.40 122.32 120.72 120.69 119.40 118.42 119.22 120.06 - 119.97 118.72 118.23 117.92 115.69 116.50 116.17 117.07 113.85 115.03 112.90 111.41 111.33 108.67 115.59 114.59 113.90 114.12 113.64 115.77 - 115.64 117.20 116.93 115.70 117.57 142.65 146.64 114.30 111.97 100.06 86.50 69.08 50.53 9.52 -10.00 -10.00 -10.00 65.82 61.64 59.75 - 71.95 82.50 84.78 80.56 72.45 66.75 64.38 50.80 55.05 33.79 20.60 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 124.37 124.15 123.94 123.34 123.40 123.95 124.34 123.31 122.12 122.26 121.90 121.39 120.99 120.56 119.35 119.40 119.05 118.78 120.22 - 118.13 118.74 117.90 116.95 115.62 115.29 115.41 116.15 116.51 115.76 115.50 110.95 110.79 110.21 112.97 114.05 114.20 113.74 113.50 111.62 - 115.91 115.41 117.69 116.11 115.49 128.91 160.29 149.67 112.29 107.03 95.67 95.92 70.71 56.13 76.68 55.62 68.47 74.99 65.13 66.24 - 81.80 81.53 80.72 72.50 72.34 73.93 62.81 50.60 45.17 24.71 13.38 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 123.76 124.07 122.18 123.15 122.66 121.49 122.56 122.44 121.44 120.48 120.29 121.60 120.18 118.74 117.57 118.09 118.21 117.66 118.45 - 119.89 119.71 120.00 118.76 118.22 117.10 116.29 116.29 115.47 116.62 115.48 113.97 113.95 114.33 113.33 114.84 114.50 114.40 113.69 113.26 - 112.34 115.09 117.45 118.13 115.52 113.21 128.56 165.70 141.69 109.22 105.88 103.49 98.09 85.48 84.00 91.69 89.10 93.05 92.37 90.20 - 93.68 85.69 74.51 64.40 66.87 72.00 71.38 57.98 49.24 43.94 19.43 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 124.11 122.85 120.92 121.62 121.20 121.90 122.28 122.26 121.93 120.70 121.17 117.70 119.77 119.57 118.86 119.31 117.23 118.90 118.43 - 119.58 117.91 115.31 116.46 115.54 116.79 116.14 116.45 115.89 115.45 114.77 114.85 113.85 113.12 113.94 113.78 114.70 114.74 114.38 114.29 - 114.19 112.23 114.40 117.21 115.65 114.31 112.26 159.39 173.41 167.19 108.18 105.00 103.94 98.34 99.53 97.44 94.33 90.25 92.33 94.36 - 94.44 93.91 92.29 78.63 66.24 76.15 79.82 70.10 55.02 42.19 23.62 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 123.91 122.89 121.71 122.26 119.34 120.90 121.79 121.60 120.18 120.68 121.91 121.19 119.92 119.00 119.24 119.35 120.20 119.20 117.42 - 118.48 118.67 118.19 117.68 115.45 117.02 117.16 116.24 116.22 115.71 114.36 114.55 114.04 111.94 109.76 115.23 114.53 115.17 114.26 112.94 - 113.01 112.48 111.62 112.09 118.94 116.17 115.24 112.89 157.40 197.25 160.45 108.65 107.21 104.68 102.31 98.49 96.37 94.11 96.37 95.90 - 94.48 95.25 93.36 71.27 71.65 50.27 68.38 82.97 56.65 33.00 23.54 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 123.59 123.66 119.85 121.15 121.36 121.43 121.91 122.01 121.50 121.57 121.63 120.94 121.23 119.23 119.06 118.83 119.68 118.98 117.97 - 117.90 115.96 116.73 117.59 116.75 115.25 115.91 114.82 116.19 115.74 115.79 114.62 114.81 111.49 113.36 115.44 113.54 113.11 113.64 113.80 - 113.42 113.05 113.19 112.56 114.27 116.43 116.21 110.98 114.01 142.05 163.27 139.31 110.44 106.78 105.29 104.24 101.70 101.09 97.63 96.67 - 95.52 94.76 90.66 70.01 66.96 69.05 60.46 84.56 72.03 54.19 27.06 22.67 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 124.01 123.08 120.71 121.48 121.74 122.21 121.98 122.04 121.87 121.34 121.32 120.06 120.02 118.57 119.45 119.29 117.58 118.25 118.08 - 117.89 118.08 117.39 116.40 116.46 113.42 116.20 115.83 115.66 116.01 116.33 114.41 114.57 112.33 113.64 110.91 113.81 114.05 113.83 114.15 - 114.31 113.37 112.33 112.77 110.29 113.10 115.41 113.99 113.75 121.15 114.45 121.43 119.79 109.22 105.07 103.72 103.17 103.06 101.08 97.59 - 97.65 90.20 74.33 79.07 87.82 88.01 64.76 70.46 82.06 63.55 44.43 33.11 17.34 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 122.92 122.79 120.73 122.17 123.00 121.28 122.76 121.75 121.70 121.47 121.62 120.95 120.14 119.30 118.65 119.00 118.59 117.45 117.29 - 117.45 117.01 116.26 117.15 116.75 113.02 116.38 114.98 116.23 115.49 115.35 114.87 113.74 113.27 112.35 114.31 114.97 114.55 113.86 114.19 - 113.53 114.39 112.66 112.16 110.33 112.00 114.19 113.32 112.53 115.46 127.42 116.36 110.73 110.82 108.74 104.69 99.83 98.49 99.70 93.10 - 82.23 69.41 84.01 87.37 95.47 92.76 75.61 66.79 86.47 52.13 56.27 33.12 26.08 19.17 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 122.91 122.40 121.21 121.12 120.48 121.36 121.98 121.34 121.39 121.05 121.06 120.32 120.66 121.10 120.17 120.22 119.22 118.13 116.50 - 116.19 118.19 116.32 116.12 116.43 114.38 114.84 114.14 115.31 114.30 114.68 114.05 113.31 112.50 114.08 113.35 115.05 114.23 114.65 114.35 - 112.65 112.41 112.14 112.54 111.43 109.65 111.16 115.96 113.73 112.41 110.70 120.05 117.15 111.78 110.04 107.21 105.76 99.72 92.87 91.27 - 87.29 83.21 90.01 91.87 94.23 98.81 99.36 83.64 89.03 76.82 66.73 50.56 14.92 7.84 8.93 -10.00 7.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 122.54 122.60 120.27 120.43 119.69 121.50 119.66 120.92 120.64 121.00 121.20 120.13 120.23 119.27 119.22 120.13 118.92 119.01 117.25 - 115.96 117.40 117.39 117.04 115.79 113.80 113.44 113.07 114.69 114.21 114.71 115.78 115.29 112.87 113.99 112.24 114.77 113.87 112.71 113.03 - 114.03 113.32 112.49 111.74 111.95 108.29 111.18 112.28 113.67 111.63 110.66 108.69 111.76 109.48 109.05 104.89 107.66 105.59 98.16 96.10 - 91.07 91.33 96.43 96.56 96.32 97.16 96.21 94.15 93.63 74.70 49.50 44.08 22.21 -10.00 18.09 13.46 13.34 8.60 7.10 7.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 122.50 122.02 121.58 120.66 119.66 120.63 120.41 120.35 121.07 119.91 120.44 119.66 119.97 120.28 119.87 119.53 118.98 119.13 118.13 - 115.03 116.79 116.28 115.65 114.92 114.47 114.25 114.17 115.68 115.51 115.70 114.51 113.64 112.63 112.74 111.45 113.18 113.78 113.69 113.84 - 113.31 113.22 113.78 112.62 112.12 107.73 110.44 111.27 112.74 111.42 111.42 110.02 109.45 107.09 109.86 107.29 105.90 100.36 105.11 102.92 - 97.68 101.55 101.66 98.13 96.12 97.66 96.27 97.66 97.64 93.16 57.51 49.87 31.43 44.70 23.31 31.53 19.95 19.64 10.12 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 122.21 122.54 121.76 121.37 120.18 119.60 119.14 118.28 120.60 120.06 119.80 117.45 118.86 118.37 118.77 119.41 117.97 118.30 117.60 - 116.29 115.52 115.61 114.99 112.47 115.22 115.44 113.94 115.80 115.01 114.74 114.10 114.03 113.03 112.07 109.84 113.85 114.34 114.03 113.81 - 113.94 112.96 113.29 112.12 111.32 111.00 110.36 110.20 111.16 111.35 108.42 109.16 107.37 106.26 109.01 106.11 104.65 107.76 107.27 102.28 - 102.68 97.91 100.50 97.94 99.29 97.23 97.01 98.36 95.43 96.64 91.50 61.98 49.45 56.33 55.35 50.00 30.76 29.91 12.75 7.00 - 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 122.98 121.68 122.51 120.19 120.37 119.46 118.93 119.71 119.82 120.45 120.19 119.96 120.09 118.66 119.06 119.08 117.66 117.47 117.85 - 117.23 116.54 115.27 116.46 114.40 115.46 114.36 114.08 114.51 113.74 112.81 113.02 112.38 112.31 112.11 110.86 112.27 113.16 114.09 112.83 - 112.84 112.94 113.65 113.46 111.57 110.82 111.15 109.00 111.32 110.37 107.10 108.30 109.60 105.76 107.44 107.13 107.40 106.44 105.22 105.98 - 105.70 103.11 100.74 105.31 99.05 96.99 100.38 98.49 95.70 94.48 93.02 92.40 74.34 70.69 64.59 64.44 53.90 55.35 27.41 10.77 - 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 122.17 122.10 121.55 121.25 119.77 118.91 117.24 119.47 119.38 118.65 118.89 118.59 118.84 118.07 117.60 117.00 117.52 117.69 117.32 - 117.82 116.50 115.76 113.59 114.29 115.14 114.41 114.94 113.39 113.16 112.41 113.23 112.65 112.19 111.51 110.84 110.74 112.66 113.73 113.83 - 113.38 113.81 112.93 113.00 113.47 110.27 112.08 110.70 110.46 109.37 109.63 107.23 108.23 104.55 105.43 109.27 108.64 107.47 105.88 106.57 - 106.17 105.66 104.44 101.96 101.54 101.95 98.23 98.22 97.87 97.60 98.54 97.50 92.54 82.75 80.54 77.53 58.36 57.67 44.08 32.22 - 31.61 17.15 7.00 -10.00 22.73 14.44 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 122.43 121.17 119.78 120.97 118.48 119.15 118.97 118.47 118.88 119.09 118.65 118.09 117.64 117.00 116.16 115.67 117.56 117.65 117.34 - 117.70 115.96 112.36 115.92 114.70 116.04 114.81 114.34 113.10 113.61 112.24 112.68 112.52 111.87 112.38 111.24 110.27 112.99 113.11 114.08 - 113.25 113.44 113.10 113.04 112.50 113.45 113.38 110.92 110.92 110.45 108.61 109.20 109.34 109.70 108.77 108.79 109.54 108.41 106.96 106.47 - 106.26 105.78 104.38 104.92 105.18 101.94 102.03 99.50 100.16 99.16 99.31 97.73 93.59 89.06 92.38 84.76 73.56 72.49 64.33 63.09 - 61.70 59.04 21.68 11.28 10.75 7.00 7.30 11.40 7.39 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 - -10.00 122.91 122.45 121.55 119.41 120.51 118.94 117.89 117.17 117.95 119.03 118.61 118.30 116.93 117.86 115.64 117.35 117.29 117.18 116.34 - 116.74 115.19 116.93 114.24 113.79 112.98 114.75 114.70 113.64 113.42 112.32 112.38 112.88 109.88 111.80 108.73 107.95 112.49 112.54 112.85 - 113.62 112.93 112.91 112.73 113.14 112.36 111.27 112.22 109.47 107.20 108.87 108.93 108.69 108.40 108.59 109.20 108.80 108.04 108.39 107.39 - 105.62 104.94 105.50 105.47 105.98 103.72 101.99 102.33 99.44 98.72 100.42 99.95 92.31 92.83 92.28 91.99 87.46 81.43 62.51 63.29 - 66.54 54.74 46.04 15.73 31.53 7.00 12.94 7.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 - -10.00 -10.00 -10.00 - -10.00 122.42 121.56 122.21 119.75 118.73 118.23 116.91 117.25 116.37 116.73 117.29 117.89 118.66 118.19 115.23 117.02 117.10 117.94 118.33 - 117.06 116.88 116.09 113.88 114.26 115.17 115.22 115.25 114.04 113.92 113.94 112.03 112.37 112.12 110.69 111.68 106.29 107.32 112.28 112.61 - 112.73 112.56 112.68 113.77 112.57 111.57 111.01 110.59 109.95 108.92 109.81 107.53 107.64 106.28 108.85 108.89 108.59 108.79 107.27 110.05 - 106.73 107.89 106.35 105.24 105.04 104.52 104.18 102.40 100.96 99.65 100.77 100.49 97.83 96.30 96.04 95.64 90.27 83.52 77.59 76.65 - 74.95 62.75 51.66 63.91 44.25 20.25 24.18 20.88 7.00 25.83 13.49 8.13 22.32 -10.00 -10.00 8.40 7.00 7.61 10.19 17.31 - 10.61 -10.00 -10.00 - -10.00 122.06 120.94 121.13 119.76 119.31 118.27 116.53 117.34 117.76 117.60 116.72 118.20 117.85 117.61 117.68 116.73 117.38 117.53 116.86 - 117.18 115.90 115.86 113.98 113.97 113.31 113.53 114.32 114.59 112.91 113.43 112.40 113.21 111.25 111.16 109.24 110.91 111.25 110.82 111.97 - 111.89 111.99 112.51 111.62 112.57 111.15 110.59 111.76 111.05 111.50 109.77 107.50 109.51 107.13 109.08 109.30 108.51 108.09 106.93 107.17 - 108.76 108.41 106.04 106.40 105.40 104.32 103.90 104.39 100.79 102.15 102.19 99.17 98.73 97.81 97.34 99.10 95.95 96.71 88.18 89.25 - 80.65 75.93 72.01 69.16 63.27 48.05 55.04 36.89 26.86 42.82 37.31 34.38 15.94 16.57 18.89 15.83 17.41 16.18 17.67 17.09 - 21.14 7.00 -10.00 - -10.00 122.08 121.60 121.73 121.35 119.83 117.87 117.74 116.87 116.65 116.88 116.77 116.73 117.32 118.03 118.54 116.80 118.14 116.60 117.86 - 116.59 117.24 117.22 114.99 113.78 115.47 115.80 114.46 114.07 113.16 112.17 113.76 112.58 108.75 108.85 108.59 109.46 110.24 111.04 111.38 - 111.75 111.79 109.85 112.83 111.60 110.16 111.17 111.84 109.30 109.41 109.26 109.90 108.35 105.26 108.08 108.75 108.21 108.93 107.24 108.30 - 108.29 106.98 107.51 108.07 107.50 104.89 104.66 103.40 102.48 104.46 101.98 100.97 99.17 97.48 98.55 94.79 99.77 94.89 93.29 90.91 - 85.09 82.24 81.03 81.84 73.56 66.04 63.23 55.27 55.16 58.26 55.14 52.19 46.83 40.71 31.06 35.90 41.56 34.06 33.67 26.39 - 30.50 26.65 -10.00 - -10.00 122.23 119.59 120.56 121.05 120.00 118.69 118.24 115.42 117.12 116.97 116.82 116.04 117.71 117.67 118.32 118.14 118.05 116.50 117.56 - 116.79 116.59 115.75 116.28 114.07 115.59 114.24 115.17 115.54 114.19 113.72 112.75 112.33 108.66 108.11 104.50 108.14 106.83 106.85 110.92 - 110.34 111.81 111.63 111.59 111.14 112.02 111.50 111.52 110.32 109.84 109.05 108.93 108.62 109.75 107.83 108.23 107.70 107.36 108.37 109.63 - 107.36 107.44 107.59 106.84 107.47 105.93 104.38 104.49 103.68 104.33 100.98 103.33 100.92 101.00 98.87 97.56 97.27 101.77 95.67 94.67 - 90.03 86.23 86.90 82.38 78.57 66.63 65.01 65.16 70.81 68.74 69.06 64.63 59.32 48.56 43.51 52.48 43.55 51.11 44.28 43.60 - 43.83 40.12 -10.00 - -10.00 122.25 121.57 120.38 118.69 118.21 117.35 113.85 116.33 116.40 117.16 117.70 117.91 117.35 118.28 118.82 118.95 117.22 115.54 116.57 - 117.19 116.66 116.22 115.35 115.86 114.22 114.06 115.40 114.48 113.89 112.19 111.22 110.29 111.03 109.43 107.34 107.77 108.95 108.43 108.44 - 110.60 109.11 109.68 111.31 111.06 111.90 111.30 108.01 109.10 109.03 107.63 108.05 107.22 107.28 107.56 108.52 108.43 108.65 108.01 107.71 - 109.49 108.67 107.47 106.97 106.23 105.95 104.90 104.90 104.75 105.06 103.92 102.59 103.24 100.94 102.01 100.19 99.76 97.77 96.08 95.70 - 96.35 94.76 92.46 90.06 82.60 81.01 84.24 88.05 85.65 81.93 82.49 76.03 69.06 67.14 65.54 64.80 60.44 60.90 50.67 44.88 - 53.48 48.74 -10.00 - -10.00 123.05 122.06 121.09 118.15 116.79 117.45 116.79 116.92 116.08 117.72 117.43 118.83 117.93 118.45 118.80 117.72 116.93 113.03 112.69 - 116.38 114.86 114.76 114.76 115.84 114.97 114.17 110.56 113.05 113.25 114.61 111.63 114.23 115.51 112.35 101.84 106.18 107.50 112.58 108.47 - 107.92 108.39 109.38 111.89 110.76 110.37 109.17 110.33 109.15 108.97 108.60 109.69 108.01 107.41 109.06 108.52 109.39 108.69 109.90 108.89 - 109.66 107.98 108.33 106.89 106.95 105.10 104.82 105.65 106.53 104.45 103.24 103.52 101.74 100.76 101.40 100.85 101.55 98.47 98.32 97.83 - 95.25 96.57 95.57 93.74 90.56 91.67 90.67 89.71 89.28 88.60 88.52 86.94 86.42 79.77 85.93 74.65 73.22 68.21 59.27 59.93 - 62.01 53.17 -10.00 - -10.00 127.77 123.83 122.45 120.55 120.28 118.54 116.07 116.63 115.09 115.59 116.39 116.45 116.86 117.91 117.57 117.42 117.27 116.93 114.16 - 115.42 115.51 116.11 115.01 114.89 112.68 113.89 114.63 114.61 114.73 112.93 111.75 109.70 109.19 108.60 105.18 107.42 109.54 112.13 111.39 - 111.00 108.95 110.90 110.88 110.84 110.36 109.87 109.05 108.63 107.32 108.60 108.16 108.26 107.96 108.41 109.28 109.00 108.02 109.44 109.20 - 109.92 110.79 106.95 107.49 106.01 105.12 105.96 105.91 104.52 104.47 104.43 104.37 102.52 102.47 102.45 100.28 100.94 100.75 99.46 100.11 - 98.74 98.13 96.45 95.80 95.12 94.80 94.22 92.04 90.18 89.45 89.03 88.47 87.31 86.46 85.00 84.06 82.35 79.97 79.24 78.44 - 79.91 78.27 -10.00 - -10.00 126.95 128.36 127.38 122.56 120.03 119.40 118.49 118.65 117.76 117.57 114.14 114.99 116.66 117.24 118.49 119.32 116.81 116.32 115.89 - 115.16 117.31 114.97 112.55 114.46 113.76 114.92 113.59 113.45 114.46 113.80 112.93 110.48 110.07 109.03 107.80 104.27 108.17 108.44 110.02 - 111.61 110.38 110.02 109.85 111.22 110.29 109.47 109.40 110.30 108.74 107.22 108.43 105.38 104.97 105.66 108.49 107.74 110.15 109.99 106.77 - 108.29 108.25 108.00 105.84 105.94 106.75 106.37 105.04 105.13 105.73 103.50 102.93 104.69 102.08 103.13 101.25 100.88 102.00 100.07 99.51 - 99.73 98.51 98.45 98.47 96.71 95.42 95.23 93.47 92.11 91.44 91.13 90.61 89.06 88.48 89.75 86.74 86.16 85.19 84.36 84.26 - 83.12 81.69 -10.00 - -10.00 124.05 127.20 128.35 126.16 122.09 118.86 118.34 117.05 116.56 115.58 115.32 114.18 116.81 117.47 116.36 117.63 116.78 115.87 115.15 - 115.02 114.78 115.12 114.80 114.07 113.63 113.24 110.39 113.94 113.62 113.60 113.13 112.92 112.87 111.37 109.67 108.21 108.49 107.42 108.80 - 110.19 109.25 108.58 109.80 109.53 109.49 108.90 109.57 108.17 107.40 107.54 107.41 106.22 107.27 106.96 104.98 109.24 109.29 108.63 108.81 - 107.98 108.61 107.99 106.63 107.33 106.64 105.78 104.89 106.37 105.48 103.89 105.50 103.52 103.44 101.38 104.54 103.47 103.41 102.64 99.17 - 101.78 100.79 99.73 98.78 98.53 96.73 96.21 95.20 93.61 92.37 92.44 92.67 91.20 90.53 89.56 88.41 87.96 87.47 86.78 85.69 - 84.59 84.46 -10.00 - -10.00 121.07 124.93 125.50 127.52 126.11 121.79 119.09 117.89 116.93 116.94 115.97 116.34 114.43 115.54 115.72 115.93 117.68 116.44 116.59 - 115.63 111.93 116.23 115.02 114.20 113.21 113.13 112.08 111.99 110.29 114.32 113.05 113.74 113.32 110.84 110.13 108.69 109.79 109.76 108.65 - 108.61 108.12 109.73 108.15 109.68 109.17 109.71 108.89 108.71 107.50 107.32 106.55 107.43 106.51 105.90 106.61 107.59 100.29 107.85 108.67 - 109.07 106.43 106.37 107.83 107.42 107.03 105.69 107.66 105.91 105.13 105.22 104.23 106.40 104.60 103.98 104.20 103.47 102.72 101.92 102.09 - 98.31 98.25 98.52 99.16 98.75 98.07 96.86 96.12 94.45 93.56 93.05 93.40 91.99 92.38 91.45 90.08 89.78 88.92 88.37 87.39 - 86.17 85.98 -10.00 - -10.00 121.03 122.02 123.28 124.89 127.18 123.82 118.67 118.51 117.24 116.58 117.07 117.14 117.28 115.97 117.48 116.21 116.35 116.84 116.39 - 117.35 115.66 115.40 113.52 114.15 115.20 113.75 112.38 109.47 110.58 112.83 113.05 112.25 110.56 110.43 110.99 108.92 108.85 110.23 109.36 - 109.78 108.72 108.13 106.76 109.16 109.84 108.90 108.30 107.30 107.01 107.41 108.26 106.41 105.20 105.45 103.70 106.85 107.91 108.22 108.02 - 108.27 107.50 106.36 106.74 106.40 105.95 106.20 106.77 104.85 105.72 105.18 104.74 105.58 105.12 105.02 104.00 102.53 101.77 100.00 101.02 - 99.46 100.58 99.82 99.19 98.46 98.41 97.20 96.48 95.48 94.81 94.10 93.30 93.01 92.76 93.11 91.83 91.26 90.58 88.10 88.50 - 87.34 87.27 -10.00 - -10.00 120.75 119.56 122.15 122.77 123.12 124.79 123.51 120.07 116.25 116.80 116.88 117.38 117.86 116.76 116.22 116.43 116.99 116.94 116.71 - 117.38 116.15 115.59 115.63 113.21 114.03 114.37 113.82 112.34 111.93 112.23 112.45 110.63 112.41 110.29 112.11 109.73 110.72 109.11 110.20 - 109.53 109.25 107.15 109.59 108.21 107.45 108.42 107.64 107.70 106.30 106.20 106.35 104.97 106.46 106.33 103.10 103.98 107.00 104.65 107.58 - 107.50 107.66 106.37 106.27 104.76 103.91 100.49 105.24 105.56 105.45 105.26 106.06 103.25 103.73 103.58 103.48 101.91 102.61 101.86 101.26 - 100.85 98.18 100.08 99.54 98.88 98.09 96.67 96.37 95.50 95.64 95.68 94.47 93.77 93.90 93.85 91.89 92.82 92.01 90.75 89.60 - 88.38 88.34 -10.00 - -10.00 121.03 118.91 119.18 121.24 122.19 122.35 122.30 121.46 117.95 115.86 117.88 116.97 116.87 117.21 116.47 117.24 116.97 116.79 115.12 - 115.46 117.05 115.50 116.42 114.00 112.81 112.94 113.17 114.37 113.86 112.50 111.99 113.08 111.53 114.25 111.26 110.94 110.52 108.91 110.33 - 109.21 109.11 109.32 109.73 108.09 107.34 107.53 107.50 106.51 107.33 105.55 104.01 105.65 107.05 108.22 103.52 105.68 105.03 105.93 101.13 - 105.54 106.75 105.26 104.83 103.75 105.30 104.86 105.27 105.79 104.46 106.42 105.48 103.96 104.05 104.03 102.53 103.00 101.96 102.18 99.59 - 102.27 100.74 100.63 100.12 98.86 98.68 97.55 97.06 95.99 95.97 95.75 94.86 95.16 94.67 94.17 93.54 92.57 92.20 91.27 90.64 - 90.60 90.08 -10.00 - -10.00 121.17 119.84 119.00 121.35 120.71 120.83 120.08 121.07 120.09 115.82 115.76 116.95 117.96 117.48 117.92 116.79 117.10 115.62 116.77 - 117.33 115.74 115.00 114.84 114.08 111.60 113.96 113.57 114.52 113.24 114.04 113.46 113.59 113.02 112.53 111.49 111.50 109.48 109.84 109.81 - 109.44 109.41 110.35 107.40 108.38 106.63 107.77 106.65 107.99 106.37 105.92 106.19 108.61 108.73 109.78 103.66 106.50 106.69 107.92 105.03 - 105.25 105.42 104.32 105.34 105.26 102.92 104.14 105.23 104.01 103.58 105.64 103.77 105.17 103.78 104.84 103.90 103.24 102.21 101.99 101.35 - 102.59 101.09 101.51 101.06 101.18 100.41 98.48 97.45 97.21 96.53 96.13 95.28 95.56 95.26 93.82 93.48 93.28 92.50 91.75 91.90 - 90.95 89.97 -10.00 - -10.00 125.23 121.12 118.26 119.63 120.60 120.14 120.71 119.97 119.00 116.15 115.98 118.42 118.43 118.25 117.75 116.18 115.95 117.23 116.41 - 117.28 115.17 115.15 114.17 114.41 113.22 113.41 113.91 112.93 114.37 113.75 112.85 112.67 113.46 112.41 112.54 111.25 110.21 111.21 110.04 - 110.44 110.74 108.88 108.88 108.14 107.78 106.30 108.58 107.36 106.28 107.27 110.26 109.97 109.34 107.12 109.41 106.43 106.95 102.69 103.49 - 104.01 104.03 104.56 105.69 104.23 102.33 105.19 103.99 103.73 105.51 102.90 104.42 105.32 104.12 104.70 105.02 103.53 101.90 102.90 101.90 - 101.12 101.88 101.37 101.01 100.82 100.23 100.49 98.80 98.01 97.20 96.23 95.51 95.88 95.93 94.87 94.51 93.34 92.80 92.41 92.51 - 90.73 89.95 -10.00 - -10.00 126.78 123.93 119.51 117.61 120.07 120.84 119.60 119.84 120.48 118.87 118.39 117.85 118.52 117.31 116.53 116.88 116.51 116.39 115.38 - 114.57 114.80 114.28 116.45 115.01 113.57 113.34 112.27 113.35 111.53 114.18 112.18 113.05 113.32 113.40 112.68 111.07 107.38 111.28 111.16 - 111.77 109.71 110.54 109.35 109.07 107.81 108.30 107.20 107.18 107.41 111.75 110.06 108.89 108.37 109.78 108.87 107.68 107.27 105.29 105.03 - 104.57 103.99 105.75 102.71 104.05 105.02 104.16 103.38 104.70 103.77 102.99 105.57 103.91 103.75 103.85 103.75 104.39 102.61 102.99 105.02 - 103.47 102.85 102.25 100.79 101.17 100.24 100.61 99.45 99.40 98.54 98.35 97.30 97.39 95.51 94.60 94.22 93.73 93.43 93.51 90.92 - 90.66 90.45 -10.00 - -10.00 129.08 124.37 121.20 119.56 118.42 120.01 120.10 119.76 120.68 119.80 119.35 118.42 117.06 116.59 117.06 116.53 116.63 114.33 114.24 - 113.54 114.26 114.71 114.40 113.41 113.61 114.63 114.17 114.96 112.93 113.49 113.30 113.51 112.47 112.63 110.68 110.77 111.15 111.64 112.36 - 109.80 111.04 110.00 109.75 107.57 109.69 108.53 108.30 107.82 105.08 109.47 108.67 107.83 109.84 108.21 108.94 108.02 106.31 105.46 105.11 - 103.87 105.44 103.28 102.76 106.07 104.95 101.72 105.09 104.36 103.62 104.85 103.43 102.66 102.89 102.52 104.05 102.61 102.70 102.23 102.32 - 102.55 102.83 103.02 101.80 102.14 100.73 99.93 100.03 99.29 99.17 97.94 96.88 98.27 97.64 96.50 96.33 95.60 94.46 92.90 92.03 - 91.98 91.62 -10.00 - -10.00 129.61 128.46 122.74 122.48 119.29 119.96 120.34 121.62 120.11 120.12 117.85 118.94 118.62 118.14 117.61 116.76 115.45 115.00 113.97 - 115.43 115.15 114.59 114.34 113.71 115.57 114.71 114.82 113.91 112.64 113.75 113.43 113.02 113.03 112.17 112.23 110.93 111.40 112.11 111.07 - 110.55 110.89 110.00 109.34 109.60 109.69 109.47 108.16 109.16 109.82 107.14 107.70 106.93 109.09 108.18 107.81 107.36 105.40 104.46 105.12 - 105.27 103.67 103.32 105.03 107.47 103.29 105.43 104.77 102.63 101.81 103.89 103.20 103.20 103.11 102.37 102.13 102.24 102.49 101.22 102.53 - 101.81 102.44 102.61 102.68 101.82 101.40 100.44 99.96 99.09 98.72 97.93 96.82 98.00 97.39 97.86 96.84 95.97 94.61 94.50 93.89 - 93.57 92.74 -10.00 - -10.00 129.31 127.96 125.52 125.59 124.53 122.00 120.32 120.74 118.13 118.08 120.05 118.98 118.14 118.69 117.33 115.57 116.63 116.38 116.03 - 113.80 115.85 114.32 114.11 115.39 114.37 114.42 113.92 113.80 111.27 114.44 112.42 113.55 112.27 112.18 111.73 110.63 110.32 111.13 111.74 - 109.47 110.61 109.76 110.43 109.85 110.02 108.27 109.93 109.87 107.78 109.49 108.18 109.10 107.54 106.54 107.95 106.30 106.08 106.61 105.52 - 104.36 102.99 105.61 106.36 103.48 104.55 105.95 104.42 103.20 104.46 103.09 101.83 101.95 100.53 103.66 103.01 102.33 100.01 101.87 101.90 - 101.02 101.62 101.06 101.33 101.10 100.99 100.53 100.94 99.71 99.61 98.59 97.36 97.17 95.97 96.35 96.48 96.43 95.41 95.22 94.58 - 94.55 94.17 -10.00 - -10.00 125.69 125.38 126.77 127.14 123.45 122.83 119.90 119.61 118.52 117.90 118.48 119.64 117.59 117.27 117.48 115.81 117.20 115.01 115.32 - 115.79 114.03 115.11 115.11 115.53 113.94 111.77 113.99 113.40 114.14 113.64 112.88 111.43 112.00 113.19 112.67 111.84 111.67 112.27 110.28 - 110.27 108.99 110.09 110.61 110.80 108.52 110.87 110.28 110.57 109.61 108.22 107.07 108.02 107.98 107.76 107.43 106.02 106.08 106.78 103.33 - 104.15 104.31 104.44 101.95 104.50 105.08 105.58 103.11 105.57 104.34 103.36 103.24 103.04 102.40 102.44 101.19 101.88 100.96 102.01 100.87 - 101.35 101.51 100.68 100.52 100.01 99.52 99.37 99.12 99.52 100.38 98.81 98.45 97.65 97.31 96.09 92.77 94.86 94.83 95.01 94.84 - 94.41 93.91 -10.00 - -10.00 123.76 125.05 123.70 122.06 122.16 122.31 120.09 121.19 119.10 116.67 117.57 116.45 117.10 117.04 116.29 117.29 115.87 116.26 115.15 - 115.30 115.48 114.74 115.83 114.31 114.21 114.42 114.02 114.22 113.52 112.70 112.72 112.54 112.45 112.53 111.88 110.99 110.88 110.22 110.95 - 110.14 109.33 109.86 110.15 108.88 110.83 111.65 110.26 109.46 108.26 107.79 108.43 107.90 107.81 108.13 106.97 107.42 106.88 104.32 104.37 - 104.74 105.08 102.81 102.75 106.17 106.17 103.10 103.33 104.94 103.26 103.46 103.45 103.18 102.25 102.72 101.79 101.64 100.37 101.19 100.30 - 100.62 100.41 100.08 99.94 99.99 98.57 98.52 98.20 97.43 97.43 97.48 98.03 98.53 97.75 96.28 96.28 95.09 95.30 94.56 94.58 - 93.30 93.00 -10.00 - -10.00 124.79 123.55 122.12 121.03 119.62 121.28 122.18 120.87 120.79 118.98 116.92 116.06 117.25 117.97 115.87 114.19 115.83 113.20 114.76 - 115.34 115.41 115.83 113.76 114.14 112.94 115.38 114.00 114.03 111.74 112.17 112.77 112.83 112.08 112.04 111.32 112.33 109.90 110.83 109.83 - 109.94 110.69 110.62 109.32 109.80 110.77 110.85 109.00 109.29 108.00 108.86 107.87 107.63 108.52 106.93 108.02 107.34 107.41 105.97 105.33 - 105.87 105.31 102.55 102.79 106.02 104.64 104.70 105.70 103.91 103.85 104.81 104.89 104.18 103.80 102.70 101.65 101.57 100.99 100.86 101.17 - 102.11 101.20 100.18 100.22 99.83 99.37 98.71 98.31 97.68 97.78 97.17 97.09 96.26 95.81 97.13 96.30 97.28 95.95 95.89 95.29 - 94.40 93.58 -10.00 - -10.00 123.85 122.39 122.94 122.22 122.18 119.82 120.75 121.12 119.70 120.15 118.34 116.54 117.05 114.90 115.76 117.09 115.09 116.32 116.20 - 116.03 114.31 113.91 114.22 114.28 115.98 114.11 113.36 112.54 113.42 113.09 112.53 112.76 111.60 112.04 112.12 110.54 108.62 109.31 107.60 - 110.33 110.60 109.34 109.25 112.77 110.75 110.43 110.18 108.29 109.57 107.81 107.15 108.00 106.44 107.55 107.57 107.42 106.02 106.49 106.56 - 104.76 103.98 103.99 103.74 103.07 101.11 105.34 105.50 104.21 103.54 104.18 103.58 103.30 102.75 102.10 102.12 101.70 101.92 101.64 101.28 - 101.93 100.29 100.27 99.95 99.44 99.33 99.29 98.56 97.74 97.46 97.16 97.39 97.14 96.85 95.94 96.62 95.68 96.62 95.76 95.97 - 95.04 94.70 -10.00 - -10.00 121.64 122.18 122.67 121.96 121.16 121.29 120.28 119.22 119.62 119.09 120.22 116.78 114.74 116.01 115.36 114.78 116.27 116.54 117.27 - 113.72 114.62 113.93 114.11 114.17 114.01 114.56 112.43 112.71 113.47 112.45 112.54 112.48 112.12 112.35 110.95 109.67 110.41 110.18 111.23 - 109.81 110.81 109.93 112.14 110.41 109.54 109.13 107.91 110.39 108.83 108.23 108.71 106.94 107.09 107.74 107.51 106.16 106.46 107.15 104.90 - 104.60 104.72 105.10 104.54 101.83 100.29 101.66 105.75 104.15 105.25 104.53 104.34 103.15 103.25 102.68 102.95 101.69 102.99 101.75 100.88 - 102.03 101.14 100.38 100.00 99.49 99.10 98.79 98.15 97.88 97.68 96.98 97.30 96.97 96.47 96.83 96.07 96.41 95.54 95.57 95.30 - 94.67 95.49 -10.00 - -10.00 122.01 121.78 120.53 121.25 121.82 119.18 119.46 119.48 120.08 119.74 118.02 116.42 112.58 114.42 113.95 116.40 116.75 117.22 115.13 - 115.76 114.68 114.56 114.81 113.83 113.83 112.69 113.25 113.03 112.99 113.02 111.33 112.04 112.19 110.86 111.57 110.14 109.31 111.99 106.94 - 110.15 109.53 111.70 111.20 109.39 109.86 109.64 109.96 109.01 108.69 108.19 107.45 107.97 107.35 107.45 105.99 105.93 106.89 108.07 105.88 - 105.10 105.69 104.51 102.57 102.18 103.39 101.81 100.90 104.33 104.32 104.68 102.54 101.99 102.79 103.18 101.94 101.59 101.57 101.81 101.46 - 102.20 101.24 101.17 101.07 99.36 99.26 99.03 98.35 97.78 97.69 97.30 97.35 96.86 96.89 96.16 96.81 95.82 95.79 95.92 94.23 - 95.31 95.57 -10.00 - -10.00 122.38 120.63 120.81 119.86 117.23 119.76 117.53 119.45 119.22 116.91 118.04 117.37 116.38 115.85 115.85 117.10 114.35 116.03 115.92 - 114.36 115.16 114.47 114.02 113.21 112.61 113.28 113.00 113.07 113.05 112.14 112.20 112.10 110.88 111.99 110.50 110.55 112.41 110.37 111.05 - 109.24 111.55 111.95 110.65 109.24 109.75 110.48 109.21 107.71 106.47 107.83 107.25 107.97 107.79 105.30 106.32 106.65 107.36 106.68 105.92 - 105.91 106.57 104.41 103.09 103.18 103.42 101.22 100.90 101.87 106.72 105.76 102.93 102.60 101.61 100.04 101.60 101.87 101.83 102.03 102.39 - 101.86 101.27 100.03 100.29 99.65 99.27 99.12 98.71 98.58 97.84 97.58 97.40 97.50 96.95 97.11 96.34 96.52 96.86 95.91 95.73 - 95.20 95.37 -10.00 - -10.00 121.63 121.23 119.84 118.72 119.39 119.01 117.64 117.89 117.61 119.61 117.67 117.45 115.60 116.08 116.26 115.30 115.50 115.63 115.36 - 115.74 115.58 114.71 113.03 113.12 113.31 112.92 113.10 112.53 111.96 111.68 112.41 110.87 112.05 108.20 111.19 112.20 110.49 110.74 109.35 - 111.30 110.21 110.13 108.73 110.27 109.73 110.00 108.39 108.44 107.11 108.20 107.92 107.78 105.79 105.34 106.27 107.50 106.22 104.89 106.09 - 106.71 105.91 103.83 103.86 104.07 104.99 103.12 101.41 98.42 102.31 108.04 108.15 104.59 104.55 101.80 101.89 100.93 102.53 101.27 102.96 - 101.99 102.06 100.97 99.74 100.06 100.89 100.65 99.10 99.10 96.74 97.52 98.23 97.94 97.53 96.83 96.92 97.00 95.96 95.52 95.79 - 95.88 94.88 -10.00 - -10.00 120.37 119.33 120.21 119.24 117.51 118.07 117.02 118.65 117.48 117.28 117.82 117.16 118.47 117.50 114.31 115.56 114.86 114.87 117.17 - 113.46 113.69 113.34 112.41 113.33 113.07 112.96 113.37 111.26 111.91 112.68 110.28 110.78 110.38 110.44 112.02 110.81 111.05 107.43 110.98 - 109.89 110.23 110.00 109.70 108.84 110.25 109.43 107.53 108.52 108.36 106.58 107.28 106.98 106.61 106.59 107.40 105.61 106.24 106.28 107.44 - 106.18 104.36 103.66 105.26 104.23 102.90 102.50 102.51 102.99 99.50 99.95 104.78 114.49 105.52 102.26 101.95 100.84 100.85 100.54 102.03 - 101.26 101.56 101.44 100.75 99.50 98.87 99.59 91.00 100.42 98.68 97.26 97.72 96.66 96.31 96.75 96.59 96.55 95.70 95.42 96.02 - 96.71 98.20 -10.00 - -10.00 119.77 119.45 117.20 119.03 117.80 114.72 117.42 118.13 117.44 116.55 117.42 117.99 117.51 111.93 115.73 113.59 114.52 116.49 114.78 - 114.86 112.81 113.52 113.71 113.67 113.15 113.37 111.70 112.45 113.05 111.06 111.38 110.69 110.35 111.86 109.90 110.67 109.66 110.80 110.22 - 107.80 107.85 109.33 107.80 109.25 108.63 108.48 109.64 106.88 106.99 108.28 106.90 107.14 107.31 106.78 105.86 104.26 106.08 106.70 106.79 - 104.81 103.27 103.71 104.22 104.72 103.55 101.79 102.64 102.68 102.72 101.49 101.12 99.67 111.22 125.45 112.68 102.20 102.99 100.08 100.03 - 99.31 100.04 100.70 99.61 96.33 99.69 99.01 98.92 99.63 99.88 99.89 95.33 95.37 95.34 95.36 95.87 98.70 98.90 98.91 98.45 - 97.64 97.98 -10.00 - -10.00 119.51 119.09 118.62 117.20 117.06 117.76 117.95 116.97 117.25 115.46 117.90 115.91 113.58 115.14 114.07 114.90 112.79 113.94 114.17 - 113.04 112.05 114.06 110.96 113.35 114.27 111.81 112.69 112.84 111.45 111.19 111.13 110.52 111.85 111.48 111.01 109.52 109.38 108.48 110.89 - 109.37 109.67 108.88 107.35 109.25 107.45 108.06 107.82 105.05 105.71 106.78 106.22 107.17 104.56 106.23 105.07 105.52 105.84 106.48 105.25 - 104.75 103.52 104.33 104.81 103.06 102.87 101.80 103.69 101.17 101.18 101.80 102.03 98.25 98.80 96.71 104.13 121.85 120.43 104.27 101.42 - 99.42 98.48 99.13 98.88 99.29 98.32 98.54 99.57 98.37 98.18 96.54 95.32 95.33 95.33 96.70 96.17 96.18 98.88 98.90 98.94 - 98.81 98.14 -10.00 - -10.00 119.37 118.68 117.23 118.30 117.25 116.18 116.23 117.04 117.19 117.25 117.43 117.30 116.29 115.48 114.86 113.89 112.31 113.95 112.95 - 114.03 114.97 114.19 113.36 113.48 112.63 111.73 112.88 109.53 112.33 111.44 110.56 111.90 111.26 111.21 110.35 110.09 111.22 110.54 109.66 - 109.08 109.06 109.12 108.79 107.29 107.93 108.12 107.12 107.17 106.38 106.30 106.44 106.77 107.39 106.04 105.87 106.35 107.10 106.51 104.75 - 104.38 104.84 104.29 104.39 103.80 102.06 102.59 102.44 102.11 100.97 101.47 101.34 100.70 99.76 98.23 96.23 97.48 99.82 106.51 112.80 - 108.56 102.92 99.21 95.72 98.09 97.97 97.23 98.40 98.31 97.04 97.15 97.21 97.19 97.12 97.14 96.15 96.16 99.44 98.89 98.77 - 98.46 97.39 -10.00 - -10.00 118.78 117.84 118.03 117.14 115.91 116.45 116.73 116.28 116.61 114.07 117.48 115.34 115.23 115.09 114.49 114.04 112.82 111.52 113.32 - 113.85 114.38 113.47 112.95 111.54 112.58 112.72 111.38 112.31 111.53 111.78 109.89 111.75 111.70 111.07 109.56 111.93 109.27 110.03 109.47 - 108.23 108.61 109.31 108.54 107.50 106.89 107.17 107.69 107.26 107.82 107.61 106.77 107.09 101.35 105.03 105.23 104.56 106.81 105.41 105.13 - 104.31 103.85 106.04 103.79 103.20 103.55 103.78 100.46 100.67 101.84 102.34 100.15 99.02 99.64 99.14 99.52 98.21 96.38 97.37 96.93 - 96.15 100.34 101.51 96.15 98.07 97.63 97.07 97.29 98.25 97.65 97.91 97.03 97.22 97.05 97.11 96.15 96.16 99.68 99.61 98.61 - 98.44 97.36 -10.00 - -10.00 119.06 119.81 116.85 116.87 117.05 117.21 116.90 116.17 116.03 120.10 114.49 113.75 114.95 114.65 113.78 113.62 112.28 111.73 113.20 - 112.74 112.68 113.21 111.01 113.06 113.15 111.10 113.17 111.63 110.62 108.89 112.12 111.04 112.17 110.25 111.80 110.72 111.03 109.28 109.54 - 109.25 106.61 109.26 107.24 107.05 107.19 105.84 105.46 106.53 106.85 106.41 107.19 105.94 105.58 105.07 105.70 104.06 105.13 104.72 103.88 - 104.96 104.33 104.29 103.63 102.84 103.00 104.10 104.53 99.69 100.21 100.26 100.68 99.30 98.27 98.16 98.38 98.08 95.79 96.96 97.51 - 96.84 95.97 95.22 96.17 96.37 97.51 96.11 95.77 98.10 97.41 97.51 96.99 97.33 97.13 96.10 96.35 96.56 99.16 98.30 98.54 - 96.56 97.24 -10.00 - -10.00 118.52 117.76 115.56 116.96 117.24 117.22 116.21 116.80 115.97 114.65 114.11 114.21 113.03 114.30 113.01 112.18 112.94 113.11 112.30 - 111.84 111.56 111.12 112.59 112.44 109.89 113.46 112.00 111.85 110.26 112.26 111.56 111.76 110.37 110.98 110.56 111.75 110.17 109.13 107.29 - 108.23 106.21 108.69 108.70 107.23 108.64 107.37 103.92 106.16 106.69 106.79 107.27 105.36 105.73 104.99 104.80 105.25 104.13 104.22 104.61 - 103.68 105.09 105.35 104.24 104.22 104.19 102.51 102.57 103.26 102.49 101.63 100.33 97.44 98.61 97.94 97.69 97.91 97.39 97.46 98.10 - 97.53 96.97 96.28 96.03 95.99 95.12 95.71 95.27 96.19 96.01 97.46 97.76 97.08 97.67 96.50 96.82 97.32 96.38 97.99 95.43 - 95.96 95.03 -10.00 - -10.00 117.81 117.62 118.86 117.56 117.21 116.90 117.42 116.55 116.98 115.45 114.27 113.84 113.95 112.62 112.19 113.09 113.20 112.41 110.78 - 110.74 109.41 110.72 112.45 111.59 112.81 111.33 111.83 110.67 112.16 110.79 110.70 109.40 110.48 111.46 111.65 110.93 109.63 109.56 109.47 - 109.22 109.48 108.67 108.69 109.04 107.81 108.04 107.09 106.70 105.86 105.86 106.14 106.51 106.12 105.85 104.55 105.77 105.49 105.15 105.30 - 105.04 105.14 104.67 103.35 104.62 104.47 103.50 102.91 102.43 102.29 101.94 101.66 99.40 99.22 98.91 98.48 97.80 97.65 97.77 97.39 - 97.03 97.02 96.37 96.44 96.51 95.11 95.76 95.43 95.84 95.16 95.93 96.64 96.87 96.96 97.37 97.96 96.32 97.38 95.96 97.41 - 95.55 94.74 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 - -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 146.38 148.51 143.80 148.11 144.13 147.17 146.53 146.09 143.07 143.81 144.73 146.63 146.16 146.55 144.34 141.64 141.53 139.39 136.69 + 137.43 136.69 135.68 135.18 134.48 136.63 137.75 136.70 137.07 136.78 136.00 135.63 135.23 134.60 134.07 132.86 133.31 132.32 131.50 131.82 + 131.76 130.68 130.91 130.70 129.23 128.79 129.27 127.42 127.71 128.14 128.56 128.98 128.60 127.60 127.81 127.24 126.21 124.46 125.15 124.46 + 123.42 122.92 120.16 118.50 118.34 116.78 116.85 116.80 115.35 114.74 115.19 114.26 114.46 113.97 113.48 112.33 112.95 110.62 111.51 111.90 + 111.26 110.22 108.90 108.23 107.87 106.88 106.55 105.54 104.44 104.30 103.99 103.14 102.07 101.82 99.36 98.70 97.92 97.14 96.03 95.52 + 94.54 93.13 -10.00 + -10.00 153.46 148.42 141.56 143.96 146.03 144.23 145.78 146.07 146.59 145.54 145.06 145.72 144.27 142.90 140.15 142.78 140.34 139.53 138.03 + 136.61 136.89 135.77 134.84 135.12 136.60 137.07 136.58 135.81 135.96 135.79 135.10 134.83 134.12 132.93 132.84 132.41 131.74 131.48 131.87 + 131.20 130.97 130.21 130.26 129.85 128.70 127.55 129.61 128.19 128.49 128.60 128.71 128.64 128.29 127.59 125.91 125.31 125.05 124.90 123.65 + 122.76 121.61 120.65 117.78 116.51 117.70 118.41 117.99 117.35 116.93 116.28 115.31 114.47 113.93 112.61 112.20 112.09 112.12 111.89 110.88 + 110.86 110.23 108.88 107.87 107.31 106.01 106.09 104.21 103.49 103.77 103.24 102.32 100.83 100.70 98.83 97.62 96.87 96.08 94.58 94.30 + 91.32 91.12 -10.00 + -10.00 152.58 148.10 144.65 144.97 142.53 144.91 142.93 145.51 147.56 143.96 142.81 143.85 143.21 142.13 140.89 140.57 139.26 139.94 138.74 + 137.49 136.33 135.36 136.22 135.39 136.34 136.59 136.25 135.69 135.17 134.39 134.82 134.00 133.71 132.17 131.92 132.68 131.44 132.35 131.87 + 131.07 130.95 130.87 129.80 129.93 129.35 129.26 127.70 128.41 127.15 128.61 128.17 127.08 127.14 126.42 125.32 125.07 124.80 124.23 122.92 + 121.76 121.80 121.34 119.90 118.50 118.23 118.06 117.50 117.70 117.56 115.92 115.11 115.66 114.19 113.43 112.86 111.71 111.38 110.89 109.97 + 109.40 108.21 107.80 106.19 105.53 104.44 104.19 104.74 102.17 102.20 101.57 100.07 99.30 98.75 97.12 95.91 95.36 94.06 93.18 90.91 + 89.73 88.07 -10.00 + -10.00 152.97 149.53 146.70 139.69 143.00 145.29 139.82 143.01 144.38 139.94 144.69 144.06 143.88 142.30 141.83 141.01 139.74 139.28 138.24 + 136.85 136.85 135.54 134.63 135.01 136.28 135.80 135.59 134.13 134.41 134.33 132.80 134.00 133.26 131.89 132.10 131.88 132.04 131.93 131.87 + 131.56 131.26 130.40 129.84 130.03 129.69 129.27 129.15 129.62 127.80 126.93 126.34 126.57 125.65 125.85 125.43 125.26 124.66 123.86 122.57 + 122.38 121.56 120.96 120.40 118.53 118.26 118.16 118.25 117.29 115.49 114.27 113.55 113.70 113.09 112.63 111.22 110.90 109.55 109.60 108.39 + 107.29 101.76 103.58 104.62 103.69 102.36 101.94 102.54 100.44 99.37 98.92 97.90 97.03 96.03 94.96 94.68 93.22 91.87 91.15 88.69 + 86.85 84.65 -10.00 + -10.00 153.38 150.35 147.12 140.51 141.72 141.95 139.79 136.88 140.26 141.50 144.34 144.41 143.12 141.37 140.76 140.33 139.12 138.23 137.06 + 136.53 136.15 134.98 134.72 135.27 135.79 134.65 133.96 134.50 133.87 134.16 133.50 133.53 133.86 132.76 132.32 132.25 132.89 132.11 131.70 + 131.45 131.82 130.46 130.39 129.34 129.22 129.44 128.70 128.34 127.35 126.31 126.33 125.65 125.93 125.81 125.25 125.05 124.77 123.60 122.01 + 121.85 120.88 120.40 120.00 118.18 117.57 117.58 116.81 115.80 113.66 112.56 110.20 110.55 110.19 109.11 108.96 108.94 107.58 106.18 105.69 + 100.76 95.41 100.46 101.55 100.43 99.50 97.82 97.20 94.29 93.70 94.49 93.44 92.92 92.84 91.88 91.70 91.17 90.56 87.60 85.45 + 83.78 81.93 -10.00 + -10.00 153.15 152.63 144.81 144.62 143.50 145.46 142.42 136.35 140.90 141.10 143.91 143.73 141.23 141.47 140.34 141.76 137.31 137.44 136.01 + 135.31 135.53 135.33 134.36 134.85 134.93 134.51 134.08 134.07 134.76 133.93 133.84 133.81 133.48 132.91 132.42 131.89 132.15 132.40 131.90 + 131.50 131.18 130.70 129.70 129.79 129.63 128.69 127.85 127.35 125.97 124.94 124.02 124.47 124.62 123.60 124.97 123.71 122.98 122.74 121.58 + 121.48 120.37 119.29 119.45 118.16 117.59 116.74 114.97 113.79 111.91 108.30 108.45 108.19 107.02 105.33 105.56 104.94 104.32 97.03 95.57 + 96.41 92.68 95.52 96.28 95.47 95.23 92.49 88.94 88.22 81.50 79.43 82.35 86.93 86.89 88.38 87.93 87.37 75.53 69.71 74.22 + 77.37 76.47 -10.00 + -10.00 152.24 150.77 146.73 146.32 144.94 143.74 138.57 134.72 136.58 138.25 141.86 142.33 141.64 139.25 139.37 138.41 136.89 136.20 136.33 + 135.46 135.69 134.52 135.50 134.83 133.76 133.80 133.73 133.82 133.87 133.83 133.85 133.78 132.75 132.34 132.54 131.34 130.92 132.22 131.91 + 130.00 129.36 128.37 128.93 127.82 128.51 127.83 126.52 126.80 125.95 125.25 125.13 124.82 124.56 124.63 124.59 123.65 122.98 122.38 121.31 + 120.59 119.93 119.38 118.49 116.76 115.54 114.69 113.48 111.76 106.17 103.07 103.20 104.09 101.04 103.75 103.46 102.68 100.99 94.83 87.19 + 92.50 95.68 95.22 87.63 88.38 91.72 86.48 87.82 83.65 83.46 80.01 80.32 84.60 84.40 84.32 81.91 76.77 66.47 59.95 54.65 + 60.88 56.93 -10.00 + -10.00 152.27 151.16 149.53 146.08 144.67 141.62 135.08 132.85 136.56 141.83 142.28 143.42 139.93 137.99 137.73 137.54 135.88 136.23 133.90 + 135.24 134.63 134.71 134.08 133.19 133.86 132.72 133.75 133.58 132.99 132.56 133.13 132.86 132.62 132.07 132.02 131.06 131.73 131.45 130.58 + 129.10 128.19 127.91 128.26 127.73 126.89 127.15 126.61 126.21 125.11 125.60 125.26 125.26 123.93 122.94 122.83 122.27 121.89 121.65 120.94 + 119.52 117.79 117.40 116.05 115.11 114.17 112.80 109.14 106.95 105.90 102.03 100.90 97.52 99.13 100.96 101.29 99.91 98.63 96.99 94.61 + 95.30 94.08 92.63 87.66 86.00 89.41 86.92 86.10 83.50 85.07 83.84 84.50 82.69 82.08 76.26 68.74 55.32 48.97 48.28 44.00 + 39.35 45.29 -10.00 + -10.00 152.59 151.32 148.51 145.83 144.75 141.18 136.44 131.58 134.82 141.38 141.35 139.46 139.57 137.99 137.31 136.39 136.90 136.74 135.59 + 134.97 134.09 134.45 133.66 133.14 132.86 132.69 132.44 131.83 131.90 131.66 131.63 131.95 131.99 132.18 131.82 131.11 130.83 130.20 130.67 + 129.66 129.47 128.38 127.68 127.02 126.40 126.21 126.40 125.51 125.53 124.62 124.71 124.25 122.83 122.11 122.16 121.56 120.90 119.84 118.63 + 117.54 116.32 115.82 114.24 112.81 110.18 108.35 105.49 103.22 97.45 94.93 97.10 98.09 98.33 97.58 97.37 96.22 95.70 92.71 91.46 + 91.06 91.95 85.25 83.62 86.59 87.37 84.46 83.66 84.07 82.67 81.03 79.81 77.40 75.37 55.80 44.84 42.04 40.61 33.52 33.97 + 33.61 33.22 -10.00 + -10.00 152.55 149.86 148.55 146.18 143.66 136.03 138.36 134.22 131.46 139.70 140.66 139.26 138.22 137.41 137.22 137.66 137.44 137.15 136.43 + 135.98 134.34 133.51 132.81 132.98 132.69 132.45 133.16 132.32 132.02 131.23 131.54 131.18 131.86 132.05 131.28 130.83 130.93 129.63 129.48 + 129.13 128.88 128.13 127.82 125.98 126.00 125.73 125.80 125.18 124.55 124.12 123.58 122.68 121.34 119.51 118.50 117.97 118.73 117.81 116.58 + 113.32 113.17 111.93 110.69 109.81 107.57 105.73 102.70 101.18 97.59 94.81 88.93 89.05 93.04 93.51 92.57 87.39 80.03 84.09 83.92 + 84.04 87.49 86.41 83.83 85.19 82.94 82.32 81.45 81.65 80.34 76.86 71.61 68.52 66.23 32.89 24.19 19.68 14.30 12.18 23.42 + 26.95 27.21 -10.00 + -10.00 149.45 148.23 146.82 144.86 142.58 139.64 139.98 130.48 131.96 138.74 139.62 138.09 136.94 136.99 136.83 137.80 137.68 136.37 135.06 + 133.79 134.06 133.51 130.84 132.32 132.30 132.85 132.80 131.87 131.62 131.85 131.84 131.20 131.57 131.78 130.96 129.68 129.65 129.77 129.04 + 128.67 128.08 127.42 127.60 126.53 125.96 125.83 124.80 124.93 124.45 123.01 121.68 117.66 118.16 117.29 114.35 115.41 115.67 113.07 113.17 + 110.40 107.98 104.56 105.00 104.42 103.77 102.55 101.29 100.05 98.07 92.78 90.17 87.93 86.73 85.25 87.42 86.60 78.30 79.53 80.65 + 76.04 77.06 79.76 81.07 79.78 81.77 80.30 81.07 79.06 75.59 69.54 56.09 39.23 22.68 7.15 18.85 23.62 7.00 8.62 12.35 + 21.92 17.79 -10.00 + -10.00 149.02 147.33 148.52 144.68 142.63 140.27 136.26 132.13 133.78 137.98 138.96 137.69 137.20 136.55 137.11 137.05 136.56 135.87 134.70 + 133.68 132.93 132.52 132.84 132.59 132.78 132.81 132.38 132.02 131.14 131.25 131.74 131.25 130.89 130.58 130.05 129.19 128.90 128.99 128.48 + 127.17 126.94 126.11 126.31 126.78 125.98 125.18 124.20 123.62 122.12 120.97 119.86 117.79 114.45 113.34 111.38 110.69 108.00 109.64 109.04 + 106.53 104.49 100.44 99.73 100.34 98.39 98.45 97.97 98.08 96.45 94.31 91.89 90.98 91.53 90.49 88.88 87.12 86.94 84.85 83.21 + 81.08 75.81 75.26 75.51 76.55 77.60 76.96 70.47 73.13 71.44 62.28 27.08 7.00 7.00 7.00 7.00 11.13 -10.00 -10.00 8.21 + 10.43 10.12 -10.00 + -10.00 148.83 148.36 148.54 145.56 142.17 137.93 137.84 136.37 132.38 138.49 138.40 137.12 136.10 136.04 136.91 137.08 136.26 136.35 133.73 + 133.55 133.55 132.36 131.75 132.25 132.81 131.69 131.87 131.38 131.83 131.48 131.32 131.67 130.89 129.64 129.30 128.27 128.03 128.55 128.00 + 127.03 126.95 125.89 126.00 126.01 124.71 124.07 123.05 121.64 120.37 119.35 118.63 116.68 114.29 109.25 106.63 106.70 105.04 104.42 104.05 + 101.78 96.82 98.32 91.79 95.11 94.55 95.32 89.01 92.01 89.73 93.28 92.70 91.64 89.78 89.22 88.29 87.42 86.03 80.29 78.23 + 81.69 77.82 76.63 74.65 71.41 71.00 75.75 67.79 58.98 65.46 51.07 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 148.37 146.20 147.63 145.13 142.68 137.44 137.82 135.26 134.47 137.73 138.25 137.20 136.56 136.52 137.40 136.45 135.20 135.19 134.27 + 133.36 132.80 132.75 132.78 133.60 133.18 131.71 130.94 131.69 131.01 131.75 131.38 130.50 130.01 129.90 129.15 128.62 127.92 128.23 127.63 + 126.98 126.56 126.01 125.45 125.05 122.33 119.74 119.75 119.09 112.93 116.09 115.68 112.15 109.97 107.25 103.60 101.78 101.37 99.56 99.88 + 98.54 98.34 95.30 93.65 91.15 87.12 84.40 86.60 82.26 87.54 88.50 88.20 87.70 87.47 86.39 85.48 83.91 82.20 80.91 82.19 + 79.40 79.42 77.82 75.78 73.92 71.57 67.08 68.73 62.93 56.41 40.67 22.16 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 147.31 145.78 145.57 142.13 141.08 138.09 136.63 134.76 137.79 137.93 137.73 136.49 136.32 136.62 136.97 136.41 135.21 134.42 132.91 + 132.69 132.83 132.57 131.96 133.06 132.41 131.83 131.74 131.31 131.08 131.39 130.35 129.18 129.90 128.63 129.47 128.17 127.46 126.93 127.18 + 126.90 126.73 125.97 125.05 124.43 119.54 110.07 112.85 111.81 111.60 110.95 107.16 106.73 100.48 100.45 98.40 94.47 95.59 94.60 93.14 + 94.87 92.89 92.43 90.08 88.46 85.86 85.79 85.08 81.99 81.41 82.93 83.18 84.64 81.02 82.86 75.84 80.38 78.77 79.95 79.72 + 78.77 78.99 78.20 76.17 74.45 72.92 67.09 63.56 58.66 51.00 39.21 25.67 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 146.77 144.42 143.53 140.81 140.33 136.73 136.70 136.29 137.89 137.87 137.41 136.38 135.85 135.34 135.32 134.85 134.48 133.57 132.57 + 132.66 132.53 132.77 131.98 132.40 131.84 131.49 131.70 131.84 131.14 131.37 129.81 128.51 128.93 128.76 127.97 127.47 126.64 126.45 126.15 + 126.14 125.63 125.24 124.61 123.75 120.80 116.05 107.43 106.24 107.00 104.94 94.77 74.56 90.07 92.72 90.59 86.43 89.26 89.47 89.34 + 89.79 87.16 87.28 83.77 77.04 70.92 73.56 73.31 77.71 64.83 74.60 74.25 75.33 77.13 78.76 78.78 78.07 73.81 77.91 77.47 + 78.06 77.62 77.13 75.69 73.58 70.82 65.52 59.36 54.79 50.01 37.82 25.70 14.23 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 145.59 145.42 143.10 141.50 140.25 140.26 139.41 136.92 137.37 137.20 137.26 136.85 135.77 133.99 134.40 133.37 133.41 133.64 132.37 + 132.88 132.86 132.28 131.87 131.44 131.07 131.80 130.16 131.34 131.02 130.70 129.91 129.26 129.10 128.42 127.88 127.12 126.80 126.27 126.49 + 125.26 125.22 124.91 124.10 118.74 116.62 109.88 105.64 96.63 92.91 93.89 84.53 66.78 81.48 84.44 80.95 82.25 83.08 84.27 84.31 + 85.80 81.33 82.45 81.15 81.05 79.65 66.98 67.62 63.31 63.09 65.29 68.17 69.89 72.53 66.34 74.54 74.25 76.65 75.82 76.78 + 76.19 76.50 75.75 74.37 72.14 68.15 63.78 59.08 52.91 47.53 37.80 24.54 12.96 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 144.88 144.67 140.64 142.10 142.04 139.45 138.95 137.65 136.58 137.76 134.59 135.04 134.90 135.40 134.74 133.19 131.66 131.33 131.95 + 132.15 132.39 131.71 131.14 131.91 131.54 131.37 130.87 130.78 130.33 130.05 128.98 128.90 128.50 127.22 126.62 127.14 131.44 126.02 125.10 + 124.76 124.18 124.00 122.64 117.69 105.12 85.46 81.08 80.84 84.91 81.16 73.85 71.55 66.82 74.34 79.52 78.21 79.93 81.05 75.71 + 79.80 78.81 78.39 78.69 76.92 72.19 69.42 64.29 60.36 61.49 64.44 64.44 65.64 65.33 65.32 67.03 70.18 71.64 73.75 72.63 + 74.43 74.59 74.16 72.61 66.76 55.39 60.05 56.11 51.49 44.79 35.37 21.32 10.57 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 142.65 142.25 143.21 140.81 139.51 139.30 137.75 136.56 135.89 138.05 136.50 134.35 133.64 132.96 132.43 133.61 131.92 131.44 131.64 + 131.89 132.09 131.93 131.82 132.15 131.19 130.93 131.12 130.29 129.93 129.49 128.28 128.18 127.85 127.44 127.08 125.98 126.57 125.52 124.89 + 123.94 123.48 122.43 119.36 112.29 93.18 76.26 70.84 76.35 71.53 69.46 67.83 66.65 64.58 64.77 70.03 71.26 70.44 69.16 70.47 + 75.17 74.20 69.16 60.65 57.84 57.35 59.35 54.43 54.72 57.12 61.33 57.43 56.88 59.18 59.65 62.21 65.60 68.51 69.46 70.52 + 71.28 72.41 71.12 68.06 48.75 46.62 54.11 51.95 47.86 41.52 31.50 18.11 7.22 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 144.04 142.46 142.06 141.44 139.45 138.75 137.60 137.08 137.75 136.74 135.58 134.84 133.81 132.59 131.44 130.91 130.01 131.88 132.58 + 132.44 132.84 131.87 131.65 132.25 130.90 131.21 131.12 130.57 129.92 128.96 128.39 127.71 126.96 127.11 126.63 125.78 125.28 124.91 123.34 + 119.89 117.34 114.55 114.86 110.97 96.66 78.26 67.03 75.04 69.90 70.57 70.48 69.02 64.68 63.50 64.92 68.63 68.87 68.28 66.74 + 64.24 69.67 66.50 60.48 58.13 58.36 52.19 54.25 54.99 52.67 56.79 52.28 52.78 53.08 54.22 56.35 58.22 63.32 65.54 66.43 + 67.59 68.18 66.93 58.67 40.57 47.96 49.27 48.50 44.20 37.97 27.22 14.47 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 142.75 141.95 141.05 139.57 138.11 139.05 135.93 135.33 137.51 136.44 135.43 134.37 133.36 136.18 132.48 130.83 130.10 130.79 132.03 + 132.20 133.57 131.90 132.54 131.34 130.32 131.10 130.93 130.45 129.75 127.11 126.66 127.01 127.03 126.45 126.77 125.25 125.88 125.93 123.02 + 113.72 108.21 111.76 108.26 108.38 95.32 78.00 67.27 72.99 73.66 71.37 72.24 69.65 68.73 63.20 64.54 65.45 66.43 66.22 65.19 + 62.97 58.60 57.00 55.67 56.07 56.26 54.81 51.54 48.54 43.02 39.95 41.11 40.38 45.31 48.20 49.98 47.97 53.37 58.10 61.43 + 62.99 58.78 53.21 48.10 37.80 46.93 47.30 45.34 39.74 32.93 21.72 10.40 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 143.38 140.97 140.27 139.69 138.23 137.87 135.25 135.77 136.01 135.46 135.49 134.46 132.53 132.39 130.64 130.60 131.76 132.44 132.07 + 132.77 132.79 132.06 131.79 131.67 130.98 130.61 128.97 129.09 129.46 128.09 127.69 127.25 126.14 125.10 126.50 124.92 123.76 122.76 120.38 + 114.85 111.40 107.25 105.99 99.88 94.03 79.00 76.36 73.21 74.34 75.64 75.12 74.01 72.23 67.74 66.60 61.68 64.19 64.62 61.07 + 61.04 57.54 55.88 53.13 52.71 54.63 53.53 49.52 44.98 42.60 39.17 38.07 36.92 35.95 42.77 48.14 47.61 48.99 50.21 56.05 + 53.36 45.62 41.42 37.09 36.26 41.05 43.42 41.24 36.41 26.92 15.48 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 142.04 140.75 141.23 139.71 138.22 137.55 134.71 135.14 136.34 135.06 134.82 133.27 132.73 131.86 130.73 130.46 131.88 132.67 134.25 + 133.36 132.29 131.46 131.35 129.95 130.74 131.16 129.93 129.39 127.22 128.71 127.44 122.97 122.97 124.21 125.16 124.67 121.51 119.83 117.59 + 119.64 114.62 110.27 102.99 101.35 86.22 92.30 75.24 79.71 81.28 80.18 79.03 76.96 77.82 73.58 66.23 62.34 64.87 63.48 61.26 + 59.21 57.71 55.62 52.81 50.86 49.46 46.63 48.39 46.98 43.39 39.62 36.67 34.14 33.56 35.54 35.71 46.00 48.54 47.11 50.04 + 49.08 43.34 40.64 34.04 37.83 41.03 41.47 36.83 31.37 19.61 10.30 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 142.31 141.04 140.15 140.98 138.99 137.95 136.56 135.30 135.17 134.34 133.62 132.80 131.94 131.14 129.93 130.56 132.22 134.37 135.30 + 133.32 131.23 131.26 130.73 129.90 130.70 129.87 129.31 127.45 127.64 125.75 126.34 123.18 120.84 123.60 124.76 122.09 121.58 117.56 115.18 + 112.76 114.98 108.51 106.51 103.54 98.76 91.69 82.18 81.65 86.09 83.90 80.51 81.04 78.92 77.09 74.07 65.84 67.67 60.90 58.87 + 55.47 50.79 50.07 48.57 47.27 47.03 45.79 45.26 43.42 42.96 40.96 36.70 35.63 34.63 36.22 38.89 42.27 44.03 43.07 45.31 + 46.95 45.37 40.20 37.28 37.83 36.40 38.96 34.75 22.79 12.53 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 141.36 140.37 140.55 140.27 139.18 136.53 136.05 134.49 133.01 133.94 133.43 131.73 131.11 130.09 130.69 131.89 131.73 134.40 134.81 + 132.88 131.67 131.09 130.27 129.76 129.00 129.57 128.51 126.60 125.78 125.67 110.82 120.36 123.13 123.45 121.93 121.17 111.93 110.50 114.81 + 109.54 107.85 106.87 106.23 105.57 102.70 98.03 84.29 91.56 88.94 85.22 83.46 80.26 75.59 76.27 75.21 71.68 68.76 59.60 56.89 + 53.67 49.52 46.46 43.97 43.61 46.38 43.76 41.08 41.80 38.18 36.18 33.75 34.03 33.70 34.95 35.75 38.84 43.21 40.86 40.25 + 42.68 41.09 37.50 36.11 36.14 35.86 35.84 28.11 16.70 8.61 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 140.79 140.45 140.24 139.44 138.90 137.25 135.10 134.16 133.17 132.70 131.84 131.41 130.56 130.37 131.55 132.41 132.62 133.83 133.07 + 133.26 130.88 129.70 129.23 129.33 128.99 128.88 128.70 126.18 125.39 124.83 123.97 122.26 122.95 122.73 120.84 114.70 111.50 107.67 112.61 + 108.29 106.66 101.87 105.22 104.16 100.99 97.29 94.99 92.51 89.63 86.03 82.11 77.34 77.22 73.68 73.67 69.95 65.59 54.93 50.81 + 52.22 51.73 48.07 44.92 46.15 44.90 42.61 40.86 37.31 35.10 31.06 28.58 29.32 31.36 33.56 33.03 34.05 40.15 41.13 39.61 + 38.21 38.16 36.73 35.29 32.41 32.36 30.22 21.50 9.62 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 140.45 140.22 139.77 138.81 138.81 137.60 136.35 134.12 131.95 132.58 130.96 129.81 130.76 130.27 131.75 134.11 134.34 133.73 133.34 + 132.30 130.74 129.41 128.46 126.98 127.63 128.11 127.69 125.65 126.52 124.07 124.14 123.75 121.74 122.10 114.67 115.42 113.72 112.37 100.16 + 96.87 95.34 101.29 99.82 99.10 97.83 96.22 92.82 91.61 90.09 84.55 78.22 73.18 74.51 73.54 72.09 66.33 61.09 52.31 48.83 + 52.72 52.25 49.95 47.36 48.34 46.49 43.39 39.35 36.07 34.20 31.63 29.93 29.08 28.71 29.95 28.44 32.16 35.10 35.85 34.39 + 34.61 35.71 33.24 30.46 27.44 25.98 22.38 11.71 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 140.55 140.41 139.68 138.45 138.75 136.76 135.76 133.77 132.23 131.16 129.77 130.21 129.92 130.59 132.42 134.11 133.90 133.20 132.38 + 131.97 128.03 128.87 128.82 127.97 126.03 127.72 127.24 124.28 124.88 123.72 124.45 122.81 123.56 121.47 121.21 119.90 114.33 115.84 108.12 + 104.82 98.69 98.34 95.32 97.37 94.87 90.52 94.14 86.58 86.70 85.98 79.49 69.19 59.66 58.85 69.54 65.00 53.25 50.17 50.39 + 53.69 48.96 52.67 49.80 48.33 45.04 44.31 38.88 34.54 32.35 30.58 28.88 27.46 28.03 28.41 31.03 32.81 30.41 30.00 30.82 + 29.96 26.78 25.92 23.10 19.57 17.16 9.75 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 139.87 140.96 139.66 138.30 137.71 136.12 133.32 133.66 131.42 131.05 130.46 129.42 129.61 130.54 132.08 135.33 133.59 132.85 132.89 + 131.52 130.21 129.61 128.04 126.38 127.01 127.18 126.42 124.08 124.53 123.68 124.15 123.40 122.82 122.23 122.09 120.57 118.82 113.25 103.56 + 94.29 95.87 99.38 95.91 92.33 83.12 87.46 89.73 84.30 83.98 83.59 80.47 65.90 60.45 64.84 58.25 55.06 55.72 52.63 52.36 + 53.00 52.19 52.16 51.64 47.83 46.59 38.79 38.10 33.83 31.55 28.55 26.60 26.50 26.85 26.99 25.42 24.11 20.74 23.93 16.83 + 18.85 11.60 7.00 7.32 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 140.24 139.75 139.72 138.36 136.62 136.21 135.06 133.45 131.04 129.40 129.88 129.75 129.37 130.51 131.10 134.26 133.36 132.94 132.28 + 132.13 130.23 128.21 127.98 125.83 126.35 126.68 122.38 123.96 124.11 124.35 124.44 123.87 123.87 123.25 121.97 121.81 117.56 106.35 94.20 + 95.63 89.46 92.60 81.35 82.42 74.61 77.73 79.30 80.55 82.05 77.60 80.04 71.31 64.59 58.94 56.40 53.68 54.88 55.23 56.71 + 48.67 51.49 53.23 49.09 45.57 43.81 40.06 32.64 32.18 29.46 28.76 28.66 28.03 28.49 20.26 20.23 20.65 20.87 20.40 13.11 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 140.66 140.14 139.24 137.73 136.65 135.87 133.91 132.67 131.06 129.37 129.87 129.79 129.12 130.95 131.74 133.72 133.84 132.38 131.57 + 130.72 130.02 129.50 125.08 126.92 126.45 126.39 124.56 124.89 124.72 124.58 124.82 123.30 124.06 122.88 122.68 121.94 121.34 113.86 115.44 + 104.81 100.37 99.21 80.52 86.00 82.38 72.94 59.05 78.56 77.84 76.49 77.63 73.57 67.45 57.58 52.80 62.50 59.14 57.10 58.59 + 52.67 51.84 47.47 33.28 29.41 26.47 27.81 19.37 17.19 13.51 29.42 32.02 29.58 23.19 24.14 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 140.16 140.27 138.97 137.02 136.02 135.18 133.75 130.82 130.94 129.53 128.59 129.20 129.15 131.40 131.63 133.56 134.31 132.99 131.59 + 131.59 130.89 129.16 128.58 126.87 124.61 125.44 123.90 125.58 124.13 124.49 123.91 123.75 123.70 122.20 122.07 121.16 120.99 120.13 117.72 + 114.19 111.36 109.18 106.49 102.43 99.54 89.00 71.68 76.32 80.78 78.84 76.37 77.26 73.83 66.41 61.84 66.87 56.95 58.65 50.79 + 44.38 26.99 16.72 16.08 -10.00 -10.00 -10.00 -10.00 -10.00 24.76 35.87 35.73 22.97 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 140.20 138.82 138.58 137.35 134.68 134.01 132.86 132.10 130.90 129.92 128.54 128.69 130.89 131.08 131.76 132.34 133.00 131.74 130.66 + 130.61 129.70 128.74 127.46 127.64 124.75 125.46 125.16 125.08 124.42 123.44 123.75 123.97 122.74 122.83 122.72 121.81 120.22 118.09 118.05 + 115.76 114.69 111.97 111.35 109.03 106.17 103.40 101.75 98.69 95.42 90.21 80.82 65.09 54.47 55.49 48.93 39.08 33.45 21.08 14.62 + 20.41 18.17 -10.00 -10.00 -10.00 -10.00 -10.00 16.37 41.58 36.50 40.79 38.79 35.98 30.89 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 139.77 139.39 138.61 136.65 135.83 133.25 131.91 131.23 130.73 130.05 128.92 129.16 131.55 131.87 132.91 133.02 133.06 131.18 130.40 + 128.85 128.19 128.23 127.38 126.30 125.59 124.83 124.41 124.91 123.72 123.97 123.55 123.07 123.93 123.17 122.33 121.77 121.14 119.08 118.71 + 115.87 113.08 113.72 113.60 112.37 109.36 106.34 104.09 101.07 97.17 95.15 91.63 88.13 87.42 83.18 78.62 78.96 73.12 67.77 62.51 + 58.15 52.53 53.41 58.03 60.73 58.23 53.42 50.77 43.53 39.18 28.94 29.46 37.00 27.52 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 140.74 139.82 138.52 136.05 134.91 132.71 131.05 131.86 130.91 129.89 128.92 129.70 130.32 131.37 132.52 133.47 133.16 131.65 129.64 + 128.68 127.97 127.24 127.32 126.69 126.60 125.12 124.92 124.99 124.07 123.20 121.15 123.03 124.32 122.80 122.21 122.22 121.18 120.07 116.80 + 116.62 115.86 115.57 114.97 113.04 110.69 106.53 105.22 102.57 99.85 98.20 96.47 93.39 90.41 88.39 86.70 83.95 80.28 73.09 68.56 + 68.73 71.34 61.63 68.52 72.43 70.24 60.56 57.90 53.06 31.83 21.59 46.22 37.53 43.44 40.44 36.95 34.16 33.27 27.56 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 139.64 138.79 137.65 137.33 136.26 134.12 132.36 132.08 130.88 129.58 129.25 128.72 130.16 131.64 133.01 133.02 131.75 131.13 128.72 + 128.58 127.28 127.06 127.23 126.99 127.03 126.57 124.29 123.90 123.20 121.96 122.99 122.86 122.82 122.98 122.53 121.94 121.60 117.96 118.11 + 117.40 117.12 116.85 115.11 113.32 111.27 109.07 105.60 103.19 101.83 100.65 98.36 97.02 93.08 91.40 88.71 88.03 84.70 81.71 79.83 + 78.18 77.49 76.95 79.82 76.39 73.03 66.21 64.26 55.93 51.88 52.64 52.27 47.24 41.39 45.46 45.35 43.37 40.10 36.76 35.08 + 29.07 29.44 27.68 15.09 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 138.83 138.47 135.94 135.91 134.30 132.52 130.25 130.19 130.91 130.85 130.29 128.67 129.70 131.59 132.82 132.46 131.09 129.73 129.12 + 127.34 127.22 125.63 126.32 126.07 125.51 126.09 125.37 124.76 123.89 123.18 122.19 123.09 122.66 121.90 122.24 122.83 122.15 120.71 117.92 + 117.91 118.69 117.34 115.64 112.73 109.79 108.96 107.79 105.61 103.48 101.55 99.36 97.15 96.94 93.69 77.64 83.45 87.37 84.38 83.17 + 80.38 80.52 82.51 81.94 79.01 75.81 71.07 59.40 58.24 59.91 55.48 55.31 52.72 49.71 49.36 48.19 45.08 39.72 37.42 39.22 + 39.07 38.27 35.58 30.83 26.04 26.79 23.13 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 9.56 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 138.56 138.80 135.20 135.95 133.66 132.21 131.19 130.87 130.52 129.70 129.07 128.03 129.29 131.53 132.65 132.15 131.05 130.39 127.74 + 127.49 127.15 125.75 126.27 126.81 126.16 126.08 124.90 123.51 123.33 122.58 120.82 122.25 122.45 122.23 121.38 121.92 121.75 121.92 120.15 + 119.58 118.77 117.92 116.66 114.18 110.11 109.32 108.51 106.94 104.62 103.08 100.77 99.68 97.74 86.51 79.56 69.77 85.80 85.01 80.82 + 78.50 84.37 84.10 80.28 76.74 74.89 70.78 67.05 67.04 64.19 61.25 56.31 54.32 51.24 51.21 47.35 41.74 42.27 40.33 41.54 + 41.90 40.83 40.34 38.63 35.53 34.96 33.62 31.79 28.96 26.79 23.01 7.71 16.97 15.50 16.24 14.84 7.68 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 137.81 136.72 133.09 135.86 134.11 133.34 132.39 132.06 130.36 129.51 129.15 128.49 130.13 130.73 131.04 130.22 129.03 128.55 127.53 + 127.24 127.06 125.37 125.42 126.72 126.14 125.53 124.80 124.36 123.94 123.12 122.41 121.12 121.49 121.79 121.52 122.25 121.82 121.19 120.89 + 118.51 119.18 117.73 116.73 114.81 112.35 112.22 110.98 107.88 104.32 104.26 101.96 100.19 98.07 94.98 87.66 67.38 71.52 86.55 83.32 + 83.21 84.25 81.95 79.01 73.65 67.11 65.68 58.73 62.66 62.27 61.20 58.58 58.40 50.42 47.24 47.52 44.74 35.95 40.76 40.05 + 39.72 42.32 40.42 38.59 37.71 35.84 35.29 35.34 32.62 30.40 28.82 26.72 24.68 22.68 20.43 17.31 10.25 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 137.54 137.25 136.98 131.80 133.54 133.00 132.78 131.62 130.87 129.72 128.73 129.61 130.28 131.52 131.19 130.23 129.29 125.78 127.74 + 126.62 126.01 125.43 125.39 126.12 126.11 124.00 124.59 123.87 123.42 123.14 121.89 122.04 120.32 120.40 121.11 121.41 121.28 120.07 120.69 + 119.32 119.87 118.21 117.50 115.10 114.35 112.42 112.35 109.25 105.04 103.57 101.58 100.34 99.09 96.74 95.32 71.78 71.69 87.35 85.40 + 85.34 83.32 76.87 76.38 73.53 69.24 64.49 61.58 57.27 57.17 58.72 57.08 54.20 51.67 49.39 49.91 44.24 41.29 34.66 37.62 + 35.04 36.15 37.46 37.89 38.08 37.84 36.65 35.21 33.32 32.10 30.02 27.53 26.24 23.17 21.06 18.30 10.55 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 136.69 136.02 135.91 135.23 134.68 133.34 132.36 131.64 130.58 129.57 129.11 130.28 130.38 130.40 129.86 129.22 127.16 127.17 126.03 + 126.10 126.95 125.49 125.10 125.15 124.89 125.27 125.16 123.96 123.13 122.37 122.20 120.74 119.80 119.54 120.27 120.13 119.93 121.00 120.47 + 119.71 119.31 118.32 116.49 116.25 115.19 113.37 112.17 110.16 106.94 102.63 100.13 98.66 98.08 96.92 95.88 91.90 84.85 87.78 88.05 + 86.28 82.56 80.57 69.18 67.64 68.53 67.07 58.85 53.75 54.91 54.58 56.14 50.61 49.61 50.74 45.20 43.95 39.71 38.44 32.66 + 30.32 23.82 23.12 27.76 33.26 34.81 35.32 34.07 32.86 30.81 29.68 27.23 25.63 23.78 21.15 16.02 9.40 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 135.30 136.84 136.90 135.68 134.06 133.04 132.94 131.39 129.65 129.25 129.14 130.03 130.70 129.60 129.27 128.64 126.98 125.78 126.01 + 125.94 126.25 125.55 124.56 124.50 124.97 124.75 124.51 123.18 123.27 122.79 122.10 121.67 120.90 118.91 120.30 118.84 119.60 119.57 119.52 + 119.83 119.75 117.88 117.31 116.90 116.31 115.25 112.85 110.35 107.81 104.36 95.81 96.32 96.80 95.73 94.53 94.17 90.84 89.24 85.74 + 83.58 85.62 82.08 75.16 58.18 66.51 66.09 61.56 58.35 54.37 50.07 51.32 50.53 50.21 48.14 44.18 38.43 37.34 38.36 37.65 + 27.97 22.28 18.61 16.54 23.01 29.10 33.25 32.84 30.74 29.26 28.26 26.78 25.38 21.27 18.54 14.64 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 136.81 135.81 136.59 135.32 134.51 131.98 131.49 129.88 128.13 129.11 130.09 130.07 130.40 129.45 128.57 128.15 127.94 125.94 125.90 + 125.13 125.96 125.64 125.27 123.97 124.40 124.43 124.44 123.45 122.46 122.36 122.01 120.98 120.22 119.94 119.70 118.23 117.63 118.31 118.54 + 119.76 119.36 117.43 117.11 116.82 116.30 114.18 112.90 109.78 106.36 103.19 96.50 94.61 95.49 91.38 93.02 92.25 91.04 87.46 82.04 + 81.70 84.80 80.54 80.19 74.65 71.38 68.81 62.34 53.10 49.02 46.72 49.68 45.04 47.41 43.56 40.69 39.75 37.39 34.35 35.81 + 29.01 27.82 -10.00 -10.00 17.00 22.17 29.09 29.48 27.66 27.54 26.43 25.09 23.31 19.58 17.36 12.93 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 135.05 135.37 135.43 134.78 133.57 132.03 131.23 130.13 128.58 129.52 130.79 129.51 129.55 129.07 128.68 127.86 127.11 125.12 124.91 + 124.52 124.57 124.76 124.49 124.33 124.00 123.89 123.97 123.82 123.07 121.85 122.14 121.74 119.40 119.21 117.53 118.44 116.77 116.21 117.89 + 118.57 118.21 117.07 116.57 116.08 114.54 113.83 112.49 109.83 107.44 102.15 98.34 96.87 94.07 92.88 91.05 89.13 85.65 81.83 82.03 + 80.04 80.34 80.50 76.82 74.86 71.96 64.26 62.34 53.66 49.87 48.13 45.77 46.15 44.82 44.44 40.09 42.05 37.38 28.73 32.28 + 30.68 27.27 11.32 -10.00 -10.00 18.20 25.05 25.91 27.20 27.08 25.83 22.26 19.86 17.74 14.52 9.06 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 136.03 134.97 135.82 135.17 132.01 132.18 130.74 130.25 128.93 129.98 129.11 130.04 129.48 128.66 126.82 126.36 125.70 125.03 124.05 + 122.72 123.67 124.82 124.51 124.52 122.11 123.46 123.37 121.07 122.35 120.10 121.54 121.30 120.59 119.61 118.14 116.75 116.51 116.24 115.35 + 116.16 117.28 116.60 116.56 114.99 114.33 112.61 110.53 111.39 107.36 103.29 100.20 97.66 95.66 92.23 89.27 85.33 78.91 76.92 78.11 + 76.05 78.03 79.31 80.16 73.24 71.95 61.53 54.01 51.56 50.75 47.97 46.31 46.02 43.00 44.67 42.20 34.27 34.78 25.96 29.02 + 25.61 24.84 8.68 -10.00 -10.00 14.29 21.10 22.57 20.03 23.77 22.72 15.77 13.57 10.84 7.54 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 135.93 134.39 134.62 134.76 133.64 131.98 129.79 129.88 130.26 130.32 129.77 129.44 128.78 128.21 127.14 126.30 124.47 124.70 122.12 + 123.16 123.58 124.22 124.97 124.00 122.01 122.32 123.03 122.23 122.77 121.45 120.92 120.69 121.41 118.95 118.20 117.04 116.81 116.50 116.33 + 115.44 115.53 116.62 116.97 115.26 114.47 111.41 110.70 108.53 108.49 104.44 101.86 98.94 95.19 90.81 89.28 83.60 68.66 70.46 69.81 + 71.76 75.08 78.18 78.00 77.04 74.67 67.89 56.81 50.89 51.99 51.33 46.73 44.21 42.27 40.58 39.39 39.30 34.69 27.65 26.79 + 27.91 22.14 7.00 -10.00 -10.00 -10.00 17.22 18.15 17.63 17.59 17.49 11.92 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 136.09 134.82 134.25 134.20 132.61 131.55 130.39 130.16 130.25 129.96 129.64 128.65 128.79 128.02 126.59 126.00 124.08 123.58 122.65 + 124.27 124.57 124.82 124.76 122.97 123.25 121.31 122.63 122.50 121.45 121.01 119.78 119.39 121.44 119.73 118.86 117.89 115.15 115.30 115.24 + 113.77 115.07 115.99 115.82 115.79 112.07 112.93 112.05 109.68 106.73 103.69 101.87 99.03 93.18 90.24 85.72 78.01 69.95 69.99 67.24 + 68.18 70.88 74.68 75.67 74.57 72.25 68.15 55.92 52.58 54.74 50.15 47.14 42.86 41.72 37.68 37.48 36.11 35.18 34.14 30.02 + 24.46 19.71 -10.00 -10.00 -10.00 -10.00 11.75 14.42 11.49 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 134.65 133.94 133.00 132.79 132.29 130.46 129.64 130.34 130.87 130.06 128.06 127.74 127.98 127.18 126.98 125.46 124.86 123.86 123.99 + 122.59 124.11 123.74 124.07 123.64 122.25 120.90 121.74 122.63 121.29 119.21 120.47 120.20 120.26 119.70 116.43 116.98 117.92 117.01 117.06 + 115.41 113.18 109.02 113.13 112.73 114.24 112.57 111.51 109.23 107.20 103.15 102.00 100.08 95.97 92.43 88.36 79.16 74.71 69.55 67.44 + 66.73 69.80 71.70 73.15 71.80 70.37 66.83 60.87 55.52 49.88 49.63 46.23 43.43 42.34 40.66 36.82 32.37 29.83 30.92 30.19 + 25.20 16.98 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 134.52 133.28 133.08 132.44 131.38 129.90 129.97 130.84 130.10 128.79 125.14 127.09 126.36 125.76 125.13 123.48 123.61 123.11 122.44 + 122.54 122.99 123.08 123.30 117.92 122.11 119.72 121.28 119.77 120.49 120.21 119.42 119.34 120.04 120.44 117.84 115.98 116.22 115.89 116.33 + 113.56 113.97 112.82 113.53 114.35 113.06 111.67 112.49 104.71 106.49 104.07 100.79 99.10 95.55 85.71 78.86 74.12 71.25 70.13 70.63 + 68.09 66.16 69.11 70.65 69.95 67.34 62.14 56.08 51.52 39.57 42.42 42.83 44.44 38.58 37.89 35.77 35.46 31.91 22.15 19.42 + 7.95 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 134.37 132.89 133.10 133.07 132.54 130.88 131.03 131.15 130.41 128.34 125.99 125.34 126.22 125.00 124.80 123.80 123.18 120.43 122.23 + 121.96 121.43 121.50 122.50 121.52 118.25 119.26 119.77 119.89 119.77 120.10 118.42 115.43 120.06 118.04 118.07 114.99 117.33 113.09 115.30 + 114.75 113.68 110.20 113.36 112.44 113.99 111.55 112.40 109.06 106.14 104.82 101.50 99.20 92.79 77.64 71.33 66.19 68.29 70.11 69.79 + 68.10 67.79 68.19 68.10 66.85 63.46 56.87 50.76 47.72 41.67 39.60 39.38 37.97 27.36 29.29 28.87 30.75 20.82 22.19 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 133.98 132.70 132.96 132.27 130.79 130.12 131.28 130.61 129.01 128.45 126.33 126.12 125.75 124.91 124.79 124.02 123.75 122.10 123.15 + 122.58 121.71 120.42 122.20 122.74 120.47 119.01 114.94 118.75 121.32 119.77 119.42 119.06 116.96 118.33 117.77 118.35 115.02 116.00 113.45 + 112.18 114.47 113.50 111.90 112.14 112.15 111.25 108.48 108.72 103.91 103.06 99.37 98.18 91.27 79.61 69.20 69.77 74.00 69.10 67.30 + 65.33 66.23 63.55 63.09 61.88 58.00 51.83 47.28 45.02 41.97 40.71 37.77 37.79 38.87 36.09 27.40 20.59 23.29 13.50 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 133.12 132.08 133.10 133.05 132.09 132.18 131.76 130.10 129.43 128.15 126.48 125.91 124.97 124.27 124.29 122.68 121.71 121.76 121.40 + 122.10 122.03 121.23 121.78 122.30 122.07 118.57 117.57 118.71 118.83 116.89 116.94 118.44 118.33 116.05 117.64 114.99 116.13 112.90 109.21 + 113.16 114.38 110.90 112.79 111.30 111.62 111.31 109.39 108.48 106.84 99.74 95.30 93.25 83.10 70.09 73.17 79.77 73.08 67.60 68.09 + 66.24 64.23 58.77 58.74 58.40 54.06 47.88 42.28 38.94 41.60 38.88 34.91 31.02 33.54 30.65 41.43 37.12 27.88 25.55 20.90 + 9.44 15.89 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.18 8.55 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 133.71 132.44 133.08 131.61 131.90 131.34 130.42 130.73 129.07 127.99 125.89 125.01 125.78 124.55 123.89 122.61 120.90 120.76 121.35 + 121.12 121.73 121.97 121.73 121.22 120.54 119.42 117.89 118.90 119.43 118.37 116.68 116.72 115.28 115.33 117.29 115.34 112.34 114.55 114.17 + 110.52 113.09 113.46 111.19 111.61 110.90 107.83 104.31 106.86 100.28 99.14 99.98 96.58 90.68 86.96 84.38 81.16 73.69 69.00 67.29 + 67.83 63.75 56.86 48.22 45.82 35.36 29.96 27.78 28.16 30.55 29.08 31.18 29.61 26.46 25.40 26.17 31.51 32.47 27.93 26.07 + 24.90 20.18 -10.00 7.00 7.00 -10.00 13.05 18.56 19.87 16.63 24.49 15.39 10.91 14.66 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 131.16 131.12 132.65 131.79 132.19 131.49 129.89 129.78 127.78 125.53 126.38 125.28 124.32 124.41 122.69 121.58 122.58 120.24 120.93 + 121.05 121.86 119.73 121.21 120.81 120.79 117.67 118.79 116.89 118.17 118.64 114.81 118.71 116.82 116.94 115.65 114.89 110.63 113.10 113.24 + 112.28 113.84 109.73 112.44 108.56 110.34 110.61 109.17 99.83 102.29 89.11 91.77 77.02 76.78 83.13 81.10 70.29 61.49 58.90 53.97 + 53.84 50.84 22.69 20.61 13.12 20.88 10.09 7.78 23.96 24.20 25.31 24.60 23.32 21.82 23.31 23.57 25.26 29.23 36.69 27.45 + 21.07 -10.00 -10.00 7.00 9.03 -10.00 24.64 26.29 22.35 27.78 12.65 15.26 8.77 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 132.67 131.57 131.46 131.74 131.26 129.95 129.88 129.80 127.86 125.87 125.80 122.48 124.94 121.44 121.32 120.69 121.03 121.07 120.17 + 120.79 122.08 121.93 121.65 121.21 120.61 120.07 115.68 116.49 117.12 115.72 117.59 116.40 116.03 117.60 114.08 116.40 114.90 113.38 113.92 + 114.34 112.90 111.60 110.06 107.60 105.21 103.96 100.31 99.89 103.11 100.21 98.70 93.45 86.94 78.82 77.67 63.11 61.24 61.46 55.45 + 52.62 43.16 29.13 16.03 10.46 8.90 7.83 8.62 10.61 11.94 15.91 -10.00 -10.00 18.90 11.66 20.98 19.83 19.28 37.70 37.04 + 26.56 -10.00 -10.00 -10.00 23.72 33.74 25.82 17.70 -10.00 10.05 -10.00 -10.00 7.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 130.90 130.38 131.68 130.96 129.84 129.47 129.68 129.77 129.05 128.17 126.73 125.58 123.94 123.59 122.66 121.78 121.03 119.60 120.04 + 120.99 120.41 120.51 120.64 117.55 118.38 116.75 115.62 112.56 115.54 115.00 113.08 116.52 115.71 115.41 115.75 116.03 116.51 114.45 112.60 + 113.80 111.92 110.00 109.69 109.81 103.47 98.35 97.61 91.34 104.01 102.88 96.39 87.99 85.75 79.49 71.70 56.81 54.97 56.33 56.72 + 33.76 23.13 22.47 20.10 15.20 10.41 7.00 7.00 11.58 13.70 14.01 -10.00 -10.00 -10.00 -10.00 13.29 19.58 18.38 13.37 -10.00 + 36.24 32.34 7.00 -10.00 25.39 29.26 23.83 21.69 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 130.12 130.74 130.50 130.01 129.98 129.24 129.04 128.21 126.55 124.92 123.90 123.20 122.73 121.69 119.57 122.06 121.87 121.09 118.89 + 119.85 119.00 119.05 119.51 119.23 119.09 117.24 118.40 118.04 115.18 115.38 115.85 114.78 114.10 115.26 114.90 116.42 115.86 109.20 112.37 + 114.21 111.19 108.28 106.66 103.10 96.57 94.89 101.63 103.15 104.63 101.47 95.00 84.65 82.99 74.80 72.02 71.19 59.61 54.35 37.46 + 26.29 12.15 12.59 12.24 13.50 12.63 -10.00 -10.00 11.16 12.88 11.28 -10.00 -10.00 -10.00 -10.00 7.00 8.92 -10.00 -10.00 -10.00 + -10.00 -10.00 18.89 25.43 31.73 36.27 24.53 9.91 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 130.58 131.57 130.87 130.31 129.97 129.09 128.71 128.45 128.07 124.48 124.29 123.16 122.05 121.27 121.40 120.83 121.94 120.46 120.20 + 119.51 118.67 119.81 120.94 120.12 119.41 117.22 114.94 116.92 115.57 113.87 114.94 114.14 117.21 116.75 115.77 116.78 117.00 102.76 98.82 + 114.24 111.74 110.78 109.20 107.62 105.50 99.91 99.48 103.94 103.71 100.50 96.65 88.37 80.53 78.61 70.90 63.15 43.88 43.19 33.76 + 16.81 7.00 7.13 7.31 9.18 7.00 9.18 -10.00 11.15 12.79 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 14.16 19.05 11.66 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 129.31 130.75 129.57 130.44 128.31 128.02 128.09 127.65 127.50 125.13 123.63 123.59 122.10 120.98 121.75 121.31 121.69 121.33 119.67 + 119.49 117.38 115.89 117.03 114.41 119.26 118.54 117.17 115.08 115.49 113.45 112.84 115.06 113.68 116.47 115.66 116.11 111.03 112.30 108.59 + 113.72 113.28 111.75 110.44 109.01 104.20 101.53 100.63 104.16 102.81 77.44 97.75 93.34 87.51 73.41 51.67 48.06 25.21 26.15 16.67 + 9.42 7.00 -10.00 7.00 -10.00 7.00 7.62 11.82 14.50 23.76 18.19 11.66 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 11.72 8.98 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 129.21 129.58 129.03 128.35 127.54 126.76 126.37 126.48 125.49 123.44 123.62 122.34 120.69 121.59 122.36 120.80 121.25 120.05 119.17 + 118.54 119.48 119.12 116.48 115.89 114.24 113.82 114.88 111.00 114.17 112.31 112.19 112.07 115.01 114.11 116.14 115.69 114.17 115.39 114.88 + 114.17 113.89 113.51 112.34 110.40 107.74 106.39 105.55 104.38 98.64 56.71 92.99 91.90 82.48 70.40 61.76 33.53 22.22 21.72 15.54 + 7.92 -10.00 7.00 8.59 -10.00 7.00 7.98 19.10 20.66 28.22 20.31 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 129.09 129.42 128.48 128.03 126.95 127.05 127.05 125.56 124.33 124.62 124.16 124.13 123.66 122.06 121.90 123.13 121.81 121.18 120.98 + 120.19 119.63 119.52 118.69 118.89 116.84 115.61 114.65 116.22 116.46 115.82 114.26 115.19 115.38 115.06 116.45 115.38 115.92 115.96 115.37 + 115.30 114.46 114.65 115.36 113.45 111.95 110.34 108.85 104.53 95.55 76.27 90.43 90.16 80.85 72.81 51.19 46.23 15.12 19.35 9.21 + 7.00 -10.00 7.00 14.69 10.58 9.94 17.07 38.50 25.47 23.03 16.61 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 128.07 128.84 128.16 127.51 126.67 126.63 126.60 126.20 125.43 125.61 126.66 125.52 124.18 122.75 122.28 123.44 122.08 122.02 120.86 + 120.15 119.90 117.12 117.55 116.51 117.78 116.85 114.32 114.85 116.28 115.06 113.49 111.25 108.44 115.22 115.65 115.81 114.16 114.42 114.85 + 115.02 114.63 114.12 115.99 114.37 112.82 113.27 108.58 103.54 98.09 87.99 86.23 82.71 81.20 71.89 63.94 58.80 32.10 16.29 10.16 + 7.00 11.71 19.74 23.66 7.31 10.36 30.57 37.32 23.44 18.08 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 127.79 127.34 126.73 125.41 124.91 126.67 125.96 125.84 125.19 123.66 124.29 124.62 122.53 121.60 120.45 120.94 123.12 122.64 120.91 + 120.20 119.84 119.26 118.61 118.28 117.99 116.54 115.51 114.45 116.52 115.40 114.44 111.30 114.64 115.39 115.53 115.42 115.74 113.96 115.41 + 116.02 115.38 113.17 115.26 115.15 113.24 115.83 110.14 101.19 94.24 88.06 69.09 33.26 54.36 59.71 59.57 59.15 61.09 -10.00 14.20 + 12.48 28.33 32.56 15.27 13.18 38.98 44.54 29.64 23.83 16.21 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 128.16 127.22 126.11 127.20 126.50 126.53 124.71 124.90 125.00 123.38 123.73 124.90 123.58 121.78 120.72 120.08 121.59 122.25 120.85 + 118.37 120.13 119.33 119.25 118.63 114.77 116.06 116.18 114.85 115.08 114.11 114.61 113.73 112.25 115.45 115.58 115.65 115.16 110.13 114.12 + 115.65 115.53 113.15 115.99 117.35 116.88 114.28 115.04 97.46 93.66 82.71 80.17 28.99 -10.00 -10.00 54.38 46.64 40.75 17.71 15.80 + 48.28 49.10 40.85 32.58 43.94 40.34 21.97 22.32 24.94 19.79 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 125.51 125.82 125.84 125.10 124.09 125.10 125.13 123.59 122.79 122.64 122.45 122.31 122.50 121.29 120.98 119.76 120.47 119.67 121.43 + 120.39 118.20 116.66 117.40 116.25 117.63 116.67 116.89 115.26 114.13 110.28 111.88 111.48 113.24 114.72 114.15 113.32 114.85 114.47 114.79 + 116.07 114.97 116.01 114.56 122.20 116.98 115.39 112.64 104.79 94.08 59.74 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 50.32 56.82 66.94 + 66.69 69.87 77.06 68.51 65.18 31.81 27.31 40.96 44.91 15.91 9.57 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 126.58 124.78 124.91 124.05 124.65 123.36 124.74 124.31 121.96 121.85 121.94 122.48 121.40 120.32 120.07 118.74 118.71 118.77 120.83 + 120.32 119.35 119.34 115.89 117.04 116.51 117.14 114.86 115.86 115.25 113.61 109.00 111.57 112.67 115.21 115.56 114.16 115.28 113.85 116.11 + 115.54 116.49 116.41 113.84 127.01 134.40 121.00 113.09 109.66 96.31 83.91 54.06 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 35.88 77.17 + 78.32 79.43 80.96 75.92 52.24 38.25 48.05 57.47 48.85 38.46 13.76 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 124.68 123.85 124.28 123.59 124.01 124.14 124.22 123.80 123.92 121.87 122.85 122.40 122.32 120.72 120.69 119.40 118.42 119.22 120.06 + 119.97 118.72 118.23 117.92 115.69 116.50 116.17 117.07 113.85 115.03 112.90 111.41 111.33 108.67 115.59 114.59 113.90 114.12 113.64 115.77 + 115.64 117.20 116.93 115.70 117.57 142.65 146.64 114.30 111.97 100.06 86.50 69.08 50.53 9.52 -10.00 -10.00 -10.00 65.82 61.64 59.75 + 71.95 82.50 84.78 80.56 72.45 66.75 64.38 50.80 55.05 33.79 20.60 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 124.37 124.15 123.94 123.34 123.40 123.95 124.34 123.31 122.12 122.26 121.90 121.39 120.99 120.56 119.35 119.40 119.05 118.78 120.22 + 118.13 118.74 117.90 116.95 115.62 115.29 115.41 116.15 116.51 115.76 115.50 110.95 110.79 110.21 112.97 114.05 114.20 113.74 113.50 111.62 + 115.91 115.41 117.69 116.11 115.49 128.91 160.29 149.67 112.29 107.03 95.67 95.92 70.71 56.13 76.68 55.62 68.47 74.99 65.13 66.24 + 81.80 81.53 80.72 72.50 72.34 73.93 62.81 50.60 45.17 24.71 13.38 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 123.76 124.07 122.18 123.15 122.66 121.49 122.56 122.44 121.44 120.48 120.29 121.60 120.18 118.74 117.57 118.09 118.21 117.66 118.45 + 119.89 119.71 120.00 118.76 118.22 117.10 116.29 116.29 115.47 116.62 115.48 113.97 113.95 114.33 113.33 114.84 114.50 114.40 113.69 113.26 + 112.34 115.09 117.45 118.13 115.52 113.21 128.56 165.70 141.69 109.22 105.88 103.49 98.09 85.48 84.00 91.69 89.10 93.05 92.37 90.20 + 93.68 85.69 74.51 64.40 66.87 72.00 71.38 57.98 49.24 43.94 19.43 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 124.11 122.85 120.92 121.62 121.20 121.90 122.28 122.26 121.93 120.70 121.17 117.70 119.77 119.57 118.86 119.31 117.23 118.90 118.43 + 119.58 117.91 115.31 116.46 115.54 116.79 116.14 116.45 115.89 115.45 114.77 114.85 113.85 113.12 113.94 113.78 114.70 114.74 114.38 114.29 + 114.19 112.23 114.40 117.21 115.65 114.31 112.26 159.39 173.41 167.19 108.18 105.00 103.94 98.34 99.53 97.44 94.33 90.25 92.33 94.36 + 94.44 93.91 92.29 78.63 66.24 76.15 79.82 70.10 55.02 42.19 23.62 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 123.91 122.89 121.71 122.26 119.34 120.90 121.79 121.60 120.18 120.68 121.91 121.19 119.92 119.00 119.24 119.35 120.20 119.20 117.42 + 118.48 118.67 118.19 117.68 115.45 117.02 117.16 116.24 116.22 115.71 114.36 114.55 114.04 111.94 109.76 115.23 114.53 115.17 114.26 112.94 + 113.01 112.48 111.62 112.09 118.94 116.17 115.24 112.89 157.40 197.25 160.45 108.65 107.21 104.68 102.31 98.49 96.37 94.11 96.37 95.90 + 94.48 95.25 93.36 71.27 71.65 50.27 68.38 82.97 56.65 33.00 23.54 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 123.59 123.66 119.85 121.15 121.36 121.43 121.91 122.01 121.50 121.57 121.63 120.94 121.23 119.23 119.06 118.83 119.68 118.98 117.97 + 117.90 115.96 116.73 117.59 116.75 115.25 115.91 114.82 116.19 115.74 115.79 114.62 114.81 111.49 113.36 115.44 113.54 113.11 113.64 113.80 + 113.42 113.05 113.19 112.56 114.27 116.43 116.21 110.98 114.01 142.05 163.27 139.31 110.44 106.78 105.29 104.24 101.70 101.09 97.63 96.67 + 95.52 94.76 90.66 70.01 66.96 69.05 60.46 84.56 72.03 54.19 27.06 22.67 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 124.01 123.08 120.71 121.48 121.74 122.21 121.98 122.04 121.87 121.34 121.32 120.06 120.02 118.57 119.45 119.29 117.58 118.25 118.08 + 117.89 118.08 117.39 116.40 116.46 113.42 116.20 115.83 115.66 116.01 116.33 114.41 114.57 112.33 113.64 110.91 113.81 114.05 113.83 114.15 + 114.31 113.37 112.33 112.77 110.29 113.10 115.41 113.99 113.75 121.15 114.45 121.43 119.79 109.22 105.07 103.72 103.17 103.06 101.08 97.59 + 97.65 90.20 74.33 79.07 87.82 88.01 64.76 70.46 82.06 63.55 44.43 33.11 17.34 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 122.92 122.79 120.73 122.17 123.00 121.28 122.76 121.75 121.70 121.47 121.62 120.95 120.14 119.30 118.65 119.00 118.59 117.45 117.29 + 117.45 117.01 116.26 117.15 116.75 113.02 116.38 114.98 116.23 115.49 115.35 114.87 113.74 113.27 112.35 114.31 114.97 114.55 113.86 114.19 + 113.53 114.39 112.66 112.16 110.33 112.00 114.19 113.32 112.53 115.46 127.42 116.36 110.73 110.82 108.74 104.69 99.83 98.49 99.70 93.10 + 82.23 69.41 84.01 87.37 95.47 92.76 75.61 66.79 86.47 52.13 56.27 33.12 26.08 19.17 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 122.91 122.40 121.21 121.12 120.48 121.36 121.98 121.34 121.39 121.05 121.06 120.32 120.66 121.10 120.17 120.22 119.22 118.13 116.50 + 116.19 118.19 116.32 116.12 116.43 114.38 114.84 114.14 115.31 114.30 114.68 114.05 113.31 112.50 114.08 113.35 115.05 114.23 114.65 114.35 + 112.65 112.41 112.14 112.54 111.43 109.65 111.16 115.96 113.73 112.41 110.70 120.05 117.15 111.78 110.04 107.21 105.76 99.72 92.87 91.27 + 87.29 83.21 90.01 91.87 94.23 98.81 99.36 83.64 89.03 76.82 66.73 50.56 14.92 7.84 8.93 -10.00 7.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 122.54 122.60 120.27 120.43 119.69 121.50 119.66 120.92 120.64 121.00 121.20 120.13 120.23 119.27 119.22 120.13 118.92 119.01 117.25 + 115.96 117.40 117.39 117.04 115.79 113.80 113.44 113.07 114.69 114.21 114.71 115.78 115.29 112.87 113.99 112.24 114.77 113.87 112.71 113.03 + 114.03 113.32 112.49 111.74 111.95 108.29 111.18 112.28 113.67 111.63 110.66 108.69 111.76 109.48 109.05 104.89 107.66 105.59 98.16 96.10 + 91.07 91.33 96.43 96.56 96.32 97.16 96.21 94.15 93.63 74.70 49.50 44.08 22.21 -10.00 18.09 13.46 13.34 8.60 7.10 7.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 122.50 122.02 121.58 120.66 119.66 120.63 120.41 120.35 121.07 119.91 120.44 119.66 119.97 120.28 119.87 119.53 118.98 119.13 118.13 + 115.03 116.79 116.28 115.65 114.92 114.47 114.25 114.17 115.68 115.51 115.70 114.51 113.64 112.63 112.74 111.45 113.18 113.78 113.69 113.84 + 113.31 113.22 113.78 112.62 112.12 107.73 110.44 111.27 112.74 111.42 111.42 110.02 109.45 107.09 109.86 107.29 105.90 100.36 105.11 102.92 + 97.68 101.55 101.66 98.13 96.12 97.66 96.27 97.66 97.64 93.16 57.51 49.87 31.43 44.70 23.31 31.53 19.95 19.64 10.12 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 122.21 122.54 121.76 121.37 120.18 119.60 119.14 118.28 120.60 120.06 119.80 117.45 118.86 118.37 118.77 119.41 117.97 118.30 117.60 + 116.29 115.52 115.61 114.99 112.47 115.22 115.44 113.94 115.80 115.01 114.74 114.10 114.03 113.03 112.07 109.84 113.85 114.34 114.03 113.81 + 113.94 112.96 113.29 112.12 111.32 111.00 110.36 110.20 111.16 111.35 108.42 109.16 107.37 106.26 109.01 106.11 104.65 107.76 107.27 102.28 + 102.68 97.91 100.50 97.94 99.29 97.23 97.01 98.36 95.43 96.64 91.50 61.98 49.45 56.33 55.35 50.00 30.76 29.91 12.75 7.00 + 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 122.98 121.68 122.51 120.19 120.37 119.46 118.93 119.71 119.82 120.45 120.19 119.96 120.09 118.66 119.06 119.08 117.66 117.47 117.85 + 117.23 116.54 115.27 116.46 114.40 115.46 114.36 114.08 114.51 113.74 112.81 113.02 112.38 112.31 112.11 110.86 112.27 113.16 114.09 112.83 + 112.84 112.94 113.65 113.46 111.57 110.82 111.15 109.00 111.32 110.37 107.10 108.30 109.60 105.76 107.44 107.13 107.40 106.44 105.22 105.98 + 105.70 103.11 100.74 105.31 99.05 96.99 100.38 98.49 95.70 94.48 93.02 92.40 74.34 70.69 64.59 64.44 53.90 55.35 27.41 10.77 + 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 122.17 122.10 121.55 121.25 119.77 118.91 117.24 119.47 119.38 118.65 118.89 118.59 118.84 118.07 117.60 117.00 117.52 117.69 117.32 + 117.82 116.50 115.76 113.59 114.29 115.14 114.41 114.94 113.39 113.16 112.41 113.23 112.65 112.19 111.51 110.84 110.74 112.66 113.73 113.83 + 113.38 113.81 112.93 113.00 113.47 110.27 112.08 110.70 110.46 109.37 109.63 107.23 108.23 104.55 105.43 109.27 108.64 107.47 105.88 106.57 + 106.17 105.66 104.44 101.96 101.54 101.95 98.23 98.22 97.87 97.60 98.54 97.50 92.54 82.75 80.54 77.53 58.36 57.67 44.08 32.22 + 31.61 17.15 7.00 -10.00 22.73 14.44 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 122.43 121.17 119.78 120.97 118.48 119.15 118.97 118.47 118.88 119.09 118.65 118.09 117.64 117.00 116.16 115.67 117.56 117.65 117.34 + 117.70 115.96 112.36 115.92 114.70 116.04 114.81 114.34 113.10 113.61 112.24 112.68 112.52 111.87 112.38 111.24 110.27 112.99 113.11 114.08 + 113.25 113.44 113.10 113.04 112.50 113.45 113.38 110.92 110.92 110.45 108.61 109.20 109.34 109.70 108.77 108.79 109.54 108.41 106.96 106.47 + 106.26 105.78 104.38 104.92 105.18 101.94 102.03 99.50 100.16 99.16 99.31 97.73 93.59 89.06 92.38 84.76 73.56 72.49 64.33 63.09 + 61.70 59.04 21.68 11.28 10.75 7.00 7.30 11.40 7.39 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 + -10.00 122.91 122.45 121.55 119.41 120.51 118.94 117.89 117.17 117.95 119.03 118.61 118.30 116.93 117.86 115.64 117.35 117.29 117.18 116.34 + 116.74 115.19 116.93 114.24 113.79 112.98 114.75 114.70 113.64 113.42 112.32 112.38 112.88 109.88 111.80 108.73 107.95 112.49 112.54 112.85 + 113.62 112.93 112.91 112.73 113.14 112.36 111.27 112.22 109.47 107.20 108.87 108.93 108.69 108.40 108.59 109.20 108.80 108.04 108.39 107.39 + 105.62 104.94 105.50 105.47 105.98 103.72 101.99 102.33 99.44 98.72 100.42 99.95 92.31 92.83 92.28 91.99 87.46 81.43 62.51 63.29 + 66.54 54.74 46.04 15.73 31.53 7.00 12.94 7.00 7.00 7.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 7.00 + -10.00 -10.00 -10.00 + -10.00 122.42 121.56 122.21 119.75 118.73 118.23 116.91 117.25 116.37 116.73 117.29 117.89 118.66 118.19 115.23 117.02 117.10 117.94 118.33 + 117.06 116.88 116.09 113.88 114.26 115.17 115.22 115.25 114.04 113.92 113.94 112.03 112.37 112.12 110.69 111.68 106.29 107.32 112.28 112.61 + 112.73 112.56 112.68 113.77 112.57 111.57 111.01 110.59 109.95 108.92 109.81 107.53 107.64 106.28 108.85 108.89 108.59 108.79 107.27 110.05 + 106.73 107.89 106.35 105.24 105.04 104.52 104.18 102.40 100.96 99.65 100.77 100.49 97.83 96.30 96.04 95.64 90.27 83.52 77.59 76.65 + 74.95 62.75 51.66 63.91 44.25 20.25 24.18 20.88 7.00 25.83 13.49 8.13 22.32 -10.00 -10.00 8.40 7.00 7.61 10.19 17.31 + 10.61 -10.00 -10.00 + -10.00 122.06 120.94 121.13 119.76 119.31 118.27 116.53 117.34 117.76 117.60 116.72 118.20 117.85 117.61 117.68 116.73 117.38 117.53 116.86 + 117.18 115.90 115.86 113.98 113.97 113.31 113.53 114.32 114.59 112.91 113.43 112.40 113.21 111.25 111.16 109.24 110.91 111.25 110.82 111.97 + 111.89 111.99 112.51 111.62 112.57 111.15 110.59 111.76 111.05 111.50 109.77 107.50 109.51 107.13 109.08 109.30 108.51 108.09 106.93 107.17 + 108.76 108.41 106.04 106.40 105.40 104.32 103.90 104.39 100.79 102.15 102.19 99.17 98.73 97.81 97.34 99.10 95.95 96.71 88.18 89.25 + 80.65 75.93 72.01 69.16 63.27 48.05 55.04 36.89 26.86 42.82 37.31 34.38 15.94 16.57 18.89 15.83 17.41 16.18 17.67 17.09 + 21.14 7.00 -10.00 + -10.00 122.08 121.60 121.73 121.35 119.83 117.87 117.74 116.87 116.65 116.88 116.77 116.73 117.32 118.03 118.54 116.80 118.14 116.60 117.86 + 116.59 117.24 117.22 114.99 113.78 115.47 115.80 114.46 114.07 113.16 112.17 113.76 112.58 108.75 108.85 108.59 109.46 110.24 111.04 111.38 + 111.75 111.79 109.85 112.83 111.60 110.16 111.17 111.84 109.30 109.41 109.26 109.90 108.35 105.26 108.08 108.75 108.21 108.93 107.24 108.30 + 108.29 106.98 107.51 108.07 107.50 104.89 104.66 103.40 102.48 104.46 101.98 100.97 99.17 97.48 98.55 94.79 99.77 94.89 93.29 90.91 + 85.09 82.24 81.03 81.84 73.56 66.04 63.23 55.27 55.16 58.26 55.14 52.19 46.83 40.71 31.06 35.90 41.56 34.06 33.67 26.39 + 30.50 26.65 -10.00 + -10.00 122.23 119.59 120.56 121.05 120.00 118.69 118.24 115.42 117.12 116.97 116.82 116.04 117.71 117.67 118.32 118.14 118.05 116.50 117.56 + 116.79 116.59 115.75 116.28 114.07 115.59 114.24 115.17 115.54 114.19 113.72 112.75 112.33 108.66 108.11 104.50 108.14 106.83 106.85 110.92 + 110.34 111.81 111.63 111.59 111.14 112.02 111.50 111.52 110.32 109.84 109.05 108.93 108.62 109.75 107.83 108.23 107.70 107.36 108.37 109.63 + 107.36 107.44 107.59 106.84 107.47 105.93 104.38 104.49 103.68 104.33 100.98 103.33 100.92 101.00 98.87 97.56 97.27 101.77 95.67 94.67 + 90.03 86.23 86.90 82.38 78.57 66.63 65.01 65.16 70.81 68.74 69.06 64.63 59.32 48.56 43.51 52.48 43.55 51.11 44.28 43.60 + 43.83 40.12 -10.00 + -10.00 122.25 121.57 120.38 118.69 118.21 117.35 113.85 116.33 116.40 117.16 117.70 117.91 117.35 118.28 118.82 118.95 117.22 115.54 116.57 + 117.19 116.66 116.22 115.35 115.86 114.22 114.06 115.40 114.48 113.89 112.19 111.22 110.29 111.03 109.43 107.34 107.77 108.95 108.43 108.44 + 110.60 109.11 109.68 111.31 111.06 111.90 111.30 108.01 109.10 109.03 107.63 108.05 107.22 107.28 107.56 108.52 108.43 108.65 108.01 107.71 + 109.49 108.67 107.47 106.97 106.23 105.95 104.90 104.90 104.75 105.06 103.92 102.59 103.24 100.94 102.01 100.19 99.76 97.77 96.08 95.70 + 96.35 94.76 92.46 90.06 82.60 81.01 84.24 88.05 85.65 81.93 82.49 76.03 69.06 67.14 65.54 64.80 60.44 60.90 50.67 44.88 + 53.48 48.74 -10.00 + -10.00 123.05 122.06 121.09 118.15 116.79 117.45 116.79 116.92 116.08 117.72 117.43 118.83 117.93 118.45 118.80 117.72 116.93 113.03 112.69 + 116.38 114.86 114.76 114.76 115.84 114.97 114.17 110.56 113.05 113.25 114.61 111.63 114.23 115.51 112.35 101.84 106.18 107.50 112.58 108.47 + 107.92 108.39 109.38 111.89 110.76 110.37 109.17 110.33 109.15 108.97 108.60 109.69 108.01 107.41 109.06 108.52 109.39 108.69 109.90 108.89 + 109.66 107.98 108.33 106.89 106.95 105.10 104.82 105.65 106.53 104.45 103.24 103.52 101.74 100.76 101.40 100.85 101.55 98.47 98.32 97.83 + 95.25 96.57 95.57 93.74 90.56 91.67 90.67 89.71 89.28 88.60 88.52 86.94 86.42 79.77 85.93 74.65 73.22 68.21 59.27 59.93 + 62.01 53.17 -10.00 + -10.00 127.77 123.83 122.45 120.55 120.28 118.54 116.07 116.63 115.09 115.59 116.39 116.45 116.86 117.91 117.57 117.42 117.27 116.93 114.16 + 115.42 115.51 116.11 115.01 114.89 112.68 113.89 114.63 114.61 114.73 112.93 111.75 109.70 109.19 108.60 105.18 107.42 109.54 112.13 111.39 + 111.00 108.95 110.90 110.88 110.84 110.36 109.87 109.05 108.63 107.32 108.60 108.16 108.26 107.96 108.41 109.28 109.00 108.02 109.44 109.20 + 109.92 110.79 106.95 107.49 106.01 105.12 105.96 105.91 104.52 104.47 104.43 104.37 102.52 102.47 102.45 100.28 100.94 100.75 99.46 100.11 + 98.74 98.13 96.45 95.80 95.12 94.80 94.22 92.04 90.18 89.45 89.03 88.47 87.31 86.46 85.00 84.06 82.35 79.97 79.24 78.44 + 79.91 78.27 -10.00 + -10.00 126.95 128.36 127.38 122.56 120.03 119.40 118.49 118.65 117.76 117.57 114.14 114.99 116.66 117.24 118.49 119.32 116.81 116.32 115.89 + 115.16 117.31 114.97 112.55 114.46 113.76 114.92 113.59 113.45 114.46 113.80 112.93 110.48 110.07 109.03 107.80 104.27 108.17 108.44 110.02 + 111.61 110.38 110.02 109.85 111.22 110.29 109.47 109.40 110.30 108.74 107.22 108.43 105.38 104.97 105.66 108.49 107.74 110.15 109.99 106.77 + 108.29 108.25 108.00 105.84 105.94 106.75 106.37 105.04 105.13 105.73 103.50 102.93 104.69 102.08 103.13 101.25 100.88 102.00 100.07 99.51 + 99.73 98.51 98.45 98.47 96.71 95.42 95.23 93.47 92.11 91.44 91.13 90.61 89.06 88.48 89.75 86.74 86.16 85.19 84.36 84.26 + 83.12 81.69 -10.00 + -10.00 124.05 127.20 128.35 126.16 122.09 118.86 118.34 117.05 116.56 115.58 115.32 114.18 116.81 117.47 116.36 117.63 116.78 115.87 115.15 + 115.02 114.78 115.12 114.80 114.07 113.63 113.24 110.39 113.94 113.62 113.60 113.13 112.92 112.87 111.37 109.67 108.21 108.49 107.42 108.80 + 110.19 109.25 108.58 109.80 109.53 109.49 108.90 109.57 108.17 107.40 107.54 107.41 106.22 107.27 106.96 104.98 109.24 109.29 108.63 108.81 + 107.98 108.61 107.99 106.63 107.33 106.64 105.78 104.89 106.37 105.48 103.89 105.50 103.52 103.44 101.38 104.54 103.47 103.41 102.64 99.17 + 101.78 100.79 99.73 98.78 98.53 96.73 96.21 95.20 93.61 92.37 92.44 92.67 91.20 90.53 89.56 88.41 87.96 87.47 86.78 85.69 + 84.59 84.46 -10.00 + -10.00 121.07 124.93 125.50 127.52 126.11 121.79 119.09 117.89 116.93 116.94 115.97 116.34 114.43 115.54 115.72 115.93 117.68 116.44 116.59 + 115.63 111.93 116.23 115.02 114.20 113.21 113.13 112.08 111.99 110.29 114.32 113.05 113.74 113.32 110.84 110.13 108.69 109.79 109.76 108.65 + 108.61 108.12 109.73 108.15 109.68 109.17 109.71 108.89 108.71 107.50 107.32 106.55 107.43 106.51 105.90 106.61 107.59 100.29 107.85 108.67 + 109.07 106.43 106.37 107.83 107.42 107.03 105.69 107.66 105.91 105.13 105.22 104.23 106.40 104.60 103.98 104.20 103.47 102.72 101.92 102.09 + 98.31 98.25 98.52 99.16 98.75 98.07 96.86 96.12 94.45 93.56 93.05 93.40 91.99 92.38 91.45 90.08 89.78 88.92 88.37 87.39 + 86.17 85.98 -10.00 + -10.00 121.03 122.02 123.28 124.89 127.18 123.82 118.67 118.51 117.24 116.58 117.07 117.14 117.28 115.97 117.48 116.21 116.35 116.84 116.39 + 117.35 115.66 115.40 113.52 114.15 115.20 113.75 112.38 109.47 110.58 112.83 113.05 112.25 110.56 110.43 110.99 108.92 108.85 110.23 109.36 + 109.78 108.72 108.13 106.76 109.16 109.84 108.90 108.30 107.30 107.01 107.41 108.26 106.41 105.20 105.45 103.70 106.85 107.91 108.22 108.02 + 108.27 107.50 106.36 106.74 106.40 105.95 106.20 106.77 104.85 105.72 105.18 104.74 105.58 105.12 105.02 104.00 102.53 101.77 100.00 101.02 + 99.46 100.58 99.82 99.19 98.46 98.41 97.20 96.48 95.48 94.81 94.10 93.30 93.01 92.76 93.11 91.83 91.26 90.58 88.10 88.50 + 87.34 87.27 -10.00 + -10.00 120.75 119.56 122.15 122.77 123.12 124.79 123.51 120.07 116.25 116.80 116.88 117.38 117.86 116.76 116.22 116.43 116.99 116.94 116.71 + 117.38 116.15 115.59 115.63 113.21 114.03 114.37 113.82 112.34 111.93 112.23 112.45 110.63 112.41 110.29 112.11 109.73 110.72 109.11 110.20 + 109.53 109.25 107.15 109.59 108.21 107.45 108.42 107.64 107.70 106.30 106.20 106.35 104.97 106.46 106.33 103.10 103.98 107.00 104.65 107.58 + 107.50 107.66 106.37 106.27 104.76 103.91 100.49 105.24 105.56 105.45 105.26 106.06 103.25 103.73 103.58 103.48 101.91 102.61 101.86 101.26 + 100.85 98.18 100.08 99.54 98.88 98.09 96.67 96.37 95.50 95.64 95.68 94.47 93.77 93.90 93.85 91.89 92.82 92.01 90.75 89.60 + 88.38 88.34 -10.00 + -10.00 121.03 118.91 119.18 121.24 122.19 122.35 122.30 121.46 117.95 115.86 117.88 116.97 116.87 117.21 116.47 117.24 116.97 116.79 115.12 + 115.46 117.05 115.50 116.42 114.00 112.81 112.94 113.17 114.37 113.86 112.50 111.99 113.08 111.53 114.25 111.26 110.94 110.52 108.91 110.33 + 109.21 109.11 109.32 109.73 108.09 107.34 107.53 107.50 106.51 107.33 105.55 104.01 105.65 107.05 108.22 103.52 105.68 105.03 105.93 101.13 + 105.54 106.75 105.26 104.83 103.75 105.30 104.86 105.27 105.79 104.46 106.42 105.48 103.96 104.05 104.03 102.53 103.00 101.96 102.18 99.59 + 102.27 100.74 100.63 100.12 98.86 98.68 97.55 97.06 95.99 95.97 95.75 94.86 95.16 94.67 94.17 93.54 92.57 92.20 91.27 90.64 + 90.60 90.08 -10.00 + -10.00 121.17 119.84 119.00 121.35 120.71 120.83 120.08 121.07 120.09 115.82 115.76 116.95 117.96 117.48 117.92 116.79 117.10 115.62 116.77 + 117.33 115.74 115.00 114.84 114.08 111.60 113.96 113.57 114.52 113.24 114.04 113.46 113.59 113.02 112.53 111.49 111.50 109.48 109.84 109.81 + 109.44 109.41 110.35 107.40 108.38 106.63 107.77 106.65 107.99 106.37 105.92 106.19 108.61 108.73 109.78 103.66 106.50 106.69 107.92 105.03 + 105.25 105.42 104.32 105.34 105.26 102.92 104.14 105.23 104.01 103.58 105.64 103.77 105.17 103.78 104.84 103.90 103.24 102.21 101.99 101.35 + 102.59 101.09 101.51 101.06 101.18 100.41 98.48 97.45 97.21 96.53 96.13 95.28 95.56 95.26 93.82 93.48 93.28 92.50 91.75 91.90 + 90.95 89.97 -10.00 + -10.00 125.23 121.12 118.26 119.63 120.60 120.14 120.71 119.97 119.00 116.15 115.98 118.42 118.43 118.25 117.75 116.18 115.95 117.23 116.41 + 117.28 115.17 115.15 114.17 114.41 113.22 113.41 113.91 112.93 114.37 113.75 112.85 112.67 113.46 112.41 112.54 111.25 110.21 111.21 110.04 + 110.44 110.74 108.88 108.88 108.14 107.78 106.30 108.58 107.36 106.28 107.27 110.26 109.97 109.34 107.12 109.41 106.43 106.95 102.69 103.49 + 104.01 104.03 104.56 105.69 104.23 102.33 105.19 103.99 103.73 105.51 102.90 104.42 105.32 104.12 104.70 105.02 103.53 101.90 102.90 101.90 + 101.12 101.88 101.37 101.01 100.82 100.23 100.49 98.80 98.01 97.20 96.23 95.51 95.88 95.93 94.87 94.51 93.34 92.80 92.41 92.51 + 90.73 89.95 -10.00 + -10.00 126.78 123.93 119.51 117.61 120.07 120.84 119.60 119.84 120.48 118.87 118.39 117.85 118.52 117.31 116.53 116.88 116.51 116.39 115.38 + 114.57 114.80 114.28 116.45 115.01 113.57 113.34 112.27 113.35 111.53 114.18 112.18 113.05 113.32 113.40 112.68 111.07 107.38 111.28 111.16 + 111.77 109.71 110.54 109.35 109.07 107.81 108.30 107.20 107.18 107.41 111.75 110.06 108.89 108.37 109.78 108.87 107.68 107.27 105.29 105.03 + 104.57 103.99 105.75 102.71 104.05 105.02 104.16 103.38 104.70 103.77 102.99 105.57 103.91 103.75 103.85 103.75 104.39 102.61 102.99 105.02 + 103.47 102.85 102.25 100.79 101.17 100.24 100.61 99.45 99.40 98.54 98.35 97.30 97.39 95.51 94.60 94.22 93.73 93.43 93.51 90.92 + 90.66 90.45 -10.00 + -10.00 129.08 124.37 121.20 119.56 118.42 120.01 120.10 119.76 120.68 119.80 119.35 118.42 117.06 116.59 117.06 116.53 116.63 114.33 114.24 + 113.54 114.26 114.71 114.40 113.41 113.61 114.63 114.17 114.96 112.93 113.49 113.30 113.51 112.47 112.63 110.68 110.77 111.15 111.64 112.36 + 109.80 111.04 110.00 109.75 107.57 109.69 108.53 108.30 107.82 105.08 109.47 108.67 107.83 109.84 108.21 108.94 108.02 106.31 105.46 105.11 + 103.87 105.44 103.28 102.76 106.07 104.95 101.72 105.09 104.36 103.62 104.85 103.43 102.66 102.89 102.52 104.05 102.61 102.70 102.23 102.32 + 102.55 102.83 103.02 101.80 102.14 100.73 99.93 100.03 99.29 99.17 97.94 96.88 98.27 97.64 96.50 96.33 95.60 94.46 92.90 92.03 + 91.98 91.62 -10.00 + -10.00 129.61 128.46 122.74 122.48 119.29 119.96 120.34 121.62 120.11 120.12 117.85 118.94 118.62 118.14 117.61 116.76 115.45 115.00 113.97 + 115.43 115.15 114.59 114.34 113.71 115.57 114.71 114.82 113.91 112.64 113.75 113.43 113.02 113.03 112.17 112.23 110.93 111.40 112.11 111.07 + 110.55 110.89 110.00 109.34 109.60 109.69 109.47 108.16 109.16 109.82 107.14 107.70 106.93 109.09 108.18 107.81 107.36 105.40 104.46 105.12 + 105.27 103.67 103.32 105.03 107.47 103.29 105.43 104.77 102.63 101.81 103.89 103.20 103.20 103.11 102.37 102.13 102.24 102.49 101.22 102.53 + 101.81 102.44 102.61 102.68 101.82 101.40 100.44 99.96 99.09 98.72 97.93 96.82 98.00 97.39 97.86 96.84 95.97 94.61 94.50 93.89 + 93.57 92.74 -10.00 + -10.00 129.31 127.96 125.52 125.59 124.53 122.00 120.32 120.74 118.13 118.08 120.05 118.98 118.14 118.69 117.33 115.57 116.63 116.38 116.03 + 113.80 115.85 114.32 114.11 115.39 114.37 114.42 113.92 113.80 111.27 114.44 112.42 113.55 112.27 112.18 111.73 110.63 110.32 111.13 111.74 + 109.47 110.61 109.76 110.43 109.85 110.02 108.27 109.93 109.87 107.78 109.49 108.18 109.10 107.54 106.54 107.95 106.30 106.08 106.61 105.52 + 104.36 102.99 105.61 106.36 103.48 104.55 105.95 104.42 103.20 104.46 103.09 101.83 101.95 100.53 103.66 103.01 102.33 100.01 101.87 101.90 + 101.02 101.62 101.06 101.33 101.10 100.99 100.53 100.94 99.71 99.61 98.59 97.36 97.17 95.97 96.35 96.48 96.43 95.41 95.22 94.58 + 94.55 94.17 -10.00 + -10.00 125.69 125.38 126.77 127.14 123.45 122.83 119.90 119.61 118.52 117.90 118.48 119.64 117.59 117.27 117.48 115.81 117.20 115.01 115.32 + 115.79 114.03 115.11 115.11 115.53 113.94 111.77 113.99 113.40 114.14 113.64 112.88 111.43 112.00 113.19 112.67 111.84 111.67 112.27 110.28 + 110.27 108.99 110.09 110.61 110.80 108.52 110.87 110.28 110.57 109.61 108.22 107.07 108.02 107.98 107.76 107.43 106.02 106.08 106.78 103.33 + 104.15 104.31 104.44 101.95 104.50 105.08 105.58 103.11 105.57 104.34 103.36 103.24 103.04 102.40 102.44 101.19 101.88 100.96 102.01 100.87 + 101.35 101.51 100.68 100.52 100.01 99.52 99.37 99.12 99.52 100.38 98.81 98.45 97.65 97.31 96.09 92.77 94.86 94.83 95.01 94.84 + 94.41 93.91 -10.00 + -10.00 123.76 125.05 123.70 122.06 122.16 122.31 120.09 121.19 119.10 116.67 117.57 116.45 117.10 117.04 116.29 117.29 115.87 116.26 115.15 + 115.30 115.48 114.74 115.83 114.31 114.21 114.42 114.02 114.22 113.52 112.70 112.72 112.54 112.45 112.53 111.88 110.99 110.88 110.22 110.95 + 110.14 109.33 109.86 110.15 108.88 110.83 111.65 110.26 109.46 108.26 107.79 108.43 107.90 107.81 108.13 106.97 107.42 106.88 104.32 104.37 + 104.74 105.08 102.81 102.75 106.17 106.17 103.10 103.33 104.94 103.26 103.46 103.45 103.18 102.25 102.72 101.79 101.64 100.37 101.19 100.30 + 100.62 100.41 100.08 99.94 99.99 98.57 98.52 98.20 97.43 97.43 97.48 98.03 98.53 97.75 96.28 96.28 95.09 95.30 94.56 94.58 + 93.30 93.00 -10.00 + -10.00 124.79 123.55 122.12 121.03 119.62 121.28 122.18 120.87 120.79 118.98 116.92 116.06 117.25 117.97 115.87 114.19 115.83 113.20 114.76 + 115.34 115.41 115.83 113.76 114.14 112.94 115.38 114.00 114.03 111.74 112.17 112.77 112.83 112.08 112.04 111.32 112.33 109.90 110.83 109.83 + 109.94 110.69 110.62 109.32 109.80 110.77 110.85 109.00 109.29 108.00 108.86 107.87 107.63 108.52 106.93 108.02 107.34 107.41 105.97 105.33 + 105.87 105.31 102.55 102.79 106.02 104.64 104.70 105.70 103.91 103.85 104.81 104.89 104.18 103.80 102.70 101.65 101.57 100.99 100.86 101.17 + 102.11 101.20 100.18 100.22 99.83 99.37 98.71 98.31 97.68 97.78 97.17 97.09 96.26 95.81 97.13 96.30 97.28 95.95 95.89 95.29 + 94.40 93.58 -10.00 + -10.00 123.85 122.39 122.94 122.22 122.18 119.82 120.75 121.12 119.70 120.15 118.34 116.54 117.05 114.90 115.76 117.09 115.09 116.32 116.20 + 116.03 114.31 113.91 114.22 114.28 115.98 114.11 113.36 112.54 113.42 113.09 112.53 112.76 111.60 112.04 112.12 110.54 108.62 109.31 107.60 + 110.33 110.60 109.34 109.25 112.77 110.75 110.43 110.18 108.29 109.57 107.81 107.15 108.00 106.44 107.55 107.57 107.42 106.02 106.49 106.56 + 104.76 103.98 103.99 103.74 103.07 101.11 105.34 105.50 104.21 103.54 104.18 103.58 103.30 102.75 102.10 102.12 101.70 101.92 101.64 101.28 + 101.93 100.29 100.27 99.95 99.44 99.33 99.29 98.56 97.74 97.46 97.16 97.39 97.14 96.85 95.94 96.62 95.68 96.62 95.76 95.97 + 95.04 94.70 -10.00 + -10.00 121.64 122.18 122.67 121.96 121.16 121.29 120.28 119.22 119.62 119.09 120.22 116.78 114.74 116.01 115.36 114.78 116.27 116.54 117.27 + 113.72 114.62 113.93 114.11 114.17 114.01 114.56 112.43 112.71 113.47 112.45 112.54 112.48 112.12 112.35 110.95 109.67 110.41 110.18 111.23 + 109.81 110.81 109.93 112.14 110.41 109.54 109.13 107.91 110.39 108.83 108.23 108.71 106.94 107.09 107.74 107.51 106.16 106.46 107.15 104.90 + 104.60 104.72 105.10 104.54 101.83 100.29 101.66 105.75 104.15 105.25 104.53 104.34 103.15 103.25 102.68 102.95 101.69 102.99 101.75 100.88 + 102.03 101.14 100.38 100.00 99.49 99.10 98.79 98.15 97.88 97.68 96.98 97.30 96.97 96.47 96.83 96.07 96.41 95.54 95.57 95.30 + 94.67 95.49 -10.00 + -10.00 122.01 121.78 120.53 121.25 121.82 119.18 119.46 119.48 120.08 119.74 118.02 116.42 112.58 114.42 113.95 116.40 116.75 117.22 115.13 + 115.76 114.68 114.56 114.81 113.83 113.83 112.69 113.25 113.03 112.99 113.02 111.33 112.04 112.19 110.86 111.57 110.14 109.31 111.99 106.94 + 110.15 109.53 111.70 111.20 109.39 109.86 109.64 109.96 109.01 108.69 108.19 107.45 107.97 107.35 107.45 105.99 105.93 106.89 108.07 105.88 + 105.10 105.69 104.51 102.57 102.18 103.39 101.81 100.90 104.33 104.32 104.68 102.54 101.99 102.79 103.18 101.94 101.59 101.57 101.81 101.46 + 102.20 101.24 101.17 101.07 99.36 99.26 99.03 98.35 97.78 97.69 97.30 97.35 96.86 96.89 96.16 96.81 95.82 95.79 95.92 94.23 + 95.31 95.57 -10.00 + -10.00 122.38 120.63 120.81 119.86 117.23 119.76 117.53 119.45 119.22 116.91 118.04 117.37 116.38 115.85 115.85 117.10 114.35 116.03 115.92 + 114.36 115.16 114.47 114.02 113.21 112.61 113.28 113.00 113.07 113.05 112.14 112.20 112.10 110.88 111.99 110.50 110.55 112.41 110.37 111.05 + 109.24 111.55 111.95 110.65 109.24 109.75 110.48 109.21 107.71 106.47 107.83 107.25 107.97 107.79 105.30 106.32 106.65 107.36 106.68 105.92 + 105.91 106.57 104.41 103.09 103.18 103.42 101.22 100.90 101.87 106.72 105.76 102.93 102.60 101.61 100.04 101.60 101.87 101.83 102.03 102.39 + 101.86 101.27 100.03 100.29 99.65 99.27 99.12 98.71 98.58 97.84 97.58 97.40 97.50 96.95 97.11 96.34 96.52 96.86 95.91 95.73 + 95.20 95.37 -10.00 + -10.00 121.63 121.23 119.84 118.72 119.39 119.01 117.64 117.89 117.61 119.61 117.67 117.45 115.60 116.08 116.26 115.30 115.50 115.63 115.36 + 115.74 115.58 114.71 113.03 113.12 113.31 112.92 113.10 112.53 111.96 111.68 112.41 110.87 112.05 108.20 111.19 112.20 110.49 110.74 109.35 + 111.30 110.21 110.13 108.73 110.27 109.73 110.00 108.39 108.44 107.11 108.20 107.92 107.78 105.79 105.34 106.27 107.50 106.22 104.89 106.09 + 106.71 105.91 103.83 103.86 104.07 104.99 103.12 101.41 98.42 102.31 108.04 108.15 104.59 104.55 101.80 101.89 100.93 102.53 101.27 102.96 + 101.99 102.06 100.97 99.74 100.06 100.89 100.65 99.10 99.10 96.74 97.52 98.23 97.94 97.53 96.83 96.92 97.00 95.96 95.52 95.79 + 95.88 94.88 -10.00 + -10.00 120.37 119.33 120.21 119.24 117.51 118.07 117.02 118.65 117.48 117.28 117.82 117.16 118.47 117.50 114.31 115.56 114.86 114.87 117.17 + 113.46 113.69 113.34 112.41 113.33 113.07 112.96 113.37 111.26 111.91 112.68 110.28 110.78 110.38 110.44 112.02 110.81 111.05 107.43 110.98 + 109.89 110.23 110.00 109.70 108.84 110.25 109.43 107.53 108.52 108.36 106.58 107.28 106.98 106.61 106.59 107.40 105.61 106.24 106.28 107.44 + 106.18 104.36 103.66 105.26 104.23 102.90 102.50 102.51 102.99 99.50 99.95 104.78 114.49 105.52 102.26 101.95 100.84 100.85 100.54 102.03 + 101.26 101.56 101.44 100.75 99.50 98.87 99.59 91.00 100.42 98.68 97.26 97.72 96.66 96.31 96.75 96.59 96.55 95.70 95.42 96.02 + 96.71 98.20 -10.00 + -10.00 119.77 119.45 117.20 119.03 117.80 114.72 117.42 118.13 117.44 116.55 117.42 117.99 117.51 111.93 115.73 113.59 114.52 116.49 114.78 + 114.86 112.81 113.52 113.71 113.67 113.15 113.37 111.70 112.45 113.05 111.06 111.38 110.69 110.35 111.86 109.90 110.67 109.66 110.80 110.22 + 107.80 107.85 109.33 107.80 109.25 108.63 108.48 109.64 106.88 106.99 108.28 106.90 107.14 107.31 106.78 105.86 104.26 106.08 106.70 106.79 + 104.81 103.27 103.71 104.22 104.72 103.55 101.79 102.64 102.68 102.72 101.49 101.12 99.67 111.22 125.45 112.68 102.20 102.99 100.08 100.03 + 99.31 100.04 100.70 99.61 96.33 99.69 99.01 98.92 99.63 99.88 99.89 95.33 95.37 95.34 95.36 95.87 98.70 98.90 98.91 98.45 + 97.64 97.98 -10.00 + -10.00 119.51 119.09 118.62 117.20 117.06 117.76 117.95 116.97 117.25 115.46 117.90 115.91 113.58 115.14 114.07 114.90 112.79 113.94 114.17 + 113.04 112.05 114.06 110.96 113.35 114.27 111.81 112.69 112.84 111.45 111.19 111.13 110.52 111.85 111.48 111.01 109.52 109.38 108.48 110.89 + 109.37 109.67 108.88 107.35 109.25 107.45 108.06 107.82 105.05 105.71 106.78 106.22 107.17 104.56 106.23 105.07 105.52 105.84 106.48 105.25 + 104.75 103.52 104.33 104.81 103.06 102.87 101.80 103.69 101.17 101.18 101.80 102.03 98.25 98.80 96.71 104.13 121.85 120.43 104.27 101.42 + 99.42 98.48 99.13 98.88 99.29 98.32 98.54 99.57 98.37 98.18 96.54 95.32 95.33 95.33 96.70 96.17 96.18 98.88 98.90 98.94 + 98.81 98.14 -10.00 + -10.00 119.37 118.68 117.23 118.30 117.25 116.18 116.23 117.04 117.19 117.25 117.43 117.30 116.29 115.48 114.86 113.89 112.31 113.95 112.95 + 114.03 114.97 114.19 113.36 113.48 112.63 111.73 112.88 109.53 112.33 111.44 110.56 111.90 111.26 111.21 110.35 110.09 111.22 110.54 109.66 + 109.08 109.06 109.12 108.79 107.29 107.93 108.12 107.12 107.17 106.38 106.30 106.44 106.77 107.39 106.04 105.87 106.35 107.10 106.51 104.75 + 104.38 104.84 104.29 104.39 103.80 102.06 102.59 102.44 102.11 100.97 101.47 101.34 100.70 99.76 98.23 96.23 97.48 99.82 106.51 112.80 + 108.56 102.92 99.21 95.72 98.09 97.97 97.23 98.40 98.31 97.04 97.15 97.21 97.19 97.12 97.14 96.15 96.16 99.44 98.89 98.77 + 98.46 97.39 -10.00 + -10.00 118.78 117.84 118.03 117.14 115.91 116.45 116.73 116.28 116.61 114.07 117.48 115.34 115.23 115.09 114.49 114.04 112.82 111.52 113.32 + 113.85 114.38 113.47 112.95 111.54 112.58 112.72 111.38 112.31 111.53 111.78 109.89 111.75 111.70 111.07 109.56 111.93 109.27 110.03 109.47 + 108.23 108.61 109.31 108.54 107.50 106.89 107.17 107.69 107.26 107.82 107.61 106.77 107.09 101.35 105.03 105.23 104.56 106.81 105.41 105.13 + 104.31 103.85 106.04 103.79 103.20 103.55 103.78 100.46 100.67 101.84 102.34 100.15 99.02 99.64 99.14 99.52 98.21 96.38 97.37 96.93 + 96.15 100.34 101.51 96.15 98.07 97.63 97.07 97.29 98.25 97.65 97.91 97.03 97.22 97.05 97.11 96.15 96.16 99.68 99.61 98.61 + 98.44 97.36 -10.00 + -10.00 119.06 119.81 116.85 116.87 117.05 117.21 116.90 116.17 116.03 120.10 114.49 113.75 114.95 114.65 113.78 113.62 112.28 111.73 113.20 + 112.74 112.68 113.21 111.01 113.06 113.15 111.10 113.17 111.63 110.62 108.89 112.12 111.04 112.17 110.25 111.80 110.72 111.03 109.28 109.54 + 109.25 106.61 109.26 107.24 107.05 107.19 105.84 105.46 106.53 106.85 106.41 107.19 105.94 105.58 105.07 105.70 104.06 105.13 104.72 103.88 + 104.96 104.33 104.29 103.63 102.84 103.00 104.10 104.53 99.69 100.21 100.26 100.68 99.30 98.27 98.16 98.38 98.08 95.79 96.96 97.51 + 96.84 95.97 95.22 96.17 96.37 97.51 96.11 95.77 98.10 97.41 97.51 96.99 97.33 97.13 96.10 96.35 96.56 99.16 98.30 98.54 + 96.56 97.24 -10.00 + -10.00 118.52 117.76 115.56 116.96 117.24 117.22 116.21 116.80 115.97 114.65 114.11 114.21 113.03 114.30 113.01 112.18 112.94 113.11 112.30 + 111.84 111.56 111.12 112.59 112.44 109.89 113.46 112.00 111.85 110.26 112.26 111.56 111.76 110.37 110.98 110.56 111.75 110.17 109.13 107.29 + 108.23 106.21 108.69 108.70 107.23 108.64 107.37 103.92 106.16 106.69 106.79 107.27 105.36 105.73 104.99 104.80 105.25 104.13 104.22 104.61 + 103.68 105.09 105.35 104.24 104.22 104.19 102.51 102.57 103.26 102.49 101.63 100.33 97.44 98.61 97.94 97.69 97.91 97.39 97.46 98.10 + 97.53 96.97 96.28 96.03 95.99 95.12 95.71 95.27 96.19 96.01 97.46 97.76 97.08 97.67 96.50 96.82 97.32 96.38 97.99 95.43 + 95.96 95.03 -10.00 + -10.00 117.81 117.62 118.86 117.56 117.21 116.90 117.42 116.55 116.98 115.45 114.27 113.84 113.95 112.62 112.19 113.09 113.20 112.41 110.78 + 110.74 109.41 110.72 112.45 111.59 112.81 111.33 111.83 110.67 112.16 110.79 110.70 109.40 110.48 111.46 111.65 110.93 109.63 109.56 109.47 + 109.22 109.48 108.67 108.69 109.04 107.81 108.04 107.09 106.70 105.86 105.86 106.14 106.51 106.12 105.85 104.55 105.77 105.49 105.15 105.30 + 105.04 105.14 104.67 103.35 104.62 104.47 103.50 102.91 102.43 102.29 101.94 101.66 99.40 99.22 98.91 98.48 97.80 97.65 97.77 97.39 + 97.03 97.02 96.37 96.44 96.51 95.11 95.76 95.43 95.84 95.16 95.93 96.64 96.87 96.96 97.37 97.96 96.32 97.38 95.96 97.41 + 95.55 94.74 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 -10.00 + -10.00 -10.00 -10.00