From 98c5702d15b7a6bfcfb91977398ce98e269e1946 Mon Sep 17 00:00:00 2001 From: "lewis.sampson" Date: Mon, 8 Jun 2020 16:33:28 +0100 Subject: [PATCH 1/4] Added boundary checks to the SMC grid input files for ww3_grid, to ensure they comply with the limits of the nameslist. --- model/ftn/ww3_grid.ftn | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 501ec4c544..0f5db190e6 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -4414,7 +4414,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 @@ -6003,6 +6014,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'/) From 71b9ba91dd4801ba29780ead2564c2a585425123 Mon Sep 17 00:00:00 2001 From: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Date: Thu, 16 Jul 2020 12:59:29 +0100 Subject: [PATCH 2/4] 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. --- model/ftn/w3gdatmd.ftn | 2 +- model/ftn/w3iogrmd.ftn | 9 +- model/ftn/w3timemd.ftn | 97 +++-- model/ftn/ww3_grid.ftn | 29 +- model/ftn/ww3_ounf.ftn | 14 +- model/ftn/ww3_ounp.ftn | 16 +- model/ftn/ww3_trnc.ftn | 12 +- model/inp/ww3_grid.inp | 3 + model/nml/namelists.nml | 147 ++++++++ regtests/bin/matrix.base | 15 +- regtests/bin/matrix_ukmo_cray | 1 + 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 +++ 29 files changed, 1636 insertions(+), 50 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 diff --git a/model/ftn/w3gdatmd.ftn b/model/ftn/w3gdatmd.ftn index 477cd6afc8..b03ec803b2 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 b325a7a776..4808b1a0b9 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 e5760264b5..75a5aef322 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_grid.ftn b/model/ftn/ww3_grid.ftn index 0f5db190e6..ee1964b731 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 ! @@ -5199,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 @@ -5700,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 ' --------------------------------------------------') @@ -5792,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,','/& @@ -5975,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', & diff --git a/model/ftn/ww3_ounf.ftn b/model/ftn/ww3_ounf.ftn index 26650f84e6..66dd41d976 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 be2e502940..e3b737a955 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_trnc.ftn b/model/ftn/ww3_trnc.ftn index f12c259a92..4bd3dfaf17 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_grid.inp b/model/inp/ww3_grid.inp index 1a4dffe5b1..5074281b05 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 0000000000..4d79c30a34 --- /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/regtests/bin/matrix.base b/regtests/bin/matrix.base index f424e85b0b..3145902890 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 multi06 multi07 multi08 do eval " value=\$$par" # echo "$par = $value" @@ -84,7 +84,8 @@ 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 ' Calendar type : $calendar'" >> matrix.head echo " echo ' '" >> matrix.head if [ -n "$filter" ] then @@ -2002,6 +2003,16 @@ echo "$rtst -s ST4 -w work_UPD6_U_cap -i input_UPD6_U_cap $ww3 ww3_ta1" >> matrix.body fi +# 365_day and 360_day calendars, no switch sharing here + + if [ "$calendar" = 'y' ] && [ "$shrd" = '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_ukmo_cray b/regtests/bin/matrix_ukmo_cray index f40eec1178..eedd6492a0 100755 --- a/regtests/bin/matrix_ukmo_cray +++ b/regtests/bin/matrix_ukmo_cray @@ -122,6 +122,7 @@ 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 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 0000000000..d7c9f07003 --- /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 0000000000..863a9b9d13 --- /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 0000000000..5859c1517f --- /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 0000000000..97515bbe24 --- /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 0000000000..9dcc954994 --- /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 0000000000..5ad8fde504 --- /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 0000000000..18b3596c98 --- /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 0000000000..b4314da20f --- /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 0000000000..188101af47 --- /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 0000000000..4688fa4b66 --- /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 0000000000..32579e18f4 --- /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 0000000000..76d054917d --- /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 0000000000..270299532d --- /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 0000000000..ec821a4b2b --- /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 0000000000..4a12549bb6 --- /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 0000000000..e361d8b89e --- /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 0000000000..3249147bc5 --- /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 0000000000..3d5caaa9fd --- /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 From 6c42d17c27f4e4788724426a9d870e8f4a4f6f66 Mon Sep 17 00:00:00 2001 From: Chris Bunney <48915820+ukmo-ccbunney@users.noreply.github.com> Date: Tue, 28 Jul 2020 15:06:22 +0100 Subject: [PATCH 3/4] 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. --- manual/num/rotagrid.tex | 7 ++++++- manual/run/ww3_bounc.tex | 3 +++ manual/run/ww3_bound.tex | 3 +++ model/ftn/ww3_bounc.ftn | 27 +++++++++++++++++++++++++-- model/ftn/ww3_bound.ftn | 33 +++++++++++++++++++++++++++++++-- model/inp/ww3_bounc.inp | 3 +++ model/inp/ww3_bound.inp | 3 +++ model/nml/ww3_bounc.nml | 2 ++ 8 files changed, 76 insertions(+), 5 deletions(-) diff --git a/manual/num/rotagrid.tex b/manual/num/rotagrid.tex index 60b58ef6d2..c44c6f387e 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 5814ba1418..b75a1fca18 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 310ceda61c..6dd5b059e7 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/ftn/ww3_bounc.ftn b/model/ftn/ww3_bounc.ftn index 9fbbad6fb2..fbd5213998 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.XX ) +!/ !/ !/ 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 34df946822..14cf3535d4 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/inp/ww3_bounc.inp b/model/inp/ww3_bounc.inp index 61143ad063..672a0dc34a 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 15a082b0ab..05976bd414 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/nml/ww3_bounc.nml b/model/nml/ww3_bounc.nml index 79c4923afd..eb2e667bc8 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: From 5c361aaf3085bb5ac04931493b9c1eae1c15b5d9 Mon Sep 17 00:00:00 2001 From: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Date: Thu, 30 Jul 2020 14:35:06 +0100 Subject: [PATCH 4/4] 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. --- model/bin/ww3_from_ftp.sh | 3 + model/ftn/ww3_shel.ftn | 38 +- regtests/bin/matrix.base | 18 +- regtests/bin/matrix.comp | 10 +- regtests/bin/matrix_datarmor | 2 + regtests/bin/matrix_ncep | 2 + regtests/bin/matrix_ukmo_cray | 8 +- regtests/bin/matrix_zeus_HLT | 2 + .../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 | 9 +- 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 ++++++++++++++++++ 21 files changed, 838 insertions(+), 113 deletions(-) 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/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index f17d3c6e00..1a2e8a27e7 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -36,12 +36,15 @@ 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 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/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 62f33b3118..65a971191f 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/regtests/bin/matrix.base b/regtests/bin/matrix.base index 3145902890..2f3e0dc5f5 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 calendar multi06 multi07 multi08 + uost assim calendar oasis multi06 multi07 multi08 do eval " value=\$$par" # echo "$par = $value" @@ -85,6 +85,7 @@ 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 ' OASIS coupling : $oasis'" >> matrix.head echo " echo ' Calendar type : $calendar'" >> matrix.head echo " echo ' '" >> matrix.head if [ -n "$filter" ] @@ -2003,9 +2004,18 @@ echo "$rtst -s ST4 -w work_UPD6_U_cap -i input_UPD6_U_cap $ww3 ww3_ta1" >> matrix.body fi -# 365_day and 360_day calendars, no switch sharing here - - if [ "$calendar" = 'y' ] && [ "$shrd" = 'y' ] + #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 diff --git a/regtests/bin/matrix.comp b/regtests/bin/matrix.comp index ae780fef6e..67eb75c6da 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 f8b68daf65..a789dbdcf3 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 ab7d649132..6c7880090e 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 eedd6492a0..33639e5cb9 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,7 @@ 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) diff --git a/regtests/bin/matrix_zeus_HLT b/regtests/bin/matrix_zeus_HLT index 0949b201f0..b8da49cd34 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_tp2.14/input/TOYNAMELIST.nam.OASACM2 b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 new file mode 100755 index 0000000000..9b4b994b55 --- /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 8913fbfcb3..278837a7b2 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 0000000000..e71c2ef85c --- /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 d8d37ae247..e4f3ea561e 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 6ec529958f..333d3c30ed 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,9 @@ 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" ] ; then source $WWATCH3_DIR/bin/cmplr.env # shortlist optl alloptl=( $optl ) @@ -51,10 +54,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 0000000000..9fff33b21f --- /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 4dc6cad86c..6c3826b97b 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 25ba7894bf..d8bc821f42 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 28433bec8a..a902f2d633 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 447b88f1df..041caf7f57 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 55794117dc..f4787944c9 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 0000000000..262a905635 --- /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 0000000000..c4cbbe6e9d --- /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 ! +! -------------------------------------------------------------------- !