From 803f537e93a183f259259a1d439a2bedc0dcb51e Mon Sep 17 00:00:00 2001 From: "Hernan G. Arango" Date: Wed, 30 Oct 2024 14:38:55 -0400 Subject: [PATCH] Added Lake Erie Test Case --- .../Data/FRC/LakeErie_Pair_era5_short.nc | 3 + .../Data/FRC/LakeErie_Qair_era5_short.nc | 3 + .../Data/FRC/LakeErie_Tair_era5_short.nc | 3 + .../Data/FRC/LakeErie_cloud_era5_short.nc | 3 + .../Data/FRC/LakeErie_latent_era5_short.nc | 3 + .../Data/FRC/LakeErie_lwrad_era5_short.nc | 3 + .../Data/FRC/LakeErie_rain_era5_short.nc | 3 + .../Data/FRC/LakeErie_sensible_era5_short.nc | 3 + .../Data/FRC/LakeErie_shflux_era5_short.nc | 3 + .../FRC/LakeErie_snow_albedo_era5_short.nc | 3 + .../FRC/LakeErie_snow_thickness_era5_short.nc | 3 + .../Data/FRC/LakeErie_snowfall_era5_short.nc | 3 + .../Data/FRC/LakeErie_sustr_era5_short.nc | 3 + .../Data/FRC/LakeErie_svstr_era5_short.nc | 3 + .../Data/FRC/LakeErie_swflux_era5_short.nc | 3 + .../Data/FRC/LakeErie_swrad_era5_short.nc | 3 + .../Data/FRC/LakeErie_uwind_era5_short.nc | 3 + .../Data/FRC/LakeErie_vwind_era5_short.nc | 3 + .../Data/ROMS/roms_lake_erie_grd_1000m.nc | 3 + .../Data/ROMS/roms_lake_erie_grd_1200m.nc | 3 + LAKE_ERIE/Forward/ana_cloud.h | 145 + LAKE_ERIE/Forward/ana_humid.h | 121 + LAKE_ERIE/Forward/ana_initial.h | 616 +++ LAKE_ERIE/Forward/ana_pair.h | 114 + LAKE_ERIE/Forward/ana_rain.h | 119 + LAKE_ERIE/Forward/ana_srflux.h | 291 ++ LAKE_ERIE/Forward/ana_tair.h | 114 + LAKE_ERIE/Forward/ana_winds.h | 152 + LAKE_ERIE/Forward/build_roms.csh | 435 +++ LAKE_ERIE/Forward/lake_erie.h | 91 + LAKE_ERIE/Forward/lake_erie.in | 344 ++ LAKE_ERIE/Forward/roms_lake_erie_1000m.in | 3462 +++++++++++++++++ LAKE_ERIE/Forward/roms_lake_erie_1200m.in | 3462 +++++++++++++++++ LAKE_ERIE/Forward/stations_lake_erie.in | 363 ++ 34 files changed, 9889 insertions(+) create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_Pair_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_Qair_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_Tair_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_cloud_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_latent_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_lwrad_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_rain_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_sensible_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_shflux_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_snow_albedo_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_snow_thickness_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_snowfall_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_sustr_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_svstr_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_swflux_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_swrad_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_uwind_era5_short.nc create mode 100644 LAKE_ERIE/Data/FRC/LakeErie_vwind_era5_short.nc create mode 100644 LAKE_ERIE/Data/ROMS/roms_lake_erie_grd_1000m.nc create mode 100644 LAKE_ERIE/Data/ROMS/roms_lake_erie_grd_1200m.nc create mode 100644 LAKE_ERIE/Forward/ana_cloud.h create mode 100644 LAKE_ERIE/Forward/ana_humid.h create mode 100644 LAKE_ERIE/Forward/ana_initial.h create mode 100644 LAKE_ERIE/Forward/ana_pair.h create mode 100644 LAKE_ERIE/Forward/ana_rain.h create mode 100644 LAKE_ERIE/Forward/ana_srflux.h create mode 100644 LAKE_ERIE/Forward/ana_tair.h create mode 100644 LAKE_ERIE/Forward/ana_winds.h create mode 100755 LAKE_ERIE/Forward/build_roms.csh create mode 100644 LAKE_ERIE/Forward/lake_erie.h create mode 100644 LAKE_ERIE/Forward/lake_erie.in create mode 100644 LAKE_ERIE/Forward/roms_lake_erie_1000m.in create mode 100644 LAKE_ERIE/Forward/roms_lake_erie_1200m.in create mode 100644 LAKE_ERIE/Forward/stations_lake_erie.in diff --git a/LAKE_ERIE/Data/FRC/LakeErie_Pair_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_Pair_era5_short.nc new file mode 100644 index 00000000..c377f3e4 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_Pair_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e73af7b110bace0af9ce0c5e8d1f703f595b1ac00c58fb1b2a0f023d66838582 +size 31891787 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_Qair_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_Qair_era5_short.nc new file mode 100644 index 00000000..f499ebff --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_Qair_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a5b307f6e967b142d0a20adabb657be97afc13f214c8876504bd826da706f2c +size 43125266 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_Tair_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_Tair_era5_short.nc new file mode 100644 index 00000000..658dd168 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_Tair_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a02a27ee58f4ea0cdbd66e72d72d3bdd41b2bc5a48d5a0937121a139a002b59f +size 36949416 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_cloud_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_cloud_era5_short.nc new file mode 100644 index 00000000..0f5a3c79 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_cloud_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9827cd4c22eb3314890690f0eddb9624a792c598dadfca9d53d81dfc151485a +size 33843158 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_latent_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_latent_era5_short.nc new file mode 100644 index 00000000..268aa8e8 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_latent_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0062f9ea68297ef0836a5e1343ae06e3cda20a8d749555796b5316795bfd7669 +size 36894095 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_lwrad_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_lwrad_era5_short.nc new file mode 100644 index 00000000..1f36b0f5 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_lwrad_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f39c6190ae8995d6436b1a730b5b15cefa35834cc3a2cc0af4355073b086c74 +size 2242228 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_rain_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_rain_era5_short.nc new file mode 100644 index 00000000..ef41ac94 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_rain_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:392c3d4c9f3607bdd33c194319e1397f6afb4f6ea5bedc6bc6228fd7a9b749fc +size 15231586 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_sensible_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_sensible_era5_short.nc new file mode 100644 index 00000000..cbb76c2c --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_sensible_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f78d7b1d26dcb8525fc83b3dce5628e9336d19a89e8e8c530bb6225f5b8c8463 +size 38014751 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_shflux_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_shflux_era5_short.nc new file mode 100644 index 00000000..2f42a168 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_shflux_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51adc2b8ed83a0e96503fbe91aa007edae89d3e0dbb62d9e8f5b95ad014f6f7d +size 35483415 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_snow_albedo_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_snow_albedo_era5_short.nc new file mode 100644 index 00000000..186c7f2f --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_snow_albedo_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d91a4782edccb4086d3fe71c41a5373e0f18af33e7948dd4133fc2a8517c0f3 +size 14198571 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_snow_thickness_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_snow_thickness_era5_short.nc new file mode 100644 index 00000000..6c72b9b5 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_snow_thickness_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76f771f023eac6e102dfc5ec085075a9d7adcfbd16f577210726bb3d4eb2bbc0 +size 6458569 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_snowfall_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_snowfall_era5_short.nc new file mode 100644 index 00000000..e3a52f2f --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_snowfall_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:261bf3849ad835b77e947c62068b8a5538c0e8f730fac967a04e114336a0d6d2 +size 6447156 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_sustr_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_sustr_era5_short.nc new file mode 100644 index 00000000..a7102e62 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_sustr_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83ce9b74fdb04277607d1334d4ecda33f04b6147091404223327892c6207284c +size 33671107 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_svstr_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_svstr_era5_short.nc new file mode 100644 index 00000000..cff0b7f6 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_svstr_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:017a2ecc03b1cf149d53ae2c9f1e1bbed14960d0196d6e4ab2287adb6f8bfd99 +size 33440381 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_swflux_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_swflux_era5_short.nc new file mode 100644 index 00000000..f0013eb7 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_swflux_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9febdaa819ffd6b81f8aa350e667ee869c96d17bdf09edd21fdf5f60e664cf5a +size 29208053 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_swrad_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_swrad_era5_short.nc new file mode 100644 index 00000000..b7a9ebfc --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_swrad_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:010d74188cfb1c1338a43c7fe156957478680419ec23565a80d9dd6ad287c69c +size 22278409 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_uwind_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_uwind_era5_short.nc new file mode 100644 index 00000000..e2e7b4e5 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_uwind_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5af8f0723a69077ed7b3c665b7690a20829c5049ca9b79d369943aac0a24018 +size 38119107 diff --git a/LAKE_ERIE/Data/FRC/LakeErie_vwind_era5_short.nc b/LAKE_ERIE/Data/FRC/LakeErie_vwind_era5_short.nc new file mode 100644 index 00000000..a272f568 --- /dev/null +++ b/LAKE_ERIE/Data/FRC/LakeErie_vwind_era5_short.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8817e2565ab803fb6d7b790fe82dfe10a6aee4c298660d2cc6453affa5e369c7 +size 38219313 diff --git a/LAKE_ERIE/Data/ROMS/roms_lake_erie_grd_1000m.nc b/LAKE_ERIE/Data/ROMS/roms_lake_erie_grd_1000m.nc new file mode 100644 index 00000000..90673f03 --- /dev/null +++ b/LAKE_ERIE/Data/ROMS/roms_lake_erie_grd_1000m.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:392939ef582718a2fe64eb14a1e75d4df9e1698f23a7aa1dc3220e005ab07f52 +size 17260356 diff --git a/LAKE_ERIE/Data/ROMS/roms_lake_erie_grd_1200m.nc b/LAKE_ERIE/Data/ROMS/roms_lake_erie_grd_1200m.nc new file mode 100644 index 00000000..7989fd27 --- /dev/null +++ b/LAKE_ERIE/Data/ROMS/roms_lake_erie_grd_1200m.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f888b8da67ea7fd2d3523c1e19827b457972017ea4660b0e1e87df31e39f53b +size 11921988 diff --git a/LAKE_ERIE/Forward/ana_cloud.h b/LAKE_ERIE/Forward/ana_cloud.h new file mode 100644 index 00000000..d033b523 --- /dev/null +++ b/LAKE_ERIE/Forward/ana_cloud.h @@ -0,0 +1,145 @@ +!! + SUBROUTINE ana_cloud (ng, tile, model) +! +!! git $Id$ +!!====================================================================== +!! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +!! Licensed under a MIT/X style license ! +!! See License_ROMS.txt ! +!======================================================================= +! ! +! This routine sets cloud fraction using an analytical expression. ! +! ! +!======================================================================= +! + USE mod_param + USE mod_forces + USE mod_ncparam +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model +! +! Local variable declarations. +! + character (len=*), parameter :: MyFile = & + & __FILE__ +! +#include "tile.h" +! + CALL ana_cloud_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & FORCES(ng) % cloud) +! +! Set analytical header file name used. +! +#ifdef DISTRIBUTE + IF (Lanafile) THEN +#else + IF (Lanafile.and.(tile.eq.0)) THEN +#endif + ANANAME( 4)=MyFile + END IF +! + RETURN + END SUBROUTINE ana_cloud +! +!*********************************************************************** + SUBROUTINE ana_cloud_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & cloud) +!*********************************************************************** +! + USE mod_param + USE mod_scalars +! +#ifdef PAPA_CLM + USE dateclock_mod, ONLY : caldate +#endif + USE exchange_2d_mod, ONLY : exchange_r2d_tile +#ifdef DISTRIBUTE + USE mp_exchange_mod, ONLY : mp_exchange2d +#endif +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS +! +#ifdef ASSUMED_SHAPE + real(r8), intent(out) :: cloud(LBi:,LBj:) +#else + real(r8), intent(out) :: cloud(LBi:UBi,LBj:UBj) +#endif +! +! Local variable declarations. +! + integer :: i, j +! + real(r8) :: Cval + real(dp) :: yday + +#ifdef PAPA_CLM +! + real(dp), dimension(14) :: Coktas = & + & (/ 6.29_r8, 6.26_r8, 6.31_r8, 6.31_r8, 6.32_r8, & + & 6.70_r8, 7.12_r8, 7.26_r8, 6.93_r8, 6.25_r8, & + & 6.19_r8, 6.23_r8, 6.31_r8, 6.29_r8 /) + + real(dp), dimension(14) :: Cyday = & + & (/ 0.0_dp, 16.0_dp, 46.0_dp, 75.0_dp, 105.0_dp, & + & 136.0_dp, 166.0_dp, 197.0_dp, 228.0_dp, 258.0_dp, & + & 289.0_dp, 319.0_dp, 350.0_dp, 366.0_dp /) +#endif + +#include "set_bounds.h" +! +!----------------------------------------------------------------------- +! Set analytical cloud fraction (%/100): 0=clear sky, 1:overcast sky. +!----------------------------------------------------------------------- +! +#if defined PAPA_CLM + +! OWS Papa cloud climatology. +! + CALL caldate (tdays(ng), yd_dp=yday) + DO i=1,13 + IF ((yday.ge.Cyday(i)).and.(yday.le.Cyday(i+1))) THEN + Cval=0.125_r8*(Coktas(i )*(Cyday(i+1)-yday)+ & + & Coktas(i+1)*(yday-Cyday(i)))/ & + & (Cyday(i+1)-Cyday(i)) + ELSE + Cval=0.0_r8 + END IF + END DO +#else + Cval=0.65_r8 +#endif + + DO j=JstrT,JendT + DO i=IstrT,IendT + cloud(i,j)=Cval + END DO + END DO +! +! Exchange boundary data. +! + IF (EWperiodic(ng).or.NSperiodic(ng)) THEN + CALL exchange_r2d_tile (ng, tile, & + & LBi, UBi, LBj, UBj, & + & cloud) + END IF + +#ifdef DISTRIBUTE + CALL mp_exchange2d (ng, tile, model, 1, & + & LBi, UBi, LBj, UBj, & + & NghostPoints, & + & EWperiodic(ng), NSperiodic(ng), & + & cloud) +#endif +! + RETURN + END SUBROUTINE ana_cloud_tile diff --git a/LAKE_ERIE/Forward/ana_humid.h b/LAKE_ERIE/Forward/ana_humid.h new file mode 100644 index 00000000..4363e652 --- /dev/null +++ b/LAKE_ERIE/Forward/ana_humid.h @@ -0,0 +1,121 @@ +!! + SUBROUTINE ana_humid (ng, tile, model) +! +!! git $Id$ +!! svn $Id$ +!!====================================================================== +!! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +!! Licensed under a MIT/X style license ! +!! See License_ROMS.txt ! +!======================================================================= +! ! +! This routine sets surface air humidity (moisture) using an ! +! analytical expression. There three types of humidity: ! +! ! +! 1) Absolute humidity: density of water vapor. ! +! 2) Specific humidity: ratio of the mass of water vapor to ! +! the mass of moist air cointaining the vapor (g/kg) ! +! 3) Relative humidity: ratio of the actual mixing ratio to ! +! saturation mixing ratio of the air at given temperature ! +! and pressure (percentage). ! +! ! +!======================================================================= +! + USE mod_param + USE mod_forces + USE mod_ncparam +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model +! +! Local variable declarations. +! + character (len=*), parameter :: MyFile = & + & __FILE__ +! +#include "tile.h" +! + CALL ana_humid_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & FORCES(ng) % Hair) +! +! Set analytical header file name used. +! +#ifdef DISTRIBUTE + IF (Lanafile) THEN +#else + IF (Lanafile.and.(tile.eq.0)) THEN +#endif + ANANAME( 9)=MyFile + END IF +! + RETURN + END SUBROUTINE ana_humid +! +!*********************************************************************** + SUBROUTINE ana_humid_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & Hair) +!*********************************************************************** +! + USE mod_param + USE mod_scalars +! + USE exchange_2d_mod, ONLY : exchange_r2d_tile +#ifdef DISTRIBUTE + USE mp_exchange_mod, ONLY : mp_exchange2d +#endif +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS +! +#ifdef ASSUMED_SHAPE + real(r8), intent(out) :: Hair(LBi:,LBj:) +#else + real(r8), intent(out) :: Hair(LBi:UBi,LBj:UBj) +#endif +! +! Local variable declarations. +! + integer :: i, j + +#include "set_bounds.h" +! +!----------------------------------------------------------------------- +! Set analytical surface air humidity. +!----------------------------------------------------------------------- +! +#if defined LAKE_ICE + DO j=JstrT,JendT + DO i=IstrT,IendT + Hair(i,j)=0.8_r8 + END DO + END DO +#else + ana_humidity.h: no values provided for Hair. +#endif +! +! Exchange boundary data. +! + IF (EWperiodic(ng).or.NSperiodic(ng)) THEN + CALL exchange_r2d_tile (ng, tile, & + & LBi, UBi, LBj, UBj, & + & Hair) + END IF + +#ifdef DISTRIBUTE + CALL mp_exchange2d (ng, tile, model, 1, & + & LBi, UBi, LBj, UBj, & + & NghostPoints, & + & EWperiodic(ng), NSperiodic(ng), & + & Hair) +#endif +! + RETURN + END SUBROUTINE ana_humid_tile diff --git a/LAKE_ERIE/Forward/ana_initial.h b/LAKE_ERIE/Forward/ana_initial.h new file mode 100644 index 00000000..5b4e2910 --- /dev/null +++ b/LAKE_ERIE/Forward/ana_initial.h @@ -0,0 +1,616 @@ +!! + SUBROUTINE ana_initial (ng, tile, model) +! +!! git $Id$ +!!====================================================================== +!! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +!! Licensed under a MIT/X style license ! +!! See License_ROMS.md ! +!======================================================================= +! ! +! This subroutine sets initial conditions for momentum and tracer ! +! type variables using analytical expressions. ! +! ! +!======================================================================= +! + USE mod_param + USE mod_grid + USE mod_ncparam + USE mod_ocean + USE mod_stepping +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model +! +! Local variable declarations. +! + character (len=*), parameter :: MyFile = & + & __FILE__ +! +#include "tile.h" +! + IF (model.eq.iNLM) THEN + CALL ana_NLMinitial_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & GRID(ng) % h, & +#ifdef SPHERICAL + & GRID(ng) % lonr, & + & GRID(ng) % latr, & +#else + & GRID(ng) % xr, & + & GRID(ng) % yr, & +#endif +#ifdef SOLVE3D + & GRID(ng) % z_r, & + & OCEAN(ng) % u, & + & OCEAN(ng) % v, & + & OCEAN(ng) % t, & +#endif + & OCEAN(ng) % ubar, & + & OCEAN(ng) % vbar, & + & OCEAN(ng) % zeta) +#ifdef TANGENT + ELSE IF ((model.eq.iTLM).or.(model.eq.iRPM)) THEN + CALL ana_TLMinitial_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & kstp(ng), & +# ifdef SOLVE3D + & nstp(ng), & + & OCEAN(ng) % tl_u, & + & OCEAN(ng) % tl_v, & + & OCEAN(ng) % tl_t, & +# endif + & OCEAN(ng) % tl_ubar, & + & OCEAN(ng) % tl_vbar, & + & OCEAN(ng) % tl_zeta) +#endif +#ifdef ADJOINT + ELSE IF (model.eq.iADM) THEN + CALL ana_ADMinitial_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & knew(ng), & +# ifdef SOLVE3D + & nstp(ng), & + & OCEAN(ng) % ad_u, & + & OCEAN(ng) % ad_v, & + & OCEAN(ng) % ad_t, & +# endif + & OCEAN(ng) % ad_ubar, & + & OCEAN(ng) % ad_vbar, & + & OCEAN(ng) % ad_zeta) +#endif + END IF +! +! Set analytical header file name used. +! +#ifdef DISTRIBUTE + IF (Lanafile) THEN +#else + IF (Lanafile.and.(tile.eq.0)) THEN +#endif + ANANAME(10)=MyFile + END IF +! + RETURN + END SUBROUTINE ana_initial +! +!*********************************************************************** + SUBROUTINE ana_NLMinitial_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & h, & +#ifdef SPHERICAL + & lonr, latr, & +#else + & xr, yr, & +#endif +#ifdef SOLVE3D + & z_r, & + & u, v, t, & +#endif + & ubar, vbar, zeta) +!*********************************************************************** +! + USE mod_param + USE mod_parallel + USE mod_grid + USE mod_ncparam + USE mod_iounits + USE mod_scalars +! +#ifdef CHANNEL +# ifdef DISTRIBUTE + USE distribute_mod, ONLY : mp_bcasti +# endif + USE erf_mod, ONLY : ERF +#endif + USE stats_mod, ONLY : stats_2dfld +#ifdef SOLVE3D + USE stats_mod, ONLY : stats_3dfld +#endif +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS +! +#ifdef ASSUMED_SHAPE + real(r8), intent(in) :: h(LBi:,LBj:) +# ifdef SPHERICAL + real(r8), intent(in) :: lonr(LBi:,LBj:) + real(r8), intent(in) :: latr(LBi:,LBj:) +# else + real(r8), intent(in) :: xr(LBi:,LBj:) + real(r8), intent(in) :: yr(LBi:,LBj:) +# endif +# ifdef SOLVE3D + real(r8), intent(in) :: z_r(LBi:,LBj:,:) + + real(r8), intent(out) :: u(LBi:,LBj:,:,:) + real(r8), intent(out) :: v(LBi:,LBj:,:,:) + real(r8), intent(out) :: t(LBi:,LBj:,:,:,:) +# endif + real(r8), intent(out) :: ubar(LBi:,LBj:,:) + real(r8), intent(out) :: vbar(LBi:,LBj:,:) + real(r8), intent(out) :: zeta(LBi:,LBj:,:) +#else +# ifdef SPHERICAL + real(r8), intent(in) :: lonr(LBi:UBi,LBj:UBj) + real(r8), intent(in) :: latr(LBi:UBi,LBj:UBj) +# else + real(r8), intent(in) :: xr(LBi:UBi,LBj:UBj) + real(r8), intent(in) :: yr(LBi:UBi,LBj:UBj) +# endif + real(r8), intent(in) :: h(LBi:UBi,LBj:UBj) +# ifdef SOLVE3D + real(r8), intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng)) + + real(r8), intent(out) :: u(LBi:UBi,LBj:UBj,N(ng),2) + real(r8), intent(out) :: v(LBi:UBi,LBj:UBj,N(ng),2) + real(r8), intent(out) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng)) +# endif + real(r8), intent(out) :: ubar(LBi:UBi,LBj:UBj,:) + real(r8), intent(out) :: vbar(LBi:UBi,LBj:UBj,:) + real(r8), intent(out) :: zeta(LBi:UBi,LBj:UBj,:) +#endif +! +! Local variable declarations. +! + logical, save :: first = .TRUE. +! + integer :: i, itrc, j, k +! + real(r8) :: val +! + TYPE (T_STATS), save :: Stats(7) ! ubar, vbar, zeta, u, v, t, s + +#include "set_bounds.h" +! +!----------------------------------------------------------------------- +! Initialize field statistics structure. +!----------------------------------------------------------------------- +! + IF (first) THEN + first=.FALSE. + DO i=1,SIZE(Stats,1) + Stats(i) % checksum=0_i8b + Stats(i) % count=0 + Stats(i) % min=Large + Stats(i) % max=-Large + Stats(i) % avg=0.0_r8 + Stats(i) % rms=0.0_r8 + END DO + END IF +! +!----------------------------------------------------------------------- +! Initial conditions for 2D momentum (m/s) components. +!----------------------------------------------------------------------- +! +#if defined LAKE_ERIE + DO j=JstrT,JendT + DO i=IstrP,IendT + ubar(i,j,1)=0.0_r8 + END DO + END DO + DO j=JstrP,JendT + DO i=IstrT,IendT + vbar(i,j,1)=0.0_r8 + END DO + END DO +#else + DO j=JstrT,JendT + DO i=IstrP,IendT + ubar(i,j,1)=0.0_r8 + END DO + END DO + DO j=JstrP,JendT + DO i=IstrT,IendT + vbar(i,j,1)=0.0_r8 + END DO + END DO +#endif +! +! Report statistics. +! + CALL stats_2dfld (ng, tile, iNLM, u2dvar, Stats(1), 0, & + & LBi, UBi, LBj, UBj, ubar(:,:,1)) + IF (DOMAIN(ng)%NorthEast_Corner(tile)) THEN + WRITE (stdout,10) TRIM(Vname(2,idUbar))//': '// & + & TRIM(Vname(1,idUbar)), & + & ng, Stats(1)%min, Stats(1)%max + END IF + CALL stats_2dfld (ng, tile, iNLM, v2dvar, Stats(2), 0, & + & LBi, UBi, LBj, UBj, vbar(:,:,1)) + IF (DOMAIN(ng)%NorthEast_Corner(tile)) THEN + WRITE (stdout,10) TRIM(Vname(2,idVbar))//': '// & + & TRIM(Vname(1,idVbar)), & + & ng, Stats(2)%min, Stats(2)%max + END IF +! +!----------------------------------------------------------------------- +! Initial conditions for free-surface (m). +!----------------------------------------------------------------------- +! +#if defined LAKE_ERIE + DO j=JstrT,JendT + DO i=IstrT,IendT + zeta(i,j,1)=0.0_r8 + END DO + END DO +#else + DO j=JstrT,JendT + DO i=IstrT,IendT + zeta(i,j,1)=0.0_r8 + END DO + END DO +#endif +! +! Report statistics. +! + CALL stats_2dfld (ng, tile, iNLM, r2dvar, Stats(3), 0, & + & LBi, UBi, LBj, UBj, zeta(:,:,1)) + IF (DOMAIN(ng)%NorthEast_Corner(tile)) THEN + WRITE (stdout,10) TRIM(Vname(2,idFsur))//': '// & + & TRIM(Vname(1,idFsur)), & + & ng, Stats(3)%min, Stats(3)%max + END IF + +#ifdef SOLVE3D +! +!----------------------------------------------------------------------- +! Initial conditions for 3D momentum components (m/s). +!----------------------------------------------------------------------- +! +# if defined LAKE_ERIE + DO k=1,N(ng) + DO j=JstrT,JendT + DO i=IstrP,IendT + u(i,j,k,1)=0.0_r8 + END DO + END DO + DO j=JstrP,JendT + DO i=IstrT,IendT + v(i,j,k,1)=0.0_r8 + END DO + END DO + END DO +# else + DO k=1,N(ng) + DO j=JstrT,JendT + DO i=IstrP,IendT + u(i,j,k,1)=0.0_r8 + END DO + END DO + DO j=JstrP,JendT + DO i=IstrT,IendT + v(i,j,k,1)=0.0_r8 + END DO + END DO + END DO +# endif +! +! Report statistics. +! + CALL stats_3dfld (ng, tile, iNLM, u3dvar, Stats(4), 0, & + & LBi, UBi, LBj, UBj, 1, N(ng), u(:,:,:,1)) + IF (DOMAIN(ng)%NorthEast_Corner(tile)) THEN + WRITE (stdout,10) TRIM(Vname(2,idUvel))//': '// & + & TRIM(Vname(1,idUvel)), & + & ng, Stats(4)%min, Stats(4)%max + END IF + CALL stats_3dfld (ng, tile, iNLM, v3dvar, Stats(5), 0, & + & LBi, UBi, LBj, UBj, 1, N(ng), v(:,:,:,1)) + IF (DOMAIN(ng)%NorthEast_Corner(tile)) THEN + WRITE (stdout,10) TRIM(Vname(2,idVvel))//': '// & + & TRIM(Vname(1,idVvel)), & + & ng, Stats(5)%min, Stats(5)%max + END IF +! +!----------------------------------------------------------------------- +! Initial conditions for tracer type variables. +!----------------------------------------------------------------------- +! +! Set initial conditions for potential temperature (Celsius) and +! salinity (PSU). +! +# if defined LAKE_ERIE + DO k=1,N(ng) + DO j=JstrT,JendT + DO i=IstrT,IendT + val=TANH(0.5_r8*z_r(i,j,k)+12.0_r8) +!! t(i,j,k,1,itemp)=3.0_r8+2.25_r8*val + t(i,j,k,1,itemp)=3.0_r8 +# ifdef SALINITY +!! t(i,j,k,1,isalt)=10.0_r8-0.75_r8*val + t(i,j,k,1,isalt)=0.5_r8 +# endif + END DO + END DO + END DO +# else + DO k=1,N(ng) + DO j=JstrT,JendT + DO i=IstrT,IendT + t(i,j,k,1,itemp)=T0(ng) +# ifdef SALINITY + t(i,j,k,1,isalt)=S0(ng) +# endif + END DO + END DO + END DO +# endif +! +! Report statistics. +! + DO itrc=1,NAT + CALL stats_3dfld (ng, tile, iNLM, r3dvar, Stats(itrc+5), 0, & + & LBi, UBi, LBj, UBj, 1, N(ng), t(:,:,:,1,itrc)) + IF (DOMAIN(ng)%NorthEast_Corner(tile)) THEN + WRITE (stdout,10) TRIM(Vname(2,idTvar(itrc)))//': '// & + & TRIM(Vname(1,idTvar(itrc))), & + & ng, Stats(itrc+5)%min, Stats(itrc+5)%max + END IF + END DO +#endif +! + 10 FORMAT (3x,' ANA_INITIAL - ',a,/,19x, & + & '(Grid = ',i2.2,', Min = ',1p,e15.8,0p, & + & ' Max = ',1p,e15.8,0p,')') +! + RETURN + END SUBROUTINE ana_NLMinitial_tile + +#ifdef TANGENT +! +!*********************************************************************** + SUBROUTINE ana_TLMinitial_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & kstp, & +# ifdef SOLVE3D + & nstp, & + & tl_u, tl_v, tl_t, & +# endif + & tl_ubar, tl_vbar, tl_zeta) +!*********************************************************************** +! + USE mod_param + USE mod_scalars +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS + integer, intent(in) :: kstp +# ifdef SOLVE3D + integer, intent(in) :: nstp +# endif +! +# ifdef ASSUMED_SHAPE +# ifdef SOLVE3D + real(r8), intent(out) :: tl_u(LBi:,LBj:,:,:) + real(r8), intent(out) :: tl_v(LBi:,LBj:,:,:) + real(r8), intent(out) :: tl_t(LBi:,LBj:,:,:,:) +# endif + real(r8), intent(out) :: tl_ubar(LBi:,LBj:,:) + real(r8), intent(out) :: tl_vbar(LBi:,LBj:,:) + real(r8), intent(out) :: tl_zeta(LBi:,LBj:,:) +# else +# ifdef SOLVE3D + real(r8), intent(out) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2) + real(r8), intent(out) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2) + real(r8), intent(out) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng)) +# endif + real(r8), intent(out) :: tl_ubar(LBi:UBi,LBj:UBj,:) + real(r8), intent(out) :: tl_vbar(LBi:UBi,LBj:UBj,:) + real(r8), intent(out) :: tl_zeta(LBi:UBi,LBj:UBj,:) +# endif +! +! Local variable declarations. +! + integer :: i, itrc, j, k + +# include "set_bounds.h" +! +!----------------------------------------------------------------------- +! Initial conditions for tangent linear 2D momentum (s/m) components. +!----------------------------------------------------------------------- +! + DO j=JstrT,JendT + DO i=IstrP,IendT + tl_ubar(i,j,kstp)=0.0_r8 + END DO + END DO + DO j=JstrP,JendT + DO i=IstrT,IendT + tl_vbar(i,j,kstp)=0.0_r8 + END DO + END DO +! +!----------------------------------------------------------------------- +! Initial conditions for tangent linear free-surface (1/m). +!----------------------------------------------------------------------- +! + DO j=JstrT,JendT + DO i=IstrT,IendT + tl_zeta(i,j,kstp)=0.0_r8 + END DO + END DO +# ifdef SOLVE3D +! +!----------------------------------------------------------------------- +! Initial conditions for tangent linear 3D momentum components (s/m). +!----------------------------------------------------------------------- +! + DO k=1,N(ng) + DO j=JstrT,JendT + DO i=IstrP,IendT + tl_u(i,j,k,nstp)=0.0_r8 + END DO + END DO + DO j=JstrP,JendT + DO i=IstrT,IendT + tl_v(i,j,k,nstp)=0.0_r8 + END DO + END DO + END DO +! +!----------------------------------------------------------------------- +! Initial conditions for tangent linear active tracers (1/Tunits). +!----------------------------------------------------------------------- +! + DO itrc=1,NAT + DO k=1,N(ng) + DO j=JstrT,JendT + DO i=IstrT,IendT + tl_t(i,j,k,nstp,itrc)=0.0_r8 + END DO + END DO + END DO + END DO +# endif +! + RETURN + END SUBROUTINE ana_TLMinitial_tile +#endif + +#ifdef ADJOINT +! +!*********************************************************************** + SUBROUTINE ana_ADMinitial_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & knew, & +# ifdef SOLVE3D + & nstp, & + & ad_u, ad_v, ad_t, & +# endif + & ad_ubar, ad_vbar, ad_zeta) +!*********************************************************************** +! + USE mod_param + USE mod_scalars +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS + integer, intent(in) :: knew +# ifdef SOLVE3D + integer, intent(in) :: nstp +# endif +! +# ifdef ASSUMED_SHAPE +# ifdef SOLVE3D + real(r8), intent(out) :: ad_u(LBi:,LBj:,:,:) + real(r8), intent(out) :: ad_v(LBi:,LBj:,:,:) + real(r8), intent(out) :: ad_t(LBi:,LBj:,:,:,:) +# endif + real(r8), intent(out) :: ad_ubar(LBi:,LBj:,:) + real(r8), intent(out) :: ad_vbar(LBi:,LBj:,:) + real(r8), intent(out) :: ad_zeta(LBi:,LBj:,:) +# else +# ifdef SOLVE3D + real(r8), intent(out) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2) + real(r8), intent(out) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2) + real(r8), intent(out) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng)) +# endif + real(r8), intent(out) :: ad_ubar(LBi:UBi,LBj:UBj,:) + real(r8), intent(out) :: ad_vbar(LBi:UBi,LBj:UBj,:) + real(r8), intent(out) :: ad_zeta(LBi:UBi,LBj:UBj,:) +# endif +! +! Local variable declarations. +! + integer :: i, itrc, j, k + +# include "set_bounds.h" +! +!----------------------------------------------------------------------- +! Initial conditions for adjoint 2D momentum (s/m) components. +!----------------------------------------------------------------------- +! + DO j=JstrT,JendT + DO i=IstrP,IendT + ad_ubar(i,j,knew)=0.0_r8 + END DO + END DO + DO j=JstrP,JendT + DO i=IstrT,IendT + ad_vbar(i,j,knew)=0.0_r8 + END DO + END DO +! +!----------------------------------------------------------------------- +! Initial conditions for adjoint free-surface (1/m). +!----------------------------------------------------------------------- +! + DO j=JstrT,JendT + DO i=IstrT,IendT + ad_zeta(i,j,knew)=0.0_r8 + END DO + END DO +# ifdef SOLVE3D +! +!----------------------------------------------------------------------- +! Initial conditions for adjoint 3D momentum components (s/m). +!----------------------------------------------------------------------- +! + DO k=1,N(ng) + DO j=JstrT,JendT + DO i=IstrP,IendT + ad_u(i,j,k,nstp)=0.0_r8 + END DO + END DO + DO j=JstrP,JendT + DO i=IstrT,IendT + ad_v(i,j,k,nstp)=0.0_r8 + END DO + END DO + END DO +! +!----------------------------------------------------------------------- +! Initial conditions for adjoint active tracers (1/Tunits). +!----------------------------------------------------------------------- +! + DO itrc=1,NAT + DO k=1,N(ng) + DO j=JstrT,JendT + DO i=IstrT,IendT + ad_t(i,j,k,nstp,itrc)=0.0_r8 + END DO + END DO + END DO + END DO +# endif +! + RETURN + END SUBROUTINE ana_ADMinitial_tile +#endif diff --git a/LAKE_ERIE/Forward/ana_pair.h b/LAKE_ERIE/Forward/ana_pair.h new file mode 100644 index 00000000..113fc436 --- /dev/null +++ b/LAKE_ERIE/Forward/ana_pair.h @@ -0,0 +1,114 @@ +!! + SUBROUTINE ana_pair (ng, tile, model) +! +!! git $Id$ +!!====================================================================== +!! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +!! Licensed under a MIT/X style license ! +!! See License_ROMS.txt ! +!======================================================================= +! ! +! This routine sets surface air pressure (mb) using an analytical ! +! expression. ! +! ! +!======================================================================= +! + USE mod_param + USE mod_forces + USE mod_ncparam +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model +! +! Local variable declarations. +! + character (len=*), parameter :: MyFile = & + & __FILE__ +! +#include "tile.h" +! + CALL ana_pair_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & FORCES(ng) % Pair) +! +! Set analytical header file name used. +! +#ifdef DISTRIBUTE + IF (Lanafile) THEN +#else + IF (Lanafile.and.(tile.eq.0)) THEN +#endif + ANANAME(17)=MyFile + END IF +! + RETURN + END SUBROUTINE ana_pair +! +!*********************************************************************** + SUBROUTINE ana_pair_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & Pair) +!*********************************************************************** +! + USE mod_param + USE mod_scalars +! + USE exchange_2d_mod, ONLY : exchange_r2d_tile +#ifdef DISTRIBUTE + USE mp_exchange_mod, ONLY : mp_exchange2d +#endif +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS +! +#ifdef ASSUMED_SHAPE + real(r8), intent(out) :: Pair(LBi:,LBj:) +#else + real(r8), intent(out) :: Pair(LBi:UBi,LBj:UBj) +#endif +! +! Local variable declarations. +! + integer :: i, j + +#include "set_bounds.h" +! +!----------------------------------------------------------------------- +! Set analytical surface air pressure (mb). +! (1 mb = 100 Pa = 1 hPa, 1 bar = 1.0e+5 N/m2 = 1.0e+5 dynes/cm2). +!----------------------------------------------------------------------- +! +#if defined LAKE_ERIE + DO j=JstrT,JendT + DO i=IstrT,IendT + Pair(i,j)=1013.48_r8 + END DO + END DO +#else + ana_pair.h: no values provided for Pair. +#endif +! +! Exchange boundary data. +! + IF (EWperiodic(ng).or.NSperiodic(ng)) THEN + CALL exchange_r2d_tile (ng, tile, & + & LBi, UBi, LBj, UBj, & + & Pair) + END IF + +#ifdef DISTRIBUTE + CALL mp_exchange2d (ng, tile, model, 1, & + & LBi, UBi, LBj, UBj, & + & NghostPoints, & + & EWperiodic(ng), NSperiodic(ng), & + & Pair) +#endif +! + RETURN + END SUBROUTINE ana_pair_tile diff --git a/LAKE_ERIE/Forward/ana_rain.h b/LAKE_ERIE/Forward/ana_rain.h new file mode 100644 index 00000000..9180d835 --- /dev/null +++ b/LAKE_ERIE/Forward/ana_rain.h @@ -0,0 +1,119 @@ +!! + SUBROUTINE ana_rain (ng, tile, model) +! +!! git $Id$ +!!====================================================================== +!! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +!! Licensed under a MIT/X style license ! +!! See License_ROMS.txt ! +!======================================================================= +! ! +! This routine sets precipitation rate (kg/m2/s) using an ! +! analytical expression. ! +! ! +!======================================================================= +! + USE mod_param + USE mod_forces + USE mod_ncparam +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model +! +! Local variable declarations. +! + character (len=*), parameter :: MyFile = & + & __FILE__ +! +#include "tile.h" +! + CALL ana_rain_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & FORCES(ng) % rain) +! +! Set analytical header file name used. +! +#ifdef DISTRIBUTE + IF (Lanafile) THEN +#else + IF (Lanafile.and.(tile.eq.0)) THEN +#endif + ANANAME(21)=MyFile + END IF +! + RETURN + END SUBROUTINE ana_rain +! +!*********************************************************************** + SUBROUTINE ana_rain_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & rain) +!*********************************************************************** +! + USE mod_param + USE mod_ncparam + USE mod_scalars +! + USE exchange_2d_mod, ONLY : exchange_r2d_tile +#ifdef DISTRIBUTE + USE mp_exchange_mod, ONLY : mp_exchange2d +#endif +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS +! +#ifdef ASSUMED_SHAPE + real(r8), intent(out) :: rain(LBi:,LBj:) +#else + real(r8), intent(out) :: rain(LBi:UBi,LBj:UBj) +#endif +! +! Local variable declarations. +! + integer :: i, j + +#include "set_bounds.h" +! +!----------------------------------------------------------------------- +! Set analytical precipitation rate (kg/m2/s). +!----------------------------------------------------------------------- +! +# ifdef LAKE_ERIE + DO j=JstrT,JendT + DO i=IstrT,IendT + rain(i,j)=2.45e-5_r8 - & + & 1.47e-5_r8*COS(2.0_r8*pi*tdays(ng)/365.25_r8) + END DO + END DO +# else + DO j=JstrT,JendT + DO i=IstrT,IendT + rain(i,j)=0.0_r8 + END DO + END DO +# endif +! +! Exchange boundary data. +! + IF (EWperiodic(ng).or.NSperiodic(ng)) THEN + CALL exchange_r2d_tile (ng, tile, & + & LBi, UBi, LBj, UBj, & + & rain) + END IF + +#ifdef DISTRIBUTE + CALL mp_exchange2d (ng, tile, model, 1, & + & LBi, UBi, LBj, UBj, & + & NghostPoints, & + & EWperiodic(ng), NSperiodic(ng), & + & rain) +#endif +! + RETURN + END SUBROUTINE ana_rain_tile diff --git a/LAKE_ERIE/Forward/ana_srflux.h b/LAKE_ERIE/Forward/ana_srflux.h new file mode 100644 index 00000000..af986165 --- /dev/null +++ b/LAKE_ERIE/Forward/ana_srflux.h @@ -0,0 +1,291 @@ +!! + SUBROUTINE ana_srflux (ng, tile, model) +! +!! git $Id$ +!!====================================================================== +!! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +!! Licensed under a MIT/X style license ! +!! See License_ROMS.txt ! +!======================================================================= +! ! +! This subroutine sets kinematic surface solar shortwave radiation ! +! flux "srflx" (degC m/s) using an analytical expression. ! +! ! +!======================================================================= +! + USE mod_param + USE mod_forces + USE mod_grid + USE mod_ncparam +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model +! +! Local variable declarations. +! + character (len=*), parameter :: MyFile = & + & __FILE__ +! +#include "tile.h" +! + CALL ana_srflux_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & GRID(ng) % lonr, & + & GRID(ng) % latr, & +#ifdef ALBEDO + & FORCES(ng) % cloud, & + & FORCES(ng) % Hair, & + & FORCES(ng) % Tair, & + & FORCES(ng) % Pair, & +#endif + & FORCES(ng) % srflx) +! +! Set analytical header file name used. +! +#ifdef DISTRIBUTE + IF (Lanafile) THEN +#else + IF (Lanafile.and.(tile.eq.0)) THEN +#endif + ANANAME(27)=MyFile + END IF +! + RETURN + END SUBROUTINE ana_srflux +! +!*********************************************************************** + SUBROUTINE ana_srflux_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & lonr, latr, & +#ifdef ALBEDO + & cloud, Hair, Tair, Pair, & +#endif + & srflx) +!*********************************************************************** +! + USE mod_param + USE mod_scalars +! + USE dateclock_mod, ONLY : caldate + USE exchange_2d_mod, ONLY : exchange_r2d_tile +#ifdef DISTRIBUTE + USE mp_exchange_mod, ONLY : mp_exchange2d +#endif +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS +! +#ifdef ASSUMED_SHAPE + real(r8), intent(in) :: lonr(LBi:,LBj:) + real(r8), intent(in) :: latr(LBi:,LBj:) +# ifdef ALBEDO + real(r8), intent(in) :: cloud(LBi:,LBj:) + real(r8), intent(in) :: Hair(LBi:,LBj:) + real(r8), intent(in) :: Tair(LBi:,LBj:) + real(r8), intent(in) :: Pair(LBi:,LBj:) +# endif + real(r8), intent(out) :: srflx(LBi:,LBj:) +#else + real(r8), intent(in) :: lonr(LBi:UBi,LBj:UBj) + real(r8), intent(in) :: latr(LBi:UBi,LBj:UBj) +# ifdef ALBEDO + real(r8), intent(in) :: cloud(LBi:UBi,LBj:UBj) + real(r8), intent(in) :: Hair(LBi:UBi,LBj:UBj) + real(r8), intent(in) :: Tair(LBi:UBi,LBj:UBj) + real(r8), intent(in) :: Pair(LBi:UBi,LBj:UBj) +# endif + real(r8), intent(out) :: srflx(LBi:UBi,LBj:UBj) +#endif +! +! Local variable declarations. +! + integer :: i, j +! +#if defined ALBEDO || defined DIURNAL_SRFLUX + real(dp) :: hour, yday + real(r8) :: Dangle, Hangle, LatRad, LonRad + real(r8) :: cff1, cff2 +# ifdef ALBEDO + real(r8) :: Rsolar, e_sat, vap_p, zenith +# endif +#endif + real(r8) :: cff +! + real(r8), parameter :: alb_w=0.06_r8 + +#include "set_bounds.h" + +#if defined ALBEDO || defined DIURNAL_SRFLUX +! +!----------------------------------------------------------------------- +! Compute shortwave radiation (degC m/s): +! +! ALBEDO option: Compute shortwave radiation flux using the Laevastu +! cloud correction to the Zillman equation for cloudless +! radiation (Parkinson and Washington 1979, JGR, 84, 311-337). Notice +! that flux is scaled from W/m2 to degC m/s by dividing by (rho0*Cp). +! +! DIURNAL_SRFLUX option: Modulate shortwave radiation SRFLX (which +! read and interpolated elsewhere) by the local +! diurnal cycle (a function of longitude, latitude and day-of-year). +! This option is provided for cases where SRFLX computed by SET_DATA is +! an average over >= 24 hours. For "diurnal_srflux" to work ana_srflux +! must be undefined. If you want a strictly analytical diurnal cycle +! enter it explicitly at the end of this subroutine or use the "albedo" +! option. +! +! For a review of shortwave radiation formulations check: +! +! Niemela, S., P. Raisanen, and H. Savijarvi, 2001: Comparison of +! surface radiative flux parameterizations, Part II, Shortwave +! radiation, Atmos. Res., 58, 141-154. +! +!----------------------------------------------------------------------- +! +! Get time clock day-of-year and hour. +! + CALL caldate (tdays(ng), yd_dp=yday, h_dp=hour) +! +! Estimate solar declination angle (radians). +! + Dangle=23.44_dp*COS((172.0_dp-yday)*2.0_dp*pi/365.2425_dp) + Dangle=Dangle*deg2rad +! +! Compute hour angle (radians). +! + Hangle=(12.0_r8-hour)*pi/12.0_r8 +! +# ifdef ALBEDO + Rsolar=Csolar/(rho0*Cp) +# endif + DO j=JstrT,JendT + DO i=IstrT,IendT +! +! Local daylight, GMT time zone, is a function of the declination +! (Dangle) and hour angle adjusted for the local meridian +! (Hangle-lonr(i,j)*deg2rad). +! +# ifdef LAKE_ERIE + LatRad=42.0_r8*deg2rad +# else + LatRad=latr(i,j)*deg2rad +# endif + cff1=SIN(LatRad)*SIN(Dangle) + cff2=COS(LatRad)*COS(Dangle) +# if defined ALBEDO +! +! Estimate variation in optical thickness of the atmosphere over +! the course of a day under cloudless skies (Zillman, 1972). To +! obtain incoming shortwave radiation multiply by (1.0-0.6*c**3), +! where c is the fractional cloud cover. +! +! The equation for saturation vapor pressure is from Gill (Atmosphere- +! Ocean Dynamics, pp 606). +!! +!! If specific humidity in kg/kg. +!! +!! vap_p=Pair(i,j)*Hair(i,j)/(0.62197_r8+0.378_r8*Hair(i,j)) +!! +! + srflx(i,j)=0.0_r8 + LatRad=latr(i,j)*deg2rad + zenith=cff1+cff2*COS(Hangle-LonRad) + IF (zenith.gt.0.0_r8) THEN + cff=(0.7859_r8+0.03477_r8*Tair(i,j))/ & + & (1.0_r8+0.00412_r8*Tair(i,j)) + e_sat=10.0_r8**cff ! saturation vapor pressure (hPa=mbar) + vap_p=e_sat*Hair(i,j) ! water vapor pressure (hPa=mbar) + srflx(i,j)=Rsolar*zenith*zenith* & + & (1.0_r8-0.6_r8*cloud(i,j)**3)/ & + & ((zenith+2.7_r8)*vap_p*1.0E-3_r8+ & + & 1.085_r8*zenith+0.1_r8) + END IF +! +! Add correction for ocean albedo. Notice that the correction is not +! needed below because it is assumed that the input (>=24h-average) +! and 'srflx' is NET downward shortwave radiation. +! + srflx(i,j)=(1.0_r8-alb_w)*srflx(i,j) + +# elif defined DIURNAL_SRFLUX +! +! SRFLX is reset on each time step in subroutine SET_DATA which +! interpolates values in the forcing file to the current date. +! This DIURNAL_SRFLUX option is provided so that SRFLX values +! corresponding to a greater or equal daily average can be modulated +! by the local length of day to produce a diurnal cycle with the +! same daily average as the original data. This approach assumes +! the net effect of clouds is incorporated into the SRFLX data. +! +! Normalization = (1/2*pi)*INTEGRAL{ABS(a+b*COS(t)) dt} from 0 to 2*pi +! = (a*ARCCOS(-a/b)+SQRT(b**2-a**2))/pi for |a| < |b| +! + IF (ABS(cff1).gt.ABS(cff2)) THEN + IF (cff1*cff2.gt.0.0_r8) THEN + cff=cff1 ! All day case + srflx(i,j)=MAX(0.0_r8, & + & srflx(i,j)/cff* & + & (cff1+cff2*COS(Hangle-lonr(i,j)*deg2rad))) + ELSE + srflx(i,j)=0.0_r8 ! All night case + END IF + ELSE + cff=(cff1*ACOS(-cff1/cff2)+SQRT(cff2*cff2-cff1*cff1))/pi + srflx(i,j)=MAX(0.0_r8, & + & srflx(i,j)/cff* & + & (cff1+cff2*COS(Hangle-lonr(i,j)*deg2rad))) + END IF +# endif + END DO + END DO +#else +! +!----------------------------------------------------------------------- +! Set incoming solar shortwave radiation (degC m/s). Usually, the +! shortwave radiation from input files is Watts/m2 and then converted +! to degC m/s by multiplying by conversion factor 1/(rho0*Cp) during +! reading (Fscale). However, we are already inside ROMS kernel here +! and all the fluxes are kinematic so shortwave radiation units need +! to be degC m/s. +!----------------------------------------------------------------------- +! + cff=1.0_r8/(rho0*cp) +# if defined LAKE_ERIE + DO j=JstrT,JendT + DO i=IstrT,IendT + srflx(i,j)=cff*150.0_r8 + END DO + END DO +# else + DO j=JstrT,JendT + DO i=IstrT,IendT + srflx(i,j)=0.0_r8 + END DO + END DO +# endif +#endif +! +! Exchange boundary data. +! + IF (EWperiodic(ng).or.NSperiodic(ng)) THEN + CALL exchange_r2d_tile (ng, tile, & + & LBi, UBi, LBj, UBj, & + & srflx) + END IF + +#ifdef DISTRIBUTE + CALL mp_exchange2d (ng, tile, model, 1, & + & LBi, UBi, LBj, UBj, & + & NghostPoints, & + & EWperiodic(ng), NSperiodic(ng), & + & srflx) +#endif +! + RETURN + END SUBROUTINE ana_srflux_tile diff --git a/LAKE_ERIE/Forward/ana_tair.h b/LAKE_ERIE/Forward/ana_tair.h new file mode 100644 index 00000000..dd4bc570 --- /dev/null +++ b/LAKE_ERIE/Forward/ana_tair.h @@ -0,0 +1,114 @@ +!! + SUBROUTINE ana_tair (ng, tile, model) +! +!! git $Id$ +!!====================================================================== +!! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +!! Licensed under a MIT/X style license ! +!! See License_ROMS.txt ! +!======================================================================= +! ! +! This routine sets surface air temperature (degC) using an ! +! analytical expression. ! +! ! +!======================================================================= +! + USE mod_param + USE mod_forces + USE mod_ncparam +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model +! +! Local variable declarations. +! + character (len=*), parameter :: MyFile = & + & __FILE__ +! +#include "tile.h" +! + CALL ana_tair_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & FORCES(ng) % Tair) +! +! Set analytical header file name used. +! +#ifdef DISTRIBUTE + IF (Lanafile) THEN +#else + IF (Lanafile.and.(tile.eq.0)) THEN +#endif + ANANAME(32)=MyFile + END IF +! + RETURN + END SUBROUTINE ana_tair +! +!*********************************************************************** + SUBROUTINE ana_tair_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & + & Tair) +!*********************************************************************** +! + USE mod_param + USE mod_scalars +! + USE exchange_2d_mod, ONLY : exchange_r2d_tile +#ifdef DISTRIBUTE + USE mp_exchange_mod, ONLY : mp_exchange2d +#endif +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS +! +#ifdef ASSUMED_SHAPE + real(r8), intent(out) :: Tair(LBi:,LBj:) +#else + real(r8), intent(out) :: Tair(LBi:UBi,LBj:UBj) +#endif +! +! Local variable declarations. +! + integer :: i, j + +#include "set_bounds.h" +! +!----------------------------------------------------------------------- +! Set analytical surface air temperature (degC). +!----------------------------------------------------------------------- +! +#if defined LAKE_ERIE + DO j=JstrT,JendT + DO i=IstrT,IendT + Tair(i,j)=5.0_r8+15.0_r8*COS(2.0_r8*pi*(tdays(ng)-220.0_r8)/ & + & 365.25_r8) + END DO + END DO +#else + ana_tair.h: no values provided for Tair. +#endif +! +! Exchange boundary data. +! + IF (EWperiodic(ng).or.NSperiodic(ng)) THEN + CALL exchange_r2d_tile (ng, tile, & + & LBi, UBi, LBj, UBj, & + & Tair) + END IF + +#ifdef DISTRIBUTE + CALL mp_exchange2d (ng, tile, model, 1, & + & LBi, UBi, LBj, UBj, & + & NghostPoints, & + & EWperiodic(ng), NSperiodic(ng), & + & Tair) +#endif +! + RETURN + END SUBROUTINE ana_tair_tile diff --git a/LAKE_ERIE/Forward/ana_winds.h b/LAKE_ERIE/Forward/ana_winds.h new file mode 100644 index 00000000..64eb9d4a --- /dev/null +++ b/LAKE_ERIE/Forward/ana_winds.h @@ -0,0 +1,152 @@ +!! + SUBROUTINE ana_winds (ng, tile, model) +! +!! git $Id$ +!!====================================================================== +!! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +!! Licensed under a MIT/X style license ! +!! See License_ROMS.txt ! +!======================================================================= +! ! +! This routine sets surface wind components using an analytical ! +! expression. ! +! ! +!======================================================================= +! + USE mod_param + USE mod_forces + USE mod_grid + USE mod_ncparam +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model +! +! Local variable declarations. +! + character (len=*), parameter :: MyFile = & + & __FILE__ +! +#include "tile.h" +! + CALL ana_winds_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & +#ifdef SPHERICAL + & GRID(ng) % lonr, & + & GRID(ng) % latr, & +#else + & GRID(ng) % xr, & + & GRID(ng) % yr, & +#endif + & FORCES(ng) % Uwind, & + & FORCES(ng) % Vwind) +! +! Set analytical header file name used. +! +#ifdef DISTRIBUTE + IF (Lanafile) THEN +#else + IF (Lanafile.and.(tile.eq.0)) THEN +#endif + ANANAME(36)=MyFile + END IF +! + RETURN + END SUBROUTINE ana_winds +! +!*********************************************************************** + SUBROUTINE ana_winds_tile (ng, tile, model, & + & LBi, UBi, LBj, UBj, & + & IminS, ImaxS, JminS, JmaxS, & +#ifdef SPHERICAL + & lonr, latr, & +#else + & xr, yr, & +#endif + & Uwind, Vwind) +!*********************************************************************** +! + USE mod_param + USE mod_scalars +! + USE exchange_2d_mod, ONLY : exchange_r2d_tile +#ifdef DISTRIBUTE + USE mp_exchange_mod, ONLY : mp_exchange2d +#endif +! +! Imported variable declarations. +! + integer, intent(in) :: ng, tile, model + integer, intent(in) :: LBi, UBi, LBj, UBj + integer, intent(in) :: IminS, ImaxS, JminS, JmaxS +! +#ifdef ASSUMED_SHAPE +# ifdef SPHERICAL + real(r8), intent(in) :: lonr(LBi:,LBj:) + real(r8), intent(in) :: latr(LBi:,LBj:) +# else + real(r8), intent(in) :: xr(LBi:,LBj:) + real(r8), intent(in) :: yr(LBi:,LBj:) +# endif + real(r8), intent(out) :: Uwind(LBi:,LBj:) + real(r8), intent(out) :: Vwind(LBi:,LBj:) +#else +# ifdef SPHERICAL + real(r8), intent(in) :: lonr(LBi:UBi,LBj:UBj) + real(r8), intent(in) :: latr(LBi:UBi,LBj:UBj) +# else + real(r8), intent(in) :: xr(LBi:UBi,LBj:UBj) + real(r8), intent(in) :: yr(LBi:UBi,LBj:UBj) +# endif + real(r8), intent(out) :: Uwind(LBi:UBi,LBj:UBj) + real(r8), intent(out) :: Vwind(LBi:UBi,LBj:UBj) +#endif +! +! Local variable declarations. +! + integer :: i, j +! + real(r8) :: Wdir, Wmag, cff, u_wind, v_wind + +#include "set_bounds.h" +! +!----------------------------------------------------------------------- +! Set surface wind components (m/s) at RHO-points. +!----------------------------------------------------------------------- +! +#if defined LAKE_ERIE + u_wind=0.0_r8 + v_wind=(5.0_r8+2.0_r8*COS(tdays(ng)*2.0_r8*pi/365.25_r8))* & + & COS(tdays(ng)*0.5_r8) + DO j=JstrT,JendT + DO i=IstrT,IendT + Uwind(i,j)=u_wind + Vwind(i,j)=v_wind + END DO + END DO +#else + ana_winds.h: no values provided for Uwind and Vwind. +#endif +! +! Exchange boundary data. +! + IF (EWperiodic(ng).or.NSperiodic(ng)) THEN + CALL exchange_r2d_tile (ng, tile, & + & LBi, UBi, LBj, UBj, & + & Uwind) + CALL exchange_r2d_tile (ng, tile, & + & LBi, UBi, LBj, UBj, & + & Vwind) + END IF + +#ifdef DISTRIBUTE + CALL mp_exchange2d (ng, tile, model, 2, & + & LBi, UBi, LBj, UBj, & + & NghostPoints, & + & EWperiodic(ng), NSperiodic(ng), & + & Uwind, Vwind) +#endif +! + RETURN + END SUBROUTINE ana_winds_tile diff --git a/LAKE_ERIE/Forward/build_roms.csh b/LAKE_ERIE/Forward/build_roms.csh new file mode 100755 index 00000000..0212f2cc --- /dev/null +++ b/LAKE_ERIE/Forward/build_roms.csh @@ -0,0 +1,435 @@ +#!/bin/csh -f +# +# git $Id$ +#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +# Copyright (c) 2002-2024 The ROMS/TOMS Group ::: +# Licensed under a MIT/X style license ::: +# See License_ROMS.md ::: +#::::::::::::::::::::::::::::::::::::::::::::::::::::: Hernan G. Arango ::: +# ::: +# ROMS Compiling CSH Script ::: +# ::: +# Script to compile an user application where the application-specific ::: +# files are kept separate from the ROMS source code. ::: +# ::: +# Q: How/why does this script work? ::: +# ::: +# A: The ROMS makefile configures user-defined options with a set of ::: +# flags such as ROMS_APPLICATION. Browse the makefile to see these. ::: +# If an option in the makefile uses the syntax ?= in setting the ::: +# default, this means that make will check whether an environment ::: +# variable by that name is set in the shell that calls make. If so ::: +# the environment variable value overrides the default (and the ::: +# user need not maintain separate makefiles, or frequently edit ::: +# the makefile, to run separate applications). ::: +# ::: +# Usage: ::: +# ::: +# ./build_roms.csh [options] ::: +# ::: +# Options: ::: +# ::: +# -j [N] Compile in parallel using N CPUs ::: +# omit argument for all available CPUs ::: +# ::: +# -b Compile a specific ROMS GitHub branch ::: +# ::: +# build_roms.csh -j 5 -b feature/kernel ::: +# ::: +# -p macro Prints any Makefile macro value. For example, ::: +# ::: +# build_roms.csh -p FFLAGS ::: +# ::: +# -noclean Do not clean already compiled objects ::: +# ::: +# Notice that sometimes the parallel compilation fail to find MPI ::: +# include file "mpif.h". ::: +# ::: +# The branch option -b is only possible for ROMS source code from ::: +# https://github.com/myroms. Such versions are under development ::: +# and targeted to advanced users, superusers, and beta testers. ::: +# Regular and novice users must use the default 'develop' branch. ::: +# ::: +#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +setenv which_MPI openmpi # default, overwritten below + +set parallel = 0 +set clean = 1 +set dprint = 0 +set branch = 0 + +set command = "build_roms.csh $argv[*]" + +set separator = `perl -e "print '<>' x 50;"` + +setenv MY_CPP_FLAGS '' + +while ( ($#argv) > 0 ) + switch ($1) + case "-noclean" + shift + set clean = 0 + breaksw + + case "-p" + shift + set clean = 0 + set dprint = 1 + set debug = "print-$1" + shift + breaksw + + case "-j" + shift + set parallel = 1 + if (`echo $1 | grep '^[0-9]\+$'` != "" ) then + set NCPUS = "-j $1" + shift + else + set NCPUS = "-j" + endif + breaksw + + case "-b" + shift + set branch = 1 + set branch_name = `echo $1 | grep -v '^-'` + if ( "$branch_name" == "" ) then + echo "Please enter a branch name." + exit 1 + endif + shift + breaksw + + case "-*": + echo "" + echo "${separator}" + echo "$0 : Unknown option [ $1 ]" + echo "" + echo "Available Options:" + echo "" + echo "-j [N] Compile in parallel using N CPUs" + echo " omit argument for all avaliable CPUs" + echo "" + echo "-b branch_name Compile specific ROMS GitHub branch name" + echo " For example: build_roms.csh -b feature/kernel" + echo "" + echo "-p macro Prints any Makefile macro value" + echo " For example: build_roms.csh -p FFLAGS" + echo "" + echo "-noclean Do not clean already compiled objects" + echo "${separator}" + echo "" + exit 1 + breaksw + + endsw +end + +# Set the CPP option defining the particular application. This will +# determine the name of the ".h" header file with the application +# CPP definitions. + +setenv ROMS_APPLICATION LAKE_ERIE + +# Set a local environmental variable to define the path to the directories +# where the ROMS source code is located (MY_ROOT_DIR), and this project's +# configuration and files are kept (MY_PROJECT_DIR). Notice that if the +# User sets the ROMS_ROOT_DIR environment variable in their computer logging +# script describing the location from where the ROMS source code was cloned +# or downloaded, it uses that value. + +if ($?ROMS_ROOT_DIR) then + setenv MY_ROOT_DIR ${ROMS_ROOT_DIR} +else + setenv MY_ROOT_DIR ${HOME}/ocean/repository/git +endif + +setenv MY_PROJECT_DIR ${PWD} + +# The path to the user's local current ROMS source code. +# +# If downloading ROMS locally, this would be the user's Working Copy Path. +# One advantage of maintaining your source code copy is that when working +# simultaneously on multiple machines (e.g., a local workstation, a local +# cluster, and a remote supercomputer), you can update with the latest ROMS +# release and always get an up-to-date customized source on each machine. +# This script allows for differing paths to the code and inputs on other +# computers. + + setenv MY_ROMS_SRC ${MY_ROOT_DIR}/roms + +# Set path of the directory containing makefile configuration (*.mk) files. +# The user has the option to specify a customized version of these files +# in a different directory than the one distributed with the source code, +# ${MY_ROMS_SRC}/Compilers. If this is the case, you need to keep these +# configurations files up-to-date. + +#setenv COMPILERS ${MY_ROMS_SRC}/Compilers + setenv COMPILERS ${HOME}/Compilers/ROMS + +#-------------------------------------------------------------------------- +# Set tunable CPP options. +#-------------------------------------------------------------------------- +# +# Sometimes it is desirable to activate one or more CPP options to run +# different variants of the same application without modifying its header +# file. If this is the case, specify each options here using the -D syntax. +# Notice also that you need to use shell's quoting syntax to enclose the +# definition. Both single or double quotes work. For example, +# +# setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DAVERAGES" +# setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DDEBUGGING" +# +# can be used to write time-averaged fields. Notice that you can have as +# many definitions as you want by appending values. + + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DAVERAGES" + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DSTATIONS" + + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DANA_INITIAL" + +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DALBEDO" +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DANA_CLOUD" +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DANA_HUMIDITY" +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DANA_PAIR" +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DANA_RAIN" +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DANA_SRFLUX" +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DANA_TAIR" + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DANA_WINDS" + + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DICE_MODEL" + + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DNONLIN_EOS" + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DOMEGA_IMPLICIT" + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DATM_PRESS" + + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DSTEP2D_FB_AB3_AM4" +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DGATHER_SENDRECV" +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DSCATTER_BCAST" + + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DBULK_FLUXES" + +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DGLS_MIXING" + setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DLMD_MIXING" + +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DDIAGNOSTIC_TS" +#setenv MY_CPP_FLAGS "${MY_CPP_FLAGS} -DDIAGNOSTIC_UV" + +#-------------------------------------------------------------------------- +# Compiler options. +#-------------------------------------------------------------------------- +# +# Other user defined environmental variables. See the ROMS makefile for +# details on other options the user might want to set here. Be sure to +# leave the switches meant to be off set to an empty string or commented +# out. Any string value (including off) will evaluate to TRUE in +# conditional if-statements. + + setenv USE_MPI on # distributed-memory parallelism + setenv USE_MPIF90 on # compile with mpif90 script +#setenv which_MPI intel # compile with mpiifort library +#setenv which_MPI mpich # compile with MPICH library +#setenv which_MPI mpich2 # compile with MPICH2 library +#setenv which_MPI mvapich2 # compile with MVAPICH2 library + setenv which_MPI openmpi # compile with OpenMPI library + +#setenv USE_OpenMP on # shared-memory parallelism + + setenv FORT ifort +#setenv FORT gfortran +#setenv FORT pgi + +#setenv USE_DEBUG on # use Fortran debugging flags + setenv USE_LARGE on # activate 64-bit compilation + +#-------------------------------------------------------------------------- +# Building the ROMS executable using the shared library is not recommended +# because it requires keeping track of the matching libROMS.{so|dylib} +# which is located in the Build_roms or Build_romsG directory and will be +# lost and/or replaced with each new build. The option to build the shared +# version of libROMS was introduced for use in model coupling systems. +#-------------------------------------------------------------------------- + +#setenv SHARED on # build libROMS.{so|dylib} + setenv STATIC on # build libROMS.a + + setenv EXEC on # build roms{G|M|O|S} executable + +# ROMS I/O choices and combinations. A more complete description of the +# available options can be found in the wiki (https://myroms.org/wiki/IO). +# Most users will want to enable at least USE_NETCDF4 because that will +# instruct the ROMS build system to use nf-config to determine the +# necessary libraries and paths to link into the ROMS executable. + + setenv USE_NETCDF4 on # compile with NetCDF-4 library +#setenv USE_PARALLEL_IO on # Parallel I/O with NetCDF-4/HDF5 +#setenv USE_PIO on # Parallel I/O with PIO library +#setenv USE_SCORPIO on # Parallel I/O with SCORPIO library + +# If any of the coupling component use the HDF5 Fortran API for primary +# I/O, we need to compile the main driver with the HDF5 library. + +#setenv USE_HDF5 on # compile with HDF5 library + +#-------------------------------------------------------------------------- +# If coupling Earth Systems Models (ESM), set the location of the ESM +# component libraries and modules. +#-------------------------------------------------------------------------- + +source ${MY_ROMS_SRC}/ESM/esm_libs.csh ${MY_ROMS_SRC}/ESM/esm_libs.csh + +#-------------------------------------------------------------------------- +# If applicable, use my specified library paths. +#-------------------------------------------------------------------------- + + setenv USE_MY_LIBS no # use system default library paths +#setenv USE_MY_LIBS yes # use my customized library paths + +set MY_PATHS = ${COMPILERS}/my_build_paths.csh + +if ($USE_MY_LIBS == 'yes') then + source ${MY_PATHS} ${MY_PATHS} +endif + +#-------------------------------------------------------------------------- +# The rest of this script sets the path to the users header file and +# analytical source files, if any. See the templates in User/Functionals. +#-------------------------------------------------------------------------- +# +# If applicable, use the MY_ANALYTICAL_DIR directory to place your +# customized biology model header file (like fennel.h, nemuro.h, ecosim.h, +# etc). + + setenv MY_HEADER_DIR ${MY_PROJECT_DIR} + + setenv MY_ANALYTICAL_DIR ${MY_PROJECT_DIR} + +# Put the binary to execute in the following directory. + + setenv BINDIR ${MY_PROJECT_DIR} + + echo "" + echo "${separator}" + +# Stop if activating both MPI and OpenMP at the same time. + +if ( ${?USE_MPI} & ${?USE_OpenMP} ) then + echo "" + echo "You cannot activate USE_MPI and USE_OpenMP at the same time!" + exit 1 +endif + +# Put the f90 files in a project specific Build directory to avoid conflict +# with other projects. + +if ($?USE_DEBUG) then + setenv BUILD_DIR ${MY_PROJECT_DIR}/Build_romsG +else + if ($?USE_OpenMP) then + setenv BUILD_DIR ${MY_PROJECT_DIR}/Build_romsO + else if ($?USE_MPI) then + setenv BUILD_DIR ${MY_PROJECT_DIR}/Build_romsM + else + setenv BUILD_DIR ${MY_PROJECT_DIR}/Build_roms + endif +endif + +# For backward compatibility, set deprecated SCRATCH_DIR to compile +# older released versions of ROMS. + +setenv SCRATCH_DIR ${BUILD_DIR} + +# If necessary, create ROMS build directory. + +if ( ! -d $BUILD_DIR ) then + echo "" + echo "Creating ROMS build directory: ${BUILD_DIR}" + echo "" + mkdir $BUILD_DIR +endif + +# Go to the users source directory to compile. The options set above will +# pick up the application-specific code from the appropriate place. + +if ( $branch == 1 ) then + + # Check out requested branch from ROMS GitHub. + + if ( ! -d ${MY_PROJECT_DIR}/src ) then + echo "" + echo "Downloading ROMS source code from GitHub: https://www.github.com/myroms" + echo "" + git clone https://www.github.com/myroms/roms.git src + endif + echo "" + echo "Checking out ROMS GitHub branch: $branch_name" + echo "" + cd src + git checkout $branch_name + + # If we are using the COMPILERS from the ROMS source code + # overide the value set above + + if ( ${COMPILERS} =~ ${MY_ROMS_SRC}* ) then + setenv COMPILERS ${MY_PROJECT_DIR}/src/Compilers + endif + setenv MY_ROMS_SRC ${MY_PROJECT_DIR}/src + +else + echo "" + echo "Using ROMS source code from: ${MY_ROMS_SRC}" + echo "" + cd ${MY_ROMS_SRC} +endif + +#-------------------------------------------------------------------------- +# Compile. +#-------------------------------------------------------------------------- + +# Remove build directory. + +if ( $clean == 1 ) then + echo "" + echo "Cleaning ROMS build directory: ${BUILD_DIR}" + echo "" + make clean +endif + +# Compile (the binary will go to BINDIR set above). + +if ( $dprint == 1 ) then + make $debug +else + echo "" + echo "Compiling ROMS source code:" + echo "" + if ( $parallel == 1 ) then + make $NCPUS + else + make + endif + + set HEADER = `echo ${ROMS_APPLICATION} | tr '[:upper:]' '[:lower:]'`.h + + echo "" + echo "${separator}" + echo "GNU Build script command: ${command}" + echo "ROMS source directory: ${MY_ROMS_SRC}" + echo "ROMS header file: ${MY_HEADER_DIR}/${HEADER}" + echo "ROMS build directory: ${BUILD_DIR}" + if ( $branch == 1 ) then + echo "ROMS downloaded from: https://github.com/myroms/roms.git" + echo "ROMS compiled branch: $branch_name" + endif + echo "ROMS Application: ${ROMS_APPLICATION}" + set FFLAGS = `make print-FFLAGS | cut -d " " -f 3-` + echo "Fortran compiler: ${FORT}" + echo "Fortran flags: ${FFLAGS}" + if ($?MY_CPP_FLAGS) then + echo "Added CPP Options: ${MY_CPP_FLAGS}" + endif + echo "${separator}" + echo "" +endif diff --git a/LAKE_ERIE/Forward/lake_erie.h b/LAKE_ERIE/Forward/lake_erie.h new file mode 100644 index 00000000..61bad22a --- /dev/null +++ b/LAKE_ERIE/Forward/lake_erie.h @@ -0,0 +1,91 @@ +/* +** git $Id$ +******************************************************************************* +** Copyright (c) 2002-2024 The ROMS/TOMS Group ** +** Licensed under a MIT/X style license ** +** See License_ROMS.md ** +******************************************************************************* +** +** Options for Lake Erie Test. +** +** Application flag: LAKE_ERIE +** Input script: roms_lake_erie_1000m.in +** roms_lake_erie_1200m.in +*/ + +#define UV_ADV +#define UV_U3HADVECTION +#define UV_COR +#define UV_LDRAG +#define UV_VIS2 +#define MIX_S_UV +#define DJ_GRADPS + +#define TS_DIF2 +#define MIX_GEO_TS +#define SALINITY +#define SOLAR_SOURCE + +#define SOLVE3D +#define CURVILINEAR +#define MASKING + +#define ANA_BTFLUX +#define ANA_BSFLUX + +#ifdef ICE_MODEL +# define ICE_THERMO +# define ICE_MK +# define ICE_ALBEDO +# define ICE_ALB_EC92 +# define ICE_MOMENTUM +# define ICE_MOM_BULK +# define ICE_EVP +# define ICE_ADVECT +# define ICE_SMOLAR +# define ICE_UPWIND +# define ICE_CONVSNOW +#endif + +#ifdef BULK_FLUXES +# ifdef ICE_MODEL +# define ICE_BULK_FLUXES +# endif +# define EMINUSP +# define SHORTWAVE +#endif + +#if defined GLS_MIXING || defined MY25_MIXING +# define KANTHA_CLAYSON +# define N2S2_HORAVG +# define RI_SPLINES +#endif + +#ifdef LMD_MIXING +# define LMD_RIMIX +# define LMD_CONVEC +# define LMD_SKPP +# define LMD_BKPP +# define LMD_NONLOCAL +# define RI_SPLINES +#endif + +#if defined BIO_FENNEL || defined ECOSIM || \ + defined NPZD_POWELL || defined NEMURO +# define ANA_BIOLOGY +# define ANA_SPFLUX +# define ANA_BPFLUX +# define ANA_SRFLUX +#endif + +#if defined NEMURO +# define HOLLING_GRAZING +# undef IVLEV_EXPLICIT +#endif + +#ifdef BIO_FENNEL +# define CARBON +# define DENITRIFICATION +# define BIO_SEDIMENT +# define DIAGNOSTICS_BIO +#endif diff --git a/LAKE_ERIE/Forward/lake_erie.in b/LAKE_ERIE/Forward/lake_erie.in new file mode 100644 index 00000000..64469057 --- /dev/null +++ b/LAKE_ERIE/Forward/lake_erie.in @@ -0,0 +1,344 @@ +! +! Sea-Ice Model Input Parameters +! +!git $Id$ +!========================================================= Hernan G. Arango === +! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +! Licensed under a MIT/X style license ! +! See License_ROMS.txt ! +!============================================================================== +! ! +! Input parameters can be entered in ANY order, provided that the parameter ! +! KEYWORD (usually, upper case) is typed correctly followed by "=" or "==" ! +! symbols. Any comment lines are allowed and must begin with an exclamation ! +! mark (!) in column one. Comments may appear to the right of a parameter ! +! specification to improve documentation. Comments are ignored during ! +! reading. Blank lines are also allowed and ignored. Continuation lines in ! +! a parameter specification are allowed if preceded by a backslash (\). In ! +! some instances, more than one value is required for a parameter. If fewer ! +! values are provided, the last value is assigned for the entire parameter ! +! array. The multiplication symbol (*), without blank spaces in between, ! +! is allowed for a parameter specification. For example, in two grids nested ! +! application: ! +! ! +! AKT_BAK == 2*1.0d-6 2*5.0d-6 ! m2/s ! +! ! +! indicates that the first two entries of array AKT_BAK, in fortran column- ! +! major order, will have the same value of "1.0d-6" for grid 1, whereas the ! +! next two entries will have the same value of "5.0d-6" for grid 2. ! +! ! +! In multiple levels of nesting or multiple connected domains step-ups, ! +! "Ngrids" entries are expected for some of these parameters. In such case, ! +! the order of the entries for a parameter is critical. It must follow the ! +! same order (1:Ngrids) as in the state variable declaration. The USER may ! +! follow the above guidelines for specifying his/her values. These parameters ! +! are marked by "==" plural symbol after the KEYWORD. ! +! ! +!============================================================================== +! +! Number of elastic time steps per viscous step in Elastic-Viscous-Plastic +! (EVP) rheology equations. + + nEVP == 60 + +! Density parameters [kg/m3]. + + AirRho == 1.267d0 ! air density + IceRho == 900.d0 ! sea ice density + SnowDryRho == 330.d0 ! dry snow density + SnowWetRho == 450.d0 ! wet snow density + +! Bulk drag coefficients [nondimensional]. + + Cd_ai == 3.0d-3 ! Air-Ice drag + Cd_io == 7.5d-3 ! Ice-Ocean drag + +! Ice strength exponential weighting coefficient on concentration +! (nondimensional) + + Astrength == 20.d0 + +! Minimum and Maximum shear strength [N/m2]. + + zetaMin == 0.d0 + zetaMax == 1.0d+14 + +! Ellipticity squared of yield curve [nondimensional]. + + ellip_sq == 4.d0 + +! Minimum and Maximum ice concentration: fractional area covered by ice +! [nondimensional]. + + min_ai == 0.0d0 ! I ran this with 0.002...think about + max_ai == 1.0d0 + +! Minimum average ice thickness [m]. + + min_hi == 0.0d0 ! I ran this with 0.002...think about + +! Maximum melt pond water thickness [m]. + + max_hmelt == 0.10d0 + +! Turning angle for ice-water drag [degrees]. + + stressAng == 0.d0 + +! Emissivity of ice surface [nondimensional]. + + ice_emiss = 0.97d0 + +! Specific heat of air [J/(kg K)]. + +spec_heat_air = 1004.d0 + +! Heat transfer coefficient (nondimensional). + + trans_coeff = 1.75d-3 + +! Latent heat of sublimation [J/kg]. + + sublimation = 2.834d+6 + +! Logical switches (TRUE/FALSE) to activate writing of ice prognostic +! variables into HISTORY output file. + +Hout(idUice) == T ! Si(...,isUice) ice U-velocity +Hout(idVice) == T ! Si(...,isVice) ice V-velocity +Hout(idUiER) == F ! Si(...,isUice) ice U-eastward at RHO-points +Hout(idViNR) == F ! Si(...,isVice) ice V-northward at RHO-points +Hout(idAice) == T ! Si(...,isAice) ice concentration +Hout(idIage) == T ! Si(...,isIage) age of ice +Hout(idHice) == T ! Si(...,isHice) ice thickness +Hout(idHmel) == T ! Si(...,isHmel) melt pond water thickness +Hout(idHsno) == T ! Si(...,isHsno) snow cover thickness +Hout(idTice) == T ! Si(...,isTice) ice interior temperature +Hout(idISxx) == T ! Si(...,isISxx) internal ice stress xx-component +Hout(idISxy) == T ! Si(...,isISxy) internal ice stress xy-component +Hout(idISyy) == T ! Si(...,isISyy) internal ice stress yy-component + +Hout(idIsst) == T ! Fi(...,icIsst) ice surface temperature +Hout(idIOmf) == T ! Fi(...,icIOmf) ice-ocean mass flux +Hout(idIOfv) == T ! Fi(...,icIOfv) ice-ocean friction velocity +Hout(idIOmt) == T ! Fi(...,icIOmt) ice-ocean momentum transfer coefficient +Hout(idS0mk) == T ! Fi(...,icS0mk) under ice molecular sublayer salinity +Hout(idT0mk) == T ! Fi(...,icT0mk) under ice molecular sublayer temperature +Hout(idWdiv) == T ! Fi(...,icWdiv) ice divergence rate +Hout(idW_fr) == T ! Fi(...,icW_fr) ice accretion rate by frazil ice growth +Hout(idW_ai) == T ! Fi(...,icW_ai) melt/freeze rate at Air/Ice +Hout(idW_ao) == T ! Fi(...,icW_ao) melt/freeze rate at Air/Ocean +Hout(idW_io) == T ! Fi(...,icW_io) melt/freeze rate at Ice/Ocean +Hout(idW_ro) == T ! Fi(...,icW_ro) melt/freeze rate runoff into ocean + +! Logical switches (TRUE/FALSE) to activate writing of ice prognostic +! variables into QUICKSAVE output file. + +Qout(idUice) == T ! Si(...,isUice) ice U-velocity +Qout(idVice) == T ! Si(...,isVice) ice V-velocity +Qout(idUiER) == F ! Si(...,isUice) ice U-eastward at RHO-points +Qout(idViNR) == F ! Si(...,isVice) ice V-northward at RHO-points +Qout(idAice) == T ! Si(...,isAice) ice concentration +Qout(idIage) == T ! Si(...,isIage) age of ice +Qout(idHice) == T ! Si(...,isHice) ice thickness +Qout(idHmel) == T ! Si(...,isHmel) melt pond water thickness +Qout(idHsno) == T ! Si(...,isHsno) snow cover thickness +Qout(idTice) == T ! Si(...,isTice) ice interior temperature +Qout(idISxx) == T ! Si(...,isISxx) internal ice stress xx-component +Qout(idISxy) == T ! Si(...,isISxy) internal ice stress xy-component +Qout(idISyy) == T ! Si(...,isISyy) internal ice stress yy-component + +Qout(idIsst) == T ! Fi(...,icIsst) ice surface temperature +Qout(idIOmf) == T ! Fi(...,icIOmf) ice-ocean mass flux +Qout(idIOfv) == T ! Fi(...,icIOfv) ice-ocean friction velocity +Qout(idIOmt) == T ! Fi(...,icIOmt) ice-ocean momentum transfer coefficient +Qout(idS0mk) == T ! Fi(...,icS0mk) under ice molecular sublayer salinity +Qout(idT0mk) == T ! Fi(...,icT0mk) under ice molecular sublayer temperature +Qout(idWdiv) == T ! Fi(...,icWdiv) ice divergence rate +Qout(idW_fr) == T ! Fi(...,icW_fr) ice accretion rate by frazil ice growth +Qout(idW_ai) == T ! Fi(...,icW_ai) melt/freeze rate at Air/Ice +Qout(idW_ao) == T ! Fi(...,icW_ao) melt/freeze rate at Air/Ocean +Qout(idW_io) == T ! Fi(...,icW_io) melt/freeze rate at Ice/Ocean +Qout(idW_ro) == T ! Fi(...,icW_ro) melt/freeze rate runoff into ocean + +! Logical switches (TRUE/FALSE) to activate writing of ice prognostic +! variables into AVERAGES output file. + +Aout(idUice) == T ! Si_avg(...,isUice) ice U-velocity +Aout(idVice) == T ! Si_avg(...,isVice) ice V-velocity +Aout(idUiER) == F ! Si_avg(...,isUice) ice U-eastward at RHO-points +Aout(idViNR) == F ! Si_avg(...,isVice) ice V-northward at RHO-points +Aout(idAice) == T ! Si_avg(...,isAice) ice concentration +Aout(idIage) == T ! Si_avg(...,isIage) age of ice +Aout(idHice) == T ! Si_avg(...,isHice) ice thickness +Aout(idHmel) == T ! Si_avg(...,isHmel) melt pond water thickness +Aout(idHsno) == T ! Si_avg(...,isHsno) snow cover thickness +Aout(idTice) == T ! Si_avg(...,isTice) ice interior temperature +Aout(idISxx) == T ! Si_avg(...,isISxx) internal ice stress xx-component +Aout(idISxy) == T ! Si_avg(...,isISxy) internal ice stress xy-component +Aout(idISyy) == T ! Si_avg(...,isISyy) internal ice stress yy-component + +Aout(idIsst) == T ! Fi_avg(...,icIsst) ice surface temperature +Aout(idIOmf) == T ! Fi_avg(...,icIOmf) ice-ocean mass flux +Aout(idIOfv) == T ! Fi_avg(...,icIOfv) ice-ocean friction velocity +Aout(idIOmt) == T ! Fi_avg(...,icIOmt) ice-ocean momentum transfer coefficient +Aout(idS0mk) == T ! Fi_avg(...,icS0mk) under ice molecular sublayer salinity +Aout(idT0mk) == T ! Fi_avg(...,icT0mk) under ice molecular sublayer temperature +Aout(idWdiv) == T ! Fi_avg(...,icWdiv) ice divergence rate +Aout(idW_fr) == T ! Fi_avg(...,icW_fr) ice accretion rate by frazil ice growth +Aout(idW_ai) == T ! Fi_avg(...,icW_ai) melt/freeze rate at Air/Ice +Aout(idW_ao) == T ! Fi_avg(...,icW_ao) melt/freeze rate at Air/Ocean +Aout(idW_io) == T ! Fi_avg(...,icW_io) melt/freeze rate at Ice/Ocean +Aout(idW_ro) == T ! Fi_avg(...,icW_ro) melt/freeze rate runoff into ocean + +! +! GLOSSARY: +! ========= +! +!------------------------------------------------------------------------------ +! Sea ice model parameters. +!------------------------------------------------------------------------------ +! +! nEVP Number of elastic time steps per viscous step in +! Elastic-Viscous-Plastic (EVP) rheology equations. +! +! AirRho Air density (kg/m3) constant. +! +! IceRho Sea ice density (kg/m3) constant. +! +! SnowDryRho Dry (fresh) snow density (kg/m3) constant. +! +! SnowWetRho Wet (heavy) snow density (kg/m3) constant. +! +! Cd_ai Atmosphere-Ice boundary bulk drag coefficient (unitless). +! +! Cd_io Ice-Ocean boundary bulk drag coefficient (unitless). +! +! Astrength Exponential weighting coefficient for ice strengh (pressure) +! parameterization as function of ice concentration. +! +! zetaMin Minimum shear stregth threshold (N/m2) in the computation of +! bulk viscosity in the EVP formulation. +! +! zetaMax Maximum shear stregth threshold (N/m2) in the computation of +! bulk viscosity in the EVP formulation. +! +! ellip_sq Squared ellipticity (nondimensional) of the yield curve used +! in the ice stress tensor formulation. +! +! min_ai Minimum threshold for ice concentration (nondimensional) +! defined as the fractional grid area covered by ice. +! +! max_ai Maxmum threshold for ice concentration (nondimensional) +! defined as the fractional grid area covered by ice. +! +! min_hi Minimum average ice thickness (m) threshold. +! +! max_hmelt Maximum melt pond water thickness (m) threshold. +! +! stressAng Turning angle (degrees) for ice-water drag. +! +! ice_emiss Emissivity of ice surface (nondimensional). +! +! spec_heat_air Specific heat of air (J/kg/K). +! +! trans_coeff Heat transfer coefficient (nondimensional). +! +! sublimation Latent heat of sublimation (J/kg). +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of instantaneous ice fields into +! HISTORY file. +!------------------------------------------------------------------------------ +! +! Hout(idUice) Write out ice U-velocity component. +! Hout(idVice) Write out ice V-velocity component. +! Hout(idUiER) Write out ice Eastward velocity component at RHO-points. +! Hout(idViNR) Write out ice Northward velocity component at RHO-points. +! Hout(idAice) Write out ice concentration (fractional area coverage). +! Hout(idIage) Write out age of ice. +! Hout(idHice) Write out average ice thickness (ice mass per area). +! Hout(idHmel) Write out surface melt water thickness on ice. +! Hout(idHsno) Write out average snow coverage thickness. +! Hout(idTice) Write out surface temperature at snow/atmosphere interface. +! Hout(idISxx) Write out internal ice stress tensor, xx-component. +! Hout(idISxy) Write out internal ice stress tensor, xy-component. +! Hout(idISyy) Write out internal ice stress tensor, yy-component. +! +! Hout(idIsst) Write out ice interior temperature (at ice mid-layer). +! Hout(idIOmf) Write out ice-ocean mass flux. +! Hout(idIOfv) Write out ice-ocean friction velocity. +! Hout(idIOmt) Write out ice-ocean momentum transfer coefficient. +! Hout(idS0mk) Write out salinity of molecular sublayer under ice. +! Hout(idT0mk) Write out temperature of molecular sublayer under ice. +! Hout(idWdiv) Write out rate of ice divergence. +! Hout(idW_fr) Write out rate of ice accretion by frazil ice growth. +! Hout(idW_ai) Write out rate of melt/freeze at air/ice interface. +! Hout(idW_ao) Write out rate of melt/freeze at air/ocean interface. +! Hout(idW_io) Write out rate of melt/freeze at ice/ocean interface. +! Hout(idW_ro) Write out rate of melt/freeze runoff into ocean. +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of instantaneous ice fields into +! QUICKSAVE file. +!------------------------------------------------------------------------------ +! +! Qout(idUice) Write out ice U-velocity component. +! Qout(idVice) Write out ice V-velocity component. +! Qout(idUiER) Write out ice Eastward velocity component at RHO-points. +! Qout(idViNR) Write out ice Northward velocity component at RHO-points. +! Qout(idAice) Write out ice concentration (fractional area coverage). +! Qout(idIage) Write out age of ice. +! Qout(idHice) Write out average ice thickness (ice mass per area). +! Qout(idHmel) Write out surface melt water thickness on ice. +! Qout(idHsno) Write out average snow coverage thickness. +! Qout(idTice) Write out surface temperature at snow/atmosphere interface. +! Qout(idISxx) Write out internal ice stress tensor, xx-component. +! Qout(idISxy) Write out internal ice stress tensor, xy-component. +! Qout(idISyy) Write out internal ice stress tensor, yy-component. +! +! Qout(idIsst) Write out ice interior temperature (at ice mid-layer). +! Qout(idIOmf) Write out ice-ocean mass flux. +! Qout(idIOfv) Write out ice-ocean friction velocity. +! Qout(idIOmt) Write out ice-ocean momentum transfer coefficient. +! Qout(idS0mk) Write out salinity of molecular sublayer under ice. +! Qout(idT0mk) Write out temperature of molecular sublayer under ice. +! Qout(idWdiv) Write out rate of ice divergence. +! Qout(idW_fr) Write out rate of ice accretion by frazil ice growth. +! Qout(idW_ai) Write out rate of melt/freeze at air/ice interface. +! Qout(idW_ao) Write out rate of melt/freeze at air/ocean interface. +! Qout(idW_io) Write out rate of melt/freeze at ice/ocean interface. +! Qout(idW_ro) Write out rate of melt/freeze runoff into ocean. +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of time-averaged ice fields into +! AVERAGE file. +!------------------------------------------------------------------------------ +! +! Aout(idUice) Write out ice U-velocity component. +! Aout(idVice) Write out ice V-velocity component. +! Aout(idUiER) Write out ice Eastward velocity component at RHO-points. +! Aout(idViNR) Write out ice Northward velocity component at RHO-points. +! Aout(idAice) Write out ice concentration (fractional area coverage). +! Aout(idIage) Write out age of ice. +! Aout(idHice) Write out average ice thickness (ice mass per area). +! Aout(idHmel) Write out surface melt water thickness on ice. +! Aout(idHsno) Write out average snow coverage thickness. +! Aout(idTice) Write out surface temperature at snow/atmosphere interface. +! Aout(idISxx) Write out internal ice stress tensor, xx-component. +! Aout(idISxy) Write out internal ice stress tensor, xy-component. +! Aout(idISyy) Write out internal ice stress tensor, yy-component. +! +! Aout(idIsst) Write out ice interior temperature (at ice mid-layer). +! Aout(idIOmf) Write out ice-ocean mass flux. +! Aout(idIOfv) Write out ice-ocean friction velocity. +! Aout(idIOmt) Write out ice-ocean momentum transfer coefficient. +! Aout(idS0mk) Write out salinity of molecular sublayer under ice. +! Aout(idT0mk) Write out temperature of molecular sublayer under ice. +! Aout(idW_fr) Write out rate of ice accretion by frazil ice growth. +! Aout(idW_ai) Write out rate of melt/freeze at air/ice interface. +! Aout(idW_ao) Write out rate of melt/freeze at air/ocean interface. +! Aout(idW_io) Write out rate of melt/freeze at ice/ocean interface. +! Aout(idW_ro) Write out rate of melt/freeze runoff into ocean. +! Aout(idWdiv) Write out rate of ice divergence. +! \ No newline at end of file diff --git a/LAKE_ERIE/Forward/roms_lake_erie_1000m.in b/LAKE_ERIE/Forward/roms_lake_erie_1000m.in new file mode 100644 index 00000000..ffe8803b --- /dev/null +++ b/LAKE_ERIE/Forward/roms_lake_erie_1000m.in @@ -0,0 +1,3462 @@ +! +! ROMS/TOMS Standard Input parameters. +! +! git $Id$ +!========================================================= Hernan G. Arango === +! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +! Licensed under a MIT/X style license ! +! See License_ROMS.txt ! +!============================================================================== +! ! +! Input parameters can be entered in ANY order, provided that the parameter ! +! KEYWORD (usually, upper case) is typed correctly followed by "=" or "==" ! +! symbols. Any comment lines are allowed and must begin with an exclamation ! +! mark (!) in column one. Comments may appear to the right of a parameter ! +! specification to improve documentation. Comments are ignored during ! +! reading. Blank lines are also allowed and ignored. Continuation lines in ! +! a parameter specification are allowed if preceded by a backslash (\). In ! +! some instances, more than one value is required for a parameter. If fewer ! +! values are provided, the last value is assigned for the entire parameter ! +! array. The multiplication symbol (*), without blank spaces in between, ! +! is allowed for a parameter specification. For example, in two grids nested ! +! application: ! +! ! +! AKT_BAK == 2*1.0d-6 2*5.0d-6 ! m2/s ! +! ! +! indicates that the first two entries of array AKT_BAK, in fortran column- ! +! major order, will have the same value of "1.0d-6" for grid 1, whereas the ! +! next two entries will have the same value of "5.0d-6" for grid 2. ! +! ! +! In multiple levels of nesting or multiple connected domains step-ups, ! +! "Ngrids" entries are expected for some of these parameters. In such case, ! +! the order of the entries for a parameter is critical. It must follow the ! +! same order (1:Ngrids) as in the state variable declaration. The USER may ! +! follow the above guidelines for specifying his/her values. These parameters ! +! are marked by "==" plural symbol after the KEYWORD. ! +! ! +! Multiple NetCDF files are allowed for input field(s). It is useful when ! +! splitting input data (climatology, boundary, forcing) time records into ! +! several files (say monthly, annual, etc.). In this case, each multiple ! +! filename entry lines need to end with the vertical bar (|) symbol. For ! +! example: ! +! ! +! NFFILES == 6 ! number of forcing files ! +! ! +! FRCNAME == my_lwrad_year1.nc | ! +! my_lwrad_year2.nc \ ! +! my_swrad_year1.nc | ! +! my_swrad_year2.nc \ ! +! my_winds_year1.nc | ! +! my_winds_year2.nc \ ! +! my_Pair_year1.nc | ! +! my_Pair_year2.nc \ ! +! my_Qair_year1.nc | ! +! my_Qair_year2.nc \ ! +! my_Tair_year1.nc | ! +! my_Tair_year2.nc ! +! ! +! Notice that NFFILES is 6 and not 12. There are 6 uniquely different fields ! +! in the file list, we DO NOT count file entries followed by the vertical ! +! bar symbol. This is because multiple file entries are processed in ROMS ! +! with derived type structures. ! +! ! +!============================================================================== +! +! Application title. + + TITLE = Freshwater ice-lake test, 1000m Resolution + +! C-preprocessing Flag. + + MyAppCPP = LAKE_ERIE + +! Input variable information file name. This file needs to be processed +! first so all information arrays can be initialized properly. + + VARNAME = ../../External/varinfo.yaml + +! Number of nested grids. + + Ngrids = 1 + +! Number of grid nesting layers. This parameter is used to allow refinement +! and composite grid combinations. + + NestLayers = 1 + +! Number of grids in each nesting layer [1:NestLayers]. + +GridsInLayer = 1 + +! Grid dimension parameters. See notes below in the Glossary for how to set +! these parameters correctly. + + Lm == 395 ! Number of I-direction INTERIOR RHO-points + Mm == 149 ! Number of J-direction INTERIOR RHO-points + N == 15 ! Number of vertical levels + + Nbed = 0 ! Number of sediment bed layers + + NAT = 2 ! Number of active tracers (usually, 2) + NPT = 0 ! Number of inactive passive tracers + NCS = 0 ! Number of cohesive (mud) sediment tracers + NNS = 0 ! Number of non-cohesive (sand) sediment tracers + +! Domain decomposition parameters for serial, distributed-memory or +! shared-memory configurations used to determine tile horizontal range +! indices (Istr,Iend) and (Jstr,Jend), [1:Ngrids]. + + NtileI == 4 ! I-direction partition + NtileJ == 3 ! J-direction partition + +! Set horizontal and vertical advection schemes for active and inert +! tracers. A different advection scheme is allowed for each tracer. +! For example, a positive-definite (monotonic) algorithm can be activated +! for salinity and inert tracers, while a different one is set for +! temperature. [1:NAT+NPT,Ngrids] values are expected. +! +! Keyword Advection Algorithm +! +! A4 4th-order Akima (horizontal/vertical) +! C2 2nd-order centered differences (horizontal/vertical) +! C4 4th-order centered differences (horizontal/vertical) +! HSIMT 3th-order HSIMT-TVD (horizontal/vertical) +! MPDATA recursive flux corrected MPDATA (horizontal/vertical) +! SPLINES parabolic splines (only vertical) +! SU3 split third-order upstream (horizontal/vertical) +! U3 3rd-order upstream-biased (only horizontal) +! +! The user has the option of specifying the full Keyword or the first +! two letters, regardless if using uppercase or lowercase. If nested +! grids, specify values for each grid (see glossary below). + + Hadvection == U3 \ ! temperature + U3 ! salinity + + Vadvection == C4 \ ! temperature + C4 ! salinity + +! Adjoint-based algorithms can have different horizontal and schemes +! for active and inert tracers. + +ad_Hadvection == U3 \ ! temperature + U3 ! salinity + +ad_Vadvection == C4 \ ! temperature + C4 ! salinity + +! Set lateral boundary conditions keyword. Notice that a value is expected +! for each boundary segment per nested grid for each state variable. +! +! Each tracer variable requires [1:4,1:NAT+NPT,Ngrids] values. Otherwise, +! [1:4,1:Ngrids] values are expected for other variables. The boundary +! order is: 1=west, 2=south, 3=east, and 4=north. That is, anticlockwise +! starting at the western boundary. +! +! The keyword is case insensitive and usually has three characters. However, +! it is possible to have compound keywords, if applicable. For example, the +! keyword "RadNud" implies radiation boundary condition with nudging. This +! combination is usually used in active/passive radiation conditions. +! +! Keyword Lateral Boundary Condition Type +! +! Cha Chapman_implicit (free-surface) +! Che Chapman_explicit (free-surface) +! Cla Clamped +! Clo Closed +! Fla Flather (2D momentum) _____N_____ j=Mm +! Gra Gradient | 4 | +! Nes Nested (refinement) | | +! Nud Nudging 1 W E 3 +! Per Periodic | | +! Rad Radiation |_____S_____| +! Red Reduced Physics (2D momentum) 2 j=1 +! Shc Shchepetkin (2D momentum) i=1 i=Lm +! +! W S E N +! e o a o +! s u s r +! t t t t +! h h +! +! 1 2 3 4 + + LBC(isFsur) == Clo Clo Clo Clo ! free-surface + LBC(isUbar) == Clo Clo Clo Clo ! 2D U-momentum + LBC(isVbar) == Clo Clo Clo Clo ! 2D V-momentum + LBC(isUvel) == Clo Clo Clo Clo ! 3D U-momentum + LBC(isVvel) == Clo Clo Clo Clo ! 3D V-momentum + LBC(isMtke) == Clo Clo Clo Clo ! mixing TKE + + LBC(isTvar) == Clo Clo Clo Clo \ ! temperature + Clo Clo Clo Clo ! salinity + +! Ice boundary conditions + + LBC(isAice) == Clo Clo Clo Clo ! ice concentration + LBC(isHice) == Clo Clo Clo Clo ! ice thickness + LBC(isHsno) == Clo Clo Clo Clo ! snow thickness + LBC(isTice) == Clo Clo Clo Clo ! ice temperature + LBC(isHmel) == Clo Clo Clo Clo ! surface water + LBC(isIage) == Clo Clo Clo Clo ! Ice age + LBC(isISxx) == Clo Clo Clo Clo ! xx-stress + LBC(isISxy) == Clo Clo Clo Clo ! xy-stress + LBC(isISyy) == Clo Clo Clo Clo ! yy-stress + LBC(isUice) == Clo Clo Clo Clo ! ice U-momentum + LBC(isVice) == Clo Clo Clo Clo ! ice V-momentum + +! Waves Effect on Currents lateral boundary conditions. + + LBC(isU2Sd) == Clo Clo Clo Clo ! 2D U-Stokes + LBC(isV2Sd) == Clo Clo Clo Clo ! 2D V-Stokes + LBC(isU3Sd) == Clo Clo Clo Clo ! 3D U-Stokes + LBC(isV3Sd) == Clo Clo Clo Clo ! 3D V-Stokes + +! Adjoint-based algorithms can have different lateral boundary +! conditions keywords. + +ad_LBC(isFsur) == Clo Clo Clo Clo ! free-surface +ad_LBC(isUbar) == Clo Clo Clo Clo ! 2D U-momentum +ad_LBC(isVbar) == Clo Clo Clo Clo ! 2D V-momentum +ad_LBC(isUvel) == Clo Clo Clo Clo ! 3D U-momentum +ad_LBC(isVvel) == Clo Clo Clo Clo ! 3D V-momentum +ad_LBC(isMtke) == Clo Clo Clo Clo ! mixing TKE + +ad_LBC(isTvar) == Clo Clo Clo Clo \ ! temperature + Clo Clo Clo Clo ! salinity + +! Set lateral open boundary edge volume conservation switch for +! nonlinear model and adjoint-based algorithms. Usually activated +! with radiation boundary conditions to enforce global mass +! conservation, except if tidal forcing is enabled. [1:Ngrids]. + + VolCons(west) == F ! western boundary + VolCons(east) == F ! eastern boundary + VolCons(south) == F ! southern boundary + VolCons(north) == F ! northern boundary + +ad_VolCons(west) == F ! western boundary +ad_VolCons(east) == F ! eastern boundary +ad_VolCons(south) == F ! southern boundary +ad_VolCons(north) == F ! northern boundary + +! Time-Stepping parameters. + + NTIMES == 240000 ! 800 days + DT == 300.0d0 ! 288 steps per day + NDTFAST == 30 + +! Number of timesteps for computing observation impacts during the +! analysis-forecast cycle. + + NTIMES_ANA == 1440 ! analysis interval + NTIMES_FCT == 1440 ! forecast interval + +! Model iteration loops parameters. + + ERstr = 1 + ERend = 1 + Nouter = 1 + Ninner = 1 + Nsaddle = 1 + Nintervals = 1 + +! Number of eigenvalues (NEV) and eigenvectors (NCV) to compute for the +! Lanczos/Arnoldi problem in the Generalized Stability Theory (GST) +! analysis. NCV must be greater than NEV (see documentation below). + + NEV = 2 ! Number of eigenvalues + NCV = 10 ! Number of eigenvectors + +! Input/Output parameters. + + NRREC == 0 + LcycleRST == T + NRST == 1440 + NSTA == 12 ! hourly + NFLT == 1 + NINFO == 1 + +! Output history, quicksave, average, and diagnostic files parameters. + + LDEFOUT == T + NHIS == 1440 ! every 5 days + NDEFHIS == 48000 ! a file every 150 days + NQCK == 288 ! daily + NDEFQCK == 48000 ! a file every 150 days + NTSAVG == 1 + NAVG == 1440 ! 5 day average + NDEFAVG == 48000 ! a file every 150 days + NTSDIA == 1 + NDIA == 1440 + NDEFDIA == 0 + +! Output tangent linear and adjoint models parameters. + + LcycleTLM == F + NTLM == 1440 + NDEFTLM == 0 + LcycleADJ == F + NADJ == 1440 + NDEFADJ == 0 + NSFF == 1440 + NOBC == 1440 + +! GST output and check pointing restart parameters. + + LmultiGST = F ! one eigenvector per file + LrstGST = F ! GST restart switch + MaxIterGST = 500 ! maximum number of iterations + NGST = 10 ! check pointing interval + +! Relative accuracy of the Ritz values computed in the GST analysis. + + Ritz_tol = 1.0d-15 + +! Harmonic/biharmonic horizontal diffusion of tracer for nonlinear model +! and adjoint-based algorithms: [1:NAT+NPT,Ngrids]. + + TNU2 == 5.0d0 5.0d0 ! m2/s + TNU4 == 2*0.0d0 ! m4/s + + ad_TNU2 == 0.0d0 0.0d0 ! m2/s + ad_TNU4 == 0.0d0 0.0d0 ! m4/s + +! Harmonic/biharmonic, horizontal viscosity coefficient for nonlinear model +! and adjoint-based algorithms: [Ngrids]. + + VISC2 == 10.0d0 ! m2/s + VISC4 == 0.0d0 ! m4/s + + ad_VISC2 == 0.0d0 ! m2/s + ad_VISC4 == 0.0d0 ! m4/s + +! Logical switches (TRUE/FALSE) to increase/decrease horizontal viscosity +! and/or diffusivity in specific areas of the application domain (like +! sponge areas) for the desired application grid. + + LuvSponge == F ! horizontal momentum +LtracerSponge == F F ! temperature, salinity, inert + +! Vertical mixing coefficients for tracers in nonlinear model and +! basic state scale factor in adjoint-based algorithms: [1:NAT+NPT,Ngrids] + + AKT_BAK == 1.0d-6 1.0d-6 ! m2/s + + ad_AKT_fac == 1.0d0 1.0d0 ! nondimensional + +! Vertical mixing coefficient for momentum for nonlinear model and +! basic state scale factor in adjoint-based algorithms: [Ngrids]. + + AKV_BAK == 1.0d-5 ! m2/s + + ad_AKV_fac == 1.0d0 ! nondimensional + +! Upper threshold values to limit vertical mixing coefficients computed +! from vertical mixing parameterizations. Although this is an engineering +! fix, the vertical mixing values inferred from ocean observations are +! rarely higher than this upper limit value. + + AKT_LIMIT == 1.0d-4 1.0d-4 ! m2/s + + AKV_LIMIT == 1.0d-4 ! m2/s + +! Turbulent closure parameters. + + AKK_BAK == 5.0d-6 ! m2/s + AKP_BAK == 5.0d-6 ! m2/s + TKENU2 == 0.0d0 ! m2/s + TKENU4 == 0.0d0 ! m4/s + +! Generic length-scale turbulence closure parameters. + + GLS_P == 0.0d0 ! K-kl + GLS_M == 1.0d0 + GLS_N == 1.0d0 + GLS_Kmin == 5.0d-6 + GLS_Pmin == 5.0d-6 + + GLS_CMU0 == 0.5544d0 + GLS_C1 == 0.9d0 + GLS_C2 == 0.52d0 + GLS_C3M == 2.5d0 + GLS_C3P == 1.0d0 + GLS_SIGK == 1.96d0 + GLS_SIGP == 1.96d0 + +! Constants used in surface turbulent kinetic energy flux computation. + + CHARNOK_ALPHA == 1400.0d0 ! Charnock surface roughness + ZOS_HSIG_ALPHA == 0.5d0 ! roughness from wave amplitude + SZ_ALPHA == 0.25d0 ! roughness from wave dissipation + CRGBAN_CW == 100.0d0 ! Craig and Banner wave breaking + +! Waves Effect on Current wave dissipation action scale: +! +! [0.0] All wave dissipation goes to breaking and none to roller +! [1.0] All wave dissipation goes to roller and none to breaking + + WEC_ALPHA == 0.0d0 + +! Constants used in momentum stress computation. + + RDRG == 3.0d-04 ! m/s + RDRG2 == 3.0d-03 ! nondimensional + Zob == 0.02d0 ! m + Zos == 0.02d0 ! m + +! Height (m) of atmospheric measurements for Bulk fluxes parameterization. + + BLK_ZQ == 10.0d0 ! air humidity + BLK_ZT == 10.0d0 ! air temperature + BLK_ZW == 10.0d0 ! winds + +! Minimum depth for wetting and drying. + + DCRIT == 0.10d0 ! m + +! Various parameters. + + WTYPE == 1 + LEVSFRC == 15 + LEVBFRC == 1 + +! Set vertical, terrain-following coordinates transformation equation and +! stretching function (see below for details), [1:Ngrids]. + + Vtransform == 2 ! transformation equation + Vstretching == 4 ! stretching function + +! Vertical S-coordinates parameters (see below for details), [1:Ngrids]. + + THETA_S == 7.0d0 ! surface stretching parameter + THETA_B == 2.0d0 ! bottom stretching parameter + TCLINE == 30.0d0 ! critical depth (m) + +! Mean Density and Brunt-Vaisala frequency. + + RHO0 = 1025.0d0 ! kg/m3 + BVF_BAK = 1.0d-5 ! 1/s2 + +! If tide generating forces, set switch (T/F) to apply a 18.6-year lunar +! nodal correction to equilibrium tide constituents. + + Lnodal = T + +! Time-stamp assigned for model initialization, reference time +! origin for tidal forcing, and model reference time for output +! NetCDF units attribute. + + DSTART = 0.0d0 ! days + TIDE_START = 0.0d0 ! days + TIME_REF = 20100101.0d0 ! yyyymmdd.dd +! TIME_REF = 20100201.0d0 ! yyyymmdd.dd + +! Nudging/relaxation time scales, inverse scales will be computed +! internally, [1:Ngrids]. + + TNUDG == 2*0.0d0 ! days + ZNUDG == 0.0d0 ! days + M2NUDG == 0.0d0 ! days + M3NUDG == 0.0d0 ! days + +! Factor between passive (outflow) and active (inflow) open boundary +! conditions, [1:Ngrids]. If OBCFAC > 1, nudging on inflow is stronger +! than on outflow (recommended). + + OBCFAC == 0.0d0 ! nondimensional + +! Linear equation of State parameters: + + R0 == 1027.0d0 ! kg/m3 + T0 == 14.0d0 ! Celsius + S0 == 8.0d0 ! nondimensional + TCOEF == 1.7d-4 ! 1/Celsius + SCOEF == 7.6d-4 ! nondimensional + +! Slipperiness parameter: 1.0 (free slip) or -1.0 (no slip) + + GAMMA2 == 1.0d0 + +! Logical switches (TRUE/FALSE) to activate horizontal momentum transport +! point Sources/Sinks (like river runoff transport) and mass point +! Sources/Sinks (like volume vertical influx), [1:Ngrids]. + + LuvSrc == F ! horizontal momentum transport + LwSrc == F ! volume vertical influx + +! Logical switches (TRUE/FALSE) to activate tracers point Sources/Sinks +! (like river runoff) and to specify which tracer variables to consider: +! [1:NAT+NPT,Ngrids]. See glossary below for details. + + LtracerSrc == F F ! temperature, salinity, inert + +! Logical switches (TRUE/FALSE) to read and process climatology fields. +! See glossary below for details. + + LsshCLM == F ! sea-surface height + Lm2CLM == F ! 2D momentum + Lm3CLM == F ! 3D momentum + + LtracerCLM == F F ! temperature, salinity, inert + +! Logical switches (TRUE/FALSE) to nudge the desired climatology field(s). +! If not analytical climatology fields, users need to turn ON the logical +! switches above to process the fields from the climatology NetCDF file +! that are needed for nudging. See glossary below for details. + + LnudgeM2CLM == F ! 2D momentum + LnudgeM3CLM == F ! 3D momentum + + LnudgeTCLM == F F ! temperature, salinity, inert + +! Starting (DstrS) and ending (DendS) day for adjoint sensitivity forcing. +! DstrS must be less or equal to DendS. If both values are zero, their +! values are reset internally to the full range of the adjoint integration. + + DstrS == 0.0d0 ! starting day + DendS == 0.0d0 ! ending day + +! Starting and ending vertical levels of the 3D adjoint state variables +! whose sensitivity is required. + + KstrS == 1 ! starting level + KendS == 1 ! ending level + +! Logical switches (TRUE/FALSE) to specify the adjoint state variables +! whose sensitivity is required. + +Lstate(isFsur) == F ! free-surface +Lstate(isUbar) == F ! 2D U-momentum +Lstate(isVbar) == F ! 2D V-momentum +Lstate(isUvel) == F ! 3D U-momentum +Lstate(isVvel) == F ! 3D V-momentum +Lstate(isWvel) == F ! 3D W-momentum + +Lstate(isTvar) == F F ! NT tracers + +! Logical switches (TRUE/FALSE) to specify the state variables for +! which Forcing Singular Vectors or Stochastic Optimals is required. + +Fstate(isFsur) == F ! free-surface +Fstate(isUbar) == F ! 2D U-momentum +Fstate(isVbar) == F ! 2D V-momentum +Fstate(isUvel) == F ! 3D U-momentum +Fstate(isVvel) == F ! 3D V-momentum +Fstate(isTvar) == F F ! NT tracers + +Fstate(isUstr) == T ! surface U-stress +Fstate(isVstr) == T ! surface V-stress +Fstate(isTsur) == F F ! NT surface tracers flux + +! Stochastic Optimals time decorrelation scale (days) assumed for +! red noise processes. + + SO_decay == 2.0d0 ! days + +! Stochastic Optimals surface forcing standard deviation for +! dimensionalization. + +SO_sdev(isFsur) == 1.0d0 ! free-surface +SO_sdev(isUbar) == 1.0d0 ! 2D U-momentum +SO_sdev(isVbar) == 1.0d0 ! 2D V-momentum +SO_sdev(isUvel) == 1.0d0 ! 3D U-momentum +SO_sdev(isVvel) == 1.0d0 ! 3D V-momentum +SO_sdev(isTvar) == 1.0d0 1.0d0 ! NT tracers + +SO_sdev(isUstr) == 1.0d0 ! surface U-stress +SO_sdev(isVstr) == 1.0d0 ! surface V-stress +SO_sdev(isTsur) == 1.0d0 1.0d0 ! NT surface tracers flux + +! Logical switches (TRUE/FALSE) to activate writing of fields into +! HISTORY output file. + +Hout(idUvel) == T ! u 3D U-velocity +Hout(idVvel) == T ! v 3D V-velocity +Hout(idu3dE) == F ! u_eastward 3D U-eastward at RHO-points +Hout(idv3dN) == F ! v_northward 3D V-northward at RHO-points +Hout(idWvel) == T ! w 3D W-velocity +Hout(idOvel) == T ! omega omega vertical velocity +Hout(idOvil) == F ! omega_implicit omega implicit vertical velocity +Hout(idUbar) == T ! ubar 2D U-velocity +Hout(idVbar) == T ! vbar 2D V-velocity +Hout(idu2dE) == F ! ubar_eastward 2D U-eastward at RHO-points +Hout(idv2dN) == F ! vbar_northward 2D V-northward at RHO-points +Hout(idFsur) == T ! zeta free-surface +Hout(idBath) == F ! bath time-dependent bathymetry + +Hout(idTvar) == T T ! temp, salt temperature and salinity + +Hout(idpthR) == F ! z_rho time-varying depths of RHO-points +Hout(idpthU) == F ! z_u time-varying depths of U-points +Hout(idpthV) == F ! z_v time-varying depths of V-points +Hout(idpthW) == F ! z_w time-varying depths of W-points + +Hout(idUsms) == F ! sustr surface U-stress +Hout(idVsms) == F ! svstr surface V-stress +Hout(idUbms) == F ! bustr bottom U-stress +Hout(idVbms) == F ! bvstr bottom V-stress + +Hout(idUbrs) == F ! bustrc bottom U-current stress +Hout(idVbrs) == F ! bvstrc bottom V-current stress +Hout(idUbws) == F ! bustrw bottom U-wave stress +Hout(idVbws) == F ! bvstrw bottom V-wave stress +Hout(idUbcs) == F ! bustrcwmax bottom max wave-current U-stress +Hout(idVbcs) == F ! bvstrcwmax bottom max wave-current V-stress +Hout(idUVwc) == F ! bstrcwmax bottom max wave-current stress magnitude + +Hout(idUbot) == F ! Ubot bed wave orbital U-velocity +Hout(idVbot) == F ! Vbot bed wave orbital V-velocity +Hout(idUbur) == F ! Ur bottom U-velocity above bed +Hout(idVbvr) == F ! Vr bottom V-velocity above bed + +Hout(idWztw) == F ! zetaw WEC_VF quasi-static sea level adjustment +Hout(idWqsp) == F ! qsp WEC_VF quasi-static pressure adjustment +Hout(idWbeh) == F ! bernoulli_head WEC_VF Bernoulli head adjustment + +Hout(idU2rs) == F ! ubar_wec_stress WEC 2D U-stress +Hout(idV2rs) == F ! vbar_wec_stress WEC 2D V-stress +Hout(idU3rs) == F ! u_wec_stress WEC 3D U-stress +Hout(idV3rs) == F ! v_wec_stress WEC 3D V-stress + +Hout(idU2Sd) == F ! ubar_stokes 2D Stokes U-velocity +Hout(idV2Sd) == F ! vbar_stokes 2D Stokes V-velocity +Hout(idU3Sd) == F ! u_stokes 3D Stokes U-velocity +Hout(idV3Sd) == F ! v_stokes 3D Stokes V-velocity +Hout(idW3St) == F ! w_stokes 3D Stokes W-velocity +Hout(idW3Sd) == F ! omega_stokes 3D Stokes omega-velocity + +Hout(idWamp) == F ! Hwave wave significat height +Hout(idWlen) == F ! Lwave wave mean wavelength +Hout(idWlep) == F ! Lwavep wave peak wavelength +Hout(idWdir) == F ! Dwave wave mean direction +Hout(idWdip) == F ! Dwavep wave peak direction +Hout(idWptp) == F ! Pwave_top wave surface period +Hout(idWpbt) == F ! Pwave_bot wave bottom period +Hout(idWorb) == F ! Uwave_rms wave bottom orbital velocity +Hout(idWbrk) == F ! Wave_break wave breaking (percent) +Hout(idUwav) == F ! uWave wave depth-averaged U-velocity +Hout(idVwav) == F ! vWave wave depth-averaged V-velocity +Hout(idWdif) == F ! Dissip_fric wave dissipation from bottom friction +Hout(idWdib) == F ! Dissip_break wave dissipation from breaking +Hout(idWdiw) == F ! Dissip_wcap wave dissipation from whitecapping +Hout(idWdis) == F ! Dissip_roller wave roller dissipation +Hout(idWrol) == F ! roller_action wave roller action density + +Hout(idPair) == F ! Pair surface air pressure +Hout(idTair) == T ! Tair surface air temperature +Hout(idUair) == T ! Uwind surface U-wind +Hout(idVair) == T ! Vwind surface V-wind +Hout(idUaiE) == F ! Uwind_eastward surface Eastward U-wind +Hout(idVaiN) == F ! Vwind_northward surface Northward V-wind + +Hout(idTsur) == F F ! shflux, ssflux surface net heat and salt flux +Hout(idLhea) == F ! latent latent heat flux +Hout(idShea) == F ! sensible sensible heat flux +Hout(idLrad) == F ! lwrad longwave radiation flux +Hout(idSrad) == F ! swrad shortwave radiation flux +Hout(idEmPf) == F ! EminusP E-P flux +Hout(idevap) == F ! evaporation evaporation rate +Hout(idrain) == F ! rain precipitation rate + +Hout(idDano) == T ! rho density anomaly +Hout(idVvis) == F ! AKv vertical viscosity +Hout(idTdif) == F ! AKt vertical T-diffusion +Hout(idSdif) == F ! AKs vertical Salinity diffusion +Hout(idHsbl) == F ! Hsbl depth of surface boundary layer +Hout(idHbbl) == F ! Hbbl depth of bottom boundary layer +Hout(idMtke) == F ! tke turbulent kinetic energy +Hout(idMtls) == F ! gls turbulent length scale + +! Logical switches (TRUE/FALSE) to activate writing of extra inert passive +! tracers other than biological and sediment tracers into the HISTORY +! output file. An inert passive tracer is one that it is only advected and +! diffused. Other processes are ignored. These tracers include, for example, +! dyes, pollutants, oil spills, etc. NPT values are expected. However, these +! switches can be activated using compact parameter specification. + + Hout(inert) == T ! dye_01, ... inert passive tracers + +! Logical switches (TRUE/FALSE) to activate writing of fields into +! QUICKSAVE output file. + +Qout(idUvel) == F ! u 3D U-velocity +Qout(idVvel) == F ! v 3D V-velocity +Qout(idu3dE) == F ! u_eastward 3D U-eastward at RHO-points +Qout(idv3dN) == F ! v_northward 3D V-northward at RHO-points +Qout(idWvel) == F ! w 3D W-velocity +Qout(idOvel) == F ! omega omega vertical velocity +Qout(idUbar) == T ! ubar 2D U-velocity +Qout(idVbar) == T ! vbar 2D V-velocity +Qout(idu2dE) == F ! ubar_eastward 2D U-eastward at RHO-points +Qout(idv2dN) == F ! vbar_northward 2D V-northward at RHO-points +Qout(idFsur) == T ! zeta free-surface +Qout(idBath) == F ! bath time-dependent bathymetry + +Qout(idTvar) == F F ! temp, salt temperature and salinity + +Qout(idUsur) == T ! u_sur surface U-velocity +Qout(idVsur) == T ! v_sur surface V-velocity +Qout(idUsuE) == F ! u_sur_eastward surface U-eastward velocity +Qout(idVsuN) == F ! v_sur_northward surface V-northward velocity + +Qout(idsurT) == T T ! temp_sur, salt_sur surface temperature and salinity + +Qout(idpthR) == F ! z_rho time-varying depths of RHO-points +Qout(idpthU) == F ! z_u time-varying depths of U-points +Qout(idpthV) == F ! z_v time-varying depths of V-points +Qout(idpthW) == F ! z_w time-varying depths of W-points + +Qout(idUsms) == T ! sustr surface U-stress +Qout(idVsms) == T ! svstr surface V-stress +Qout(idUbms) == F ! bustr bottom U-stress +Qout(idVbms) == F ! bvstr bottom V-stress + +Qout(idUbrs) == F ! bustrc bottom U-current stress +Qout(idVbrs) == F ! bvstrc bottom V-current stress +Qout(idUbws) == F ! bustrw bottom U-wave stress +Qout(idVbws) == F ! bvstrw bottom V-wave stress +Qout(idUbcs) == F ! bustrcwmax bottom max wave-current U-stress +Qout(idVbcs) == F ! bvstrcwmax bottom max wave-current V-stress +Qout(idUVwc) == F ! bstrcwmax bottom max wave-current stress magnitude + +Qout(idUbot) == F ! Ubot bed wave orbital U-velocity +Qout(idVbot) == F ! Vbot bed wave orbital V-velocity +Qout(idUbur) == F ! Ur bottom U-velocity above bed +Qout(idVbvr) == F ! Vr bottom V-velocity above bed + +Qout(idWztw) == F ! zetaw WEC_VF quasi-static sea level adjustment +Qout(idWqsp) == F ! qsp WEC_VF quasi-static pressure adjustment +Qout(idWbeh) == F ! bernoulli_head WEC_VF Bernoulli head adjustment + +Qout(idU2rs) == F ! ubar_wec_stress WEC 2D U-stress +Qout(idV2rs) == F ! vbar_wec_stress WEC 2D V-stress +Qout(idU3rs) == F ! u_wec_stress WEC 3D U-stress +Qout(idV3rs) == F ! v_wec_stress WEC 3D V-stress + +Qout(idU2Sd) == F ! ubar_stokes 2D Stokes U-velocity +Qout(idV2Sd) == F ! vbar_stokes 2D Stokes V-velocity +Qout(idU3Sd) == F ! u_stokes 3D Stokes U-velocity +Qout(idV3Sd) == F ! v_stokes 3D Stokes V-velocity +Qout(idW3St) == F ! w_stokes 3D Stokes W-velocity +Qout(idW3Sd) == F ! omega_stokes 3D Stokes omega-velocity + +Qout(idWamp) == F ! Hwave wave significant height +Qout(idWlen) == F ! Lwave wave mean wavelength +Qout(idWlep) == F ! Lwavep wave peak wavelength +Qout(idWdir) == F ! Dwave wave mean direction +Qout(idWdip) == F ! Dwavep wave peak direction +Qout(idWptp) == F ! Pwave_top wave surface period +Qout(idWpbt) == F ! Pwave_bot wave bottom period +Qout(idWorb) == F ! Uwave_rms wave bottom orbital velocity +Qout(idWbrk) == F ! Wave_break wave breaking (percent) +Qout(idUwav) == F ! uWave wave depth-averaged U-velocity +Qout(idVwav) == F ! vWave wave depth-averaged V-velocity +Qout(idWdif) == F ! Dissip_fric wave dissipation from bottom friction +Qout(idWdib) == F ! Dissip_break wave dissipation from breaking +Qout(idWdiw) == F ! Dissip_wcap wave dissipation from whitecapping +Qout(idWdis) == F ! Dissip_roller wave roller dissipation +Qout(idWrol) == F ! roller_action wave roller action density + +Qout(idPair) == F ! Pair surface air pressure +Qout(idTair) == F ! Tair surface air temperature +Qout(idUair) == F ! Uair surface U-wind +Qout(idVair) == F ! Vair surface V-wind +Qout(idUaiE) == F ! Uwind_eastward surface Eastward U-wind +Qout(idVaiN) == F ! Vwind_northward surface Northward V-wind + +Qout(idTsur) == T T ! shflux, ssflux surface net heat and salt flux +Qout(idLhea) == T ! latent latent heat flux +Qout(idShea) == T ! sensible sensible heat flux +Qout(idLrad) == T ! lwrad longwave radiation flux +Qout(idSrad) == T ! swrad shortwave radiation flux +Qout(idEmPf) == T ! EminusP E-P flux +Qout(idevap) == T ! evaporation evaporation rate +Qout(idrain) == T ! rain precipitation rate + +Qout(idDano) == F ! rho density anomaly +Qout(idVvis) == F ! AKv vertical viscosity +Qout(idTdif) == F ! AKt vertical T-diffusion +Qout(idSdif) == F ! AKs vertical Salinity diffusion +Qout(idHsbl) == T ! Hsbl depth of surface boundary layer +Qout(idHbbl) == F ! Hbbl depth of bottom boundary layer +Qout(idMtke) == F ! tke turbulent kinetic energy +Qout(idMtls) == F ! gls turbulent length scale + +! Logical switches (TRUE/FALSE) to activate writing of extra inert passive +! tracers other than biological and sediment tracers into the QUICKSAVE +! output file. An inert passive tracer is one that it is only advected and +! diffused. Other processes are ignored. These tracers include, for example, +! dyes, pollutants, oil spills, etc. NPT values are expected. However, these +! switches can be activated using compact parameter specification. + + Qout(inert) == F ! dye_01, ... inert passive tracers + Qout(Snert) == F ! dye_01_sur, ... surface inert passive tracers + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged +! fields into AVERAGE output file. + +Aout(idUvel) == T ! u 3D U-velocity +Aout(idVvel) == T ! v 3D V-velocity +Aout(idu3dE) == F ! u_eastward 3D U-eastward at RHO-points +Aout(idv3dN) == F ! v_northward 3D V-northward at RHO-points +Aout(idWvel) == T ! w 3D W-velocity +Aout(idOvel) == T ! omega omega vertical velocity +Aout(idUbar) == T ! ubar 2D U-velocity +Aout(idVbar) == T ! vbar 2D V-velocity +Aout(idu2dE) == F ! ubar_eastward 2D U-eastward at RHO-points +Aout(idv2dN) == F ! vbar_northward 2D V-northward at RHO-points +Aout(idFsur) == T ! zeta free-surface +Aout(idBath) == F ! bath time-dependent bathymetry + +Aout(idTvar) == T T ! temp, salt temperature and salinity + +Aout(idUsms) == F ! sustr surface U-stress +Aout(idVsms) == F ! svstr surface V-stress +Aout(idUbms) == F ! bustr bottom U-stress +Aout(idVbms) == F ! bvstr bottom V-stress + +Aout(idUbrs) == F ! bustrc bottom U-current stress +Aout(idVbrs) == F ! bvstrc bottom V-current stress +Aout(idUbws) == F ! bustrw bottom U-wave stress +Aout(idVbws) == F ! bvstrw bottom V-wave stress +Aout(idUbcs) == F ! bustrcwmax bottom max wave-current U-stress +Aout(idVbcs) == F ! bvstrcwmax bottom max wave-current V-stress +Aout(idUVwc) == F ! bstrcwmax bottom max wave-current stress magnitude + +Aout(idUbot) == F ! Ubot bed wave orbital U-velocity +Aout(idVbot) == F ! Vbot bed wave orbital V-velocity +Aout(idUbur) == F ! Ur bottom U-velocity above bed +Aout(idVbvr) == F ! Vr bottom V-velocity above bed + +Aout(idWztw) == F ! zetaw WEC_VF quasi-static sea level adjustment +Aout(idWqsp) == F ! qsp WEC_VF quasi-static pressure adjustment +Aout(idWbeh) == F ! bernoulli_head WEC_VF Bernoulli head adjustment + +Aout(idU2rs) == F ! ubar_wec_stress WEC 2D U-stress +Aout(idV2rs) == F ! vbar_wec_stress WEC 2D V-stress +Aout(idU3rs) == F ! u_wec_stress WEC 3D U-stress +Aout(idV3rs) == F ! v_wec_stress WEC 3D V-stress + +Aout(idU2Sd) == F ! ubar_stokes 2D Stokes U-velocity +Aout(idV2Sd) == F ! vbar_stokes 2D Stokes V-velocity +Aout(idU3Sd) == F ! u_stokes 3D Stokes U-velocity +Aout(idV3Sd) == F ! v_stokes 3D Stokes V-velocity +Aout(idW3St) == F ! w_stokes 3D Stokes W-velocity +Aout(idW3Sd) == F ! omega_stokes 3D Stokes omega-velocity + +Aout(idWamp) == F ! Hwave wave significant height +Aout(idWlen) == F ! Lwave wave mean wavelength +Aout(idWlep) == F ! Lwavep wave peak wavelength +Aout(idWdir) == F ! Dwave wave mean direction +Aout(idWptp) == F ! Pwave_top wave surface period +Aout(idWpbt) == F ! Pwave_bot wave bottom period +Aout(idWorb) == F ! Uwave_rms wave bottom orbital velocity +Aout(idWbrk) == F ! Wave_break wave breaking (percent) +Aout(idUwav) == F ! uWave wave-depth averaged U-velocity +Aout(idVwav) == F ! vWave wave-depth averaged V-velocity +Aout(idWdif) == F ! Dissip_fric wave dissipation from bottom friction +Aout(idWdib) == F ! Dissip_break wave dissipation from breaking +Aout(idWdiw) == F ! Dissip_wcap wave dissipation from whitecapping +Aout(idWdis) == F ! Dissip_roller wave roller dissipation +Aout(idWrol) == F ! roller_action wave roller action density + +Aout(idPair) == F ! Pair surface air pressure +Aout(idTair) == T ! Tair surface air temperature +Aout(idUair) == T ! Uwind surface U-wind +Aout(idVair) == T ! Vwind surface V-wind +Aout(idUaiE) == F ! Uwind_eastward surface Eastward U-wind +Aout(idVaiN) == F ! Vwind_northward surface Northward V-wind + +Aout(idTsur) == T T ! shflux, ssflux surface net heat and salt flux +Aout(idLhea) == T ! latent latent heat flux +Aout(idShea) == T ! sensible sensible heat flux +Aout(idLrad) == T ! lwrad longwave radiation flux +Aout(idSrad) == T ! swrad shortwave radiation flux +Aout(idevap) == T ! evaporation evaporation rate +Aout(idrain) == T ! rain precipitation rate + +Aout(idDano) == T ! rho density anomaly +Aout(idVvis) == F ! AKv vertical viscosity +Aout(idTdif) == F ! AKt vertical T-diffusion +Aout(idSdif) == F ! AKs vertical Salinity diffusion +Aout(idHsbl) == T ! Hsbl depth of surface boundary layer +Aout(idHbbl) == F ! Hbbl depth of bottom boundary layer + +Aout(id2dRV) == F ! pvorticity_bar 2D relative vorticity +Aout(id3dRV) == F ! pvorticity 3D relative vorticity +Aout(id2dPV) == F ! rvorticity_bar 2D potential vorticity +Aout(id3dPV) == F ! rvorticity 3D potential vorticity + +Aout(idu3dD) == F ! u_detided detided 3D U-velocity +Aout(idv3dD) == F ! v_detided detided 3D V-velocity +Aout(idu2dD) == F ! ubar_detided detided 2D U-velocity +Aout(idv2dD) == F ! vbar_detided detided 2D V-velocity +Aout(idFsuD) == F ! zeta_detided detided free-surface + +Aout(idTrcD) == F F ! temp_detided, ... detided temperature and salinity + +Aout(idHUav) == F ! Huon u-volume flux, Huon +Aout(idHVav) == F ! Hvom v-volume flux, Hvom +Aout(idUUav) == F ! uu quadratic term +Aout(idUVav) == F ! uv quadratic term +Aout(idVVav) == F ! vv quadratic term +Aout(idU2av) == F ! ubar2 quadratic term +Aout(idV2av) == F ! vbar2 quadratic term +Aout(idZZav) == F ! zeta2 quadratic term + +Aout(idTTav) == F F ! temp_2, ... quadratic tracer terms +Aout(idUTav) == F F ! u_temp, ... quadratic tracer terms +Aout(idVTav) == F F ! v_temp, ... quadratic tracer terms +Aout(iHUTav) == F F ! Huon_temp, ... tracer volume flux, +Aout(iHVTav) == F F ! Hvom_temp, ... tracer volume flux, + +! Logical switches (TRUE/FALSE) to activate writing of extra inert passive +! tracers other than biological and sediment tracers into the AVERAGE file. + + Aout(inert) == T ! dye_01, ... inert passive tracers + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged, +! 2D momentum (ubar,vbar) diagnostic terms into DIAGNOSTIC output file. + +Dout(M2rate) == T ! ubar_accel, ... acceleration +Dout(M2pgrd) == T ! ubar_prsgrd, ... pressure gradient +Dout(M2fcor) == T ! ubar_cor, ... Coriolis force +Dout(M2hadv) == T ! ubar_hadv, ... horizontal total advection +Dout(M2xadv) == T ! ubar_xadv, ... horizontal XI-advection +Dout(M2yadv) == T ! ubar_yadv, ... horizontal ETA-advection +Dout(M2hvis) == T ! ubar_hvisc, ... horizontal total viscosity +Dout(M2xvis) == T ! ubar_xvisc, ... horizontal XI-viscosity +Dout(M2yvis) == T ! ubar_yvisc, ... horizontal ETA-viscosity +Dout(M2sstr) == T ! ubar_sstr, ... surface stress +Dout(M2bstr) == T ! ubar_bstr, ... bottom stress + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged, +! 3D momentum (u,v) diagnostic terms into DIAGNOSTIC output file. + +Dout(M3rate) == T ! u_accel, ... acceleration +Dout(M3pgrd) == T ! u_prsgrd, ... pressure gradient +Dout(M3fcor) == T ! u_cor, ... Coriolis force +Dout(M3hadv) == T ! u_hadv, ... horizontal total advection +Dout(M3xadv) == T ! u_xadv, ... horizontal XI-advection +Dout(M3yadv) == T ! u_yadv, ... horizontal ETA-advection +Dout(M3vadv) == T ! u_vadv, ... vertical advection +Dout(M3hrad) == T ! u_hrad, ... horizontal total radiation stress +Dout(M3vrad) == T ! u_vrad, ... vertical radiation stress +Dout(M3hvis) == T ! u_hvisc, ... horizontal total viscosity +Dout(M3xvis) == T ! u_xvisc, ... horizontal XI-viscosity +Dout(M3yvis) == T ! u_yvisc, ... horizontal ETA-viscosity +Dout(M3vvis) == T ! u_vvisc, ... vertical viscosity + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged, +! Waves Effect on Currents (WEC) 2D and 3D diagnostic terms into DIAGNOSTIC +! output file. + +Dout(M2hjvf) == T ! ubar_hjvf, ... 2D horizontal J vortex force +Dout(M2kvrf) == T ! ubar_kvrf, ... 2D K vortex force +Dout(M2fsco) == T ! ubar_fsco, ... 2D Stokes Coriolis +Dout(M2sstm) == T ! ubar_sstm, ... 2D surface streaming +Dout(M2bstm) == T ! ubar_bstm, ... 2D bottom streaming +Dout(M2wrol) == T ! ubar_wrol, ... 2D wave roller acceleration +Dout(M2wbrk) == T ! ubar_wbrk, ... 2D wave breaking +Dout(M2zeta) == T ! ubar_zeta, ... 2D Eulerian SSH adjustment +Dout(M2zetw) == T ! ubar_zetaw, ... 2D quasi-static SSH adjustment +Dout(M2zqsp) == T ! ubar_zqsp, ... 2D quasi-static pressure +Dout(M2zbeh) == T ! ubar_zbeh, ... 2D Bernoulli head adjustment +Dout(M2fsgr) == T ! ubar_fsgr, ... 2D seagrass drag force + +Dout(M3hjvf) == T ! u_hjvf, ... 3D horizontal J vortex force +Dout(M3vjvf) == T ! u_vjvf, ... 3D vertical J vortex force +Dout(M3kvrf) == T ! u_kvrf, ... 3D K vortex force +Dout(M3fsco) == T ! u_fsco, ... 3D Stokes Coriolis +Dout(M3sstm) == T ! u_sstm, ... 3D surface streaming +Dout(M3bstm) == T ! u_bstm, ... 3D bottom streaming +Dout(M3wrol) == T ! u_wrol, ... 3D wave roller acceleration +Dout(M3wbrk) == T ! u_wbrk, ... 3D wave breaking +Dout(M3fsgr) == T ! u_fsgr, ... 3D seagrass drag force + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged, +! active (temperature and salinity) and passive (inert) tracer diagnostic +! terms into DIAGNOSTIC output file: [1:NAT+NPT,Ngrids]. + +Dout(iTrate) == T T ! temp_rate, ... time rate of change +Dout(iThadv) == T T ! temp_hadv, ... horizontal total advection +Dout(iTxadv) == T T ! temp_xadv, ... horizontal XI-advection +Dout(iTyadv) == T T ! temp_yadv, ... horizontal ETA-advection +Dout(iTvadv) == T T ! temp_vadv, ... vertical advection +Dout(iThdif) == T T ! temp_hdiff, ... horizontal total diffusion +Dout(iTxdif) == T T ! temp_xdiff, ... horizontal XI-diffusion +Dout(iTydif) == T T ! temp_ydiff, ... horizontal ETA-diffusion +Dout(iTsdif) == T T ! temp_sdiff, ... horizontal S-diffusion +Dout(iTvdif) == T T ! temp_vdiff, ... vertical diffusion + +! Generic User parameters, [1:NUSER]. + + NUSER = 0 + USER = 0.d0 + +! Input and Output files processing library to use: +! +! [1] Standard NetCDF-3 or NetCDF-4 library +! [2] Serial or Parallel I/O with Parallel-IO (PIO) library (MPI only) + + INP_LIB = 1 + OUT_LIB = 1 + +! PIO library methods for reading/writing NetCDF files: +! +! [0] parallel read and write of PnetCDF (CDF-5, not recommended) +! [1] parallel read and write of NetCDF3 (64-bit offset) +! [2] serial read and write of NetCDF3 (64-bit offset) +! [3] parallel read and serial write of NetCDF4/HDF5 +! [4] parallel read and write of NETCDF4/HDF5 + + PIO_METHOD = 2 + +! PIO library MPI processes set-up: + + PIO_IOTASKS = 1 ! number of I/O tasks to define + PIO_STRIDE = 1 ! stride in the MPI-ran between I/O tasks + PIO_BASE = 0 ! offset for the first I/O task + PIO_AGGREG = 1 ! number of MPI-aggregators to use + +! PIO library rearranger methods for moving data between computational and I/O +! processes: +! +! [1] Box rearrangement +! [2] Subset rearrangement + + PIO_REARR = 1 + +! PIO library rearranger flag for MPI communications between computational +! and I/O processes: +! +! [0] Point-to-Point (low-level communications) +! [1] Collective (high-level grouped communications) + +PIO_REARRCOM = 0 + +! PIO library rearranger flow control direction flag for MPI communications +! between computational and I/O processes: +! +! [0] Enable computational to I/O processes, and vice versa +! [2] Enable computational to I/O processes only +! [3] Enable I/O to computational processes only +! [4] Disable flow control + +PIO_REARRDIR = 0 + +! PIO rearranger options for computational to I/O processes (C2I): + + PIO_C2I_HS = T ! Enable C2I handshake (T/F) +PIO_C2I_Send = T ! Enable C2I Isends (T/F) +PIO_C2I_Preq = 64 ! Maximum pending C2I requests + +! PIO rearranger options for I/O to computational processes (I2C): + + PIO_I2C_HS = T ! Enable I2C handshake (T/F) +PIO_I2C_Send = T ! Enable I2C Isends (T/F) +PIO_I2C_Preq = 65 ! Maximum pending I2C requests + +! If OUT_LIB=1, NetCDF-4/HDF5 compression parameters for output files. + + NC_SHUFFLE = 1 ! if non-zero, turn on shuffle filter + NC_DEFLATE = 1 ! if non-zero, turn on deflate filter + NC_DLEVEL = 1 ! deflate level [0-9] + +! Input NetCDF file names, [1:Ngrids]. + + GRDNAME == ../Data/ROMS/roms_lake_erie_grd_1000m.nc + ININAME == roms_ini.nc + ITLNAME == roms_itl.nc + IRPNAME == roms_irp.nc + IADNAME == roms_iad.nc + FWDNAME == roms_fwd.nc + ADSNAME == roms_ads.nc + +! Input adjoint forcing NetCDF filenames for computing observations +! impacts during the analysis-forecast cycle. If the forecast error +! metric is defined in state-space, then FOInameA and FOInameB should +! be regular adjoint forcing files just like ADSname. If the forecast +! error metric is defined in observation space (OBS_SPACE is activated) +! then the forecast is initialized OIFnameA and OIFnameB (specified in +! s4dvar.in input script) will have the structure of a 4D-Var observation +! file. + + FOInameA == roms_foi_a.nc + FOInameB == roms_foi_b.nc + +! Input NetCDF filenames for the forecasts initialized from the analysis +! of the current 4D-Var cycle (FCTnameA) and initialized from the analysis +! of the previous 4D-Var cycle (FCTnameB). + + FCTnameA == roms_fct_a.nc + FCTnameB == roms_fct_b.nc + +! Nesting grids connectivity data: contact points information. This +! NetCDF file is special and complex. It is currently generated using +! the script "matlab/grid/contact.m" from the Matlab repository. + + NGCNAME = roms_ngc.nc + +! Input lateral boundary conditions file names. The USER has the option +! to separate the required lateral boundary variables into individual +! NetCDF files (NBCFILES > 1), as in the input surface forcing. Also, +! the USER may split input data time records into several NetCDF files +! (monthly, seasonal, or annual). See prologue instructions above. Use +! a single line per entry with a continuation (\) or a vertical bar (|) +! symbol after each entry, except the last one. + + NBCFILES == 1 ! number of boundary files + + BRYNAME == roms_bry.nc + +! Input climatology file names. The USER has the option to separate the +! climatology variables into individual NetCDF files (NCLMFILES > 1), +! as in the input surface forcing. Also, the USER may split input data +! time records into several NetCDF files (monthly, seasonal, or annual). +! See prologue instructions above. Use a single line per entry with a +! continuation (\) or a vertical bar (|) symbol after each entry, except +! the last one. + + NCLMFILES == 1 ! number of climatology files + + CLMNAME == roms_clm.nc + +! Input climatology nudging coefficients file name. + + NUDNAME == roms_nud.nc + +! Input Sources/Sinks forcing (like river runoff) file name. + + SSFNAME == roms_rivers.nc + +! Input tidal forcing file name. + + TIDENAME == roms_tides.nc + +! Input forcing NetCDF file name(s). +! +! The USER has the option to enter several sets of file names for each +! nested grid. For example, the USER may have different data for the +! wind products, heat fluxes, etc. Alternatively, if the all the forcing +! files are the same for nesting and the data is in its native resolution, +! we could enter only one set of files names and ROMS will replicate those +! files internally to the remaining grids using the plural KEYWORD protocol. +! +! The model will scan the files and will read the needed data from the first +! file in the list containing the forcing field. Therefore, the order of the +! filenames is critical. If using multiple forcing files per grid, first +! enter all the file names for grid one followed by two, and so on. It is +! also possible to split input data time records into several NetCDF files +! (see Prolog instructions above). Use a single line per entry with a +! continuation (\) or a vertical bar (|) symbol after each entry, except +! the last one. + + NFFILES == 9 ! number of unique forcing files + + FRCNAME == ../Data/FRC/LakeErie_Pair_era5_short.nc \ + ../Data/FRC/LakeErie_Qair_era5_short.nc \ + ../Data/FRC/LakeErie_Tair_era5_short.nc \ + ../Data/FRC/LakeErie_cloud_era5_short.nc \ + ../Data/FRC/LakeErie_rain_era5_short.nc \ + ../Data/FRC/LakeErie_swrad_era5_short.nc \ + ../Data/FRC/LakeErie_lwrad_era5_short.nc \ + ../Data/FRC/LakeErie_uwind_era5_short.nc \ + ../Data/FRC/LakeErie_vwind_era5_short.nc + +! Output NetCDF file names, [1:Ngrids]. + + DAINAME == roms_lake_erie_dai.nc + GSTNAME == roms_lake_erie_gst.nc + RSTNAME == roms_lake_erie_rst.nc + HISNAME == roms_lake_erie_his.nc + QCKNAME == roms_lake_erie_qck.nc + TLMNAME == roms_lake_erie_tlm.nc + TLFNAME == roms_lake_erie_tlf.nc + ADJNAME == roms_lake_erie_adj.nc + AVGNAME == roms_lake_erie_avg.nc + HARNAME == roms_lake_erie_har.nc + DIANAME == roms_lake_erie_dia.nc + STANAME == roms_lake_erie_sta.nc + FLTNAME == roms_lake_erie_flt.nc + +! Input ASCII parameter filenames. + + APARNAM = s4dvar.in + SPOSNAM = stations_lake_erie.in + FPOSNAM = floats.in + IPARNAM = lake_erie.in + BPARNAM = bio_Fennel.in + SPARNAM = sediment.in + USRNAME = MyFile.dat + +! +! GLOSSARY: +! ========= +! +!------------------------------------------------------------------------------ +! Application title (string with a maximum of 80 characters) and +! C-preprocessing flag. +!------------------------------------------------------------------------------ +! +! TITLE Application title. +! +! MyAppCPP Application C-preprocessing option. +! +!------------------------------------------------------------------------------ +! Variable information filename (string with a maximum of 256 characters). +!------------------------------------------------------------------------------ +! +! VARNAME Input/Output variable information filename. This file needs to +! be processed first so all information arrays and indices can +! be initialized properly in "mod_ncparam.F". +! +!------------------------------------------------------------------------------ +! Nested grid parameters (processing order of these parameters is important). +!------------------------------------------------------------------------------ +! +! Ngrids Number of nested grids. It needs to be read before all other +! parameters in order to allocate all model variables. +! +! NestLayers Number of grid nesting layers. It is used to allow applications +! with both composite and refinement grid combinations, as shown +! in WikiROMS diagrams for the Refinement and Partial Boundary +! Composite Sub-Classes. See, +! +! https://www.myroms.org/wiki/index.php/Nested_Grids +! +! In non-nesting applications, set NestLayers = 1. +! +! GridsInLayer Number of grids in each nested layer, a vector of size +! [1:NestLayers]. Notice that, +! +! SUM(GridsInLayer) = Ngrids +! LENGHT(GridsInLayer) = NestLayers +! +! The order of grids and nesting layers is extremely important. +! It determines the order of the sequential solution at every +! sub-timestep. See WikiROMS nesting Sub-Classes diagrams. +! +! In non-nesting applications, set GridsInLayer = 1. +! +! NOTE: In main3d, we use these parameters to determine which +! ==== grid index, ng, to solve when calling the routines of +! the computational kernel: +! +! NEST_LAYER : DO nl=1,NestLayers +! ... +! STEP_LOOP : DO istep=1,Nsteps +! ... +! DO ig=1,GridsInLayer(nl) +! ng=GridNumber(ig,nl) +! ... +! END DO +! ... +! END DO STEP_LOOP +! END DO NEST_LAYER +! +! Here, the grid order "ng" for the computations is determined +! from array "GridNumber", which is computed at initialization +! in "read_phypar.F". It can be computed on the fly as: +! +! ng=Ngrids+1 +! DO j=NestLayers,nl,-1 +! DO i=GridsInLayer(j),1,-1 +! ng=ng-1 +! IF ((j.eq.nl).and.(i.eq.ig)) EXIT +! END DO +! END DO +! +! but it is too inefficient. This information is provided here +! to help you configure the order of nested grids. +! +!------------------------------------------------------------------------------ +! Grid dimension parameters. +!------------------------------------------------------------------------------ +! +! These parameters are very important since they determine the grid of the +! application to solve. They need to be read first in order to dynamically +! allocate all model variables. +! +! WARNING: It is trivial and possible to change these dimension parameters in +! ------- idealized applications via analytical expressions. However, in +! realistic applications any change to these parameters requires redoing all +! input NetCDF files. +! +! Lm Number of INTERIOR grid RHO-points in the XI-direction for +! each nested grid, [1:Ngrids]. If using NetCDF files as +! input, Lm=xi_rho-2 where "xi_rho" is the NetCDF file +! dimension of RHO-points. Recall that all RHO-point +! variables have a computational I-range of [0:Lm+1]. +! +! Mm Number of INTERIOR grid RHO-points in the ETA-direction for +! each nested grid, [1:Ngrids]. If using NetCDF files as +! input, Mm=eta_rho-2 where "eta_rho" is the NetCDF file +! dimension of RHO-points. Recall that all RHO-point +! variables have a computational J-range of [0:Mm+1]. +! +! N Number of vertical terrain-following levels at RHO-points, +! [1:Ngrids]. +! +! Nbed Number of sediment bed layers, [1:Ngrids]. This parameter +! is only relevant if CPP option SEDIMENT is activated. +! +! Mm+1 ___________________ _______ Kw = N +! | | | | +! Mm | _____________ | | | Kr = N +! | | | | |_______| +! | | | | | | +! Jr | | | | | | +! | | | | |_______| +! | | | | | | +! 1 | |_____________| | | | +! | | |_______| +! 0 |___________________| | | +! Ir | | 1 +! 0 1 Lm Lm+1 h(i,j) |_______| +! ::::::::: 0 +! ::::::::: +! ::::::::: Nbed-1 +! ::::::::: Nbed +! +! NAT Number of active tracer type variables. Usually, NAT=2 for +! potential temperature and salinity. +! +! NPT Number of inert (dyes, age, etc) passive tracer type variables +! to advect and diffuse only. This parameter is only relevant +! if CPP option T_PASSIVE is activated. +! +! NCS Number of cohesive (mud) sediment tracer type variables. This +! parameter is only relevant if CPP option SEDIMENT is +! activated. +! +! NNS Number of non-cohesive (sand) sediment tracer type variables. +! This parameter is only relevant if CPP option SEDIMENT is +! activated. +! +! The total number of sediment tracers is NST=NCS+NNS. Notice +! that NST must be greater than zero (NST>0). +! +!------------------------------------------------------------------------------ +! Domain tile partition parameters. +!------------------------------------------------------------------------------ +! +! Model tile decomposition parameters for serial and parallel configurations +! which are used to determine tile horizontal range indices (Istr,Iend and +! Jstr,Jend). In some computers, it is advantageous to have tile partitions +! in serial applications. +! +! NtileI Number of domain partitions in the I-direction (XI-coordinate). +! It must be equal to or greater than one. +! +! NtileJ Number of domain partitions in the J-direction (ETA-coordinate). +! It must be equal to or greater than one. +! +! WARNING: In shared-memory (OpenMP), the product of NtileI and NtileJ must +! be a MULTIPLE of the number of parallel threads specified with +! the OpenMP environmental variable OMP_NUM_THREADS. +! +! In distributed-memory (MPI), the product of NtileI and NtileJ +! must be EQUAL to the number of parallel nodes specified during +! execution with the "mprun" or "mpirun" command. +! +!------------------------------------------------------------------------------ +! Tracer advection scheme +!------------------------------------------------------------------------------ +! +! It is more advantageous to set the horizontal and vertical advection schemes +! for each tracer with switches instead of a single CPP flag for all of them. +! Positive-definite and monotonic algorithms (i.e., MPDATA and HSIMT) are +! appropriate and useful for positive fields like salinity, inert, biological, +! and sediment tracers. However, since the temperature has a dynamic range +! with negative and positive values in the ocean, other advection schemes are +! more appropriate. +! +! Currently, the following tracer advection schemes are available and are +! activated using the associated Keyword: +! +! Keyword Advection Algorithm +! +! A4 4th-order Akima (horizontal/vertical) +! C2 2nd-order centered differences (horizontal/vertical) +! C4 4th-order centered differences (horizontal/vertical) +! HSIMT 3th-order HSIMT with TVD limiter (horizontal/vertical) +! MPDATA recursive flux corrected MPDATA (horizontal/vertical) +! SPLINES parabolic splines reconstruction (only vertical) +! SU3 split third-order upstream (horizontal/vertical) +! U3 3rd-order upstresm-bias (only horizontal) +! +! The user has the option of specifying the full Keyword or the first +! two letters, regardless if using uppercase or lowercase. +! +! If using either HSIMT (Wu and Zhu, 2010) or MPDATA (Margolin and +! Smolarkiewicz, 1998) options, the user needs to set the same scheme +! for both horizontal and vertical advection to preserve monotonicity. +! +! Hadvection Horizontal advection for each active (temperature and +! salinity) and inert tracers, [1:NAT+NPT,Ngrids] +! values are expected. +! +! Vadvection Vertical advection for each active (temperature and +! salinity) and inert tracers, [1:NAT+NPT,Ngrids] +! values are expected. +! +! ad_Hadvection Horizontal advection for each active (temperature and +! salinity) and inert tracers in the adjoint-based +! algorithms, [1:NAT+NPT,Ngrids] values are expected. +! +! ad_Vadvection Vertical advection for each active (temperature and +! salinity) and inert tracers in the adjoint-based +! algorithms, [1:NAT+NPT,Ngrids] values are expected. +! +! Examples: +! +! Hadvection == A4 \ ! temperature +! MPDATA \ ! salinity +! HSIMT \ ! dye_01, inert(1) +! HSIMT ! dy2_02, inert(2) +! +! Vadvection == A4 \ ! temperature +! MPDATA \ ! salinity +! HSIMT \ ! dye_01, inert(1) +! HSIMT ! dye_02, inert(2) +! +! or in nested applications +! +! Hadvection == U3 \ ! temperature, Grid 1 +! HSIMT \ ! salinity, Grid 1 +! U3 \ ! temperature, Grid 2 +! HSIMT \ ! salinity, Grid 2 +! U3 \ ! temperature, Grid 3 +! HSIMT ! salinity, Grid 3 +! +! Vadvection == C4 \ ! temperature, Grid 1 +! HSIMT \ ! salinity, Grid 1 +! C4 \ ! temperature, Grid 2 +! HSIMT \ ! salinity, Grid 2 +! C4 \ ! temperature, Grid 3 +! HSIMT ! salinity, Grid 3 +! +!------------------------------------------------------------------------------ +! Lateral boundary conditions parameters. +!------------------------------------------------------------------------------ +! +! The lateral boundary conditions are now specified with logical switches +! instead of CPP flags to allow nested grid configurations. Their values are +! loaded into structured array: +! +! LBC(1:4, nLBCvar, Ngrids) +! +! where 1:4 are the number of boundary edges, nLBCvar are the number of LBC +! state variables, and Ngrids is the number of nested grids. For Example, to +! apply gradient boundary conditions we use: +! +! LBC(iwest, isFsur, ng) % gradient +! LBC(ieast, ... , ng) % gradient +! LBC(isouth, ... , ng) % gradient +! LBC(inorth, ... , ng) % gradient +! +! The lateral boundary conditions are entered with a keyword. This keyword +! is case insensitive and usually has three characters. However, it is +! possible to have compound keywords, if applicable. For example, the +! keyword "RadNud" implies radiation boundary condition with nudging. This +! combination is usually used in active/passive radiation conditions. +! +! Keyword Lateral Boundary Condition Type +! +! Cha Chapman_implicit (free-surface only) +! Che Chapman_explicit (free-surface only) +! Cla Clamped +! Clo Closed +! Fla Flather (2D momentum only) _____N_____ j=Mm +! Gra Gradient | 4 | +! Nes Nested (refinement only) | | +! Nud Nudging 1 W E 3 +! Per Periodic | | +! Rad Radiation |_____S_____| +! Red Reduced Physics (2D momentum only) 2 j=1 +! Shc Shchepetkin (2D momentum only) i=1 i=Lm +! +! LBC(isFsur) Free-surface, [1:4, Ngrids] values are expected. +! LBC(isUbar) 2D U-momentum, [1:4, Ngrids] values are expected. +! LBC(isVbar) 2D V-momentum, [1:4, Ngrids] values are expected. +! LBC(isUvel) 3D U-momentum, [1:4, Ngrids] values are expected. +! LBC(isVvel) 3D V-momentum, [1:4, Ngrids] values are expected. +! LBC(isMtke) Mixing TKE, [1:4, Ngrids] values are expected. +! LBC(isTvar) Tracers, [1:4, 1:NAT+NPT, Ngrids] values are expected. +! +! WEC boundary conditions for Stokes velocities: +! +! LBC(isU2Sd) 2D U-Stokes, [1:4, Ngrids] values are expected. +! LBC(isV2Sd) 2D V-Stokes, [1:4, Ngrids] values are expected. +! LBC(isU3Sd) 3D U-Stokes, [1:4, Ngrids] values are expected. +! LBC(isV3Sd) 3D V-Stokes, [1:4, Ngrids] values are expected. +! +! Similarly, the adjoint-based algorithms (ADM, TLM, RPM) can have different +! lateral boundary conditions keywords: +! +! ad_LBC(isFsur) Free-surface, [1:4, Ngrids] values are expected. +! ad_LBC(isUbar) 2D U-momentum, [1:4, Ngrids] values are expected. +! ad_LBC(isVbar) 2D V-momentum, [1:4, Ngrids] values are expected. +! ad_LBC(isUvel) 3D U-momentum, [1:4, Ngrids] values are expected. +! ad_LBC(isVvel) 3D V-momentum, [1:4, Ngrids] values are expected. +! ad_LBC(isMtke) Mixing TKE, [1:4, Ngrids] values are expected. +! ad_LBC(isTvar) Tracers, [1:4, 1:NAT+NPT, Ngrids] values are expected. +! +! Lateral open boundary edge volume conservation switch for nonlinear model +! and adjoint-based algorithm. Usually activated with radiation boundary +! conditions to enforce global mass conservation. Notice that these switches +! should not be activated if tidal forcing is enabled, [1:Ngrids] values are +! expected. +! +! VolCons(west) Western boundary volume conservation switch. +! VolCons(east) Eastern boundary volume conservation switch. +! VolCons(south) Southern boundary volume conservation switch. +! VolCons(north) Northern boundary volume conservation switch. +! +! ad_VolCons(west) Western boundary volume conservation switch. +! ad_VolCons(east) Eastern boundary volume conservation switch. +! ad_VolCons(south) Southern boundary volume conservation switch. +! ad_VolCons(north) Northern boundary volume conservation switch. +! +!------------------------------------------------------------------------------ +! Timestepping parameters. +!------------------------------------------------------------------------------ +! +! NTIMES Total number of timesteps in current run. If 3D configuration, +! NTIMES is the total of baroclinic timesteps. If only 2D +! configuration, NTIMES is the total of barotropic timesteps. +! +! DT TimeStep size in seconds. If 3D configuration, DT is the +! size of the baroclinic timestep. If only 2D configuration, +! DT is the size of the barotropic timestep. +! +! NDTFAST Number of barotropic timesteps between each baroclinic time +! step. If only 2D configuration, NDTFAST should be unity since +! there is no need to split timestepping. +! +! NTIMES_ANA Total number of timesteps for computing observations impacts +! interval during the analysis cycle. It is only used when +! RBL4DVAR_FCT_SENSITIVITY is activated. +! +! NTIMES_FCT Total number of timesteps for computing observations impacts +! interval during the forecast cycle. It is only used when +! RBL4DVAR_FCT_SENSITIVITY is activated. +! +!------------------------------------------------------------------------------ +! Model iteration loops parameters. +!------------------------------------------------------------------------------ +! +! ERstr Starting ensemble run (perturbation or iteration) number. +! +! ERend Ending ensemble run (perturbation or iteration) number. +! +! Nouter Maximum number of 4DVAR outer loop iterations. +! +! Ninner Maximum number of 4DVAR inner loop iterations. +! +! Nsaddle Number of kernel trajectory intervals for the solution of the +! Saddle-Point 4D-Var (SP4DVAR). It is used to accelerate +! 4D-Var by parallelizing the inner loops in time. The tangent +! linear and adjoint models are time-stepped concurrently over +! the short time integration windows. Make sure that +! +! MOD(NTIMES/NHIS, Nsaddle) = 0 +! +! for legal computations. +! +! Nintervals Number of time interval divisions for Stochastic Optimals +! computations. It must be a multiple of NTIMES. The tangent +! linear model (TLM) and the adjoint model (ADM) are integrated +! forward and backward at different intervals. For example, +! if Nintervals=3, +! +! 1 NTIMES/3 2*NTIMES/3 NTIMES +! +..................+..................+..................+ +! <========================================================> (1) +! <=====================================> (2) +! <==================> (3) +! +! In the first iteration (1), the TLM is integrated forward from +! 1 to NTIMES and the ADM is integrated backward from NTIMES to 1. +! In the second iteration (2), the TLM is integrated forward from +! NTIMES/3 to NTIMES and the ADM is integrated backward from +! NTIMES to NTIMES/3. And so on. +! +!------------------------------------------------------------------------------ +! Eigenproblem parameters. +!------------------------------------------------------------------------------ +! +! NEV Number of eigenvalues to compute for the Lanczos/Arnoldi +! problem. Notice that the model memory requirement increases +! substantially as NEV increases. The GST requires NEV+1 +! copies of the model state vector. The memory requirements +! are decreased in distributed-memory applications. +! +! NCV Number of eigenvectors to compute for the Lanczos/Arnoldi +! problem. NCV must be greater than NEV. +! +! At present, there is no apriori analysis to guide the selection of NCV +! relative to NEV. The only formal requirement is that NCV > NEV. However +! in optimal perturbations, it is recommended to have NCV greater than or +! equal to 2*NEV. In Finite Time Eigenmodes (FTE) and Adjoint Finite Time +! Eigenmodes (AFTE) the requirement is to have NCV greater than or equal to +! 2*NEV+1. +! +! The efficiency of calculations depends critically on the combination of +! NEV and NCV. If NEV is large (greater than 10 say), you can use NCV=2*NEV+1 +! but for NEV small (less than 6) it will be inefficient to use NCV=2*NEV+1. +! In complicated applications, you can start with NEV=2 and NCV=10. Otherwise, +! it will iterate for a very long time. +! +!------------------------------------------------------------------------------ +! Input/Output parameters. +!------------------------------------------------------------------------------ +! +! NRREC Switch to indicate re-start from a previous solution. Use +! NRREC=0 for new solutions. In a re-start solution, NRREC +! is the time index of the re-start NetCDF file assigned for +! initialization. If NRREC is negative (say NRREC=-1), the +! model will re-start from the most recent time record. That +! is, the initialization record is assigned internally. +! Notice that it is also possible to re-start from a history +! or time-averaged NetCDF file. If a history file is used +! for re-start, it must contains all the necessary primitive +! variables at all levels. +! +! LcycleRST Logical switch (T/F) used to recycle time records in output +! restart file. If TRUE, only the latest two re-start time +! records are maintained. If FALSE, all re-start fields are +! saved every NRST timesteps without recycling. The restart +! fields are written at all levels in double precision. +! +! NRST Number of timesteps between the writing of re-start fields. +! Set NRST=0 to suppress writing of RESTART file. +! +! NSTA Number of timesteps between writing data into STATIONS file. +! Station data is written at all levels. +! +! NFLT Number of timesteps between writing data into FLOATS file. +! +! NINFO Number of timesteps between the print of single line information +! to standard output. It also determines the interval between +! computation of global energy diagnostics. +! +!------------------------------------------------------------------------------ +! Output HISTORY, QUICKSAVE, AVERAGE and DIAGNOSTIC files parameters. +!------------------------------------------------------------------------------ +! +! Notice that it is possible to have two types of output NetCDF files for +! instantaneous fields: HISTORY and QUICKSAVE. The QUICKSAVE file can be used +! for writing fewer fields at shorter time intervals. For example, the User +! may just write 2D and surface fields frequently (hourly) to reduce file +! size and to time resolve fast dynamics. In conjunction, the User may write +! full HISTORY fields infrequently (daily, weekly, etc) to avoid creating +! large output files. This gives a lot of flexibility to manage ROMS output. +! +! +! LDEFOUT Logical switch (T/F) used to create new output files when +! initializing from a re-start file, abs(NRREC) > 0. If TRUE +! and applicable, a new HISTORY, QUICKSAVE, AVERAGE, DIAGNOSTIC +! and STATIONS files are created during the initialization +! stage. If FALSE and applicable, data is appended to existing +! HISTORY, QUICKSAVE, AVERAGE, DIAGNOSTIC and STATIONS files. +! See also parameters NDEFHIS, NDEFQCK, NDEFAVG and NDEFDIA +! below. +! +! NHIS Number of timesteps between writing fields into the HISTORY +! file. Set NHIS=0 to suppress writing of HISTORY file. +! +! NDEFHIS Number of timesteps between the creation of new HISTORY file. +! If NDEFHIS=0, the model will only process one HISTORY file. +! This feature is useful for extended simulations when HISTORY +! file get too large; it creates a new file every NDEFHIS +! timesteps. +! +! NQCK Number of timesteps between writing fields into QUICKSAVE file. +! Set NQCK=0 to suppress writing of QUICKSAVE file. +! +! NDEFQCK Number of timesteps between the creation of new QUICKSAVE file. +! If NDEFQCK=0, the model will only process one QUICKSAVE file. +! This feature is useful for extended simulations when QUICKSAVE +! file get too large; it creates a new file every NDEFQCK +! timesteps. +! +! NTSAVG Starting timestep for the accumulation of output time-averaged +! data. +! +! NAVG Number of timesteps between writing time-averaged data +! into AVERAGE file. Averaged date is written for all fields. +! Set NAVG=0 to suppress writing of AVERAGE file. +! +! NDEFAVG Number of timesteps between the creation of new AVERAGE +! file. If NDEFAVG=0, the model will only process one AVERAGE +! file. This feature is useful for extended simulations when +! AVERAGE file get too large; it creates a new file every +! NDEFAVG timesteps. +! +! NTSDIA Starting timestep for the accumulation of output time-averaged +! diagnostics data. +! +! NDIA Number of timesteps between writing time-averaged diagnostics +! data into DIAGNOSTIC file. Averaged date is written for all +! fields. Set NDIA=0 to suppress writing of DIAGNOSTIC file. +! +! NDEFDIA Number of timesteps between the creation of new time-averaged +! diagnostics file. If NDEFDIA=0, the model will only process +! one DIAGNOSTICS file. This feature is useful for long +! simulations when DIAGNOSTIC file get too large; it creates +! a new file every NDEFDIA timesteps. +! +!------------------------------------------------------------------------------ +! Output tangent linear and adjoint model parameters. +!------------------------------------------------------------------------------ +! +! LcycleTLM Logical switch (T/F) used to recycle time records in output +! tangent linear file. If TRUE, only the latest two time +! records are maintained. If FALSE, all tangent linear fields +! are saved every NTLM timesteps without recycling. +! +! NTLM Number of timesteps between writing fields into tangent linear +! model file. +! +! NDEFTLM Number of timesteps between the creation of new tangent linear +! file. If NDEFTLM=0, the model will only process one tangent +! linear file. This feature is useful for extended simulations +! when output NetCDF files get too large; it creates a new file +! every NDEFTLM timesteps. +! +! LcycleADJ Logical switch (T/F) used to recycle time records in output +! adjoint file. If TRUE, only the latest two time records are +! maintained. If FALSE, all tangent linear fields are saved +! every NADJ timesteps without recycling. +! +! NADJ Number of timesteps between writing fields into the adjoint +! model file. +! +! NDEFADJ Number of timesteps between the creation of the new adjoint +! file. If NDEFADJ=0, the model will only process one adjoint +! file. This feature is useful for extensive simulations when +! the output NetCDF files get too large; it creates a new file +! every NDEFADJ timesteps. +! +! NSFF Number of timesteps between 4DVAR adjustment of surface forcing +! fluxes. In strong constraint 4DVAR, it is possible to adjust +! surface forcing at other time intervals in addition to initial +! time. This parameter is used to store the appropriate number +! of surface forcing records in the output history NetCDF files: +! 1+NTIMES/NSFF records. NSFF must be a factor of NTIMES or +! greater than NTIMES. If NSFF > NTIMES, only one record is +! stored in the NetCDF files and the adjustment is for constant +! forcing with constant correction. This parameter is only +! relevant in 4DVAR when activating either ADJUST_STFLUX or +! ADJUST_WSTRESS. +! +! NOBC Number of timesteps between 4DVAR adjustment of open boundary +! fields. In strong constraint 4DVAR, it is possible to adjust +! open boundaries at other time intervals in addition to initial +! time. This parameter is used to store the appropriate number +! of open boundary records in the output history NetCDF files: +! 1+NTIMES/NOBC records. NOBC must be a factor of NTIMES or +! greater than NTIMES. If NOBC > NTIMES, only one record is +! stored in the NetCDF files and the adjustment is for constant +! forcing with constant correction. This parameter is only +! relevant in 4DVAR when activating ADJUST_BOUNDARY. +! +!------------------------------------------------------------------------------ +! Generalized Stability Theory (GST) analysis parameters. +!------------------------------------------------------------------------------ +! +! LmultiGST Logical switch (TRUE/FALSE) to write out one GST analysis +! eigenvector per history file. +! +! LrstGST Logical switch (TRUE/FALSE) to restart GST analysis. If TRUE, +! the check pointing data is read in from the GST restart NetCDF +! file. If FALSE and applicable, the checkpointing GST data is +! saved and overwritten every NGST iterations of the algorithm. +! +! MaxIterGST Maximum number of GST algorithm iterations. +! +! NGST Number of GST iterations between storing of check pointing +! data into NetCDF file. The restart data is always saved if +! MaxIterGST is reached without convergence. It is also saved +! when convergence is achieved. It is always a good idea to +! save the checkpointing data at regular intervals so there +! is a mechanism to recover from an unexpected interruption +! in this costly computation. The check pointing data can +! be used also to recompute the Ritz vectors by changing some +! of the parameters, like convergence criteria (Ritz_tol) +! and number of Arnoldi iterations (iparam(3)). +! +! Ritz_tol Relative accuracy of the Ritz values computed in the GST +! analysis. +! +!------------------------------------------------------------------------------ +! Harmonic/Biharmonic horizontal diffusion for active tracers and viscosity +! for momentum. +!------------------------------------------------------------------------------ +! +! TNU2 Nonlinear model lateral, harmonic, constant, mixing +! coefficient (m2/s) for active (NAT) and inert (NPT) tracer +! variables. If variable horizontal diffusion is activated, +! TNU2 is the mixing coefficient for the largest grid-cell +! in the domain. +! +! TNU4 Nonlinear model lateral, biharmonic, constant, mixing +! coefficient (m4/s) for active (NAT) and inert (NPT) tracer +! variables. If variable horizontal diffusion is activated, +! TNU4 is the mixing coefficient for the largest grid-cell +! in the domain. +! +! ad_TNU2 Adjoint-based algorithms lateral, harmonic, constant, mixing +! coefficient (m2/s) for active (NAT) and inert (NPT) tracer +! variables. If variable horizontal diffusion is activated, +! ad_TNU2 is the mixing coefficient for the largest grid-cell +! in the domain. In some applications, a larger value than +! that used in the nonlinear model (basic state) is necessary +! for stability. +! +! ad_TNU4 Adjoint-based algorithms lateral, biharmonic, constant, mixing +! coefficient (m4/s) for active (NAT) and inert (NPT) tracer +! variables. If variable horizontal diffusion is activated, +! ad_TNU4 is the mixing coefficient for the largest grid-cell +! in the domain. In some applications, a larger value than +! that used in the nonlinear model (basic state) is necessary +! for stability. +! +! VISC2 Nonlinear model lateral, harmonic, constant, mixing +! coefficient (m2/s) for momentum. If variable horizontal +! viscosity is activated, UVNU2 is the mixing coefficient +! for the largest grid-cell in the domain. +! +! VISC4 Nonlinear model lateral, biharmonic, constant mixing +! coefficient (m4/s) for momentum. If variable horizontal +! viscosity is activated, UVNU4 is the mixing coefficient +! for the largest grid-cell in the domain. +! +! ad_VISC2 Adjoint-based algorithms lateral, harmonic, constant, mixing +! coefficient (m2/s) for momentum. If variable horizontal +! viscosity is activated, ad_UVNU2 is the mixing coefficient +! for the largest grid-cell in the domain. In some applications, +! a larger value than that used in the nonlinear model (basic +! state) is necessary for stability. +! +! ad_VISC4 Adjoint-based algorithms lateral, biharmonic, constant mixing +! coefficient (m4/s) for momentum. If variable horizontal +! viscosity is activated, ad_UVNU4 is the mixing coefficient +! for the largest grid-cell in the domain. In some applications, +! a larger value than that used in the nonlinear model (basic +! state) is necessary for stability. +! +!------------------------------------------------------------------------------ +! Switches to activate sponge areas with enhanced horizontal mixing. +!------------------------------------------------------------------------------ +! +! LuvSponge Logical switch (TRUE/FALSE) to increase/decrease horizontal +! viscosity in specific areas of the domain. It can be used +! to specify sponge areas with larger horizontal mixing +! coefficients for damping of high frequency noise due to +! open boundary conditions or nesting. The CPP option SPONGE +! is now deprecated and replaced with this switch to facilitate +! or not sponge areas over a particular nested grid. +! +! The horizontal mixing distribution is specified in +! "ini_hmixcoef.F" as: +! +! visc2_r(i,j) = visc_factor(i,j) * visc2_r(i,j) +! visc4_r(i,j) = visc_factor(i,j) * visc4_r(i,j) +! +! The variable "visc_factor" can be read from the grid +! NetCDF file. Alternately, the horizontal viscosity in the +! sponge area can be set-up with analytical functions in +! "ana_sponge.h" using CPP ANA_SPONGE when the switch +! "LuvSponge" is turned ON for a particular grid. +! +! LtracerSponge Logical switch (TRUE/FALSE) to increase/decrease horizontal +! diffusivity in specific areas of the domain. It can be used +! to specify sponge areas with larger horizontal mixing +! coefficients for damping of high frequency noise due to +! open boundary conditions or nesting. The CPP option SPONGE +! is now deprecated and replaced with this switch to facilitate +! or not sponge areas over a particular nested grid. +! +! The horizontal mixing distribution is specified in +! "ini_hmixcoef.F" as: +! +! diff2(i,j,itrc) = diff_factor(i,j) * diff2(i,j,itrc) +! diff4(i,j,itrc) = diff_factor(i,j) * diff4(i,j,itrc) +! +! The variable "diff_factor" can be read from the grid +! NetCDF file. Alternately, the horizontal viscosity in the +! sponge area can be set-up with analytical functions in +! "ana_sponge.h" using CPP ANA_SPONGE when the switch +! "LuvSponge" is turned ON for a particular grid. +! +!------------------------------------------------------------------------------ +! Vertical mixing coefficients for active tracers. +!------------------------------------------------------------------------------ +! +! AKT_BAK Background vertical mixing coefficient (m2/s) for active +! (NAT) and inert (NPT) tracer variables. +! +! AKT_LIMIT Upper threshold values to limit vertical diffusion coefficients +! computed from vertical mixing parameterizations (GLS_MIXING, +! LMD_MIXING, MY25_MIXING). Sometimes, these parameterizations +! yield high mixing values and the threshold values are used as +! upper limiter when LIMIT_VDIFF is activated. +! +! ad_AKT_fac Adjoint-based algorithms vertical mixing, basic state, scale +! factor (nondimensional) for active (NAT) and inert (NPT) +! tracer variables. In some applications, smaller/larger +! values of vertical mixing are necessary for stability. It +! is only used when FORWARD_MIXING is activated. +! +!------------------------------------------------------------------------------ +! Vertical mixing coefficient for momentum. +!------------------------------------------------------------------------------ +! +! AKV_BAK Background vertical mixing coefficient (m2/s) for momentum. +! +! AKV_LIMIT Upper threshold value to limit vertical viscosity coefficient +! computed from vertical mixing parameterizations (GLS_MIXING, +! LMD_MIXING, MY25_MIXING). Sometimes, these parameterizations +! yield a high mixing value and the threshold value is used as +! upper limiter when LIMIT_VVISC is activated. +! +! ad_AKV_fac Adjoint-based algorithms vertical mixing, basic state, scale +! factor (nondimensional) for momentum. In some applications, +! smaller/larger values of vertical mixing are necessary for +! stability. It is only used when FORWARD_MIXING is activated. +! +!------------------------------------------------------------------------------ +! Turbulent closure parameters. +!------------------------------------------------------------------------------ +! +! AKK_BAK Background vertical mixing coefficient (m2/s) for turbulent +! kinetic energy. +! +! AKP_BAK Background vertical mixing coefficient (m2/s) for turbulent +! generic statistical field, "psi". +! +! TKENU2 Lateral, harmonic, constant, mixing coefficient (m2/s) for +! turbulent closure variables. +! +! TKENU4 Lateral, biharmonic, constant mixing coefficient (m4/s) for +! turbulent closure variables. +! +!------------------------------------------------------------------------------ +! Generic length-scale turbulence closure parameters. +!------------------------------------------------------------------------------ +! +! GLS_P Stability exponent (nondimensional). +! +! GLS_M Turbulent kinetic energy exponent (nondimensional). +! +! GLS_N Turbulent length scale exponent (nondimensional). +! +! GLS_Kmin Minimum value of specific turbulent kinetic energy +! +! GLS_Pmin Minimum Value of dissipation. +! +! Closure independent constraint parameters (nondimensional): +! +! GLS_CMU0 Stability coefficient. +! +! GLS_C1 Shear production coefficient. +! +! GLS_C2 Dissipation coefficient. +! +! GLS_C3M Buoyancy production coefficient (minus). +! +! GLS_C3P Buoyancy production coefficient (plus). +! +! GLS_SIGK Constant Schmidt number (nondimensional) for turbulent +! kinetic energy diffusivity. +! +! GLS_SIGP Constant Schmidt number (nondimensional) for turbulent +! generic statistical field, "psi". +! +! Suggested values for various parameterizations: +! +! k-kl k-epsilon k-omega gen +! +! GLS_P = 0.d0 3.0d0 -1.0d0 2.0d0 +! GLS_M = 1.d0 1.5d0 0.5d0 1.0d0 +! GLS_N = 1.d0 -1.0d0 -1.0d0 -0.67d0 +! GLS_Kmin = 5.0d-6 7.6d-6 7.6d-6 1.0d-8 +! GLS_Pmin = 5.0d-6 1.0d-12 1.0d-12 1.0d-8 +! +! GLS_CMU0 = 0.5544d0 0.5477d0 0.5477d0 0.5544d0 +! GLS_C1 = 0.9d0 1.44d0 0.555d0 1.00d0 +! GLS_C2 = 0.52d0 1.92d0 0.833d0 1.22d0 +! GLS_C3M = 2.5d0 -0.4d0 -0.6d0 0.1d0 +! GLS_C3P = 1.0d0 1.0d0 1.0d0 1.0d0 +! GLS_SIGK = 1.96d0 1.0d0 2.0d0 0.8d0 +! GLS_SIGP = 1.96d0 1.30d0 2.0d0 1.07d0 +! +!------------------------------------------------------------------------------ +! Constants used in the various formulations of surface turbulent kinetic +! energy flux in the GLS. +!------------------------------------------------------------------------------ +! +! CHARNOK_ALPHA Charnock surface roughness, +! Zos: (charnok_alpha * u_star**2) / g +! +! ZOS_HSIG_ALPHA Roughness from wave amplitude, +! Zos: zos_hsig_alpha * Hsig +! +! SZ_ALPHA Surface flux from wave dissipation, +! flux: dt * sz_alpha * Wave_dissip +! +! CRGBAN_CW Surface flux due to Craig and Banner wave breaking, +! flux: dt * crgban_cw * u_star**3 +! +!------------------------------------------------------------------------------ +! Constants used in the Waves Effect on Currents formulations. +!------------------------------------------------------------------------------ +! +! WEC_ALPHA Wave dissipation action scale bounds: +! +! [0.0] All dissipation goes to breaking and none to roller +! [1.0] All dissipation goes to roller and none to breaking +! +!------------------------------------------------------------------------------ +! Constants used in the computation of momentum stress. +!------------------------------------------------------------------------------ +! +! RDRG Linear bottom drag coefficient (m/s). +! +! RDRG2 Quadratic bottom drag coefficient. +! +! Zob Bottom roughness (m). +! +! Zos Surface roughness (m). +! +!------------------------------------------------------------------------------ +! Height of atmospheric measurements for bulk fluxes parameterization. +!------------------------------------------------------------------------------ +! +! BLK_ZQ Height (m) of surface air humidity measurement. Usually, +! recorded at 10 m. +! +! BLK_ZT Height (m) of surface air temperature measurement. Usually, +! recorded at 2 or 10 m. +! +! BLK_ZW Height (m) of surface winds measurement. Usually, recorded +! at 10 m. +! +!------------------------------------------------------------------------------ +! Wetting and drying parameters. +!------------------------------------------------------------------------------ +! +! DCRIT Minimum depth (m) for wetting and drying. +! +!------------------------------------------------------------------------------ +! Jerlov Water type. +!------------------------------------------------------------------------------ +! +! WTYPE Jerlov water type array index used to model the light absorption +! with a double exponential function (Paulson and Simpson, +! 1977). The classification ranges from clear open ocean +! waters (type I) to dark turbulent coastal waters (type 7). +! +! Array Jerlov +! Index Water Type Examples +! ----- ---------- -------- +! +! 1 I Open Pacific +! 2 IA Eastern Mediterranean, Indian Ocean +! 3 IB Western Mediterranean, Open Atlantic +! 4 II Coastal waters, Azores +! 5 III Coastal waters, North Sea +! 6 1 Skagerrak Strait +! 7 3 Baltic +! 8 5 Black Sea +! 9 7 Dark coastal water +! +!------------------------------------------------------------------------------ +! Body-force parameters. Used when CPP option BODYFORCE is activated. +!------------------------------------------------------------------------------ +! +! LEVSFRC Deepest level to apply surface momentum stress as a body-force. +! +! LEVBFRC Shallowest level to apply bottom momentum stress as a body-force. +! +!------------------------------------------------------------------------------ +! Vertical S-coordinates parameters. +!------------------------------------------------------------------------------ +! +! The parameters below must be consistent in all input fields associated with +! the vertical grid. The same vertical grid transformation (depths) needs to +! be used when preparing initial conditions, boundary conditions, climatology, +! observations, and so on. Please check: +! +! https://www.myroms.org/wiki/index.php/Vertical_S-coordinate +! +! for details, rules and examples. +! +! +! Vtransform Vertical transformation equation: +! +! (1) Original formulation (Shchepetkin and McWilliams, 2005), +! Vtransform=1 (In ROMS since 1999) +! +! z(x,y,s,t)=Zo(x,y,s)+zeta(x,y,t)*[1+Zo(x,y,s)/h(x,y)] +! +! where +! +! Zo(x,y,s)=hc*s+[h(x,y)-hc]*C(s) +! +! (2) Improved formulation (A. Shchepetkin, 2005), +! Vtransform=2 +! +! z(x,y,s,t)=zeta(x,y,t)*[zeta(x,y,t)+h(x,y)]*Zo(x,y,s) +! +! where +! +! Zo(x,y,s)=[hc*s(k)+h(x,y)*C(k)]/[hc+h(x,y)] +! +! The true sigma-coordinate system is recovered as hc goes +! to INFINITY. This is useful when configuring applications +! with flat bathymetry and uniform level thickness. +! Practically, you can achieve this by setting: +! +! THETA_S = 0.0d0 +! THETA_B = 0.0d0 +! TCLINE = 1.0d+17 (a large number) +! +! +! Vstretching Vertical stretching function, C(s): +! +! (1) Original function (Song and Haidvogel, 1994), +! Vstretching=1 +! +! C(s)=(1-theta_b)*[SINH(s*theta_s)/SINH(theta_s)]+ +! theta_b*[-0.5+0.5*TANH(theta_s*(s+0.5))/ +! TANH(0.5*theta_s)] +! +! (2) A. Shchepetkin (2005) function, +! Vstretching=2 +! +! C(s)=Cweight*Csur(s)+(1-Cweight)*Cbot(s) +! +! where +! +! Csur(s)=[1-COSH(theta_s*s)]/[COSH(theta_s)-1] +! +! Cbot(s)=-1+[1-SINH(theta_b*(s+1))]/SINH(theta_b) +! +! Cweight=(s+1)**alpha* +! (1+(alpha/beta)*(1-(s+1)**beta)) +! +! (3) R. Geyer function for shallow sediment applications, +! Vstretching=3 +! +! C(s)=Cweight*Cbot(s)+(1-Cweight)*Csur(s) +! +! where +! +! Csur(s)=-LOG(COSH(Hscale*ABS(s)** alpha))/ +! LOG(COSH(Hscale)) +! +! Cbot(s)= LOG(COSH(Hscale*(s+1)** beta))/ +! LOG(COSH(Hscale))-1 +! +! Cweight=0.5*(1-TANH(Hscale*(s+0.5)) +! +! (4) A. Shchepetkin (2010) improved double stretching function, +! Vstretching=4 +! +! C(s)=[1-COSH(theta_s*s)]/[COSH(theta_s)-1] +! +! with bottom refinement +! +! C(s)=[EXP(theta_b*C(s))-1]/[1-EXP(-theta_b)] +! +! The resulting double transformation is continuous with +! respect control parameters theta_s and theta_b with a +! meaningful range of: +! +! 0 < theta_s <= 10.0 +! 0 <= theta_b <= 4.0 +! +! (5) Souza et al. (2015) quadratic Legendre polynomial function +! that allows higher resolution near the surface, +! Vstretching=5. It is similar to Vstretching=4, but the +! fractional stretched vertical coordinate (s) is re-defined +! as: +! +! s(k)=- [(k*k - 2*k*N + k + N*N - N) / (N*N - N)] +! - weight * [(k*k - k*N) / (1 - N)] +! +! at vertical W-points, k=0,...,N and weight=0.01. To get +! the equation at vertical RHO-points, replace k with k-0.5. +! +! Many other stretching functions (Vstretching>5) are possible +! provided that: +! +! * C(s) is a dimensionless, nonlinear, monotonic function. +! * C(s) is a continuous differentiable function, or +! a differentiable piecewise function with smooth transition. +! * The stretching vertical coordinate ,s, is constrained +! between -1 <= s <= 0, with s=0 corresponding to the +! free-surface and s=-1 corresponding to the bathymetry. +! * Similarly, the stretching function, C(s), is constrained +! between -1 <= C(s) <= 0, with C(0)=0 corresponding to the +! free-surface and C(-1)=-1 corresponding to the bathymetry. +! +! These functions are coded in routine "Utility/set_scoord.F". +! +! Due to its functionality and properties, the default and recommended vertical +! coordinates transformation is: +! +! Vtransform = 2 +! Vstretching = 4 +! +! +! THETA_S S-coordinate surface control parameter. The range of optimal +! values depends on the vertical stretching function, C(s). +! +! THETA_B S-coordinate bottom control parameter. The range of optimal +! values depends on the vertical stretching function, C(s). +! +! TCLINE Critical depth (hc) in meters (positive) controlling the +! stretching. It can be interpreted as the width of surface or +! bottom boundary layer in which higher vertical resolution +! (levels) is required during stretching. +! +!------------------------------------------------------------------------------ +! Mean Density and background Brunt-Vaisala frequency. +!------------------------------------------------------------------------------ +! +! RHO0 Mean density (Kg/m3) used when the Boussinesq approximation +! is inferred. +! +! BVF_BAK Background Brunt-Vaisala frequency squared (1/s2). Typical +! values for the ocean range (as a function of depth) from +! 1.0E-4 to 1.0E-6. +! +!------------------------------------------------------------------------------ +! Tide Genearting Forces (TGF) parameter. +!------------------------------------------------------------------------------ +! +! Lnodal Switch to account for the slow modulation of the equilibrium +! tides constituents due primarily to the 18.6-year lunar nodal +! cycle. +! +!------------------------------------------------------------------------------ +! Time Stamps. +!------------------------------------------------------------------------------ +! +! DSTART Time stamp assigned to model initialization (days). Usually +! a Calendar linear coordinate, like modified Julian Day. For +! Example: +! +! Julian Day = 1 for Nov 25, 00:00:00 4713 BCE +! modified Julian Day = 1 for May 24, 00:00:00 1968 GMT +! Days since Jan 1, 2000 = 988.5 for Sep 15, 12:00:00 2002 +! +! It is called truncated or modified Julian day because an +! offset of 2440000 needs to be added. +! +! TIDE_START Reference time origin for tidal forcing (days since application +! reference date, TIME_REF). It is defined as the time of phase +! zero when preparing the input forcing tidal boundary data. The +! tide reference time is important and often ignored parameter +! by the users. If TIDE_START=0.0, it implies that the date of +! zero phase is the same as the application date reference, +! TIME_REF. +! +! To avoid any ambiguity with the tide generating forcing in the +! pressure gradient, it is preferable if the "zero_phase_date" +! variable is available in the input tidal forcing NetCDF file. +! It is a floating-point variable of the form YYYYMMDD.dddd with +! the following metadata: +! +! double zero_phase_date +! zero_phase_date:long_name = "tidal reference date for zero phase" +! zero_phase_date:units = "days as %Y%m%d.%f" +! zero_phase_date:C_format = "%13.4f" +! zero_phase_date:FORTRAN_format = "(f13.4)" +! +! Use "forcing/add_tide_date.m" from the ROMS Matlab repository +! to add the "zero_phase_date" variable to your existing tidal +! forcing NetCDF file. It is highly recommended to use this +! approach. If such a variable is found, the TIDE_START value +! will overwritten during execution. +! +! Notice that it is possible to have different reference values +! for "zero_phase_date" and ROMS clock defined as seconds from +! reference date TIME_REF. If TIME_REF is earlier than variable +! "zero_phase_date", the frequencies (omega) to harmonic terms +! will be negative since they are computed as follows: +! +! tide_start = Rclock%tide_DateNumber(2) - +! Rclock%DateNumber(2)) +! omega = 2 * pi * (time - tide_start) / Tperiod +! +! TIME_REF Reference time (yyyymmdd.f) used to compute relative time: +! elapsed time interval since reference-time. The "units" +! attribute takes the form "time-unit since reference-time". +! This parameter also provides information about the calendar +! used: +! +! If TIME_REF = -2, model time and DSTART are in modified Julian +! days units. The "units" attribute is: +! +! 'time-units since 1968-05-23 00:00:00 GMT' (May 23, 1968) +! +! If TIME_REF = -1, model time and DSTART are in a calendar +! with 360 days in every year (30 days each month). The "units" +! attribute is: +! +! 'time-units since 0000-12-30 00:00:00' (Dec 30, 0000) +! +! If TIME_REF = 0, model time and DSTART are in a common year +! calendar with 365.25 days. The "units" attribute is: +! +! 'time-units since 0001-01-01 00:00:00' (Jan 1, 0001) +! +! If TIME_REF > 0, model time and DSTART are the elapsed time +! units since specified reference time. For example, +! TIME_REF=20020115.5 will yield the following attribute: +! +! 'time-units since 2002-01-15 12:00:00' (Jan 15, 2002) +! +!------------------------------------------------------------------------------ +! Nudging/relaxation time scales, inverse scales will be computed internally. +!------------------------------------------------------------------------------ +! +! When passive/active open boundary conditions are activated, these nudging +! values correspond to the passive (outflow) nudging time scales. +! +! TNUDG Nudging time scale (days) for active tracer variables. +! (1:NAT+NPT,1:Ngrids) values are expected. +! +! ZNUDG Nudging time scale (days) for free-surface. +! +! M2NUDG Nudging time scale (days) for 2D momentum. +! +! M3NUDG Nudging time scale (days) for 3D momentum. +! +! OBCFAC Factor between passive (outflow) and active (inflow) open +! boundary conditions. The nudging time scales for the +! active (inflow) conditions are obtained by multiplying +! the passive values by OBCFAC. If OBCFAC > 1, nudging on +! inflow is stronger than on outflow (recommended). +! +!------------------------------------------------------------------------------ +! Linear equation of State parameters. +!------------------------------------------------------------------------------ +! +! Ignoring pressure, the linear equation of state is: +! +! rho(:,:,:) = R0 - R0 * TCOEF * (t(:,:,:,:,itemp) - T0) +! + R0 * SCOEF * (t(:,:,:,:,isalt) - S0) +! +! Typical values: R0 = 1027.0 kg/m3 +! T0 = 10.0 Celsius +! S0 = 35.0 nondimensional +! TCOEF = 1.7d-4 1/Celsius +! SCOEF = 7.6d-4 1/nondimensional +! +! Notice that salinity has NO UNITS, it is nondimensional. Many +! people use PSU (Practical Salinity Unit). However, salinity +! has always been defined as a conductivity ratio and does not +! have physical units. For details, check the following forum +! post: www.myroms.org/forum/viewtopic.php?f=30&t=294 +! +! R0 Background density value (Kg/m3) used in Linear Equation of +! State. +! +! T0 Background potential temperature (Celsius) constant. +! +! S0 Background salinity (nondimensional) constant. +! +! TCOEF Thermal expansion coefficient in Linear Equation of State. +! +! SCOEF Saline contraction coefficient in Linear Equation of State. +! +!------------------------------------------------------------------------------ +! Slipperiness parameter. +!------------------------------------------------------------------------------ +! +! GAMMA2 Slipperiness variable, either 1.0 (free slip) or -1.0 (no slip). +! +!------------------------------------------------------------------------------ +! Point Sources/Sink sources activation switches. +!------------------------------------------------------------------------------ +! +! LuvSrc Logical switches (T/F) to activate momentum horizontal transport +! points Sources/Sinks. Usually it is used to turn on/off river +! runoff transport (u or v variables) in an application, +! [1:Ngrids]. +! +! In nesting applications, turn on only the grids that require +! activation and processing of momentum point Sources/Sinks. +! +! LwSrc Logical switches (T/F) to activate mass points Sources/Sinks. +! Usually, it is used to turn on/off volume vertical influx (w) +! in an application. +! +! In nesting applications, turn on only the grids that require +! activation and processing of mass influx point Sources/Sinks. +! +! LtracerSrc Logical switches (T/F) to activate tracer variables point +! Sources/Sinks. Only NAT active tracers (temperature, salinity) +! and NPT inert tracers are activated here: +! +! LtracerSrc(itemp,ng) for temperature (itemp=1) +! LtracerSrc(isalt,ng) for salinity (isalt=2) +! LtracerSrc(NAT+1,ng) for inert tracer 1 +! ... ... +! LtracerSrc(NAT+NPT,ng) for inert tracer NPT +! +! Other biological and sediment tracers switches are activated +! in their respective input scripts. +! +! In nesting applications, turn on only the grids that require +! activation and processing of tracers point Sources/Sinks. +! +! Recall that switches are usually activated to add river runoff +! as a point source. At minimum, it is necessary to specify both +! temperature and salinity for all rivers. The other tracers are +! optional. +! +! This logical switch REPLACES and ELIMINATES the need to have +! or read the variable "river_flag(river)" in the input rivers +! forcing NetCDF file: +! +! double river_flag(river) +! river_flag:long_name = "river runoff tracer flag" +! river_flag:option_0 = "all tracers are off" +! river_flag:option_1 = "only temperature" +! river_flag:option_2 = "only salinity" +! river_flag:option_3 = "both temperature and salinity" +! river_flag:units = "nondimensional" +! +! The above variable was too cumbersome and complicated when +! additional tracers are considered. However, this change is +! backward compatible. +! +! The LtracerSrc switch will be used to activate the reading of +! respective tracer variable from input river forcing NetCDF +! file. If you want to add other tracer variables (other than +! temperature and salinity) as a source for a particular +! river(s), you just need to specify such values on those +! river(s). Then, set the values to ZERO on the other river(s) +! that do NOT require such river forcing for that tracer. +! Recall that you need to specify the tracer values for all +! rivers, even if their values are zero. +! +!------------------------------------------------------------------------------ +! Logical switches to process climatology fields. The climatology fields are +! either read from a NetCDF file or set with analytical CPP options. +!------------------------------------------------------------------------------ +! +! LsshCLM Logical switch (T/F) to process sea-surface height climatology. +! The CPP option ZCLIMATOLOGY is now obsolete and replaced with +! this switch to facilitate nesting applications. Currently, +! the sea-surface height climatology, CLIMA(ng)%ssh, is NOT +! used but it is kept for future use. +! +! The nudging of SSH on the free-surface governing equation +! (vertically integrated continuity equation) is NOT allowed +! because it violates mass/volume conservation. Recall that +! the time rate of change of free-surface is computed from the +! divergence of "ubar" and "vbar". If such nudging term is +! required, it needs to be specified on the momentum equations +! for (u,v) and/or (ubar,vbar). If done on (u,v) only, its +! effects enter the 2D momentum equations via the residual +! vertically integrated forcing term. +! +! Lm2CLM Logical switch (T/F) to process 2D momentum (ubar, vbar) +! climatology. The CPP option M2CLIMATOLOGY is now obsolete +! and replaced with this switch to facilitate nesting +! applications. Currently, the CLIMA(ng)%ubarclm and +! CLIMA(ng)%vbarclm are used for sponges and nudging. If +! tidal forcing, the climatological values are adjusted to +! include tides. +! +! Lm3CLM Logical switch (T/F) to process 3D momentum climatology (u,v) +! The CPP option M3CLIMATOLOGY is now obsolete and replaced +! with this switch to facilitate nesting applications. +! Currently, the CLIMA(ng)%uclm and CLIMA(ng)%vclm are used +! for sponges and nudging. +! +! LtracerCLM Logical switches (T/F) to process active and inert tracer +! variables climatology. The CPP option TCLIMATOLOGY is now +! obsolete and replaced with these switches to facilitate +! nesting applications. Currently, the CLIMA(ng)%tclm is +! used for horizontal mixing, sponges, and nudging. +! +! Only NAT active tracers (temperature, salinity) and NPT inert +! tracers need to be specified here: +! +! LtracerCLM(itemp,ng) for temperature (itemp=1) +! LtracerCLM(isalt,ng) for salinity (isalt=2) +! LtracerCLM(NAT+1,ng) for inert tracer 1 +! ... ... +! LtracerCLM(NAT+NPT,ng) for inert tracer NPT +! +! Other biological and sediment tracers switches are specified +! in their respective input scripts. +! +! These switches also controls which climatology tracer fields +! (specially passive tracers) needs to be processed. So we +! may reduce the memory allocation for the CLIMA(ng)%tclm array. +! +!------------------------------------------------------------------------------ +! Logical switches for nudging to climatology fields. +!------------------------------------------------------------------------------ +! +! LnudgeM2CLM Logical switch (T/F) to activate the nudging of 2D momentum +! climatology. The CPP option M2CLM_NUDGING is now obsolete +! and replaced with this switch to facilitate nesting +! applications. Users also need to TURN ON the logical +! switch "Lm2CLM", described above, to process the required +! 2D momentum climatology data. This data can be set with +! analytical functions (ANA_M2CLIMA) or read from input +! climatology NetCDF file(s). +! +! The nudging coefficients CLIMA(ng)%M2nudgcof can be set +! with analytical functions in "ana_nudgcoef.h" using CPP +! option ANA_NUDGCOEF. Otherwise, it will be read from +! NetCDF file NUDNAME. +! +! LnudgeM3CLM Logical switch (T/F) to activate the nudging of 3D momentum +! climatology. The CPP option M3CLM_NUDGING is now obsolete +! and replaced with this switch to facilitate nesting +! applications. +! +! Users also need to TURN ON the logical switch "Lm3CLM", +! described above, to process the required 3D momentum +! climatology data. This data can be set with analytical +! functions (ANA_M3CLIMA) or read from input climatology +! NetCDF file(s). +! +! The nudging coefficients CLIMA(ng)%M3nudgcof can be set +! with analytical functions in "ana_nudgcoef.h" using CPP +! option ANA_NUDGCOEF. Otherwise, it will be read from +! NetCDF file NUDNAME. +! +! LnudgeTCLM Logical switches (T/F) to activate the nudging of active and +! inert tracer variables climatology. These switches also +! control which tracer variables to nudge. The CPP option +! TCLM_NUDGING is now obsolete and replaced with these +! switches to facilitate nesting applications. +! +! Only NAT active tracers (temperature, salinity) and NPT +! inert tracers need to be specified here: +! +! LnudgeTCLM(itemp,ng) for temperature (itemp=1) +! LnudgeTCLM(isalt,ng) for salinity (isalt=2) +! LnudgeTCLM(NAT+1,ng) for inert tracer 1 +! ... ... +! LnudgeTCLM(NAT+NPT,ng) for inert tracer NPT +! +! Other biological and sediment tracers switches are specified +! in their respective input scripts. +! +! User also needs to TURN ON the respective logical switches +! "LtracerCLM", described above, to process the required 3D +! tracer climatology data. This data can be set with analytical +! functions (ANA_TCLIMA) or read from input climatology +! NetCDF file(s). +! +! The nudging coefficients CLIMA(ng)%Tnudgcof can be set +! with analytical functions in "ana_nudgcoef.h" using CPP +! option ANA_NUDGCOEF. Otherwise, it will be read from +! NetCDF file NUDNAME. +! +!------------------------------------------------------------------------------ +! Adjoint sensitivity parameters. +!------------------------------------------------------------------------------ +! +! DstrS Starting day for adjoint sensitivity forcing. +! +! DendS Ending day for adjoint sensitivity forcing. +! +! The adjoint forcing is applied at every time step according +! to desired state functional stored in the adjoint sensitivity +! NetCDF file. DstrS must be less than or equal to DendS. If +! both values are zero, their values are reset internally to +! the full range of the adjoint integration. +! +! KstrS Starting vertical level of the 3D adjoint state variables whose +! sensitivity is required. +! +! KendS Ending vertical level of the 3D adjoint state variables whose +! sensitivity is required. +! +! Lstate Logical switches (TRUE/FALSE) to specify the adjoint state +! variables whose sensitivity is required. +! +! Lstate(isFsur): Free-surface +! Lstate(isUbar): 2D U-momentum +! Lstate(isVbar): 2D V-momentum +! Lstate(isUvel): 3D U-momentum +! Lstate(isVvel): 3D V-momentum +! Lstate(isWvel): 3D W-momentum +! Lstate(isTvar): Traces (NT values expected) +! +!------------------------------------------------------------------------------ +! Forcing Singular Vectors or Stochastic Optimals parameters. +!------------------------------------------------------------------------------ +! +! Fstate Logical switches (TRUE/FALSE) to specify state variables for +! which Forcing Singular Vectors or Stochastic Optimals is +! required. +! +! Fstate(isFsur): Free-surface +! Fstate(isUbar): 2D U-momentum +! Fstate(isVbar): 2D V-momentum +! Fstate(isUvel): 3D U-momentum +! Fstate(isVvel): 3D V-momentum +! Fstate(isTvar): Traces (NT values expected) +! +! Fstate(isUstr): surface U-stress +! Fstate(isVstr): surface V-stress +! Fstate(isTsur): surface tracers flux (NT values expected) +! +! SO_decay Stochastic Optimals time decorrelation scale (days) assumed +! for red noise processes. +! +! SO_sdev Stochastic Optimals surface forcing standard deviation for +! dimensionalization. +! +! SO_sdev(isFsur): Free-surface +! SO_sdev(isUbar): 2D U-momentum +! SO_sdev(isVbar): 2D V-momentum +! SO_sdev(isUvel): 3D U-momentum +! SO_sdev(isVvel): 3D V-momentum +! SO_sdev(isTvar): Traces (NT values expected) +! +! SO_sdev(isUstr): surface U-stress +! SO_sdev(isVstr): surface V-stress +! SO_sdev(isTsur): surface tracer flux (NT values expected) +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of instantaneous fields into +! HISTORY file. +!------------------------------------------------------------------------------ +! +! Hout(idUvel) Write out 3D U-velocity component. +! Hout(idVvel) Write out 3D V-velocity component. +! Hout(idu3dE) Write out 3D Eastward velocity component at RHO-points. +! Hout(idv3dN) Write out 3D Northward velocity component at RHO-points. +! Hout(idWvel) Write out 3D W-velocity component. +! Hout(idOvel) Write out 3D omega vertical velocity. +! Hout(idOvil) Write out 3D omega implicit vertical velocity. +! Hout(idUbar) Write out 2D U-velocity component. +! Hout(idVbar) Write out 2D V-velocity component. +! Hout(idu2dE) Write out 2D Eastward velocity component at RHO-points. +! Hout(idv2dN) Write out 2D Northward velocity component at RHO-points. +! Hout(idFsur) Write out free-surface. +! Hout(idBath) Write out time-dependent bathymetry. +! +! Hout(idTvar) Write out active (NAT) tracers: temperature and salinity. +! +! Hout(idpthR) Write out time-varying depths of RHO-points. +! Hout(idpthU) Write out time-varying depths of U-points. +! Hout(idpthV) Write out time-varying depths of V-points. +! Hout(idpthW) Write out time-varying depths of W-points. +! +! Hout(idUsms) Write out surface U-momentum stress. +! Hout(idVsms) Write out surface V-momentum stress. +! Hout(idUbms) Write out bottom U-momentum stress. +! Hout(idVbms) Write out bottom V-momentum stress. +! +! Hout(idUbrs) Write out current-induced, U-momentum stress. +! Hout(idVbrs) Write out current-induced, V-momentum stress. +! Hout(idUbws) Write out wind-induced, bottom U-wave stress. +! Hout(idVbws) Write out wind-induced, bottom V-wave stress. +! Hout(idUbcs) Write out bottom maximum wave and current U-stress. +! Hout(idVbcs) Write out bottom maximum wave and current V-stress. +! Hout(idUVwc) Write out bottom max wave-current stress magnitude. +! +! Hout(idUbot) Write out wind-induced, bed wave orbital U-velocity. +! Hout(idVbot) Write out wind-induced, bed wave orbital V-velocity. +! Hout(idUbur) Write out bottom U-velocity above bed. +! Hout(idVbvr) Write out bottom V-velocity above bed. +! +! Hout(idWztw) Write out WEC_VF quasi-static sea level adjustment. +! Hout(idWqsp) Write out WEC_VF quasi-static pressure. +! Hout(idWbeh) Write out WEC_VF Bernoulli head. +! +! Hout(idU2rs) Write out WEC 2D U-stress. +! Hout(idV2rs) Write out WEC 2D V-stress. +! Hout(idU3rs) Write out WEC 3D U-stress. +! Hout(idV3rs) Write out WEC 3D V-stress. +! +! Hout(idU2Sd) Write out 2D Stokes U-velocity. +! Hout(idV2Sd) Write out 2D Stokes V-velocity. +! Hout(idU3Sd) Write out 3D Stokes U-velocity. +! Hout(idV3Sd) Write out 3D Stokes V-velocity. +! Hout(idW3St) Write out 3D Stokes W-velocity. +! Hout(idW3Sd) Write out 3D Stokes omega-velocity. +! +! Hout(idWamp) Write out wave significat height. +! Hout(idWlen) Write out wave mean wavelength. +! Hout(idWlep) Write out wave peak wavelength. +! Hout(idWdir) Write out wave mean direction. +! Hout(idWdip) Write out wave peak direction. +! Hout(idWptp) Write out wave surface period. +! Hout(idWpbt) Write out wave bottom period. +! Hout(idWorb) Write out wave bottom orbital velocity. +! Hout(idWbrk) Write out wave breaking (percent). +! Hout(idUwav) Write out wave depth-averaged U-velocity. +! Hout(idVwav) Write out wave depth-averaged V-velocity. +! Hout(idWdif) Write out wave dissipation from bottom friction. +! Hout(idWdib) Write out wave dissipation from breaking. +! Hout(idWdiw) Write out wave dissipation from whitecapping. +! Hout(idWdis) Write out wave roller dissipation. +! Hout(idWrol) Write out wave roller action density. +! +! Hout(idPair) Write out surface air pressure. +! Hout(idTair) Write out surface air temperature. +! Hout(idUair) Write out surface U-wind component. +! Hout(idVair) Write out surface V-wind component. +! Hout(idUaiE) Write out surface Eastward U-wind component. +! Hout(idVaiN) Write out surface Northward V-wind component. +! +! Hout(idTsur) Write out surface net heat and salt flux +! Hout(idLhea) Write out latent heat flux. +! Hout(idShea) Write out sensible heat flux. +! Hout(idLrad) Write out long-wave radiation flux. +! Hout(idSrad) Write out short-wave radiation flux. +! Hout(idEmPf) Write out E-P flux. +! Hout(idevap) Write out evaporation rate. +! Hout(idrain) Write out precipitation rate. +! +! Hout(idDano) Write out density anomaly. +! Hout(idVvis) Write out vertical viscosity coefficient. +! Hout(idTdif) Write out vertical diffusion coefficient of temperature. +! Hout(idSdif) Write out vertical diffusion coefficient of salinity. +! Hout(idHsbl) Write out depth of oceanic surface boundary layer. +! Hout(idHbbl) Write out depth of oceanic bottom boundary layer. +! Hout(idMtke) Write out turbulent kinetic energy. +! Hout(idMtls) Write out turbulent kinetic energy times length scale. +! +! Hout(inert) Write out extra inert passive tracers. +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of instantaneous fields into +! QUICKSAVE file. +!------------------------------------------------------------------------------ +! +! Qout(idUvel) Write out 3D U-velocity component. +! Qout(idVvel) Write out 3D V-velocity component. +! Qout(idu3dE) Write out 3D Eastward velocity component at RHO-points. +! Qout(idv3dN) Write out 3D Northward velocity component at RHO-points. +! Qout(idWvel) Write out 3D W-velocity component. +! Qout(idOvel) Write out 3D omega vertical velocity. +! Qout(idUbar) Write out 2D U-velocity component. +! Qout(idVbar) Write out 2D V-velocity component. +! Qout(idu2dE) Write out 2D Eastward velocity component at RHO-points. +! Qout(idv2dN) Write out 2D Northward velocity component at RHO-points. +! Qout(idFsur) Write out free-surface. +! Qout(idBath) Write out time-dependent bathymetry. +! +! Qout(idTvar) Write out active (NAT) tracers: temperature and salinity. +! +! Qout(idUsur) Write out surface U-velocity component. +! Qout(idVsur) Write out surface V-velocity component. +! Qout(idUsuE) Write out surface Eastward velocity component at RHO-points. +! Qout(idVsuN) Write out surface Northward velocity component at RHO-points. +! +! Qout(idsurT) Write out surface temperature and salinity +! +! Qout(idpthR) Write out time-varying depths of RHO-points. +! Qout(idpthU) Write out time-varying depths of U-points. +! Qout(idpthV) Write out time-varying depths of V-points. +! Qout(idpthW) Write out time-varying depths of W-points. +! +! Qout(idUsms) Write out surface U-momentum stress. +! Qout(idVsms) Write out surface V-momentum stress. +! Qout(idUbms) Write out bottom U-momentum stress. +! Qout(idVbms) Write out bottom V-momentum stress. +! +! Qout(idUbrs) Write out current-induced, U-momentum stress. +! Qout(idVbrs) Write out current-induced, V-momentum stress. +! Qout(idUbws) Write out wind-induced, bottom U-wave stress. +! Qout(idVbws) Write out wind-induced, bottom V-wave stress. +! Qout(idUbcs) Write out bottom maximum wave and current U-stress. +! Qout(idVbcs) Write out bottom maximum wave and current V-stress. +! +! Qout(idUbot) Write out wind-induced, bed wave orbital U-velocity. +! Qout(idVbot) Write out wind-induced, bed wave orbital V-velocity. +! Qout(idUbur) Write out bottom U-velocity above bed. +! Qout(idVbvr) Write out bottom V-velocity above bed. +! +! Qout(idWztw) Write out WEC_VF quasi-static sea level adjustment. +! Qout(idWqsp) Write out WEC_VF quasi-static pressure. +! Qout(idWbeh) Write out WEC_VF Bernoulli head. +! +! Qout(idU2rs) Write out WEC 2D U-stress. +! Qout(idV2rs) Write out WEC 2D V-stress. +! Qout(idU3rs) Write out WEC 3D U-stress. +! Qout(idV3rs) Write out WEC 3D V-stress. +! +! Qout(idU2Sd) Write out 2D Stokes U-velocity. +! Qout(idV2Sd) Write out 2D Stokes V-velocity. +! Qout(idU3Sd) Write out 3D Stokes U-velocity. +! Qout(idV3Sd) Write out 3D Stokes V-velocity. +! Qout(idW3St) Write out 3D Stokes W-velocity. +! Qout(idW3Sd) Write out 3D Stokes omega-velocity. +! +! Qout(idWamp) Write out wave significat height. +! Qout(idWlen) Write out wave mean wavelength. +! Qout(idWlep) Write out wave peak wavelength. +! Qout(idWdir) Write out wave mean direction. +! Qout(idWdip) Write out wave peak direction. +! Qout(idWptp) Write out wave surface period. +! Qout(idWpbt) Write out wave bottom period. +! Qout(idWorb) Write out wave bottom orbital velocity. +! Qout(idWbrk) Write out wave breaking (percent). +! Qout(idUwav) Write out wave depth-averaged U-velocity. +! Qout(idVwav) Write out wave depth-averaged V-velocity. +! Qout(idWdif) Write out wave dissipation from bottom friction. +! Qout(idWdib) Write out wave dissipation from breaking. +! Qout(idWdiw) Write out wave dissipation from whitecapping. +! Qout(idWdis) Write out wave roller dissipation. +! Qout(idWrol) Write out wave roller action density. +! +! Qout(idPair) Write out surface air pressure. +! Qout(idTair) Write out surface air temperature. +! Qout(idUair) Write out surface U-wind component. +! Qout(idVair) Write out surface V-wind component. +! Qout(idUaiE) Write out surface Eastward U-wind component. +! Qout(idVaiN) Write out surface Northward V-wind component. +! +! Qout(idTsur) Write out surface net heat and salt flux +! Qout(idLhea) Write out latent heat flux. +! Qout(idShea) Write out sensible heat flux. +! Qout(idLrad) Write out long-wave radiation flux. +! Qout(idSrad) Write out short-wave radiation flux. +! Qout(idEmPf) Write out E-P flux. +! Qout(idevap) Write out evaporation rate. +! Qout(idrain) Write out precipitation rate. +! +! Qout(idDano) Write out density anomaly. +! Qout(idVvis) Write out vertical viscosity coefficient. +! Qout(idTdif) Write out vertical diffusion coefficient of temperature. +! Qout(idSdif) Write out vertical diffusion coefficient of salinity. +! Qout(idHsbl) Write out depth of oceanic surface boundary layer. +! Qout(idHbbl) Write out depth of oceanic bottom boundary layer. +! Qout(idMtke) Write out turbulent kinetic energy. +! Qout(idMtls) Write out turbulent kinetic energy times length scale. +! +! Qout(inert) Write out inert passive tracers. +! Qout(Snert) Write out surface inert passive tracers. +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of time-averaged fields into +! AVERAGE file. +!------------------------------------------------------------------------------ +! +! Aout(idUvel) Write out 3D U-velocity component. +! Aout(idVvel) Write out 3D V-velocity component. +! Aout(idu3dE) Write out 3D Eastward velocity component at RHO-points. +! Aout(idv3dN) Write out 3D Northward velocity component at RHO-points. +! Aout(idWvel) Write out 3D W-velocity component. +! Aout(idOvel) Write out 3D omega vertical velocity. +! Aout(idUbar) Write out 2D U-velocity component. +! Aout(idVbar) Write out 2D V-velocity component. +! Aout(idu2dE) Write out 2D Eastward velocity component at RHO-points. +! Aout(idv2dN) Write out 2D Northward velocity component at RHO-points. +! Aout(idFsur) Write out free-surface. +! Aout(idBath) Write out time-dependent bathymetry. +! +! Aout(idTvar) Write out active (NAT) tracers: temperature and salinity. +! +! Aout(idUsms) Write out surface U-momentum stress. +! Aout(idVsms) Write out surface V-momentum stress. +! Aout(idUbms) Write out bottom U-momentum stress. +! Aout(idVbms) Write out bottom V-momentum stress. +! +! Aout(idUbrs) Write out current-induced, U-momentum stress. +! Aout(idVbrs) Write out current-induced, V-momentum stress. +! Aout(idUbws) Write out wind-induced, bottom U-wave stress. +! Aout(idVbws) Write out wind-induced, bottom V-wave stress. +! Aout(idUbcs) Write out bottom maximum wave and current U-stress. +! Aout(idVbcs) Write out bottom maximum wave and current V-stress. +! Aout(idUVwc) Write out bottom max wave-current stress magnitude. +! +! Aout(idUbot) Write out wind-induced, bed wave orbital U-velocity. +! Aout(idVbot) Write out wind-induced, bed wave orbital V-velocity. +! Aout(idUbur) Write out bottom U-velocity above bed. +! Aout(idVbvr) Write out bottom V-velocity above bed. +! +! Aout(idWztw) Write out WEC_VF quasi-static sea level adjustment. +! Aout(idWqsp) Write out WEC_VF quasi-static pressure. +! Aout(idWbeh) Write out WEC_VF Bernoulli head. +! +! Aout(idU2rs) Write out WEC 2D U-stress. +! Aout(idV2rs) Write out WEC 2D V-stress. +! Aout(idU3rs) Write out WEC 3D U-stress. +! Aout(idV3rs) Write out WEC 3D V-stress. +! +! Aout(idU2Sd) Write out 2D Stokes U-velocity. +! Aout(idV2Sd) Write out 2D Stokes V-velocity. +! Aout(idU3Sd) Write out 3D Stokes U-velocity. +! Aout(idV3Sd) Write out 3D Stokes V-velocity. +! Aout(idW3St) Write out 3D Stokes W-velocity. +! Aout(idW3Sd) Write out 3D Stokes omega-velocity. +! +! Aout(idWamp) Write out wave significat height. +! Aout(idWlen) Write out wave mean wavelength. +! Aout(idWlep) Write out wave peak wavelength. +! Aout(idWdir) Write out wave mean direction. +! Aout(idWdip) Write out wave peak direction. +! Aout(idWptp) Write out wave surface period. +! Aout(idWpbt) Write out wave bottom period. +! Aout(idWorb) Write out wave bottom orbital velocity. +! Aout(idWbrk) Write out wave breaking (percent). +! Aout(idUwav) Write out wave depth-averaged U-velocity. +! Aout(idVwav) Write out wave depth-averaged V-velocity. +! Aout(idWdif) Write out wave dissipation from bottom friction. +! Aout(idWdib) Write out wave dissipation from breaking. +! Aout(idWdiw) Write out wave dissipation from whitecapping. +! Aout(idWdis) Write out wave roller dissipation. +! Aout(idWrol) Write out wave roller action density. +! +! Aout(idPair) Write out surface air pressure. +! Aout(idTair) Write out surface air temperature. +! Aout(idUair) Write out surface U-wind component. +! Aout(idVair) Write out surface V-wind component. +! Aout(idUaiE) Write out surface Eastward U-wind component. +! Aout(idVaiN) Write out surface Northward V-wind component. +! +! Aout(idTsur) Write out surface net heat and salt flux +! Aout(idLhea) Write out latent heat flux. +! Aout(idShea) Write out sensible heat flux. +! Aout(idLrad) Write out long-wave radiation flux. +! Aout(idSrad) Write out short-wave radiation flux. +! Aout(idevap) Write out evaporation rate. +! Aout(idrain) Write out precipitation rate. +! +! Aout(idDano) Write out density anomaly. +! Aout(idVvis) Write out vertical viscosity coefficient. +! Aout(idTdif) Write out vertical diffusion coefficient of temperature. +! Aout(idSdif) Write out vertical diffusion coefficient of salinity. +! Aout(idHsbl) Write out depth of oceanic surface boundary layer. +! Aout(idHbbl) Write out depth of oceanic bottom boundary layer. +! +! Aout(id2dRV) Write out 2D relative vorticity (vertically integrated). +! Aout(id3dRV) Write out 3D relative vorticity. +! Aout(id2dPV) Write out 2D potential vorticity (shallow water). +! Aout(id3dPV) Write out 3D potential vorticity. +! +! Aout(idu3dD) Write out detided 3D U-velocity. +! Aout(idv3dD) Write out detided 3D V-velocity. +! Aout(idu2dD) Write out detided 2D U-velocity. +! Aout(idv2dD) Write out detided 2D V-velocity. +! Aout(idFsuD) Write out detided free-surface +! +! Aout(idTrcD) Write out detided temperature and salinity. +! +! Aout(idHUav) Write out u-volume flux, Huon. +! Aout(idHVav) Write out v-volume flux, Hvom. +! Aout(idUUav) Write out quadratic term. +! Aout(idUVav) Write out quadratic term. +! Aout(idVVav) Write out quadratic term. +! Aout(idU2av) Write out quadratic term. +! Aout(idV2av) Write out quadratic term. +! Aout(idZZav) Write out quadratic term. +! +! Aout(idTTav) Write out quadratic active and inert tracers terms. +! Aout(idUTav) Write out quadratic active and inert tracers terms. +! Aout(idVTav) Write out quadratic active and inert tracers terms. +! Aout(iHUTav) Write out active and inert tracer u-volume flux, . +! Aout(iHVTav) Write out active and inert tracer v-volume flux, . +! +! Aout(inert) Write out extra inert passive tracers. +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of time-averaged fields into +! DIAGNOSTIC file. +!------------------------------------------------------------------------------ +! +! Time-averaged, 2D momentum (ubar,vbar) diagnostic terms: +! (if DIAGNOSTICS_UV) +! +! Dout(M2rate) Write out acceleration. +! Dout(M2pgrd) Write out pressure gradient. +! Dout(M2fcor) Write out Coriolis force, if UV_COR. +! Dout(M2hadv) Write out horizontal total advection, if UV_ADV. +! Dout(M2xadv) Write out horizontal XI-advection, if UV_ADV. +! Dout(M2yadv) Write out horizontal ETA-advection, if UV_ADV. +! Dout(M2hvis) Write out horizontal total viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M2xvis) Write out horizontal XI-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M2yvis) Write out horizontal ETA-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M2sstr) Write out surface stress. +! Dout(M2bstr) Write out bottom stress +! +! Time-averaged, 3D momentum (u,v) diagnostic terms: +! (if SOLVE3D and DIAGNOSTICS_UV) +! +! Dout(M3rate) Write out acceleration. +! Dout(M3pgrd) Write out pressure gradient. +! Dout(M3fcor) Write out Coriolis force, if UV_COR. +! Dout(M3hadv) Write out horizontal total advection, if UV_ADV. +! Dout(M3xadv) Write out horizontal XI-advection, if UV_ADV. +! Dout(M3yadv) Write out horizontal ETA-advection, if UV_ADV. +! Dout(M3hvis) Write out horizontal total viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M3xvis) Write out horizontal XI-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M3yvis) Write out horizontal ETA-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M3yvis) Write out horizontal ETA-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M3vvis) Write out vertical viscosity. +! +! Time-averaged, Waves Effect on Currents diagnostic terms: +! (if SOLVE3D, WEC, WEC_VF, and DIAGNOSTICS_UV) +! +! Dout(M2hjvf) Write out 2D horizontal J vortex force. +! Dout(M2kvrf) Write out 2D K vortex force. +! Dout(M2fsco) Write out 2D Stokes Coriolis. +! Dout(M2sstm) Write out 2D surface streaming. +! Dout(M2bstm) Write out 2D bottom streaming. +! Dout(M2wrol) Write out 2D wave roller acceleration. +! Dout(M2wbrk) Write out 2D wave breaking. +! Dout(M2zeta) Write out 2D Eulerian sea level adjustment. +! Dout(M2zetw) Write out 2D quasi-static sea level adjustment. +! Dout(M2zqsp) Write out 2D quasi-static sea level pressure adjustment. +! Dout(M2zbeh) Write out 2D Bernoulli head adjustment. +! Dout(M2fsgr) Write out 2D seagrass drag force. +! +! Dout(M3hjvf) Write out 3D horizontal J vortex force. +! Dout(M3vjvf) Write out 3D vertical J vortex force. +! Dout(M3kvrf) Write out 3D K vortex force. +! Dout(M3fsco) Write out 3D Stokes Coriolis. +! Dout(M3sstm) Write out 3D surface streaming. +! Dout(M3bstm) Write out 3D bottom streaming. +! Dout(M3wrol) Write out 3D wave roller acceleration. +! Dout(M3wbrk) Write out 3D wave breaking. +! Dout(M3fsgr) Write out 3D seagrass drag force. +! +! Time-averaged, active (temperature and salinity) and passive (inert) tracer +! diagnostic terms, [1:NAT+NPT,Ngrids] values expected: +! (if SOLVE3D and DIAGNOSTICS_TS) +! +! Dout(iTrate) Write out time rate of change. +! Dout(iThadv) Write out horizontal total advection. +! Dout(iTxadv) Write out horizontal XI-advection. +! Dout(iTyadv) Write out horizontal ETA-advection. +! Dout(iTvadv) Write out vertical advection. +! Dout(iThdif) Write out horizontal total diffusion, if TS_DIF2 or TS_DIF4. +! Dout(iTxdif) Write out horizonta1 XI-diffusion, if TS_DIF2 or TS_DIF4. +! Dout(iTydif) Write out horizontal ETA-diffusion, if TS_DIF2 or TS_DIF4. +! Dout(iTsdif) Write out horizontal S-diffusion, if TS_DIF2 or TS_DIF4 and +! rotated tensor (MIX_GEO_TS or MIX_ISO_TS). +! Dout(iTvdif) Write out vertical diffusion. +! +!------------------------------------------------------------------------------ +! Generic User parameters. +!------------------------------------------------------------------------------ +! +! NUSER Number of User parameters to consider (integer). +! +! USER Vector containing user parameters (real array). This array +! is used with the SANITY_CHECK to test the correctness of +! the tangent linear adjoint models. It contains information +! of the model variable and grid point to perturb: +! +! INT(user(1)): tangent state variable to perturb +! INT(user(2)): adjoint state variable to perturb +! [isFsur=1] free-surface +! [isUbar=2] 2D U-momentum +! [isVbar=3] 2D V-momentum +! [isUvel=4] 3D U-momentum +! [isVvel=5] 3D V-momentum +! [isTvar=6] First tracer (temperature) +! [ ... ] +! [isTvar=?] Last tracer +! +! INT(user(3)): I-index of tangent variable to perturb +! INT(user(4)): I-index of adjoint variable to perturb +! INT(user(5)): J-index of tangent variable to perturb +! INT(user(6)): J-index of adjoint variable to perturb +! INT(user(7)): K-index of tangent variable to perturb, if 3D +! INT(user(8)): K-index of adjoint variable to perturb, if 3D +! +! Set tangent and adjoint parameters to the same values +! if perturbing and reporting the same variable. +! +!------------------------------------------------------------------------------ +! I/O options and parameters. A more complete description of the available +! options can be found in WikiROMS (https://myroms.org/wiki/IO). +!------------------------------------------------------------------------------ +! +! The ROMS input and output NetCDF files can be processed using the standard +! NetCDF library developed by UNIDATA, the Parallel-IO (PIO) library developed +! at NCAR, or the SCORPIO library available in E3SM (Sreepathi et al., 2013; +! doi:10.1109/HiPC.2013.6799128). The SCORPIO library was forked from the PIO +! library several years ago, and they have evolved separately. In addition to +! the standard NetCDF library, ROMS can be compiled with either the PIO or +! SCORPIO libraries. Check www.myroms.org/wiki/External_Libraries for more +! information on how to obtain and install these libraries. The user has the +! choice to select which library is used to process input and output NetCDF +! files. For parallel I/O, we recommend using the PIO library because it is +! more efficient than the SCORPIO library in our benchmark tests. +! +! The Parallel I/O using the PIO or SCORPIO libraries is restricted to +! distributed-memory applications because it uses MPI-IO implementations +! like ROMIO. +! +! * ROMS Input and Output NetCDF library to use flag: [1 or 2] +! +! [1] Standard NetCDF3 or NetCDF4 library (Unidata) +! [2] Serial/Parallel I/O using Paralle-IO (PIO) library (MPI applications) +! +! INP_LIB Reading library flag for input NetCDF files +! +! OUT_LIB Creation/writing library flag for output NetCDF files +! +! * PIO method flag for reading/writing NetCDF files: [0,1,2,3,4] +! +! [0] parallel read and write of PnetCDF files (CDF-5 type) +! [1] parallel read and write of PnetCDF files (NetCDF3 64-bit offset type) +! [2] serial read and write of NetCDF3 files (NetCDF3 64-bit offset type) +! [3] parallel read and serial write of NetCDF4/HDF5 files (NetCDF4 type) +! [4] parallel read and write of NETCDF4/HDF5 files (NetCDF4 type) +! +! PIO_METHOD PIO library file type for reading or writing. Depending on +! the build of the PIO library, not all the I/O types are +! available. If NetCDF library does not support parallel I/O, +! PIO_METHOD=3,4 are not available. Notice that we can create +! CDF-5 type PnetCDF files (PIO_METHOD=0), but it is not +! recommended because portability and post-processing +! constraints. Currently, NetCDF4/HDF5 data compression is +! possible with PIO_METHOD=3 during serial write. +! +! * PIO library processes set-up: +! +! PIO_IOTASKS Number of MPI processors used for I/O. If I/O decomposition is +! identical to the computational decomposition, PIO_IOTASK is +! equal to NtileI*NtileJ. Typically, it is advantageous and +! highly recommended to define the I/O decomposition in smaller +! number of processes for efficiency and to avoid MPI +! communication bottlenecks. +! +! PIO_STRIDE Stride step in the MPI-rank between I/O tasks. +! +! PIO_BASE Offset for the first I/O task (usually, PIO_BASE=1). +! +! PIO_AGGREG Number of MPI-aggregators to use in intra-communication mode to +! improve MPI collective I/O performance. +! +! In intra-communications mode, all processors in OCN_COMM_WORLD +! are involved in computations. A subset or all processors does +! I/O (and also computations). The PIO_IOTASKS and PIO_STRIDE +! parameters specify the total number of I/O tasks and the stride +! between them with respect to the ROMS MPI-communicator object, +! OCN_COMM_WORLD. The optional PIO_BASE parameter is used to shift +! the first I/O task away from the first computational task. This +! is often desirable because the application's first computational +! task usually has higher memory requirements than other processes. +! If the MPI-processes are spread over several hardware nodes, it +! is highly recommended to use a value for PIO_STRIDE that scatters +! the I/O processes over all nodes. Avoid all the I/O processes +! occupying the same node. +! +! In the inter-communications (asynchronous) mode, the I/O tasks +! are a disjointed set of dedicated I/O processes and do not +! perform computations. It is possible to have several groups of +! computational units running separate models (coupling) where +! all the I/O data are sent to dedicated processes. Asynchronous +! I/O is still under development and not recommended for use at +! this time. +! +! +! * PIO rearranger methods for moving data between computational and I/O +! processes: +! +! [1] Box rearrangement +! [2] Subset rearrangement +! +! PIO_REARR Rearrangement method between computational and I/O processes. It +! provides the ability to rearrange data between computational +! and parallel I/O decompositions. +! +! In the box method, data is rearranged from computational to I/O +! processes in a continuous manner to the data ordering in the +! file. Since the ordering of data between computational and I/O +! partitions may be different, the rearrangement will require +! all-to-all MPI communications. Also, notice that each computing +! tile may transfer data to one or more I/O processes. +! +! In the subset method, each I/O process is associated with a +! subset of computing processes. The computing tile sends its data +! to a unique I/O process. The data on I/O processes may be more +! fragmented to the ordering on disk, which may increase the +! communications to the storage medium. However, the rearrangement +! scales better since all-to-all MPI communications are not +! required. +! +! * PIO rearranger MPI communication flag: +! +! [0] Point-to-Point (basic send/receive individual operations) +! [1] Collective (high-level gather/scatter grouped operations) +! +! PIO_REARRCOM Type of communications between computational to I/O processes. +! In some systems with a generic MPI library implementation, the +! Point-to-Point communications are more efficient. +! +! * PIO rearranger MPI communications direction control flag: +! +! [0] Enable computational to I/O processes, and vice versa +! [1] Enable computational to I/O processes only +! [2] Enable I/O to computational processes only +! [3] Disable flow control +! +! PIO_REARRDIR Flow control algorithm between computational and I/O processes: +! +! Optimally, MPI communications should be designed to send a modest +! number messages evenly distributed across a number of processes. +! An excessive number of messages to a single MPI-process can +! exhaust the buffer space which can affect efficiency or failure +! due to the slowdown in the retransmitting of dropped messages. +! PIO only send messages (Isend) when the receiver is ready and +! has sufficient resources. +! +! * PIO rearranger options for communications from computational to I/O +! processes (C2I): +! +! PIO_C2I_HS Logical switch (T/F) to enable C2I exchange handshake +! PIO_C2I_Send Logical switch (T/F) to enable C2I MPI-Isends +! PIO_C2I_Preq Maximum pending C2I requests +! +! * PIO rearranger options for communications from I/O to computational +! processes (I2C): +! +! PIO_I2C_HS Logical switch (T/F) to enable I2C exchange handshake +! PIO_I2C_Send Logical switch (T/F) to enable I2C MPI-Isends +! PIO_I2C_Preq Maximum pending I2C requests +! +! * NetCDF-4/HDF5 compression parameters for output files: +! +! This capability is used when both HDF5 and DEFLATE C-preprocessing +! options are activated. The user needs to compile with the NetCDF-4 +! (HDF5) and MPI libraries. File deflation cannot be used in parallel +! I/O for writing because the compression makes it impossible for the +! HDF5 library to exactly map the data to the disk location. For more +! information, check NetCDF official website: +! +! www.unidata.ucar.edu/software/netcdf +! +! NC_SHUFFLE Shuffle filter integer flag. If non-zero, turn on shuffle +! filter. +! +! NC_DEFLATE Deflate filter integer flag, If non-zero, turn on deflate +! filter at the level specified by the NC_DLEVEL parameter. +! +! NC_DLEVEL Deflate filter level parameter (integer). If NC_DEFLATE is +! non-zero, set the deflate level to this value. Must be +! between 0 and 9. +! +!------------------------------------------------------------------------------ +! Input/output NetCDF filenames (string with a maximum of 256 characters). +!------------------------------------------------------------------------------ +! +! Input filenames: +! +! GRDNAME Input grid filename. +! +! ININAME Input nonlinear initial conditions filename. It can be a +! re-start file. +! +! ITLNAME Input tangent linear model initial conditions filename. +! +! IRPNAME Input representer model initial conditions filename. +! +! IADNAME Input adjoint model initial conditions filename. +! +! FWDNAME Input forward solution fields filename. +! +! ADSNAME Input adjoint sensitivity functional filename. +! +! +! Input adjoint forcing filenames for computing observations impacts +! during the analysis-forecast cycle when RBL4DVAR_FCT_SENSITIVITY is +! activated. The files FOInameA and FOInameB are used when the forecast +! metric is defined in state-space (CPP option OBS_SPACE is off). Both +! are regular adjoint forcing files just like ADSname. +! +! (See www.myroms.org/wiki/Analysis-Forecast_Cycle_Observation_Impacts) +! +! FOInameA Forecast initialized with 4D-Var analysis (red curve) +! +! FOInameB Forecast initialized with 4D_Var background (blue curve) +! +! +! Input NetCDF filenames for the forecasts initialized from the 4D-Var +! analysis files: +! +! FCTnameA Current 4D-Var analysis cycle (red curve) +! +! FCTnameB Previous 4D-Var analysis cycle (blue curve) +! +! +! Nesting grids connectivity data: +! +! NGCNAME Input nested grids contact points information filename. This +! NetCDF file is currently generated using script: +! +! matlab/grid/contact.m +! +! from the ROMS Matlab repository. The nesting information +! is not trivial and this Matlab scripts is quite complex. See +! +! https://www.myroms.org/wiki/index.php/Nested_Grids +! https://www.myroms.org/wiki/index.php/Grid_Processing_Scripts +! +! for more information. +! +! +! Input lateral boundary conditions file(s) name: +! +! NBCFILES Number of unique boundary files per nested grid. +! +! BRYNAME Input open boundary data filename(s) per nested grid. +! +! The USER has the option to enter several filenames for the lateral +! boundary conditions variables and or split input data time records for +! each nested grid. For example, the USER may have different files for +! physical, biology, and sediment state variables. The model will scan +! the file list and will read the needed data from the first file in the +! list containing the lateral boundary variable. Therefore, the order of +! the filenames is critical. It is also possible to split input data +! time records into several NetCDF files. +! +! NBCFILES == 2 ! number of boundary files +! +! BRYNAME == my_physics_bry_year1.nc | ! physical kernel variables +! my_physics_bry_year2.nc \ +! my_biology_bry_year1.nc | ! biological tracers +! my_biology_bry_year2.nc +! +! +! Input climatology file(s) name: +! +! NCLMFILES Number of unique climatology files per nested grid. +! +! CLMNAME Input climatology data filename(s) per nested grid. +! +! The USER has the option to enter several filenames for the climatology +! variables and or split input data time records for each nested grid. +! For example, the USER may have different files for physical, biology, +! and sediment state variables. The model will scan the file list and +! will read the needed data from the first file in the list containing +! the lateral climatology variable. Therefore, the order of the filenames +! is critical. It is also possible to split input data time records into +! several NetCDF files. +! +! NCLMFILES == 2 ! number of climatology files +! +! CLMNAME == my_physics_clm_year1.nc | ! physical kernel variables +! my_physics_bry_year2.nc \ +! my_biology_bry_year1.nc | ! biological tracers +! my_biology_bry_year2.nc +! +! +! Input nudging coefficients filename: +! +! NUDNAME Input nudging coefficients filename. +! +! +! Input Sources/Sinks forcing filename: +! +! SSFNAME River runoff data. This file is now separated from the +! regular forcing files to allow manipulations over nested +! grids. A particular nesting grid may or may not have +! Sources/Sinks forcing. +! +! For example, in an application with 3 nested grids but +! with river forcing in grids 1 and 3 we would have: +! +! LuvSrc == T F T +! LtracerSrc == 2*T 2*F 2*T +! +! SSFNAME == my_rivers_grid1.nc \ +! my_rivers_grid2.nc \ +! my_rivers_grid3.nc +! +! Here, "my_rivers_grid2.nc" is a dummy name that will never +! be processed in ROMS because of the logical switches are +! FALSE the second grid. +! +! +! Input/output tidal forcing filename: +! +! TIDENAME Tidal constituents period, phase, elevation, and current data. +! This data is needed when SSH_TIDES, UV_TIDES, or both are +! activated to force tides at the open boundaries. Currently, +! in nested applications, the tidal forcing is used in the +! coarser/larger grid (ng=1). If AVERAGES_DETIDE is activated, +! several least-squares time-accumulated harmonic variables +! are written into this NetCDF file to facilitate restart for +! during long fitting simulations. +! +! +! Input forcing file(s) name: +! +! NFFILES Number of unique forcing files per nested grid. +! +! FRCNAME Input forcing fields filename per nested grid. +! +! The USER has the option to enter several filenames for forcing fields +! and or split input data time records for each nested grid. For example, +! the USER may have different files for wind products, heat fluxes, etc. +! The model will scan the file list and will read the needed data from +! the first file in the list containing the forcing field. Therefore, +! the order of the filenames is essential. It is also possible to split +! input data time records into several NetCDF files. +! +! Use a single line per entry with a continuation (\) or vertical bar (|) +! symbol after each entry, except the last one: +! +! NFFILES == 6 ! number of unique forcing files +! +! FRCNAME == my_lwrad_year1.nc | ! net longwave radiation flux +! my_lwrad_year2.nc \ +! my_swrad_year1.nc | ! solar shortwave radiation flux +! my_swrad_year2.nc \ +! my_winds_year1.nc | ! surface winds +! my_winds_year2.nc \ +! my_Pair_year1.nc | ! surface air pressure +! my_Pair_year2.nc \ +! my_Qair_year1.nc | ! surface air relative humidity +! my_Qair_year2.nc \ +! my_Tair_year1.nc | ! surface air temperature +! my_Tair_year2.nc +! +! +! Output filenames: +! +! DAINAME Output data assimilation next cycle initial conditions (4D-Var +! analysis) or restart (Ensemble Kalman Filter, EnKF) filename. +! GSTNAME Output GST analysis re-start filename. +! RSTNAME Output re-start filename. +! HISNAME Output history filename. +! QCKNAME Output quicksave filename. +! TLFNAME Output impulse forcing for tangent linear (TLM and RPM) models. +! TLMNAME Output tangent linear filename. +! ADJNAME Output adjoint filename. +! AVGNAME Output averages filename. +! HARNAME Output least-squares detiding harmonics filename. +! DIANAME Output diagnostics filename. +! STANAME Output stations filename. +! FLTNAME Output floats filename. +! +!------------------------------------------------------------------------------ +! Input ASCII parameters filenames. +!------------------------------------------------------------------------------ +! +! APARNAM Input assimilation parameters filename. +! SPOSNAM Input stations positions filename. +! FPOSNAM Input initial drifters positions filename. +! BPARNAM Input biological parameters filename. +! SPARNAM Input sediment transport parameters filename. +! USRNAME USER's input generic filename. +! diff --git a/LAKE_ERIE/Forward/roms_lake_erie_1200m.in b/LAKE_ERIE/Forward/roms_lake_erie_1200m.in new file mode 100644 index 00000000..99a0620a --- /dev/null +++ b/LAKE_ERIE/Forward/roms_lake_erie_1200m.in @@ -0,0 +1,3462 @@ +! +! ROMS/TOMS Standard Input parameters. +! +! git $Id$ +!========================================================= Hernan G. Arango === +! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +! Licensed under a MIT/X style license ! +! See License_ROMS.txt ! +!============================================================================== +! ! +! Input parameters can be entered in ANY order, provided that the parameter ! +! KEYWORD (usually, upper case) is typed correctly followed by "=" or "==" ! +! symbols. Any comment lines are allowed and must begin with an exclamation ! +! mark (!) in column one. Comments may appear to the right of a parameter ! +! specification to improve documentation. Comments are ignored during ! +! reading. Blank lines are also allowed and ignored. Continuation lines in ! +! a parameter specification are allowed if preceded by a backslash (\). In ! +! some instances, more than one value is required for a parameter. If fewer ! +! values are provided, the last value is assigned for the entire parameter ! +! array. The multiplication symbol (*), without blank spaces in between, ! +! is allowed for a parameter specification. For example, in two grids nested ! +! application: ! +! ! +! AKT_BAK == 2*1.0d-6 2*5.0d-6 ! m2/s ! +! ! +! indicates that the first two entries of array AKT_BAK, in fortran column- ! +! major order, will have the same value of "1.0d-6" for grid 1, whereas the ! +! next two entries will have the same value of "5.0d-6" for grid 2. ! +! ! +! In multiple levels of nesting or multiple connected domains step-ups, ! +! "Ngrids" entries are expected for some of these parameters. In such case, ! +! the order of the entries for a parameter is critical. It must follow the ! +! same order (1:Ngrids) as in the state variable declaration. The USER may ! +! follow the above guidelines for specifying his/her values. These parameters ! +! are marked by "==" plural symbol after the KEYWORD. ! +! ! +! Multiple NetCDF files are allowed for input field(s). It is useful when ! +! splitting input data (climatology, boundary, forcing) time records into ! +! several files (say monthly, annual, etc.). In this case, each multiple ! +! filename entry lines need to end with the vertical bar (|) symbol. For ! +! example: ! +! ! +! NFFILES == 6 ! number of forcing files ! +! ! +! FRCNAME == my_lwrad_year1.nc | ! +! my_lwrad_year2.nc \ ! +! my_swrad_year1.nc | ! +! my_swrad_year2.nc \ ! +! my_winds_year1.nc | ! +! my_winds_year2.nc \ ! +! my_Pair_year1.nc | ! +! my_Pair_year2.nc \ ! +! my_Qair_year1.nc | ! +! my_Qair_year2.nc \ ! +! my_Tair_year1.nc | ! +! my_Tair_year2.nc ! +! ! +! Notice that NFFILES is 6 and not 12. There are 6 uniquely different fields ! +! in the file list, we DO NOT count file entries followed by the vertical ! +! bar symbol. This is because multiple file entries are processed in ROMS ! +! with derived type structures. ! +! ! +!============================================================================== +! +! Application title. + + TITLE = Freshwater ice-lake test, 1200m Resolution + +! C-preprocessing Flag. + + MyAppCPP = LAKE_ERIE + +! Input variable information file name. This file needs to be processed +! first so all information arrays can be initialized properly. + + VARNAME = /home/arango/ocean/repository/git/roms/ROMS/External/varinfo.yaml + +! Number of nested grids. + + Ngrids = 1 + +! Number of grid nesting layers. This parameter is used to allow refinement +! and composite grid combinations. + + NestLayers = 1 + +! Number of grids in each nesting layer [1:NestLayers]. + +GridsInLayer = 1 + +! Grid dimension parameters. See notes below in the Glossary for how to set +! these parameters correctly. + + Lm == 329 ! Number of I-direction INTERIOR RHO-points + Mm == 123 ! Number of J-direction INTERIOR RHO-points + N == 15 ! Number of vertical levels + + Nbed = 0 ! Number of sediment bed layers + + NAT = 2 ! Number of active tracers (usually, 2) + NPT = 0 ! Number of inactive passive tracers + NCS = 0 ! Number of cohesive (mud) sediment tracers + NNS = 0 ! Number of non-cohesive (sand) sediment tracers + +! Domain decomposition parameters for serial, distributed-memory or +! shared-memory configurations used to determine tile horizontal range +! indices (Istr,Iend) and (Jstr,Jend), [1:Ngrids]. + + NtileI == 4 ! I-direction partition + NtileJ == 3 ! J-direction partition + +! Set horizontal and vertical advection schemes for active and inert +! tracers. A different advection scheme is allowed for each tracer. +! For example, a positive-definite (monotonic) algorithm can be activated +! for salinity and inert tracers, while a different one is set for +! temperature. [1:NAT+NPT,Ngrids] values are expected. +! +! Keyword Advection Algorithm +! +! A4 4th-order Akima (horizontal/vertical) +! C2 2nd-order centered differences (horizontal/vertical) +! C4 4th-order centered differences (horizontal/vertical) +! HSIMT 3th-order HSIMT-TVD (horizontal/vertical) +! MPDATA recursive flux corrected MPDATA (horizontal/vertical) +! SPLINES parabolic splines (only vertical) +! SU3 split third-order upstream (horizontal/vertical) +! U3 3rd-order upstream-biased (only horizontal) +! +! The user has the option of specifying the full Keyword or the first +! two letters, regardless if using uppercase or lowercase. If nested +! grids, specify values for each grid (see glossary below). + + Hadvection == U3 \ ! temperature + U3 ! salinity + + Vadvection == C4 \ ! temperature + C4 ! salinity + +! Adjoint-based algorithms can have different horizontal and schemes +! for active and inert tracers. + +ad_Hadvection == U3 \ ! temperature + U3 ! salinity + +ad_Vadvection == C4 \ ! temperature + C4 ! salinity + +! Set lateral boundary conditions keyword. Notice that a value is expected +! for each boundary segment per nested grid for each state variable. +! +! Each tracer variable requires [1:4,1:NAT+NPT,Ngrids] values. Otherwise, +! [1:4,1:Ngrids] values are expected for other variables. The boundary +! order is: 1=west, 2=south, 3=east, and 4=north. That is, anticlockwise +! starting at the western boundary. +! +! The keyword is case insensitive and usually has three characters. However, +! it is possible to have compound keywords, if applicable. For example, the +! keyword "RadNud" implies radiation boundary condition with nudging. This +! combination is usually used in active/passive radiation conditions. +! +! Keyword Lateral Boundary Condition Type +! +! Cha Chapman_implicit (free-surface) +! Che Chapman_explicit (free-surface) +! Cla Clamped +! Clo Closed +! Fla Flather (2D momentum) _____N_____ j=Mm +! Gra Gradient | 4 | +! Nes Nested (refinement) | | +! Nud Nudging 1 W E 3 +! Per Periodic | | +! Rad Radiation |_____S_____| +! Red Reduced Physics (2D momentum) 2 j=1 +! Shc Shchepetkin (2D momentum) i=1 i=Lm +! +! W S E N +! e o a o +! s u s r +! t t t t +! h h +! +! 1 2 3 4 + + LBC(isFsur) == Clo Clo Clo Clo ! free-surface + LBC(isUbar) == Clo Clo Clo Clo ! 2D U-momentum + LBC(isVbar) == Clo Clo Clo Clo ! 2D V-momentum + LBC(isUvel) == Clo Clo Clo Clo ! 3D U-momentum + LBC(isVvel) == Clo Clo Clo Clo ! 3D V-momentum + LBC(isMtke) == Clo Clo Clo Clo ! mixing TKE + + LBC(isTvar) == Clo Clo Clo Clo \ ! temperature + Clo Clo Clo Clo ! salinity + +! Ice boundary conditions + + LBC(isAice) == Clo Clo Clo Clo ! ice concentration + LBC(isHice) == Clo Clo Clo Clo ! ice thickness + LBC(isHsno) == Clo Clo Clo Clo ! snow thickness + LBC(isTice) == Clo Clo Clo Clo ! ice temperature + LBC(isHmel) == Clo Clo Clo Clo ! surface water + LBC(isIage) == Clo Clo Clo Clo ! Ice age + LBC(isISxx) == Clo Clo Clo Clo ! xx-stress + LBC(isISxy) == Clo Clo Clo Clo ! xy-stress + LBC(isISyy) == Clo Clo Clo Clo ! yy-stress + LBC(isUice) == Clo Clo Clo Clo ! ice U-momentum + LBC(isVice) == Clo Clo Clo Clo ! ice V-momentum + +! Waves Effect on Currents lateral boundary conditions. + + LBC(isU2Sd) == Clo Clo Clo Clo ! 2D U-Stokes + LBC(isV2Sd) == Clo Clo Clo Clo ! 2D V-Stokes + LBC(isU3Sd) == Clo Clo Clo Clo ! 3D U-Stokes + LBC(isV3Sd) == Clo Clo Clo Clo ! 3D V-Stokes + +! Adjoint-based algorithms can have different lateral boundary +! conditions keywords. + +ad_LBC(isFsur) == Clo Clo Clo Clo ! free-surface +ad_LBC(isUbar) == Clo Clo Clo Clo ! 2D U-momentum +ad_LBC(isVbar) == Clo Clo Clo Clo ! 2D V-momentum +ad_LBC(isUvel) == Clo Clo Clo Clo ! 3D U-momentum +ad_LBC(isVvel) == Clo Clo Clo Clo ! 3D V-momentum +ad_LBC(isMtke) == Clo Clo Clo Clo ! mixing TKE + +ad_LBC(isTvar) == Clo Clo Clo Clo \ ! temperature + Clo Clo Clo Clo ! salinity + +! Set lateral open boundary edge volume conservation switch for +! nonlinear model and adjoint-based algorithms. Usually activated +! with radiation boundary conditions to enforce global mass +! conservation, except if tidal forcing is enabled. [1:Ngrids]. + + VolCons(west) == F ! western boundary + VolCons(east) == F ! eastern boundary + VolCons(south) == F ! southern boundary + VolCons(north) == F ! northern boundary + +ad_VolCons(west) == F ! western boundary +ad_VolCons(east) == F ! eastern boundary +ad_VolCons(south) == F ! southern boundary +ad_VolCons(north) == F ! northern boundary + +! Time-Stepping parameters. + + NTIMES == 240000 ! 800 days + DT == 300.0d0 ! 288 steps per day + NDTFAST == 30 + +! Number of timesteps for computing observation impacts during the +! analysis-forecast cycle. + + NTIMES_ANA == 1440 ! analysis interval + NTIMES_FCT == 1440 ! forecast interval + +! Model iteration loops parameters. + + ERstr = 1 + ERend = 1 + Nouter = 1 + Ninner = 1 + Nsaddle = 1 + Nintervals = 1 + +! Number of eigenvalues (NEV) and eigenvectors (NCV) to compute for the +! Lanczos/Arnoldi problem in the Generalized Stability Theory (GST) +! analysis. NCV must be greater than NEV (see documentation below). + + NEV = 2 ! Number of eigenvalues + NCV = 10 ! Number of eigenvectors + +! Input/Output parameters. + + NRREC == 0 + LcycleRST == T + NRST == 1440 + NSTA == 12 ! hourly + NFLT == 1 + NINFO == 1 + +! Output history, quicksave, average, and diagnostic files parameters. + + LDEFOUT == T + NHIS == 1440 ! every 5 days + NDEFHIS == 48000 ! a file every 150 days + NQCK == 288 ! daily + NDEFQCK == 48000 ! a file every 150 days + NTSAVG == 1 + NAVG == 1440 ! 5 day average + NDEFAVG == 48000 ! a file every 150 days + NTSDIA == 1 + NDIA == 1440 + NDEFDIA == 0 + +! Output tangent linear and adjoint models parameters. + + LcycleTLM == F + NTLM == 1440 + NDEFTLM == 0 + LcycleADJ == F + NADJ == 1440 + NDEFADJ == 0 + NSFF == 1440 + NOBC == 1440 + +! GST output and check pointing restart parameters. + + LmultiGST = F ! one eigenvector per file + LrstGST = F ! GST restart switch + MaxIterGST = 500 ! maximum number of iterations + NGST = 10 ! check pointing interval + +! Relative accuracy of the Ritz values computed in the GST analysis. + + Ritz_tol = 1.0d-15 + +! Harmonic/biharmonic horizontal diffusion of tracer for nonlinear model +! and adjoint-based algorithms: [1:NAT+NPT,Ngrids]. + + TNU2 == 5.0d0 5.0d0 ! m2/s + TNU4 == 2*0.0d0 ! m4/s + + ad_TNU2 == 0.0d0 0.0d0 ! m2/s + ad_TNU4 == 0.0d0 0.0d0 ! m4/s + +! Harmonic/biharmonic, horizontal viscosity coefficient for nonlinear model +! and adjoint-based algorithms: [Ngrids]. + + VISC2 == 5.0d0 ! m2/s + VISC4 == 0.0d0 ! m4/s + + ad_VISC2 == 0.0d0 ! m2/s + ad_VISC4 == 0.0d0 ! m4/s + +! Logical switches (TRUE/FALSE) to increase/decrease horizontal viscosity +! and/or diffusivity in specific areas of the application domain (like +! sponge areas) for the desired application grid. + + LuvSponge == F ! horizontal momentum +LtracerSponge == F F ! temperature, salinity, inert + +! Vertical mixing coefficients for tracers in nonlinear model and +! basic state scale factor in adjoint-based algorithms: [1:NAT+NPT,Ngrids] + + AKT_BAK == 1.0d-6 1.0d-6 ! m2/s + + ad_AKT_fac == 1.0d0 1.0d0 ! nondimensional + +! Vertical mixing coefficient for momentum for nonlinear model and +! basic state scale factor in adjoint-based algorithms: [Ngrids]. + + AKV_BAK == 1.0d-5 ! m2/s + + ad_AKV_fac == 1.0d0 ! nondimensional + +! Upper threshold values to limit vertical mixing coefficients computed +! from vertical mixing parameterizations. Although this is an engineering +! fix, the vertical mixing values inferred from ocean observations are +! rarely higher than this upper limit value. + + AKT_LIMIT == 1.0d-4 1.0d-4 ! m2/s + + AKV_LIMIT == 1.0d-4 ! m2/s + +! Turbulent closure parameters. + + AKK_BAK == 5.0d-6 ! m2/s + AKP_BAK == 5.0d-6 ! m2/s + TKENU2 == 0.0d0 ! m2/s + TKENU4 == 0.0d0 ! m4/s + +! Generic length-scale turbulence closure parameters. + + GLS_P == 0.0d0 ! K-kl + GLS_M == 1.0d0 + GLS_N == 1.0d0 + GLS_Kmin == 5.0d-6 + GLS_Pmin == 5.0d-6 + + GLS_CMU0 == 0.5544d0 + GLS_C1 == 0.9d0 + GLS_C2 == 0.52d0 + GLS_C3M == 2.5d0 + GLS_C3P == 1.0d0 + GLS_SIGK == 1.96d0 + GLS_SIGP == 1.96d0 + +! Constants used in surface turbulent kinetic energy flux computation. + + CHARNOK_ALPHA == 1400.0d0 ! Charnock surface roughness + ZOS_HSIG_ALPHA == 0.5d0 ! roughness from wave amplitude + SZ_ALPHA == 0.25d0 ! roughness from wave dissipation + CRGBAN_CW == 100.0d0 ! Craig and Banner wave breaking + +! Waves Effect on Current wave dissipation action scale: +! +! [0.0] All wave dissipation goes to breaking and none to roller +! [1.0] All wave dissipation goes to roller and none to breaking + + WEC_ALPHA == 0.0d0 + +! Constants used in momentum stress computation. + + RDRG == 3.0d-04 ! m/s + RDRG2 == 3.0d-03 ! nondimensional + Zob == 0.02d0 ! m + Zos == 0.02d0 ! m + +! Height (m) of atmospheric measurements for Bulk fluxes parameterization. + + BLK_ZQ == 10.0d0 ! air humidity + BLK_ZT == 10.0d0 ! air temperature + BLK_ZW == 10.0d0 ! winds + +! Minimum depth for wetting and drying. + + DCRIT == 0.10d0 ! m + +! Various parameters. + + WTYPE == 1 + LEVSFRC == 15 + LEVBFRC == 1 + +! Set vertical, terrain-following coordinates transformation equation and +! stretching function (see below for details), [1:Ngrids]. + + Vtransform == 2 ! transformation equation + Vstretching == 4 ! stretching function + +! Vertical S-coordinates parameters (see below for details), [1:Ngrids]. + + THETA_S == 7.0d0 ! surface stretching parameter + THETA_B == 2.0d0 ! bottom stretching parameter + TCLINE == 30.0d0 ! critical depth (m) + +! Mean Density and Brunt-Vaisala frequency. + + RHO0 = 1025.0d0 ! kg/m3 + BVF_BAK = 1.0d-5 ! 1/s2 + +! If tide generating forces, set switch (T/F) to apply a 18.6-year lunar +! nodal correction to equilibrium tide constituents. + + Lnodal = T + +! Time-stamp assigned for model initialization, reference time +! origin for tidal forcing, and model reference time for output +! NetCDF units attribute. + + DSTART = 0.0d0 ! days + TIDE_START = 0.0d0 ! days + TIME_REF = 20100101.0d0 ! yyyymmdd.dd +! TIME_REF = 20100201.0d0 ! yyyymmdd.dd + +! Nudging/relaxation time scales, inverse scales will be computed +! internally, [1:Ngrids]. + + TNUDG == 2*0.0d0 ! days + ZNUDG == 0.0d0 ! days + M2NUDG == 0.0d0 ! days + M3NUDG == 0.0d0 ! days + +! Factor between passive (outflow) and active (inflow) open boundary +! conditions, [1:Ngrids]. If OBCFAC > 1, nudging on inflow is stronger +! than on outflow (recommended). + + OBCFAC == 0.0d0 ! nondimensional + +! Linear equation of State parameters: + + R0 == 1027.0d0 ! kg/m3 + T0 == 14.0d0 ! Celsius + S0 == 8.0d0 ! nondimensional + TCOEF == 1.7d-4 ! 1/Celsius + SCOEF == 7.6d-4 ! nondimensional + +! Slipperiness parameter: 1.0 (free slip) or -1.0 (no slip) + + GAMMA2 == 1.0d0 + +! Logical switches (TRUE/FALSE) to activate horizontal momentum transport +! point Sources/Sinks (like river runoff transport) and mass point +! Sources/Sinks (like volume vertical influx), [1:Ngrids]. + + LuvSrc == F ! horizontal momentum transport + LwSrc == F ! volume vertical influx + +! Logical switches (TRUE/FALSE) to activate tracers point Sources/Sinks +! (like river runoff) and to specify which tracer variables to consider: +! [1:NAT+NPT,Ngrids]. See glossary below for details. + + LtracerSrc == F F ! temperature, salinity, inert + +! Logical switches (TRUE/FALSE) to read and process climatology fields. +! See glossary below for details. + + LsshCLM == F ! sea-surface height + Lm2CLM == F ! 2D momentum + Lm3CLM == F ! 3D momentum + + LtracerCLM == F F ! temperature, salinity, inert + +! Logical switches (TRUE/FALSE) to nudge the desired climatology field(s). +! If not analytical climatology fields, users need to turn ON the logical +! switches above to process the fields from the climatology NetCDF file +! that are needed for nudging. See glossary below for details. + + LnudgeM2CLM == F ! 2D momentum + LnudgeM3CLM == F ! 3D momentum + + LnudgeTCLM == F F ! temperature, salinity, inert + +! Starting (DstrS) and ending (DendS) day for adjoint sensitivity forcing. +! DstrS must be less or equal to DendS. If both values are zero, their +! values are reset internally to the full range of the adjoint integration. + + DstrS == 0.0d0 ! starting day + DendS == 0.0d0 ! ending day + +! Starting and ending vertical levels of the 3D adjoint state variables +! whose sensitivity is required. + + KstrS == 1 ! starting level + KendS == 1 ! ending level + +! Logical switches (TRUE/FALSE) to specify the adjoint state variables +! whose sensitivity is required. + +Lstate(isFsur) == F ! free-surface +Lstate(isUbar) == F ! 2D U-momentum +Lstate(isVbar) == F ! 2D V-momentum +Lstate(isUvel) == F ! 3D U-momentum +Lstate(isVvel) == F ! 3D V-momentum +Lstate(isWvel) == F ! 3D W-momentum + +Lstate(isTvar) == F F ! NT tracers + +! Logical switches (TRUE/FALSE) to specify the state variables for +! which Forcing Singular Vectors or Stochastic Optimals is required. + +Fstate(isFsur) == F ! free-surface +Fstate(isUbar) == F ! 2D U-momentum +Fstate(isVbar) == F ! 2D V-momentum +Fstate(isUvel) == F ! 3D U-momentum +Fstate(isVvel) == F ! 3D V-momentum +Fstate(isTvar) == F F ! NT tracers + +Fstate(isUstr) == T ! surface U-stress +Fstate(isVstr) == T ! surface V-stress +Fstate(isTsur) == F F ! NT surface tracers flux + +! Stochastic Optimals time decorrelation scale (days) assumed for +! red noise processes. + + SO_decay == 2.0d0 ! days + +! Stochastic Optimals surface forcing standard deviation for +! dimensionalization. + +SO_sdev(isFsur) == 1.0d0 ! free-surface +SO_sdev(isUbar) == 1.0d0 ! 2D U-momentum +SO_sdev(isVbar) == 1.0d0 ! 2D V-momentum +SO_sdev(isUvel) == 1.0d0 ! 3D U-momentum +SO_sdev(isVvel) == 1.0d0 ! 3D V-momentum +SO_sdev(isTvar) == 1.0d0 1.0d0 ! NT tracers + +SO_sdev(isUstr) == 1.0d0 ! surface U-stress +SO_sdev(isVstr) == 1.0d0 ! surface V-stress +SO_sdev(isTsur) == 1.0d0 1.0d0 ! NT surface tracers flux + +! Logical switches (TRUE/FALSE) to activate writing of fields into +! HISTORY output file. + +Hout(idUvel) == T ! u 3D U-velocity +Hout(idVvel) == T ! v 3D V-velocity +Hout(idu3dE) == F ! u_eastward 3D U-eastward at RHO-points +Hout(idv3dN) == F ! v_northward 3D V-northward at RHO-points +Hout(idWvel) == T ! w 3D W-velocity +Hout(idOvel) == T ! omega omega vertical velocity +Hout(idOvil) == F ! omega_implicit omega implicit vertical velocity +Hout(idUbar) == T ! ubar 2D U-velocity +Hout(idVbar) == T ! vbar 2D V-velocity +Hout(idu2dE) == F ! ubar_eastward 2D U-eastward at RHO-points +Hout(idv2dN) == F ! vbar_northward 2D V-northward at RHO-points +Hout(idFsur) == T ! zeta free-surface +Hout(idBath) == F ! bath time-dependent bathymetry + +Hout(idTvar) == T T ! temp, salt temperature and salinity + +Hout(idpthR) == F ! z_rho time-varying depths of RHO-points +Hout(idpthU) == F ! z_u time-varying depths of U-points +Hout(idpthV) == F ! z_v time-varying depths of V-points +Hout(idpthW) == F ! z_w time-varying depths of W-points + +Hout(idUsms) == F ! sustr surface U-stress +Hout(idVsms) == F ! svstr surface V-stress +Hout(idUbms) == F ! bustr bottom U-stress +Hout(idVbms) == F ! bvstr bottom V-stress + +Hout(idUbrs) == F ! bustrc bottom U-current stress +Hout(idVbrs) == F ! bvstrc bottom V-current stress +Hout(idUbws) == F ! bustrw bottom U-wave stress +Hout(idVbws) == F ! bvstrw bottom V-wave stress +Hout(idUbcs) == F ! bustrcwmax bottom max wave-current U-stress +Hout(idVbcs) == F ! bvstrcwmax bottom max wave-current V-stress +Hout(idUVwc) == F ! bstrcwmax bottom max wave-current stress magnitude + +Hout(idUbot) == F ! Ubot bed wave orbital U-velocity +Hout(idVbot) == F ! Vbot bed wave orbital V-velocity +Hout(idUbur) == F ! Ur bottom U-velocity above bed +Hout(idVbvr) == F ! Vr bottom V-velocity above bed + +Hout(idWztw) == F ! zetaw WEC_VF quasi-static sea level adjustment +Hout(idWqsp) == F ! qsp WEC_VF quasi-static pressure adjustment +Hout(idWbeh) == F ! bernoulli_head WEC_VF Bernoulli head adjustment + +Hout(idU2rs) == F ! ubar_wec_stress WEC 2D U-stress +Hout(idV2rs) == F ! vbar_wec_stress WEC 2D V-stress +Hout(idU3rs) == F ! u_wec_stress WEC 3D U-stress +Hout(idV3rs) == F ! v_wec_stress WEC 3D V-stress + +Hout(idU2Sd) == F ! ubar_stokes 2D Stokes U-velocity +Hout(idV2Sd) == F ! vbar_stokes 2D Stokes V-velocity +Hout(idU3Sd) == F ! u_stokes 3D Stokes U-velocity +Hout(idV3Sd) == F ! v_stokes 3D Stokes V-velocity +Hout(idW3St) == F ! w_stokes 3D Stokes W-velocity +Hout(idW3Sd) == F ! omega_stokes 3D Stokes omega-velocity + +Hout(idWamp) == F ! Hwave wave significat height +Hout(idWlen) == F ! Lwave wave mean wavelength +Hout(idWlep) == F ! Lwavep wave peak wavelength +Hout(idWdir) == F ! Dwave wave mean direction +Hout(idWdip) == F ! Dwavep wave peak direction +Hout(idWptp) == F ! Pwave_top wave surface period +Hout(idWpbt) == F ! Pwave_bot wave bottom period +Hout(idWorb) == F ! Uwave_rms wave bottom orbital velocity +Hout(idWbrk) == F ! Wave_break wave breaking (percent) +Hout(idUwav) == F ! uWave wave depth-averaged U-velocity +Hout(idVwav) == F ! vWave wave depth-averaged V-velocity +Hout(idWdif) == F ! Dissip_fric wave dissipation from bottom friction +Hout(idWdib) == F ! Dissip_break wave dissipation from breaking +Hout(idWdiw) == F ! Dissip_wcap wave dissipation from whitecapping +Hout(idWdis) == F ! Dissip_roller wave roller dissipation +Hout(idWrol) == F ! roller_action wave roller action density + +Hout(idPair) == F ! Pair surface air pressure +Hout(idTair) == T ! Tair surface air temperature +Hout(idUair) == T ! Uwind surface U-wind +Hout(idVair) == T ! Vwind surface V-wind +Hout(idUaiE) == F ! Uwind_eastward surface Eastward U-wind +Hout(idVaiN) == F ! Vwind_northward surface Northward V-wind + +Hout(idTsur) == F F ! shflux, ssflux surface net heat and salt flux +Hout(idLhea) == F ! latent latent heat flux +Hout(idShea) == F ! sensible sensible heat flux +Hout(idLrad) == F ! lwrad longwave radiation flux +Hout(idSrad) == F ! swrad shortwave radiation flux +Hout(idEmPf) == F ! EminusP E-P flux +Hout(idevap) == F ! evaporation evaporation rate +Hout(idrain) == F ! rain precipitation rate + +Hout(idDano) == T ! rho density anomaly +Hout(idVvis) == F ! AKv vertical viscosity +Hout(idTdif) == F ! AKt vertical T-diffusion +Hout(idSdif) == F ! AKs vertical Salinity diffusion +Hout(idHsbl) == F ! Hsbl depth of surface boundary layer +Hout(idHbbl) == F ! Hbbl depth of bottom boundary layer +Hout(idMtke) == F ! tke turbulent kinetic energy +Hout(idMtls) == F ! gls turbulent length scale + +! Logical switches (TRUE/FALSE) to activate writing of extra inert passive +! tracers other than biological and sediment tracers into the HISTORY +! output file. An inert passive tracer is one that it is only advected and +! diffused. Other processes are ignored. These tracers include, for example, +! dyes, pollutants, oil spills, etc. NPT values are expected. However, these +! switches can be activated using compact parameter specification. + + Hout(inert) == T ! dye_01, ... inert passive tracers + +! Logical switches (TRUE/FALSE) to activate writing of fields into +! QUICKSAVE output file. + +Qout(idUvel) == F ! u 3D U-velocity +Qout(idVvel) == F ! v 3D V-velocity +Qout(idu3dE) == F ! u_eastward 3D U-eastward at RHO-points +Qout(idv3dN) == F ! v_northward 3D V-northward at RHO-points +Qout(idWvel) == F ! w 3D W-velocity +Qout(idOvel) == F ! omega omega vertical velocity +Qout(idUbar) == T ! ubar 2D U-velocity +Qout(idVbar) == T ! vbar 2D V-velocity +Qout(idu2dE) == F ! ubar_eastward 2D U-eastward at RHO-points +Qout(idv2dN) == F ! vbar_northward 2D V-northward at RHO-points +Qout(idFsur) == T ! zeta free-surface +Qout(idBath) == F ! bath time-dependent bathymetry + +Qout(idTvar) == F F ! temp, salt temperature and salinity + +Qout(idUsur) == T ! u_sur surface U-velocity +Qout(idVsur) == T ! v_sur surface V-velocity +Qout(idUsuE) == F ! u_sur_eastward surface U-eastward velocity +Qout(idVsuN) == F ! v_sur_northward surface V-northward velocity + +Qout(idsurT) == T T ! temp_sur, salt_sur surface temperature and salinity + +Qout(idpthR) == F ! z_rho time-varying depths of RHO-points +Qout(idpthU) == F ! z_u time-varying depths of U-points +Qout(idpthV) == F ! z_v time-varying depths of V-points +Qout(idpthW) == F ! z_w time-varying depths of W-points + +Qout(idUsms) == T ! sustr surface U-stress +Qout(idVsms) == T ! svstr surface V-stress +Qout(idUbms) == F ! bustr bottom U-stress +Qout(idVbms) == F ! bvstr bottom V-stress + +Qout(idUbrs) == F ! bustrc bottom U-current stress +Qout(idVbrs) == F ! bvstrc bottom V-current stress +Qout(idUbws) == F ! bustrw bottom U-wave stress +Qout(idVbws) == F ! bvstrw bottom V-wave stress +Qout(idUbcs) == F ! bustrcwmax bottom max wave-current U-stress +Qout(idVbcs) == F ! bvstrcwmax bottom max wave-current V-stress +Qout(idUVwc) == F ! bstrcwmax bottom max wave-current stress magnitude + +Qout(idUbot) == F ! Ubot bed wave orbital U-velocity +Qout(idVbot) == F ! Vbot bed wave orbital V-velocity +Qout(idUbur) == F ! Ur bottom U-velocity above bed +Qout(idVbvr) == F ! Vr bottom V-velocity above bed + +Qout(idWztw) == F ! zetaw WEC_VF quasi-static sea level adjustment +Qout(idWqsp) == F ! qsp WEC_VF quasi-static pressure adjustment +Qout(idWbeh) == F ! bernoulli_head WEC_VF Bernoulli head adjustment + +Qout(idU2rs) == F ! ubar_wec_stress WEC 2D U-stress +Qout(idV2rs) == F ! vbar_wec_stress WEC 2D V-stress +Qout(idU3rs) == F ! u_wec_stress WEC 3D U-stress +Qout(idV3rs) == F ! v_wec_stress WEC 3D V-stress + +Qout(idU2Sd) == F ! ubar_stokes 2D Stokes U-velocity +Qout(idV2Sd) == F ! vbar_stokes 2D Stokes V-velocity +Qout(idU3Sd) == F ! u_stokes 3D Stokes U-velocity +Qout(idV3Sd) == F ! v_stokes 3D Stokes V-velocity +Qout(idW3St) == F ! w_stokes 3D Stokes W-velocity +Qout(idW3Sd) == F ! omega_stokes 3D Stokes omega-velocity + +Qout(idWamp) == F ! Hwave wave significant height +Qout(idWlen) == F ! Lwave wave mean wavelength +Qout(idWlep) == F ! Lwavep wave peak wavelength +Qout(idWdir) == F ! Dwave wave mean direction +Qout(idWdip) == F ! Dwavep wave peak direction +Qout(idWptp) == F ! Pwave_top wave surface period +Qout(idWpbt) == F ! Pwave_bot wave bottom period +Qout(idWorb) == F ! Uwave_rms wave bottom orbital velocity +Qout(idWbrk) == F ! Wave_break wave breaking (percent) +Qout(idUwav) == F ! uWave wave depth-averaged U-velocity +Qout(idVwav) == F ! vWave wave depth-averaged V-velocity +Qout(idWdif) == F ! Dissip_fric wave dissipation from bottom friction +Qout(idWdib) == F ! Dissip_break wave dissipation from breaking +Qout(idWdiw) == F ! Dissip_wcap wave dissipation from whitecapping +Qout(idWdis) == F ! Dissip_roller wave roller dissipation +Qout(idWrol) == F ! roller_action wave roller action density + +Qout(idPair) == F ! Pair surface air pressure +Qout(idTair) == F ! Tair surface air temperature +Qout(idUair) == F ! Uair surface U-wind +Qout(idVair) == F ! Vair surface V-wind +Qout(idUaiE) == F ! Uwind_eastward surface Eastward U-wind +Qout(idVaiN) == F ! Vwind_northward surface Northward V-wind + +Qout(idTsur) == T T ! shflux, ssflux surface net heat and salt flux +Qout(idLhea) == T ! latent latent heat flux +Qout(idShea) == T ! sensible sensible heat flux +Qout(idLrad) == T ! lwrad longwave radiation flux +Qout(idSrad) == T ! swrad shortwave radiation flux +Qout(idEmPf) == T ! EminusP E-P flux +Qout(idevap) == T ! evaporation evaporation rate +Qout(idrain) == T ! rain precipitation rate + +Qout(idDano) == F ! rho density anomaly +Qout(idVvis) == F ! AKv vertical viscosity +Qout(idTdif) == F ! AKt vertical T-diffusion +Qout(idSdif) == F ! AKs vertical Salinity diffusion +Qout(idHsbl) == T ! Hsbl depth of surface boundary layer +Qout(idHbbl) == F ! Hbbl depth of bottom boundary layer +Qout(idMtke) == F ! tke turbulent kinetic energy +Qout(idMtls) == F ! gls turbulent length scale + +! Logical switches (TRUE/FALSE) to activate writing of extra inert passive +! tracers other than biological and sediment tracers into the QUICKSAVE +! output file. An inert passive tracer is one that it is only advected and +! diffused. Other processes are ignored. These tracers include, for example, +! dyes, pollutants, oil spills, etc. NPT values are expected. However, these +! switches can be activated using compact parameter specification. + + Qout(inert) == F ! dye_01, ... inert passive tracers + Qout(Snert) == F ! dye_01_sur, ... surface inert passive tracers + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged +! fields into AVERAGE output file. + +Aout(idUvel) == T ! u 3D U-velocity +Aout(idVvel) == T ! v 3D V-velocity +Aout(idu3dE) == F ! u_eastward 3D U-eastward at RHO-points +Aout(idv3dN) == F ! v_northward 3D V-northward at RHO-points +Aout(idWvel) == T ! w 3D W-velocity +Aout(idOvel) == T ! omega omega vertical velocity +Aout(idUbar) == T ! ubar 2D U-velocity +Aout(idVbar) == T ! vbar 2D V-velocity +Aout(idu2dE) == F ! ubar_eastward 2D U-eastward at RHO-points +Aout(idv2dN) == F ! vbar_northward 2D V-northward at RHO-points +Aout(idFsur) == T ! zeta free-surface +Aout(idBath) == F ! bath time-dependent bathymetry + +Aout(idTvar) == T T ! temp, salt temperature and salinity + +Aout(idUsms) == F ! sustr surface U-stress +Aout(idVsms) == F ! svstr surface V-stress +Aout(idUbms) == F ! bustr bottom U-stress +Aout(idVbms) == F ! bvstr bottom V-stress + +Aout(idUbrs) == F ! bustrc bottom U-current stress +Aout(idVbrs) == F ! bvstrc bottom V-current stress +Aout(idUbws) == F ! bustrw bottom U-wave stress +Aout(idVbws) == F ! bvstrw bottom V-wave stress +Aout(idUbcs) == F ! bustrcwmax bottom max wave-current U-stress +Aout(idVbcs) == F ! bvstrcwmax bottom max wave-current V-stress +Aout(idUVwc) == F ! bstrcwmax bottom max wave-current stress magnitude + +Aout(idUbot) == F ! Ubot bed wave orbital U-velocity +Aout(idVbot) == F ! Vbot bed wave orbital V-velocity +Aout(idUbur) == F ! Ur bottom U-velocity above bed +Aout(idVbvr) == F ! Vr bottom V-velocity above bed + +Aout(idWztw) == F ! zetaw WEC_VF quasi-static sea level adjustment +Aout(idWqsp) == F ! qsp WEC_VF quasi-static pressure adjustment +Aout(idWbeh) == F ! bernoulli_head WEC_VF Bernoulli head adjustment + +Aout(idU2rs) == F ! ubar_wec_stress WEC 2D U-stress +Aout(idV2rs) == F ! vbar_wec_stress WEC 2D V-stress +Aout(idU3rs) == F ! u_wec_stress WEC 3D U-stress +Aout(idV3rs) == F ! v_wec_stress WEC 3D V-stress + +Aout(idU2Sd) == F ! ubar_stokes 2D Stokes U-velocity +Aout(idV2Sd) == F ! vbar_stokes 2D Stokes V-velocity +Aout(idU3Sd) == F ! u_stokes 3D Stokes U-velocity +Aout(idV3Sd) == F ! v_stokes 3D Stokes V-velocity +Aout(idW3St) == F ! w_stokes 3D Stokes W-velocity +Aout(idW3Sd) == F ! omega_stokes 3D Stokes omega-velocity + +Aout(idWamp) == F ! Hwave wave significant height +Aout(idWlen) == F ! Lwave wave mean wavelength +Aout(idWlep) == F ! Lwavep wave peak wavelength +Aout(idWdir) == F ! Dwave wave mean direction +Aout(idWptp) == F ! Pwave_top wave surface period +Aout(idWpbt) == F ! Pwave_bot wave bottom period +Aout(idWorb) == F ! Uwave_rms wave bottom orbital velocity +Aout(idWbrk) == F ! Wave_break wave breaking (percent) +Aout(idUwav) == F ! uWave wave-depth averaged U-velocity +Aout(idVwav) == F ! vWave wave-depth averaged V-velocity +Aout(idWdif) == F ! Dissip_fric wave dissipation from bottom friction +Aout(idWdib) == F ! Dissip_break wave dissipation from breaking +Aout(idWdiw) == F ! Dissip_wcap wave dissipation from whitecapping +Aout(idWdis) == F ! Dissip_roller wave roller dissipation +Aout(idWrol) == F ! roller_action wave roller action density + +Aout(idPair) == F ! Pair surface air pressure +Aout(idTair) == T ! Tair surface air temperature +Aout(idUair) == T ! Uwind surface U-wind +Aout(idVair) == T ! Vwind surface V-wind +Aout(idUaiE) == F ! Uwind_eastward surface Eastward U-wind +Aout(idVaiN) == F ! Vwind_northward surface Northward V-wind + +Aout(idTsur) == T T ! shflux, ssflux surface net heat and salt flux +Aout(idLhea) == T ! latent latent heat flux +Aout(idShea) == T ! sensible sensible heat flux +Aout(idLrad) == T ! lwrad longwave radiation flux +Aout(idSrad) == T ! swrad shortwave radiation flux +Aout(idevap) == T ! evaporation evaporation rate +Aout(idrain) == T ! rain precipitation rate + +Aout(idDano) == T ! rho density anomaly +Aout(idVvis) == F ! AKv vertical viscosity +Aout(idTdif) == F ! AKt vertical T-diffusion +Aout(idSdif) == F ! AKs vertical Salinity diffusion +Aout(idHsbl) == T ! Hsbl depth of surface boundary layer +Aout(idHbbl) == F ! Hbbl depth of bottom boundary layer + +Aout(id2dRV) == F ! pvorticity_bar 2D relative vorticity +Aout(id3dRV) == F ! pvorticity 3D relative vorticity +Aout(id2dPV) == F ! rvorticity_bar 2D potential vorticity +Aout(id3dPV) == F ! rvorticity 3D potential vorticity + +Aout(idu3dD) == F ! u_detided detided 3D U-velocity +Aout(idv3dD) == F ! v_detided detided 3D V-velocity +Aout(idu2dD) == F ! ubar_detided detided 2D U-velocity +Aout(idv2dD) == F ! vbar_detided detided 2D V-velocity +Aout(idFsuD) == F ! zeta_detided detided free-surface + +Aout(idTrcD) == F F ! temp_detided, ... detided temperature and salinity + +Aout(idHUav) == F ! Huon u-volume flux, Huon +Aout(idHVav) == F ! Hvom v-volume flux, Hvom +Aout(idUUav) == F ! uu quadratic term +Aout(idUVav) == F ! uv quadratic term +Aout(idVVav) == F ! vv quadratic term +Aout(idU2av) == F ! ubar2 quadratic term +Aout(idV2av) == F ! vbar2 quadratic term +Aout(idZZav) == F ! zeta2 quadratic term + +Aout(idTTav) == F F ! temp_2, ... quadratic tracer terms +Aout(idUTav) == F F ! u_temp, ... quadratic tracer terms +Aout(idVTav) == F F ! v_temp, ... quadratic tracer terms +Aout(iHUTav) == F F ! Huon_temp, ... tracer volume flux, +Aout(iHVTav) == F F ! Hvom_temp, ... tracer volume flux, + +! Logical switches (TRUE/FALSE) to activate writing of extra inert passive +! tracers other than biological and sediment tracers into the AVERAGE file. + + Aout(inert) == T ! dye_01, ... inert passive tracers + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged, +! 2D momentum (ubar,vbar) diagnostic terms into DIAGNOSTIC output file. + +Dout(M2rate) == T ! ubar_accel, ... acceleration +Dout(M2pgrd) == T ! ubar_prsgrd, ... pressure gradient +Dout(M2fcor) == T ! ubar_cor, ... Coriolis force +Dout(M2hadv) == T ! ubar_hadv, ... horizontal total advection +Dout(M2xadv) == T ! ubar_xadv, ... horizontal XI-advection +Dout(M2yadv) == T ! ubar_yadv, ... horizontal ETA-advection +Dout(M2hvis) == T ! ubar_hvisc, ... horizontal total viscosity +Dout(M2xvis) == T ! ubar_xvisc, ... horizontal XI-viscosity +Dout(M2yvis) == T ! ubar_yvisc, ... horizontal ETA-viscosity +Dout(M2sstr) == T ! ubar_sstr, ... surface stress +Dout(M2bstr) == T ! ubar_bstr, ... bottom stress + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged, +! 3D momentum (u,v) diagnostic terms into DIAGNOSTIC output file. + +Dout(M3rate) == T ! u_accel, ... acceleration +Dout(M3pgrd) == T ! u_prsgrd, ... pressure gradient +Dout(M3fcor) == T ! u_cor, ... Coriolis force +Dout(M3hadv) == T ! u_hadv, ... horizontal total advection +Dout(M3xadv) == T ! u_xadv, ... horizontal XI-advection +Dout(M3yadv) == T ! u_yadv, ... horizontal ETA-advection +Dout(M3vadv) == T ! u_vadv, ... vertical advection +Dout(M3hrad) == T ! u_hrad, ... horizontal total radiation stress +Dout(M3vrad) == T ! u_vrad, ... vertical radiation stress +Dout(M3hvis) == T ! u_hvisc, ... horizontal total viscosity +Dout(M3xvis) == T ! u_xvisc, ... horizontal XI-viscosity +Dout(M3yvis) == T ! u_yvisc, ... horizontal ETA-viscosity +Dout(M3vvis) == T ! u_vvisc, ... vertical viscosity + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged, +! Waves Effect on Currents (WEC) 2D and 3D diagnostic terms into DIAGNOSTIC +! output file. + +Dout(M2hjvf) == T ! ubar_hjvf, ... 2D horizontal J vortex force +Dout(M2kvrf) == T ! ubar_kvrf, ... 2D K vortex force +Dout(M2fsco) == T ! ubar_fsco, ... 2D Stokes Coriolis +Dout(M2sstm) == T ! ubar_sstm, ... 2D surface streaming +Dout(M2bstm) == T ! ubar_bstm, ... 2D bottom streaming +Dout(M2wrol) == T ! ubar_wrol, ... 2D wave roller acceleration +Dout(M2wbrk) == T ! ubar_wbrk, ... 2D wave breaking +Dout(M2zeta) == T ! ubar_zeta, ... 2D Eulerian SSH adjustment +Dout(M2zetw) == T ! ubar_zetaw, ... 2D quasi-static SSH adjustment +Dout(M2zqsp) == T ! ubar_zqsp, ... 2D quasi-static pressure +Dout(M2zbeh) == T ! ubar_zbeh, ... 2D Bernoulli head adjustment +Dout(M2fsgr) == T ! ubar_fsgr, ... 2D seagrass drag force + +Dout(M3hjvf) == T ! u_hjvf, ... 3D horizontal J vortex force +Dout(M3vjvf) == T ! u_vjvf, ... 3D vertical J vortex force +Dout(M3kvrf) == T ! u_kvrf, ... 3D K vortex force +Dout(M3fsco) == T ! u_fsco, ... 3D Stokes Coriolis +Dout(M3sstm) == T ! u_sstm, ... 3D surface streaming +Dout(M3bstm) == T ! u_bstm, ... 3D bottom streaming +Dout(M3wrol) == T ! u_wrol, ... 3D wave roller acceleration +Dout(M3wbrk) == T ! u_wbrk, ... 3D wave breaking +Dout(M3fsgr) == T ! u_fsgr, ... 3D seagrass drag force + +! Logical switches (TRUE/FALSE) to activate writing of time-averaged, +! active (temperature and salinity) and passive (inert) tracer diagnostic +! terms into DIAGNOSTIC output file: [1:NAT+NPT,Ngrids]. + +Dout(iTrate) == T T ! temp_rate, ... time rate of change +Dout(iThadv) == T T ! temp_hadv, ... horizontal total advection +Dout(iTxadv) == T T ! temp_xadv, ... horizontal XI-advection +Dout(iTyadv) == T T ! temp_yadv, ... horizontal ETA-advection +Dout(iTvadv) == T T ! temp_vadv, ... vertical advection +Dout(iThdif) == T T ! temp_hdiff, ... horizontal total diffusion +Dout(iTxdif) == T T ! temp_xdiff, ... horizontal XI-diffusion +Dout(iTydif) == T T ! temp_ydiff, ... horizontal ETA-diffusion +Dout(iTsdif) == T T ! temp_sdiff, ... horizontal S-diffusion +Dout(iTvdif) == T T ! temp_vdiff, ... vertical diffusion + +! Generic User parameters, [1:NUSER]. + + NUSER = 0 + USER = 0.d0 + +! Input and Output files processing library to use: +! +! [1] Standard NetCDF-3 or NetCDF-4 library +! [2] Serial or Parallel I/O with Parallel-IO (PIO) library (MPI only) + + INP_LIB = 1 + OUT_LIB = 1 + +! PIO library methods for reading/writing NetCDF files: +! +! [0] parallel read and write of PnetCDF (CDF-5, not recommended) +! [1] parallel read and write of NetCDF3 (64-bit offset) +! [2] serial read and write of NetCDF3 (64-bit offset) +! [3] parallel read and serial write of NetCDF4/HDF5 +! [4] parallel read and write of NETCDF4/HDF5 + + PIO_METHOD = 2 + +! PIO library MPI processes set-up: + + PIO_IOTASKS = 1 ! number of I/O tasks to define + PIO_STRIDE = 1 ! stride in the MPI-ran between I/O tasks + PIO_BASE = 0 ! offset for the first I/O task + PIO_AGGREG = 1 ! number of MPI-aggregators to use + +! PIO library rearranger methods for moving data between computational and I/O +! processes: +! +! [1] Box rearrangement +! [2] Subset rearrangement + + PIO_REARR = 1 + +! PIO library rearranger flag for MPI communications between computational +! and I/O processes: +! +! [0] Point-to-Point (low-level communications) +! [1] Collective (high-level grouped communications) + +PIO_REARRCOM = 0 + +! PIO library rearranger flow control direction flag for MPI communications +! between computational and I/O processes: +! +! [0] Enable computational to I/O processes, and vice versa +! [2] Enable computational to I/O processes only +! [3] Enable I/O to computational processes only +! [4] Disable flow control + +PIO_REARRDIR = 0 + +! PIO rearranger options for computational to I/O processes (C2I): + + PIO_C2I_HS = T ! Enable C2I handshake (T/F) +PIO_C2I_Send = T ! Enable C2I Isends (T/F) +PIO_C2I_Preq = 64 ! Maximum pending C2I requests + +! PIO rearranger options for I/O to computational processes (I2C): + + PIO_I2C_HS = T ! Enable I2C handshake (T/F) +PIO_I2C_Send = T ! Enable I2C Isends (T/F) +PIO_I2C_Preq = 65 ! Maximum pending I2C requests + +! If OUT_LIB=1, NetCDF-4/HDF5 compression parameters for output files. + + NC_SHUFFLE = 1 ! if non-zero, turn on shuffle filter + NC_DEFLATE = 1 ! if non-zero, turn on deflate filter + NC_DLEVEL = 1 ! deflate level [0-9] + +! Input NetCDF file names, [1:Ngrids]. + + GRDNAME == ../Data/ROMS/roms_lake_erie_grd_1200m.nc + ININAME == roms_ini.nc + ITLNAME == roms_itl.nc + IRPNAME == roms_irp.nc + IADNAME == roms_iad.nc + FWDNAME == roms_fwd.nc + ADSNAME == roms_ads.nc + +! Input adjoint forcing NetCDF filenames for computing observations +! impacts during the analysis-forecast cycle. If the forecast error +! metric is defined in state-space, then FOInameA and FOInameB should +! be regular adjoint forcing files just like ADSname. If the forecast +! error metric is defined in observation space (OBS_SPACE is activated) +! then the forecast is initialized OIFnameA and OIFnameB (specified in +! s4dvar.in input script) will have the structure of a 4D-Var observation +! file. + + FOInameA == roms_foi_a.nc + FOInameB == roms_foi_b.nc + +! Input NetCDF filenames for the forecasts initialized from the analysis +! of the current 4D-Var cycle (FCTnameA) and initialized from the analysis +! of the previous 4D-Var cycle (FCTnameB). + + FCTnameA == roms_fct_a.nc + FCTnameB == roms_fct_b.nc + +! Nesting grids connectivity data: contact points information. This +! NetCDF file is special and complex. It is currently generated using +! the script "matlab/grid/contact.m" from the Matlab repository. + + NGCNAME = roms_ngc.nc + +! Input lateral boundary conditions file names. The USER has the option +! to separate the required lateral boundary variables into individual +! NetCDF files (NBCFILES > 1), as in the input surface forcing. Also, +! the USER may split input data time records into several NetCDF files +! (monthly, seasonal, or annual). See prologue instructions above. Use +! a single line per entry with a continuation (\) or a vertical bar (|) +! symbol after each entry, except the last one. + + NBCFILES == 1 ! number of boundary files + + BRYNAME == roms_bry.nc + +! Input climatology file names. The USER has the option to separate the +! climatology variables into individual NetCDF files (NCLMFILES > 1), +! as in the input surface forcing. Also, the USER may split input data +! time records into several NetCDF files (monthly, seasonal, or annual). +! See prologue instructions above. Use a single line per entry with a +! continuation (\) or a vertical bar (|) symbol after each entry, except +! the last one. + + NCLMFILES == 1 ! number of climatology files + + CLMNAME == roms_clm.nc + +! Input climatology nudging coefficients file name. + + NUDNAME == roms_nud.nc + +! Input Sources/Sinks forcing (like river runoff) file name. + + SSFNAME == roms_rivers.nc + +! Input tidal forcing file name. + + TIDENAME == roms_tides.nc + +! Input forcing NetCDF file name(s). +! +! The USER has the option to enter several sets of file names for each +! nested grid. For example, the USER may have different data for the +! wind products, heat fluxes, etc. Alternatively, if the all the forcing +! files are the same for nesting and the data is in its native resolution, +! we could enter only one set of files names and ROMS will replicate those +! files internally to the remaining grids using the plural KEYWORD protocol. +! +! The model will scan the files and will read the needed data from the first +! file in the list containing the forcing field. Therefore, the order of the +! filenames is critical. If using multiple forcing files per grid, first +! enter all the file names for grid one followed by two, and so on. It is +! also possible to split input data time records into several NetCDF files +! (see Prolog instructions above). Use a single line per entry with a +! continuation (\) or a vertical bar (|) symbol after each entry, except +! the last one. + + NFFILES == 9 ! number of unique forcing files + + FRCNAME == ../Data/FRC/LakeErie_Pair_era5_short.nc \ + ../Data/FRC/LakeErie_Qair_era5_short.nc \ + ../Data/FRC/LakeErie_Tair_era5_short.nc \ + ../Data/FRC/LakeErie_cloud_era5_short.nc \ + ../Data/FRC/LakeErie_rain_era5_short.nc \ + ../Data/FRC/LakeErie_swrad_era5_short.nc \ + ../Data/FRC/LakeErie_lwrad_era5_short.nc \ + ../Data/FRC/LakeErie_uwind_era5_short.nc \ + ../Data/FRC/LakeErie_vwind_era5_short.nc + +! Output NetCDF file names, [1:Ngrids]. + + DAINAME == roms_lake_erie_dai.nc + GSTNAME == roms_lake_erie_gst.nc + RSTNAME == roms_lake_erie_rst.nc + HISNAME == roms_lake_erie_his.nc + QCKNAME == roms_lake_erie_qck.nc + TLMNAME == roms_lake_erie_tlm.nc + TLFNAME == roms_lake_erie_tlf.nc + ADJNAME == roms_lake_erie_adj.nc + AVGNAME == roms_lake_erie_avg.nc + HARNAME == roms_lake_erie_har.nc + DIANAME == roms_lake_erie_dia.nc + STANAME == roms_lake_erie_sta.nc + FLTNAME == roms_lake_erie_flt.nc + +! Input ASCII parameter filenames. + + APARNAM = s4dvar.in + SPOSNAM = stations_lake_erie.in + FPOSNAM = floats.in + IPARNAM = lake_erie.in + BPARNAM = bio_Fennel.in + SPARNAM = sediment.in + USRNAME = MyFile.dat + +! +! GLOSSARY: +! ========= +! +!------------------------------------------------------------------------------ +! Application title (string with a maximum of 80 characters) and +! C-preprocessing flag. +!------------------------------------------------------------------------------ +! +! TITLE Application title. +! +! MyAppCPP Application C-preprocessing option. +! +!------------------------------------------------------------------------------ +! Variable information filename (string with a maximum of 256 characters). +!------------------------------------------------------------------------------ +! +! VARNAME Input/Output variable information filename. This file needs to +! be processed first so all information arrays and indices can +! be initialized properly in "mod_ncparam.F". +! +!------------------------------------------------------------------------------ +! Nested grid parameters (processing order of these parameters is important). +!------------------------------------------------------------------------------ +! +! Ngrids Number of nested grids. It needs to be read before all other +! parameters in order to allocate all model variables. +! +! NestLayers Number of grid nesting layers. It is used to allow applications +! with both composite and refinement grid combinations, as shown +! in WikiROMS diagrams for the Refinement and Partial Boundary +! Composite Sub-Classes. See, +! +! https://www.myroms.org/wiki/index.php/Nested_Grids +! +! In non-nesting applications, set NestLayers = 1. +! +! GridsInLayer Number of grids in each nested layer, a vector of size +! [1:NestLayers]. Notice that, +! +! SUM(GridsInLayer) = Ngrids +! LENGHT(GridsInLayer) = NestLayers +! +! The order of grids and nesting layers is extremely important. +! It determines the order of the sequential solution at every +! sub-timestep. See WikiROMS nesting Sub-Classes diagrams. +! +! In non-nesting applications, set GridsInLayer = 1. +! +! NOTE: In main3d, we use these parameters to determine which +! ==== grid index, ng, to solve when calling the routines of +! the computational kernel: +! +! NEST_LAYER : DO nl=1,NestLayers +! ... +! STEP_LOOP : DO istep=1,Nsteps +! ... +! DO ig=1,GridsInLayer(nl) +! ng=GridNumber(ig,nl) +! ... +! END DO +! ... +! END DO STEP_LOOP +! END DO NEST_LAYER +! +! Here, the grid order "ng" for the computations is determined +! from array "GridNumber", which is computed at initialization +! in "read_phypar.F". It can be computed on the fly as: +! +! ng=Ngrids+1 +! DO j=NestLayers,nl,-1 +! DO i=GridsInLayer(j),1,-1 +! ng=ng-1 +! IF ((j.eq.nl).and.(i.eq.ig)) EXIT +! END DO +! END DO +! +! but it is too inefficient. This information is provided here +! to help you configure the order of nested grids. +! +!------------------------------------------------------------------------------ +! Grid dimension parameters. +!------------------------------------------------------------------------------ +! +! These parameters are very important since they determine the grid of the +! application to solve. They need to be read first in order to dynamically +! allocate all model variables. +! +! WARNING: It is trivial and possible to change these dimension parameters in +! ------- idealized applications via analytical expressions. However, in +! realistic applications any change to these parameters requires redoing all +! input NetCDF files. +! +! Lm Number of INTERIOR grid RHO-points in the XI-direction for +! each nested grid, [1:Ngrids]. If using NetCDF files as +! input, Lm=xi_rho-2 where "xi_rho" is the NetCDF file +! dimension of RHO-points. Recall that all RHO-point +! variables have a computational I-range of [0:Lm+1]. +! +! Mm Number of INTERIOR grid RHO-points in the ETA-direction for +! each nested grid, [1:Ngrids]. If using NetCDF files as +! input, Mm=eta_rho-2 where "eta_rho" is the NetCDF file +! dimension of RHO-points. Recall that all RHO-point +! variables have a computational J-range of [0:Mm+1]. +! +! N Number of vertical terrain-following levels at RHO-points, +! [1:Ngrids]. +! +! Nbed Number of sediment bed layers, [1:Ngrids]. This parameter +! is only relevant if CPP option SEDIMENT is activated. +! +! Mm+1 ___________________ _______ Kw = N +! | | | | +! Mm | _____________ | | | Kr = N +! | | | | |_______| +! | | | | | | +! Jr | | | | | | +! | | | | |_______| +! | | | | | | +! 1 | |_____________| | | | +! | | |_______| +! 0 |___________________| | | +! Ir | | 1 +! 0 1 Lm Lm+1 h(i,j) |_______| +! ::::::::: 0 +! ::::::::: +! ::::::::: Nbed-1 +! ::::::::: Nbed +! +! NAT Number of active tracer type variables. Usually, NAT=2 for +! potential temperature and salinity. +! +! NPT Number of inert (dyes, age, etc) passive tracer type variables +! to advect and diffuse only. This parameter is only relevant +! if CPP option T_PASSIVE is activated. +! +! NCS Number of cohesive (mud) sediment tracer type variables. This +! parameter is only relevant if CPP option SEDIMENT is +! activated. +! +! NNS Number of non-cohesive (sand) sediment tracer type variables. +! This parameter is only relevant if CPP option SEDIMENT is +! activated. +! +! The total number of sediment tracers is NST=NCS+NNS. Notice +! that NST must be greater than zero (NST>0). +! +!------------------------------------------------------------------------------ +! Domain tile partition parameters. +!------------------------------------------------------------------------------ +! +! Model tile decomposition parameters for serial and parallel configurations +! which are used to determine tile horizontal range indices (Istr,Iend and +! Jstr,Jend). In some computers, it is advantageous to have tile partitions +! in serial applications. +! +! NtileI Number of domain partitions in the I-direction (XI-coordinate). +! It must be equal to or greater than one. +! +! NtileJ Number of domain partitions in the J-direction (ETA-coordinate). +! It must be equal to or greater than one. +! +! WARNING: In shared-memory (OpenMP), the product of NtileI and NtileJ must +! be a MULTIPLE of the number of parallel threads specified with +! the OpenMP environmental variable OMP_NUM_THREADS. +! +! In distributed-memory (MPI), the product of NtileI and NtileJ +! must be EQUAL to the number of parallel nodes specified during +! execution with the "mprun" or "mpirun" command. +! +!------------------------------------------------------------------------------ +! Tracer advection scheme +!------------------------------------------------------------------------------ +! +! It is more advantageous to set the horizontal and vertical advection schemes +! for each tracer with switches instead of a single CPP flag for all of them. +! Positive-definite and monotonic algorithms (i.e., MPDATA and HSIMT) are +! appropriate and useful for positive fields like salinity, inert, biological, +! and sediment tracers. However, since the temperature has a dynamic range +! with negative and positive values in the ocean, other advection schemes are +! more appropriate. +! +! Currently, the following tracer advection schemes are available and are +! activated using the associated Keyword: +! +! Keyword Advection Algorithm +! +! A4 4th-order Akima (horizontal/vertical) +! C2 2nd-order centered differences (horizontal/vertical) +! C4 4th-order centered differences (horizontal/vertical) +! HSIMT 3th-order HSIMT with TVD limiter (horizontal/vertical) +! MPDATA recursive flux corrected MPDATA (horizontal/vertical) +! SPLINES parabolic splines reconstruction (only vertical) +! SU3 split third-order upstream (horizontal/vertical) +! U3 3rd-order upstresm-bias (only horizontal) +! +! The user has the option of specifying the full Keyword or the first +! two letters, regardless if using uppercase or lowercase. +! +! If using either HSIMT (Wu and Zhu, 2010) or MPDATA (Margolin and +! Smolarkiewicz, 1998) options, the user needs to set the same scheme +! for both horizontal and vertical advection to preserve monotonicity. +! +! Hadvection Horizontal advection for each active (temperature and +! salinity) and inert tracers, [1:NAT+NPT,Ngrids] +! values are expected. +! +! Vadvection Vertical advection for each active (temperature and +! salinity) and inert tracers, [1:NAT+NPT,Ngrids] +! values are expected. +! +! ad_Hadvection Horizontal advection for each active (temperature and +! salinity) and inert tracers in the adjoint-based +! algorithms, [1:NAT+NPT,Ngrids] values are expected. +! +! ad_Vadvection Vertical advection for each active (temperature and +! salinity) and inert tracers in the adjoint-based +! algorithms, [1:NAT+NPT,Ngrids] values are expected. +! +! Examples: +! +! Hadvection == A4 \ ! temperature +! MPDATA \ ! salinity +! HSIMT \ ! dye_01, inert(1) +! HSIMT ! dy2_02, inert(2) +! +! Vadvection == A4 \ ! temperature +! MPDATA \ ! salinity +! HSIMT \ ! dye_01, inert(1) +! HSIMT ! dye_02, inert(2) +! +! or in nested applications +! +! Hadvection == U3 \ ! temperature, Grid 1 +! HSIMT \ ! salinity, Grid 1 +! U3 \ ! temperature, Grid 2 +! HSIMT \ ! salinity, Grid 2 +! U3 \ ! temperature, Grid 3 +! HSIMT ! salinity, Grid 3 +! +! Vadvection == C4 \ ! temperature, Grid 1 +! HSIMT \ ! salinity, Grid 1 +! C4 \ ! temperature, Grid 2 +! HSIMT \ ! salinity, Grid 2 +! C4 \ ! temperature, Grid 3 +! HSIMT ! salinity, Grid 3 +! +!------------------------------------------------------------------------------ +! Lateral boundary conditions parameters. +!------------------------------------------------------------------------------ +! +! The lateral boundary conditions are now specified with logical switches +! instead of CPP flags to allow nested grid configurations. Their values are +! loaded into structured array: +! +! LBC(1:4, nLBCvar, Ngrids) +! +! where 1:4 are the number of boundary edges, nLBCvar are the number of LBC +! state variables, and Ngrids is the number of nested grids. For Example, to +! apply gradient boundary conditions we use: +! +! LBC(iwest, isFsur, ng) % gradient +! LBC(ieast, ... , ng) % gradient +! LBC(isouth, ... , ng) % gradient +! LBC(inorth, ... , ng) % gradient +! +! The lateral boundary conditions are entered with a keyword. This keyword +! is case insensitive and usually has three characters. However, it is +! possible to have compound keywords, if applicable. For example, the +! keyword "RadNud" implies radiation boundary condition with nudging. This +! combination is usually used in active/passive radiation conditions. +! +! Keyword Lateral Boundary Condition Type +! +! Cha Chapman_implicit (free-surface only) +! Che Chapman_explicit (free-surface only) +! Cla Clamped +! Clo Closed +! Fla Flather (2D momentum only) _____N_____ j=Mm +! Gra Gradient | 4 | +! Nes Nested (refinement only) | | +! Nud Nudging 1 W E 3 +! Per Periodic | | +! Rad Radiation |_____S_____| +! Red Reduced Physics (2D momentum only) 2 j=1 +! Shc Shchepetkin (2D momentum only) i=1 i=Lm +! +! LBC(isFsur) Free-surface, [1:4, Ngrids] values are expected. +! LBC(isUbar) 2D U-momentum, [1:4, Ngrids] values are expected. +! LBC(isVbar) 2D V-momentum, [1:4, Ngrids] values are expected. +! LBC(isUvel) 3D U-momentum, [1:4, Ngrids] values are expected. +! LBC(isVvel) 3D V-momentum, [1:4, Ngrids] values are expected. +! LBC(isMtke) Mixing TKE, [1:4, Ngrids] values are expected. +! LBC(isTvar) Tracers, [1:4, 1:NAT+NPT, Ngrids] values are expected. +! +! WEC boundary conditions for Stokes velocities: +! +! LBC(isU2Sd) 2D U-Stokes, [1:4, Ngrids] values are expected. +! LBC(isV2Sd) 2D V-Stokes, [1:4, Ngrids] values are expected. +! LBC(isU3Sd) 3D U-Stokes, [1:4, Ngrids] values are expected. +! LBC(isV3Sd) 3D V-Stokes, [1:4, Ngrids] values are expected. +! +! Similarly, the adjoint-based algorithms (ADM, TLM, RPM) can have different +! lateral boundary conditions keywords: +! +! ad_LBC(isFsur) Free-surface, [1:4, Ngrids] values are expected. +! ad_LBC(isUbar) 2D U-momentum, [1:4, Ngrids] values are expected. +! ad_LBC(isVbar) 2D V-momentum, [1:4, Ngrids] values are expected. +! ad_LBC(isUvel) 3D U-momentum, [1:4, Ngrids] values are expected. +! ad_LBC(isVvel) 3D V-momentum, [1:4, Ngrids] values are expected. +! ad_LBC(isMtke) Mixing TKE, [1:4, Ngrids] values are expected. +! ad_LBC(isTvar) Tracers, [1:4, 1:NAT+NPT, Ngrids] values are expected. +! +! Lateral open boundary edge volume conservation switch for nonlinear model +! and adjoint-based algorithm. Usually activated with radiation boundary +! conditions to enforce global mass conservation. Notice that these switches +! should not be activated if tidal forcing is enabled, [1:Ngrids] values are +! expected. +! +! VolCons(west) Western boundary volume conservation switch. +! VolCons(east) Eastern boundary volume conservation switch. +! VolCons(south) Southern boundary volume conservation switch. +! VolCons(north) Northern boundary volume conservation switch. +! +! ad_VolCons(west) Western boundary volume conservation switch. +! ad_VolCons(east) Eastern boundary volume conservation switch. +! ad_VolCons(south) Southern boundary volume conservation switch. +! ad_VolCons(north) Northern boundary volume conservation switch. +! +!------------------------------------------------------------------------------ +! Timestepping parameters. +!------------------------------------------------------------------------------ +! +! NTIMES Total number of timesteps in current run. If 3D configuration, +! NTIMES is the total of baroclinic timesteps. If only 2D +! configuration, NTIMES is the total of barotropic timesteps. +! +! DT TimeStep size in seconds. If 3D configuration, DT is the +! size of the baroclinic timestep. If only 2D configuration, +! DT is the size of the barotropic timestep. +! +! NDTFAST Number of barotropic timesteps between each baroclinic time +! step. If only 2D configuration, NDTFAST should be unity since +! there is no need to split timestepping. +! +! NTIMES_ANA Total number of timesteps for computing observations impacts +! interval during the analysis cycle. It is only used when +! RBL4DVAR_FCT_SENSITIVITY is activated. +! +! NTIMES_FCT Total number of timesteps for computing observations impacts +! interval during the forecast cycle. It is only used when +! RBL4DVAR_FCT_SENSITIVITY is activated. +! +!------------------------------------------------------------------------------ +! Model iteration loops parameters. +!------------------------------------------------------------------------------ +! +! ERstr Starting ensemble run (perturbation or iteration) number. +! +! ERend Ending ensemble run (perturbation or iteration) number. +! +! Nouter Maximum number of 4DVAR outer loop iterations. +! +! Ninner Maximum number of 4DVAR inner loop iterations. +! +! Nsaddle Number of kernel trajectory intervals for the solution of the +! Saddle-Point 4D-Var (SP4DVAR). It is used to accelerate +! 4D-Var by parallelizing the inner loops in time. The tangent +! linear and adjoint models are time-stepped concurrently over +! the short time integration windows. Make sure that +! +! MOD(NTIMES/NHIS, Nsaddle) = 0 +! +! for legal computations. +! +! Nintervals Number of time interval divisions for Stochastic Optimals +! computations. It must be a multiple of NTIMES. The tangent +! linear model (TLM) and the adjoint model (ADM) are integrated +! forward and backward at different intervals. For example, +! if Nintervals=3, +! +! 1 NTIMES/3 2*NTIMES/3 NTIMES +! +..................+..................+..................+ +! <========================================================> (1) +! <=====================================> (2) +! <==================> (3) +! +! In the first iteration (1), the TLM is integrated forward from +! 1 to NTIMES and the ADM is integrated backward from NTIMES to 1. +! In the second iteration (2), the TLM is integrated forward from +! NTIMES/3 to NTIMES and the ADM is integrated backward from +! NTIMES to NTIMES/3. And so on. +! +!------------------------------------------------------------------------------ +! Eigenproblem parameters. +!------------------------------------------------------------------------------ +! +! NEV Number of eigenvalues to compute for the Lanczos/Arnoldi +! problem. Notice that the model memory requirement increases +! substantially as NEV increases. The GST requires NEV+1 +! copies of the model state vector. The memory requirements +! are decreased in distributed-memory applications. +! +! NCV Number of eigenvectors to compute for the Lanczos/Arnoldi +! problem. NCV must be greater than NEV. +! +! At present, there is no apriori analysis to guide the selection of NCV +! relative to NEV. The only formal requirement is that NCV > NEV. However +! in optimal perturbations, it is recommended to have NCV greater than or +! equal to 2*NEV. In Finite Time Eigenmodes (FTE) and Adjoint Finite Time +! Eigenmodes (AFTE) the requirement is to have NCV greater than or equal to +! 2*NEV+1. +! +! The efficiency of calculations depends critically on the combination of +! NEV and NCV. If NEV is large (greater than 10 say), you can use NCV=2*NEV+1 +! but for NEV small (less than 6) it will be inefficient to use NCV=2*NEV+1. +! In complicated applications, you can start with NEV=2 and NCV=10. Otherwise, +! it will iterate for a very long time. +! +!------------------------------------------------------------------------------ +! Input/Output parameters. +!------------------------------------------------------------------------------ +! +! NRREC Switch to indicate re-start from a previous solution. Use +! NRREC=0 for new solutions. In a re-start solution, NRREC +! is the time index of the re-start NetCDF file assigned for +! initialization. If NRREC is negative (say NRREC=-1), the +! model will re-start from the most recent time record. That +! is, the initialization record is assigned internally. +! Notice that it is also possible to re-start from a history +! or time-averaged NetCDF file. If a history file is used +! for re-start, it must contains all the necessary primitive +! variables at all levels. +! +! LcycleRST Logical switch (T/F) used to recycle time records in output +! restart file. If TRUE, only the latest two re-start time +! records are maintained. If FALSE, all re-start fields are +! saved every NRST timesteps without recycling. The restart +! fields are written at all levels in double precision. +! +! NRST Number of timesteps between the writing of re-start fields. +! Set NRST=0 to suppress writing of RESTART file. +! +! NSTA Number of timesteps between writing data into STATIONS file. +! Station data is written at all levels. +! +! NFLT Number of timesteps between writing data into FLOATS file. +! +! NINFO Number of timesteps between the print of single line information +! to standard output. It also determines the interval between +! computation of global energy diagnostics. +! +!------------------------------------------------------------------------------ +! Output HISTORY, QUICKSAVE, AVERAGE and DIAGNOSTIC files parameters. +!------------------------------------------------------------------------------ +! +! Notice that it is possible to have two types of output NetCDF files for +! instantaneous fields: HISTORY and QUICKSAVE. The QUICKSAVE file can be used +! for writing fewer fields at shorter time intervals. For example, the User +! may just write 2D and surface fields frequently (hourly) to reduce file +! size and to time resolve fast dynamics. In conjunction, the User may write +! full HISTORY fields infrequently (daily, weekly, etc) to avoid creating +! large output files. This gives a lot of flexibility to manage ROMS output. +! +! +! LDEFOUT Logical switch (T/F) used to create new output files when +! initializing from a re-start file, abs(NRREC) > 0. If TRUE +! and applicable, a new HISTORY, QUICKSAVE, AVERAGE, DIAGNOSTIC +! and STATIONS files are created during the initialization +! stage. If FALSE and applicable, data is appended to existing +! HISTORY, QUICKSAVE, AVERAGE, DIAGNOSTIC and STATIONS files. +! See also parameters NDEFHIS, NDEFQCK, NDEFAVG and NDEFDIA +! below. +! +! NHIS Number of timesteps between writing fields into the HISTORY +! file. Set NHIS=0 to suppress writing of HISTORY file. +! +! NDEFHIS Number of timesteps between the creation of new HISTORY file. +! If NDEFHIS=0, the model will only process one HISTORY file. +! This feature is useful for extended simulations when HISTORY +! file get too large; it creates a new file every NDEFHIS +! timesteps. +! +! NQCK Number of timesteps between writing fields into QUICKSAVE file. +! Set NQCK=0 to suppress writing of QUICKSAVE file. +! +! NDEFQCK Number of timesteps between the creation of new QUICKSAVE file. +! If NDEFQCK=0, the model will only process one QUICKSAVE file. +! This feature is useful for extended simulations when QUICKSAVE +! file get too large; it creates a new file every NDEFQCK +! timesteps. +! +! NTSAVG Starting timestep for the accumulation of output time-averaged +! data. +! +! NAVG Number of timesteps between writing time-averaged data +! into AVERAGE file. Averaged date is written for all fields. +! Set NAVG=0 to suppress writing of AVERAGE file. +! +! NDEFAVG Number of timesteps between the creation of new AVERAGE +! file. If NDEFAVG=0, the model will only process one AVERAGE +! file. This feature is useful for extended simulations when +! AVERAGE file get too large; it creates a new file every +! NDEFAVG timesteps. +! +! NTSDIA Starting timestep for the accumulation of output time-averaged +! diagnostics data. +! +! NDIA Number of timesteps between writing time-averaged diagnostics +! data into DIAGNOSTIC file. Averaged date is written for all +! fields. Set NDIA=0 to suppress writing of DIAGNOSTIC file. +! +! NDEFDIA Number of timesteps between the creation of new time-averaged +! diagnostics file. If NDEFDIA=0, the model will only process +! one DIAGNOSTICS file. This feature is useful for long +! simulations when DIAGNOSTIC file get too large; it creates +! a new file every NDEFDIA timesteps. +! +!------------------------------------------------------------------------------ +! Output tangent linear and adjoint model parameters. +!------------------------------------------------------------------------------ +! +! LcycleTLM Logical switch (T/F) used to recycle time records in output +! tangent linear file. If TRUE, only the latest two time +! records are maintained. If FALSE, all tangent linear fields +! are saved every NTLM timesteps without recycling. +! +! NTLM Number of timesteps between writing fields into tangent linear +! model file. +! +! NDEFTLM Number of timesteps between the creation of new tangent linear +! file. If NDEFTLM=0, the model will only process one tangent +! linear file. This feature is useful for extended simulations +! when output NetCDF files get too large; it creates a new file +! every NDEFTLM timesteps. +! +! LcycleADJ Logical switch (T/F) used to recycle time records in output +! adjoint file. If TRUE, only the latest two time records are +! maintained. If FALSE, all tangent linear fields are saved +! every NADJ timesteps without recycling. +! +! NADJ Number of timesteps between writing fields into the adjoint +! model file. +! +! NDEFADJ Number of timesteps between the creation of the new adjoint +! file. If NDEFADJ=0, the model will only process one adjoint +! file. This feature is useful for extensive simulations when +! the output NetCDF files get too large; it creates a new file +! every NDEFADJ timesteps. +! +! NSFF Number of timesteps between 4DVAR adjustment of surface forcing +! fluxes. In strong constraint 4DVAR, it is possible to adjust +! surface forcing at other time intervals in addition to initial +! time. This parameter is used to store the appropriate number +! of surface forcing records in the output history NetCDF files: +! 1+NTIMES/NSFF records. NSFF must be a factor of NTIMES or +! greater than NTIMES. If NSFF > NTIMES, only one record is +! stored in the NetCDF files and the adjustment is for constant +! forcing with constant correction. This parameter is only +! relevant in 4DVAR when activating either ADJUST_STFLUX or +! ADJUST_WSTRESS. +! +! NOBC Number of timesteps between 4DVAR adjustment of open boundary +! fields. In strong constraint 4DVAR, it is possible to adjust +! open boundaries at other time intervals in addition to initial +! time. This parameter is used to store the appropriate number +! of open boundary records in the output history NetCDF files: +! 1+NTIMES/NOBC records. NOBC must be a factor of NTIMES or +! greater than NTIMES. If NOBC > NTIMES, only one record is +! stored in the NetCDF files and the adjustment is for constant +! forcing with constant correction. This parameter is only +! relevant in 4DVAR when activating ADJUST_BOUNDARY. +! +!------------------------------------------------------------------------------ +! Generalized Stability Theory (GST) analysis parameters. +!------------------------------------------------------------------------------ +! +! LmultiGST Logical switch (TRUE/FALSE) to write out one GST analysis +! eigenvector per history file. +! +! LrstGST Logical switch (TRUE/FALSE) to restart GST analysis. If TRUE, +! the check pointing data is read in from the GST restart NetCDF +! file. If FALSE and applicable, the checkpointing GST data is +! saved and overwritten every NGST iterations of the algorithm. +! +! MaxIterGST Maximum number of GST algorithm iterations. +! +! NGST Number of GST iterations between storing of check pointing +! data into NetCDF file. The restart data is always saved if +! MaxIterGST is reached without convergence. It is also saved +! when convergence is achieved. It is always a good idea to +! save the checkpointing data at regular intervals so there +! is a mechanism to recover from an unexpected interruption +! in this costly computation. The check pointing data can +! be used also to recompute the Ritz vectors by changing some +! of the parameters, like convergence criteria (Ritz_tol) +! and number of Arnoldi iterations (iparam(3)). +! +! Ritz_tol Relative accuracy of the Ritz values computed in the GST +! analysis. +! +!------------------------------------------------------------------------------ +! Harmonic/Biharmonic horizontal diffusion for active tracers and viscosity +! for momentum. +!------------------------------------------------------------------------------ +! +! TNU2 Nonlinear model lateral, harmonic, constant, mixing +! coefficient (m2/s) for active (NAT) and inert (NPT) tracer +! variables. If variable horizontal diffusion is activated, +! TNU2 is the mixing coefficient for the largest grid-cell +! in the domain. +! +! TNU4 Nonlinear model lateral, biharmonic, constant, mixing +! coefficient (m4/s) for active (NAT) and inert (NPT) tracer +! variables. If variable horizontal diffusion is activated, +! TNU4 is the mixing coefficient for the largest grid-cell +! in the domain. +! +! ad_TNU2 Adjoint-based algorithms lateral, harmonic, constant, mixing +! coefficient (m2/s) for active (NAT) and inert (NPT) tracer +! variables. If variable horizontal diffusion is activated, +! ad_TNU2 is the mixing coefficient for the largest grid-cell +! in the domain. In some applications, a larger value than +! that used in the nonlinear model (basic state) is necessary +! for stability. +! +! ad_TNU4 Adjoint-based algorithms lateral, biharmonic, constant, mixing +! coefficient (m4/s) for active (NAT) and inert (NPT) tracer +! variables. If variable horizontal diffusion is activated, +! ad_TNU4 is the mixing coefficient for the largest grid-cell +! in the domain. In some applications, a larger value than +! that used in the nonlinear model (basic state) is necessary +! for stability. +! +! VISC2 Nonlinear model lateral, harmonic, constant, mixing +! coefficient (m2/s) for momentum. If variable horizontal +! viscosity is activated, UVNU2 is the mixing coefficient +! for the largest grid-cell in the domain. +! +! VISC4 Nonlinear model lateral, biharmonic, constant mixing +! coefficient (m4/s) for momentum. If variable horizontal +! viscosity is activated, UVNU4 is the mixing coefficient +! for the largest grid-cell in the domain. +! +! ad_VISC2 Adjoint-based algorithms lateral, harmonic, constant, mixing +! coefficient (m2/s) for momentum. If variable horizontal +! viscosity is activated, ad_UVNU2 is the mixing coefficient +! for the largest grid-cell in the domain. In some applications, +! a larger value than that used in the nonlinear model (basic +! state) is necessary for stability. +! +! ad_VISC4 Adjoint-based algorithms lateral, biharmonic, constant mixing +! coefficient (m4/s) for momentum. If variable horizontal +! viscosity is activated, ad_UVNU4 is the mixing coefficient +! for the largest grid-cell in the domain. In some applications, +! a larger value than that used in the nonlinear model (basic +! state) is necessary for stability. +! +!------------------------------------------------------------------------------ +! Switches to activate sponge areas with enhanced horizontal mixing. +!------------------------------------------------------------------------------ +! +! LuvSponge Logical switch (TRUE/FALSE) to increase/decrease horizontal +! viscosity in specific areas of the domain. It can be used +! to specify sponge areas with larger horizontal mixing +! coefficients for damping of high frequency noise due to +! open boundary conditions or nesting. The CPP option SPONGE +! is now deprecated and replaced with this switch to facilitate +! or not sponge areas over a particular nested grid. +! +! The horizontal mixing distribution is specified in +! "ini_hmixcoef.F" as: +! +! visc2_r(i,j) = visc_factor(i,j) * visc2_r(i,j) +! visc4_r(i,j) = visc_factor(i,j) * visc4_r(i,j) +! +! The variable "visc_factor" can be read from the grid +! NetCDF file. Alternately, the horizontal viscosity in the +! sponge area can be set-up with analytical functions in +! "ana_sponge.h" using CPP ANA_SPONGE when the switch +! "LuvSponge" is turned ON for a particular grid. +! +! LtracerSponge Logical switch (TRUE/FALSE) to increase/decrease horizontal +! diffusivity in specific areas of the domain. It can be used +! to specify sponge areas with larger horizontal mixing +! coefficients for damping of high frequency noise due to +! open boundary conditions or nesting. The CPP option SPONGE +! is now deprecated and replaced with this switch to facilitate +! or not sponge areas over a particular nested grid. +! +! The horizontal mixing distribution is specified in +! "ini_hmixcoef.F" as: +! +! diff2(i,j,itrc) = diff_factor(i,j) * diff2(i,j,itrc) +! diff4(i,j,itrc) = diff_factor(i,j) * diff4(i,j,itrc) +! +! The variable "diff_factor" can be read from the grid +! NetCDF file. Alternately, the horizontal viscosity in the +! sponge area can be set-up with analytical functions in +! "ana_sponge.h" using CPP ANA_SPONGE when the switch +! "LuvSponge" is turned ON for a particular grid. +! +!------------------------------------------------------------------------------ +! Vertical mixing coefficients for active tracers. +!------------------------------------------------------------------------------ +! +! AKT_BAK Background vertical mixing coefficient (m2/s) for active +! (NAT) and inert (NPT) tracer variables. +! +! AKT_LIMIT Upper threshold values to limit vertical diffusion coefficients +! computed from vertical mixing parameterizations (GLS_MIXING, +! LMD_MIXING, MY25_MIXING). Sometimes, these parameterizations +! yield high mixing values and the threshold values are used as +! upper limiter when LIMIT_VDIFF is activated. +! +! ad_AKT_fac Adjoint-based algorithms vertical mixing, basic state, scale +! factor (nondimensional) for active (NAT) and inert (NPT) +! tracer variables. In some applications, smaller/larger +! values of vertical mixing are necessary for stability. It +! is only used when FORWARD_MIXING is activated. +! +!------------------------------------------------------------------------------ +! Vertical mixing coefficient for momentum. +!------------------------------------------------------------------------------ +! +! AKV_BAK Background vertical mixing coefficient (m2/s) for momentum. +! +! AKV_LIMIT Upper threshold value to limit vertical viscosity coefficient +! computed from vertical mixing parameterizations (GLS_MIXING, +! LMD_MIXING, MY25_MIXING). Sometimes, these parameterizations +! yield a high mixing value and the threshold value is used as +! upper limiter when LIMIT_VVISC is activated. +! +! ad_AKV_fac Adjoint-based algorithms vertical mixing, basic state, scale +! factor (nondimensional) for momentum. In some applications, +! smaller/larger values of vertical mixing are necessary for +! stability. It is only used when FORWARD_MIXING is activated. +! +!------------------------------------------------------------------------------ +! Turbulent closure parameters. +!------------------------------------------------------------------------------ +! +! AKK_BAK Background vertical mixing coefficient (m2/s) for turbulent +! kinetic energy. +! +! AKP_BAK Background vertical mixing coefficient (m2/s) for turbulent +! generic statistical field, "psi". +! +! TKENU2 Lateral, harmonic, constant, mixing coefficient (m2/s) for +! turbulent closure variables. +! +! TKENU4 Lateral, biharmonic, constant mixing coefficient (m4/s) for +! turbulent closure variables. +! +!------------------------------------------------------------------------------ +! Generic length-scale turbulence closure parameters. +!------------------------------------------------------------------------------ +! +! GLS_P Stability exponent (nondimensional). +! +! GLS_M Turbulent kinetic energy exponent (nondimensional). +! +! GLS_N Turbulent length scale exponent (nondimensional). +! +! GLS_Kmin Minimum value of specific turbulent kinetic energy +! +! GLS_Pmin Minimum Value of dissipation. +! +! Closure independent constraint parameters (nondimensional): +! +! GLS_CMU0 Stability coefficient. +! +! GLS_C1 Shear production coefficient. +! +! GLS_C2 Dissipation coefficient. +! +! GLS_C3M Buoyancy production coefficient (minus). +! +! GLS_C3P Buoyancy production coefficient (plus). +! +! GLS_SIGK Constant Schmidt number (nondimensional) for turbulent +! kinetic energy diffusivity. +! +! GLS_SIGP Constant Schmidt number (nondimensional) for turbulent +! generic statistical field, "psi". +! +! Suggested values for various parameterizations: +! +! k-kl k-epsilon k-omega gen +! +! GLS_P = 0.d0 3.0d0 -1.0d0 2.0d0 +! GLS_M = 1.d0 1.5d0 0.5d0 1.0d0 +! GLS_N = 1.d0 -1.0d0 -1.0d0 -0.67d0 +! GLS_Kmin = 5.0d-6 7.6d-6 7.6d-6 1.0d-8 +! GLS_Pmin = 5.0d-6 1.0d-12 1.0d-12 1.0d-8 +! +! GLS_CMU0 = 0.5544d0 0.5477d0 0.5477d0 0.5544d0 +! GLS_C1 = 0.9d0 1.44d0 0.555d0 1.00d0 +! GLS_C2 = 0.52d0 1.92d0 0.833d0 1.22d0 +! GLS_C3M = 2.5d0 -0.4d0 -0.6d0 0.1d0 +! GLS_C3P = 1.0d0 1.0d0 1.0d0 1.0d0 +! GLS_SIGK = 1.96d0 1.0d0 2.0d0 0.8d0 +! GLS_SIGP = 1.96d0 1.30d0 2.0d0 1.07d0 +! +!------------------------------------------------------------------------------ +! Constants used in the various formulations of surface turbulent kinetic +! energy flux in the GLS. +!------------------------------------------------------------------------------ +! +! CHARNOK_ALPHA Charnock surface roughness, +! Zos: (charnok_alpha * u_star**2) / g +! +! ZOS_HSIG_ALPHA Roughness from wave amplitude, +! Zos: zos_hsig_alpha * Hsig +! +! SZ_ALPHA Surface flux from wave dissipation, +! flux: dt * sz_alpha * Wave_dissip +! +! CRGBAN_CW Surface flux due to Craig and Banner wave breaking, +! flux: dt * crgban_cw * u_star**3 +! +!------------------------------------------------------------------------------ +! Constants used in the Waves Effect on Currents formulations. +!------------------------------------------------------------------------------ +! +! WEC_ALPHA Wave dissipation action scale bounds: +! +! [0.0] All dissipation goes to breaking and none to roller +! [1.0] All dissipation goes to roller and none to breaking +! +!------------------------------------------------------------------------------ +! Constants used in the computation of momentum stress. +!------------------------------------------------------------------------------ +! +! RDRG Linear bottom drag coefficient (m/s). +! +! RDRG2 Quadratic bottom drag coefficient. +! +! Zob Bottom roughness (m). +! +! Zos Surface roughness (m). +! +!------------------------------------------------------------------------------ +! Height of atmospheric measurements for bulk fluxes parameterization. +!------------------------------------------------------------------------------ +! +! BLK_ZQ Height (m) of surface air humidity measurement. Usually, +! recorded at 10 m. +! +! BLK_ZT Height (m) of surface air temperature measurement. Usually, +! recorded at 2 or 10 m. +! +! BLK_ZW Height (m) of surface winds measurement. Usually, recorded +! at 10 m. +! +!------------------------------------------------------------------------------ +! Wetting and drying parameters. +!------------------------------------------------------------------------------ +! +! DCRIT Minimum depth (m) for wetting and drying. +! +!------------------------------------------------------------------------------ +! Jerlov Water type. +!------------------------------------------------------------------------------ +! +! WTYPE Jerlov water type array index used to model the light absorption +! with a double exponential function (Paulson and Simpson, +! 1977). The classification ranges from clear open ocean +! waters (type I) to dark turbulent coastal waters (type 7). +! +! Array Jerlov +! Index Water Type Examples +! ----- ---------- -------- +! +! 1 I Open Pacific +! 2 IA Eastern Mediterranean, Indian Ocean +! 3 IB Western Mediterranean, Open Atlantic +! 4 II Coastal waters, Azores +! 5 III Coastal waters, North Sea +! 6 1 Skagerrak Strait +! 7 3 Baltic +! 8 5 Black Sea +! 9 7 Dark coastal water +! +!------------------------------------------------------------------------------ +! Body-force parameters. Used when CPP option BODYFORCE is activated. +!------------------------------------------------------------------------------ +! +! LEVSFRC Deepest level to apply surface momentum stress as a body-force. +! +! LEVBFRC Shallowest level to apply bottom momentum stress as a body-force. +! +!------------------------------------------------------------------------------ +! Vertical S-coordinates parameters. +!------------------------------------------------------------------------------ +! +! The parameters below must be consistent in all input fields associated with +! the vertical grid. The same vertical grid transformation (depths) needs to +! be used when preparing initial conditions, boundary conditions, climatology, +! observations, and so on. Please check: +! +! https://www.myroms.org/wiki/index.php/Vertical_S-coordinate +! +! for details, rules and examples. +! +! +! Vtransform Vertical transformation equation: +! +! (1) Original formulation (Shchepetkin and McWilliams, 2005), +! Vtransform=1 (In ROMS since 1999) +! +! z(x,y,s,t)=Zo(x,y,s)+zeta(x,y,t)*[1+Zo(x,y,s)/h(x,y)] +! +! where +! +! Zo(x,y,s)=hc*s+[h(x,y)-hc]*C(s) +! +! (2) Improved formulation (A. Shchepetkin, 2005), +! Vtransform=2 +! +! z(x,y,s,t)=zeta(x,y,t)*[zeta(x,y,t)+h(x,y)]*Zo(x,y,s) +! +! where +! +! Zo(x,y,s)=[hc*s(k)+h(x,y)*C(k)]/[hc+h(x,y)] +! +! The true sigma-coordinate system is recovered as hc goes +! to INFINITY. This is useful when configuring applications +! with flat bathymetry and uniform level thickness. +! Practically, you can achieve this by setting: +! +! THETA_S = 0.0d0 +! THETA_B = 0.0d0 +! TCLINE = 1.0d+17 (a large number) +! +! +! Vstretching Vertical stretching function, C(s): +! +! (1) Original function (Song and Haidvogel, 1994), +! Vstretching=1 +! +! C(s)=(1-theta_b)*[SINH(s*theta_s)/SINH(theta_s)]+ +! theta_b*[-0.5+0.5*TANH(theta_s*(s+0.5))/ +! TANH(0.5*theta_s)] +! +! (2) A. Shchepetkin (2005) function, +! Vstretching=2 +! +! C(s)=Cweight*Csur(s)+(1-Cweight)*Cbot(s) +! +! where +! +! Csur(s)=[1-COSH(theta_s*s)]/[COSH(theta_s)-1] +! +! Cbot(s)=-1+[1-SINH(theta_b*(s+1))]/SINH(theta_b) +! +! Cweight=(s+1)**alpha* +! (1+(alpha/beta)*(1-(s+1)**beta)) +! +! (3) R. Geyer function for shallow sediment applications, +! Vstretching=3 +! +! C(s)=Cweight*Cbot(s)+(1-Cweight)*Csur(s) +! +! where +! +! Csur(s)=-LOG(COSH(Hscale*ABS(s)** alpha))/ +! LOG(COSH(Hscale)) +! +! Cbot(s)= LOG(COSH(Hscale*(s+1)** beta))/ +! LOG(COSH(Hscale))-1 +! +! Cweight=0.5*(1-TANH(Hscale*(s+0.5)) +! +! (4) A. Shchepetkin (2010) improved double stretching function, +! Vstretching=4 +! +! C(s)=[1-COSH(theta_s*s)]/[COSH(theta_s)-1] +! +! with bottom refinement +! +! C(s)=[EXP(theta_b*C(s))-1]/[1-EXP(-theta_b)] +! +! The resulting double transformation is continuous with +! respect control parameters theta_s and theta_b with a +! meaningful range of: +! +! 0 < theta_s <= 10.0 +! 0 <= theta_b <= 4.0 +! +! (5) Souza et al. (2015) quadratic Legendre polynomial function +! that allows higher resolution near the surface, +! Vstretching=5. It is similar to Vstretching=4, but the +! fractional stretched vertical coordinate (s) is re-defined +! as: +! +! s(k)=- [(k*k - 2*k*N + k + N*N - N) / (N*N - N)] +! - weight * [(k*k - k*N) / (1 - N)] +! +! at vertical W-points, k=0,...,N and weight=0.01. To get +! the equation at vertical RHO-points, replace k with k-0.5. +! +! Many other stretching functions (Vstretching>5) are possible +! provided that: +! +! * C(s) is a dimensionless, nonlinear, monotonic function. +! * C(s) is a continuous differentiable function, or +! a differentiable piecewise function with smooth transition. +! * The stretching vertical coordinate ,s, is constrained +! between -1 <= s <= 0, with s=0 corresponding to the +! free-surface and s=-1 corresponding to the bathymetry. +! * Similarly, the stretching function, C(s), is constrained +! between -1 <= C(s) <= 0, with C(0)=0 corresponding to the +! free-surface and C(-1)=-1 corresponding to the bathymetry. +! +! These functions are coded in routine "Utility/set_scoord.F". +! +! Due to its functionality and properties, the default and recommended vertical +! coordinates transformation is: +! +! Vtransform = 2 +! Vstretching = 4 +! +! +! THETA_S S-coordinate surface control parameter. The range of optimal +! values depends on the vertical stretching function, C(s). +! +! THETA_B S-coordinate bottom control parameter. The range of optimal +! values depends on the vertical stretching function, C(s). +! +! TCLINE Critical depth (hc) in meters (positive) controlling the +! stretching. It can be interpreted as the width of surface or +! bottom boundary layer in which higher vertical resolution +! (levels) is required during stretching. +! +!------------------------------------------------------------------------------ +! Mean Density and background Brunt-Vaisala frequency. +!------------------------------------------------------------------------------ +! +! RHO0 Mean density (Kg/m3) used when the Boussinesq approximation +! is inferred. +! +! BVF_BAK Background Brunt-Vaisala frequency squared (1/s2). Typical +! values for the ocean range (as a function of depth) from +! 1.0E-4 to 1.0E-6. +! +!------------------------------------------------------------------------------ +! Tide Genearting Forces (TGF) parameter. +!------------------------------------------------------------------------------ +! +! Lnodal Switch to account for the slow modulation of the equilibrium +! tides constituents due primarily to the 18.6-year lunar nodal +! cycle. +! +!------------------------------------------------------------------------------ +! Time Stamps. +!------------------------------------------------------------------------------ +! +! DSTART Time stamp assigned to model initialization (days). Usually +! a Calendar linear coordinate, like modified Julian Day. For +! Example: +! +! Julian Day = 1 for Nov 25, 00:00:00 4713 BCE +! modified Julian Day = 1 for May 24, 00:00:00 1968 GMT +! Days since Jan 1, 2000 = 988.5 for Sep 15, 12:00:00 2002 +! +! It is called truncated or modified Julian day because an +! offset of 2440000 needs to be added. +! +! TIDE_START Reference time origin for tidal forcing (days since application +! reference date, TIME_REF). It is defined as the time of phase +! zero when preparing the input forcing tidal boundary data. The +! tide reference time is important and often ignored parameter +! by the users. If TIDE_START=0.0, it implies that the date of +! zero phase is the same as the application date reference, +! TIME_REF. +! +! To avoid any ambiguity with the tide generating forcing in the +! pressure gradient, it is preferable if the "zero_phase_date" +! variable is available in the input tidal forcing NetCDF file. +! It is a floating-point variable of the form YYYYMMDD.dddd with +! the following metadata: +! +! double zero_phase_date +! zero_phase_date:long_name = "tidal reference date for zero phase" +! zero_phase_date:units = "days as %Y%m%d.%f" +! zero_phase_date:C_format = "%13.4f" +! zero_phase_date:FORTRAN_format = "(f13.4)" +! +! Use "forcing/add_tide_date.m" from the ROMS Matlab repository +! to add the "zero_phase_date" variable to your existing tidal +! forcing NetCDF file. It is highly recommended to use this +! approach. If such a variable is found, the TIDE_START value +! will overwritten during execution. +! +! Notice that it is possible to have different reference values +! for "zero_phase_date" and ROMS clock defined as seconds from +! reference date TIME_REF. If TIME_REF is earlier than variable +! "zero_phase_date", the frequencies (omega) to harmonic terms +! will be negative since they are computed as follows: +! +! tide_start = Rclock%tide_DateNumber(2) - +! Rclock%DateNumber(2)) +! omega = 2 * pi * (time - tide_start) / Tperiod +! +! TIME_REF Reference time (yyyymmdd.f) used to compute relative time: +! elapsed time interval since reference-time. The "units" +! attribute takes the form "time-unit since reference-time". +! This parameter also provides information about the calendar +! used: +! +! If TIME_REF = -2, model time and DSTART are in modified Julian +! days units. The "units" attribute is: +! +! 'time-units since 1968-05-23 00:00:00 GMT' (May 23, 1968) +! +! If TIME_REF = -1, model time and DSTART are in a calendar +! with 360 days in every year (30 days each month). The "units" +! attribute is: +! +! 'time-units since 0000-12-30 00:00:00' (Dec 30, 0000) +! +! If TIME_REF = 0, model time and DSTART are in a common year +! calendar with 365.25 days. The "units" attribute is: +! +! 'time-units since 0001-01-01 00:00:00' (Jan 1, 0001) +! +! If TIME_REF > 0, model time and DSTART are the elapsed time +! units since specified reference time. For example, +! TIME_REF=20020115.5 will yield the following attribute: +! +! 'time-units since 2002-01-15 12:00:00' (Jan 15, 2002) +! +!------------------------------------------------------------------------------ +! Nudging/relaxation time scales, inverse scales will be computed internally. +!------------------------------------------------------------------------------ +! +! When passive/active open boundary conditions are activated, these nudging +! values correspond to the passive (outflow) nudging time scales. +! +! TNUDG Nudging time scale (days) for active tracer variables. +! (1:NAT+NPT,1:Ngrids) values are expected. +! +! ZNUDG Nudging time scale (days) for free-surface. +! +! M2NUDG Nudging time scale (days) for 2D momentum. +! +! M3NUDG Nudging time scale (days) for 3D momentum. +! +! OBCFAC Factor between passive (outflow) and active (inflow) open +! boundary conditions. The nudging time scales for the +! active (inflow) conditions are obtained by multiplying +! the passive values by OBCFAC. If OBCFAC > 1, nudging on +! inflow is stronger than on outflow (recommended). +! +!------------------------------------------------------------------------------ +! Linear equation of State parameters. +!------------------------------------------------------------------------------ +! +! Ignoring pressure, the linear equation of state is: +! +! rho(:,:,:) = R0 - R0 * TCOEF * (t(:,:,:,:,itemp) - T0) +! + R0 * SCOEF * (t(:,:,:,:,isalt) - S0) +! +! Typical values: R0 = 1027.0 kg/m3 +! T0 = 10.0 Celsius +! S0 = 35.0 nondimensional +! TCOEF = 1.7d-4 1/Celsius +! SCOEF = 7.6d-4 1/nondimensional +! +! Notice that salinity has NO UNITS, it is nondimensional. Many +! people use PSU (Practical Salinity Unit). However, salinity +! has always been defined as a conductivity ratio and does not +! have physical units. For details, check the following forum +! post: www.myroms.org/forum/viewtopic.php?f=30&t=294 +! +! R0 Background density value (Kg/m3) used in Linear Equation of +! State. +! +! T0 Background potential temperature (Celsius) constant. +! +! S0 Background salinity (nondimensional) constant. +! +! TCOEF Thermal expansion coefficient in Linear Equation of State. +! +! SCOEF Saline contraction coefficient in Linear Equation of State. +! +!------------------------------------------------------------------------------ +! Slipperiness parameter. +!------------------------------------------------------------------------------ +! +! GAMMA2 Slipperiness variable, either 1.0 (free slip) or -1.0 (no slip). +! +!------------------------------------------------------------------------------ +! Point Sources/Sink sources activation switches. +!------------------------------------------------------------------------------ +! +! LuvSrc Logical switches (T/F) to activate momentum horizontal transport +! points Sources/Sinks. Usually it is used to turn on/off river +! runoff transport (u or v variables) in an application, +! [1:Ngrids]. +! +! In nesting applications, turn on only the grids that require +! activation and processing of momentum point Sources/Sinks. +! +! LwSrc Logical switches (T/F) to activate mass points Sources/Sinks. +! Usually, it is used to turn on/off volume vertical influx (w) +! in an application. +! +! In nesting applications, turn on only the grids that require +! activation and processing of mass influx point Sources/Sinks. +! +! LtracerSrc Logical switches (T/F) to activate tracer variables point +! Sources/Sinks. Only NAT active tracers (temperature, salinity) +! and NPT inert tracers are activated here: +! +! LtracerSrc(itemp,ng) for temperature (itemp=1) +! LtracerSrc(isalt,ng) for salinity (isalt=2) +! LtracerSrc(NAT+1,ng) for inert tracer 1 +! ... ... +! LtracerSrc(NAT+NPT,ng) for inert tracer NPT +! +! Other biological and sediment tracers switches are activated +! in their respective input scripts. +! +! In nesting applications, turn on only the grids that require +! activation and processing of tracers point Sources/Sinks. +! +! Recall that switches are usually activated to add river runoff +! as a point source. At minimum, it is necessary to specify both +! temperature and salinity for all rivers. The other tracers are +! optional. +! +! This logical switch REPLACES and ELIMINATES the need to have +! or read the variable "river_flag(river)" in the input rivers +! forcing NetCDF file: +! +! double river_flag(river) +! river_flag:long_name = "river runoff tracer flag" +! river_flag:option_0 = "all tracers are off" +! river_flag:option_1 = "only temperature" +! river_flag:option_2 = "only salinity" +! river_flag:option_3 = "both temperature and salinity" +! river_flag:units = "nondimensional" +! +! The above variable was too cumbersome and complicated when +! additional tracers are considered. However, this change is +! backward compatible. +! +! The LtracerSrc switch will be used to activate the reading of +! respective tracer variable from input river forcing NetCDF +! file. If you want to add other tracer variables (other than +! temperature and salinity) as a source for a particular +! river(s), you just need to specify such values on those +! river(s). Then, set the values to ZERO on the other river(s) +! that do NOT require such river forcing for that tracer. +! Recall that you need to specify the tracer values for all +! rivers, even if their values are zero. +! +!------------------------------------------------------------------------------ +! Logical switches to process climatology fields. The climatology fields are +! either read from a NetCDF file or set with analytical CPP options. +!------------------------------------------------------------------------------ +! +! LsshCLM Logical switch (T/F) to process sea-surface height climatology. +! The CPP option ZCLIMATOLOGY is now obsolete and replaced with +! this switch to facilitate nesting applications. Currently, +! the sea-surface height climatology, CLIMA(ng)%ssh, is NOT +! used but it is kept for future use. +! +! The nudging of SSH on the free-surface governing equation +! (vertically integrated continuity equation) is NOT allowed +! because it violates mass/volume conservation. Recall that +! the time rate of change of free-surface is computed from the +! divergence of "ubar" and "vbar". If such nudging term is +! required, it needs to be specified on the momentum equations +! for (u,v) and/or (ubar,vbar). If done on (u,v) only, its +! effects enter the 2D momentum equations via the residual +! vertically integrated forcing term. +! +! Lm2CLM Logical switch (T/F) to process 2D momentum (ubar, vbar) +! climatology. The CPP option M2CLIMATOLOGY is now obsolete +! and replaced with this switch to facilitate nesting +! applications. Currently, the CLIMA(ng)%ubarclm and +! CLIMA(ng)%vbarclm are used for sponges and nudging. If +! tidal forcing, the climatological values are adjusted to +! include tides. +! +! Lm3CLM Logical switch (T/F) to process 3D momentum climatology (u,v) +! The CPP option M3CLIMATOLOGY is now obsolete and replaced +! with this switch to facilitate nesting applications. +! Currently, the CLIMA(ng)%uclm and CLIMA(ng)%vclm are used +! for sponges and nudging. +! +! LtracerCLM Logical switches (T/F) to process active and inert tracer +! variables climatology. The CPP option TCLIMATOLOGY is now +! obsolete and replaced with these switches to facilitate +! nesting applications. Currently, the CLIMA(ng)%tclm is +! used for horizontal mixing, sponges, and nudging. +! +! Only NAT active tracers (temperature, salinity) and NPT inert +! tracers need to be specified here: +! +! LtracerCLM(itemp,ng) for temperature (itemp=1) +! LtracerCLM(isalt,ng) for salinity (isalt=2) +! LtracerCLM(NAT+1,ng) for inert tracer 1 +! ... ... +! LtracerCLM(NAT+NPT,ng) for inert tracer NPT +! +! Other biological and sediment tracers switches are specified +! in their respective input scripts. +! +! These switches also controls which climatology tracer fields +! (specially passive tracers) needs to be processed. So we +! may reduce the memory allocation for the CLIMA(ng)%tclm array. +! +!------------------------------------------------------------------------------ +! Logical switches for nudging to climatology fields. +!------------------------------------------------------------------------------ +! +! LnudgeM2CLM Logical switch (T/F) to activate the nudging of 2D momentum +! climatology. The CPP option M2CLM_NUDGING is now obsolete +! and replaced with this switch to facilitate nesting +! applications. Users also need to TURN ON the logical +! switch "Lm2CLM", described above, to process the required +! 2D momentum climatology data. This data can be set with +! analytical functions (ANA_M2CLIMA) or read from input +! climatology NetCDF file(s). +! +! The nudging coefficients CLIMA(ng)%M2nudgcof can be set +! with analytical functions in "ana_nudgcoef.h" using CPP +! option ANA_NUDGCOEF. Otherwise, it will be read from +! NetCDF file NUDNAME. +! +! LnudgeM3CLM Logical switch (T/F) to activate the nudging of 3D momentum +! climatology. The CPP option M3CLM_NUDGING is now obsolete +! and replaced with this switch to facilitate nesting +! applications. +! +! Users also need to TURN ON the logical switch "Lm3CLM", +! described above, to process the required 3D momentum +! climatology data. This data can be set with analytical +! functions (ANA_M3CLIMA) or read from input climatology +! NetCDF file(s). +! +! The nudging coefficients CLIMA(ng)%M3nudgcof can be set +! with analytical functions in "ana_nudgcoef.h" using CPP +! option ANA_NUDGCOEF. Otherwise, it will be read from +! NetCDF file NUDNAME. +! +! LnudgeTCLM Logical switches (T/F) to activate the nudging of active and +! inert tracer variables climatology. These switches also +! control which tracer variables to nudge. The CPP option +! TCLM_NUDGING is now obsolete and replaced with these +! switches to facilitate nesting applications. +! +! Only NAT active tracers (temperature, salinity) and NPT +! inert tracers need to be specified here: +! +! LnudgeTCLM(itemp,ng) for temperature (itemp=1) +! LnudgeTCLM(isalt,ng) for salinity (isalt=2) +! LnudgeTCLM(NAT+1,ng) for inert tracer 1 +! ... ... +! LnudgeTCLM(NAT+NPT,ng) for inert tracer NPT +! +! Other biological and sediment tracers switches are specified +! in their respective input scripts. +! +! User also needs to TURN ON the respective logical switches +! "LtracerCLM", described above, to process the required 3D +! tracer climatology data. This data can be set with analytical +! functions (ANA_TCLIMA) or read from input climatology +! NetCDF file(s). +! +! The nudging coefficients CLIMA(ng)%Tnudgcof can be set +! with analytical functions in "ana_nudgcoef.h" using CPP +! option ANA_NUDGCOEF. Otherwise, it will be read from +! NetCDF file NUDNAME. +! +!------------------------------------------------------------------------------ +! Adjoint sensitivity parameters. +!------------------------------------------------------------------------------ +! +! DstrS Starting day for adjoint sensitivity forcing. +! +! DendS Ending day for adjoint sensitivity forcing. +! +! The adjoint forcing is applied at every time step according +! to desired state functional stored in the adjoint sensitivity +! NetCDF file. DstrS must be less than or equal to DendS. If +! both values are zero, their values are reset internally to +! the full range of the adjoint integration. +! +! KstrS Starting vertical level of the 3D adjoint state variables whose +! sensitivity is required. +! +! KendS Ending vertical level of the 3D adjoint state variables whose +! sensitivity is required. +! +! Lstate Logical switches (TRUE/FALSE) to specify the adjoint state +! variables whose sensitivity is required. +! +! Lstate(isFsur): Free-surface +! Lstate(isUbar): 2D U-momentum +! Lstate(isVbar): 2D V-momentum +! Lstate(isUvel): 3D U-momentum +! Lstate(isVvel): 3D V-momentum +! Lstate(isWvel): 3D W-momentum +! Lstate(isTvar): Traces (NT values expected) +! +!------------------------------------------------------------------------------ +! Forcing Singular Vectors or Stochastic Optimals parameters. +!------------------------------------------------------------------------------ +! +! Fstate Logical switches (TRUE/FALSE) to specify state variables for +! which Forcing Singular Vectors or Stochastic Optimals is +! required. +! +! Fstate(isFsur): Free-surface +! Fstate(isUbar): 2D U-momentum +! Fstate(isVbar): 2D V-momentum +! Fstate(isUvel): 3D U-momentum +! Fstate(isVvel): 3D V-momentum +! Fstate(isTvar): Traces (NT values expected) +! +! Fstate(isUstr): surface U-stress +! Fstate(isVstr): surface V-stress +! Fstate(isTsur): surface tracers flux (NT values expected) +! +! SO_decay Stochastic Optimals time decorrelation scale (days) assumed +! for red noise processes. +! +! SO_sdev Stochastic Optimals surface forcing standard deviation for +! dimensionalization. +! +! SO_sdev(isFsur): Free-surface +! SO_sdev(isUbar): 2D U-momentum +! SO_sdev(isVbar): 2D V-momentum +! SO_sdev(isUvel): 3D U-momentum +! SO_sdev(isVvel): 3D V-momentum +! SO_sdev(isTvar): Traces (NT values expected) +! +! SO_sdev(isUstr): surface U-stress +! SO_sdev(isVstr): surface V-stress +! SO_sdev(isTsur): surface tracer flux (NT values expected) +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of instantaneous fields into +! HISTORY file. +!------------------------------------------------------------------------------ +! +! Hout(idUvel) Write out 3D U-velocity component. +! Hout(idVvel) Write out 3D V-velocity component. +! Hout(idu3dE) Write out 3D Eastward velocity component at RHO-points. +! Hout(idv3dN) Write out 3D Northward velocity component at RHO-points. +! Hout(idWvel) Write out 3D W-velocity component. +! Hout(idOvel) Write out 3D omega vertical velocity. +! Hout(idOvil) Write out 3D omega implicit vertical velocity. +! Hout(idUbar) Write out 2D U-velocity component. +! Hout(idVbar) Write out 2D V-velocity component. +! Hout(idu2dE) Write out 2D Eastward velocity component at RHO-points. +! Hout(idv2dN) Write out 2D Northward velocity component at RHO-points. +! Hout(idFsur) Write out free-surface. +! Hout(idBath) Write out time-dependent bathymetry. +! +! Hout(idTvar) Write out active (NAT) tracers: temperature and salinity. +! +! Hout(idpthR) Write out time-varying depths of RHO-points. +! Hout(idpthU) Write out time-varying depths of U-points. +! Hout(idpthV) Write out time-varying depths of V-points. +! Hout(idpthW) Write out time-varying depths of W-points. +! +! Hout(idUsms) Write out surface U-momentum stress. +! Hout(idVsms) Write out surface V-momentum stress. +! Hout(idUbms) Write out bottom U-momentum stress. +! Hout(idVbms) Write out bottom V-momentum stress. +! +! Hout(idUbrs) Write out current-induced, U-momentum stress. +! Hout(idVbrs) Write out current-induced, V-momentum stress. +! Hout(idUbws) Write out wind-induced, bottom U-wave stress. +! Hout(idVbws) Write out wind-induced, bottom V-wave stress. +! Hout(idUbcs) Write out bottom maximum wave and current U-stress. +! Hout(idVbcs) Write out bottom maximum wave and current V-stress. +! Hout(idUVwc) Write out bottom max wave-current stress magnitude. +! +! Hout(idUbot) Write out wind-induced, bed wave orbital U-velocity. +! Hout(idVbot) Write out wind-induced, bed wave orbital V-velocity. +! Hout(idUbur) Write out bottom U-velocity above bed. +! Hout(idVbvr) Write out bottom V-velocity above bed. +! +! Hout(idWztw) Write out WEC_VF quasi-static sea level adjustment. +! Hout(idWqsp) Write out WEC_VF quasi-static pressure. +! Hout(idWbeh) Write out WEC_VF Bernoulli head. +! +! Hout(idU2rs) Write out WEC 2D U-stress. +! Hout(idV2rs) Write out WEC 2D V-stress. +! Hout(idU3rs) Write out WEC 3D U-stress. +! Hout(idV3rs) Write out WEC 3D V-stress. +! +! Hout(idU2Sd) Write out 2D Stokes U-velocity. +! Hout(idV2Sd) Write out 2D Stokes V-velocity. +! Hout(idU3Sd) Write out 3D Stokes U-velocity. +! Hout(idV3Sd) Write out 3D Stokes V-velocity. +! Hout(idW3St) Write out 3D Stokes W-velocity. +! Hout(idW3Sd) Write out 3D Stokes omega-velocity. +! +! Hout(idWamp) Write out wave significat height. +! Hout(idWlen) Write out wave mean wavelength. +! Hout(idWlep) Write out wave peak wavelength. +! Hout(idWdir) Write out wave mean direction. +! Hout(idWdip) Write out wave peak direction. +! Hout(idWptp) Write out wave surface period. +! Hout(idWpbt) Write out wave bottom period. +! Hout(idWorb) Write out wave bottom orbital velocity. +! Hout(idWbrk) Write out wave breaking (percent). +! Hout(idUwav) Write out wave depth-averaged U-velocity. +! Hout(idVwav) Write out wave depth-averaged V-velocity. +! Hout(idWdif) Write out wave dissipation from bottom friction. +! Hout(idWdib) Write out wave dissipation from breaking. +! Hout(idWdiw) Write out wave dissipation from whitecapping. +! Hout(idWdis) Write out wave roller dissipation. +! Hout(idWrol) Write out wave roller action density. +! +! Hout(idPair) Write out surface air pressure. +! Hout(idTair) Write out surface air temperature. +! Hout(idUair) Write out surface U-wind component. +! Hout(idVair) Write out surface V-wind component. +! Hout(idUaiE) Write out surface Eastward U-wind component. +! Hout(idVaiN) Write out surface Northward V-wind component. +! +! Hout(idTsur) Write out surface net heat and salt flux +! Hout(idLhea) Write out latent heat flux. +! Hout(idShea) Write out sensible heat flux. +! Hout(idLrad) Write out long-wave radiation flux. +! Hout(idSrad) Write out short-wave radiation flux. +! Hout(idEmPf) Write out E-P flux. +! Hout(idevap) Write out evaporation rate. +! Hout(idrain) Write out precipitation rate. +! +! Hout(idDano) Write out density anomaly. +! Hout(idVvis) Write out vertical viscosity coefficient. +! Hout(idTdif) Write out vertical diffusion coefficient of temperature. +! Hout(idSdif) Write out vertical diffusion coefficient of salinity. +! Hout(idHsbl) Write out depth of oceanic surface boundary layer. +! Hout(idHbbl) Write out depth of oceanic bottom boundary layer. +! Hout(idMtke) Write out turbulent kinetic energy. +! Hout(idMtls) Write out turbulent kinetic energy times length scale. +! +! Hout(inert) Write out extra inert passive tracers. +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of instantaneous fields into +! QUICKSAVE file. +!------------------------------------------------------------------------------ +! +! Qout(idUvel) Write out 3D U-velocity component. +! Qout(idVvel) Write out 3D V-velocity component. +! Qout(idu3dE) Write out 3D Eastward velocity component at RHO-points. +! Qout(idv3dN) Write out 3D Northward velocity component at RHO-points. +! Qout(idWvel) Write out 3D W-velocity component. +! Qout(idOvel) Write out 3D omega vertical velocity. +! Qout(idUbar) Write out 2D U-velocity component. +! Qout(idVbar) Write out 2D V-velocity component. +! Qout(idu2dE) Write out 2D Eastward velocity component at RHO-points. +! Qout(idv2dN) Write out 2D Northward velocity component at RHO-points. +! Qout(idFsur) Write out free-surface. +! Qout(idBath) Write out time-dependent bathymetry. +! +! Qout(idTvar) Write out active (NAT) tracers: temperature and salinity. +! +! Qout(idUsur) Write out surface U-velocity component. +! Qout(idVsur) Write out surface V-velocity component. +! Qout(idUsuE) Write out surface Eastward velocity component at RHO-points. +! Qout(idVsuN) Write out surface Northward velocity component at RHO-points. +! +! Qout(idsurT) Write out surface temperature and salinity +! +! Qout(idpthR) Write out time-varying depths of RHO-points. +! Qout(idpthU) Write out time-varying depths of U-points. +! Qout(idpthV) Write out time-varying depths of V-points. +! Qout(idpthW) Write out time-varying depths of W-points. +! +! Qout(idUsms) Write out surface U-momentum stress. +! Qout(idVsms) Write out surface V-momentum stress. +! Qout(idUbms) Write out bottom U-momentum stress. +! Qout(idVbms) Write out bottom V-momentum stress. +! +! Qout(idUbrs) Write out current-induced, U-momentum stress. +! Qout(idVbrs) Write out current-induced, V-momentum stress. +! Qout(idUbws) Write out wind-induced, bottom U-wave stress. +! Qout(idVbws) Write out wind-induced, bottom V-wave stress. +! Qout(idUbcs) Write out bottom maximum wave and current U-stress. +! Qout(idVbcs) Write out bottom maximum wave and current V-stress. +! +! Qout(idUbot) Write out wind-induced, bed wave orbital U-velocity. +! Qout(idVbot) Write out wind-induced, bed wave orbital V-velocity. +! Qout(idUbur) Write out bottom U-velocity above bed. +! Qout(idVbvr) Write out bottom V-velocity above bed. +! +! Qout(idWztw) Write out WEC_VF quasi-static sea level adjustment. +! Qout(idWqsp) Write out WEC_VF quasi-static pressure. +! Qout(idWbeh) Write out WEC_VF Bernoulli head. +! +! Qout(idU2rs) Write out WEC 2D U-stress. +! Qout(idV2rs) Write out WEC 2D V-stress. +! Qout(idU3rs) Write out WEC 3D U-stress. +! Qout(idV3rs) Write out WEC 3D V-stress. +! +! Qout(idU2Sd) Write out 2D Stokes U-velocity. +! Qout(idV2Sd) Write out 2D Stokes V-velocity. +! Qout(idU3Sd) Write out 3D Stokes U-velocity. +! Qout(idV3Sd) Write out 3D Stokes V-velocity. +! Qout(idW3St) Write out 3D Stokes W-velocity. +! Qout(idW3Sd) Write out 3D Stokes omega-velocity. +! +! Qout(idWamp) Write out wave significat height. +! Qout(idWlen) Write out wave mean wavelength. +! Qout(idWlep) Write out wave peak wavelength. +! Qout(idWdir) Write out wave mean direction. +! Qout(idWdip) Write out wave peak direction. +! Qout(idWptp) Write out wave surface period. +! Qout(idWpbt) Write out wave bottom period. +! Qout(idWorb) Write out wave bottom orbital velocity. +! Qout(idWbrk) Write out wave breaking (percent). +! Qout(idUwav) Write out wave depth-averaged U-velocity. +! Qout(idVwav) Write out wave depth-averaged V-velocity. +! Qout(idWdif) Write out wave dissipation from bottom friction. +! Qout(idWdib) Write out wave dissipation from breaking. +! Qout(idWdiw) Write out wave dissipation from whitecapping. +! Qout(idWdis) Write out wave roller dissipation. +! Qout(idWrol) Write out wave roller action density. +! +! Qout(idPair) Write out surface air pressure. +! Qout(idTair) Write out surface air temperature. +! Qout(idUair) Write out surface U-wind component. +! Qout(idVair) Write out surface V-wind component. +! Qout(idUaiE) Write out surface Eastward U-wind component. +! Qout(idVaiN) Write out surface Northward V-wind component. +! +! Qout(idTsur) Write out surface net heat and salt flux +! Qout(idLhea) Write out latent heat flux. +! Qout(idShea) Write out sensible heat flux. +! Qout(idLrad) Write out long-wave radiation flux. +! Qout(idSrad) Write out short-wave radiation flux. +! Qout(idEmPf) Write out E-P flux. +! Qout(idevap) Write out evaporation rate. +! Qout(idrain) Write out precipitation rate. +! +! Qout(idDano) Write out density anomaly. +! Qout(idVvis) Write out vertical viscosity coefficient. +! Qout(idTdif) Write out vertical diffusion coefficient of temperature. +! Qout(idSdif) Write out vertical diffusion coefficient of salinity. +! Qout(idHsbl) Write out depth of oceanic surface boundary layer. +! Qout(idHbbl) Write out depth of oceanic bottom boundary layer. +! Qout(idMtke) Write out turbulent kinetic energy. +! Qout(idMtls) Write out turbulent kinetic energy times length scale. +! +! Qout(inert) Write out inert passive tracers. +! Qout(Snert) Write out surface inert passive tracers. +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of time-averaged fields into +! AVERAGE file. +!------------------------------------------------------------------------------ +! +! Aout(idUvel) Write out 3D U-velocity component. +! Aout(idVvel) Write out 3D V-velocity component. +! Aout(idu3dE) Write out 3D Eastward velocity component at RHO-points. +! Aout(idv3dN) Write out 3D Northward velocity component at RHO-points. +! Aout(idWvel) Write out 3D W-velocity component. +! Aout(idOvel) Write out 3D omega vertical velocity. +! Aout(idUbar) Write out 2D U-velocity component. +! Aout(idVbar) Write out 2D V-velocity component. +! Aout(idu2dE) Write out 2D Eastward velocity component at RHO-points. +! Aout(idv2dN) Write out 2D Northward velocity component at RHO-points. +! Aout(idFsur) Write out free-surface. +! Aout(idBath) Write out time-dependent bathymetry. +! +! Aout(idTvar) Write out active (NAT) tracers: temperature and salinity. +! +! Aout(idUsms) Write out surface U-momentum stress. +! Aout(idVsms) Write out surface V-momentum stress. +! Aout(idUbms) Write out bottom U-momentum stress. +! Aout(idVbms) Write out bottom V-momentum stress. +! +! Aout(idUbrs) Write out current-induced, U-momentum stress. +! Aout(idVbrs) Write out current-induced, V-momentum stress. +! Aout(idUbws) Write out wind-induced, bottom U-wave stress. +! Aout(idVbws) Write out wind-induced, bottom V-wave stress. +! Aout(idUbcs) Write out bottom maximum wave and current U-stress. +! Aout(idVbcs) Write out bottom maximum wave and current V-stress. +! Aout(idUVwc) Write out bottom max wave-current stress magnitude. +! +! Aout(idUbot) Write out wind-induced, bed wave orbital U-velocity. +! Aout(idVbot) Write out wind-induced, bed wave orbital V-velocity. +! Aout(idUbur) Write out bottom U-velocity above bed. +! Aout(idVbvr) Write out bottom V-velocity above bed. +! +! Aout(idWztw) Write out WEC_VF quasi-static sea level adjustment. +! Aout(idWqsp) Write out WEC_VF quasi-static pressure. +! Aout(idWbeh) Write out WEC_VF Bernoulli head. +! +! Aout(idU2rs) Write out WEC 2D U-stress. +! Aout(idV2rs) Write out WEC 2D V-stress. +! Aout(idU3rs) Write out WEC 3D U-stress. +! Aout(idV3rs) Write out WEC 3D V-stress. +! +! Aout(idU2Sd) Write out 2D Stokes U-velocity. +! Aout(idV2Sd) Write out 2D Stokes V-velocity. +! Aout(idU3Sd) Write out 3D Stokes U-velocity. +! Aout(idV3Sd) Write out 3D Stokes V-velocity. +! Aout(idW3St) Write out 3D Stokes W-velocity. +! Aout(idW3Sd) Write out 3D Stokes omega-velocity. +! +! Aout(idWamp) Write out wave significat height. +! Aout(idWlen) Write out wave mean wavelength. +! Aout(idWlep) Write out wave peak wavelength. +! Aout(idWdir) Write out wave mean direction. +! Aout(idWdip) Write out wave peak direction. +! Aout(idWptp) Write out wave surface period. +! Aout(idWpbt) Write out wave bottom period. +! Aout(idWorb) Write out wave bottom orbital velocity. +! Aout(idWbrk) Write out wave breaking (percent). +! Aout(idUwav) Write out wave depth-averaged U-velocity. +! Aout(idVwav) Write out wave depth-averaged V-velocity. +! Aout(idWdif) Write out wave dissipation from bottom friction. +! Aout(idWdib) Write out wave dissipation from breaking. +! Aout(idWdiw) Write out wave dissipation from whitecapping. +! Aout(idWdis) Write out wave roller dissipation. +! Aout(idWrol) Write out wave roller action density. +! +! Aout(idPair) Write out surface air pressure. +! Aout(idTair) Write out surface air temperature. +! Aout(idUair) Write out surface U-wind component. +! Aout(idVair) Write out surface V-wind component. +! Aout(idUaiE) Write out surface Eastward U-wind component. +! Aout(idVaiN) Write out surface Northward V-wind component. +! +! Aout(idTsur) Write out surface net heat and salt flux +! Aout(idLhea) Write out latent heat flux. +! Aout(idShea) Write out sensible heat flux. +! Aout(idLrad) Write out long-wave radiation flux. +! Aout(idSrad) Write out short-wave radiation flux. +! Aout(idevap) Write out evaporation rate. +! Aout(idrain) Write out precipitation rate. +! +! Aout(idDano) Write out density anomaly. +! Aout(idVvis) Write out vertical viscosity coefficient. +! Aout(idTdif) Write out vertical diffusion coefficient of temperature. +! Aout(idSdif) Write out vertical diffusion coefficient of salinity. +! Aout(idHsbl) Write out depth of oceanic surface boundary layer. +! Aout(idHbbl) Write out depth of oceanic bottom boundary layer. +! +! Aout(id2dRV) Write out 2D relative vorticity (vertically integrated). +! Aout(id3dRV) Write out 3D relative vorticity. +! Aout(id2dPV) Write out 2D potential vorticity (shallow water). +! Aout(id3dPV) Write out 3D potential vorticity. +! +! Aout(idu3dD) Write out detided 3D U-velocity. +! Aout(idv3dD) Write out detided 3D V-velocity. +! Aout(idu2dD) Write out detided 2D U-velocity. +! Aout(idv2dD) Write out detided 2D V-velocity. +! Aout(idFsuD) Write out detided free-surface +! +! Aout(idTrcD) Write out detided temperature and salinity. +! +! Aout(idHUav) Write out u-volume flux, Huon. +! Aout(idHVav) Write out v-volume flux, Hvom. +! Aout(idUUav) Write out quadratic term. +! Aout(idUVav) Write out quadratic term. +! Aout(idVVav) Write out quadratic term. +! Aout(idU2av) Write out quadratic term. +! Aout(idV2av) Write out quadratic term. +! Aout(idZZav) Write out quadratic term. +! +! Aout(idTTav) Write out quadratic active and inert tracers terms. +! Aout(idUTav) Write out quadratic active and inert tracers terms. +! Aout(idVTav) Write out quadratic active and inert tracers terms. +! Aout(iHUTav) Write out active and inert tracer u-volume flux, . +! Aout(iHVTav) Write out active and inert tracer v-volume flux, . +! +! Aout(inert) Write out extra inert passive tracers. +! +!------------------------------------------------------------------------------ +! Logical switches (T/F) to activate writing of time-averaged fields into +! DIAGNOSTIC file. +!------------------------------------------------------------------------------ +! +! Time-averaged, 2D momentum (ubar,vbar) diagnostic terms: +! (if DIAGNOSTICS_UV) +! +! Dout(M2rate) Write out acceleration. +! Dout(M2pgrd) Write out pressure gradient. +! Dout(M2fcor) Write out Coriolis force, if UV_COR. +! Dout(M2hadv) Write out horizontal total advection, if UV_ADV. +! Dout(M2xadv) Write out horizontal XI-advection, if UV_ADV. +! Dout(M2yadv) Write out horizontal ETA-advection, if UV_ADV. +! Dout(M2hvis) Write out horizontal total viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M2xvis) Write out horizontal XI-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M2yvis) Write out horizontal ETA-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M2sstr) Write out surface stress. +! Dout(M2bstr) Write out bottom stress +! +! Time-averaged, 3D momentum (u,v) diagnostic terms: +! (if SOLVE3D and DIAGNOSTICS_UV) +! +! Dout(M3rate) Write out acceleration. +! Dout(M3pgrd) Write out pressure gradient. +! Dout(M3fcor) Write out Coriolis force, if UV_COR. +! Dout(M3hadv) Write out horizontal total advection, if UV_ADV. +! Dout(M3xadv) Write out horizontal XI-advection, if UV_ADV. +! Dout(M3yadv) Write out horizontal ETA-advection, if UV_ADV. +! Dout(M3hvis) Write out horizontal total viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M3xvis) Write out horizontal XI-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M3yvis) Write out horizontal ETA-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M3yvis) Write out horizontal ETA-viscosity, if UV_VIS2 or UV_VIS4. +! Dout(M3vvis) Write out vertical viscosity. +! +! Time-averaged, Waves Effect on Currents diagnostic terms: +! (if SOLVE3D, WEC, WEC_VF, and DIAGNOSTICS_UV) +! +! Dout(M2hjvf) Write out 2D horizontal J vortex force. +! Dout(M2kvrf) Write out 2D K vortex force. +! Dout(M2fsco) Write out 2D Stokes Coriolis. +! Dout(M2sstm) Write out 2D surface streaming. +! Dout(M2bstm) Write out 2D bottom streaming. +! Dout(M2wrol) Write out 2D wave roller acceleration. +! Dout(M2wbrk) Write out 2D wave breaking. +! Dout(M2zeta) Write out 2D Eulerian sea level adjustment. +! Dout(M2zetw) Write out 2D quasi-static sea level adjustment. +! Dout(M2zqsp) Write out 2D quasi-static sea level pressure adjustment. +! Dout(M2zbeh) Write out 2D Bernoulli head adjustment. +! Dout(M2fsgr) Write out 2D seagrass drag force. +! +! Dout(M3hjvf) Write out 3D horizontal J vortex force. +! Dout(M3vjvf) Write out 3D vertical J vortex force. +! Dout(M3kvrf) Write out 3D K vortex force. +! Dout(M3fsco) Write out 3D Stokes Coriolis. +! Dout(M3sstm) Write out 3D surface streaming. +! Dout(M3bstm) Write out 3D bottom streaming. +! Dout(M3wrol) Write out 3D wave roller acceleration. +! Dout(M3wbrk) Write out 3D wave breaking. +! Dout(M3fsgr) Write out 3D seagrass drag force. +! +! Time-averaged, active (temperature and salinity) and passive (inert) tracer +! diagnostic terms, [1:NAT+NPT,Ngrids] values expected: +! (if SOLVE3D and DIAGNOSTICS_TS) +! +! Dout(iTrate) Write out time rate of change. +! Dout(iThadv) Write out horizontal total advection. +! Dout(iTxadv) Write out horizontal XI-advection. +! Dout(iTyadv) Write out horizontal ETA-advection. +! Dout(iTvadv) Write out vertical advection. +! Dout(iThdif) Write out horizontal total diffusion, if TS_DIF2 or TS_DIF4. +! Dout(iTxdif) Write out horizonta1 XI-diffusion, if TS_DIF2 or TS_DIF4. +! Dout(iTydif) Write out horizontal ETA-diffusion, if TS_DIF2 or TS_DIF4. +! Dout(iTsdif) Write out horizontal S-diffusion, if TS_DIF2 or TS_DIF4 and +! rotated tensor (MIX_GEO_TS or MIX_ISO_TS). +! Dout(iTvdif) Write out vertical diffusion. +! +!------------------------------------------------------------------------------ +! Generic User parameters. +!------------------------------------------------------------------------------ +! +! NUSER Number of User parameters to consider (integer). +! +! USER Vector containing user parameters (real array). This array +! is used with the SANITY_CHECK to test the correctness of +! the tangent linear adjoint models. It contains information +! of the model variable and grid point to perturb: +! +! INT(user(1)): tangent state variable to perturb +! INT(user(2)): adjoint state variable to perturb +! [isFsur=1] free-surface +! [isUbar=2] 2D U-momentum +! [isVbar=3] 2D V-momentum +! [isUvel=4] 3D U-momentum +! [isVvel=5] 3D V-momentum +! [isTvar=6] First tracer (temperature) +! [ ... ] +! [isTvar=?] Last tracer +! +! INT(user(3)): I-index of tangent variable to perturb +! INT(user(4)): I-index of adjoint variable to perturb +! INT(user(5)): J-index of tangent variable to perturb +! INT(user(6)): J-index of adjoint variable to perturb +! INT(user(7)): K-index of tangent variable to perturb, if 3D +! INT(user(8)): K-index of adjoint variable to perturb, if 3D +! +! Set tangent and adjoint parameters to the same values +! if perturbing and reporting the same variable. +! +!------------------------------------------------------------------------------ +! I/O options and parameters. A more complete description of the available +! options can be found in WikiROMS (https://myroms.org/wiki/IO). +!------------------------------------------------------------------------------ +! +! The ROMS input and output NetCDF files can be processed using the standard +! NetCDF library developed by UNIDATA, the Parallel-IO (PIO) library developed +! at NCAR, or the SCORPIO library available in E3SM (Sreepathi et al., 2013; +! doi:10.1109/HiPC.2013.6799128). The SCORPIO library was forked from the PIO +! library several years ago, and they have evolved separately. In addition to +! the standard NetCDF library, ROMS can be compiled with either the PIO or +! SCORPIO libraries. Check www.myroms.org/wiki/External_Libraries for more +! information on how to obtain and install these libraries. The user has the +! choice to select which library is used to process input and output NetCDF +! files. For parallel I/O, we recommend using the PIO library because it is +! more efficient than the SCORPIO library in our benchmark tests. +! +! The Parallel I/O using the PIO or SCORPIO libraries is restricted to +! distributed-memory applications because it uses MPI-IO implementations +! like ROMIO. +! +! * ROMS Input and Output NetCDF library to use flag: [1 or 2] +! +! [1] Standard NetCDF3 or NetCDF4 library (Unidata) +! [2] Serial/Parallel I/O using Paralle-IO (PIO) library (MPI applications) +! +! INP_LIB Reading library flag for input NetCDF files +! +! OUT_LIB Creation/writing library flag for output NetCDF files +! +! * PIO method flag for reading/writing NetCDF files: [0,1,2,3,4] +! +! [0] parallel read and write of PnetCDF files (CDF-5 type) +! [1] parallel read and write of PnetCDF files (NetCDF3 64-bit offset type) +! [2] serial read and write of NetCDF3 files (NetCDF3 64-bit offset type) +! [3] parallel read and serial write of NetCDF4/HDF5 files (NetCDF4 type) +! [4] parallel read and write of NETCDF4/HDF5 files (NetCDF4 type) +! +! PIO_METHOD PIO library file type for reading or writing. Depending on +! the build of the PIO library, not all the I/O types are +! available. If NetCDF library does not support parallel I/O, +! PIO_METHOD=3,4 are not available. Notice that we can create +! CDF-5 type PnetCDF files (PIO_METHOD=0), but it is not +! recommended because portability and post-processing +! constraints. Currently, NetCDF4/HDF5 data compression is +! possible with PIO_METHOD=3 during serial write. +! +! * PIO library processes set-up: +! +! PIO_IOTASKS Number of MPI processors used for I/O. If I/O decomposition is +! identical to the computational decomposition, PIO_IOTASK is +! equal to NtileI*NtileJ. Typically, it is advantageous and +! highly recommended to define the I/O decomposition in smaller +! number of processes for efficiency and to avoid MPI +! communication bottlenecks. +! +! PIO_STRIDE Stride step in the MPI-rank between I/O tasks. +! +! PIO_BASE Offset for the first I/O task (usually, PIO_BASE=1). +! +! PIO_AGGREG Number of MPI-aggregators to use in intra-communication mode to +! improve MPI collective I/O performance. +! +! In intra-communications mode, all processors in OCN_COMM_WORLD +! are involved in computations. A subset or all processors does +! I/O (and also computations). The PIO_IOTASKS and PIO_STRIDE +! parameters specify the total number of I/O tasks and the stride +! between them with respect to the ROMS MPI-communicator object, +! OCN_COMM_WORLD. The optional PIO_BASE parameter is used to shift +! the first I/O task away from the first computational task. This +! is often desirable because the application's first computational +! task usually has higher memory requirements than other processes. +! If the MPI-processes are spread over several hardware nodes, it +! is highly recommended to use a value for PIO_STRIDE that scatters +! the I/O processes over all nodes. Avoid all the I/O processes +! occupying the same node. +! +! In the inter-communications (asynchronous) mode, the I/O tasks +! are a disjointed set of dedicated I/O processes and do not +! perform computations. It is possible to have several groups of +! computational units running separate models (coupling) where +! all the I/O data are sent to dedicated processes. Asynchronous +! I/O is still under development and not recommended for use at +! this time. +! +! +! * PIO rearranger methods for moving data between computational and I/O +! processes: +! +! [1] Box rearrangement +! [2] Subset rearrangement +! +! PIO_REARR Rearrangement method between computational and I/O processes. It +! provides the ability to rearrange data between computational +! and parallel I/O decompositions. +! +! In the box method, data is rearranged from computational to I/O +! processes in a continuous manner to the data ordering in the +! file. Since the ordering of data between computational and I/O +! partitions may be different, the rearrangement will require +! all-to-all MPI communications. Also, notice that each computing +! tile may transfer data to one or more I/O processes. +! +! In the subset method, each I/O process is associated with a +! subset of computing processes. The computing tile sends its data +! to a unique I/O process. The data on I/O processes may be more +! fragmented to the ordering on disk, which may increase the +! communications to the storage medium. However, the rearrangement +! scales better since all-to-all MPI communications are not +! required. +! +! * PIO rearranger MPI communication flag: +! +! [0] Point-to-Point (basic send/receive individual operations) +! [1] Collective (high-level gather/scatter grouped operations) +! +! PIO_REARRCOM Type of communications between computational to I/O processes. +! In some systems with a generic MPI library implementation, the +! Point-to-Point communications are more efficient. +! +! * PIO rearranger MPI communications direction control flag: +! +! [0] Enable computational to I/O processes, and vice versa +! [1] Enable computational to I/O processes only +! [2] Enable I/O to computational processes only +! [3] Disable flow control +! +! PIO_REARRDIR Flow control algorithm between computational and I/O processes: +! +! Optimally, MPI communications should be designed to send a modest +! number messages evenly distributed across a number of processes. +! An excessive number of messages to a single MPI-process can +! exhaust the buffer space which can affect efficiency or failure +! due to the slowdown in the retransmitting of dropped messages. +! PIO only send messages (Isend) when the receiver is ready and +! has sufficient resources. +! +! * PIO rearranger options for communications from computational to I/O +! processes (C2I): +! +! PIO_C2I_HS Logical switch (T/F) to enable C2I exchange handshake +! PIO_C2I_Send Logical switch (T/F) to enable C2I MPI-Isends +! PIO_C2I_Preq Maximum pending C2I requests +! +! * PIO rearranger options for communications from I/O to computational +! processes (I2C): +! +! PIO_I2C_HS Logical switch (T/F) to enable I2C exchange handshake +! PIO_I2C_Send Logical switch (T/F) to enable I2C MPI-Isends +! PIO_I2C_Preq Maximum pending I2C requests +! +! * NetCDF-4/HDF5 compression parameters for output files: +! +! This capability is used when both HDF5 and DEFLATE C-preprocessing +! options are activated. The user needs to compile with the NetCDF-4 +! (HDF5) and MPI libraries. File deflation cannot be used in parallel +! I/O for writing because the compression makes it impossible for the +! HDF5 library to exactly map the data to the disk location. For more +! information, check NetCDF official website: +! +! www.unidata.ucar.edu/software/netcdf +! +! NC_SHUFFLE Shuffle filter integer flag. If non-zero, turn on shuffle +! filter. +! +! NC_DEFLATE Deflate filter integer flag, If non-zero, turn on deflate +! filter at the level specified by the NC_DLEVEL parameter. +! +! NC_DLEVEL Deflate filter level parameter (integer). If NC_DEFLATE is +! non-zero, set the deflate level to this value. Must be +! between 0 and 9. +! +!------------------------------------------------------------------------------ +! Input/output NetCDF filenames (string with a maximum of 256 characters). +!------------------------------------------------------------------------------ +! +! Input filenames: +! +! GRDNAME Input grid filename. +! +! ININAME Input nonlinear initial conditions filename. It can be a +! re-start file. +! +! ITLNAME Input tangent linear model initial conditions filename. +! +! IRPNAME Input representer model initial conditions filename. +! +! IADNAME Input adjoint model initial conditions filename. +! +! FWDNAME Input forward solution fields filename. +! +! ADSNAME Input adjoint sensitivity functional filename. +! +! +! Input adjoint forcing filenames for computing observations impacts +! during the analysis-forecast cycle when RBL4DVAR_FCT_SENSITIVITY is +! activated. The files FOInameA and FOInameB are used when the forecast +! metric is defined in state-space (CPP option OBS_SPACE is off). Both +! are regular adjoint forcing files just like ADSname. +! +! (See www.myroms.org/wiki/Analysis-Forecast_Cycle_Observation_Impacts) +! +! FOInameA Forecast initialized with 4D-Var analysis (red curve) +! +! FOInameB Forecast initialized with 4D_Var background (blue curve) +! +! +! Input NetCDF filenames for the forecasts initialized from the 4D-Var +! analysis files: +! +! FCTnameA Current 4D-Var analysis cycle (red curve) +! +! FCTnameB Previous 4D-Var analysis cycle (blue curve) +! +! +! Nesting grids connectivity data: +! +! NGCNAME Input nested grids contact points information filename. This +! NetCDF file is currently generated using script: +! +! matlab/grid/contact.m +! +! from the ROMS Matlab repository. The nesting information +! is not trivial and this Matlab scripts is quite complex. See +! +! https://www.myroms.org/wiki/index.php/Nested_Grids +! https://www.myroms.org/wiki/index.php/Grid_Processing_Scripts +! +! for more information. +! +! +! Input lateral boundary conditions file(s) name: +! +! NBCFILES Number of unique boundary files per nested grid. +! +! BRYNAME Input open boundary data filename(s) per nested grid. +! +! The USER has the option to enter several filenames for the lateral +! boundary conditions variables and or split input data time records for +! each nested grid. For example, the USER may have different files for +! physical, biology, and sediment state variables. The model will scan +! the file list and will read the needed data from the first file in the +! list containing the lateral boundary variable. Therefore, the order of +! the filenames is critical. It is also possible to split input data +! time records into several NetCDF files. +! +! NBCFILES == 2 ! number of boundary files +! +! BRYNAME == my_physics_bry_year1.nc | ! physical kernel variables +! my_physics_bry_year2.nc \ +! my_biology_bry_year1.nc | ! biological tracers +! my_biology_bry_year2.nc +! +! +! Input climatology file(s) name: +! +! NCLMFILES Number of unique climatology files per nested grid. +! +! CLMNAME Input climatology data filename(s) per nested grid. +! +! The USER has the option to enter several filenames for the climatology +! variables and or split input data time records for each nested grid. +! For example, the USER may have different files for physical, biology, +! and sediment state variables. The model will scan the file list and +! will read the needed data from the first file in the list containing +! the lateral climatology variable. Therefore, the order of the filenames +! is critical. It is also possible to split input data time records into +! several NetCDF files. +! +! NCLMFILES == 2 ! number of climatology files +! +! CLMNAME == my_physics_clm_year1.nc | ! physical kernel variables +! my_physics_bry_year2.nc \ +! my_biology_bry_year1.nc | ! biological tracers +! my_biology_bry_year2.nc +! +! +! Input nudging coefficients filename: +! +! NUDNAME Input nudging coefficients filename. +! +! +! Input Sources/Sinks forcing filename: +! +! SSFNAME River runoff data. This file is now separated from the +! regular forcing files to allow manipulations over nested +! grids. A particular nesting grid may or may not have +! Sources/Sinks forcing. +! +! For example, in an application with 3 nested grids but +! with river forcing in grids 1 and 3 we would have: +! +! LuvSrc == T F T +! LtracerSrc == 2*T 2*F 2*T +! +! SSFNAME == my_rivers_grid1.nc \ +! my_rivers_grid2.nc \ +! my_rivers_grid3.nc +! +! Here, "my_rivers_grid2.nc" is a dummy name that will never +! be processed in ROMS because of the logical switches are +! FALSE the second grid. +! +! +! Input/output tidal forcing filename: +! +! TIDENAME Tidal constituents period, phase, elevation, and current data. +! This data is needed when SSH_TIDES, UV_TIDES, or both are +! activated to force tides at the open boundaries. Currently, +! in nested applications, the tidal forcing is used in the +! coarser/larger grid (ng=1). If AVERAGES_DETIDE is activated, +! several least-squares time-accumulated harmonic variables +! are written into this NetCDF file to facilitate restart for +! during long fitting simulations. +! +! +! Input forcing file(s) name: +! +! NFFILES Number of unique forcing files per nested grid. +! +! FRCNAME Input forcing fields filename per nested grid. +! +! The USER has the option to enter several filenames for forcing fields +! and or split input data time records for each nested grid. For example, +! the USER may have different files for wind products, heat fluxes, etc. +! The model will scan the file list and will read the needed data from +! the first file in the list containing the forcing field. Therefore, +! the order of the filenames is essential. It is also possible to split +! input data time records into several NetCDF files. +! +! Use a single line per entry with a continuation (\) or vertical bar (|) +! symbol after each entry, except the last one: +! +! NFFILES == 6 ! number of unique forcing files +! +! FRCNAME == my_lwrad_year1.nc | ! net longwave radiation flux +! my_lwrad_year2.nc \ +! my_swrad_year1.nc | ! solar shortwave radiation flux +! my_swrad_year2.nc \ +! my_winds_year1.nc | ! surface winds +! my_winds_year2.nc \ +! my_Pair_year1.nc | ! surface air pressure +! my_Pair_year2.nc \ +! my_Qair_year1.nc | ! surface air relative humidity +! my_Qair_year2.nc \ +! my_Tair_year1.nc | ! surface air temperature +! my_Tair_year2.nc +! +! +! Output filenames: +! +! DAINAME Output data assimilation next cycle initial conditions (4D-Var +! analysis) or restart (Ensemble Kalman Filter, EnKF) filename. +! GSTNAME Output GST analysis re-start filename. +! RSTNAME Output re-start filename. +! HISNAME Output history filename. +! QCKNAME Output quicksave filename. +! TLFNAME Output impulse forcing for tangent linear (TLM and RPM) models. +! TLMNAME Output tangent linear filename. +! ADJNAME Output adjoint filename. +! AVGNAME Output averages filename. +! HARNAME Output least-squares detiding harmonics filename. +! DIANAME Output diagnostics filename. +! STANAME Output stations filename. +! FLTNAME Output floats filename. +! +!------------------------------------------------------------------------------ +! Input ASCII parameters filenames. +!------------------------------------------------------------------------------ +! +! APARNAM Input assimilation parameters filename. +! SPOSNAM Input stations positions filename. +! FPOSNAM Input initial drifters positions filename. +! BPARNAM Input biological parameters filename. +! SPARNAM Input sediment transport parameters filename. +! USRNAME USER's input generic filename. +! diff --git a/LAKE_ERIE/Forward/stations_lake_erie.in b/LAKE_ERIE/Forward/stations_lake_erie.in new file mode 100644 index 00000000..e7cf36fa --- /dev/null +++ b/LAKE_ERIE/Forward/stations_lake_erie.in @@ -0,0 +1,363 @@ +! Station Extraction Parameters. +! +! git $Id$ +!========================================================= Hernan G. Arango === +! Copyright (c) 2002-2024 The ROMS/TOMS Group ! +! Licensed under a MIT/X style license ! +! See License_ROMS.md ! +!============================================================================== +! ! +! Input parameters can be entered in ANY order, provided that the parameter ! +! KEYWORD (usually, upper case) is typed correctly followed by "=" or "==" ! +! symbols. Any comment lines are allowed and must begin with an exclamation ! +! mark (!) in column one. Comments may appear to the right of a parameter ! +! specification to improve documentation. Comments will be ignored during ! +! reading. Blank lines are also allowed and ignored. Continuation lines in ! +! a parameter specification are allowed and must be preceded by a backslash ! +! (\). In some instances, more than one value is required for a parameter. ! +! If fewer values are provided, the last value is assigned for the entire ! +! parameter array. The multiplication symbol (*), without blank spaces in ! +! between, is allowed for a parameter specification. For example, in a two ! +! grids nested application: ! +! ! +! AKT_BAK == 2*1.0d-6 2*5.0d-6 ! m2/s ! +! ! +! indicates that the first two entries of array AKT_BAK, in fortran column- ! +! major order, will have the same value of "1.0d-6" for grid 1, whereas the ! +! next two entries will have the same value of "5.0d-6" for grid 2. ! +! ! +! In multiple levels of nesting and/or multiple connected domains step-ups, ! +! "Ngrids" entries are expected for some of these parameters. In such case, ! +! the order of the entries for a parameter is extremely important. It must ! +! follow the same order (1:Ngrids) as in the state variable declaration. The ! +! USER may follow the above guidelines for specifying his/her values. These ! +! parameters are marked by "==" plural symbol after the KEYWORD. ! +! ! +!============================================================================== +! +! Switch to control the writing of stations data within nested and/or multiple +! connected grids, [1:Ngrids]. + + Lstations == T + +! Logical switches (TRUE/FALSE) to activate writing of fields in STATION +! output file, [Sout(:,ng), ng=1, Ngrids]. + +Sout(idUvel) == F ! u 3D U-velocity +Sout(idVvel) == F ! v 3D V-velocity +Sout(idu3dE) == F ! u_eastward 3D U-eastward at RHO-points +Sout(idv3dN) == F ! v_northward 3D V-nortward at RHO-points +Sout(idWvel) == F ! w 3D W-velocity +Sout(idOvel) == F ! omega 3D omega vertical velocity +Sout(idUbar) == F ! ubar 2D U-velocity +Sout(idVbar) == F ! vbar 2D V-velocity +Sout(idu2dE) == F ! ubar_eastward 2D U-eastward at RHO-points +Sout(idv2dN) == F ! vbar_northward 2D V-northward at RHO-points +Sout(idFsur) == T ! zeta free-surface +Sout(idBath) == F ! bath time-dependent bathymetry + +Sout(idTvar) == T T ! temp, salt, ... all (NT) tracers + +Sout(idUsms) == T ! sustr surface U-stress +Sout(idVsms) == T ! svstr surface V-stress +Sout(idUbms) == F ! bustr bottom U-stress +Sout(idVbms) == F ! bvstr bottom V-stress + +Sout(idUbrs) == F ! bustrc bottom U-current stress +Sout(idVbrs) == F ! bvstrc bottom V-current stress +Sout(idUbws) == F ! bustrw bottom U-wave stress +Sout(idVbws) == F ! bvstrw bottom V-wave stress +Sout(idUbcs) == F ! bustrcwmax bottom max wave-current U-stress +Sout(idVbcs) == F ! bvstrcwmax bottom max wave-current V-stress + +Sout(idUbot) == F ! Ubot bed wave orbital U-velocity +Sout(idVbot) == F ! Vbot bed wave orbital V-velocity +Sout(idUbur) == F ! Ur bottom U-velocity above bed +Sout(idVbvr) == F ! Vr bottom V-velocity above bed + +Sout(idW2xx) == F ! Sxx_bar 2D radiation stress, Sxx component +Sout(idW2xy) == F ! Sxy_bar 2D radiation stress, Sxy component +Sout(idW2yy) == F ! Syy_bar 2D radiation stress, Syy component +Sout(idU2rs) == F ! Ubar_Rstress 2D radiation U-stress +Sout(idV2rs) == F ! Vbar_Rstress 2D radiation V-stress +Sout(idU2Sd) == F ! ubar_stokes 2D U-Stokes velocity +Sout(idV2Sd) == F ! vbar_stokes 2D V-Stokes velocity + +Sout(idW3xx) == F ! Sxx 3D radiation stress, Sxx component +Sout(idW3xy) == F ! Sxy 3D radiation stress, Sxy component +Sout(idW3yy) == F ! Syy 3D radiation stress, Syy component +Sout(idW3zx) == F ! Szx 3D radiation stress, Szx component +Sout(idW3zy) == F ! Szy 3D radiation stress, Szy component +Sout(idU3rs) == F ! u_Rstress 3D U-radiation stress +Sout(idV3rs) == F ! v_Rstress 3D V-radiation stress +Sout(idU3Sd) == F ! u_stokes 3D U-Stokes velocity +Sout(idV3Sd) == F ! v_stokes 3D V-Stokes velocity + +Sout(idWamp) == F ! Hwave wave height +Sout(idWlen) == F ! Lwave wave length +Sout(idWdir) == F ! Dwave wave direction +Sout(idWptp) == F ! Pwave_top wave surface period +Sout(idWpbt) == F ! Pwave_bot wave bottom period +Sout(idWorb) == F ! Ub_swan wave bottom orbital velocity +Sout(idWdis) == F ! Wave_dissip wave dissipation + +Sout(idPair) == T ! Pair surface air pressure +Sout(idUair) == F ! Uair surface U-wind component +Sout(idVair) == T ! Vair surface V-wind component + +Sout(idTsur) == T T ! shflux, ssflux surface net heat and salt flux +Sout(idLhea) == T ! latent latent heat flux +Sout(idShea) == T ! sensible sensible heat flux +Sout(idLrad) == T ! lwrad longwave radiation flux +Sout(idSrad) == T ! swrad shortwave radiation flux +Sout(idEmPf) == T ! EminusP E-P flux +Sout(idevap) == T ! evaporation evaporation rate +Sout(idrain) == T ! rain precipitation rate + +Sout(idDano) == F ! rho density anomaly +Sout(idVvis) == F ! AKv vertical viscosity +Sout(idTdif) == F ! AKt vertical T-diffusion +Sout(idSdif) == F ! AKs vertical Salinity diffusion +Sout(idHsbl) == T ! Hsbl depth of surface boundary layer +Sout(idHbbl) == F ! Hbbl depth of bottom boundary layer +Sout(idMtke) == F ! tke turbulent kinetic energy +Sout(idMtls) == F ! gls turbulent length scale + +! Logical switches (TRUE/FALSE) to activate writing of exposed sediment +! layer properties into STATIONS output file. + +Sout(isd50) == F ! grain_diameter mean grain diameter +Sout(idens) == F ! grain_density mean grain density +Sout(iwsed) == F ! settling_vel mean settling velocity +Sout(itauc) == F ! erosion_stress critical erosion stress +Sout(irlen) == F ! ripple_length ripple length +Sout(irhgt) == F ! ripple_height ripple height +Sout(ibwav) == F ! bed_wave_amp wave excursion amplitude +Sout(izdef) == F ! Zo_def default bottom roughness +Sout(izapp) == F ! Zo_app apparent bottom roughness +Sout(izNik) == F ! Zo_Nik Nikuradse bottom roughness +Sout(izbio) == F ! Zo_bio biological bottom roughness +Sout(izbfm) == F ! Zo_bedform bed form bottom roughness +Sout(izbld) == F ! Zo_bedload bed load bottom roughness +Sout(izwbl) == F ! Zo_wbl wave bottom roughness +Sout(iactv) == F ! active_layer_t... active layer thickness +Sout(ishgt) == F ! saltation saltation height + + +! Logical switches (TRUE/FALSE) to activate writing of ice prognostic +! variables into QUICKSAVE output file. + +Sout(idUice) == T ! Si(...,isUice) ice U-velocity +Sout(idVice) == T ! Si(...,isVice) ice V-velocity +Sout(idUiER) == F ! Si(...,isUice) ice U-eastward at RHO-points +Sout(idViNR) == F ! Si(...,isVice) ice V-northward at RHO-points +Sout(idAice) == T ! Si(...,isAice) ice concentration +Sout(idIage) == T ! Si(...,isIage) age of ice +Sout(idHice) == T ! Si(...,isHice) ice thickness +Sout(idHmel) == T ! Si(...,isHmel) melt pond water thickness +Sout(idHsno) == T ! Si(...,isHsno) snow cover thickness +Sout(idTice) == T ! Si(...,isTice) ice interior temperature +Sout(idISxx) == T ! Si(...,isISxx) internal ice stress xx-component +Sout(idISxy) == T ! Si(...,isISxy) internal ice stress xy-component +Sout(idISyy) == T ! Si(...,isISyy) internal ice stress yy-component + +Sout(idIsst) == T ! Fi(...,icIsst) ice surface temperature +Sout(idIOmf) == T ! Fi(...,icIOmf) ice-ocean mass flux +Sout(idIOfv) == T ! Fi(...,icIOfv) ice-ocean friction velocity +Sout(idIOmt) == T ! Fi(...,icIOmt) ice-ocean momentum transfer coefficient +Sout(idS0mk) == T ! Fi(...,icS0mk) under ice molecular sublayer salinity +Sout(idT0mk) == T ! Fi(...,icT0mk) under ice molecular sublayer temperature +Sout(idWdiv) == T ! Fi(...,icWdiv) ice divergence rate +Sout(idW_fr) == T ! Fi(...,icW_fr) ice accretion rate by frazil ice growth +Sout(idW_ai) == T ! Fi(...,icW_ai) melt/freeze rate at Air/Ice +Sout(idW_ao) == T ! Fi(...,icW_ao) melt/freeze rate at Air/Ocean +Sout(idW_io) == T ! Fi(...,icW_io) melt/freeze rate at Ice/Ocean +Sout(idW_ro) == T ! Fi(...,icW_ro) melt/freeze rate runoff into ocean + +! Number of stations to process in each nested grid. These values are +! essential because the station arrays are dynamically allocated using +! these values, [1:Ngrids]. + + NSTATION == 8 + +! Station locations for all grids in any desired order. The horizontal +! location for a particular station may be specified in terms of fractional +! (I,J) grid pairs (FLAG=0) or (longitude,latitude) grid pairs (FLAG=1). +! Here, FLAG is a special switch and may be used for multiple purposes. +! The GRID column indicates nested grid number to process. This value must +! be one in non-nested applications. The COMMENT section is ignored during +! reading and may be used to help documentation. + +POS = GRID FLAG X-POS Y-POS COMMENT + + 1 0 30.0d0 20.0d0 + 1 0 180.0d0 30.0d0 + 1 0 25.0d0 50.0d0 + 1 0 100.0d0 50.0d0 + 1 0 180.0d0 50.0d0 + 1 0 25.0d0 80.0d0 + 1 0 100.0d0 80.0d0 + 1 0 180.0d0 80.0d0 + +! +! GLOSSARY: +! ========= +! +! This input file provides the positions of stations data to be extracted +! and written into STATIONS output file. This file is use to monitor model +! fields at frequent time intervals. It is also used to sample the model at +! observation locations in order to build the penalty function used in +! variational data assimilation. +! +!------------------------------------------------------------------------------ +! Control Switch. +!------------------------------------------------------------------------------ +! +! Lstations Switch to control the writing of station data within nested +! and/or multiple connected grids. Ngrid values are expected. +! By default this switch is set to TRUE in "mod_scalars" for +! all grids when the CPP option STATIONS is activated. The +! USER can control which grid to process by turning on/off +! this switch. +! +!------------------------------------------------------------------------------ +! Logical switches (TRUE/FALSE) to activate writing of fields in STATIONS +! output file. Except for tracer type variables, Ngrids values are expected +! for all switches. +!------------------------------------------------------------------------------ +! +! Sout(idUvel) Write out 3D U-velocity component. +! Sout(idVvel) Write out 3D V-velocity component. +! Sout(idu3dE) Write out 3D Eastward velocity component at RHO-points. +! Sout(idv3dN) Write out 3D Northward velocity component at RHO-points. +! Sout(idWvel) Write out 3D W-velocity component. +! Sout(idOvel) Write out 3D omega vertical velocity. +! Sout(idUbar) Write out 2D U-velocity component. +! Sout(idVbar) Write out 2D V-velocity component. +! Sout(idu2dE) Write out 2D Eastward velocity component at RHO-points. +! Sout(idv2dN) Write out 2D Northward velocity component at RHO-points. +! Sout(idFsur) Write out free-surface. +! Sout(idBath) Write out time-dependent bathymetry. +! +! Sout(idTvar) Write out tracer type variables, (NT,Ngrids) values are +! Expected. +! +! Sout(idUsms) Write out surface U-momentum stress. +! Sout(idVsms) Write out surface V-momentum stress. +! Sout(idUbms) Write out bottom U-momentum stress. +! Sout(idVbms) Write out bottom V-momentum stress. +! +! Sout(idUbrs) Write out current-induced, U-momentum stress. +! Sout(idVbrs) Write out current-induced, V-momentum stress. +! Sout(idUbws) Write out wind-induced, bottom U-wave stress. +! Sout(idVbws) Write out wind-induced, bottom V-wave stress. +! Sout(idUbcs) Write out bottom maximum wave and current U-stress. +! Sout(idVbcs) Write out bottom maximum wave and current V-stress. +! +! Sout(idUbot) Write out wind-induced, bed wave orbital U-velocity. +! Sout(idVbot) Write out wind-induced, bed wave orbital V-velocity. +! Sout(idUbur) Write out bottom U-velocity above bed. +! Sout(idVbvr) Write out bottom V-velocity above bed. +! +! Sout(idW2xx) Write out 2D radiation stress, Sxx component. +! Sout(idW2xy) Write out 2D radiation stress, Sxy component. +! Sout(idW2yy) Write out 2D radiation stress, Syy component. +! Sout(idU2rs) Write out 2D U-radiation stress. +! Sout(idV2rs) Write out 2D V-radiation stress. +! Sout(idU2Sd) Write out 2D U-Stokes velocity. +! Sout(idV2Sd) Write out 2D V-Stokes velocity. +! +! Sout(idW3xx) Write out 3D radiation stress, Sxx component. +! Sout(idW3xy) Write out 3D radiation stress, Sxy component. +! Sout(idW3yy) Write out 3D radiation stress, Syy component. +! Sout(idW3zx) Write out 3D radiation stress, Szx component. +! Sout(idW3zy) Write out 3D radiation stress, Szy component. +! Sout(idU3rs) Write out 3D U-radiation stress. +! Sout(idV3rs) Write out 3D V-radiation stress. +! Sout(idU3Sd) Write out 3D U-Stokes velocity. +! Sout(idV3Sd) Write out 3D V-Stokes velocity. +! +! Sout(idWamp) Write out wave height. +! Sout(idWlen) Write out wave length. +! Sout(idWdir) Write out wave direction. +! Sout(idWptp) Write out wave surface period. +! Sout(idWpbt) Write out wave bottom period. +! Sout(idWorb) Write out wave bottom orbital velocity. +! Sout(idWdis) Write out wave dissipation. +! +! Sout(idPair) Write out surface air pressure. +! Sout(idUair) Write out surface U-wind component. +! Sout(idVair) Write out surface V-wind component. +! +! Sout(idTsur) Write out surface net heat and salt flux. +! Sout(idLhea) Write out latent heat flux. +! Sout(idShea) Write out sensible heat flux. +! Sout(idLrad) Write out long-wave radiation flux. +! Sout(idSrad) Write out short-wave radiation flux. +! Sout(idEmPf) Write out E-P flux. +! Sout(idevap) Write out evaporation rate. +! Sout(idrain) Write out precipitation rate. +! +! Sout(idDano) Write out density anomaly. +! Sout(idVvis) Write out vertical viscosity coefficient. +! Sout(idTdif) Write out vertical diffusion coefficient of temperature. +! Sout(idSdif) Write out vertical diffusion coefficient of salinity. +! Sout(idHsbl) Write out depth of oceanic surface boundary layer. +! Sout(idHbbl) Write out depth of oceanic bottom boundary layer. +! Sout(idMtke) Write out turbulent kinetic energy. +! Sout(idMtls) Write out turbulent kinetic energy times length scale. +! +! Sout(isd50) Write out mean grain diameter. +! Sout(idens) Write out mean grain density. +! Sout(iwsed) Write out mean settling velocity. +! Sout(itauc) Write out critical erosion stress. +! Sout(irlen) Write out ripple length. +! Sout(irhgt) Write out ripple height. +! Sout(ibwav) Write out wave excursion amplitude. +! Sout(izdef) Write out default bottom roughness. +! Sout(izapp) Write out apparent bottom roughness. +! Sout(izNik) Write out Nikuradse bottom roughness. +! Sout(izbio) Write out biological bottom roughness. +! Sout(izbfm) Write out bed form bottom roughness. +! Sout(izbld) Write out bed load bottom roughness. +! Sout(izwbl) Write out wave bottom roughness. +! Sout(iactv) Write out active layer thickness. +! Sout(ishgt) Write out saltation height. +! +!------------------------------------------------------------------------------ +! Station positions KEYWORDS. +!------------------------------------------------------------------------------ +! +! NSTATION Number of stations to process in each nested grid. Ngrids +! values are expected. These values are essential because +! the station arrays are dynamically allocated using these +! values. +! +! POS Station locations for all grids in any desired order. The +! horizontal location for a particular station can be +! specified in terms of fractional (I,J) grid pairs (FLAG=0) +! or (longitude,latitude) grid pairs (FLAG=1). Here, FLAG is +! a special switch and may be used for multiple purposes. +! The GRID column indicates nested grid number to process. +! This value must be one in non-nested applications. The +! COMMENT section is ignored during reading and may be used +! to help documentation. This locations are used to +! interpolate model data before writting to output STATIONS +! file. The stations locations are read using the following +! statement: +! +! is(1:Ngrids)=0 +! DO WHILE (.true.) +! read (unit,*,ERR=10) igrid, flag, Xpos, Ypos +! ng=MAX(1,ABS(ng)) +! is(ng)=ic(ng)+1 +! SCALARS(ng)%Sflag(is(ng))=flag +! SCALARS(ng)%SposX(is(ng))=Xpos +! SCALARS(ng)%SposY(is(ng))=Ypos +! END DO +! +! Since there is no decoding during the reading of the stations +! locations, the POS keyword must be the last one to process. +! That is, it should be at the end of the input specification. +! +!